ground1.c
来自「C实现的MUD,对大家基本入门网络游戏很有帮助!」· C语言 代码 · 共 697 行 · 第 1/2 页
C
697 行
// create by snowcat.c 2/8/1997inherit __DIR__"ground0";#include <ground.h>string report_mode(){ int mode = this_room()->query("match/mode"); object who = this_player(); int i = sizeof (modes); int j; string msg = ""; msg += "比赛方式:"; for (j = 0; j < i; j++) { msg += " " + write_item(modes[j],mode==j); } msg += "\n"; msg += "[设置比赛方式:mode/m]\n\n"; return msg;}string report_teams(){ mapping teams = this_room()->query("match/teams"); object who = this_player(); int i, j, k, l; string msg = ""; if (! teams) { msg += "参赛队伍:目前还没有组织任何参赛队伍。"; } else { i = teams["number"]; 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"]+" "; k = team["number"]; for (l = 0; l < k; l++) { mapping member = team[l]; msg += member["name"]+"("+member["id"]+") "; } msg += "\n"; } } msg += "\n"; msg += "[添设参赛队伍:team/t]\n"; msg += "[修改每个队伍成员:teammember/tm]\n\n"; return msg;}int do_report1(){ string line = "-------------------------------------------------------------------\n"; string msg = line; msg += "\n大会筹备阶段:\n"; msg += report_mode(); msg += report_teams(); msg += "[所有设置完成后正式进入比赛:start]\n"; msg += "[取消现有设置重新开始:cancel]\n"; msg += "\n"; msg += line; this_player()->start_more(msg); return 1;}int do_mode (string arg){ 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(); int i = sizeof (modes); int j; string msg; string choices = ""; if (step > STEP_PREPARE) { write ("比赛已开始了,现在来修改比赛设置为时已晚了!\n\n"); return 1; } msg = "比赛方式:"; for (j = 0; j < i; j++) { msg += "\n " + to_chinese(j) + ". " + write_item(modes[j],mode==j); msg += " " + mode_hints[j]+"。"; choices += to_chinese(j); if (j < i-1) choices += "/"; } msg += "\n"; if ((! arg) || (sscanf(arg,"%d",j)!=1) || (j < 0 || j >= i)) { who->start_more(msg+"[使用 mode "+choices+" 来修改比赛方式]\n\n"); return 1; } mode = j; 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; } } if (mode == MODE_SINGLE_LT) { if (teams && teams["number"] > 1) { write ("您选择了"+modes[mode]+ "比赛方式,只需要有一队就够了!\n"); write ("现在竟然有"+chinese_number(teams["number"])+"队!\n\n"); write("[使用 mode 来改变比赛方式。]\n"); write("[使用 cancel 来重新开始新的设置。]\n\n"); return 1; } } msg = "比赛方式:"; for (j = 0; j < i; j++) { msg += "\n " + to_chinese(j) + ". " + write_item(modes[j],mode==j); msg += " " + mode_hints[j]+"。"; choices += to_chinese(j); if (j < i-1) choices += "/"; } msg += "\n"; who->start_more(msg); inform (who, "比武的方式是“"+modes[mode]+"”。\n"); this_room()->set("match/mode",mode); return 1;}mapping sort_team (mapping team){ int i, j, size = team["number"]; for (i=size-2; i>=0; i--) { reset_eval_cost(); for (j=0; j<=i; j++) { mapping member0 = team[j]; mapping member1 = team[j+1]; if (member0["combat_exp"] > member1["combat_exp"]) { team[j] = member1; team[j+1] = member0; } } } return team;}mapping find_team_member (mapping team, string id){ int i, size = team["number"]; for (i=0; i<size; i++) { mapping member = team[i]; if (member["id"] == id) return member; } return 0;}int find_member_index (mapping team, string id){ int i, size = team["number"]; for (i=0; i<size; i++) { mapping member = team[i]; if (member["id"] == id) return i; } return -1;}mapping find_teams_member (mapping teams, string id){ int i, size = teams["number"]; for (i=0; i<size; i++) { mapping member = find_team_member(teams[i],id); if (member) return member; } return 0;}mapping find_teams_team (mapping teams, string id){ int i, size = teams["number"]; for (i=0; i<size; i++) { mapping member = find_team_member(teams[i],id); if (member) return teams[i]; } return 0;}int find_team_index (mapping teams, mapping team){ int i, size = teams["number"]; for (i=0; i<size; i++) { if (teams[i] == team) return i; } return -1;}mapping add_team_member (mapping team, object ob, int no_sort){ int i, size = team["number"]; mapping member = ([ "id" : ob->query("id"), "name" : ob->query("name"), "combat_exp" : ob->query("combat_exp"), ]); team[size] = member; team["number"] = size+1; if (no_sort) return team; return sort_team (team);}mapping delete_team_member (mapping team, object ob){ int i, j = 0, size = team["number"]; for (i=0; i<size; i++) { mapping member = team[i]; if (member["id"] == ob->query("id")) team[i] = 0; else team[j++] += member; } team["number"] = size-1; return team;}int do_team(string arg){ int step = this_room()->query("match/step"); int mode = this_room()->query("match/mode"); mapping teams = this_room()->query("match/teams"); mapping existing_families; mapping new_team; mapping new_team_info; string family_name; string team_name; object who = this_player(); int i = sizeof(families), j, k; string msg = ""; string msg2 = ""; string choices = ""; string choice = " "; if (step > STEP_PREPARE) { write ("比赛已开始了,现在来修改比赛设置为时已晚了!\n\n"); return 1; } if (mode == MODE_SINGLE_SD) { write (modes[mode]+"不需要组队,直接请玩家上场即可。\n"); write ("[使用 mode 来修改比赛方式]\n\n"); return 1; } msg = "有如下门派可供选择:"; for (j = 0; j < i; j++) { choice[0] = 'a'+j; msg += "\n " + choice + ". " + families[j]; choices += choice; if (j < i-1) choices += "/"; } msg += "\n"; existing_families = ([ ]); if (! teams) { msg2 += "目前还没有组织任何参赛队伍。\n"; } else { int l = teams["number"]; if (mode == MODE_SINGLE_LT && l > 0) { write ("已经有一队了,"+modes[mode]+ "只需要有一队参赛,让选手互相挑战即可。\n"); write ("[使用 mode 来修改比赛方式]\n\n"); return 1; } msg2 += "现有"+chinese_number(l)+"组参赛队伍:\n"; for (j = 0; j < l; j++) { mapping team = teams[j]; mapping team_info = team["info"]; existing_families[team_info["family_name"]]++; msg2 += " " + to_chinese(j) + ". "+ team_info["team_name"]+" ";
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?