mud_sanc 板


LINE

我以前寫過 kof 的報名系統,不過不好寫,這個簡單多了。 寫這個系統就是我今天的主要 coding 項目,今天的配菜音樂 The mass https://www.youtube.com/watch/?v=V96rMwfp5w4 // tugwar.c // 拔河比賽報名及比賽系統 // LAechan@Sanc add in 2013/02/26 #define MAX_MEMBERS 3 inherit ROOM; mapping tug_data=([]); mixed tug_members=({}); void create() { ::create(); seteuid(getuid(this_object())); if(file_exists(__DIR__+"tugwar.o")) restore_object(__DIR__+"tugwar"); else { set("short","= 拔河大賽報名處 ="); set("long","@@query_long"); set("light",1); set("item_desc/note",@LONG 指令說明: form 成立隊伍 disband 解散隊伍 invite 邀請加入隊伍 join 同意加入隊伍(需先受邀請) leave 離開隊伍 expel 驅逐隊員 LONG ); } } string query_long() { return @LONG 聖殿第一屆拔河大賽,即日起開始報名,欲參賽的隊伍,請 推派一人當隊長組成隊伍(form),隊員再加入(join)此隊伍   即可。其它指令可參看 look note。   預賽舉辦日期:2013/04/02~2013/04/04   決賽舉辦日期:2013/04/05 LONG ); } int save_room() { save_object(__DIR__+"tugwar"); return 1; } string find_leader(string names) { string tmp; mixed tmps; tmps=keys(tug_data); foreach(tmp in tmps) if(member_array(names,tug_data[tmp]["members"])!=-1) return tmp; return ""; } void init() { add_action("form_xxx","form"); add_action("disband_xxx","disband"); add_action("invite_xxx","invite"); add_action("join_xxx","join"); add_actiom("leave_xxx","leave"); add_action("expel_xxx","expel"); add_action("list_xxx","list"); } int form_xxx(string str) { object ppl=this_player(); string names=ppl->query("name"); if(!str || str=="") return notify_fail("語法: form 隊伍名稱.\n"); if(tug_data[names]) return notify_fail("form: 你已經有成立了一個隊伍了喔.\n"+ " 隊伍名稱:"+tug_data[names]["name"]+"。\n"); if(strlen(str)>20) return notify_fail("form: 你的隊伍名稱太長了喔.\n"); str=replace(str,ESC,""); str="/adm/daemons/color_d"->get_ansi_color(str); tug_data[names]=([]); tug_data[names]["name"]=str; tug_data[names]["time"]=time(); tug_data[names]["members"]=({}); tug_members+=({names}); save_room(); shout(HIG"【拔河大賽】"+names+" 的隊伍「"+str+"」參賽了!"NOR"\n"); return notify_fail("form: 你成立了一個叫做["+str+"]的隊伍。\n"); } int disband_xxx(string str) { object ppl=this_player(); string tmp,names=ppl->query("name"); mixed tmps=({}); int t=time(); if(!tug_data[names]) return notify_fail("disband: 你還沒有成立隊伍喔.\n"); if(tug_data[names]["time"]>t-180) return notify_fail("disband: 成立未滿三分鐘的隊伍不能解散喔.\n"); if(ppl->query_temp("time_record/tug_disband_times")<t) { ppl->set_temp("time_record/tug_disband_times",10+t); return notify_fail("隊伍名稱: "+tug_data[names]["name"]+"\n"+ "隊伍成員: "+implode(tug_data[names]["members"],",")+"\n"+ "disband: 確定要解散該隊伍的話請 10 秒內再下一次指令.\n"); } tmps=tug_data[names]["members"]; foreach(tmp in tmps) tug_members-=({tmp}); tug_members-=({names}); map_delete(tug_data,names); save_room(); shout(HIG"【拔河大賽】"+names+" 的隊伍解散了!"NOR"\n"); return notify_fail("disband: 你的隊伍解散了.\n"); } int invite_xxx(string str) { object ppl=this_player(); string tmp,names=ppl->query("name"); if(!str || str=="") return notify_fail("語法: invite 對象.\n"+ " invite -cancel 為取消你正進行的邀請.\n"); if(str=="-cancel") { ppl->delete_temp("time_record/tug_inviting"); return notify_fail("invite: 你取消了正在進行的邀請.\n"); } if(!tug_data[names]) return notify_fail("invite: 你要先成立隊伍才能邀請人加入喔.\n"); if(member_array(str,tug_data[names]["members"])!=-1) return notify_fail("invite: "+str+" 已經在你的隊伍裡了喔.\n"); if(member_array(str,tug_members)!=-1) return notify_fail("invite: "+str+" 已經在某一個隊伍裡了喔.\n"); if(tmp=ppl->query_temp("time_record/tug_inviting")) return notify_fail("invite: 你正在邀請 "+tmp+" 入隊喔.\n"+ " 如果要取消這項邀請,請下 invite -cancel.\n"); ppl->set_temp("time_record/tug_inviting",str); return notify_fail("invite: 你決定邀請 "+str+" 加入你的隊伍.\n"+ " 請告訴他這項訊息,並請他來 join "+names+".\n"); } int join_xxx(string str) { object ppl=this_player(),tar; string tmp,names=ppl->query("name"); if(!str || str=="") return notify_fail("語法: join 對象.\n"+ " 要 join 一支隊伍前需先獲得其隊長的邀請喔.\n"); if(member_array(names,tug_members)!=-1) return notify_fail("join: 你已經在某一支隊伍裡了喔.\n"); if(!tug_data[str]) return notify_fail("join: "+str+" 沒有成立隊伍喔.\n"); if(member_array(names,tug_data[str]["members"])!=-1) return notify_fail("join: 你已經在 "+str+" 的隊伍裡了喔.\n"); if(sizeof(tug_data[str]["members"])>=MAX_MEMBERS-1) return notify_fail("join: "+str+" 的隊伍已經滿 "+MAX_MEMBERS+" 人了喔.\n"); if(!tar=find_player(str)) return notify_fail("join: "+str+" 要在線上你才能 join 他喔.\n"); if(wizardp(tar) && !wizardp(ppl)) return notify_fail("join: "+str+" 要在線上你才能 join 他喔.\n"); if((string)tar->query_temp("time_record/tug_inviting")!=names) return notify_fail("join: "+str+" 必須先邀請你,你才可以 join 喔.\n"); tar->delete_temp("time_record/tug_inviting"); tug_members+=({names}); tug_data[str]["members"]+=({names}); save_room(); tell_object(tar,HIG"* "+names+" 加入了你的拔河隊伍."NOR"\n"); return notify_fail("join: 你加入了 "+names+" 的拔河隊伍.\n"); } int leave_xxx(string str) { object ppl=this_player(); string tmp,names=ppl->query("name"); int t=time(); mixed tmps=({}); if(member_array(names,tug_members)==-1) return notify_fail("leave: 你沒有成立或加入任何隊伍喔.\n"); if(tug_data[names]) return notify_fail("leave: 你是隊長,不能離隊喔.\n"); tmp=find_leader(names); if(ppl->query_temp("time_record/tug_leave_times")<t) { ppl->set_temp("time_record/tug_leave_times",10+t); return notify_fail("隊伍名稱: "+tug_data[tmp]["name"]+"\n"+ "隊長名字: "+tmp+"\n"+ "隊伍成員: "+implode(tug_data[tmp]["members"],",")+"\n"+ "leave: 確定要離開該隊伍的話請 10 秒內再下一次指令.\n"); } tug_data[tmp]["members"]-=({names}); tug_members-=({names}); save_room(); return notify_fail("disband: 你離開了 "+tmp+" 的隊伍.\n"); } int expel_xxx(string str) { object ppl=this_player(); string tmp,names=ppl->query("name"); if(!str || str=="") return notify_fail("語法: expel 對象.\n"); if(!tug_data[names]) return notify_fail("expel: 你沒有成立任何隊伍喔.\n"); if(member_array(str,tug_data[names]["members"])==-1) return notify_fail("expel: "+str+" 不在你的隊伍裡喔.\n"); tug_members-=({str}); member_array(str,tug_data[names]["members"])-=({str}); save_room(); return notify_fail("expel: 你將 "+str+" 自你的隊伍中移出.\n"); } int list_xxx(string str) { string tmp; mixed tmps; if(!str || str=="") return nofify_fail("語法: list 對象.\n"+ " list -all.\n"); if(str=="-all") { str="第一屆聖殿盃拔河比賽參賽隊伍:\n"+ "===================================\n"; tmps=keys(tug_data); foreach(tmp in tmps) str+=sprintf("%-11s %d %-s\n",tmp,sizeof(tug_data[tmp]["members"]), tug_data[tmp]["name"]); str+="===================================\n"; this_player()->more(explode(str,"\n"),1,1); return notify_fail(""); } if(member_array(str,tug_members)==-1) return notify_fail("list: "+str+" 不在任何一個隊伍裡.\n"); tmp=find_leader(str); return notify_fail("隊伍名稱: "+tug_data[tmp]["name"]+"\n"+ "隊伍隊長: "+tmp+"\n"+ "成立時間: "+tug_data[tmp]["time"]+"\n"+ "隊伍成員: "+implode(tug_data[tmp]["members"],", ")+"\n"); } --



※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 210.61.157.53 ※ 編輯: laechan 來自: 210.61.157.53 (02/26 11:48) ※ 編輯: laechan 來自: 210.61.157.53 (02/26 15:51)
1F:→ laechan :系統雛形已撰寫完畢.基本上跟寫家族差不多,就是很煩 02/26 16:00
2F:→ laechan :的一些指令(form,leave,...)必須要寫 02/26 16:01
3F:推 luna730715 :挺有趣的哦 幾個人參加啊 02/26 16:04
4F:→ laechan :3人成隊 02/26 16:29
5F:推 luna730715 :那請問是藝人多支可報名,還是一個ip一支才能攙家呢 02/26 16:37
6F:→ luna730715 :如果是藝人多汁的話,現在組隊會盪欸 02/26 16:38
7F:→ laechan :不會當啊, 不是 party 式的那種組隊 02/26 16:45
8F:推 luna730715 :恩 02/26 17:44
9F:→ Layase1 :MUD拔河 真難想像 02/28 01:10







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:Soft_Job站內搜尋

TOP