作者laechan (小太保)
看板mud_sanc
标题[wizs] base_shop.c 研究
时间Sun Jan 8 11:11:38 2012
要改之前先研究一下。
基本上每间商店都有一个 storeroom.c,每一间商店的 storeroom
都是独立的。
商店被载入时会呼叫 create_obj,用来处理 data["obj_num"] 所
设定的商店物品资料,因此,只要储存了 data["obj_num"],下次
就可交由 create_obj 函数做自动载入或手动的载入,例如..
system eq_shop save/restore
system wp_shop save/restore
但是这里要对 create_obj 函数做修正,加入 storeroom 是否为
原先的 storeroom 的判断..
新载入的 - 那就执行原先的 create_obj 函数段
旧有存在的 - 那得清空 storeroom 里面的东西再做载入
现在的重点就是储存档会不会过大的问题。因此基本上我还是比较
倾向手动的储存及回存,重点在於做回存时多做一道手续:资料的
过滤及整合,这样就不会使资料在做回存时有遗漏,例如..
回存前的 obj_num = xx1 : 50,
xx2 : 30,
xx3 : 20
做回存的 obj_num = xx1 : 40, 变少
xx3 : 40, 变多
xx4 : 60, 新资料
↓ 经过整合
回存後的 obj_num = xx1 : 50, 采较多的
xx2 : 30, 采较多的
xx3 : 40, 采较多的
xx4 : 60, 新加入的资料
实际做法就是 restore 前先读 data["obj_num"], 然後将其拆成
两个 mixed 资料(以免资料消失或变更), 之後做回存, 再比对资
料, 中间可能得用一下 call_out 做一些延迟处理.
因此,新商店需要改的就是增加 save_room 及 restore_room 两
个函数,以及将它们搬离 /d 其它都不需要动,然後更改 system
指令新增语法即可。
这个有空会试做看看,而且我也想实验反馈系统。
Laechan
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 223.141.173.94
1F:→ laechan :norr 我想放在你目录下的 room/ 应该是可行的 01/08 11:17
2F:→ laechan :room/ 或 special/ . 我目录太多东西了 01/08 11:17
3F:推 hlead :嗯..是可以,可是通常新开个资料夹存会比较好吧... 01/08 12:07
4F:→ hlead :像是 storeroom/ 之类的... 01/08 12:07
5F:→ hlead :我觉得可以储存部分可以写在clean_up()之类..avert 01/08 12:09
6F:→ laechan :对了其实还有一件事,就是储存档是可以跟物件档不同目 01/08 12:24
7F:→ laechan :录的,所以recall处的商店或许就不需要搬目录 01/08 12:24
8F:→ laechan :写在 clean_up 我怕日後物件资料太大时会出问题 01/08 12:24
9F:→ hlead :我想说clean_up执行率比较不频繁..avert 01/08 13:20
10F:→ laechan :如果它执行失败会造成系统的reborn出问题,这部份你可 01/08 18:41
11F:→ laechan :以参考写在 weather_d.c 的 clean_up. 以前圣殿出过 01/08 18:42
12F:→ laechan :一种error就是这麽来的(某些物件突然载入失败,但重新 01/08 18:42
13F:→ laechan :手动update会好) 01/08 18:42
14F:→ hlead :嗯,我是指stoneroom的自动clean_up.. 01/08 18:52
15F:→ hlead :自动 -> 自定 01/08 18:52
16F:→ laechan :storeroom 是 new 出来的物件这样比较不保险 01/08 19:13
17F:→ hlead :soga.. 01/08 22:55
18F:→ laechan :对了顺便确定一下有此需要的商店,recall n,s, 还有哪 01/09 11:03
19F:→ hlead :我觉得目前就那两个就差不多了吧... 01/09 13:03
20F:→ hlead :硬要算的话,可能在加上阿里达镇跟极北乌罗村的吧.. 01/09 13:03
21F:→ laechan :ok.. 01/09 13:43