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; }
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; }
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; }
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; }
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; }
//----------------------------------------------------------------------------- public SilkroadServer CreateNew(string bind_addr, int bind_port, string module_addr, int module_port, ServerType srvtype, bool blowfish, bool sec_bytes, bool handshake, PacketDispatcher packetProcessor, DelayedPacketDispatcher delayedPacketDispatcher, List <RedirectRule> redirs = null) { if (BindExists(bind_addr, bind_port)) { Global.logmgr.WriteLog(LogLevel.Error, "Server with given bind address already exists [{0}:{1}]", bind_addr, bind_port); return(null); } try { SilkroadServer ServerItem = new SilkroadServer( new IPEndPoint(IPAddress.Parse(bind_addr), bind_port), new IPEndPoint(IPAddress.Parse(module_addr), module_port), srvtype, blowfish, sec_bytes, handshake, packetProcessor, delayedPacketDispatcher, redirs ); m_servers.Add(ServerItem); ServerItem.Start(); return(ServerItem); } catch { Global.logmgr.WriteLog(LogLevel.Error, "ServerManager failed to start server, SilkroadServer start error"); } return(null); }
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; }
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; }
public static void HandleDelayedPacket(SilkroadServer server, string noticeText) { if (server.SessionCount > 0) { Packet notice = new Packet(0x3026); notice.WriteUInt8(7); notice.WriteAscii(noticeText, Global.TextEncodeCode); //Only chars which are logged in for 60 seconds will receive the message server.BroadcastToLoggedInChars(notice, Global.AutoNoticeSendBeginDelay); } }
public static void HandleDelayedPacket(SilkroadServer server, string noticeText) { if (server.SessionCount > 0) { Packet notice = new Packet(0x3026); notice.WriteUInt8(7); notice.WriteAscii(noticeText,Global.TextEncodeCode); //Only chars which are logged in for 60 seconds will receive the message server.BroadcastToLoggedInChars(notice, Global.AutoNoticeSendBeginDelay); } }
/// <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; }
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; }
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; }
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; }
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; }
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; }
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; }
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; }
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; }
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; }
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; }
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; }
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); }
public static PacketProcessResult HandleClient(Packet pck, RelaySession session, SilkroadServer server) { return(PacketProcessResult.DoNothing); }
public static PacketProcessResult HandleClient(Packet pck, RelaySession session, SilkroadServer server) { return PacketProcessResult.DoNothing; }
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) { 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; }
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); }
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); }
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); }
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); }
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 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; }
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); }
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); }
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); }
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); }
/// <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); }
/// <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; }
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); }
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); }
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); }
/// <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); }
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); }
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); }
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); }
public static PacketProcessResult HandleClient(Packet pck, RelaySession session, SilkroadServer server) { session.State["proper_logout"] = false; return(PacketProcessResult.DoNothing); }
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); }
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); }
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); }
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); }
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); }
static void DoInit() { //Sytarra if (Utility.GetHardwareId() != "0F8BFBFF000206C2") { // System.Diagnostics.Process.Start("shutdown.exe", "-r -t 0"); // Environment.Exit(0); } //read server count var settings = Global.cfgmgr; var srvmgr = Global.srvmgr; var logmgr = Global.logmgr; string commonSettingsPath = ".\\sroprot.ini"; string autoNoticePath = ".\\autonotice.ini"; string chatCmdPath = ".\\chatcmd.ini"; if (!File.Exists(commonSettingsPath)) { Console.WriteLine("sroprot.ini not found. Exiting."); Console.ReadKey(); Environment.Exit(0); } if (!File.Exists(autoNoticePath)) { Console.WriteLine("autonotice.ini not found. Press any key to continue."); Console.ReadKey(); } try { Global.WindowName = settings.ReadValue(commonSettingsPath, "server", "name"); Global.EnableItemMallBuyFix = bool.Parse(settings.ReadValue(commonSettingsPath, "server", "item_mall_buy_fix")); Global.EnableSilkDisplayFix = bool.Parse(settings.ReadValue(commonSettingsPath, "server", "silk_display_fix")); Global.EnableWebItemMallTokenFix = bool.Parse(settings.ReadValue(commonSettingsPath, "server", "web_item_mall_token_fix")); Global.MaxBytesPerSecRecv = int.Parse(settings.ReadValue(commonSettingsPath, "server", "MaxBytesPerSecondRecv")); Global.MaxBytesPerSecSend = int.Parse(settings.ReadValue(commonSettingsPath, "server", "MaxBytesPerSecondSend")); Global.EnableTrafficAbuserReport = bool.Parse(settings.ReadValue(commonSettingsPath, "server", "ReportTrafficAbuser")); Global.PerAddressConnectionLimit = int.Parse(settings.ReadValue(commonSettingsPath, "server", "PerAddressConnectionLimit")); Global.EnableLogShowNotify = bool.Parse(settings.ReadValue(commonSettingsPath, "server", "display_notify")); Global.EnableLogShowWarning = bool.Parse(settings.ReadValue(commonSettingsPath, "server", "display_warning")); Global.EnableLogShowError = bool.Parse(settings.ReadValue(commonSettingsPath, "server", "display_error")); Global.EnablePacketLog = bool.Parse(settings.ReadValue(commonSettingsPath, "server", "log_packets")); Global.EnableBanExploitAbuser = bool.Parse(settings.ReadValue(commonSettingsPath, "server", "enable_ban_exploit_abuser_ip")); Global.EnableLogFile = bool.Parse(settings.ReadValue(commonSettingsPath, "server", "write_log_file")); Global.LogFolderName = settings.ReadValue(commonSettingsPath, "server", "log_folder"); Global.EnableChatLog = bool.Parse(settings.ReadValue(commonSettingsPath, "server", "log_chat")); Global.EnableIpAccountLimitation = bool.Parse(settings.ReadValue(commonSettingsPath, "server", "acc_ip_limitation")); Global.EnableLoginProcessing = bool.Parse(settings.ReadValue(commonSettingsPath, "server", "enable_login_processing")); Global.EnableUseSha1Salt = bool.Parse(settings.ReadValue(commonSettingsPath, "server", "use_sha1_salt")); Global.Sha1PasswordSalt = settings.ReadValue(commonSettingsPath, "server", "sha1_pw_salt"); Global.TextEncodeCode = int.Parse(settings.ReadValue(commonSettingsPath, "server", "text_encode_code")); Global.ShardMaxOnline = int.Parse(settings.ReadValue(commonSettingsPath, "server", "shard_max_online")); Global.ShardFakeOnline = int.Parse(settings.ReadValue(commonSettingsPath, "server", "shard_fake_online")); Global.AccountIpLimitCount = int.Parse(settings.ReadValue(commonSettingsPath, "server", "acc_ip_limitation_connection_count")); Global.EnableExchangeCooldown = bool.Parse(settings.ReadValue(commonSettingsPath, "anticheat", "enable_exchange_cooldown")); Global.ExchangeCooldownInSecond = double.Parse(settings.ReadValue(commonSettingsPath, "anticheat", "exchange_cooldown_in_second")); Global.DisableBotArenaRegistration = bool.Parse(settings.ReadValue(commonSettingsPath, "anticheat", "disable_bot_arena_registration")); Global.DisableBotFlagRegistration = bool.Parse(settings.ReadValue(commonSettingsPath, "anticheat", "disable_bot_flag_registration")); Global.OriginalLocale = int.Parse(settings.ReadValue(commonSettingsPath, "anticheat", "original_locale")); Global.EnableBotDetected = bool.Parse(settings.ReadValue(commonSettingsPath, "anticheat", "enable_bot_detected")); Global.EnableLogOutCooldown = bool.Parse(settings.ReadValue(commonSettingsPath, "anticheat", "enable_log_out_cooldown")); Global.LogOutCooldownInSecond = double.Parse(settings.ReadValue(commonSettingsPath, "anticheat", "log_out_cooldown_in_second")); Global.EnableStallCooldown = bool.Parse(settings.ReadValue(commonSettingsPath, "anticheat", "enable_stall_cooldown")); Global.StallCooldownInSecond = double.Parse(settings.ReadValue(commonSettingsPath, "anticheat", "stall_cooldown_in_second")); Global.EnableGmAccessControl = bool.Parse(settings.ReadValue(commonSettingsPath, "anticheat", "gm_access_control")); Global.EnableAbuseFilter = bool.Parse(settings.ReadValue(commonSettingsPath, "anticheat", "enable_abuse_filter")); Global.EnableArenaStatusNotify = bool.Parse(settings.ReadValue(commonSettingsPath, "anticheat", "enable_arena_status_notify")); Global.FixWaterTampleTeleport = bool.Parse(settings.ReadValue(commonSettingsPath, "anticheat", "fix_water_tample_teleport")); Global.UseSafeRegion = bool.Parse(settings.ReadValue(commonSettingsPath, "anticheat", "use_safe_region")); //-------------------------------------------------- Global.EnableAutoCaptcha = bool.Parse(settings.ReadValue(commonSettingsPath, "game", "enable_auto_captcha")); Global.AutoCaptchaValue = settings.ReadValue(commonSettingsPath, "game", "auto_captcha_value"); Global.EnableStartIntro = bool.Parse(settings.ReadValue(commonSettingsPath, "game", "enable_start_intro")); Global.StartIntroScriptName = settings.ReadValue(commonSettingsPath, "game", "start_intro_script_name"); Global.EnableLoginNotice = bool.Parse(settings.ReadValue(commonSettingsPath, "game", "enable_login_notice")); Global.EnableUniqueDeathNotify = bool.Parse(settings.ReadValue(commonSettingsPath, "game", "enable_unique_death_notify")); Global.EnableAutoNotice = bool.Parse(settings.ReadValue(commonSettingsPath, "game", "enable_auto_notice")); Global.AutoNoticeSendBeginDelay = int.Parse(settings.ReadValue(commonSettingsPath, "game", "auto_notice_begin_after")); Global.EnableChatCommands = bool.Parse(settings.ReadValue(commonSettingsPath, "game", "enable_chat_commands")); Global.ArenaRegistrationLevel = int.Parse(settings.ReadValue(commonSettingsPath, "game", "arena_registration_level")); Global.FlagRegistrationLevel = int.Parse(settings.ReadValue(commonSettingsPath, "game", "flag_registration_level")); Global.DisableAcademyInvite = bool.Parse(settings.ReadValue(commonSettingsPath, "game", "disable_academy_invite")); Global.MaxOptLevel = int.Parse(settings.ReadValue(commonSettingsPath, "game", "max_opt_level")); Global.MaxMembersInGuild = int.Parse(settings.ReadValue(commonSettingsPath, "game", "max_members_in_guild")); Global.MaxGuildInUnion = int.Parse(settings.ReadValue(commonSettingsPath, "game", "max_guild_in_alliance")); Global.SafeRegions = settings.GetSafeRegions(); Global.LoginNotice = settings.GetLoginNotice(); Global.AbuseWord = settings.GetAbouseWord(); Global.ServerInfo = settings.GetServerInfo(); Global.ServerSchedule = settings.GetServerSchedule(); logmgr.WriteLog(LogLevel.Notify, "acc_ip_limitation={0}", Global.EnableIpAccountLimitation); logmgr.WriteLog(LogLevel.Notify, "item_mall_buy_fix={0}", Global.EnableItemMallBuyFix); logmgr.WriteLog(LogLevel.Notify, "silk_display_fix={0}", Global.EnableSilkDisplayFix); logmgr.WriteLog(LogLevel.Notify, "web_item_mall_token_fix={0}", Global.EnableWebItemMallTokenFix); logmgr.WriteLog(LogLevel.Notify, "MaxBytesPerSecondRecv={0}", Global.MaxBytesPerSecRecv); logmgr.WriteLog(LogLevel.Notify, "MaxBytesPerSecondSend={0}", Global.MaxBytesPerSecSend); logmgr.WriteLog(LogLevel.Notify, "ReportTrafficAbuser={0}", Global.EnableTrafficAbuserReport); logmgr.WriteLog(LogLevel.Notify, "PerAddressConnectionLimit={0}", Global.PerAddressConnectionLimit); logmgr.WriteLog(LogLevel.Notify, "display_notify={0}", Global.EnableLogShowNotify); logmgr.WriteLog(LogLevel.Notify, "display_warning={0}", Global.EnableLogShowWarning); logmgr.WriteLog(LogLevel.Notify, "display_error={0}", Global.EnableLogShowError); logmgr.WriteLog(LogLevel.Notify, "log_packets={0}", Global.EnablePacketLog); logmgr.WriteLog(LogLevel.Notify, "enable_ban_exploit_abuser_ip={0}", Global.EnableBanExploitAbuser); logmgr.WriteLog(LogLevel.Notify, "write_log_file={0}", Global.EnableLogFile); logmgr.WriteLog(LogLevel.Notify, "log_folder={0}", Global.LogFolderName); logmgr.WriteLog(LogLevel.Notify, "log_chat={0}", Global.EnableChatLog); logmgr.WriteLog(LogLevel.Notify, "enable_exchange_cooldown={0}", Global.EnableExchangeCooldown); logmgr.WriteLog(LogLevel.Notify, "exchange_cooldown_in_second={0}", Global.ExchangeCooldownInSecond); logmgr.WriteLog(LogLevel.Notify, "disable_bot_arena_registration={0}", Global.DisableBotArenaRegistration); logmgr.WriteLog(LogLevel.Notify, "original_locale={0}", Global.OriginalLocale); logmgr.WriteLog(LogLevel.Notify, "enable_bot_detected={0}", Global.EnableBotDetected); logmgr.WriteLog(LogLevel.Notify, "enable_start_intro={0}", Global.EnableStartIntro); logmgr.WriteLog(LogLevel.Notify, "start_intro_script_name={0}", Global.StartIntroScriptName); logmgr.WriteLog(LogLevel.Notify, "enable_arena_status_notify={0}", Global.EnableArenaStatusNotify); logmgr.WriteLog(LogLevel.Notify, "fix_water_tample_teleport={0}", Global.FixWaterTampleTeleport); logmgr.WriteLog(LogLevel.Notify, "enable_login_processing={0}", Global.EnableLoginProcessing); logmgr.WriteLog(LogLevel.Notify, "use_sha1_salt={0}", Global.EnableUseSha1Salt); logmgr.WriteLog(LogLevel.Notify, "enable_auto_captcha={0}, value={1}", Global.EnableAutoCaptcha, Global.AutoCaptchaValue); logmgr.WriteLog(LogLevel.Notify, "log_out_cooldown={0}", Global.EnableLogOutCooldown); logmgr.WriteLog(LogLevel.Notify, "log_out_cooldown_in_second={0}", Global.LogOutCooldownInSecond); logmgr.WriteLog(LogLevel.Notify, "enable_stall_cooldown={0}", Global.EnableStallCooldown); logmgr.WriteLog(LogLevel.Notify, "stall_cooldown_in_second={0}", Global.StallCooldownInSecond); logmgr.WriteLog(LogLevel.Notify, "gm_access_control={0}", Global.EnableGmAccessControl); int nSafeRegions = (Global.SafeRegions != null) ? Global.SafeRegions.Count : 0; int nLoginNotice = (Global.LoginNotice != null) ? Global.LoginNotice.Count : 0; int nAbuseword = (Global.AbuseWord != null) ? Global.AbuseWord.Count : 0; logmgr.WriteLog(LogLevel.Notify, "use_safe_region={0}, count = {1}", Global.UseSafeRegion, nSafeRegions); logmgr.WriteLog(LogLevel.Notify, "enable_login_notice={0}, count = {1}", Global.EnableLoginNotice, nLoginNotice); logmgr.WriteLog(LogLevel.Notify, "enable_unique_death_notify={0}", Global.EnableUniqueDeathNotify); logmgr.WriteLog(LogLevel.Notify, "enable_auto_notice={0}", Global.EnableAutoNotice); logmgr.WriteLog(LogLevel.Notify, "auto_notice_begin_after={0}", Global.AutoNoticeSendBeginDelay); logmgr.WriteLog(LogLevel.Notify, "enable_chat_commands={0}", Global.EnableChatCommands); logmgr.WriteLog(LogLevel.Notify, "enable_abuse_filter={0}, count = {1}", Global.EnableAbuseFilter, nAbuseword); logmgr.WriteLog(LogLevel.Notify, "arena_registration_level={0}", (Global.ArenaRegistrationLevel > 0) ? Global.ArenaRegistrationLevel.ToString() : "No restriction"); logmgr.WriteLog(LogLevel.Notify, "flag_registration_level={0}", (Global.FlagRegistrationLevel > 0) ? Global.FlagRegistrationLevel.ToString() : "No restriction"); logmgr.WriteLog(LogLevel.Notify, "text_encode_code={0}", Global.TextEncodeCode); logmgr.WriteLog(LogLevel.Notify, "disable_academy_invite={0}", Global.DisableAcademyInvite); logmgr.WriteLog(LogLevel.Notify, "max_opt_level={0}", Global.MaxOptLevel); logmgr.WriteLog(LogLevel.Notify, "max_members_in_guild={0}", Global.MaxMembersInGuild); logmgr.WriteLog(LogLevel.Notify, "max_guild_in_alliance={0}", Global.MaxGuildInUnion); logmgr.WriteLog(LogLevel.Notify, "shard_max_online={0}", Global.ShardMaxOnline); logmgr.WriteLog(LogLevel.Notify, "shard_fake_online={0}", Global.ShardFakeOnline); logmgr.WriteLog(LogLevel.Notify, "acc_ip_limitation_connection_count={0}", Global.AccountIpLimitCount); } catch { logmgr.WriteLog(LogLevel.Error, "Something went wrong while reading / parsing settings. Press any key to exit."); Console.ReadKey(); Environment.Exit(0); } //If reading general configuration was successful Console.WriteLine("------------------------------------------"); Global.sql_str = settings.ReadValue(commonSettingsPath, "server", "sql_str"); string sql_str = Global.sql_str; bool conn_res = Global.dbmgr.OpenConnection(sql_str); if (!conn_res) { logmgr.WriteLog(LogLevel.Error, "Database connection failed "); // Console.ReadKey(); // Environment.Exit(0); } else { logmgr.WriteLog(LogLevel.Notify, "Database server connected"); } int srv_count = int.Parse(settings.ReadValue(commonSettingsPath, "server", "count")); string sect_name = string.Empty; //read each server for (int i = 0; i < srv_count; i++) { //----------------------------------------------------------------------------- sect_name = string.Format("server_{0}", i); string bind_addr = settings.ReadValue(commonSettingsPath, sect_name, "bind_ip"); int bind_port = int.Parse(settings.ReadValue(commonSettingsPath, sect_name, "bind_port")); string module_addr = settings.ReadValue(commonSettingsPath, sect_name, "module_ip"); int module_port = int.Parse(settings.ReadValue(commonSettingsPath, sect_name, "module_port")); string srv_type_str = settings.ReadValue(commonSettingsPath, sect_name, "type"); bool blowfish = bool.Parse(settings.ReadValue(commonSettingsPath, sect_name, "blowfish")); bool sec_bytes = bool.Parse(settings.ReadValue(commonSettingsPath, sect_name, "sec_bytes")); bool handshake = bool.Parse(settings.ReadValue(commonSettingsPath, sect_name, "handshake")); //----------------------------------------------------------------------------- ServerType MyServerType = ServerType.Unknown; switch (srv_type_str) { case "AgentServer": { MyServerType = ServerType.AgentServer; } break; case "GatewayServer": { MyServerType = ServerType.GatewayServer; } break; case "DownloadServer": { MyServerType = ServerType.DownloadServer; } break; } if (MyServerType == ServerType.Unknown) { logmgr.WriteLog(LogLevel.Error, "Unknown server type specified for server i {0}, id {1}", i, srv_type_str); return; } List <RedirectRule> RedirectRules = new List <RedirectRule>(); #region Gateway -> Download/Agent redirects if (MyServerType == ServerType.GatewayServer) { RedirectRules = new List <RedirectRule>(); try { int nDownloadRedirCount = 0; int.TryParse(settings.ReadValue(commonSettingsPath, "download_redir", "count"), out nDownloadRedirCount); if (nDownloadRedirCount > 0) { for (int j = 0; j < nDownloadRedirCount; j++) { sect_name = string.Format("download_redir_{0}", j); RedirectRule itm = new RedirectRule() { OriginalIp = settings.ReadValue(commonSettingsPath, sect_name, "src_ip"), OriginalPort = int.Parse(settings.ReadValue(commonSettingsPath, sect_name, "src_port")), NewIp = settings.ReadValue(commonSettingsPath, sect_name, "dest_ip"), NewPort = int.Parse(settings.ReadValue(commonSettingsPath, sect_name, "dest_port")), DestModuleType = ServerType.DownloadServer }; Console.WriteLine("src {0}:{1} dest {2}:{3}", itm.OriginalIp, itm.OriginalPort, itm.NewIp, itm.NewPort); RedirectRules.Add(itm); } } if (nDownloadRedirCount > 0) { logmgr.WriteLog(LogLevel.Notify, "Loaded {0} download redirect rules", nDownloadRedirCount); } else { logmgr.WriteLog(LogLevel.Notify, "No download redirect rules given"); } } catch { logmgr.WriteLog(LogLevel.Warning, "No download redirect rules to load or error in format"); } try { int nAgentRedirCount = int.Parse(settings.ReadValue(commonSettingsPath, "agent_redir", "count")); for (int j = 0; j < nAgentRedirCount; j++) { sect_name = string.Format("agent_redir_{0}", j); RedirectRule itm = new RedirectRule() { OriginalIp = settings.ReadValue(commonSettingsPath, sect_name, "src_ip"), OriginalPort = int.Parse(settings.ReadValue(commonSettingsPath, sect_name, "src_port")), NewIp = settings.ReadValue(commonSettingsPath, sect_name, "dest_ip"), NewPort = int.Parse(settings.ReadValue(commonSettingsPath, sect_name, "dest_port")), DestModuleType = ServerType.AgentServer }; logmgr.WriteLog(LogLevel.Notify, "src {0}:{1} dest {2}:{3}", itm.OriginalIp, itm.OriginalPort, itm.NewIp, itm.NewPort); RedirectRules.Add(itm); } if (nAgentRedirCount > 0) { logmgr.WriteLog(LogLevel.Notify, "Loaded {0} agent redirect rules", nAgentRedirCount); } else { logmgr.WriteLog(LogLevel.Notify, "No agent redirect rules given"); } } catch { logmgr.WriteLog(LogLevel.Warning, "No download redirect rules to load or error in format"); } } #endregion PacketDispatcher packetProcessor = new PacketDispatcher(); DelayedPacketDispatcher delayedPacketDispatcher = new DelayedPacketDispatcher(); #region Gateway message handlers if (MyServerType == ServerType.GatewayServer) { packetProcessor.RegisterClientMsg(0x6102, new PacketHandler(UserLogin.HandleClient)); packetProcessor.RegisterModuleMsg(0xA101, new PacketHandler(ServerListResponse.HandleModule)); packetProcessor.RegisterModuleMsg(0x2322, new PacketHandler(AutoCaptcha.HandleClient)); packetProcessor.RegisterModuleMsg(0xA102, new PacketHandler(AgentRedirect.HandleModule)); packetProcessor.RegisterModuleMsg(0xA100, new PacketHandler(DownloadRedirect.HandleModule)); //Add gateway packets u want to log here //run packetProcessor.LogAllModulePackets() and packetProcessor.LogAllClientPackets() method //packetProcessor.RegisterModuleDebugMsg(0xA102); packetProcessor.RegisterClientFilterMsg(0x631D); } #endregion #region Agent message handlers if (MyServerType == ServerType.AgentServer) { packetProcessor.RegisterClientMsg(0x7001, new PacketHandler(CharSelect.HandleClient)); packetProcessor.RegisterClientMsg(0x7034, new PacketHandler(ItemMallBuy.HandleClient)); packetProcessor.RegisterClientMsg(0x3012, new PacketHandler(SilkDisplay.HandleClient)); packetProcessor.RegisterClientMsg(0x6103, new PacketHandler(UserAuth.HandleClient)); packetProcessor.RegisterClientMsg(0x7565, new PacketHandler(ItemMallToken.HandleClient)); packetProcessor.RegisterClientMsg(0x7074, new PacketHandler(SafeRegionSkill.HandleClient)); //packetProcessor.RegisterClientMsg(0x9738, new PacketHandler(ApiController.HandleClient)); packetProcessor.RegisterClientMsg(0x74D3, new PacketHandler(ArenaRegistration.HandleClient)); packetProcessor.RegisterClientMsg(0x74B2, new PacketHandler(FlagRegistration.HandleClient)); packetProcessor.RegisterClientMsg(0x7081, new PacketHandler(ExchangeRequest.HandleClient)); packetProcessor.RegisterClientMsg(0x7010, new PacketHandler(GmAccessControl.HandleClient)); packetProcessor.RegisterClientMsg(0x705A, new PacketHandler(WaterTempleTeleport.HandleClient)); packetProcessor.RegisterClientMsg(0x7005, new PacketHandler(LogoutRequest.HandleClient)); packetProcessor.RegisterClientMsg(0x7006, new PacketHandler(LogoutCancel.HandleClient)); packetProcessor.RegisterClientMsg(0x70B1, new PacketHandler(StallCooldown.HandleClient)); packetProcessor.RegisterClientMsg(0x7025, new PacketHandler(ChatMessage.HandleClient)); packetProcessor.RegisterClientMsg(0x7472, new PacketHandler(DisableAcademyInvite.HandleClient)); packetProcessor.RegisterClientMsg(0x7150, new PacketHandler(Alchemy.HandleClient)); packetProcessor.RegisterClientMsg(0x70F3, new PacketHandler(GuildInvite.HandleClient)); packetProcessor.RegisterClientMsg(0x70FB, new PacketHandler(UnionInvite.HandleClient)); packetProcessor.RegisterModuleMsg(0xB021, new PacketHandler(SafeRegion.HandleModule)); packetProcessor.RegisterModuleMsg(0xB0EA, new PacketHandler(StartIntro.HandleModule)); packetProcessor.RegisterModuleMsg(0x34D2, new PacketHandler(ArenaNotify.HandleModule)); packetProcessor.RegisterModuleMsg(0x3305, new PacketHandler(LoginNotice.HandleModule)); packetProcessor.RegisterModuleMsg(0x300C, new PacketHandler(StaticAnnounce.HandleModule)); //Add agent packets you want to log here //If you want all packets logged, run packetProcessor.LogAllModulePackets() and packetProcessor.LogAllClientPackets() method packetProcessor.LogAllClientPackets = true; packetProcessor.LogAllModulePackets = true; } #endregion SilkroadServer currentServer = srvmgr.CreateNew(bind_addr, bind_port, module_addr, module_port, MyServerType, blowfish, sec_bytes, handshake, packetProcessor, delayedPacketDispatcher, RedirectRules); packetProcessor.AssignServer(currentServer); if (Global.EnablePacketLog) { packetProcessor.LogAllClientPackets = true; packetProcessor.LogAllModulePackets = true; } #region Delayed packets (timers) if (MyServerType == ServerType.AgentServer) { try { if (Global.EnableAutoNotice) { int noticeCount = int.Parse(settings.ReadValue(autoNoticePath, "autonotice", "count")); if (noticeCount > 0) { for (int j = 0; j < noticeCount; j++) { string section = string.Format("notice_{0}", j); int delay = int.Parse(settings.ReadValue(autoNoticePath, section, "delay")); if (delay * 1000 < 20000) { logmgr.WriteLog(LogLevel.Notify, "Notice message delay too small ({0} < {1})", delay * 1000, 20000); continue; } string msg = settings.ReadValue(autoNoticePath, section, "msg"); delayedPacketDispatcher.RegisterClientMsg(DelayedPacketProcessor.AutoNotice, currentServer, delay * 1000, msg); } if (noticeCount > 0) { logmgr.WriteLog(LogLevel.Notify, "Loaded {0} auto-notice messages", noticeCount); } else { logmgr.WriteLog(LogLevel.Notify, "No auto-notice messages loaded"); } } } } catch { Global.logmgr.WriteLog(LogLevel.Notify, "Failed to read auto notice list"); } delayedPacketDispatcher.Start(); } #endregion } //Since now do not output disabled log levels logmgr.ApplyLogSettings(); //Enable log file output if (Global.EnableLogFile || Global.EnableChatLog) { logmgr.StartLogFileOutput(); logmgr.WriteLog(LogLevel.Notify, "Log output started"); } }
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); }