[wizs] 几个东西

楼主: laechan (挥泪斩马云)   2025-02-02 10:34:18
首先是关于虚拟物品的回收再使用机制。
过去聚焦于如何有效地回收旧有的集字活动物品,让新活动
展开时,玩家可以重新打新的集字物品。
那,在以前也曾想过是否利用 record_data 字段来储存特定
标记,后来没采用是因为若 一个活动 就采用 一个标记 的
话,这样 record_data 可能会储存过多的标记。
但就目前来说,因为活动本来就不会很多,加上record_data
使用也普及,就决定使用这样的方式。
比方,在某一次集字活动举办前,在 login 处,它会做如下
判断
if(ppl->query("record_data/集字活动相关标记")<当次活动标记)
{
ppl->set("record_data/集字活动相关标记",当次活动标记);
// 底下开始执行清除玩家所有集字物品
ppl->vobjs("del","f811");
ppl->vobjs("del","f811");
.
.
ppl->vobjs("del","f838");
}
目前 f 字头的相关物品为主:
f001 回忆花束 laechan 束 礼物类 3 10000 不可
f002 坚毅花束 laechan 束 礼物类 3 15000 不可
f301 月兔宝宝 justinj 个 节日物 99 10 不可
f302 中秋月饼 justinj 块 节日物 99 10 不可
f303 节日物_test1 justinj 块 节日物 1 10 不可
f304 节日物_test2 justinj 块 节日物 1 10 不可
f305 节日物_test3 justinj 块 节日物 1 10 不可
f801 圣诞袜 laechan 双 节日物 10 10 不可 不可
f802 圣诞节礼物箱 laechan 个 节日物 10 10 不可 不可
f803 红汤圆 laechan 颗 节日类 10 10 不可
f804 白汤圆 laechan 颗 节日类 10 10 不可
f805 金元宝 laechan 颗 节日类 10 10000 不可 不可
f806 戳戳乐券 laechan 张 节日类 1 10000 不可 不可
f807 挪布的游戏券 laechan 张 节日类 10 10 不可 不可
f811~f838 为集字
f8 目前是我在用,主要用在 节日活动(festival) 上,f00
系列为花束系列(flower),我预计会将料理系列(food) 也
使用 f,可能是 f101 起。 不同的分类大致采用不同的大
项,后面如果满了再从数字的缝隙塞即可。
===================这里是额外的部份=================
集字则以底下几个为主:
Sanctuary
Hero
Legend
这三个就用掉 acdeghlnorstuy,剩 bfijkmpqvwxz
过往的集字里,还有搜集前代大神的 id
Int 用掉 i 创站者
Nobu 用掉 b 国家
Satin 用掉 i 副本
Pence 用掉 p 线上排名
Epidba 用掉 p,i,b 科隆帝国,兽人大陆
Galaxy 用掉 x 次元镜
这样剩 fjkmqvwz。特定的单字则会包含这些:
Festival 用掉 f,v 节日
Kingdom 用掉 k,m 国家
Money 用掉 m 广义的钱
Quest 用掉 q 任务
这样剩 j,w,再把
Justinj 用掉 j,而且是两个 j,并包括 i
通常我也会有
Laechan
这样剩 w,w 可用的单字有
Taiwan
以上会当成集字活动的固定单字,然后视情况增加一些。
(有些比方☆的集字则是活动开始后会公告)
另外,集字活动每一项奖品也都会设定兑换上限,原则上就是
先换先赢,可换数量会参考最近一次掷筊大赛的发放数量。然
后会设定一个或一两个无兑换上限的东西。
大部份的集字都可以 ob trade 但可能有 1~2 个不行。
===================这里是额外的部份=================
我在挪布的游戏房新增了以下的东西
void init()
{
call_out("game_over",10,this_player());
get_char("get_char_ok");
return ;
}
int game_over(object ppl)
{
if(!ppl) return 1;
else if(!environment(ppl)) return 1;
else if(environment(ppl)!=this_object()) return 1;
// 通过上面代表玩家还在游戏房内
ppl->move_player("/d/wiz/room/disc");
// 显示在 get_char 期间的 buff msg
ppl->show_msg();
this_object()->remove();
return 1;
}
int get_char_ok(string str)
{
if(str=="q" || str=="Q")
{
game_over(this_player());
return 1;
}
.
.
return get_char("get_char_ok");
}
get_char 类似 input_to,只是不需要按 enter,它一接收到
键盘所按的东西就会呼叫对应的函数,因此在该函数中只要继
续 return get_char() 就会持续接收玩家敲键盘输入的东西。
上面的缺点则是,玩家如果不是按 q (提早)离开的话,10 秒
过后它做的事是 房间->remove() 但玩家实际上不会脱离“处
于 msg buff 的输入状态”,比方玩家这时要再 who 一下才会
让 msg_buff 状态取消,如底下:
最近的讯息有:(太久的有可能会被滤掉。)
. 灵力武器新增 wand 类、以及 depend 晶矿 功能。 Laechan 2013/07/26
14. 罗德斯小贩处增设 ob routine 每日任务设定,可自行测试。 Laechan 2013/07/28
15. 新增 recall -record 及 party back 语法可参考指令说明。 Laechan 2013/08/13
16. 白川乡开放测试。位于:recall,west,look mirror,shirakawa
.
.
ppl->show_msg(); 则是让玩家在脱离房间前先一步把get_char
期间的 msg buff 显示出来而已。
不过这属于小缺点因此可以无视。
那实际上游戏房是 inherit MONSTER,叫出来再把玩家move_to
进去并触发其 init(),时间一到 this_object()-remove(); 就
相当于移除,它的好处就是可保证其它玩家无法任意进入游戏房
/open/wizs/log/nobu_point.txt
这个档案约 8xxx 行,但我实际用
str=read_file("/open/wizs/log/nobu_point.txt");
tmps=explode(str,"\n");
write("sizeof(tmps)="+sizeof(tmps)+"\n");
显示的结果仅 28xx 行左右,代表虽然 read_file 没显示error
但实际上它无法完整读取 8xxx 行的资料。
土法炼钢的解决方法,就是将 nobu_point.txt 拆解成
nobu_point1.txt
nobu_point2.txt
.
.
然后
for(i=1;i<=7;i++)
{
str=read_file("/open/wizs/log/nobu_point"+i+".txt");
tmps=explode(str,"\n");
foreach(tmp in tmps)
{
.
.
}
}
实测结果,拆分成多个档案,以 for 来循环读取,是可以的,
代表处理效能也没问题,纯粹就是 read_file 有大小限制,而
且它不会产生 error。
另外,这也再次突显 log 档的重要性,挪布商店任何一笔买进
皆有纪录,因此最近在做补发 nobu point 会员点数时就能办得
到,纪录时需注意
1. 这个纪录档,是从哪来的
2. 这个纪录档,能否符合设置它的目的
3. 以 2 为前提下尽量最小化纪录
4. 尽可能让纪录档存放在相同根目录下
以 4 来说目前以 /open/wizs/log 为根目录,wiz 若有需要可
于根目录下设置纪录档,或创建像是 /open/wizs/log/laechan
这样的子目录来放自己的纪录档亦可。
旧的纪录档我目前规划 /open/wizs/log/bak 来存放,最近就会
把所谓旧的放进去。
在玩家的天空城之家里头,有一个一直以来都没有使用、但早已
创建的字段
my_data : ([ ])
wiz 可将其视为像是 record_data 字段般的存在,我最近用这个
字段,处理玩家先前在天空城管理局使用 warehouse 指令增开仓
库所花的挪布币归还事宜。
简单的说,假设玩家去天空城管理局,下 warehouse 指令时:
1. 他已经有 warehouse2, warehouse3
但是 query("my_data/warehouse_return_nobu_money") 是空的
那就 set("my_data/warehouse_return_nobu_money",400);
2. 他已经有 warehouse2 但没有 warehouse3
但是 query("my_data/warehouse_return_nobu_money") 是空的
那就 set("my_data/warehouse_return_nobu_money",200);
然后有以上两个判断时
ppl->add("record_data/nobu_money",200或400);
myhome->save_room();
这时 da 自己的家:
my_data : ([ "warehouse_return_nobu_money" : 400 ])
就会看到这行讯息。
可利用这个字段,但参数尽量有识别性并避免字段名为中文,可避
免掉很多问题。
(编辑中)

Links booklink

Contact Us: admin [ a t ] ucptt.com