mud 板


LINE

看板 mud  RSS
[編輯中......] 編輯歷程(對 coding 有興趣的人可參考) 01._party.c 的大致框架 02.party form 與 party_members 函數 03.party disband 04.把 party_members 從 mixed 改為 mapping 05.party invite 06. // _party.c // laechan@sanc add in 2014/08/14 for tmi2_v3_改 // 1.組隊系統不採系統式寫法 // 2.組隊系統由 times_check.c 負責資料的定時儲存 // 3.組隊相關的全域函數直接讀 _party.c 的資料 #define PARTY_MAX_FORM_NAME 24 // 色碼長度也納入 #define PARTY_MSG_TITLE HIY+"[組隊] "+NOR #include <daemons.h> inherit DAEMON; mapping party_data; // 暫存資料 static mapping party_ob; static mapping party_members; void create() { mixed tmps=({}); string tmp,tmp2; object ob; ::create(); seteuid(getuid(this_object())); if(file_exists("/data/party")) restore_object("/data/party"); if(!party_data) party_data=([]); if(!party_members) party_members=([]); // 登錄 party_members 及 party_obs tmps=keys(party_data); foreach(tmp in tmps) { if(!tmps2=party_data["members"]) continue; foreach(tmp2 in tmps2) { if(!party_members[tmp2]) party_members[tmp2]=tmp; if(ob=find_player(tmp2)) party_obs[tmp2]=ob; } } } int save_room() { save_object("/data/party"); return 1; } varargs mixed party_members(string term,string ob_names,string leader_names, object ob) { switch(term) { case "add": party_members[ob_names]=leader_names; if(!ob) if(!ob=find_player(ob_names)) return 1; party_obs[ob_names]=ob; break; case "del": map_delete(party_members,ob_names); map_delete(party_obs,ob_names); break; } } int cmd_party(string str) { string names,msg; object me,tar; if(!str || str=="") return notify_fail(@LONG 語法 party form [隊伍名稱] 組成一個隊伍 party disband 解散隊伍 LONG ); me=this_player(); names=me->query("name"); // 需要 sscanf 區 if(sscanf(str,"form %s",str)==1) { if(!undefinedp(party_members[names])) return notify_fail("party: 你已經是某一組隊的隊長或隊員了喔.\n"); // 明明不是隊員卻有殘餘資料, 就消掉 if(party_data[names]) map_delete(party_data,names); if(party_obs[names]) map_delete(party_obs,names); // 這裡可放一些限制, 比方玩家等級要多少啦這類的 if(strlen(str)>PARTY_MAX_FORM_NAME) return notify_fail("party: 你要建立的隊伍名稱太長了喔.\n"); if(strsrch(str,ESC)!=-1) return notify_fail("party: 隊伍的名稱不能有控制碼喔.\n"); str=COLOR_D->get_ansi_color(str)+NOR; // 通過這裡代表玩家可 form party_data[names]=([]); party_data[names]["name"]=str; party_data[names]["members"]=({names}); party_members("add",names,names,me); // save_room(); return notify_fail("party: 你組成了一支叫做["+str+"]的隊伍了.\n"); } else if(sscanf(str,"invite %s",str)==1) { if(!party_data[names]) return notify_fail("party: 你沒有成立隊伍喔.\n"); // 明明是隊長或隊員卻無相關資料, 就補上 if(!party_obs[names]) party_obs[names]=me; // 其它限制放在這, 例如隊員的等級, 目前隊伍是否已滿 // 通過這裡代表可 invite 對方 // wiz 不可被 invite 而且一定可 join if(!wizardp(me) && wiz_lv(str)>0) return notify_fail("party: "+str+" 是 wiz 你不能 invite 喔.\n"); if(!tar=find_player(str)) return notify_fail("party: "+str+" 必須在線上你才能 invite 他喔.\n"); // 這裡可再加上例如 tar 必須與 leader 同一房間才能 invite if(!undefinedp(party_members[str])) return notify_fail("party: "+str+" 已經是某一支隊伍的成員了喔.\n"); // 明明 str 不是隊長或隊員卻有相關資料, 就刪除 if(party_data[str]) map_delete(party_data,str); if(party_obs[str]) map_delete(party_obs,str); // 通過這裡代表對方可 join // 對方已下 join, 則己方 invite 就等於入隊 if(tar->query_temp("records/party_join_"+names)) { tar->delete_temp("records/party_join_"+names); me->delete_temp("records/party_invite_"+str); party_data[names]["members"]+=({str}); party_members("add",str,names,tar); // save_room(); tell_object(tar,PARTY_MSG_TITLE+"你加入了 "+names+" 的隊伍。\n"); return notify_fail(PARTY_MSG_TITLE+str+" 加入了你的隊伍。\n"); } // 對方未下 join, 等待對方下並只傳一訊息 if(!me->query_temp("records/party_invite_"+str)) { me->set_temp("records/party_invite_"+str,1); tell_object(tar,PARTY_TITLE_MSG+names+" 邀請你加入他的隊伍。\n"+ 如果你要加入的話請下 party join "+names+"。\n"); } return notify_fail("party: 你邀請 "+str+" 加入你的隊伍。\n"); } else if(sscanf(str,"join %s",str)==1) { if(!undefinedp(party_members[names])) return notify_fail("party: 你已經有成立或是加入一支隊伍了喔。\n"); // 其它限制放在這, 例如隊員的等級, 目前隊伍是否已滿 if(undefinedp(party_data[str])) return notify_fail("party: "+str+" 不是隊長,你不能 join 他喔。\n"); if(!tar=find_player(str)) return notify_fail("party: "+str+" 必須在線上你才能 join 他喔.\n"); if(undefinedp(party_data[str])) return notify_fail("party: "+str+" 不是隊長,你不能 join 他喔。\n"); // 這裡可再加上例如 tar 必須與 leader 同一房間才能 invite // 通過這裡代表可 join 對方 } // 不需 sscanf 區 else if(str=="disband") { if(!party_data[names]) return notify_fail("party: 你沒有成立隊伍喔.\n"); // 明明是隊長或隊員卻無相關資料, 就補上 if(!party_obs[names]) party_obs[names]=me; // 通過上述就代表可以 disband msg=PARTY_MSG_TITLE+"你的隊長將你所屬的隊伍解散了。\n"; foreach(str in party_data["members"]) { if(tar=find_player(str)) tell_object(tar,msg); party_members("del",str); } msg=party_data[names]["name"]; map_delete(party_data,names); // save_room(); return notify_fail("party: 你的隊伍["+msg+"]解散了。\n"); } // 語法msg區 else { if(str=="form") return notify_fail("語法: party form [隊伍名稱].\n"+ " 隊伍名稱支援 $XXX$ 的顏色碼使用.\n"); else return notify_fail("party: 沒有這樣的語法喔.\n"); } } --



※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 210.61.157.53
※ 文章網址: http://webptt.com/m.aspx?n=bbs/mud/M.1407984004.A.E3F.html ※ 編輯: laechan (210.61.157.53), 08/15/2014 11:33:04 ※ 編輯: laechan (210.61.157.53), 08/15/2014 11:40:58 ※ 編輯: laechan (210.61.157.53), 08/18/2014 13:33:27







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