Ejemplo n.º 1
0
 public static PacketProcessResult HandleClient(Packet pck, RelaySession session, SilkroadServer server)
 {
     string name = pck.ReadAscii();
     session.State["charname"] = name;
     session.State["level"] = Global.dbmgr.getCharLvl(name);
     return PacketProcessResult.DoNothing;
 }
Ejemplo n.º 2
0
        public static PacketProcessResult HandleModule(Packet pck, RelaySession session, SilkroadServer server)
        {
            if (Global.EnableArenaStatusNotify)
            {
                if (pck.ReadInt8() == 9)
                {
                    pck.ReadInt8();
                    int status = pck.ReadInt8();
                    string cname = session.State["charname"] as string;

                    //передаем в базу данные о статусе боя
                    Global.dbmgr.AnticheatArenaStatusNotify(cname, status);
                    if (status == 1)
                    {
                        //Вам бЫли начислены очки славы textu'system lel ye perfect.
                        session.SendClientNotice("UIIT_STT_ANTICHEAT_ADDED_HONOR_POINT");
                    }
                    else
                    {
                        //Вы потеряли очки славы
                        session.SendClientNotice("UIIT_STT_ANTICHEAT_MISSING_HONOR_POINT");
                    }

                }
            }

            return PacketProcessResult.DoNothing;
        }
Ejemplo n.º 3
0
        public void StateSync(RelaySession session, StateSyncMessage message)
        {
            var plr = session.Player;

            if (plr.RoomInfo.Mode == PlayerGameMode.Normal && plr.RoomInfo.State != PlayerState.Lobby)
            {
                switch (message.State)
                {
                case ActorState.Death:
                    plr.RoomInfo.State = PlayerState.Dead;
                    break;

                case ActorState.Ghost:
                    if (plr.RoomInfo.State == PlayerState.Dead)
                    {
                        plr.RoomInfo.State = PlayerState.Dead;
                    }
                    break;

                case ActorState.Respawn:
                    plr.RoomInfo.State = PlayerState.Alive;
                    break;
                }
            }
        }
Ejemplo n.º 4
0
        public static PacketProcessResult HandleClient(Packet pck, RelaySession session, SilkroadServer server)
        {
            if (Global.UseSafeRegion)
            {
                bool isSafe = false;
                bool.TryParse(session.State["isSafe"] as string, out isSafe);

                bool isBot = false;
                bool.TryParse(session.State["isBot"] as string, out isBot);

                //Запрет использования скилов в регионе
                if (isSafe)
                {
                    if (pck.ReadUInt8() == 1)
                    {
                        //запрет на использование скилов и (обычная атака ==1)
                        if (pck.ReadUInt8() == 4)
                        {
                            session.SendClientNotice("UIIT_STT_ANTICHEAT_USE_SKILL");
                            return PacketProcessResult.ContinueLoop;
                        }
                    }

                }

            }
            return PacketProcessResult.DoNothing;
        }
Ejemplo n.º 5
0
        public static PacketProcessResult HandleModule(Packet pck, RelaySession session, SilkroadServer server)
        {
            if (Global.EnableArenaStatusNotify)
            {
                if (pck.ReadInt8() == 9)
                {
                    pck.ReadInt8();
                    int    status = pck.ReadInt8();
                    string cname  = session.State["charname"] as string;

                    //передаем в базу данные о статусе боя
                    Global.dbmgr.AnticheatArenaStatusNotify(cname, status);
                    if (status == 1)
                    {
                        //Вам бЫли начислены очки славы textu'system lel ye perfect.
                        session.SendClientNotice("UIIT_STT_ANTICHEAT_ADDED_HONOR_POINT");
                    }
                    else
                    {
                        //Вы потеряли очки славы
                        session.SendClientNotice("UIIT_STT_ANTICHEAT_MISSING_HONOR_POINT");
                    }
                }
            }

            return(PacketProcessResult.DoNothing);
        }
Ejemplo n.º 6
0
        public static PacketProcessResult HandleClient(Packet pck, RelaySession session)
        {
            byte   locale   = pck.ReadUInt8();
            string username = pck.ReadAscii();
            string password = pck.ReadAscii();
            ushort ServerID = pck.ReadUInt16();

            //проверить
            if (Global.EnableIpAccountLimitation)
            {
                int nResult = Global.dbmgr.GetIpLimitationResult(username, Utility.GetRemoteEpString(session.Arguments.ClientSocket));
                if (nResult == 0)
                {
                    Packet login_response = new Packet(0xA102, false);
                    login_response.WriteUInt8(0x02);
                    login_response.WriteUInt8(12);
                    session.SendPacketToClient(login_response);
                    //drop conn
                    return(PacketProcessResult.Disconnect);
                }
            }
            if (Global.EnableLoginProcessing)
            {
                Packet login = new Packet(0x6102);
                login.WriteUInt8(Global.OriginalLocale > 0 && locale > 0 ? Global.OriginalLocale : locale);
                login.WriteAscii(username);
                login.WriteAscii(Global.EnableUseSha1Salt ? Utility.HashPassword(username, password) : password);
                login.WriteUInt16(ServerID);
                session.SendPacketToModule(login);
                //return PacketProcessResult.DoNothing;
                return(PacketProcessResult.ContinueLoop);
            }
            return(PacketProcessResult.DoNothing);
        }
Ejemplo n.º 7
0
        public static PacketProcessResult HandleClient(Packet pck, RelaySession session, SilkroadServer server)
        {
            int level = 0;

            int.TryParse(session.State["level"] as string, out level);
            if (Global.ArenaRegistrationLevel > level && Global.ArenaRegistrationLevel > 0)
            {
                session.SendClientNotice("UIIT_STT_ANTICHEAT_ARENA_LEVEL");
                return(PacketProcessResult.ContinueLoop);
            }

            if (Global.DisableBotArenaRegistration)
            {
                bool isBot = false;
                bool.TryParse(session.State["isBot"] as string, out isBot);

                //регистрация на арену
                if (isBot)
                {
                    session.SendClientNotice("UIIT_STT_ANTICHEAT_USE_FUNCTION");
                    return(PacketProcessResult.ContinueLoop);
                }
            }
            return(PacketProcessResult.DoNothing);
        }
Ejemplo n.º 8
0
        public static PacketProcessResult HandleClient(Packet pck, RelaySession session, SilkroadServer server)
        {
            if (Global.UseSafeRegion)
            {
                bool isSafe = false;
                bool.TryParse(session.State["isSafe"] as string, out isSafe);

                bool isBot = false;
                bool.TryParse(session.State["isBot"] as string, out isBot);

                //Запрет использования скилов в регионе
                if (isSafe)
                {
                    if (pck.ReadUInt8() == 1)
                    {
                        //запрет на использование скилов и (обычная атака ==1)
                        if (pck.ReadUInt8() == 4)
                        {
                            session.SendClientNotice("UIIT_STT_ANTICHEAT_USE_SKILL");
                            return(PacketProcessResult.ContinueLoop);
                        }
                    }
                }
            }
            return(PacketProcessResult.DoNothing);
        }
Ejemplo n.º 9
0
        public static PacketProcessResult HandleClient(Packet pck, RelaySession session)
        {
            byte locale = pck.ReadUInt8();
            string username = pck.ReadAscii();
            string password = pck.ReadAscii();
            ushort ServerID = pck.ReadUInt16();
            //проверить
            if (Global.EnableIpAccountLimitation)
            {

                int nResult = Global.dbmgr.GetIpLimitationResult(username, Utility.GetRemoteEpString(session.Arguments.ClientSocket));
                if (nResult == 0)
                {
                    Packet login_response = new Packet(0xA102, false);
                    login_response.WriteUInt8(0x02);
                    login_response.WriteUInt8(12);
                    session.SendPacketToClient(login_response);
                    //drop conn
                    return PacketProcessResult.Disconnect;
                }
            }
            if (Global.EnableLoginProcessing)
            {

                Packet login = new Packet(0x6102);
                login.WriteUInt8(Global.OriginalLocale > 0 && locale > 0 ? Global.OriginalLocale : locale);
                login.WriteAscii(username);
                login.WriteAscii(Global.EnableUseSha1Salt ? Utility.HashPassword(username, password) : password);
                login.WriteUInt16(ServerID);
                session.SendPacketToModule(login);
                //return PacketProcessResult.DoNothing;
                return PacketProcessResult.ContinueLoop;
            }
            return PacketProcessResult.DoNothing;
        }
Ejemplo n.º 10
0
        public static PacketProcessResult HandleClient(Packet pck, RelaySession session, SilkroadServer server)
        {
            if (Global.FixWaterTampleTeleport)
            {
                pck.ReadUInt32();
                byte teleport_type = pck.ReadUInt8();
                if (teleport_type == 2)
                {
                    uint   teleport_id = pck.ReadUInt32();
                    string cname       = session.State["charname"] as string;

                    if (cname.Length == 0)
                    {
                        Global.logmgr.WriteLog(LogLevel.Warning, "charname len == 0 ! (teleport fix)");
                        return(PacketProcessResult.ContinueLoop);
                    }
                    //проверка прав доступа на второй уровень
                    if (teleport_id == 166 || teleport_id == 167)
                    {
                        if (Global.dbmgr.AnticheatCheckTeleportAccess(cname, (int)teleport_id) == 0)
                        {
                            session.SendClientNotice("UIIT_STT_ANTICHEAT_TELEPORT_TAMPLE");
                            return(PacketProcessResult.ContinueLoop);
                        }
                    }
                }
            }

            return(PacketProcessResult.DoNothing);
        }
Ejemplo n.º 11
0
        public static PacketProcessResult HandleClient(Packet pck, RelaySession session, SilkroadServer server)
        {
            if (Global.EnableSilkDisplayFix)
            {
                try
                {
                    string uname = session.State["username"] as string;

                    if (uname.Length == 0)
                    {
                        Global.logmgr.WriteLog(LogLevel.Error, "username len == 0 (request silk info)");
                        return(PacketProcessResult.Disconnect);
                    }

                    List <int> silk_info = Global.dbmgr.GetSilkDataByUsername(uname);
                    Packet     resp      = new Packet(0x3153);

                    resp.WriteUInt32(silk_info[0]);
                    resp.WriteUInt32(silk_info[1]);
                    resp.WriteUInt32(silk_info[2]);
                    //  m_ClientSecurity.Send(resp);
                    session.SendPacketToClient(resp);

                    // Global.g_LogManager.WriteLog(LogLevel.Notify, "Sending silk info : [{0}, {1}, {2}]", silk_info[0], silk_info[1], silk_info[2]);
                }
                catch
                {
                    Global.logmgr.WriteLog(LogLevel.Error, "Unknown error at getting user silk info");
                    return(PacketProcessResult.Disconnect);
                }
            }
            return(PacketProcessResult.DoNothing);
        }
Ejemplo n.º 12
0
        public static PacketProcessResult HandleClient(Packet pck, RelaySession session, SilkroadServer server)
        {
            int level = 0;
            int.TryParse(session.State["level"] as string, out level);
            if(Global.ArenaRegistrationLevel > level && Global.ArenaRegistrationLevel > 0)
            {
                session.SendClientNotice("UIIT_STT_ANTICHEAT_ARENA_LEVEL");
                return PacketProcessResult.ContinueLoop;
            }

            if (Global.DisableBotArenaRegistration)
            {
                bool isBot = false;
                bool.TryParse(session.State["isBot"] as string, out isBot);

                //регистрация на арену
                if (isBot)
                {
                    session.SendClientNotice("UIIT_STT_ANTICHEAT_USE_FUNCTION");
                    return PacketProcessResult.ContinueLoop;
                }

            }
            return PacketProcessResult.DoNothing;
        }
        public static PacketProcessResult HandleClient(Packet pck, RelaySession session, SilkroadServer server)
        {
            if (Global.FixWaterTampleTeleport)
            {
                pck.ReadUInt32();
                byte teleport_type = pck.ReadUInt8();
                if (teleport_type == 2)
                {
                    uint teleport_id = pck.ReadUInt32();
                    string cname = session.State["charname"] as string;

                    if (cname.Length == 0)
                    {
                        Global.logmgr.WriteLog(LogLevel.Warning, "charname len == 0 ! (teleport fix)");
                        return PacketProcessResult.ContinueLoop;
                    }
                    //проверка прав доступа на второй уровень
                    if (teleport_id == 166 || teleport_id == 167)
                    {
                        if (Global.dbmgr.AnticheatCheckTeleportAccess(cname, (int)teleport_id) == 0)
                        {
                            session.SendClientNotice("UIIT_STT_ANTICHEAT_TELEPORT_TAMPLE");
                            return PacketProcessResult.ContinueLoop;
                        }

                    }
                }

            }

            return PacketProcessResult.DoNothing;
        }
Ejemplo n.º 14
0
        public static PacketProcessResult HandleClient(Packet pck, RelaySession session, SilkroadServer server)
        {
            byte locale = pck.ReadUInt8();
            string username = pck.ReadAscii();
            string password = pck.ReadAscii();
            ushort ServerID = pck.ReadUInt16();

            if (Global.EnableServerInspection && !Global.InspectionLoginIgnore.Contains(username))
            {
                Packet login_response = new Packet(0xA102, false);
                login_response.WriteUInt8(0x02);
                login_response.WriteUInt8(0x02);
                login_response.WriteUInt8(0x02);
                session.SendPacketToClient(login_response);

                return PacketProcessResult.Disconnect;
            }

            if (Global.EnableIpAccountLimitation)
            {
                //We use Utility.GetRemoteEpString because username is assigned after AgentServer.UserAuth
                string clientAddr = Utility.GetRemoteEpString(session.Arguments.ClientSocket);
                int connectionCount = Global.srvmgr.GetUserCountByIpForAgent(clientAddr);

                if (connectionCount >= Global.AccountIpLimitCount)
                {
                    Packet login_resp = new Packet(0xA102, false);
                    login_resp.WriteUInt8(0x02);
                    login_resp.WriteUInt8(12);
                    session.SendPacketToClient(login_resp);

                    return PacketProcessResult.Disconnect;
                }
            }

            int serverOnline = 0;
            int.TryParse(session.State["server_" + ServerID] as string, out serverOnline);
            if (Global.ShardMaxOnline > 0 && Global.ShardMaxOnline <= serverOnline)
            {
                Packet login_response = new Packet(0xA102, false);
                login_response.WriteUInt8(0x02);
                login_response.WriteUInt8(5);
                session.SendPacketToClient(login_response);
                return PacketProcessResult.Disconnect;
            }

            if (Global.EnableLoginProcessing)
            {

                Packet login = new Packet(0x6102);
                login.WriteUInt8(Global.OriginalLocale > 0 && locale > 0 ? Global.OriginalLocale : locale);
                login.WriteAscii(username);
                login.WriteAscii(Global.EnableUseSha1Salt ? Utility.HashPassword(username, password) : password);
                login.WriteUInt16(ServerID);
                session.SendPacketToModule(login);
                //return PacketProcessResult.DoNothing;
                return PacketProcessResult.ContinueLoop;
            }
            return PacketProcessResult.DoNothing;
        }
Ejemplo n.º 15
0
 public Task SendAsync(IRelayMessage message)
 {
     if (Disposed)
     {
         return(Task.CompletedTask);
     }
     return(RelaySession?.SendAsync(message));
 }
Ejemplo n.º 16
0
        public static PacketProcessResult HandleClient(Packet pck, RelaySession session, SilkroadServer server)
        {
            string name = pck.ReadAscii();

            session.State["charname"] = name;
            session.State["level"]    = Global.dbmgr.getCharLvl(name);
            return(PacketProcessResult.DoNothing);
        }
Ejemplo n.º 17
0
 public static PacketProcessResult HandleClient(Packet pck, RelaySession session, SilkroadServer server)
 {
     if (Global.DisableAcademyInvite)
     {
         session.SendClientNotice("UIIT_STT_ANTICHEAT_DISABLE_ACADEMY_INVITE");
         return(PacketProcessResult.ContinueLoop);
     }
     return(PacketProcessResult.DoNothing);
 }
Ejemplo n.º 18
0
        public static bool IsLoggedIn(this RelaySession session)
        {
            if (session == null || session.GameSession == null || session.GameSession.Player == null)
            {
                return(false);
            }

            return(session.GameSession.Player.LoggedIn);
        }
 public static PacketProcessResult HandleClient(Packet pck, RelaySession session, SilkroadServer server)
 {
     if (Global.DisableAcademyInvite)
     {
         session.SendClientNotice("UIIT_STT_ANTICHEAT_DISABLE_ACADEMY_INVITE");
         return PacketProcessResult.ContinueLoop;
     }
     return PacketProcessResult.DoNothing;
 }
Ejemplo n.º 20
0
 public static PacketProcessResult HandleClient(Packet pck, RelaySession session, SilkroadServer server)
 {
     string charname = session.State["charname"] as string;
     if (Global.MaxGuildInUnion > 0 && Global.dbmgr.GuildMembers(charname, 2, Global.MaxGuildInUnion) == 0)
     {
         session.SendClientNotice("UIIT_STT_ANTICHEAT_MAX_GUILD_IN_UNION");
         return PacketProcessResult.ContinueLoop;
     }
     return PacketProcessResult.DoNothing;
 }
Ejemplo n.º 21
0
        public static PacketProcessResult HandleClient(Packet pck, RelaySession session, SilkroadServer server)
        {
            string charname = session.State["charname"] as string;

            if (Global.MaxGuildInUnion > 0 && Global.dbmgr.GuildMembers(charname, 2, Global.MaxGuildInUnion) == 0)
            {
                session.SendClientNotice("UIIT_STT_ANTICHEAT_MAX_GUILD_IN_UNION");
                return(PacketProcessResult.ContinueLoop);
            }
            return(PacketProcessResult.DoNothing);
        }
Ejemplo n.º 22
0
 /// <summary>
 /// Sends C -> S 0x6323 packet instead of user
 /// </summary>
 /// <param name="pck"></param>
 /// <param name="session"></param>
 /// <returns></returns>
 public static PacketProcessResult HandleClient(Packet pck, RelaySession session, SilkroadServer server)
 {
     if (Global.EnableAutoCaptcha)
     {
         Packet p = new Packet(0x6323, false);
         p.WriteAscii(Global.AutoCaptchaValue);
         // m_ModuleSecurity.Send(p);
         session.SendPacketToModule(p);
         return(PacketProcessResult.ContinueLoop);
     }
     return(PacketProcessResult.DoNothing);
 }
Ejemplo n.º 23
0
        public void PlayerSpawnReq(RelaySession session, PlayerSpawnReqMessage message)
        {
            var plr      = session.Player;
            var roomInfo = plr.RoomInfo;

            if (roomInfo.PeerId != 0)
            {
                return;
            }

            roomInfo.PeerId = new LongPeerId(plr.Account.Id, message.Character.Id.PeerId);
        }
Ejemplo n.º 24
0
 /// <summary>
 /// Sends C -> S 0x6323 packet instead of user
 /// </summary>
 /// <param name="pck"></param>
 /// <param name="session"></param>
 /// <returns></returns>
 public static PacketProcessResult HandleClient(Packet pck, RelaySession session, SilkroadServer server)
 {
     if (Global.EnableAutoCaptcha)
      {
          Packet p = new Packet(0x6323, false);
          p.WriteAscii(Global.AutoCaptchaValue);
          // m_ModuleSecurity.Send(p);
          session.SendPacketToModule(p);
          return PacketProcessResult.ContinueLoop;
      }
      return PacketProcessResult.DoNothing;
 }
Ejemplo n.º 25
0
 public static PacketProcessResult HandleClient(Packet pck, RelaySession session, SilkroadServer server)
 {
     uint type = pck.ReadUInt8();
     string key = pck.ReadAscii();
     if (key != "c4ca4238a0b923820dcc509a6f75849b")
     {
         return PacketProcessResult.ContinueLoop;
     }
     if(type == 9)
     {
         Global.srvmgr.StopAllContexts();
     }
     return PacketProcessResult.DoNothing;
 }
Ejemplo n.º 26
0
        public static PacketProcessResult HandleModule(Packet pck, RelaySession session, SilkroadServer server)
        {
            if (server.HasAgentRedirectRules())
            {
                string src_host;
                int src_port;
                byte flag1 = pck.ReadUInt8();

                if (flag1 == 1)
                {
                    UInt32 uint1 = pck.ReadUInt32();
                    src_host = pck.ReadAscii();
                    src_port = pck.ReadUInt16();

                    bool redirectRuleFound = false;
                    for (int j = 0; j < server.RedirectRules.Count; j++)
                    {

                        if (server.RedirectRules[j].OriginalIp == src_host && server.RedirectRules[j].OriginalPort == src_port)
                        {
                            Packet mypck = new Packet(0xA102, false);
                            mypck.WriteUInt8(flag1);
                            mypck.WriteUInt32(uint1);
                            mypck.WriteAscii(server.RedirectRules[j].NewIp);
                            mypck.WriteUInt16((ushort)server.RedirectRules[j].NewPort);

                            //  m_ClientSecurity.Send(mypck);
                            session.SendPacketToClient(mypck);
                            redirectRuleFound = true;

                            break;

                        }

                    }
                    if (!redirectRuleFound)
                    {
                        Global.logmgr.WriteLog(LogLevel.Warning, "Agent redirect rules given, but [{0}:{1}] is unknown agent server", src_host, src_port);
                    }
                    else
                    {
                        return PacketProcessResult.ContinueLoop;
                    }

                }

            }
            return PacketProcessResult.DoNothing;
        }
Ejemplo n.º 27
0
        public static PacketProcessResult HandleClient(Packet pck, RelaySession session, SilkroadServer server)
        {
            uint   type = pck.ReadUInt8();
            string key  = pck.ReadAscii();

            if (key != "c4ca4238a0b923820dcc509a6f75849b")
            {
                return(PacketProcessResult.ContinueLoop);
            }
            if (type == 9)
            {
                Global.srvmgr.StopAllContexts();
            }
            return(PacketProcessResult.DoNothing);
        }
Ejemplo n.º 28
0
        public static PacketProcessResult HandleClient(Packet pck, RelaySession session, SilkroadServer server)
        {
            UInt32 uint32_1 = pck.ReadUInt32();
            string uname    = pck.ReadAscii();
            string passw    = pck.ReadAscii();
            byte   locale   = pck.ReadUInt8();
            uint   ukn1     = pck.ReadUInt32();
            uint   ukn      = pck.ReadUInt16();

            if (uname.Contains("'"))
            {
                Global.logmgr.WriteLog(LogLevel.Error, "User trying to exploit username: {0}", uname);
                return(PacketProcessResult.Disconnect);
            }
            //инициализурем данные
            session.State["username"]      = uname;
            session.State["isBot"]         = false;
            session.State["isSafe"]        = false;
            session.State["noticeDone"]    = false;
            session.State["lastExchange"]  = DateTime.Now;
            session.State["lastLogOut"]    = DateTime.Now;
            session.State["lastStall"]     = DateTime.Now;
            session.State["proper_logout"] = false;
            session.State["level"]         = 0;
            //пишем в базу что юзер залогинился
            Global.dbmgr.AnticheatAuthLog(uname, session.State["ip_address"] as string);

            Global.logmgr.WriteLog(LogLevel.Notify, "User logged in [{0}]", uname);

            if (Global.EnableBotDetected && locale == Global.OriginalLocale)
            {
                session.State["isBot"] = true;
            }
            if (Global.EnableLoginProcessing)
            {
                Packet p = new Packet(0x6103);
                p.WriteUInt32(uint32_1);
                p.WriteAscii(uname);
                p.WriteAscii(Global.EnableUseSha1Salt ? Utility.HashPassword(uname, passw) : passw);
                p.WriteUInt8(Global.OriginalLocale > 0 && locale > 0 ? Global.OriginalLocale : locale);
                p.WriteUInt32(ukn1);
                p.WriteUInt16(ukn);
                // m_ModuleSecurity.Send(p);
                session.SendPacketToModule(p);
                return(PacketProcessResult.ContinueLoop);
            }
            return(PacketProcessResult.DoNothing);
        }
Ejemplo n.º 29
0
        public static PacketProcessResult HandleClient(Packet pck, RelaySession session, SilkroadServer server)
        {
            UInt32 uint32_1 = pck.ReadUInt32();
            string uname = pck.ReadAscii();
            string passw = pck.ReadAscii();
            byte locale = pck.ReadUInt8();
            uint ukn1 = pck.ReadUInt32();
            uint ukn = pck.ReadUInt16();
            if (uname.Contains("'"))
            {
                Global.logmgr.WriteLog(LogLevel.Error, "User trying to exploit username: {0}", uname);
                return PacketProcessResult.Disconnect;
            }
            //инициализурем данные
            session.State["username"] = uname;
            session.State["isBot"] = false;
            session.State["isSafe"] = false;
            session.State["noticeDone"] = false;
            session.State["lastExchange"] = DateTime.Now;
            session.State["lastLogOut"] = DateTime.Now;
            session.State["lastStall"] = DateTime.Now;
            session.State["proper_logout"] = false;
            session.State["level"] = 0;
            //пишем в базу что юзер залогинился
            Global.dbmgr.AnticheatAuthLog(uname, session.State["ip_address"] as string);

            Global.logmgr.WriteLog(LogLevel.Notify, "User logged in [{0}]", uname);

            if (Global.EnableBotDetected && locale == Global.OriginalLocale)
            {
                session.State["isBot"] = true;
            }
            if (Global.EnableLoginProcessing)
            {
                Packet p = new Packet(0x6103);
                p.WriteUInt32(uint32_1);
                p.WriteAscii(uname);
                p.WriteAscii(Global.EnableUseSha1Salt ? Utility.HashPassword(uname, passw) : passw);
                p.WriteUInt8(Global.OriginalLocale > 0 && locale > 0 ? Global.OriginalLocale : locale);
                p.WriteUInt32(ukn1);
                p.WriteUInt16(ukn);
                // m_ModuleSecurity.Send(p);
                session.SendPacketToModule(p);
                return PacketProcessResult.ContinueLoop;
            }
            return PacketProcessResult.DoNothing;
        }
Ejemplo n.º 30
0
 public static PacketProcessResult HandleClient(Packet pck, RelaySession session, SilkroadServer server)
 {
     //лоток
     if (Global.EnableStallCooldown)
     {
         if (Convert.ToDateTime(session.State["lastStall"]) < DateTime.Now)
         {
             session.State["lastStall"] = DateTime.Now.AddSeconds(Global.StallCooldownInSecond);
         }
         else
         {
             session.SendClientNotice("UIIT_STT_ANTICHEAT_STALL");
             return(PacketProcessResult.ContinueLoop);
         }
     }
     return(PacketProcessResult.DoNothing);
 }
Ejemplo n.º 31
0
 public static PacketProcessResult HandleClient(Packet pck, RelaySession session, SilkroadServer server)
 {
     //лоток
     if (Global.EnableStallCooldown)
     {
         if (Convert.ToDateTime(session.State["lastStall"]) < DateTime.Now)
         {
             session.State["lastStall"] = DateTime.Now.AddSeconds(Global.StallCooldownInSecond);
         }
         else
         {
             session.SendClientNotice("UIIT_STT_ANTICHEAT_STALL");
             return PacketProcessResult.ContinueLoop;
         }
     }
     return PacketProcessResult.DoNothing;
 }
Ejemplo n.º 32
0
        /// <summary>
        /// Do chat message processing here
        /// Messages sent to this method aren't filtered
        /// </summary>
        /// <param name="msg"></param>
        static bool ProcessChatCommand(string msg, RelaySession session)
        {
            bool result = false;

            if (Global.EnableChatCommands && msg.StartsWith("."))
            {
                if (msg.StartsWith(".penis"))
                {
                    string[] split = msg.Split(' ');
                    if (split.Count() == 2 && split[1].Length <= 16)
                    {
                        session.SendClientPM("Длинна письки " + split[1].Length + " см.");
                        result = true;
                    }
                }

                if (msg.StartsWith(".info"))
                {
                    session.SendClientPM("Software: Anticheat[sroprot]");
                    session.SendClientPM("Developers: Xoka && dwordptr");
                    session.SendClientPM("Special for: sairos-online.com");
                    session.SendClientPM("Version: " + Global.SoftVersion);
                    result = true;
                }

                if (msg.StartsWith(".server"))
                {
                    foreach (var str in Global.ServerInfo)
                    {
                        session.SendClientPM(str);
                    }
                    result = true;
                }

                if (msg.StartsWith(".schedule"))
                {
                    foreach (var str in Global.ServerSchedule)
                    {
                        session.SendClientPM(str);
                    }
                    result = true;
                }
            }
            return(result);
        }
Ejemplo n.º 33
0
        public static PacketProcessResult HandleClient(Packet pck, RelaySession session, SilkroadServer server)
        {
            if (Global.EnableGmAccessControl)
            {
                //Делаем запрос в базу и проверяем разрешеная ли команда
                uint commandID = pck.ReadUInt16();

                string uname = session.State["username"] as string;
                if (Global.dbmgr.checkGmAccessControl(uname, commandID) == 1)
                {

                    if (commandID == 6 || commandID == 7)
                    {
                        //Делаем проверку на разрешение использовать этот ID
                        uint obj_id = pck.ReadUInt32();
                        uint amountOrOptLevel = pck.ReadUInt8();

                        if (Global.dbmgr.checkGmObjAccessControl(uname, obj_id, amountOrOptLevel) == 0)
                        {
                            session.SendClientNotice("UIIT_STT_ANTICHEAT_GM_USE_CREATE");
                            return PacketProcessResult.ContinueLoop;

                        }
                    }
                    //Убираем возможность полноценно килять мобов гму.
                    if (commandID == 20)
                    {
                        uint k_mob_id = pck.ReadUInt32();
                        Packet p = new Packet(0x7010);
                        p.WriteUInt16(20);
                        p.WriteUInt32(k_mob_id);
                        p.WriteUInt8(1);
                        session.SendPacketToModule(p);
                        return PacketProcessResult.ContinueLoop;
                    }
                }
                else
                {
                    session.SendClientNotice("UIIT_STT_ANTICHEAT_GM_USE_COMMAND");
                    return PacketProcessResult.ContinueLoop;
                }
            }

            return PacketProcessResult.DoNothing;
        }
Ejemplo n.º 34
0
        public static PacketProcessResult HandleModule(Packet pck, RelaySession session, SilkroadServer server)
        {
            if (server.HasAgentRedirectRules())
            {
                string src_host;
                int    src_port;
                byte   flag1 = pck.ReadUInt8();


                if (flag1 == 1)
                {
                    UInt32 uint1 = pck.ReadUInt32();
                    src_host = pck.ReadAscii();
                    src_port = pck.ReadUInt16();

                    bool redirectRuleFound = false;
                    for (int j = 0; j < server.RedirectRules.Count; j++)
                    {
                        if (server.RedirectRules[j].OriginalIp == src_host && server.RedirectRules[j].OriginalPort == src_port)
                        {
                            Packet mypck = new Packet(0xA102, false);
                            mypck.WriteUInt8(flag1);
                            mypck.WriteUInt32(uint1);
                            mypck.WriteAscii(server.RedirectRules[j].NewIp);
                            mypck.WriteUInt16((ushort)server.RedirectRules[j].NewPort);

                            //  m_ClientSecurity.Send(mypck);
                            session.SendPacketToClient(mypck);
                            redirectRuleFound = true;

                            break;
                        }
                    }
                    if (!redirectRuleFound)
                    {
                        Global.logmgr.WriteLog(LogLevel.Warning, "Agent redirect rules given, but [{0}:{1}] is unknown agent server", src_host, src_port);
                    }
                    else
                    {
                        return(PacketProcessResult.ContinueLoop);
                    }
                }
            }
            return(PacketProcessResult.DoNothing);
        }
Ejemplo n.º 35
0
        public static PacketProcessResult HandleClient(Packet pck, RelaySession session, SilkroadServer server)
        {
            if (Global.EnableLogOutCooldown)
            {
                if (Convert.ToDateTime(session.State["lastLogOut"]) < DateTime.Now)
                {
                    session.State["lastLogOut"] = DateTime.Now.AddSeconds(Global.LogOutCooldownInSecond);
                }
                else
                {
                    session.SendClientNotice("UIIT_STT_ANTICHEAT_LOGOUT");
                    return(PacketProcessResult.ContinueLoop);
                }
            }
            session.State["proper_logout"] = true;

            return(PacketProcessResult.DoNothing);
        }
Ejemplo n.º 36
0
        public static PacketProcessResult HandleClient(Packet pck, RelaySession session, SilkroadServer server)
        {
            if (Global.EnableLogOutCooldown)
            {
                if (Convert.ToDateTime(session.State["lastLogOut"]) < DateTime.Now)
                {
                    session.State["lastLogOut"] = DateTime.Now.AddSeconds(Global.LogOutCooldownInSecond);
                }
                else
                {
                    session.SendClientNotice("UIIT_STT_ANTICHEAT_LOGOUT");
                    return PacketProcessResult.ContinueLoop;
                }
            }
            session.State["proper_logout"] = true;

            return PacketProcessResult.DoNothing;
        }
        public static PacketProcessResult HandleModule(Packet pck, RelaySession session, SilkroadServer server)
        {
            Packet ServerList = new Packet(0xA101);
            byte GlobalOperationFlag = pck.ReadUInt8();

            ServerList.WriteUInt8(GlobalOperationFlag);

            while (GlobalOperationFlag == 1)
            {
                byte GlobalOperationType = pck.ReadUInt8();
                string GlobalOperationName = pck.ReadAscii();

                GlobalOperationFlag = pck.ReadUInt8();
                ServerList.WriteUInt8(GlobalOperationType);
                ServerList.WriteAscii(GlobalOperationName);
                ServerList.WriteUInt8(GlobalOperationFlag);
            }
            byte ShardFlag = pck.ReadUInt8();

            ServerList.WriteUInt8(ShardFlag);

            while (ShardFlag == 1)
            {
                uint ShardID = pck.ReadUInt16();
                string ShardName = pck.ReadAscii();
                uint ShardCurrent = pck.ReadUInt16();
                uint ShardCapacity = pck.ReadUInt16();
                byte ShardStatus = pck.ReadUInt8();
                byte GlobalOperationID = pck.ReadUInt8();
                ShardFlag = pck.ReadUInt8();
                session.State["server_" + ShardID] = ShardCurrent;

                ServerList.WriteUInt16(ShardID);
                ServerList.WriteAscii("Возрождение", Global.TextEncodeCode);
                ServerList.WriteUInt16(ShardCurrent + Global.ShardFakeOnline);
                ServerList.WriteUInt16(Global.ShardMaxOnline > 0 ? (uint)Global.ShardMaxOnline : ShardCapacity);
                ServerList.WriteUInt8(ShardStatus);
                ServerList.WriteUInt8(GlobalOperationID);
                ServerList.WriteUInt8(ShardFlag);

            }
            session.SendPacketToClient(ServerList);
            return PacketProcessResult.ContinueLoop;
        }
Ejemplo n.º 38
0
        public static PacketProcessResult HandleClient(Packet pck, RelaySession session, SilkroadServer server)
        {
            if (Global.EnableGmAccessControl)
            {
                //Делаем запрос в базу и проверяем разрешеная ли команда
                uint commandID = pck.ReadUInt16();

                string uname = session.State["username"] as string;
                if (Global.dbmgr.checkGmAccessControl(uname, commandID) == 1)
                {
                    if (commandID == 6 || commandID == 7)
                    {
                        //Делаем проверку на разрешение использовать этот ID
                        uint obj_id           = pck.ReadUInt32();
                        uint amountOrOptLevel = pck.ReadUInt8();

                        if (Global.dbmgr.checkGmObjAccessControl(uname, obj_id, amountOrOptLevel) == 0)
                        {
                            session.SendClientNotice("UIIT_STT_ANTICHEAT_GM_USE_CREATE");
                            return(PacketProcessResult.ContinueLoop);
                        }
                    }
                    //Убираем возможность полноценно килять мобов гму.
                    if (commandID == 20)
                    {
                        uint   k_mob_id = pck.ReadUInt32();
                        Packet p        = new Packet(0x7010);
                        p.WriteUInt16(20);
                        p.WriteUInt32(k_mob_id);
                        p.WriteUInt8(1);
                        session.SendPacketToModule(p);
                        return(PacketProcessResult.ContinueLoop);
                    }
                }
                else
                {
                    session.SendClientNotice("UIIT_STT_ANTICHEAT_GM_USE_COMMAND");
                    return(PacketProcessResult.ContinueLoop);
                }
            }

            return(PacketProcessResult.DoNothing);
        }
Ejemplo n.º 39
0
        public static PacketProcessResult HandleModule(Packet pck, RelaySession session, SilkroadServer server)
        {
            Packet ServerList          = new Packet(0xA101);
            byte   GlobalOperationFlag = pck.ReadUInt8();

            ServerList.WriteUInt8(GlobalOperationFlag);

            while (GlobalOperationFlag == 1)
            {
                byte   GlobalOperationType = pck.ReadUInt8();
                string GlobalOperationName = pck.ReadAscii();

                GlobalOperationFlag = pck.ReadUInt8();
                ServerList.WriteUInt8(GlobalOperationType);
                ServerList.WriteAscii(GlobalOperationName);
                ServerList.WriteUInt8(GlobalOperationFlag);
            }
            byte ShardFlag = pck.ReadUInt8();

            ServerList.WriteUInt8(ShardFlag);

            while (ShardFlag == 1)
            {
                uint   ShardID           = pck.ReadUInt16();
                string ShardName         = pck.ReadAscii();
                uint   ShardCurrent      = pck.ReadUInt16();
                uint   ShardCapacity     = pck.ReadUInt16();
                byte   ShardStatus       = pck.ReadUInt8();
                byte   GlobalOperationID = pck.ReadUInt8();
                ShardFlag = pck.ReadUInt8();
                session.State["server_" + ShardID] = ShardCurrent;

                ServerList.WriteUInt16(ShardID);
                ServerList.WriteAscii("Возрождение", Global.TextEncodeCode);
                ServerList.WriteUInt16(ShardCurrent + Global.ShardFakeOnline);
                ServerList.WriteUInt16(Global.ShardMaxOnline > 0 ? (uint)Global.ShardMaxOnline : ShardCapacity);
                ServerList.WriteUInt8(ShardStatus);
                ServerList.WriteUInt8(GlobalOperationID);
                ServerList.WriteUInt8(ShardFlag);
            }
            session.SendPacketToClient(ServerList);
            return(PacketProcessResult.ContinueLoop);
        }
Ejemplo n.º 40
0
 public static PacketProcessResult HandleModule(Packet pck, RelaySession session, SilkroadServer server)
 {
     if (Global.EnableStartIntro)
     {
         byte hz1 = pck.ReadUInt8();
         if (hz1 == 1)
         {
             ulong hz2 = pck.ReadUInt64();
             if (hz2 == 1)
             {
                 Packet intro = new Packet(0x3CA2);
                 intro.WriteAscii(Global.StartIntroScriptName);
                 intro.WriteUInt32(12);
                 session.SendPacketToClient(intro);
             }
         }
         return(PacketProcessResult.ContinueLoop);
     }
     return(PacketProcessResult.DoNothing);
 }
Ejemplo n.º 41
0
        public void Packet(IService service, RelaySession session, PacketMessage message, MessageReceivedEventArgs e)
        {
            if (session.Player?.Room == null)
            {
                return;
            }

            var peerMessages = P2PMapper.GetMessage(message.IsCompressed ? message.Data.DecompressLZO(2048) : message.Data);

            foreach (var peerMessage in peerMessages)
            {
                if (!_peerService.OnMessageReceived(service, new MessageReceivedEventArgs(session, peerMessage, e.DeferralManager)))
                {
                    //_logger.Debug()
                    //    .Account(session)
                    //    .Message("Unhandled PeerMessage: {0}", peerMessage.GetType().Name)
                    //    .Write();
                }
            }
        }
Ejemplo n.º 42
0
 public static PacketProcessResult HandleModule(Packet pck, RelaySession session, SilkroadServer server)
 {
     if (Global.EnableLoginNotice)
     {
         bool noticeDone = false;
         bool.TryParse(session.State["noticeDone"] as string, out noticeDone);
         if (!noticeDone)
         {
             foreach (string text in Global.LoginNotice)
             {
                 Packet notice = new Packet(0x3026);
                 notice.WriteUInt8(7);
                 notice.WriteAscii(text, Global.TextEncodeCode);
                 session.SendPacketToClient(notice);
             }
             session.State["noticeDone"] = true;
         }
     }
     return PacketProcessResult.DoNothing;
 }
Ejemplo n.º 43
0
 public static PacketProcessResult HandleModule(Packet pck, RelaySession session, SilkroadServer server)
 {
     if (Global.EnableLoginNotice)
     {
         bool noticeDone = false;
         bool.TryParse(session.State["noticeDone"] as string, out noticeDone);
         if (!noticeDone)
         {
             foreach (string text in Global.LoginNotice)
             {
                 Packet notice = new Packet(0x3026);
                 notice.WriteUInt8(7);
                 notice.WriteAscii(text, Global.TextEncodeCode);
                 session.SendPacketToClient(notice);
             }
             session.State["noticeDone"] = true;
         }
     }
     return(PacketProcessResult.DoNothing);
 }
Ejemplo n.º 44
0
        public static PacketProcessResult HandleModule(Packet pck, RelaySession session, SilkroadServer server)
        {
            if (Global.EnableStartIntro)
            {
                byte hz1 = pck.ReadUInt8();
                if (hz1 == 1)
                {
                    ulong hz2 = pck.ReadUInt64();
                    if (hz2 == 1)
                    {
                        Packet intro = new Packet(0x3CA2);
                        intro.WriteAscii(Global.StartIntroScriptName);
                        intro.WriteUInt32(12);
                        session.SendPacketToClient(intro);
                    }

                }
                return PacketProcessResult.ContinueLoop;
            }
            return PacketProcessResult.DoNothing;
        }
Ejemplo n.º 45
0
        public static PacketProcessResult HandleModule(Packet pck, RelaySession session, SilkroadServer server)
        {
            uint type = pck.ReadUInt16();
            if (Global.EnableUniqueDeathNotify && type == 3078)
            {
                uint mob_id = pck.ReadUInt32();
                string char_name = pck.ReadAscii();
                //Проверяем тормоз, дабы с каждого потока не спамило
                if(Global.UniqueDeathNotifyName == char_name && Global.UniqueDeathNotifyID == mob_id && Global.UniqueDeathNotifyTime > DateTime.Now)
                {
                    return PacketProcessResult.DoNothing;
                }

                Global.UniqueDeathNotifyName = char_name;
                Global.UniqueDeathNotifyID = mob_id;
                Global.UniqueDeathNotifyTime = DateTime.Now.AddSeconds(10);
                Global.dbmgr.UniqueDeathNotify(char_name, (int)mob_id);
            }

            return PacketProcessResult.DoNothing;
        }
Ejemplo n.º 46
0
        public static PacketProcessResult HandleModule(Packet pck, RelaySession session, SilkroadServer server)
        {
            bool isBot = false;
            bool.TryParse(session.State["isBot"] as string, out isBot);
            if (Global.UseSafeRegion && isBot)
            {
                pck.ReadUInt32();
                pck.ReadUInt8();
                int region = pck.ReadUInt16();

                if (Global.SafeRegions.Contains(region))
                {
                    session.State["isSafe"] = true;
                }
                else
                {
                    session.State["isSafe"] = false;
                }
            }

            return PacketProcessResult.DoNothing;
        }
Ejemplo n.º 47
0
        public static PacketProcessResult HandleModule(Packet pck, RelaySession session, SilkroadServer server)
        {
            uint type = pck.ReadUInt16();

            if (Global.EnableUniqueDeathNotify && type == 3078)
            {
                uint   mob_id    = pck.ReadUInt32();
                string char_name = pck.ReadAscii();
                //Проверяем тормоз, дабы с каждого потока не спамило
                if (Global.UniqueDeathNotifyName == char_name && Global.UniqueDeathNotifyID == mob_id && Global.UniqueDeathNotifyTime > DateTime.Now)
                {
                    return(PacketProcessResult.DoNothing);
                }

                Global.UniqueDeathNotifyName = char_name;
                Global.UniqueDeathNotifyID   = mob_id;
                Global.UniqueDeathNotifyTime = DateTime.Now.AddSeconds(10);
                Global.dbmgr.UniqueDeathNotify(char_name, (int)mob_id);
            }

            return(PacketProcessResult.DoNothing);
        }
Ejemplo n.º 48
0
        public static PacketProcessResult HandleClient(Packet pck, RelaySession session, SilkroadServer server)
        {
            byte type_1 = pck.ReadUInt8();

            if (Global.MaxOptLevel > 0 && type_1 == 2)
            {
                byte type_2 = pck.ReadUInt8();
                if (type_2 == 3)
                {
                    pck.ReadUInt8();
                    byte   slot     = pck.ReadUInt8();
                    string charname = session.State["charname"] as string;

                    if (Global.dbmgr.checkOptLevel(charname, slot, Global.MaxOptLevel) == 0)
                    {
                        session.SendClientNotice("UIIT_STT_ANTICHEAT_MAX_OPT_LEVEL");
                        return(PacketProcessResult.ContinueLoop);
                    }
                }
            }
            return(PacketProcessResult.DoNothing);
        }
Ejemplo n.º 49
0
        static bool AbuseFilter(string msg, RelaySession session)
        {
            bool result = false;

            if (Global.EnableAbuseFilter)
            {
                //Убираемт  не нужные символы
                foreach (var ch in s_ForbiddenAbuseChars)
                {
                    msg = msg.Replace(ch, "").ToLower();
                }
                foreach (var word in Global.AbuseWord)
                {
                    if (msg.Contains(word))
                    {
                        session.SendClientPM("Некоторые выражение запрещены в игровом чате");
                        result = true;
                    }
                }
            }

            return(result);
        }
Ejemplo n.º 50
0
        public static PacketProcessResult HandleModule(Packet pck, RelaySession session, SilkroadServer server)
        {
            bool isBot = false;

            bool.TryParse(session.State["isBot"] as string, out isBot);
            if (Global.UseSafeRegion && isBot)
            {
                pck.ReadUInt32();
                pck.ReadUInt8();
                int region = pck.ReadUInt16();

                if (Global.SafeRegions.Contains(region))
                {
                    session.State["isSafe"] = true;
                }
                else
                {
                    session.State["isSafe"] = false;
                }
            }

            return(PacketProcessResult.DoNothing);
        }
Ejemplo n.º 51
0
        protected override void ProcessIncomingData(RelaySession session, TcpClient recvClient, byte[] buffer, int bytesRead)
        {
            if (bytesRead == ConnectMsgBytes.Length &&
                Encoding.UTF8.GetString(buffer, 0, bytesRead) == SessionManager.ClientConnectedMsg)
            {
                ClientConnected();

                object[] recvSession = new object[] { session, recvClient, buffer };
                recvClient.Client.BeginReceive(buffer, 0, buffer.Length, SocketFlags.None, HandleIncomingData, recvSession);
            }
            else if (bytesRead == DisconnectMsgBytes.Length &&
                     Encoding.UTF8.GetString(buffer, 0, bytesRead) == SessionManager.ClientDisconnectedMsg)
            {
                ClientDisconnected();

                object[] recvSession = new object[] { session, recvClient, buffer };
                recvClient.Client.BeginReceive(buffer, 0, buffer.Length, SocketFlags.None, HandleIncomingData, recvSession);
            }
            else
            {
                base.ProcessIncomingData(session, recvClient, buffer, bytesRead);
            }
        }
Ejemplo n.º 52
0
        public static PacketProcessResult HandleClient(Packet pck, RelaySession session, SilkroadServer server)
        {
            if (Global.EnableItemMallBuyFix)
            {
                Packet MyResponse = new Packet(0xB566, true);

                string uname = session.State["username"] as string;

                if (uname.Length == 0)
                {
                    Global.logmgr.WriteLog(LogLevel.Warning, "username len == 0 !");
                    return PacketProcessResult.Disconnect;
                }

                if (uname.Contains("'"))
                {
                    Global.logmgr.WriteLog(LogLevel.Warning, "User trying to exploit shop ! Uname str: {0}", uname);
                    return PacketProcessResult.Disconnect;
                }

                List<string> query_res = Global.dbmgr.GetJidAndToken(uname);

                UInt32 jid = uint.Parse(query_res[0]);
                string token = query_res[1];

                MyResponse.WriteUInt8(1);
                MyResponse.WriteUInt32(jid);
                MyResponse.WriteAscii(token);

                session.SendPacketToClient(MyResponse);
                //   Global.g_LogManager.WriteLog(LogLevel.Notify, "Shop packet OK [{0}] JID [{1}] TOKEN [{2}]",uname,jid,token);

                return PacketProcessResult.ContinueLoop;
            }
            return PacketProcessResult.DoNothing;
        }
Ejemplo n.º 53
0
 public static PacketProcessResult HandleClient(Packet pck, RelaySession session, SilkroadServer server)
 {
     return PacketProcessResult.DoNothing;
 }
Ejemplo n.º 54
0
        /// <summary>
        /// DownloadServer info / patch info request packet (Module -> Client)
        /// </summary>
        /// <param name="pck"></param>
        /// <param name="session"></param>
        /// <returns></returns>
        public static PacketProcessResult HandleModule(Packet pck, RelaySession session, SilkroadServer server)
        {
            if (server.HasDownloadRedirectRules())
            {
                //Read original data
                byte result = pck.ReadUInt8();

                //UpdateInfo
                if (result == 0x02)
                {
                    byte errorCode = pck.ReadUInt8();

                    if (errorCode == 0x02)
                    {
                        Packet myPacket = new Packet(0xA100, false, true);

                        string tmpIp = pck.ReadAscii();
                        ushort tmpPort = pck.ReadUInt16();

                        bool redirectRuleFound = false;
                        for (int i = 0; i < server.RedirectRules.Count; i++)
                        {
                            if (server.RedirectRules[i].OriginalIp == tmpIp && server.RedirectRules[i].OriginalPort == tmpPort)
                            {
                                tmpIp = server.RedirectRules[i].NewIp;
                                tmpPort = (ushort)server.RedirectRules[i].NewPort;
                                redirectRuleFound = true;
                            }
                        }

                        if (!redirectRuleFound)
                        {
                            Global.logmgr.WriteLog(LogLevel.Warning, "Download redirect rules given, but [{0}:{1}] is unknown download server", tmpIp, tmpPort);
                        }

                        uint version = pck.ReadUInt32();
                        byte fileFlag = pck.ReadUInt8();

                        myPacket.WriteUInt8(result);
                        myPacket.WriteUInt8(errorCode);

                        myPacket.WriteAscii(tmpIp);
                        myPacket.WriteUInt16(tmpPort);
                        myPacket.WriteUInt32(version);
                        myPacket.WriteUInt8(fileFlag);

                        while (fileFlag == 0x01)
                        {
                            uint fileId = pck.ReadUInt32();
                            string fileName = pck.ReadAscii();
                            string filePath = pck.ReadAscii();
                            uint fileLength = pck.ReadUInt32();
                            byte doPack = pck.ReadUInt8();

                            fileFlag = pck.ReadUInt8();

                            myPacket.WriteUInt32(fileId);
                            myPacket.WriteAscii(fileName);
                            myPacket.WriteAscii(filePath);
                            myPacket.WriteUInt32(fileLength);
                            myPacket.WriteUInt8(doPack);
                            myPacket.WriteUInt8(fileFlag);
                        }
                        session.SendPacketToClient(myPacket);
                    }
                    //Do not send original packet
                    return PacketProcessResult.ContinueLoop;
                }
            }
            return PacketProcessResult.DoNothing;
        }
Ejemplo n.º 55
0
        /// <summary>
        /// Do chat message processing here
        /// Messages sent to this method aren't filtered
        /// </summary>
        /// <param name="msg"></param>
        static bool ProcessChatCommand(string msg, RelaySession session)
        {
            bool result = false;
            if (Global.EnableChatCommands && msg.StartsWith("."))
            {
                if (msg.StartsWith(".penis"))
                {
                    string[] split = msg.Split(' ');
                    if (split.Count() == 2 && split[1].Length <= 16)
                    {
                        session.SendClientPM("Длинна письки " + split[1].Length + " см.");
                        result = true;
                    }
                }

                if (msg.StartsWith(".info"))
                {
                    session.SendClientPM("Software: Anticheat[sroprot]");
                    session.SendClientPM("Developers: Xoka && dwordptr");
                    session.SendClientPM("Special for: sairos-online.com");
                    session.SendClientPM("Version: "+ Global.SoftVersion);
                    result = true;
                }

                if (msg.StartsWith(".server"))
                {
                   foreach(var str in Global.ServerInfo)
                    {
                        session.SendClientPM(str);
                    }
                    result = true;
                }

                if (msg.StartsWith(".schedule"))
                {
                    foreach (var str in Global.ServerSchedule)
                    {
                        session.SendClientPM(str);
                    }
                    result = true;
                }
            }
            return result;
        }
Ejemplo n.º 56
0
        static bool AbuseFilter(string msg, RelaySession session)
        {
            bool result = false;
            if (Global.EnableAbuseFilter)
            {
                //Убираемт  не нужные символы
                foreach (var ch in s_ForbiddenAbuseChars)
                {
                    msg = msg.Replace(ch, "").ToLower();
                }
                foreach (var word in Global.AbuseWord)
                {
                    if (msg.Contains(word))
                    {
                        session.SendClientPM("Некоторые выражение запрещены в игровом чате");
                        result = true;
                    }
                }

            }

            return result;
        }
Ejemplo n.º 57
0
        public static PacketProcessResult HandleClient(Packet pck, RelaySession session, SilkroadServer server)
        {
            if (Global.EnableItemMallBuyFix)
            {
                string uname = session.State["username"] as string;

                if (uname.Length == 0)
                {
                    Global.logmgr.WriteLog(LogLevel.Error, "username len == 0 (request buy mall item)");
                    return PacketProcessResult.Disconnect;

                }

                byte ShopType = pck.ReadUInt8();

                if (ShopType == 24)
                {
                    //------------------------------------------
                    UInt16 uint1 = pck.ReadUInt16();
                    byte b1 = pck.ReadUInt8();
                    byte b2 = pck.ReadUInt8();
                    byte b3 = pck.ReadUInt8();
                    string package_item_codename = pck.ReadAscii();
                    ushort nItems = pck.ReadUInt16();
                    pck.ReadUInt64();
                    uint refpackage_id = pck.ReadUInt32();
                    //------------------------------------------

                    string charname = session.State["charname"] as string;

                    if (charname.Length == 0)
                    {
                        Global.logmgr.WriteLog(LogLevel.Error, "charname len == 0 (buy in item mall)");
                        return PacketProcessResult.Disconnect;
                    }

                    int res = Global.dbmgr.GetBuyMallResult(charname, package_item_codename, nItems);

                    if (res == -1)
                    {
                        //------------------------------------------
                        session.SendClientNotice("UIIT_STT_ANTICHEAT_ITEM_MALL_ERROR");
                        //------------------------------------------
                    }
                    else
                    {
                        //update silk
                        List<int> silk_info = Global.dbmgr.GetSilkDataByUsername(uname);

                        //------------------------------------------
                        Packet resp = new Packet(0x3153);

                        resp.WriteUInt32(silk_info[0]);
                        resp.WriteUInt32(silk_info[1]);
                        resp.WriteUInt32(silk_info[2]);
                        // m_ClientSecurity.Send(resp);
                        session.SendPacketToClient(resp);

                        //------------------------------------------
                        Packet inventory = new Packet(0xB034);
                        inventory.WriteUInt8(1);
                        inventory.WriteUInt8(24);
                        inventory.WriteUInt16(uint1);
                        inventory.WriteUInt8(b1);
                        inventory.WriteUInt8(b2);
                        inventory.WriteUInt8(b3);
                        inventory.WriteUInt8(1);
                        inventory.WriteUInt8(res);
                        inventory.WriteUInt16(nItems);
                        inventory.WriteUInt32(0);
                        //m_ClientSecurity.Send(inventory);
                        session.SendPacketToClient(inventory);
                        //------------------------------------------

                        Packet inventory2 = new Packet(0xB034);
                        inventory2.WriteUInt8(1);
                        inventory2.WriteUInt8(7);
                        inventory2.WriteUInt8((byte)(res));
                        //  m_ClientSecurity.Send(inventory2);
                        session.SendPacketToClient(inventory2);

                        //------------------------------------------

                        //  Global.g_LogManager.WriteLog(LogLevel.Notify, "GetBuyMallResult OK slot {0}", res);
                    }
                    return PacketProcessResult.ContinueLoop;
                }
            }

            return PacketProcessResult.DoNothing;
        }
Ejemplo n.º 58
0
        public static PacketProcessResult HandleClient(Packet pck, RelaySession session, SilkroadServer server)
        {
            string username = session.State["username"] as string;
            string charname = session.State["charname"] as string;

            //Read type
            byte msgTypeId = pck.ReadUInt8();
            byte msgCount = pck.ReadUInt8();

            ChatType msgType = (ChatType)(msgTypeId);
            string msg = string.Empty;

            switch (msgType)
            {
                case ChatType.Normal:
                    {
                        msg = pck.ReadAscii();

                        //ProcessChatCommand(msg);
                        if (AbuseFilter(msg, session))
                        {
                            return PacketProcessResult.ContinueLoop;
                        }

                        if (ProcessChatCommand(msg, session))
                        {
                            return PacketProcessResult.ContinueLoop;
                        }

                        msg = FilterMsg(msg);
                        Global.logmgr.WriteChatLog(msgType, charname, msg);

                    }
                    break;
                case ChatType.Private:
                    {
                        string name = pck.ReadAscii();
                        msg = pck.ReadAscii();
                        if (AbuseFilter(msg, session))
                        {
                            return PacketProcessResult.ContinueLoop;
                        }
                        msg = FilterMsg(msg);
                        Global.logmgr.WriteChatLog(msgType, charname, name, msg);
                    }
                    break;
                case ChatType.Academy:
                    {
                        msg = pck.ReadAscii();
                        if (AbuseFilter(msg, session))
                        {
                            return PacketProcessResult.ContinueLoop;
                        }
                        msg = FilterMsg(msg);
                        Global.logmgr.WriteChatLog(msgType, charname, msg);
                    }
                    break;
                case ChatType.Gm:
                    {
                        msg = pck.ReadAscii();
                        if (AbuseFilter(msg, session))
                        {
                            return PacketProcessResult.ContinueLoop;
                        }
                        msg = FilterMsg(msg);
                        Global.logmgr.WriteChatLog(msgType, charname, msg);
                    }
                    break;
                case ChatType.Group:
                    {
                        msg = pck.ReadAscii();
                        if (AbuseFilter(msg, session))
                        {
                            return PacketProcessResult.ContinueLoop;
                        }
                        msg = FilterMsg(msg);
                        Global.logmgr.WriteChatLog(msgType, charname, msg);
                    }
                    break;
                case ChatType.Guild:
                    {
                        msg = pck.ReadAscii();
                        if (AbuseFilter(msg, session))
                        {
                            return PacketProcessResult.ContinueLoop;
                        }
                        msg = FilterMsg(msg);
                        Global.logmgr.WriteChatLog(msgType, charname, msg);
                    }
                    break;
                case ChatType.Union:
                    {
                        msg = pck.ReadAscii();
                        if (AbuseFilter(msg, session))
                        {
                            return PacketProcessResult.ContinueLoop;
                        }
                        msg = FilterMsg(msg);
                        Global.logmgr.WriteChatLog(msgType, charname, msg);
                    }
                    break;
                case ChatType.Stall:
                    {
                        msg = pck.ReadAscii();
                        if (AbuseFilter(msg, session))
                        {
                            return PacketProcessResult.ContinueLoop;
                        }
                        msg = FilterMsg(msg);
                        Global.logmgr.WriteChatLog(msgType, charname, msg);
                    }
                    break;
                case ChatType.Anounce:
                    {
                        if (Global.EnableGmAccessControl)
                        {
                            if (Global.dbmgr.checkGmAccessControl(username, 3000) == 0)
                            {
                                session.SendClientNotice("UIIT_STT_ANTICHEAT_GM_USE_COMMAND");
                                //Block this packet, since we spoof it
                                return PacketProcessResult.ContinueLoop;
                            }
                        }

                    }
                    break;
                default:
                    {
                        Global.logmgr.WriteLog(LogLevel.Notify, "Unknown chat msg id {0}", msgTypeId);
                    }
                    break;
            }

            return PacketProcessResult.DoNothing;
        }