藏宝湾网游单机站

 找回密码
 注册

QQ登录

只需一步,快速开始

★69 元包站 Gm 手游平台★

★69 元包站 Gm 手游平台★

★Gm 游戏平台【无限资源包站平台,真正体验gm和土豪感觉】★

★白嫖放置传奇 玩通关算你赢★

★白嫖放置传奇 玩通关算你赢★

★白嫖长久耐玩型 放置类挂机传奇游戏 充值可打 安全挂机 可交易 无PK★

★@梦幻长久耐玩全新大唐九黎★

★@!!——梦幻长久耐玩全新大唐九黎——!!★

★★新增全新门派九黎城, ★侵烛系统 ★静脉系统 ★赐福系统 ★战斗动作声效系统 ★全场景NPC、召唤兽迭代最新 ★17个副本,完全还原 ★独家PK系统,享受极致免费PK★★

承接推广
★承接推广★

★承接推广★

☆ 六一活动开放-放置传奇☆

★ 六一活动开放-放置传奇★

★可白嫖 上班摸鱼类 放置文字传奇游戏(放置休闲)qq群756025698★

★三职业复古★开局送神装★爆率100%★零氪首选★

★三职业复古★开局送神装★爆率100%★零氪首选★

★〖双线〗〖无忧传奇〗〖每日新区〗〖开局送神装 100%高爆率 装备元宝打怪爆〗★

承接推广

★承接推广★

★承接推广★

承接推广

★承接推广★

★承接推广★

★DNF★全职业平衡★公益服★
★DNF★全职业平衡★公益服★

【dnf86版本】【怀旧服】【全职业平衡】【非变态服】【非商业服】【774031300】

★承接推广★

★承接推广★

★承接推广★

★承接推广★

★承接推广★

★承接推广★

★承接推广★

★承接推广★

★承接推广★

查看: 62|回复: 2

[原创] 远征源代码增加假人系统DLL文件

[复制链接]
 楼主| 发表于 昨天 21:25 | 显示全部楼层 |阅读模式
本帖最后由 bfdz49 于 2026-6-4 23:45 编辑
  1. <blockquote>假人系统,不通过客户端连接 — 服务端直接调用内部登录流程创建角色,不走客户端 → Gateway → LoginServer 链路
复制代码

struct SDummyRuntimeProp
{
    DWORD   dwRoleID;               // 角色ID
    DWORD   dwUserID;               // 账号ID
    char    szRoleName[32];         // 角色名
    WORD    wFaceID;                // 头像
    BYTE    nVocation;              // 职业(命魂)
    BYTE    nDiVocation;            // 地魂职业
    BYTE    nTianVocation;          // 天魂职业
    BYTE    nNation;                // 国家
    BYTE    nSex;                   // 性别
    BYTE    nCurLingHun;            // 当前灵魂态
    DWORD   dwMapID;                // 当前地图ID
    int     nLocX;                  // X坐标
    int     nLocY;                  // Y坐标
    BYTE    nLevel;                 // 等级
    DWORD   dwCurHP;                // 当前生命
    DWORD   dwMaxHP;                // 最大生命
    DWORD   dwCurMP;                // 当前法术
    DWORD   dwMaxMP;                // 最大法术
    DWORD   dwMoney;                // 金钱
    DWORD   dwBindMoney;            // 绑定金钱
    DWORD   dwGold;                 // 金币(RMB)
    DWORD   dwGoldBind;             // 绑定金币
    DWORD   dwExp;                  // 经验
    DWORD   dwClanID;               // 帮会ID
    DWORD   dwKinID;                // 家族ID
    int     nAttackValue;           // 攻击力
    int     nDefenceValue;          // 防御力
    int     nNewPowerValue;         // 战力值
    DWORD   dwTeamID;               // 队伍ID
    BYTE    nTeamRole;              // 队伍角色(0=队员,1=队长)
    DWORD   dwCurrentQuestID;       // 当前任务ID
    emDummyState eState;            // 当前行为状态

    // 战斗相关
    DWORD   dwTargetID;             // 当前目标ID (玩家/怪物/BOSS)
    DWORD   dwTargetType;           // 目标类型
    DWORD   dwLastSkillTime;        // 上次施法时间
    DWORD   dwComboCount;           // 连击计数
单个假人玩家实现

============================================================
// 初始化
// ============================================================
BOOL CDummyPlayer::Init(DWORD dwUserID, const char* szName, BYTE nVocation, BYTE nNation)
{
    m_stProp.dwUserID = dwUserID;
    m_stProp.dwRoleID = _AllocateRoleID();

    // 设置名字
    if (szName && strlen(szName) > 0)
    {
        strncpy(m_stProp.szRoleName, szName, 31);
    }
    else
    {
        std::string strName = CDummyPlayerNameGen::Instance()->GenerateRandomName();
        strncpy(m_stProp.szRoleName, strName.c_str(), 31);
    }

    // 职业
    if (nVocation > 0)
        m_stProp.nVocation = nVocation;
    else
        m_stProp.nVocation = CDummyPlayerConfig::Instance()->RandomVocation();

    // 国家
    if (nNation > 0)
        m_stProp.nNation = nNation;
    else
        m_stProp.nNation = CDummyPlayerConfig::Instance()->RandomNation();

    // 默认属性 (与TRoleInfo初始值一致)
    m_stProp.nLevel = 1;
    m_stProp.dwCurHP = 85;
    m_stProp.dwMaxHP = 85;
    m_stProp.dwCurMP = 80;
    m_stProp.dwMaxMP = 80;
    m_stProp.dwMoney = 100000;
    m_stProp.dwBindMoney = 200000;
    m_stProp.dwMapID = 1;       // 新手村-云中界
假人聊天系统实现

m_dwChatInterval = 60000;  // 默认60秒一条
}

CDummyPlayerChat::~CDummyPlayerChat()
{
}

BOOL CDummyPlayerChat::CanChat()
{
    DWORD dwTick = GetTickCount();

    // 频率限制
    if (dwTick - m_dwLastChatTime < m_dwChatInterval)
        return FALSE;

    // 1分钟内不超过3条
    if (m_dwChatCount >= 3)
        return FALSE;

    return TRUE;
}

BOOL CDummyPlayerChat::SendMessage(emDummyChatChannel eChannel, const char* szContent)
{
    if (!CanChat()) return FALSE;
    if (!szContent || strlen(szContent) == 0) return FALSE;

    m_dwLastChatTime = GetTickCount();
    m_dwChatCount++;

    // TODO: 通过ChatServer发送聊天消息

配置管理器实现

// 全局配置
    m_stGlobalConfig.dwMaxDummyCount        = 5000;
    m_stGlobalConfig.dwLoginInterval        = 200;    // 200ms间隔登录
    m_stGlobalConfig.dwHeartbeatInterval    = 30000;  // 30秒心跳
    m_stGlobalConfig.dwBossCheckInterval    = 5000;   // 5秒检查BOSS
    m_stGlobalConfig.dwStatsReportInterval  = 60000;  // 1分钟统计
    m_stGlobalConfig.dwChatInterval         = 60000;  // 60秒一条聊天
    m_stGlobalConfig.dwMaxChatPerMinute     = 3;
    m_stGlobalConfig.dwGuoyunStartHour      = 12;
    m_stGlobalConfig.dwGuoyunEndHour        = 22;
    m_stGlobalConfig.dwGuotanStartHour      = 12;
    m_stGlobalConfig.dwGuotanEndHour        = 22;
    m_stGlobalConfig.bEnableBossFight       = TRUE;
    m_stGlobalConfig.bEnableCountryWar      = TRUE;
    m_stGlobalConfig.bEnableInstance        = TRUE;

    // 地图配置 - 主城
    _AddMap(1,   "云中界(新手村)", MAP_PRIORITY_CITY,     50,  80,   2, 110, 420);
    _AddMap(100, "云中仙城",       MAP_PRIORITY_CITY,     80,  120,  1, 200, 300);
    _AddMap(101, "武陵城",         MAP_PRIORITY_CITY,     60,  100,  4, 300, 400);
    _AddMap(102, "天都城",         MAP_PRIORITY_CITY,     50,  80,   2, 250, 350);

    // 地图配置 - 野外
    _AddMap(200, "碧水森林",       MAP_PRIORITY_FIELD,    30,  60,   5, 500, 800);
    _AddMap(201, "幽暗密林",       MAP_PRIORITY_FIELD,    30,  50,   3, 400, 600);
    _AddMap(202, "落日荒原",       MAP_PRIORITY_FIELD,    40,  70,   4, 600, 900);
    _AddMap(203, "寒冰峡谷",       MAP_PRIORITY_FIELD,    30,  60,   6, 300, 500);
    _AddMap(204, "烈焰火山",       MAP_PRIORITY_FIELD,    40,  70,   7, 400, 700);
    _AddMap(205, "风暴高原",       MAP_PRIORITY_FIELD,    30,  60,   8, 500, 700);
    _AddMap(206, "暗影沼泽",       MAP_PRIORITY_FIELD,    40,  60,   9, 400, 600);

    // 地图配置 - 副本
    _AddMap(300, "幽冥洞",         MAP_PRIORITY_INSTANCE, 20,  40,   20, 200, 300);
    _AddMap(301, "万妖塔",         MAP_PRIORITY_INSTANCE, 20,  40,   30, 200, 300);
    _AddMap(302, "龙宫秘境",       MAP_PRIORITY_INSTANCE, 20,  40,   40, 200, 300);
    _AddMap(303, "天宫试炼",       MAP_PRIORITY_INSTANCE, 20,  40,   50, 200, 300);
    _AddMap(304, "五行使者",       MAP_PRIORITY_INSTANCE, 20,  40,   60, 200, 300);
    _AddMap(305, "昆仑仙境",       MAP_PRIORITY_INSTANCE, 20,  40,   70, 200, 300);

    // BOSS配置
    _AddBoss(10001, "树妖王",      200, 15,  500,  100,  100,  600);
    _AddBoss(10002, "暗影领主",    201, 25,  800,  100,  200,  1200);
    _AddBoss(10003, "荒原蝎王",    202, 35,  1200, 200,  300,  1800);
    _AddBoss(10004, "冰龙",        203, 45,  2000, 300,  400,  2400);
    _AddBoss(10005, "火焰魔神",    204, 55,  3000, 400,  500,  3000);
    _AddBoss(10006, "风暴之主",    205, 65,  5000, 500,  600,  3600);
    _AddBoss(10007, "沼泽女王",    206, 75,  8000, 600,  700,  4200);
    _AddBoss(11001, "幽冥将军",    300, 30,  1500, 150,  300,  1800);
    _AddBoss(11002, "万妖塔主",    301, 40,  2500, 200,  400,  2400);
    _AddBoss(11003, "龙王",        302, 50,  4000, 300,  500,  3000);
    _AddBoss(11004, "天宫守卫",    303, 60,  6000, 400,  600,  3600);
    _AddBoss(11005, "五行使者·金", 304, 70,  9000, 500,  700,  4200);

假人数据库操作实现

/ TODO: 发送 TMSG_DBSVR_ROLE_CREATE_REQ
    // 填充完整 TRoleInfo 结构体(与玩家创建角色完全一致):
    //
    // TRoleInfo stRole;
    // stRole.dwRoleID = dwRoleID;
    // stRole.dwUserID = dwUserID;
    // strcpy(stRole.szRoleName, szRoleName);
    // stRole.nVocation = nVocation;
    // stRole.nNation = nNation;
    // stRole.nSex = nSex;
    // stRole.nLevel = 1;
    // stRole.dwCurHP = 85;
    // stRole.dwMaxHP = 85;
    // stRole.dwCurMP = 80;
    // stRole.dwMaxMP = 80;
    // stRole.dwMoney = 100000;
    // stRole.dwBindMoney = 200000;
    // stRole.dwMapID = 1;
    // stRole.nLocX = 141;
    // stRole.nLocY = 469;
    // stRole.wFaceID = rand() % 20 + 1;
    //
    // _PackRoleInfo → BYTE buffer → SendToDBSvr → 等待回包

    return DB_OK;
}

emDBResult CDummyPlayerDB::ConfirmRoleCreate(DWORD dwRoleID)
{
    if (!m_bDBConnected) return DB_ERR_CONNECT;

    // TODO: 确认角色创建结果
    // 检查 t_role 表中是否存在 dwRoleID
    return DB_OK;
}

emDBResult CDummyPlayerDB::CenterConfirm(DWORD dwRoleID)
{
    if (!m_bDBConnected) return DB_ERR_CONNECT;

    // TODO: 发送 TMSG_DBSVR_ROLE_CENTER_CREATE_REQ
    // 中心库确认角色数据已同步
    return DB_OK;


『来自123云盘用户的分享』
链接:https://1843781346.share.123pan.cn/123pan/clBbTd-mStwh
提取码:PLCT



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
回复

使用道具 举报

 楼主| 发表于 昨天 21:33 | 显示全部楼层
假人系统,不通过客户端连接 — 服务端直接调用内部登录流程创建角色,不走客户端 → Gateway → LoginServer 链路
占用真实数据库记录 — 账号表/角色表结构与真实玩家完全一致,DBSvr 会为之分配 DB 空间
对真实客户端透明可见 — 真实玩家登录后,会在场景中看到假人走动、打怪、聊天,与之交互完全等同于真实玩家
真实客户端无需任何代码改动,只需要连接 ZoneServer 就能看到假人活跃在游戏世界中。重启 ZoneServer 后即可验证
[发帖际遇]: bfdz49 在论坛发帖时没有注意,被小偷偷去了 1 枚 金币. 幸运榜 / 衰神榜
回复 支持 反对

使用道具 举报

发表于 昨天 23:39 | 显示全部楼层
问题是没有服务端
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

本站内容如若侵犯到您的权益,请来电来函告知,我们会尽快处理!
联系QQ:1953150286,2251387361,123784736,免责申明

排行榜|联系我们|小黑屋|手机版|Archiver|游戏藏宝湾 |

GMT+8, 2026-6-5 02:14 , Processed in 0.160972 second(s), 20 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表