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()); }
//保存 public void DB_Save() { if (mDicItem.Count <= 0) return; GameBase.Network.Internal.ROLEDATA_ITEM item = new GameBase.Network.Internal.ROLEDATA_ITEM(); item.SetSaveTag(); item.playerid = play.GetBaseAttr().player_id; foreach (GameStruct.RoleItemInfo info in mDicItem.Values) { GameBase.Network.Internal.RoleData_Item _item = new GameBase.Network.Internal.RoleData_Item(); _item.id = info.id; _item.itemid = info.itemid; _item.postion = info.postion; _item.stronglv = info.stronglv; _item.gem1 = info.gem1; _item.gem2 = info.gem2; _item.forgename = info.forgename; _item.amount = info.amount; _item.war_ghost_exp = info.war_ghost_exp; _item.di_attack = info.di_attack; _item.shui_attack = info.shui_attack; _item.huo_attack = info.huo_attack; _item.feng_attack = info.feng_attack; _item.property = info.property; _item.gem3 = info.gem3; _item.god_exp = info.god_exp; _item.god_strong = info.god_strong; item.mListItem.Add(_item); } DBServer.Instance().GetDBClient().SendData(item.GetBuffer()); }