所有问题及技巧不分难度,所有都将记录。
问题仅限于ZJMUD使用的fluffos最新版驱动
2024/08/04
1.数组 【小技巧】
刚刚才知道,objects数组是可以直接操作数组内对象函数的。 举例:
object *team;
team=me->query_team();
write("%O \n",team->query("pot"));
输出为 数组
{/*sizeof()==3*/
1500,
2000,
6321
})
这样也就可以非常方便的对同一类数组内对象进行统一操作。 但是有一点需要注意,就是不可以进行比较操作的。
比如if(team->query("pot")>100)
这种操作是不行的,因为team->query("pot") 是数组 不可以直接和int进行比对。
2024/08/10
2.时间 【问题处理】
又有几个朋友问有关时间的问题。一个是时间不准确,不是月份需要加1,就是小时需要+8。 其实是这样的,原有的time()其实就是efun,之前的老驱动我不知道,但是新驱动time返回的都是北京时间的时间戳。 但是大多数人的源码都被重写了sefun,加上了8个小时。 所以你们可以在sefun里找一下,有个time()的函数,将这个删掉就好了,他里面就是让原本的efun:time()返回的时间加了8个小时的数值。如果是以前老驱动,并且时间没问题的就不要动了。 https://mud.wiki/Time WIKI: time()
然后就是localtime() localtime的作用就是将时间戳转换成一组数组,数组内每组数代表的含义不同,如下 看这个就很清楚了,({秒, 分, 时, 日, 月, 年, 星期, 天, 时差, 时区, 夏令时}) 这就是localtime根据时间戳返回的数组内的数据结构和代表意义。 所以每次使用localtime(time()) 还要再在月份的基础上也就是local[4]再加上1才是咱们的实际月份。其实就是因为返回的月份范围是 [0..11] 也就是0是1月份,11是12月份。 既然知道了问题,那咱们就可以写一个localtime的sefun,让他返回的数组是咱们需要的。 举例:
mixed *localtime(int time) {
mixed *tm;
if(!time)
time=time();
tm=efun::localtime(time);
if(!tm) return 0;
if(arrayp(tm)){
tm[4]=tm[4]+1;
return tm;
}else
return 0;
}
这样,加上之前把sefun定义的time()去掉,以后使用localtime 就再也不用小时+8 ,月份+1了。
///待更 有喜欢MUD的朋友可以联系我一起交流遇到的各种问题 279631638