作者taily (准农夫)
看板mud
标题[闲聊] RO的猎人老鹰->宠物系统
时间Tue Jul 30 13:25:00 2019
实例影片:
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;
}
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 211.74.11.254 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/mud/M.1564464303.A.756.html
※ 编辑: taily (211.74.11.254 台湾), 07/30/2019 13:29:52
1F:推 neca : 推推 123.51.179.67 07/30 14:45
2F:推 LeaderKing : 推推,大心分享 223.139.40.244 07/30 15:09