public void OnLogout(Player player) { if (player.tempData.status == PlayerTempData.Statue.Fight) { Room room = player.tempData.room; RoomSystem.instance.DelPlayerForRoom(room, player); //广播 ProtocolBase protocol = ServNet.instance.proto.Decode(null, 0, 0); protocol.AddString("Hit"); protocol.AddString(player.id); protocol.AddString(player.id); protocol.AddFloat(999); RoomSystem.instance.BroadcastInRoom(room, protocol); RoomSystem.instance.DealWithWinForRoom(room); } if (player.tempData.status == PlayerTempData.Statue.Room) { Room room = player.tempData.room; RoomSystem.instance.DelPlayerForRoom(room, player); RoomSystem.instance.BroadcastInRoom(room, room.GetRoomInfoBack()); } }
//释放技能 //参数:posX,posY,posZ,rotX,rotY,rotZ,skillType //返回协议:广播 释放者id,posX,posY,posZ,rotX,rotY,rotZ,skillType public void MsgReleaseSkill(Player player, ProtocolBase protocol) { if (player.tempData.status != PlayerTempData.Statue.Fight) { return; } int start = 0; string protoName = protocol.GetString(start, ref start); float posX = protocol.GetFloat(start, ref start); float posY = protocol.GetFloat(start, ref start); float posZ = protocol.GetFloat(start, ref start); float rotX = protocol.GetFloat(start, ref start); float rotY = protocol.GetFloat(start, ref start); float rotZ = protocol.GetFloat(start, ref start); int skillType = protocol.GetInt(start, ref start); //加上id后广播 Room room = player.tempData.room; ProtocolBase protocolRet = ServNet.instance.proto.Decode(null, 0, 0); protocolRet.AddString("ReleaseSkill"); protocolRet.AddString(player.id); protocolRet.AddFloat(posX); protocolRet.AddFloat(posY); protocolRet.AddFloat(posZ); protocolRet.AddFloat(rotX); protocolRet.AddFloat(rotY); protocolRet.AddFloat(rotZ); protocolRet.AddInt(skillType); RoomSystem.instance.BroadcastInRoom(room, protocolRet); }
//伤害 //参数:被击者id,伤害数值damage //返回协议:广播 攻击者id,被击者id,伤害数值damage public void MsgHit(Player player, ProtocolBase protocol) { if (player.tempData.status != PlayerTempData.Statue.Fight) { return; } //作弊校验 // long lastShootTime = player.tempData.lastShootTime; // if (Sys.GetTimeStamp() - lastShootTime < 1) { // Console.WriteLine("MsgHit 开炮作弊 " + player.id); // return; // } // player.tempData.lastShootTime = Sys.GetTimeStamp(); int start = 0; string protoName = protocol.GetString(start, ref start); string enenmyID = protocol.GetString(start, ref start); float damage = protocol.GetFloat(start, ref start); //扣除生命值 Room room = player.tempData.room; lock (room.playerDict) { if (!room.playerDict.ContainsKey(enenmyID)) { Console.WriteLine("MsgHit not Contains enemy " + enenmyID); return; } Player enemy = room.playerDict[enenmyID]; // if (enemy == null) // return; if (enemy.tempData.hp <= 0) { return; } enemy.tempData.hp -= damage; Console.WriteLine("MsgHit " + enenmyID + " hp:" + enemy.tempData.hp); } //广播 ProtocolBase protocolRet = ServNet.instance.proto.Decode(null, 0, 0); protocolRet.AddString("Hit"); protocolRet.AddString(player.id); protocolRet.AddString(enenmyID); protocolRet.AddFloat(damage); RoomSystem.instance.BroadcastInRoom(room, protocolRet); //胜负判断 RoomSystem.instance.DealWithWinForRoom(room); }
//收到transform信息 //参数:posX,posY,posZ,rotX,rotY,rotZ,gunRot,gunRoll //返回协议:广播 id,posX,posY,posZ,rotX,rotY,rotZ,gunRot,gunRoll public void MsgUpdateUnitInfo(Player player, ProtocolBase protocol) { if (player.tempData.status != PlayerTempData.Statue.Fight) { return; } int start = 0; string protoName = protocol.GetString(start, ref start); float posX = protocol.GetFloat(start, ref start); float posY = protocol.GetFloat(start, ref start); float posZ = protocol.GetFloat(start, ref start); float rotX = protocol.GetFloat(start, ref start); float rotY = protocol.GetFloat(start, ref start); float rotZ = protocol.GetFloat(start, ref start); float gunRot = protocol.GetFloat(start, ref start); float gunRoll = protocol.GetFloat(start, ref start); Room room = player.tempData.room; //作弊校验 //略 //为什么tempData中只保留了一部分数据,为了校验??? player.tempData.posX = posX; player.tempData.posY = posY; player.tempData.posZ = posZ; player.tempData.lastUpdatePosTime = Sys.GetTimeStamp(); //加上id后广播 ProtocolBase protocolRet = ServNet.instance.proto.Decode(null, 0, 0); protocolRet.AddString("UpdateUnitInfo"); protocolRet.AddString(player.id); protocolRet.AddFloat(posX); protocolRet.AddFloat(posY); protocolRet.AddFloat(posZ); protocolRet.AddFloat(rotX); protocolRet.AddFloat(rotY); protocolRet.AddFloat(rotZ); protocolRet.AddFloat(gunRot); protocolRet.AddFloat(gunRoll); RoomSystem.instance.BroadcastInRoom(room, protocolRet); }