楼主:
taily (准农夫)
2019-07-30 13:25:00实例影片: https://youtu.be/9L5XtcGnGiU
以下code是es2内建的, 只是原始码我一直没看到他的应用~
后来就写个宠物系统给他:(有兴趣的稍微看一下,应该就懂了)
mapping *read_table(string file)
{
string *line, *field, *format;
mapping *data;
int i, rn, fn;
line = explode(read_file(file), "\n");
data = ({});
for(i=0; i<sizeof(line); i++) {
if( line[i]=="" || line[i][0]=='#' ) continue;
if( !pointerp(field) ) {
field = explode( line[i], ":" );
continue;
}
if( !pointerp(format) ) {
format = explode( line[i], ":" );
continue;
}
break;
}
for( rn = 0, fn = 0; i<sizeof(line); i++) {
if( line[i]=="" || line[i][0]=='#' ) continue;
if( !fn ) data += ({ allocate_mapping(sizeof(field)) });
sscanf( line[i], format[fn], data[rn][field[fn]] );
fn = (++fn) % sizeof(field);
if( !fn ) ++rn;
}
return data;
}
之后只要在目录上多写个档案link:
//data/pet/招式表
#招式
level:message:damage
%d:%s:%d
5
闪电冲击
100
10
[劲]闪电冲击
200
15
[够劲]闪电冲击
250
那之后就会有等级,学会招式跟伤害
接下来在pet物件上写下:
mapping save_add = ([]);
void update_level()
{
object ob,me;
string message;
int i,count,level,damage;
mapping *data = read_table("/data/pet/招式表");
ob = this_object();
me = find_player( dbase["master_id"] );
for( i=0; i<sizeof(data) ; i++) {
if( dbase["level"] == data[i]["level"] ) {
level = data[i]["level"];
message = data[i]["message"];
damage = data[i]["damage"];
message_vision(HIR"\n$N领悟了一招“"+message+"”!\n"NOR,ob);
if( wizardp(me) )
message_vision(HIR"伤害值:"+damage+"等级:"+level+"。\n"NOR,me);
if( !count = sizeof(save_add) ) count = 0;
save_add[count] = data[i];
save();
break;
}
}
}
接下来, 看你是需要喂食跟还是跟玩家经验直一起成长up_level
然后领悟招式save()下来就可以了...
攻击招式perform()我是写在宠物heart_beat()身上:
int perform(object master)
{
int i,num,level,damage;
string *killer= master->query_killer();
object *enemy= master->query_enemy();
num = random(sizeof(save_add));
if( !level = save_add[num]["level"] ) return 0;
//通通打!!
for( i=0; i<sizeof(enemy); i++ ){
if( member_array( enemy[i]->query("id"), killer )!=-1 ){
damage = random(save_add[num]["damage"]/2) + save_add[num]["damage"]/2;
message_vision(HIR"轰~轰~轰~\n$N使出一招"NOR+level+NOR"级奥义"
+HIM"“"NOR+save_add[num]["message"]+HIM"”"
+HIC"让$n造成("HIR+damage+HIC")的伤害!\n"NOR,this_object(),enemy[i]);
enemy[i]->receive_damage("kee",damage);
}
}
return 1;
}