返回列表 回复 发帖

[已解决] 选号的BUG 有可能选到残缺的号

本帖最后由 cocobear 于 2011-7-18 14:04 编辑

我刚看了一下阳夕阳再线III之 炎龙封印  
// logind.c
的代码
random_gift 这一函数写的有问题
有可能出现残缺的属性。
所有属性一共80点:
选定某项属性(i点)后,其余属性点每项先分配10点,然后剩余的把80-30-i的属性点拿出来随机加到某个属性上,如果某个属性加的超过了30就直接把这个属性设置为30.如果某个属性加了35那么这个属性实际只有30.这样就少了5点。巫师改一改这块的代码吧。
这里是夕阳再现,不是炎龙封印
是是非非皆是非
你拿炎龙封印的代码来这里,这不是不沾边么
是是非非皆是非
很多代码都是一样的 我也选到残缺的号了 所以我觉得可能是一样的问题 巫师看一下代码是不是这样就行了。
如果不是那为什么我选到残缺的号 30 24 23 10
没个MUD都有自己的设置,你拿来的代码不一样就是你那样的。
是是非非皆是非
没看懂?
你看代码了吗?有没有这个问题?
void random_gift(mapping my, int select)
{
        int i = 10, j;
        int tmpstr, tmpint, tmpcon, tmpdex;
        tmpstr = tmpint = tmpcon = tmpdex = 10;
        switch (select) {
                case 1: tmpstr = i = my["str"]; break;
                case 2: tmpint = i = my["int"]; break;
                case 3: tmpcon = i = my["con"]; break;
                case 4: tmpdex = i = my["dex"];
        }
        i = 50 - i;
        while (i--) {
                j = random(4);
                if (j == select - 1) {
                        i++;
                        continue;
                }
                switch (j) {
                case 0: tmpstr++; break;
                case 1: tmpint++; break;
                case 2: tmpcon++; break;
                case 3: tmpdex++; break;
                }
        }
        if (tmpstr <= 30) my["str"] = tmpstr; else my["str"] = 30;
        if (tmpint <= 30) my["int"] = tmpint; else my["int"] = 30;
        if (tmpcon <= 30) my["con"] = tmpcon; else my["con"] = 30;
        if (tmpdex <= 30) my["dex"] = tmpdex; else my["dex"] = 30;

        my["kar"] = 10 + random(21);
        my["per"] = 10 + random(21);
}

如果这里的代码这个函数也是这样的,那么就是有问题的。
文化人啊!
回复 4# cocobear

你这个ID还算是残缺?你加下总数:30+24+23+10=87
我要有这样的号,就该谢天谢地谢阿影了!
返回列表