北大侠客行MUD论坛

 找回密码
 注册
搜索
热搜: 新手 wiki 升级
查看: 5752|回复: 7

【求助】帮忙看看这个文件有什么问题

[复制链接]
发表于 2009-8-21 21:40:20 | 显示全部楼层 |阅读模式
这是自己做的一个风云系统里的文件。 这个文件是一个随机宝石文件,拿到后用命令qian <定制武器> with stone就可增加定制武器的属性。可以正常增加属性,但是问题在于不能成功存储,因此quit后再进来属性就又回去了。存储操作在文件的第75行:num = weapon->save();为了调试后面加了行输出,可以看出save()总是返回0. 但是用qian命令增加属性后,手工用 call <武器>->save()又可以正常保存。 麻烦哪位大侠给看看问题在哪里,怎么解决?多谢了!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
 楼主| 发表于 2009-8-21 21:56:24 | 显示全部楼层
根据现象来看,很可能是权限的问题,就是不知道怎么解决它
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
发表于 2009-8-21 22:06:17 | 显示全部楼层
  1. ::init_item();
复制代码


不明白这里的这个语句是啥意思,代码里也没有声明其原型,一般这里不应该是setup()的么?
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
 楼主| 发表于 2009-8-21 22:12:34 | 显示全部楼层
你把 ::init_item() 当成一个空函数好了
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
发表于 2009-8-21 22:17:33 | 显示全部楼层
看下securityd的valid_write函数
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
 楼主| 发表于 2009-8-21 22:38:05 | 显示全部楼层
不是 securityd->valid_write() 的原因,因为在执行到 weapon->save() 时,根本就没有进入valid_write() 函数,而且在定制武器文件的.c文件中的 save()函数一开始设置检查点,发现根本没有进入这个save()函数,不知道这个 75行的 save() 函数指到哪里去了。。。
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
发表于 2009-8-21 22:42:33 | 显示全部楼层
哦,刚才没看你的代码,你没有inherit F_SAVE,也没有写query_save_file()指定存盘文件,怎么存啊,call的时候save的文件在哪里设的?代码里没有啊
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
 楼主| 发表于 2009-8-21 23:03:53 | 显示全部楼层

终于解决问题了。。。。

问题在于weapon->save();和destruct(stone);的执行顺序上,如果先执行 destruct(stone),没有了stone(stone在这里是 this-object()),weapon这个局部变量也就没有了,weapon这个object就变成了NULL,当然也就没了save()函数,因此只要把两行代码调换一下次序,变成: weapon->save();destruct(stone); 就OK了。
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|北大侠客行MUD ( 京ICP备16065414号-1 )

GMT+8, 2024-11-23 08:30 PM , Processed in 0.011245 second(s), 15 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表