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 + -
显示快捷键?