ground1.c
来自「C实现的MUD,对大家基本入门网络游戏很有帮助!」· C语言 代码 · 共 697 行 · 第 1/2 页
C
697 行
for (k = 0; k < team["number"]; k++) { mapping member = team[k]; msg2 += member["name"]+"("+member["id"]+") "; } msg2 += "\n"; } } if ((! arg) || (sscanf(arg,"%s",choice)!=1) || strlen(choice) != 1 || ((j = capitalize(choice)[0]-'A') & 0) || (j < 0 || j >= i)) { who->start_more(msg+msg2+"[使用 team "+choices+" 来增设新的参赛队伍]\n\n"); return 1; } family_name = families[j]; team_name = families[j]; if ((j=existing_families[family_name])>0) team_name += "("+chinese_number(j+1)+")"; new_team_info = ([ "family_name" : family_name, "team_name" : team_name, ]); new_team = ([ "info" : new_team_info, "number" : 0, ]); if (! teams) { i = 1; teams = ([ "number" : i]); } else { i = teams["number"]+1; teams["number"] = i; } teams += ([i-1 : new_team]); msg += "现在共有"+chinese_number(i)+"组参赛队伍:\n"; for (j = 0; j < i; j++) { mapping team = teams[j]; mapping team_info = team["info"]; msg += " " + to_chinese(j) + ". "+ team_info["team_name"]+" "; for (k = 0; k < team["number"]; k++) { mapping member = team[k]; msg += member["name"]+"("+member["id"]+") "; } msg += "\n"; } who->start_more(msg); inform (who, "设置“"+team_name+"”队。\n"); this_room()->set("match/teams",teams); return 1;}int do_teammember(string arg){ int step = this_room()->query("match/step"); mapping teams = this_room()->query("match/teams"); mapping team; mapping team_info; string choices = ""; object who = this_player(), ob; int i, j, k; string msg = "", msg2 = "", addsub, id; if (step > STEP_PREPARE) { write ("比赛已开始了,现在来修改比赛设置为时已晚了!\n\n"); return 1; } if (! teams) { msg += "目前还没有组织任何参赛队伍。\n"; msg += "请先设置好参赛队伍再往队伍里增添成员。\n"; who->start_more(msg); return 1; } else { i = teams["number"]; msg += "参赛队伍:\n"; for (j = 0; j < i; j++) { team = teams[j]; team_info = team["info"]; msg += " " + to_chinese(j) + ". "+ team_info["team_name"]+" "; for (k = 0; k < team["number"]; k++) { mapping member = team[k]; msg += member["name"]+"("+member["id"]+") "; } msg += "\n"; } } if ((! arg) || (sscanf(arg,"%d %s %s",j,addsub,id)!=3) || (addsub != "+" && addsub != "-")) { who->start_more(msg+"[使用 teammember/tm <team nb> +/- id 增减队员]\n\n"); return 1; } team = teams[j]; if (! team) { msg += "队伍"+to_chinese(j)+"?没有这个参赛队伍。\n"; who->start_more(msg+"[使用 teammember/tm <team nb> +/- id 增减队员]\n\n"); return 1; } team_info = team["info"]; if (addsub == "-" && !find_team_member(team,id)) { msg += team_info["team_name"]+"队里找不到"+id+",无法删除此人。\n"; who->start_more(msg+"[使用 teammember/tm <team nb> +/- id 增减队员]\n\n"); return 1; } ob = find_player (id); if (addsub == "+" && !ob) { msg += "在线的玩家里没有"+id+",无法将此人加入参赛队伍。\n"; who->start_more(msg+"[使用 teammember/tm <team nb> +/- id 增减队员]\n\n"); return 1; } team = teams[j]; if (addsub == "+" && ob->query("family/family_name")!=team_info["family_name"] && team_info["family_name"] != "混合门派") { msg += ob->query("name")+"的门派不属于这个“"+ team_info["team_name"]+"”队。\n"; who->start_more(msg+"[使用 teammember/tm <team nb> +/- id 增减队员]\n\n"); return 1; } if (addsub == "-") { msg2 = "从参赛队伍“"+team_info["team_name"]+ "”里将"+ob->query("name")+"删除了。\n"; team = delete_team_member(team,ob); } else { i = teams["number"]; for (j = 0; j < i; j++) { if (find_team_member(teams[j],id)) { team_info = teams[j]["info"]; msg += team_info["team_name"]+"队里已经有"+ob->query("name")+ "("+id+")了。\n"; who->start_more(msg+"[使用 teammember/tm <team nb> +/- id 增减队员]\n\n"); return 1; } } msg2 += "将"+ob->query("name")+"加入参赛队伍“"+ team_info["team_name"]+"”了。\n"; team = add_team_member(team,ob,0); } msg = team_info["team_name"]+"参赛队伍现有: "; for (k = 0; k < team["number"]; k++) { mapping member = team[k]; msg += member["name"]+"("+member["id"]+") "; } msg += "\n"; who->start_more(msg); inform (who, msg2); this_room()->set("match/teams",teams); return 1;}int do_start (){ int step = this_room()->query("match/step"); int mode = this_room()->query("match/mode"); mapping teams = this_room()->query("match/teams"); object who = this_player(); mapping team; int min = 10000, max = 0; int team_min, team_max; if (step > STEP_PREPARE) { write ("比赛已开始了!\n\n"); return 1; } if (mode == MODE_SINGLE_SD) { if (teams && teams["number"] > 0) { write ("您选择了"+modes[mode]+ "比赛方式,不需要有比赛队伍!\n"); write ("现在竟然有"+chinese_number(teams["number"])+"队!\n\n"); write("[使用 mode 来改变比赛方式。]\n"); write("[使用 cancel 来重新开始新的设置。]\n\n"); return 1; } teams = ([ "number" : 0]); } else { if (! teams || teams["number"] == 0) { write ("您选择了"+modes[mode]+ "比赛方式,需要首先组队才能开始比赛!\n\n"); write("[使用 ? 或 what 来查看如何组队。]\n\n"); return 1; } if (mode == MODE_SINGLE_LT) { if (teams["number"] > 1) { write ("您选择了"+modes[mode]+ "比赛方式,只需要有一队就够了!\n"); write ("现在竟然有"+chinese_number(teams["number"])+"队!\n\n"); write("[使用 mode 来改变比赛方式。]\n"); write("[使用 cancel 来重新开始新的设置。]\n\n"); return 1; } if (teams[0]["number"] < 2) { write (teams[0]["info"]["team_name"]+"队里只有"+ chinese_number(teams[0]["number"])+"名队员,如何比赛?\n"); write("[使用 ? 或 what 来查看如何组队。]\n\n"); return 1; } } else { int i, j; for (i = 0; i < teams["number"]; i++) { team = teams[i]; j = team["number"]; if (min > j) { team_min = i; min = j; } if (max < j) { team_max = i; max = j; } } if (min < 1) { write (teams[team_min]["info"]["team_name"]+ "队里没有队员,如何比赛?\n"); write("[使用 ? 或 what 来查看如何组队。]\n\n"); return 1; } if (min != max) { write (teams[team_min]["info"]["team_name"]+"队里只有"+ chinese_number(min)+"名队员;\n"); write (teams[team_max]["info"]["team_name"]+"队里却有"+ chinese_number(max)+"名队员;\n"); write ("如何比赛?\n"); write("[使用 ? 或 what 来查看如何组队。]\n\n"); return 1; } } } inform (who, "一切就绪,那现在就开始比赛吧。\n"); announce ("水陆大会比武正式开始!\n"); //announce ("比武的方式是“"+modes[mode]+"”。\n"); this_room()->set("match/step",STEP_FIGHT); this_room()->set("match/teams",teams); call_out ("announcing_start",3); return 1;}void cancelling (string arg, object who){ if (arg == "y" || arg == "Y") { inform (who, "取消全部设置重新开始。\n"); this_room()->delete("match"); } else { write("好,不取消现有的设置。\n"); }}int do_cancel (){ int step = this_room()->query("match/step"); object who = this_player();/* if (step > STEP_PREPARE) { write ("比赛已开始了!\n\n"); return 1; }*/ if (! this_room()->query("match")) { write ("现在这里什么都没有设置。\n\n"); return 1; } write ("如果取消比赛设置,现有的比赛数据将全部丢失!\n"); write ("您真的要取消设置重新开始?(Y/N)\n"); input_to ((: cancelling :), who); return 1;}void init1(){ add_action ("do_mode","mode"); add_action ("do_mode","m"); add_action ("do_team","team"); add_action ("do_team","t"); add_action ("do_teammember","teammember"); add_action ("do_teammember","tm"); add_action ("do_start","start"); add_action ("do_cancel","cancel");}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?