这个是最新的TrinityCore 335端的假人系统!当你的魔兽世界中玩家人数不够的时候,可以通过这个来迷惑玩家~~~哈哈
data << target.GetGuildName(); // guild name
data << uint32(lvl); // player level
data << uint32(class_); // player class
data << uint32(race); // player race
data << uint8(gender); // player gender
data << uint32(playerZoneId); // player zone id
++displayCount;
}
+ uint32 MaxDummy = sConfigMgCore->GetIntDefault("MaxDummy", 30); //当在线人数高于30人的时候增加假人
+ uint32 DummOnOff = sConfigMgCore->GetIntDefault("Dummy.On.Off", 0); //是否开启假人系统
+ uint32 AddNumberDummy = sConfigMgCore->GetIntDefault("AddNumberDummy", 2);//假人的倍数
+ if (DummOnOff && displayCount >= MaxDummy && displayCount < 50) //少于多少人开始加假人(完美假人系统)
+ {
+ uint32 DummHowMany = sConfigMgCore->GetIntDefault("HowManyDummy", 20);
+ QueryResult result2 = LoginDatabase.PQuery("SELECT id FROM account WHERE online = 0 ORDER BY RAND() LIMIT %u", DummHowMany);//先数据库查询中没有登录的玩家账号
+ QueryResult result;
+ uint32 accid;
+ if(result2)
+ {
+ do{
+ accid = result2->Fetch()[0].GetUInt32();
+ result = CharacterDatabase.PQuery("SELECT name,race,class,level,position_x,position_y,position_z,map FROM characters WHERE account='%d' AND online=0 ORDER BY RAND() LIMIT 1",accid);//然后查询对应账号在角色库里面的一个任意角色
+ if(result)
+ {
+ Field *fields = result->Fetch();
+ std::string pname = fields[0].GetString();
+ std::string str = "";
+ str += pname;
+ std::string gname = "";
+ uint32 race = fields[1].GetUInt32();
+ uint32 class_ = fields[2].GetUInt32();
+ uint32 lvl = fields[3].GetUInt32();
+ float m_positionX = fields[4].GetFloat();
+ float m_positionY = fields[5].GetFloat();
+ float m_positionZ = fields[6].GetFloat();
+ uint32 pzoneid = fields[7].GetUInt32();
+ //pzoneid = sTerrainMgr.LoadTerrain(pzoneid)->GetZoneId(m_positionX,m_positionY,m_positionZ);
+ pzoneid = sMapMgr->GetZoneId(pzoneid,m_positionX,m_positionY,m_positionZ);
+ //上面这些是获取玩家信息!这样才游戏中查询才能看到角色信息
+ if ((matchCount++) >= sWorld->getIntConfig(CONFIG_MAX_WHO))
+ continue;
+ //delete result;
+ data << str; // player name
+ data << gname; // guild name
+ data << uint32(lvl); // player level
+ data << uint32(class_); // player class
+ data << uint32(race); // player race
+ data << uint8(0); // new 2.4.0(正确地图位置显示)
+ data << uint32(pzoneid); // player zone id(正确地图位置显示)
+ ++displayCount;
+ }
+ }
+ while (result2->NextRow());
+ }
+ }//完美假人系统结束
+ if (matchCount > 50 && DummOnOff)
+ matchCount = matchCount * AddNumberDummy; //这里是游戏里面超过50人了,就乘以倍数
data.put(0, displayCount); // REPLACE right count, count displayed
data.put(4, matchCount); // REPLACE right count, count of matches