void DoMsgCreate(eWoW.OP code, PlayerConnection conn) { if (charids.Count >= 10) { conn.Send(OP.SMSG_CHAR_CREATE, new byte[] { (byte)CHAR.CREATE_MAX_PLAYER_REALM }); return; } string name; conn.Seek(2).Get(out name); if (gameServer.GetCharacter(name) != 0) { gameServer.LogMessage("Create character error nametaken:" + conn.userName + " name: " + name); conn.Send(OP.SMSG_CHAR_CREATE, new byte[] { (byte)CHAR.CREATE_NAME_IN_USE }); return; } Character c = new Character(gameServer); if (!c.CreateNew(conn, name)) { conn.Send(OP.SMSG_CHAR_CREATE, new byte[] { (byte)CHAR.CREATE_FAILED }); return; } if (gameServer.Type.ToLower() == "pvp") { int side = Side(c.Race); foreach (string id in charids) { Character nc = gameServer.LoadCharacter(conn, id); if (nc != null && Side(nc.Race) != side) { gameServer.DelCharacter(c); gameServer.LogMessage("CMSG_CHAR_CREATE NotSameSide" + conn.userName + " name: " + name); conn.Send(OP.SMSG_CHAR_CREATE, new byte[] { (byte)CHAR.CREATE_NOT_SAME_SIDE }); return; } } } gameServer.AddCharacter(name, c.GUID, (byte)c.Race, (byte)c.Gender, (byte)c.Class); gameServer.AddObj(c); charids.Add(name); string str = ""; foreach (string n in charids) { str += n + " "; } gameServer.SetChar(conn.userName, str.Trim()); conn.Send(OP.SMSG_CHAR_CREATE, new byte[] { (byte)CHAR.CREATE_OK }); // create ok }
void NameQuery(OP code, PlayerConnection c) { uint guid; c.Seek(2).Get(out guid); ByteArrayBuilder pack = new ByteArrayBuilder(false); pack.Add(guid, 0); byte race, gender, cls; string nm = gameServer.GetCharacter(guid, out race, out gender, out cls); if (nm != null) { pack.Add(nm).Add((uint)race, (uint)gender, (uint)cls); } else { pack.Add("Unknown").Add((uint)0, 0, 0); } c.Send(OP.SMSG_NAME_QUERY_RESPONSE, pack); }