find_player 不查找已经晕到玩家的问题

问题场景:

游戏中出现个BUG,是关于登陆后出现分身的问题。 查找当前登陆者的身份 是否之前存在相同的角色实例,当玩家昏迷状态时 使用 find_player是找不到这个玩家的,所以 玩家利用角色昏迷的时候 重新登陆相同的账号 绕过登陆检查,出现游戏中存在多个相同的角色实例


查了OS代码,发现 find_player 最终会调用 find_living_object函数。
游戏中,实现玩家昏迷的效果是关闭了玩家的指令IO
相关设定 O_ENABLE_COMMANDS

解决办法 通过users函数直接查找在线玩家

 

 

复制代码
object_t *find_living_object P2(char *, str, int, user)
{
    object_t **obp, *tmp;
    object_t **hl;

    if (!str)
    return 0;
    num_searches++;
    hl = &hashed_living[hash_living_name(str)];
    for (obp = hl; *obp; obp = &(*obp)->next_hashed_living) {
    search_length++;
    if ((*obp)->flags & O_HIDDEN) {
        if (!valid_hide(current_object))
        continue;
    }
    if (user && !((*obp)->flags & O_ONCE_INTERACTIVE))
        continue;
    if (!((*obp)->flags & O_ENABLE_COMMANDS))
        continue;
    if (strcmp((*obp)->living_name, str) == 0)
        break;
    }
    if (*obp == 0)
    return 0;
    /* Move the found ob first. */
    if (obp == hl)
    return *obp;
    tmp = *obp;
    *obp = tmp->next_hashed_living;
    tmp->next_hashed_living = *hl;
    *hl = tmp;
    return tmp;
}
复制代码

 

posted @   方东信  阅读(331)  评论(0编辑  收藏  举报
编辑推荐:
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
点击右上角即可分享
微信分享提示