private void ProcessQueryRole(byte[] data)
{
GameBase.Network.Internal.QueryRole info = new GameBase.Network.Internal.QueryRole();
info.Create(data);
byte ret = 0;
String sAccount = info.GetAccount();
int accountid = Data.QueryAccount(sAccount);
//查询数据库是否有该角色--
if (accountid != -1)
{
ret = 1;
//-优先查询是否在线,要是在线就踢掉了--
int mapserverindex = -1;
if (Data.IsOnline(sAccount, ref mapserverindex))
{
ret = 2;
//发送给mapserver踢掉该玩家,因为被挤下线了
GameBase.Network.Internal.KickGamePlay kickplay = new GameBase.Network.Internal.KickGamePlay();
kickplay.accountid = accountid;
SessionManager.Instance().SendMapServer(mapserverindex, kickplay.GetBuffer());
//设置该玩家帐号为离线状态
Data.SetOnlineState(accountid, -1);
}
if (ret == 1)
{
Log.Instance().WriteLog("查询角色成功:" + sAccount + "id:" + accountid.ToString());
//发送给mapserver服务器
GameBase.Network.Internal.RoleInfo roleinfo = Data.QueryRoleInfo(accountid);
roleinfo.gameid = info.gameid;
roleinfo.mKey = info.key;
roleinfo.mKey1 = info.key2;
roleinfo.sAccount = sAccount;
SessionManager.Instance().SendMapServer(roleinfo.mapid, roleinfo.GetBuffer());
//如果有角色,读取角色的其他信息
//物品数据
GameBase.Network.Internal.ROLEDATA_ITEM item = new GameBase.Network.Internal.ROLEDATA_ITEM();
item.key = info.key;
item.key2 = info.key2;
item.playerid = roleinfo.playerid;
item.SetLoadTag();
Data.LoadRoleData_Item(item);
if (item.mListItem.Count > 0) //没数据就不发了。。
{
SessionManager.Instance().SendMapServer(0, item.GetBuffer());
}
//技能数据
GameBase.Network.Internal.RoleData_Magic magic = new GameBase.Network.Internal.RoleData_Magic();
magic.SetLoadTag();
magic.ownerid = roleinfo.playerid;
magic.key = roleinfo.mKey;
magic.key2 = roleinfo.mKey1;
Data.LoadRoleData_Magic(magic);
if (magic.mListMagic.Count > 0)
{
SessionManager.Instance().SendMapServer(0, magic.GetBuffer());
}
//幻兽数据--
List <RoleData_Item> list_eudemondata = item.GetEudemonItemList();
if (list_eudemondata != null)
{
GameBase.Network.Internal.ROLEDATE_EUDEMON eudemon = new GameBase.Network.Internal.ROLEDATE_EUDEMON();
eudemon.SetLoadTag();
eudemon.playerid = roleinfo.playerid;
eudemon.key = roleinfo.mKey;
eudemon.key2 = roleinfo.mKey1;
Data.LoadRoleData_Eudemon(eudemon);
SessionManager.Instance().SendMapServer(0, eudemon.GetBuffer());
}
//好友数据
GameBase.Network.Internal.ROLEDATA_FRIEND friend = new GameBase.Network.Internal.ROLEDATA_FRIEND();
friend.SetLoadTag();
friend.playerid = roleinfo.playerid;
friend.key = roleinfo.mKey;
friend.key2 = roleinfo.mKey1;
Data.LoadRoleData_Friend(friend);
SessionManager.Instance().SendMapServer(0, friend.GetBuffer());
}
else
{
Log.Instance().WriteLog("查询角色失败:" + sAccount + "id:" + accountid.ToString());
}
}
if (ret == 1)
{
return; //有该角色
}
//发送给loginserver服务器--
GameBase.Network.Internal.QueryRole_Ret queryrole_ret = new GameBase.Network.Internal.QueryRole_Ret();
queryrole_ret.gameid = info.gameid;
queryrole_ret.key = info.key;
queryrole_ret.key2 = info.key2;
queryrole_ret.ret = ret;
mTcpServer.SendData(mSocket, queryrole_ret.GetBuffer());
}