static public void initCollection() { MySqlCommand comm = new MySqlCommand(); comm.Connection = dbConnection; comm.CommandText = "select * from game_account"; MySqlDataReader result = comm.ExecuteReader(); while (result.Read()) { CCharacterObject character = new CCharacterObject(); character.ObjectType = CObjectType.PLAYER; character.ObjectId = result.GetString("GUID"); character.Level = result.GetInt32("character_level"); character.CharacterName = result.GetString("character_name"); character.ResourceId = result.GetString("resource_id"); character.Action = result.GetInt32("character_action"); character.Direction = result.GetInt32("character_direction"); character.PosX = result.GetInt32("character_posx"); character.PosY = result.GetInt32("character_posy"); character.Speed = result.GetInt32("character_speed"); character.HealthMax = result.GetInt32("character_health_max"); character.Health = result.GetInt32("character_health"); character.ManaMax = result.GetInt32("character_mana_max"); character.Mana = result.GetInt32("character_mana"); character.EnergyMax = result.GetInt32("character_energy_max"); character.Energy = result.GetInt32("character_energy"); character.AttackRange = result.GetInt32("character_attackrange"); character.AttackSpeed = result.GetFloat("character_attackspeed"); objectList.Add(character); } result.Close(); }
static public void changeDirection(byte[] data, int recv) { String _objectId = ""; int _direction = 0; for (int i = 1; i < recv;) { int length = BitConverter.ToInt32(new byte[] { data[i + 3], data[i + 2], data[i + 1], data[i] }, 0); int type = data[i + 4]; switch (type) { case TYPE_STRING: _objectId = Encoding.UTF8.GetString(data, i + 5, length); break; case TYPE_INT: byte[] intNumber = new byte[] { data[i + 8], data[i + 7], data[i + 6], data[i + 5] }; _direction = BitConverter.ToInt32(intNumber, 0); break; } i += (length + 5); } if (_objectId != "") { CCharacterObject player = objectList[_objectId] as CCharacterObject; player.Direction = _direction; MySqlCommand comm = new MySqlCommand(); comm.Connection = dbConnection; comm.CommandText = "update game_character set character_direction=" + player.Direction; comm.ExecuteNonQuery(); } Console.ForegroundColor = ConsoleColor.Yellow; Console.WriteLine("Direction objectId: " + _objectId + ", direction: " + _direction.ToString()); }
static public void changeAction(byte[] data, int recv) { String _objectId = ""; int _action = 0; for (int i = 1; i < recv;) { int length = BitConverter.ToInt32(new byte[] { data[i + 3], data[i + 2], data[i + 1], data[i] }, 0); int type = data[i + 4]; switch (type) { case TYPE_STRING: _objectId = Encoding.UTF8.GetString(data, i + 5, length); break; case TYPE_INT: byte[] intNumber = new byte[] { data[i + 8], data[i + 7], data[i + 6], data[i + 5] }; _action = BitConverter.ToInt32(intNumber, 0); break; } i += (length + 5); } if (_objectId != "") { CCharacterObject player = objectList[_objectId] as CCharacterObject; player.Action = _action; } Console.ForegroundColor = ConsoleColor.Gray; Console.WriteLine("Action objectId: " + _objectId + ", action: " + _action.ToString()); }
static void requestObjectList(byte[] data, int recv, Socket socket) { String objectId = ""; int startX = int.MaxValue; int startY = int.MaxValue; int width = int.MaxValue; int height = int.MaxValue; for (int i = 1; i < recv;) { int length = BitConverter.ToInt32(new byte[] { data[i + 3], data[i + 2], data[i + 1], data[i] }, 0); int type = data[i + 4]; switch (type) { case TYPE_INT: byte[] intNumber = new byte[] { data[i + 8], data[i + 7], data[i + 6], data[i + 5] }; if (startX == int.MaxValue) { startX = BitConverter.ToInt32(intNumber, 0); } else if (startY == int.MaxValue) { startY = BitConverter.ToInt32(intNumber, 0); } else if (width == int.MaxValue) { width = BitConverter.ToInt32(intNumber, 0); } else if (height == int.MaxValue) { height = BitConverter.ToInt32(intNumber, 0); } break; case TYPE_STRING: objectId = Encoding.UTF8.GetString(data, i + 5, length); break; } i += (length + 5); } foreach (CGameObject o in objectList) { if (o.PosX > startX && o.PosX < startX + width && o.PosY > startY && o.PosY < startY + height && o.ObjectId != objectId) { CServerPackage package = new CServerPackage(); package.success = ACK_CONFIRM; package.controller = CONTROLLER_INFO; package.action = ACTION_CAMERAVIEW_OBJECT_LIST; if (o.ObjectType == CObjectType.PLAYER && o is CCharacterObject) { CCharacterObject player = o as CCharacterObject; package.param.Add(new object[] { player.ObjectId.Length, player.ObjectId }); package.param.Add(new object[] { 4, player.Level }); package.param.Add(new object[] { Encoding.UTF8.GetBytes(player.CharacterName).Length, player.CharacterName }); package.param.Add(new object[] { player.ResourceId.Length, player.ResourceId }); package.param.Add(new object[] { 4, player.Direction }); package.param.Add(new object[] { 4, player.PosX }); package.param.Add(new object[] { 4, player.PosY }); package.param.Add(new object[] { 4, player.Speed }); package.param.Add(new object[] { 4, player.HealthMax }); package.param.Add(new object[] { 4, player.Health }); package.param.Add(new object[] { 4, player.ManaMax }); package.param.Add(new object[] { 4, player.Mana }); package.param.Add(new object[] { 4, player.EnergyMax }); package.param.Add(new object[] { 4, player.Energy }); package.param.Add(new object[] { 4, player.AttackRange }); package.param.Add(new object[] { 4, player.AttackSpeed }); package.param.Add(new object[] { 4, player.Action }); package.param.Add(new object[] { 4, player.TargetX }); package.param.Add(new object[] { 4, player.TargetY }); } else if (o.ObjectType == CObjectType.MONSTER && o is CMonsterObject) { CMonsterObject monster = o as CMonsterObject; package.param.Add(new object[] { monster.ObjectId.Length, monster.ObjectId }); package.param.Add(new object[] { 4, monster.Level }); package.param.Add(new object[] { Encoding.UTF8.GetBytes(monster.CharacterName).Length, monster.CharacterName }); package.param.Add(new object[] { monster.ResourceId.Length, monster.ResourceId }); package.param.Add(new object[] { 4, monster.Direction }); package.param.Add(new object[] { 4, monster.PosX }); package.param.Add(new object[] { 4, monster.PosY }); package.param.Add(new object[] { 4, monster.Speed }); package.param.Add(new object[] { 4, monster.HealthMax }); package.param.Add(new object[] { 4, monster.Health }); package.param.Add(new object[] { 4, monster.ManaMax }); package.param.Add(new object[] { 4, monster.Mana }); package.param.Add(new object[] { 4, 0 }); package.param.Add(new object[] { 4, 0 }); package.param.Add(new object[] { 4, monster.AttackRange }); package.param.Add(new object[] { 4, monster.AttackSpeed }); package.param.Add(new object[] { 4, monster.PassitiveMonster }); package.param.Add(new object[] { 4, monster.Action }); package.param.Add(new object[] { 4, monster.TargetX }); package.param.Add(new object[] { 4, monster.TargetY }); } sendPackage(socket, package); } } /* * if (other_posX > startX && other_posX < startX + width && other_posY > startY && other_posY < startY + height) * { * CServerPackage package = new CServerPackage(); * package.success = ACK_CONFIRM; * package.controller = CONTROLLER_INFO; * package.action = ACTION_CAMERAVIEW_OBJECT_LIST; * * package.param.Add(new object[] { otherObjectId.Length, otherObjectId }); * package.param.Add(new object[] { otherResourceId.Length, otherResourceId }); * package.param.Add(new object[] { Encoding.UTF8.GetBytes(otherPlayerName).Length, otherPlayerName }); * package.param.Add(new object[] { 4, other_posX }); * package.param.Add(new object[] { 4, other_posY }); * package.param.Add(new object[] { 4, other_speed }); * package.param.Add(new object[] { 4, action1 }); * package.param.Add(new object[] { 4, other_targetX }); * package.param.Add(new object[] { 4, other_targetY }); * * sendPackage(socket, package); * //Console.WriteLine("Found a player!"); * * CServerPackage package1 = new CServerPackage(); * package1.success = ACK_CONFIRM; * package1.controller = CONTROLLER_INFO; * package1.action = ACTION_CAMERAVIEW_OBJECT_LIST; * * package1.param.Add(new object[] { other1ObjectId.Length, other1ObjectId }); * package1.param.Add(new object[] { other1ResourceId.Length, other1ResourceId }); * package1.param.Add(new object[] { Encoding.UTF8.GetBytes(other1PlayerName).Length, other1PlayerName }); * package1.param.Add(new object[] { 4, other1_posX }); * package1.param.Add(new object[] { 4, other1_posY }); * package1.param.Add(new object[] { 4, other1_speed }); * package1.param.Add(new object[] { 4, action2 }); * package1.param.Add(new object[] { 4, other1_targetX }); * package1.param.Add(new object[] { 4, other1_targetY }); * * sendPackage(socket, package1); * //Console.WriteLine("Found a player!"); * } */ //Console.WriteLine("Request Rectangle: x = " + startX.ToString() + ", y = " + startY.ToString() + ", width = " + width.ToString() + ", height = " + height.ToString()); }
static public void parseAttack(byte[] data, int recv, Socket socket) { String playerId = "undefined"; String targetId = "undefined"; int targetX = int.MinValue; int targetY = int.MinValue; String skillId = "undefined"; for (int i = 1; i < recv;) { int length = BitConverter.ToInt32(new byte[] { data[i + 3], data[i + 2], data[i + 1], data[i] }, 0); int type = data[i + 4]; switch (type) { case TYPE_STRING: if (playerId == "undefined") { playerId = Encoding.UTF8.GetString(data, i + 5, length); } else if (targetId == "undefined") { targetId = Encoding.UTF8.GetString(data, i + 5, length); } else if (skillId == "undefined") { skillId = Encoding.UTF8.GetString(data, i + 5, length); } break; case TYPE_INT: byte[] intNumber = new byte[] { data[i + 8], data[i + 7], data[i + 6], data[i + 5] }; if (targetX == int.MinValue) { targetX = BitConverter.ToInt32(intNumber, 0); } else if (targetY == int.MinValue) { targetY = BitConverter.ToInt32(intNumber, 0); } break; } i += (length + 5); } if (playerId != "") { CCharacterObject player = objectList[playerId] as CCharacterObject; } //反馈 if (skillId != "undefined") { //计算攻击力 CServerPackage package = new CServerPackage(); package.success = ACK_CONFIRM; package.controller = CONTROLLER_BATTLE; package.action = ACTION_ATTACK; package.param.Add(new object[2] { skillId.Length, skillId }); package.param.Add(new object[2] { targetId.Length, targetId }); package.param.Add(new object[2] { 4, targetX }); package.param.Add(new object[2] { 4, targetY }); if (targetId == "") { Point target = new Point(targetX, targetY); foreach (CGameObject o in objectList) { if (Point.distance(target, new Point(o.PosX, o.PosY)) < 200 && o.ObjectId != playerId) { int power = new Random().Next(50) + 50; package.param.Add(new object[2] { o.ObjectId.Length, o.ObjectId }); package.param.Add(new object[2] { 4, power }); } } } else { int power = new Random().Next(50) + 50; package.param.Add(new object[2] { targetId.Length, targetId }); package.param.Add(new object[2] { 4, power }); } sendPackage(socket, package); } /* * CServerPackage package1 = new CServerPackage(); * package1.success = ORDER_CONFIRM; * package1.controller = NPC_CONTROLLER_BATTLE; * package1.action = ACTION_PREPARE_ATTACK; * * object[] parameter1 = new object[2]; * parameter1[1] = targetId; * parameter1[0] = ((String)parameter1[1]).Length; * package1.param.Add(parameter1); * * object[] parameter2 = new object[2]; * parameter2[0] = 4; * parameter2[1] = 0; * package1.param.Add(parameter2); * sendPackage(socket, package1); */ Console.ForegroundColor = ConsoleColor.Magenta; Console.WriteLine("Attack confirm, playerId=" + playerId + ", targetId=" + targetId + ", targetX=" + targetX + ", targetY=" + targetY + ", skillId=" + skillId); }
static public void parseMove(byte[] data, int recv) { String playerId = ""; int x = int.MinValue; int y = int.MinValue; for (int i = 1; i < recv;) { int length = BitConverter.ToInt32(new byte[] { data[i + 3], data[i + 2], data[i + 1], data[i] }, 0); int type = data[i + 4]; switch (type) { case TYPE_INT: byte[] intNumber = new byte[] { data[i + 8], data[i + 7], data[i + 6], data[i + 5] }; if (x == int.MinValue) { x = BitConverter.ToInt32(intNumber, 0); } else if (y == int.MinValue) { y = BitConverter.ToInt32(intNumber, 0); } break; case TYPE_STRING: playerId = Encoding.UTF8.GetString(data, i + 5, length); break; } i += (length + 5); } if (playerId != "") { CCharacterObject player = objectList[playerId] as CCharacterObject; if (x != int.MinValue) { player.PosX = x; } if (y != int.MinValue) { player.PosY = y; } objectList[playerId] = player; Console.ForegroundColor = ConsoleColor.Green; Console.WriteLine("Move Sync: x = " + player.PosX.ToString() + ", y = " + player.PosY.ToString()); MySqlCommand comm = new MySqlCommand(); comm.Connection = dbConnection; comm.CommandText = "update game_character set character_posx=" + player.PosX + ", character_posy=" + player.PosY + " where GUID='" + playerId + "'"; comm.ExecuteNonQuery(); foreach (CGameObject o in objectList) { if (o.client != null && o != player) { CServerPackage package = new CServerPackage(); package.success = ACK_CONFIRM; package.controller = NPC_CONTROLLER_MOVE; package.action = ACTION_MOVE; package.param.Add(new object[] { player.ObjectId.Length, player.ObjectId }); package.param.Add(new object[] { 4, player.PosX }); package.param.Add(new object[] { 4, player.PosY }); sendPackage(o.client, package); } } } }
static public void parseMoveTo(byte[] data, int recv) { String playerId = ""; int x = int.MinValue; int y = int.MinValue; for (int i = 1; i < recv;) { int length = BitConverter.ToInt32(new byte[] { data[i + 3], data[i + 2], data[i + 1], data[i] }, 0); int type = data[i + 4]; switch (type) { case TYPE_INT: byte[] intNumber = new byte[] { data[i + 8], data[i + 7], data[i + 6], data[i + 5] }; if (x == int.MinValue) { x = BitConverter.ToInt32(intNumber, 0); } else if (y == int.MinValue) { y = BitConverter.ToInt32(intNumber, 0); } break; case TYPE_STRING: playerId = Encoding.UTF8.GetString(data, i + 5, length); break; } i += (length + 5); } if (playerId != "") { CCharacterObject player = objectList[playerId] as CCharacterObject; if (x != int.MinValue) { player.TargetX = x; } if (y != int.MinValue) { player.TargetY = y; } objectList[playerId] = player; foreach (CGameObject o in objectList) { if (o.client != null && o != player) { CServerPackage package = new CServerPackage(); package.success = ACK_CONFIRM; package.controller = NPC_CONTROLLER_MOVE; package.action = ACTION_MOVETO; package.param.Add(new object[] { player.ObjectId.Length, player.ObjectId }); package.param.Add(new object[] { 4, player.TargetX }); package.param.Add(new object[] { 4, player.TargetY }); sendPackage(o.client, package); } } Console.ForegroundColor = ConsoleColor.Green; Console.WriteLine("Target: x = " + player.TargetX.ToString() + ", y = " + player.TargetY.ToString()); } }