作者laechan (挥泪斩马云)
看板mud_sanc
标题Re: [建议] 成就系统
时间Wed Oct 30 20:00:22 2024
最近偶尔会发生玩家资料档、天空城之家的档案、以及 times_check
资料档的遗失事件,这些共通点都是会去 call save_object 函数,
目前怀疑成就系统在呼叫这个的时候,没有设 CD 时间,导致玩家在
执行某些成就的更新动作时,可能会产生问题。
可能而已,目前还在假设阶段,但 CD 时间是必要的,这部份可参考
一些用时间控制的写法,例如在主物件中假设玩家下某指令去呼叫该
物件的某函数时
int save_room()
{
save_object(base_name(this_object()));
return 1;
}
int 某函数()
{
int t=time();
object ppl=this_player();
if(ppl->query_temp("time_record/呼叫某函数CD时间")>t)
return notify_fail("你要等一下喔。\n");
// 然後才允许执行该函数原本的东西
.
.
// 然後设定比方 CD 时间两秒
ppl->set_temp("time_record/呼叫某函数CD时间",t+2);
// 然後才做 save_object
save_room();
return 1;
}
凡会频繁呼叫到 save_room 的东西都尽可能这样做,因为每
一次写档(读档也是,但 sanc 比较少有频繁读档的情况)都需
要时间。
例如,目前已知有使用更新成就的 ai 指令,该指令及相关指
令请尽可能加上 CD 时间至少 2 秒。
例子:
/u/l/laechan/skycastle/room/skyroom.c
int wit_xxx(string str)
{
int n,t;
object ppl;
if(!str || str=="")
return notify_fail("提领挪布币语法: wit 数目.\n"+
"你的家目前共存有 "+data["nobu_money"]+" 挪布币.\n"+
"请注意,领出後的挪布币无法再存入家中.\n");
ppl=this_player();
t=time();
// 利用玩家 temp data 区的 time_record 栏位来储存
if(ppl->query_temp("time_record/wit_nobu_money")>t)
return notify_fail("wit: 你要等一下喔.\n");
// 从家拿出东西=buy
int buy(string str1)
{
// 在 玩家的天空城之家本身储存这个参数(当成他的家的全域参数)
if(query("action_time")>time())
{
write(HIR"你要等一下才能再做这个动作唷!\n"NOR);
return 1;
}
Laechan
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 114.33.120.231 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/mud_sanc/M.1730289625.A.F0E.html
※ 编辑: laechan (114.33.120.231 台湾), 10/30/2024 20:06:42
1F:→ justinj : 我是有做5秒以内可以记录,但不储存的功能.. 10/31 15:05
2F:→ justinj : 那修改成5秒内都不能archive 10/31 15:35
3F:→ justinj : 修正/std/new_ob/instance_room.c 移动时自动增加 10/31 15:36
4F:→ justinj : 修正/d/ppl/justinj/cmds/_go.c 移动时自动增加 10/31 15:36
5F:→ justinj : 修正/d/ppl/justinj/cmds/_archive.c 10/31 15:36
6F:→ justinj : 修正/d/ppl/justinj/cmds/_map3.c 10/31 15:36
7F:→ justinj : 修正/open/cmds/vobjs_d.c打死怪物时自动增加 10/31 15:36
8F:→ justinj : 修改questing的部分,以及_archive.c/_map3.c 11/01 15:08
9F:→ justinj : 其它修改都改回来..其它是用questing 11/01 15:09
10F:→ laechan : 确认一下,成就资料存在skycastle 吗? 11/01 16:02
11F:→ justinj : 目前是存在skycastle..如果要在新手村用就要抽出来 11/01 17:02
12F:→ laechan : it's ok, 目前跟nobu商量string读取长度限制的放宽 11/01 17:28
13F:→ laechan : 若有顺利放宽, da 玩家的家时应该就show得出来 11/01 17:28