creatskill.c
来自「C实现的MUD,对大家基本入门网络游戏很有帮助!」· C语言 代码 · 共 216 行
C
216 行
//createskill.c
/////////////////////////
//write by maxim@nju_fengxue
//mail address is to see: maxim jiang of bbs.nju.edu.cn
// 1997.12.21
////////////////////////
#include <ansi.h>
inherit F_CLEAN_UP;
#define SHUANGYIN_HAO "\""
#define HEADER_END 16
#define SPE_PRA_LINES 34
// static string *valid_types = ({
string *valid_types = ({
"unarmed",
"sword",
"blade",
// "stick",
"staff",
"club",
// "throwing",
// "force",
// "parry",
// "dodge",
// "magic",
// "spells",
"hammer",
// "move",
// "array",
"whip",
// shaolin skills
"finger",
"hand",
"cuff",
"claw",
"strike",
// "club": "棍法",
//added by maxim
// "music",
// "piano",
// "rube",
// "drum",
//add by cooler
// "base-ansha",
// "xiadu",
//add by xxs
// "spear",
// "bow",
// "arrow",
});
string *banned_name=({
" ",});
//static string *spe_skill_lvl=({
string *spe_skill_lvl=({
"0","12","20","30","40","50","60","80","100",});
//static string *spe_skill_force=({
string *spe_skill_force=({
"50","80","100","130","150","180","200","220",
});
//static string *spe_skill_unarmeddodge=({
string *spe_skill_unarmeddodge=({
"10","-10","-20","-30","-50","-60","-80","-90","-100",
});
//static string *spe_skill_unarmedparry=({
string *spe_skill_unarmedparry=({
"10","-10","-20","-30","-40","-50","-60","-70","-80",
});
//static string *spe_skill_weapondodge=({
string *spe_skill_weapondodge=({
"20","10","10","5","-5","-5","-10","-10","-10",
});
//static string *spe_skill_weaponparry=({
string *spe_skill_weaponparry=({
"20","20","10","10","5","5","5","5","5",
});
//static mapping spe_skill = ([
mapping spe_skill = ([
"action" : ({" "}),
"force" : ({"10"}),
"dodge" : ({"10"}),
"parry": ({"10"}),
"damage_type" : ({"瘀伤"}),
"lvl" : ({"10"}),
"skill_name" : ({"横空出世"}),
"skill_total_num" : ({"0"}),
"skill_en_name" : ({" "}),
"skill_ch_name" : ({" "}),
]);
//static int spe_skillnum;;
int spe_skillnum;
//it store the true name of replaced
//static string spe_skill_name;
string spe_skill_name;
//it store the basic skill name
//static string spe_skill_basename;
string spe_skill_basename;
int check_legal_id(string id);
int check_legal_name(string name);
int check_action_name(string yn);
int check_legal_basename(string name);
void skill_init_header(string skill_en_name,string skill_ch_name);
void get_zhaoshi_ch_name(string yn, object ob);
void get_zhaoshi_ch_action(string yn, object ob);
int check_skillnum_exist(object me,string skill_en_name,int skill_num);
void finish_write_skill(object ob);
int check_owner_skill(object me,string skill_en_name);
string get_header_skillchname(string file);
string get_header_skillbasename(string file);
int main(object me, string arg)
{
//1. exp limit,so skill lvl is according to the exp,if exp low,lvl is low
//2. first create the unarmed as a test,and the same will be sword,blade
//etc....
//3. arg is the skillname player want to create
//all create skill will be write as a log file
//so wizard can know what is the player's skill
//指令格式:createskill foliage_unarmed 招式数
//1)check if the exp is enough to the 招式数
//2)check if the 招式 have been enough
//3)ask player to input the skill_spe_name
//4)ask player to input the action
//so let's do it!
int skill_num,skill_num_result;
string skill_en_name,skill_ch_name;
string skill_base_name;
spe_skill_basename="";
spe_skill_name="";
spe_skillnum=0;
if(!arg)
return notify_fail("指令格式:creatskill 武功基本技能 武功英文名字 武功中文名字 第几招\n");
if( sscanf(arg, "%s %s %s %d", skill_base_name,skill_en_name,skill_ch_name,skill_num)!=4)
return notify_fail("指令格式:creatskill 武功基本技能 武功英文名字 武功中文名字 第几招\n");
//if (!wizardp(me) )
// return notify_fail("此系统暂不开放,测试中!\n");
//write("to see the skillnum is:"+skill_num+"\n");
skill_en_name=lower_case(skill_en_name);
spe_skill_basename=skill_base_name;
if(check_legal_basename(skill_base_name)==0)
return notify_fail("你输入的基本技能不存在。\n");
if(check_legal_id(skill_en_name)==0)
return 1;
spe_skill["skill_en_name"]=skill_en_name+"-"+skill_base_name+".c";
spe_skill_name=skill_en_name+"-"+skill_base_name;
//write(spe_skill_name+"\n");
//write(spe_skill_basename+"\n");
//write(spe_skill["skill_en_name"]+"\n");
if(check_legal_name(skill_ch_name)==0)
return 1;
spe_skill["skill_ch_name"]=skill_ch_name;
//write(spe_skill["skill_ch_name"]+"\n");
//so player can change the Chinese skill name when he begin to create
//only 1 招
if( skill_num!=1
&& get_header_skillchname(spe_skill["skill_en_name"])!=skill_ch_name)
return notify_fail("你输入的中文武功名称和所选的英文武功代号有矛盾。\n");
if( skill_num!=1
&& get_header_skillbasename(spe_skill["skill_en_name"])!=skill_base_name)
return notify_fail("你输入的基本技能名和所选的英文武功代号有矛盾。\n");
//here is important
if((int)me->query("skillmaxim")!=0
&& sizeof(keys(me->query("skillmaxim/"))) >3 )
return notify_fail("你最多只能创建三种高级功夫。\n");
switch( check_owner_skill(me,spe_skill["skill_en_name"])){
case 2:
return notify_fail("这个功夫在江湖中已经存在,你无法再有创新。\n");
break;
case 0: //this is right
break;
case 1:
return notify_fail("你目前只能针对这个基本技能创建一个功夫。\n");
default:
return notify_fail("请和巫师联系,所创功夫不对。\n");
}
if(skill_num < 1)
return notify_fail("你需要从第一招开始创建。\n");
if((int)me->query("combat_exp") < 2000000)
return notify_fail("你的经验值还不够。\n");
if((int)me->query("combat_exp") < (skill_num-1)*150000+1000000)
return notify_fail("你的经验值还不够。\n");
if((int)me->query_skill(spe_skill_name)!=0
&& (int)me->query_skill(spe_skill_name) < (skill_num-1)*8)
return notify_fail("你已经有的招式还不够熟练,现提高它们,然后在想新招吧。
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?