zoukankan      html  css  js  c++  java
  • 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;
    }
  • 相关阅读:
    其他
    聚类算法:ISODATA算法
    大神博客
    Fiddldr 教程之:HTTP协议详解(转)
    设计模式之装饰模式的复习
    NOIP 2011 聪明的质监员
    CSP-S2020/NOIP2020模板总结(Updating)
    CSP-S2020/NOIP2020复习指南
    洛谷 U137412 高斯的小宇宙
    NOIP2020模板测试题大全
  • 原文地址:https://www.cnblogs.com/cfas/p/8120130.html
Copyright © 2011-2022 走看看