LPC学习处理问题记录。 (所有问题都有解决方案)

这里开始,将记录自己遇到的和其他人问的所有相关问题以及各种小技巧。

所有问题及技巧不分难度,所有都将记录。

问题仅限于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的作用就是将时间戳转换成一组数组,数组内每组数代表的含义不同,如下 file 看这个就很清楚了,({秒, 分, 时, 日, 月, 年, 星期, 天, 时差, 时区, 夏令时}) 这就是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

京ICP备13031296号-4