AliNasser
2019-11-19, 04:05 PM
عفواً لايمكن عرض الروابط في الإرشيف
using System;
using System.IO;
using System.Linq;
using System.Windows.Forms;
using SomailProject.Network;
using SomailProject.Database;
using SomailProject.Network.Sockets;
using SomailProject.Network.AuthPackets;
using SomailProject.Game;
using System.Collections.Generic;
using System.Runtime.InteropServices;
using System.Text;
using SomailProject.Network.GamePackets;
using SomailProject.Client;
using System.Diagnostics;
using System.Threading.Tasks;
using System.Threading;
using SomailProject;
using SomailProject.Network.GamePackets.Union;
using ProtoBuf;
using SomailProject.MaTrix;
using SomailProject.Game.MsgServer;
namespace SomailProject
{
class Program
{
public static void Main(string[] args)
{
AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(Application_ThreadE xception);
Time32 Start = Time32.Now;
RandomSeed = Convert.ToInt32(DateTime.Now.Ticks.ToString().Remo ve(DateTime.Now.Ticks.ToString().Length / 2));
Kernel.Random = new FastRandom(RandomSeed);
StartDate = DateTime.Now;
Console.Title = "Samuel-Dawod"; Console.BackgroundColor = ConsoleColor.Black;
Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine("_-_-_-_-_-_ ♥ Conquer Matrix ♥ _-_-_-_-_-_");
Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine("Load server configuration");
string ConfigFileName = "SomailProject.ini";
IniFile IniFile = new IniFile(ConfigFileName);
GameIP = IniFile.ReadString("configuration", "IP");
GamePort = IniFile.ReadUInt16("configuration", "GamePort");
AuthPort = new List<ushort>()
{
IniFile.ReadUInt16("configuration", "AuthPort"),
};
Constants.ServerName = IniFile.ReadString("configuration", "ServerName");
TestingMode = IniFile.ReadString("configuration", "TestMode", "0") == "1" ? true : false;
AllTest = IniFile.ReadString("configuration", "AllTest", "0") == "1" ? true : false;
rates.Load(IniFile);
Database.DataHolder.CreateConnection(
IniFile.ReadString("MySql", "Host", "localhost"),
IniFile.ReadString("MySql", "Username", "root"),
IniFile.ReadString("MySql", "Password", "az4des123"),
IniFile.ReadString("MySql", "Database", "cq"));
PrestigeStars = 54;
EntityUID = new Counter(0);
bool x = false;
using (MySqlCommand cmd = new MySqlCommand(MySqlCommandType.SELECT))
{
cmd.Select("configuration").Where("Server", Constants.ServerName);
using (MySqlReader r = new MySqlReader(cmd))
{
if (r.Read())
{
EntityUID = new Counter(r.ReadUInt32("EntityID"));
Game.ConquerStructures.Society.Guild.GuildCounter = new SomailProject.Counter(r.ReadUInt32("GuildID"));
ConquerItem.ItemUID = new Counter(r.ReadUInt32("ItemUID"));
Constants.ExtraExperienceRate = r.ReadUInt32("ExperienceRate");
Constants.ExtraSpellRate = r.ReadUInt32("ProficiencyExperienceRate");
Constants.ExtraProficiencyRate = r.ReadUInt32("SpellExperienceRate");
Constants.MoneyDropRate = r.ReadUInt32("MoneyDropRate");
Constants.MoneyDropMultiple = r.ReadUInt32("MoneyDropMultiple");
if (r.ReadByte("LastDailySignReset") != DateTime.Now.Month) x = true;
Constants.ConquerPointsDropRate = r.ReadUInt32("ConquerPointsDropRate");
Constants.ConquerPointsDropMultiple = r.ReadUInt32("ConquerPointsDropMultiple");
Constants.ItemDropRate = r.ReadUInt32("ItemDropRate");
Constants.ItemDropQualityRates = r.ReadString("ItemDropQualityString").Split('~');
Constants.WebAccExt = r.ReadString("AccountWebExt");
Constants.WebVoteExt = r.ReadString("VoteWebExt");
Constants.WebDonateExt = r.ReadString("DonateWebExt");
Constants.ServerWebsite = r.ReadString("ServerWebsite");
Constants.ServerGMPass = r.ReadString("ServerGMPass");
PlayerCap = r.ReadInt32("PlayerCap");
Union.UnionCounter = new Counter(r.ReadUInt32("UnionID"));
Database.EntityVariableTable.Load(0, out Vars);
VoteSystem.Count = r.ReadInt32("VotesCount");
}
}
}
if (EntityUID.Now == 0)
{
Console.Clear();
Console.WriteLine("Database error. Please check your MySQL. Server will now close.");
Console.ReadLine();
return;
}
{
Console.WriteLine("Initializing Database.");
Console.WriteLine("Loading The Hard Things");
Database.ConquerItemInformation.Load();
Database.ConquerItemTable.ClearNulledItems();
InnerPowerTable.LoadDBInformation();
#region WardRobe
WardRobe.Load_coatstorage_type();
WardRobe.Load_title_type();
#endregion
InnerPowerTable.Load();
PerfectionTable.LoadItemRefineAttribute();
if (x) MsgSignIn.Reset();
PerfectionTable.LoadItemRefineEffect();
PerfectionTable.LoadItemRefineEffectEX();
Database.Flowers.LoadFlowers();
Database.SignInTable.Load();
Database.MonsterInformation.Load();
Database.MapsTable.Load();
SomailProject.MaTrix.SoulProtection.Load();
World = new World();
World.Init();
Map.CreateTimerFactories();
Database.SignInTable.Load();
Database.DMaps.LoadMapPaths();
Database.DMaps.LoadMap(700);
DMaps.LoadMap(2068);
Database.DMaps.LoadMap(3868);
Database.DMaps.LoadMap(3935);
Database.DMaps.LoadMap(10137);
Copra.QuestInfo.Load();
Database.VipTable.LoadAllVips();
Database.SpellTable.Load();
Database.ShopFile.Load();
Database.HonorShop.Load();
Database.RacePointShop.Load();
VoteSystem.Load();
Database.ChampionShop.Load();
new MsgUserAbilityScore().LoadWallOfPrestige();
PrestigeRank.LoadRanking();
Console.WriteLine("WallOfPrestigeRank Initilizied");
Database.EShopFile.Load();
Database.EShopV2File.Load();
Database.AddingInformationTable.Load();
Database.LotteryTable.Load();
Database.vipLottery.Load();
Copra.Roulette.Database.Roulettes.Load();
Copra.Way2Heroes.Load();
Database.ConquerItemTable.ClearNulledItems();
Refinery.Load();
Values = new Client.GameState[0];
new Game.Map(1002, Database.DMaps.MapPaths[1002]);
new Game.Map(1038, Database.DMaps.MapPaths[1038]);
new Game.Map(2071, Database.DMaps.MapPaths[2071]);
new Game.Map(2057, Database.DMaps.MapPaths[2057]);
new Game.Map(4000, Database.DMaps.MapPaths[4000]);
new Game.Map(4003, Database.DMaps.MapPaths[4003]);
new Game.Map(4006, Database.DMaps.MapPaths[4006]);
new Game.Map(4008, Database.DMaps.MapPaths[4008]);
new Game.Map(4020, Database.DMaps.MapPaths[4020]);
if (DMaps.LoadMap(1038))
Game.GuildWar.Initiate();
if (DMaps.LoadMap(10380))
Game.SuperGuildWar.Initiate();
new Game.Map(1509, Database.DMaps.MapPaths[1509]);
new Game.Map(10002, 2021, Database.DMaps.MapPaths[2021]);
new Game.Map(8883, 1004, Database.DMaps.MapPaths[1004]);
Constants.PKFreeMaps.Add(8883);
Game.EliteGuildWar.EliteGwint();
Database.DataHolder.ReadStats();
Database.IPBan.Load();
JiangHuTable.LoadStatus();
JiangHuTable.LoadRanks();
Database.NobilityTable.Load();
Database.ArenaTable.Load();
Database.TeamArenaTable.Load();
Database.GuildTable.Load();
UnionTable.Load();
AuctionBase.Load();
Database.ChiTable.LoadAllChi();
StorageItem.Load();
Clan.LoadClans();
Kernel.Magic.Load();
TutorInfo.Load();
Database.Disdain.Load();
Tranformation.Int();
Kernel.AtributeStatus.Load();
AtributesStatus.LoadExpInfo();
RebornInfo = new RebornInfomations();
RebornInfo.Load();
Game.Screen.CreateTimerFactories();
new MsgEquipRefineRank().UpdateRanking();
Database.ConquerItemTable.ClearNulledItems();
Network.Cryptography.AuthCryptography.PrepareAuthC ryptography();
World.CreateTournaments();
new MySqlCommand(MySqlCommandType.Update).Update("entities").Set("Online", 0).Execute();
Console.WriteLine("Initializing Sockets.");
AuthServer = new ServerSocket[AuthPort.Count];
for (int i = 0; i < AuthServer.Length; i++)
{
AuthServer[i] = new ServerSocket();
AuthServer[i].OnClientConnect += AuthServer_OnClientConnect;
AuthServer[i].OnClientReceive += AuthServer_OnClientReceive;
AuthServer[i].OnClientDisconnect += AuthServer_OnClientDisconnect;
AuthServer[i].Enable(AuthPort[i], "0.0.0.0");
Console.WriteLine("Auth " + i + " server online.");
}
{
GameServer = new ServerSocket();
GameServer.OnClientConnect += GameServer_OnClientConnect;
GameServer.OnClientReceive += GameServer_OnClientReceive;
GameServer.OnClientDisconnect += GameServer_OnClientDisconnect;
GameServer.Enable(GamePort, "0.0.0.0");
Console.WriteLine("Game server online.");
Console.WriteLine("Web server online.");
Copra.Pet.CreateTimerFactories();
AI.CreateTimerFactories();
var client = new GameState(null);
client.Entity = new Entity(EntityFlag.Monster, false);
client.Entity.MapID = 1002;
Npcs npc = new Npcs(client);
var req = new NpcRequest();
req.Deserialize(new byte[28]);
Npcs.GetDialog(req, client);
client = null;
SomailProject.Booths.Load();
}
Console.WriteLine("Server loaded in " + (Time32.Now - Start) + " milliseconds.");
Console.WriteLine("[********************** ♥ [Samuel.Dawod] ♥ **********************]");
SomailHandler += SomailConsole_CloseEvent;
SetConsoleCtrlHandler(SomailHandler, true);
GC.Collect();
WorkConsole();
}
}
public static int PrestigeStars = 0;
public static RebornInfomations RebornInfo;
public static Encoding Encoding = ASCIIEncoding.Default;
[DllImport("user32.dll")]
public static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
[DllImport("user32.dll")]
public static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);
public static int PlayerCap = 1000;
public static bool ALEXPC = false;
public static bool NemesisTyrantSpanwed = false;
public static long MaxOn = 0;
public static long MaxEntitys = 0;
public static ServerSocket[] AuthServer;
public static int CpuUse = 0;
public static ServerSocket GameServer;
public static Counter EntityUID;
public static string GameIP;
public static bool SpookAlive = false;
public static DayOfWeek Today;
public static ushort GamePort;
public static List<ushort> AuthPort;
public static DateTime StartDate;
public static bool reseted = false;
public static uint ScreenColor = 0;
public static DateTime RestartDate = DateTime.Now.AddHours(24);
public static bool restarted = false;
public static bool WarEnd = false;
public static bool uniquepk = false;
public static uint mess = 0;
public static World World;
public static Client.GameState[] GamePool = new Client.GameState[0];
public static Client.GameState[] Values = new Client.GameState[0];
public static VariableVault Vars;
public static long WeatherType = 0L;
public static bool TestingMode = false;
public static bool AllTest = false;
public static bool SnowBa = true;
public static bool Nemesis = true;
public static bool ThrillingSpook = true;
public static uint PhysicalDamage = 100;// + 150%
public static bool SwordMaster = true;
public static bool TeratoDragon = true;
public static bool SnowSoul = true;
public static int RandomSeed = 0;
public static short GetDistance(ushort X, ushort Y, ushort X2, ushort Y2)
{
return (short)Math.Sqrt((X - X2) * (X - X2) + (Y - Y2) * (Y - Y2));
}
#region Translate
public static void SaveTranslate()
{
var file = Environment.CurrentDirectory + "Translate.txt";
if (File.Exists(file))
File.Delete(file);
StreamWriter writer = new StreamWriter(File.Create(file), Encoding);
writer.AutoFlush = true;
foreach (var item in Kernel.Translateed)
writer.WriteLine(item.Key + "@@" + item.Value);
writer.Close();
}
public static void LoadTranslate()
{
var file = Environment.CurrentDirectory + "Translate.txt";
if (File.Exists(file))
{
string[] text = File.ReadAllLines(file, Encoding);
for (int x = 0; x < text.Length; x++)
{
string line = text[x];
string[] split = line.Split(new string[] { "@@" }, StringSplitOptions.RemoveEmptyEntries);
if (split.Length < 1)
continue;
var key = split[0];
if (split.Length < 2)
continue;
var value = split[1];
if (!Kernel.Translateed.ContainsKey(key))
Kernel.Translateed.Add(key, value);
}
}
}
#endregion
#region VersionChecker
//if (VersionChecker.IsValidVersion() == false)
//{
// MessageBox.Show("Your Trial Version has expired, Please get the Full version |Contact 011 42 72 19 32");
// SomailProject.Console.WriteLine("Enter Password:");
// Program.Password = Console.ReadLine();
// if (ClassExtensions.Get64HashCode(Program.Password) != 4586181316755855993)
// {
// MessageBox.Show("Your Trial Version has expired, Please get the Full version |Contact 011 42 72 19 32");
// SomailProject.Console.WriteLine("Thx. For Waiting...!");
// SomailProject.Console.WriteLine("Wrong Password!");
// SomailProject.Console.WriteLine("If Want To make this Source Work");
// SomailProject.Console.WriteLine("You need to put the right Password. !");
// SomailProject.Console.ReadLine();
// MessageBox.Show("You Will Get Hacked. | Contact 011 42 72 19 32");
// System.Console.ForegroundColor = System.ConsoleColor.DarkGreen;
// System.Console.WindowLeft = System.Console.WindowTop = 0;
// System.Console.WindowHeight = System.Console.BufferHeight = System.Console.LargestWindowHeight;
// System.Console.WindowWidth = System.Console.BufferWidth = System.Console.LargestWindowWidth;
// System.Console.CursorVisible = false;
// int width, height;
// int[] y;
// int[] l;
// Initialize(out width, out height, out y, out l);
// int ms;
// while (true)
// {
// DateTime t1 = DateTime.Now;
// CopraStep(width, height, y, l);
// ms = 10 - (int)((TimeSpan)(DateTime.Now - t1)).TotalMilliseconds;
// if (ms > 0)
// System.Threading.Thread.Sleep(ms);
// if (System.Console.KeyAvailable)
// if (System.Console.ReadKey().Key == ConsoleKey.F5)
// Initialize(out width, out height, out y, out l);
// }
// // Environment.Exit(0);
// }
// elsez
// {
// VersionChecker.TrialEnd();
// MessageBox.Show("Your Trial Version has Renewed, To get the Full version");
// }
// return;
//}
//else
//{
// VersionChecker chk = new VersionChecker();
//}
#endregion VersionChecker
#region Closing Events
private static bool SomailConsole_CloseEvent(CtrlType sig)
{
Save();
return true;
}
private static Native.ConsoleEventHandler SomailHandler;
[DllImport("Kernel32")]
private static extern bool SetConsoleCtrlHandler(Native.ConsoleEventHandler handler, bool add);
private delegate bool EventHandler(CtrlType sig);
#endregion
public static bool Save(bool Exit = false)
{
try
{
using (var conn = Database.DataHolder.MySqlConnection)
{
conn.Open();
foreach (Client.GameState client in Program.Values)
{
SaveTranslate();
Database.JiangHuTable.FullSave(client);
Database.EntityTable.SaveEntity(client);
Database.SkillTable.SaveClientSpells(client);
Database.SkillTable.SaveProficiencies(client);
Database.ArenaTable.SaveArenaStatistics(client.Are naStatistic);
Database.TeamArenaTable.SaveArenaStatistics(client .TeamArenaStatistic);
client.WardRobe.Save();
}
}
Database.InnerPowerTable.Save();
Database.Flowers.SaveFlowers();
AuctionBase.Save();
Game.ClanWarArena.Save();
using (MySqlCommand cmd = new MySqlCommand(MySqlCommandType.SELECT).Select("configuration").Where("Server", Constants.ServerName))
{
using (MySqlReader r = new MySqlReader(cmd))
{
if (r.Read())
{
new Database.MySqlCommand(Database.MySqlCommandType.Up date).Update("configuration").Set("EntityID", EntityUID.Now).Set("ServerKingdom", Kernel.ServerKingdom).Set("GuildID", Game.ConquerStructures.Society.Guild.GuildCounter. Now).Where("Server", Constants.ServerName).Execute();
if (r.ReadByte("LastDailySignReset") != DateTime.Now.Month) MsgSignIn.Reset();
}
}
}
using (var cmd = new MySqlCommand(MySqlCommandType.Update).Update("configuration"))
cmd.Set("LastDailySignReset", DateTime.Now.Month).Execute();
Console.WriteLine("Saving cmd Done.");
//if (Exit)
// Environment.Exit(0);
}
catch (Exception e)
{
Console.WriteLine(e.ToString());
return false;
}
return true;
}
#region Exceptions & Logs
public static void AddVendorLog(String vendor, string buying, string moneyamount, ConquerItem Item)
{
String folderN = DateTime.Now.Year + "-" + DateTime.Now.Month,
Path = "gmlogs\\VendorLogs\\",
NewPath = System.IO.Path.Combine(Path, folderN);
if (!File.Exists(NewPath + folderN))
{
System.IO.Directory.CreateDirectory(System.IO.Path .Combine(Path, folderN));
}
if (!File.Exists(NewPath + "\\" + DateTime.Now.Day + ".txt"))
{
using (System.IO.FileStream fs = System.IO.File.Create(NewPath + "\\" + DateTime.Now.Day + ".txt"))
{
fs.Close();
}
}
using (System.IO.StreamWriter file = new System.IO.StreamWriter(NewPath + "\\" + DateTime.Now.Day + ".txt", true))
{
file.WriteLine("------------------------------------------------------------------------------------");
file.WriteLine("{0} HAS BOUGHT AN ITEM : {2} FROM {1} SHOP - for {3}", vendor, buying, Item.ToLog(), moneyamount);
file.WriteLine("------------------------------------------------------------------------------------");
file.Close();
}
}
public static void AddGMCommand(string gm, string commandStr)
{
String folderN = DateTime.Now.Year + "-" + DateTime.Now.Month,
Path = "gmlogs\\GMCommandsLog\\",
NewPath = System.IO.Path.Combine(Path, folderN);
if (!File.Exists(NewPath + folderN))
{
System.IO.Directory.CreateDirectory(System.IO.Path .Combine(Path, folderN));
}
if (!File.Exists(NewPath + "\\" + DateTime.Now.Day + ".txt"))
{
using (System.IO.FileStream fs = System.IO.File.Create(NewPath + "\\" + DateTime.Now.Day + ".txt"))
{
fs.Close();
}
}
using (System.IO.StreamWriter file = new System.IO.StreamWriter(NewPath + "\\" + DateTime.Now.Day + ".txt", true))
{
file.WriteLine(gm + commandStr);
file.Close();
}
}
public static void RemoveCps(string text)
{
try
{
text = "[" + DateTime.Now.ToString("HH:mm:ss") + "]" + text;
String folderN = DateTime.Now.Year + "-" + DateTime.Now.Month,
Path = "gmlogs\\RemoveCps\\",
NewPath = System.IO.Path.Combine(Path, folderN);
if (!File.Exists(NewPath + folderN))
{
System.IO.Directory.CreateDirectory(System.IO.Path .Combine(Path, folderN));
}
if (!File.Exists(NewPath + "\\" + DateTime.Now.Day + ".txt"))
{
using (System.IO.FileStream fs = System.IO.File.Create(NewPath + "\\" + DateTime.Now.Day + ".txt"))
{
System.IO.StreamWriter file = new System.IO.StreamWriter(NewPath + "\\" + DateTime.Now.Day + ".txt", true);
fs.Close();
}
}
using (System.IO.StreamWriter file = new System.IO.StreamWriter(NewPath + "\\" + DateTime.Now.Day + ".txt", true))
{
file.WriteLine(text);
file.Close();
}
}
catch (Exception ex) { Console.WriteLine(ex); }
}
public static void AddCpsWin(string text)
{
try
{
text = "[" + DateTime.Now.ToString("HH:mm:ss") + "]" + text;
String folderN = DateTime.Now.Year + "-" + DateTime.Now.Month,
Path = "gmlogs\\AddWinCps\\",
NewPath = System.IO.Path.Combine(Path, folderN);
if (!File.Exists(NewPath + folderN))
{
System.IO.Directory.CreateDirectory(System.IO.Path .Combine(Path, folderN));
}
if (!File.Exists(NewPath + "\\" + DateTime.Now.Day + ".txt"))
{
using (System.IO.FileStream fs = System.IO.File.Create(NewPath + "\\" + DateTime.Now.Day + ".txt"))
{
fs.Close();
}
}
using (System.IO.StreamWriter file = new System.IO.StreamWriter(NewPath + "\\" + DateTime.Now.Day + ".txt", true))
{
file.WriteLine(text);
file.Close();
}
}
catch (Exception ex) { Console.WriteLine(ex); }
}
public static void AddDropLog(String Name, ConquerItem Item)
{
String folderN = DateTime.Now.Year + "-" + DateTime.Now.Month,
Path = "gmlogs\\droplogs\\",
NewPath = System.IO.Path.Combine(Path, folderN);
if (!File.Exists(NewPath + folderN))
{
System.IO.Directory.CreateDirectory(System.IO.Path .Combine(Path, folderN));
}
string path = NewPath + "\\" + DateTime.Now.Day + ".txt";
if (!File.Exists(path)) File.AppendAllText(path, "");
string text = "------------------------------------------------------------------------------------"
+ Environment.NewLine + string.Format("Entity {0} HAS DROPPED AN ITEM : {1} -", Name, Item.ToLog())
+ Environment.NewLine + "------------------------------------------------------------------------------------";
File.AppendAllText(path, text);
}
public static void AddTradeLog(Game.ConquerStructures.Trade first, String firstN, Game.ConquerStructures.Trade second, String secondN)
{
String folderN = DateTime.Now.Year + "-" + DateTime.Now.Month,
Path = "database\\Security\\Trade\\",
NewPath = System.IO.Path.Combine(Path, folderN);
if (!File.Exists(NewPath + folderN))
{
System.IO.Directory.CreateDirectory(System.IO.Path .Combine(Path, folderN));
}
if (!File.Exists(NewPath + "\\" + DateTime.Now.Day + ".txt"))
{
using (System.IO.FileStream fs = System.IO.File.Create(NewPath + "\\" + DateTime.Now.Day + ".txt"))
{
fs.Close();
}
}
using (System.IO.StreamWriter file = new System.IO.StreamWriter(NewPath + "\\" + DateTime.Now.Day + ".txt", true))
{
file.WriteLine("************************************************** **********************************");
file.WriteLine("First Person TradeLog ({0}) -", firstN);
file.WriteLine("Gold Traded: " + first.Money);
file.WriteLine("Conquer Points Traded: " + first.ConquerPoints);
for (int i = 0; i < first.Items.Count; i++)
{
file.WriteLine("------------------------------------------------------------------------------------");
file.WriteLine("Item : " + first.Items[i].ToLog());
file.WriteLine("------------------------------------------------------------------------------------");
}
file.WriteLine("Second Person TradeLog ({0}) -", secondN);
file.WriteLine("Gold Traded: " + second.Money);
file.WriteLine("Conquer Points Traded: " + second.ConquerPoints);
for (int i = 0; i < second.Items.Count; i++)
{
file.WriteLine("------------------------------------------------------------------------------------");
file.WriteLine("Item : " + second.Items[i].ToLog());
file.WriteLine("------------------------------------------------------------------------------------");
}
file.WriteLine("************************************************** **********************************");
}
}
public static void AddMobLog(string War, string name, uint CPs = 0, uint item = 0)
{
String folderN = DateTime.Now.Year + "-" + DateTime.Now.Month,
Path = "gmlogs\\MobLogs\\",
NewPath = System.IO.Path.Combine(Path, folderN);
if (!File.Exists(NewPath + folderN))
{
System.IO.Directory.CreateDirectory(System.IO.Path .Combine(Path, folderN));
}
if (!File.Exists(NewPath + "\\" + DateTime.Now.Day + ".txt"))
{
using (System.IO.FileStream fs = System.IO.File.Create(NewPath + "\\" + DateTime.Now.Day + ".txt"))
{
fs.Close();
}
}
using (System.IO.StreamWriter file = new System.IO.StreamWriter(NewPath + "\\" + DateTime.Now.Day + ".txt", true))
{
if (CPs != 0)
file.WriteLine(name + " got " + CPs + " CPs from the [" + War + "] as prize at " + DateTime.Now.Hour + ":" + DateTime.Now.Minute + ":" + DateTime.Now.Second);
else
file.WriteLine(name + " got " + item + " Item from the [" + War + "] as prize at " + DateTime.Now.Hour + ":" + DateTime.Now.Minute + ":" + DateTime.Now.Second);
}
}
public static void AddWarLog(string War, string CPs, string name)
{
String folderN = DateTime.Now.Year + "-" + DateTime.Now.Month,
Path = "gmlogs\\Warlogs\\",
NewPath = System.IO.Path.Combine(Path, folderN);
if (!File.Exists(NewPath + folderN))
{
System.IO.Directory.CreateDirectory(System.IO.Path .Combine(Path, folderN));
}
if (!File.Exists(NewPath + "\\" + DateTime.Now.Day + ".txt"))
{
using (System.IO.FileStream fs = System.IO.File.Create(NewPath + "\\" + DateTime.Now.Day + ".txt"))
{
fs.Close();
}
}
using (System.IO.StreamWriter file = new System.IO.StreamWriter(NewPath + "\\" + DateTime.Now.Day + ".txt", true))
{
file.WriteLine(name + " got " + CPs + " CPs from the [" + War + "] as prize at " + DateTime.Now.Hour + ":" + DateTime.Now.Minute + ":" + DateTime.Now.Second);
}
}
static void Application_ThreadException(object sender, UnhandledExceptionEventArgs e)
{
SaveException(e.ExceptionObject as Exception);
}
public static void SaveException(Exception e)
{
Console.WriteLine(e);
var dt = DateTime.Now;
string date = dt.Month + "-" + dt.Day + "//";
if (!Directory.Exists(Application.StartupPath + Constants.UnhandledExceptionsPath))
Directory.CreateDirectory(Application.StartupPath + "\\" + Constants.UnhandledExceptionsPath);
if (!Directory.Exists(Application.StartupPath + "\\" + Constants.UnhandledExceptionsPath + date))
Directory.CreateDirectory(Application.StartupPath + "\\" + Constants.UnhandledExceptionsPath + date);
if (!Directory.Exists(Application.StartupPath + "\\" + Constants.UnhandledExceptionsPath + date + e.TargetSite.Name))
Directory.CreateDirectory(Application.StartupPath + "\\" + Constants.UnhandledExceptionsPath + date + e.TargetSite.Name);
string fullPath = Application.StartupPath + "\\" + Constants.UnhandledExceptionsPath + date + e.TargetSite.Name + "\\";
string date2 = dt.Hour + "-" + dt.Minute;
List<string> Lines = new List<string>();
Lines.Add("----Exception message----");
Lines.Add(e.Message);
Lines.Add("----End of exception message----\r\n");
Lines.Add("----Stack trace----");
Lines.Add(e.StackTrace);
Lines.Add("----End of stack trace----\r\n");
//Lines.Add("----Data from exception----");
//foreach (KeyValuePair<object, object> data in e.Data)
// Lines.Add(data.Key.ToString() + "->" + data.Value.ToString());
//Lines.Add("----End of data from exception----\r\n");
File.WriteAllLines(fullPath + date2 + ".txt", Lines.ToArray());
}
#endregion
private static void WorkConsole()
{
while (true)
{
try
{
CommandsAI(Console.ReadLine());
}
catch (Exception e) { Console.WriteLine(e); }
}
}
public static DateTime LastRandomReset = DateTime.Now;
public static Network.GamePackets.BlackSpotPacket BlackSpotPacket = new Network.GamePackets.BlackSpotPacket();
public static bool MyPC = true;
public static void CommandsAI(string command)
{
try
{
if (command == null)
return;
string[] data = command.Split(' ');
switch (data[0])
{
case "@testmode":
{
if (TestingMode)
{
TestingMode = false;
Console.WriteLine("Test Mode Off");
}
else
{
TestingMode = true;
Kernel.SendWorldMessage(new Network.GamePackets.Message(string.Concat(new object[] { "Server will exit for 5 min to fix some bugs, please be paitent" }), System.Drawing.Color.Black, 0x7db), Program.Values);
CommandsAI("@save");
new Database.MySqlCommand(Database.MySqlCommandType.Up date).Update("configuration").Set("ItemUID", ConquerItem.ItemUID.Now).Where("Server", Constants.ServerName).Execute();
Database.EntityVariableTable.Save(0, Vars);
var WC = Program.Values.ToArray();
foreach (Client.GameState client in WC)
{
if (client.Account.State != AccountTable.AccountState.ProjectManager)
{
client.Send("Server will exit for 5 min to fix some bugs, please be paitent !");
client.Disconnect();
}
}
if (GuildWar.IsWar)
GuildWar.End();
new Database.MySqlCommand(Database.MySqlCommandType.Up date).Update("configuration").Set("ItemUID", ConquerItem.ItemUID.Now).Where("Server", Constants.ServerName).Execute();
Console.WriteLine("Test Mode On");
}
break;
}
case "@clear":
{
Console.Clear();
SomailProject.Console.WriteLine("Consle and program Cleared ");
break;
}
case "@sh":
{
Console.WriteLine(Program.SnowBa);
break;
}
case "@sh1":
{
Program.SnowBa = true;
break;
}
case "@sh2":
{
Program.SnowBa = false;
break;
}
case "@Copra":
case "@bigbos":
SomailProject.Console.WriteLine("Server will restart after 10 minutes.");
Kernel.SendWorldMessage(new SomailProject.Network.GamePackets.Message("The server will be brought down for maintenance in 5 minute, Please exit the game now.", System.Drawing.Color.Orange, 0x7db), Program.Values);
System.Threading.Thread.Sleep(0x7530);
Kernel.SendWorldMessage(new SomailProject.Network.GamePackets.Message("The server will be brought down for maintenance in 4 minute 30 second, Please exit the game now.", System.Drawing.Color.Orange, 0x7db), Program.Values);
System.Threading.Thread.Sleep(0x7530);
Kernel.SendWorldMessage(new SomailProject.Network.GamePackets.Message("The server will be brought down for maintenance in 4 minute, Please exit the game now.", System.Drawing.Color.Orange, 0x7db), Program.Values);
System.Threading.Thread.Sleep(0x7530);
Kernel.SendWorldMessage(new SomailProject.Network.GamePackets.Message("The server will be brought down for maintenance in 3 minute 30 second, Please exit the game now.", System.Drawing.Color.Orange, 0x7db), Program.Values);
System.Threading.Thread.Sleep(0x7530);
Kernel.SendWorldMessage(new SomailProject.Network.GamePackets.Message("The server will be brought down for maintenance in 3 minute, Please exit the game now.", System.Drawing.Color.Orange, 0x7db), Program.Values);
System.Threading.Thread.Sleep(0x7530);
Kernel.SendWorldMessage(new SomailProject.Network.GamePackets.Message("The server will be brought down for maintenance in 2 minute 30 second, Please exit the game now.", System.Drawing.Color.Orange, 0x7db), Program.Values);
System.Threading.Thread.Sleep(0x7530);
Kernel.SendWorldMessage(new SomailProject.Network.GamePackets.Message("The server will be brought down for maintenance in 2 minute, Please exit the game now.", System.Drawing.Color.Orange, 0x7db), Program.Values);
System.Threading.Thread.Sleep(0x7530);
Kernel.SendWorldMessage(new SomailProject.Network.GamePackets.Message("The server will be brought down for maintenance in 1 minute 30 second, Please exit the game now.", System.Drawing.Color.Orange, 0x7db), Program.Values);
System.Threading.Thread.Sleep(0x7530);
Kernel.SendWorldMessage(new SomailProject.Network.GamePackets.Message("The server will be brought down for maintenance in 1 minute, Please exit the game now.", System.Drawing.Color.Orange, 0x7db), Program.Values);
System.Threading.Thread.Sleep(0x7530);
Kernel.SendWorldMessage(new SomailProject.Network.GamePackets.Message("The server will be brought down for maintenance in 30 second, Please exit the game now.", System.Drawing.Color.Orange, 0x7db), Program.Values);
SomailProject.Console.WriteLine("Server will exit after 1 minute.");
CommandsAI("@save");
System.Threading.Thread.Sleep(0x7530);
Kernel.SendWorldMessage(new SomailProject.Network.GamePackets.Message("The Server restarted, Please log in after 5 minutes ", System.Drawing.Color.Orange, 0x7db), Program.Values);
try
{
CommandsAI("@restart");
}
catch
{
SomailProject.Console.WriteLine("Server cannot exit");
}
break;
case "@flushbans":
{
Database.IPBan.Load();
break;
}
case "@alivetime":
{
DateTime now = DateTime.Now;
TimeSpan t2 = new TimeSpan(StartDate.ToBinary());
TimeSpan t1 = new TimeSpan(now.ToBinary());
Console.WriteLine("The server has been online " + (int)(t1.TotalHours - t2.TotalHours) + " hours, " + (int)((t1.TotalMinutes - t2.TotalMinutes) % 1) + " minutes.");
break;
}
case "@online":
{
Console.WriteLine("Online Entitys count: " + Kernel.GamePool.Count);
string line = "";
foreach (Client.GameState pClient in Program.Values)
line += pClient.Entity.Name + ",";
if (line != "")
{
line = line.Remove(line.Length - 1);
Console.WriteLine("Entitys: " + line);
}
break;
}
case "@memoryusage":
{
var proc = System.Diagnostics.Process.GetCurrentProcess();
Console.WriteLine("Thread count: " + proc.Threads.Count);
Console.WriteLine("Memory set(MB): " + ((double)((double)proc.WorkingSet64 / 1024)) / 1024);
proc.Close();
break;
}
case "@save":
{
Save();
}
break;
case "@PlayerCap":
{
try
{
PlayerCap = int.Parse(data[1]);
}
catch
{
}
break;
}
case "@skill":
{
Game.Features.Tournaments.SkillPk.SkillTournament. Open();
foreach (var clien in Kernel.GamePool.Values)
{
if (clien.Team == null)
clien.Team = new Game.ConquerStructures.Team(clien);
Game.Features.Tournaments.SkillPk.SkillTournament. Join(clien, 3);
}
break;
}
case "@team":
{
Game.Features.Tournaments.TeamPk.TeamTournament.Op en();
foreach (var clien in Kernel.GamePool.Values)
{
if (clien.Team == null)
clien.Team = new Game.ConquerStructures.Team(clien);
Game.Features.Tournaments.TeamPk.TeamTournament.Jo in(clien, 3);
}
break;
}
case "@exit":
{
Program.Save(true);
CommandsAI("@save");
GameServer.Disable();
for (int i = 0; i < AuthServer.Length; i++)
{
AuthServer[i].Disable();
}
new Database.MySqlCommand(Database.MySqlCommandType.Up date).Update("configuration").Set("ItemUID", ConquerItem.ItemUID.Now).Where("Server", Constants.ServerName).Execute();
Database.EntityVariableTable.Save(0, Vars);
var WC = Program.Values.ToArray();
Parallel.ForEach(Program.Values, client =>
{
client.Send(" Server will exit for 5 min to Solve The Problem, please be paitent ");
client.Disconnect();
});
Kernel.SendWorldMessage(new Network.GamePackets.Message(string.Concat(new object[] { " Server will exit for 5 min to Solve The Problem, please be paitent " }), System.Drawing.Color.Black, 0x7db), Program.Values);
if (GuildWar.IsWar)
GuildWar.End();
new Database.MySqlCommand(Database.MySqlCommandType.Up date).Update("configuration").Set("ItemUID", ConquerItem.ItemUID.Now).Where("Server", Constants.ServerName).Execute();
Environment.Exit(0);
}
break;
case "serverpass":
{
using (MySqlCommand cmd = new MySqlCommand(MySqlCommandType.SELECT))
{
cmd.Select("configuration").Where("Server", Constants.ServerName);
using (MySqlReader r = new MySqlReader(cmd))
{
if (r.Read())
Constants.ServerGMPass = r.ReadString("ServerGMPass");
}
}
break;
}
case "@pressure":
{
Console.WriteLine("Genr: " + World.GenericThreadPool.ToString());
Console.WriteLine("Send: " + World.SendPool.ToString());
Console.WriteLine("Recv: " + World.ReceivePool.ToString());
break;
}
case "@restart":
{
try
{
Program.Save();
Kernel.SendWorldMessage(new Network.GamePackets.Message(string.Concat(new object[] { "Server Will Be Restart Now !" }), System.Drawing.Color.Black, 0x7db), Program.Values);
new Database.MySqlCommand(Database.MySqlCommandType.Up date).Update("configuration").Set("ItemUID", ConquerItem.ItemUID.Now).Where("Server", Constants.ServerName).Execute();
var WC = Program.Values.ToArray();
foreach (Client.GameState client in WC)
{
client.Send(" Server Will Be Restart Now ");
client.Disconnect();
}
GameServer.Disable();
for (int i = 0; i < AuthServer.Length; i++)
{
AuthServer[i].Disable();
}
if (GuildWar.IsWar)
GuildWar.End();
new Database.MySqlCommand(Database.MySqlCommandType.Up date).Update("configuration").Set("ItemUID", ConquerItem.ItemUID.Now).Where("Server", Constants.ServerName).Execute();
Application.Restart();
Environment.Exit(0);
}
catch (Exception e)
{
Console.WriteLine(e);
Console.ReadLine();
}
}
break;
case "@account":
{
Database.AccountTable account = new AccountTable(data[1]);
account.Password = data[2];
account.State = AccountTable.AccountState.Entity;
account.Save();
}
break;
case "@process":
{
HandleClipboardPacket(command);
break;
}
}
}
catch (Exception e)
{
Console.WriteLine(e.ToString());
}
}
public static void WriteLine(string Line)
{
try
{
Console.WriteLine(Line);
}
catch { }
}
public static void HandleClipboardPacket(string cmd)
{
string[] pData = cmd.Split(' ');
long off = 0, type = 0, val = 0;
if (pData.Length > 1)
{
string[] oData = pData[1].Split(':');
if (oData.Length == 3)
{
off = long.Parse(oData[0]);
type = long.Parse(oData[1]);
if (oData[2] == "u")
val = 1337;
else
val = long.Parse(oData[2]);
}
}
string Data = OSClipboard.GetText();
string[] num = Data.Split(new[] { " " }, StringSplitOptions.RemoveEmptyEntries);
byte[] packet = new byte[num.Length + 8];
for (int i = 0; i < num.Length; i++)
packet[i] = byte.Parse(num[i], System.Globalization.NumberStyles.HexNumber);
Writer.WriteUInt16((ushort)(packet.Length - 8), 0, packet);
if (off != 0)
{
switch (type)
{
case 1:
{
packet[(int)off] = (byte)val;
break;
}
case 2:
{
Writer.WriteUInt16((ushort)val, (int)off, packet);
break;
}
case 4:
{
Writer.WriteUInt32((uint)val, (int)off, packet);
break;
}
case 8:
{
Writer.WriteUInt64((ulong)val, (int)off, packet);
break;
}
}
}
foreach (var client in Program.Values)
{
if (val == 1337 && type == 4)
Writer.WriteUInt32(client.Entity.UID, (int)off, packet);
client.Send(packet);
}
}
private static void GameServer_OnClientReceive(byte[] buffer, int length, ClientWrapper obj)
{
if (obj.Connector == null)
{
obj.Disconnect();
}
else
{
GameState connector = obj.Connector as GameState;
if (connector.Exchange)
{
connector.Exchange = false;
connector.Action = (byte)1;
COServer.Network.Cryptography.GameCryptography gameCryptography = new COServer.Network.Cryptography.GameCryptography(Enc oding.Default.GetBytes(Constants.GameCryptographyK ey));
byte[] numArray = new byte[length];
Array.Copy((Array)buffer, (Array)numArray, length);
gameCryptography.Decrypt(numArray, length);
bool flag = false;
int offset = 0;
for (int x = 0; x < 80; x++)
{
if (BitConverter.ToInt32(numArray, x) == 128)
{
if (length >= 205)
{
offset = x;
flag = true;
connector.Cryptography.Decrypt(buffer, length - 40);
}
else
{
offset = x;
connector.Cryptography.Decrypt(buffer, length);
}
}
}
int int32 = BitConverter.ToInt32(buffer, offset);
int index1 = offset + 4;
if (int32 != 128)
{
connector.Disconnect(true);
}
else
{
byte[] bytes = new byte[128];
int index2 = 0;
while (index2 < int32)
{
bytes[index2] = buffer[index1];
++index2;
++index1;
}
string PublicKey = Encoding.Default.GetString(bytes);
connector.Cryptography = connector.DHKeyExchange.HandleClientKeyPacket(Publ icKey, connector.Cryptography);
if (!flag)
return;
byte[] buffer1 = new byte[40];
Buffer.BlockCopy((Array)buffer, length - 40, (Array)buffer1, 0, 40);
processData(buffer1, 40, connector);
}
}
else
processData(buffer, length, connector);
}
}
private static void processData(byte[] buffer, int length, Client.GameState Client)
{
Client.Cryptography.Decrypt(buffer, length);
Client.Queue.Enqueue(buffer, length);
if (Client.Queue.CurrentLength > 1224)
{
Console.WriteLine("[Disconnect]Reason:The packet size is too big. " + Client.Queue.CurrentLength);
Client.Disconnect();
return;
}
while (Client.Queue.CanDequeue())
{
byte[] data = Client.Queue.Dequeue();
try
{
Network.PacketHandler.HandlePacket(data, Client);
}
catch (Exception e)
{
if (e.ToString().Contains("Index"))
{
return;
}
else
{
Network.PacketHandler.HandlePacket(data, Client);
}
}
}
}
static void GameServer_OnClientConnect(ClientWrapper obj)
{
Client.GameState client = new Client.GameState(obj);
client.Send(client.DHKeyExchange.CreateServerKeyPa cket());
obj.Connector = client;
}
static void GameServer_OnClientDisconnect(ClientWrapper obj)
{
if (obj.Connector != null)
(obj.Connector as Client.GameState).Disconnect();
else
obj.Disconnect();
}
public static void AuthServer_OnClientReceive(byte[] buffer, int length, ClientWrapper arg3)
{
var player = arg3.Connector as Client.AuthClient;
AuthClient authClient = arg3.Connector as AuthClient;
player.Cryptographer.Decrypt(buffer, length);
player.Queue.Enqueue(buffer, length);
while (player.Queue.CanDequeue())
{
byte[] packet = player.Queue.Dequeue();
ushort len = BitConverter.ToUInt16(packet, 0);
if (len == 312)
{
player.Info = new Authentication();
player.Info.Deserialize(packet);
player.Account = new AccountTable(player.Info.Username);
if (!LoginBruteForce.AcceptJoin(arg3.IP))
{
Console.WriteLine(string.Concat(new string[] { "Client > ", player.Info.Username, "was blocked address", arg3.IP, "!" }));
arg3.Disconnect();
break;
}
Forward Fw = new Forward();
Console.WriteLine("UserName: {0} Password: {1} ServerName: {2} Online", player.Info.Username, player.Info.Password, player.Info.Server);
if (player.Account.Username == player.Info.Username && player.Account.exists)
{
if (player.Account.Password == player.Info.Password && player.Account.exists)
{
Fw.Identifier = player.Account.GenerateKey();
Kernel.AwaitingPool[Fw.Identifier] = player.Account;
Fw.IP = GameIP;
Fw.Port = GamePort;
}
else
{
LoginBruteForce.ClientRegistred(arg3.IP);
Fw.Type = Forward.ForwardType.InvalidInfo;
}
}
else
{
Fw.Type = Forward.ForwardType.WrongAccount;
}
player.Send(Fw);
}
}
}
static void AuthServer_OnClientDisconnect(ClientWrapper obj)
{
obj.Disconnect();
}
static void AuthServer_OnClientConnect(ClientWrapper obj)
{
Client.AuthClient authState;
obj.Connector = (authState = new Client.AuthClient(obj));
authState.Cryptographer = new Network.Cryptography.AuthCryptography();
Network.AuthPackets.PasswordCryptographySeed pcs = new PasswordCryptographySeed();
pcs.Seed = Kernel.Random.Next();
authState.PasswordSeed = pcs.Seed;
authState.Send(pcs);
//Protection.LoaderProgram.CLientsPass.Clear();
//Protection.LoaderProgram.CLientsPass.Add(authState .PasswordSeed, "");
}
internal static Client.GameState FindClient(string name)
{
return Values.FirstOrDefault(p => p.Entity.Name == name);
}
#region Copra Style
static bool thistime = false;
private static void CopraStep(int width, int height, int[] y, int[] l)
{
int x;
thistime = !thistime;
for (x = 0; x < width; ++x)
{
if (x % 11 == 10)
{
if (!thistime)
continue;
System.Console.ForegroundColor = System.ConsoleColor.Red;
}
else
{
System.Console.ForegroundColor = System.ConsoleColor.DarkGreen;
System.Console.SetCursorPosition(x, inBoxY(y[x] - 2 - (l[x] / 40 * 2), height));
System.Console.Write(R);
System.Console.ForegroundColor = System.ConsoleColor.Green;
}
System.Console.SetCursorPosition(x, y[x]);
System.Console.Write(R);
y[x] = inBoxY(y[x] + 1, height);
System.Console.SetCursorPosition(x, inBoxY(y[x] - l[x], height));
System.Console.Write(' ');
}
}
private static void Initialize(out int width, out int height, out int[] y, out int[] l)
{
int h1;
int h2 = (h1 = (height = System.Console.WindowHeight) / 2) / 2;
width = System.Console.WindowWidth - 1;
y = new int[width];
l = new int[width];
int x;
System.Console.Clear();
for (x = 0; x < width; ++x)
{
y[x] = r.Next(height);
l[x] = r.Next(h2 * ((x % 11 != 10) ? 2 : 1), h1 * ((x % 11 != 10) ? 2 : 1));
}
}
static Random r = new Random();
public static DateTime KingsTime;
static char R
{
get
{
int t = r.Next(10);
if (t <= 2)
return (char)('0' + r.Next(10));
else if (t <= 4)
return (char)('a' + r.Next(27));
else if (t <= 6)
return (char)('A' + r.Next(27));
else
return (char)(r.Next(32, 255));
}
}
public static int inBoxY(int n, int height)
{
n = n % height;
if (n < 0)
return n + height;
else
return n;
}
#endregion Copra Style
internal static void WriteLine(string p, ushort MsgId, short p_2)
{
throw new NotImplementedException();
}
public static int Carnaval { get; set; }
public static int Carnaval2 { get; set; }
public static int Carnaval3 { get; set; }
public static uint NextItemID { get; set; }
public static uint ExpRateSpell = 2;
public static string GetString(byte[] data, int position, int count)
{
var str = Program.Encoding.GetString(data, position, count);
str = str.Replace("\0", "").Replace("\r", "");
return str;
}
public static string GetString(byte[] data)
{
var str = Program.Encoding.GetString(data);
str = str.Replace("\0", "").Replace("\r", "");
return str;
}
public static List<ushort> EventsMap = new List<ushort>()
{
50001, 50002, 50003, 50004, 50005, 50006, 50007, 50008, 50009, 50010, 50011, 50012, 50013, 50014, 50015, 50016, 50017, 1508, 1518, 2014, 1507,
};
}
public class Copra_Times
{
public static DateTime now
{
get
{
return DateTime.Now;
}
}
public class Start
{
public static bool SnowBanshee
{
get
{
return ((now.Minute == 57 || now.Minute == 27) && now.Second == 30);
}
}
public static bool ThrillingSpook
{
get
{
return ((now.Minute == 5 || now.Minute == 35) && now.Second == 30);
}
}
public static bool NemesisTyrant
{
get
{
return ((now.Minute == 15 || now.Minute == 45) && now.Second == 30);
}
}
public static bool SkyWar
{
get
{
return (now.Hour == 1 || now.Hour == 13) && now.Minute == 10 && now.Second == 1;
}
}
public static bool TheTeam
{
get
{
return (now.Hour == 14 || now.Hour == 2) && now.Minute == 10 && now.Second == 1;
}
}
public static bool EliteGW
{
get
{
return (now.Hour == 17 && now.Minute == 0);
}
}
public static bool SkillTeam
{
get
{
return (now.Hour == 22) && now.Minute == 00;
}
}
public static bool TeamPK
{
get
{
return (now.Hour == 19) && now.Minute == 00;
}
}
public static bool CTF
{
get
{
return (now.Hour == 19 && now.Minute == 0) || (now.Hour == 12 && now.Minute == 0);
}
}
public static bool NobiltyWarPole
{
get
{
return (now.Hour == 22 && now.Minute == 30) || (now.Hour == 4 && now.Minute == 0);
}
}
public static bool GuildScoreWar
{
get
{
return (now.Hour == 12 && now.Minute == 0) || (now.Hour == 23 && now.Minute == 0);
}
}
public static bool ClassWar
{
get
{
return (now.Hour == 18 && now.Minute == 0) || (now.Hour == 8 && now.Minute == 0);
}
}
public static bool HeroOfGame
{
get
{
return now.Minute == 30;
}
}
public static bool FBSS
{
get
{
return now.Minute == 25;
}
}
public static bool FBSS2
{
get
{
return now.Minute >= 25 && now.Minute < 28;
}
}
public static int hunterthief = 42;
public static int dashbash = 46;
public static int chase = 45;
public static int dizzy = 49;
public static bool Nobilty
{
get
{
return now.Minute >= 20 && now.Minute <= 24;
}
}
}
public class End
{
public static bool FBSS
{
get
{
return now.Minute >= 28;
}
}
public static int hunterthief = 45;
public static int dashbash = 48;
public static bool Cyclone
{
get
{
return now.Minute == 29;
}
}
public static int chase = 45;
public static int dizzy2 = 50;
public static bool Nobilty
{
get
{
return now.Minute >= 25;
}
}
public static bool EliteGW
{
get
{
return now.Hour == 18;
}
}
}
}
public class rates
{
public static uint GuildWar;
public static uint ChangeName;
public static uint king;
public static uint prince;
public static uint EliteGw;
public static uint SkillTeam1;
public static uint SkillTeam2;
public static uint SkillTeam3;
public static uint SkillTeam4;
public static uint WeeklyPk;
public static uint topguild;
public static uint mrconquer;
public static uint uniquepk;
public static uint Portals;
public static uint heroofgame;
public static uint NobilityPrize;
public static uint lastman;
public static uint Daily;
public static uint fbss;
public static uint Poles;
public static uint Clanwarday;
public static uint soulp6;
public static uint soulp7;
public static uint changebody;
public static uint ref6;
public static uint Twar;
public static uint stwar;
public static uint ctf;
public static uint cps;
public static uint ClanwarCity;
public static uint ClassPk;
public static uint DeathMatchs;
public static uint lobby;
public static uint hunter;
public static uint thief;
public static uint housepromete;
public static uint itembox;
public static uint houseupgrade;
public static uint MonthlyPk;
public static uint TopSpouse;
public static uint Bosses;
public static uint Night;
public static uint Broadcast;
public static uint GuildFee;
public static uint TeleportFee;
public static uint DragonBall;
public static uint Meteor;
public static string VoteUrl;
public static string coder = "RaMbO";
public static uint Reincarnation;
public static uint donationrate;
public static string servername { get { return Constants.ServerName; } }
public static void Load(IniFile IniFile)
{
DragonBall = IniFile.ReadUInt32("Rates", "DragonBall");
Meteor = IniFile.ReadUInt32("Rates", "Meteor");
GuildWar = IniFile.ReadUInt32("Rates", "GuildWar");
EliteGw = IniFile.ReadUInt32("Rates", "questday");
Bosses = IniFile.ReadUInt32("Rates", "Bosses");
Broadcast = IniFile.ReadUInt32("Rates", "Broadcast");
TeleportFee = IniFile.ReadUInt32("Rates", "TeleportFee");
GuildFee = IniFile.ReadUInt32("Rates", "GuildFee");
king = IniFile.ReadUInt32("Rates", "king");
prince = IniFile.ReadUInt32("Rates", "prince");
Reincarnation = IniFile.ReadUInt32("Rates", "Reincarnation");
MonthlyPk = IniFile.ReadUInt32("Rates", "MonthlyPk");
TopSpouse = IniFile.ReadUInt32("Rates", "TopSpouse");
ChangeName = IniFile.ReadUInt32("Rates", "ChangeName");
housepromete = IniFile.ReadUInt32("Rates", "housepromete");
itembox = IniFile.ReadUInt32("Rates", "itembox");
Night = IniFile.ReadUInt32("Rates", "Night");
VoteUrl = IniFile.ReadString("Rates", "VoteUrl");
Portals = IniFile.ReadUInt32("Rates", "Portals");
coder = IniFile.ReadString("Rates", "coder");
SkillTeam1 = IniFile.ReadUInt32("Rates", "SkillTeam1");
SkillTeam2 = IniFile.ReadUInt32("Rates", "SkillTeam2");
SkillTeam3 = IniFile.ReadUInt32("Rates", "SkillTeam3");
SkillTeam4 = IniFile.ReadUInt32("Rates", "SkillTeam4");
soulp6 = IniFile.ReadUInt32("Rates", "soulp6");
soulp7 = IniFile.ReadUInt32("Rates", "soulp7");
ref6 = IniFile.ReadUInt32("Rates", "ref6");
changebody = IniFile.ReadUInt32("Rates", "changebody");
uniquepk = IniFile.ReadUInt32("Rates", "uniquepk");
WeeklyPk = IniFile.ReadUInt32("Rates", "WeeklyPk");
fbss = IniFile.ReadUInt32("Rates", "fbss");
Poles = IniFile.ReadUInt32("Rates", "Poles");
Clanwarday = IniFile.ReadUInt32("Rates", "Clanwarday");
lastman = IniFile.ReadUInt32("Rates", "lastman");
Daily = IniFile.ReadUInt32("Rates", "Daily");
topguild = IniFile.ReadUInt32("Rates", "topguild");
mrconquer = IniFile.ReadUInt32("Rates", "mrconquer");
NobilityPrize = IniFile.ReadUInt32("Rates", "NobilityPrize");
heroofgame = IniFile.ReadUInt32("Rates", "heroofgame");
Twar = IniFile.ReadUInt32("Rates", "Twar");
stwar = IniFile.ReadUInt32("Rates", "stwar");
ctf = IniFile.ReadUInt32("Rates", "ctf");
cps = IniFile.ReadUInt32("Rates", "cps");
ClanwarCity = IniFile.ReadUInt32("Rates", "ClanwarCity");
ClassPk = IniFile.ReadUInt32("Rates", "ClassPk");
DeathMatchs = IniFile.ReadUInt32("Rates", "DeathMatchs");
lobby = IniFile.ReadUInt32("Rates", "lobby");
hunter = IniFile.ReadUInt32("Rates", "hunter");
thief = IniFile.ReadUInt32("Rates", "thief");
donationrate = IniFile.ReadUInt32("Rates", "donationrate");
}
}
}
ملف باكتيتات البروجرام
private static void GameServer_OnClientReceive(byte[] buffer, int length, ClientWrapper obj)
{
if (obj.Connector == null)
{
obj.Disconnect();
}
else
{
GameState connector = obj.Connector as GameState;
if (connector.Exchange)
{
connector.Exchange = false;
connector.Action = (byte)1;
COServer.Network.Cryptography.GameCryptography gameCryptography = new COServer.Network.Cryptography.GameCryptography(Enc oding.Default.GetBytes(Constants.GameCryptographyK ey));
byte[] numArray = new byte[length];
Array.Copy((Array)buffer, (Array)numArray, length);
gameCryptography.Decrypt(numArray, length);
bool flag = false;
int offset = 0;
for (int x = 0; x < 80; x++)
{
if (BitConverter.ToInt32(numArray, x) == 128)
{
if (length >= 205)
{
offset = x;
flag = true;
connector.Cryptography.Decrypt(buffer, length - 40);
}
else
{
offset = x;
connector.Cryptography.Decrypt(buffer, length);
}
}
}
int int32 = BitConverter.ToInt32(buffer, offset);
int index1 = offset + 4;
if (int32 != 128)
{
connector.Disconnect(true);
}
else
{
byte[] bytes = new byte[128];
int index2 = 0;
while (index2 < int32)
{
bytes[index2] = buffer[index1];
++index2;
++index1;
}
string PublicKey = Encoding.Default.GetString(bytes);
connector.Cryptography = connector.DHKeyExchange.HandleClientKeyPacket(Publ icKey, connector.Cryptography);
if (!flag)
return;
byte[] buffer1 = new byte[40];
Buffer.BlockCopy((Array)buffer, length - 40, (Array)buffer1, 0, 40);
processData(buffer1, 40, connector);
}
}
else
processData(buffer, length, connector);
}
}
البروجرام بدون تعديل
using System;
using System.IO;
using System.Linq;
using System.Windows.Forms;
using SomailProject.Network;
using SomailProject.Database;
using SomailProject.Network.Sockets;
using SomailProject.Network.AuthPackets;
using SomailProject.Game;
using System.Collections.Generic;
using System.Runtime.InteropServices;
using System.Text;
using SomailProject.Network.GamePackets;
using SomailProject.Client;
using System.Diagnostics;
using System.Threading.Tasks;
using System.Threading;
using SomailProject;
using SomailProject.Network.GamePackets.Union;
using ProtoBuf;
using SomailProject.MaTrix;
using SomailProject.Game.MsgServer;
namespace SomailProject
{
class Program
{
public static void Main(string[] args)
{
AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(Application_ThreadE xception);
Time32 Start = Time32.Now;
RandomSeed = Convert.ToInt32(DateTime.Now.Ticks.ToString().Remo ve(DateTime.Now.Ticks.ToString().Length / 2));
Kernel.Random = new FastRandom(RandomSeed);
StartDate = DateTime.Now;
Console.Title = "Samuel-Dawod"; Console.BackgroundColor = ConsoleColor.Black;
Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine("_-_-_-_-_-_ ♥ Conquer Matrix ♥ _-_-_-_-_-_");
Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine("Load server configuration");
string ConfigFileName = "SomailProject.ini";
IniFile IniFile = new IniFile(ConfigFileName);
GameIP = IniFile.ReadString("configuration", "IP");
GamePort = IniFile.ReadUInt16("configuration", "GamePort");
AuthPort = new List<ushort>()
{
IniFile.ReadUInt16("configuration", "AuthPort"),
};
Constants.ServerName = IniFile.ReadString("configuration", "ServerName");
TestingMode = IniFile.ReadString("configuration", "TestMode", "0") == "1" ? true : false;
AllTest = IniFile.ReadString("configuration", "AllTest", "0") == "1" ? true : false;
rates.Load(IniFile);
Database.DataHolder.CreateConnection(
IniFile.ReadString("MySql", "Host", "localhost"),
IniFile.ReadString("MySql", "Username", "root"),
IniFile.ReadString("MySql", "Password", "az4des123"),
IniFile.ReadString("MySql", "Database", "cq"));
PrestigeStars = 54;
EntityUID = new Counter(0);
bool x = false;
using (MySqlCommand cmd = new MySqlCommand(MySqlCommandType.SELECT))
{
cmd.Select("configuration").Where("Server", Constants.ServerName);
using (MySqlReader r = new MySqlReader(cmd))
{
if (r.Read())
{
EntityUID = new Counter(r.ReadUInt32("EntityID"));
Game.ConquerStructures.Society.Guild.GuildCounter = new SomailProject.Counter(r.ReadUInt32("GuildID"));
ConquerItem.ItemUID = new Counter(r.ReadUInt32("ItemUID"));
Constants.ExtraExperienceRate = r.ReadUInt32("ExperienceRate");
Constants.ExtraSpellRate = r.ReadUInt32("ProficiencyExperienceRate");
Constants.ExtraProficiencyRate = r.ReadUInt32("SpellExperienceRate");
Constants.MoneyDropRate = r.ReadUInt32("MoneyDropRate");
Constants.MoneyDropMultiple = r.ReadUInt32("MoneyDropMultiple");
if (r.ReadByte("LastDailySignReset") != DateTime.Now.Month) x = true;
Constants.ConquerPointsDropRate = r.ReadUInt32("ConquerPointsDropRate");
Constants.ConquerPointsDropMultiple = r.ReadUInt32("ConquerPointsDropMultiple");
Constants.ItemDropRate = r.ReadUInt32("ItemDropRate");
Constants.ItemDropQualityRates = r.ReadString("ItemDropQualityString").Split('~');
Constants.WebAccExt = r.ReadString("AccountWebExt");
Constants.WebVoteExt = r.ReadString("VoteWebExt");
Constants.WebDonateExt = r.ReadString("DonateWebExt");
Constants.ServerWebsite = r.ReadString("ServerWebsite");
Constants.ServerGMPass = r.ReadString("ServerGMPass");
PlayerCap = r.ReadInt32("PlayerCap");
Union.UnionCounter = new Counter(r.ReadUInt32("UnionID"));
Database.EntityVariableTable.Load(0, out Vars);
VoteSystem.Count = r.ReadInt32("VotesCount");
}
}
}
if (EntityUID.Now == 0)
{
Console.Clear();
Console.WriteLine("Database error. Please check your MySQL. Server will now close.");
Console.ReadLine();
return;
}
{
Console.WriteLine("Initializing Database.");
Console.WriteLine("Loading The Hard Things");
Database.ConquerItemInformation.Load();
Database.ConquerItemTable.ClearNulledItems();
InnerPowerTable.LoadDBInformation();
#region WardRobe
WardRobe.Load_coatstorage_type();
WardRobe.Load_title_type();
#endregion
InnerPowerTable.Load();
PerfectionTable.LoadItemRefineAttribute();
if (x) MsgSignIn.Reset();
PerfectionTable.LoadItemRefineEffect();
PerfectionTable.LoadItemRefineEffectEX();
Database.Flowers.LoadFlowers();
Database.SignInTable.Load();
Database.MonsterInformation.Load();
Database.MapsTable.Load();
SomailProject.MaTrix.SoulProtection.Load();
World = new World();
World.Init();
Map.CreateTimerFactories();
Database.SignInTable.Load();
Database.DMaps.LoadMapPaths();
Database.DMaps.LoadMap(700);
DMaps.LoadMap(2068);
Database.DMaps.LoadMap(3868);
Database.DMaps.LoadMap(3935);
Database.DMaps.LoadMap(10137);
Copra.QuestInfo.Load();
Database.VipTable.LoadAllVips();
Database.SpellTable.Load();
Database.ShopFile.Load();
Database.HonorShop.Load();
Database.RacePointShop.Load();
VoteSystem.Load();
Database.ChampionShop.Load();
new MsgUserAbilityScore().LoadWallOfPrestige();
PrestigeRank.LoadRanking();
Console.WriteLine("WallOfPrestigeRank Initilizied");
Database.EShopFile.Load();
Database.EShopV2File.Load();
Database.AddingInformationTable.Load();
Database.LotteryTable.Load();
Database.vipLottery.Load();
Copra.Roulette.Database.Roulettes.Load();
Copra.Way2Heroes.Load();
Database.ConquerItemTable.ClearNulledItems();
Refinery.Load();
Values = new Client.GameState[0];
new Game.Map(1002, Database.DMaps.MapPaths[1002]);
new Game.Map(1038, Database.DMaps.MapPaths[1038]);
new Game.Map(2071, Database.DMaps.MapPaths[2071]);
new Game.Map(2057, Database.DMaps.MapPaths[2057]);
new Game.Map(4000, Database.DMaps.MapPaths[4000]);
new Game.Map(4003, Database.DMaps.MapPaths[4003]);
new Game.Map(4006, Database.DMaps.MapPaths[4006]);
new Game.Map(4008, Database.DMaps.MapPaths[4008]);
new Game.Map(4020, Database.DMaps.MapPaths[4020]);
if (DMaps.LoadMap(1038))
Game.GuildWar.Initiate();
if (DMaps.LoadMap(10380))
Game.SuperGuildWar.Initiate();
new Game.Map(1509, Database.DMaps.MapPaths[1509]);
new Game.Map(10002, 2021, Database.DMaps.MapPaths[2021]);
new Game.Map(8883, 1004, Database.DMaps.MapPaths[1004]);
Constants.PKFreeMaps.Add(8883);
Game.EliteGuildWar.EliteGwint();
Database.DataHolder.ReadStats();
Database.IPBan.Load();
JiangHuTable.LoadStatus();
JiangHuTable.LoadRanks();
Database.NobilityTable.Load();
Database.ArenaTable.Load();
Database.TeamArenaTable.Load();
Database.GuildTable.Load();
UnionTable.Load();
AuctionBase.Load();
Database.ChiTable.LoadAllChi();
StorageItem.Load();
Clan.LoadClans();
Kernel.Magic.Load();
TutorInfo.Load();
Database.Disdain.Load();
Tranformation.Int();
Kernel.AtributeStatus.Load();
AtributesStatus.LoadExpInfo();
RebornInfo = new RebornInfomations();
RebornInfo.Load();
Game.Screen.CreateTimerFactories();
new MsgEquipRefineRank().UpdateRanking();
Database.ConquerItemTable.ClearNulledItems();
Network.Cryptography.AuthCryptography.PrepareAuthC ryptography();
World.CreateTournaments();
new MySqlCommand(MySqlCommandType.Update).Update("entities").Set("Online", 0).Execute();
Console.WriteLine("Initializing Sockets.");
AuthServer = new ServerSocket[AuthPort.Count];
for (int i = 0; i < AuthServer.Length; i++)
{
AuthServer[i] = new ServerSocket();
AuthServer[i].OnClientConnect += AuthServer_OnClientConnect;
AuthServer[i].OnClientReceive += AuthServer_OnClientReceive;
AuthServer[i].OnClientDisconnect += AuthServer_OnClientDisconnect;
AuthServer[i].Enable(AuthPort[i], "0.0.0.0");
Console.WriteLine("Auth " + i + " server online.");
}
{
GameServer = new ServerSocket();
GameServer.OnClientConnect += GameServer_OnClientConnect;
GameServer.OnClientReceive += GameServer_OnClientReceive;
GameServer.OnClientDisconnect += GameServer_OnClientDisconnect;
GameServer.Enable(GamePort, "0.0.0.0");
Console.WriteLine("Game server online.");
Console.WriteLine("Web server online.");
Copra.Pet.CreateTimerFactories();
AI.CreateTimerFactories();
var client = new GameState(null);
client.Entity = new Entity(EntityFlag.Monster, false);
client.Entity.MapID = 1002;
Npcs npc = new Npcs(client);
var req = new NpcRequest();
req.Deserialize(new byte[28]);
Npcs.GetDialog(req, client);
client = null;
SomailProject.Booths.Load();
}
Console.WriteLine("Server loaded in " + (Time32.Now - Start) + " milliseconds.");
Console.WriteLine("[********************** ♥ [Samuel.Dawod] ♥ **********************]");
SomailHandler += SomailConsole_CloseEvent;
SetConsoleCtrlHandler(SomailHandler, true);
GC.Collect();
WorkConsole();
}
}
public static int PrestigeStars = 0;
public static RebornInfomations RebornInfo;
public static Encoding Encoding = ASCIIEncoding.Default;
[DllImport("user32.dll")]
public static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
[DllImport("user32.dll")]
public static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);
public static int PlayerCap = 1000;
public static bool ALEXPC = false;
public static bool NemesisTyrantSpanwed = false;
public static long MaxOn = 0;
public static long MaxEntitys = 0;
public static ServerSocket[] AuthServer;
public static int CpuUse = 0;
public static ServerSocket GameServer;
public static Counter EntityUID;
public static string GameIP;
public static bool SpookAlive = false;
public static DayOfWeek Today;
public static ushort GamePort;
public static List<ushort> AuthPort;
public static DateTime StartDate;
public static bool reseted = false;
public static uint ScreenColor = 0;
public static DateTime RestartDate = DateTime.Now.AddHours(24);
public static bool restarted = false;
public static bool WarEnd = false;
public static bool uniquepk = false;
public static uint mess = 0;
public static World World;
public static Client.GameState[] GamePool = new Client.GameState[0];
public static Client.GameState[] Values = new Client.GameState[0];
public static VariableVault Vars;
public static long WeatherType = 0L;
public static bool TestingMode = false;
public static bool AllTest = false;
public static bool SnowBa = true;
public static bool Nemesis = true;
public static bool ThrillingSpook = true;
public static uint PhysicalDamage = 100;// + 150%
public static bool SwordMaster = true;
public static bool TeratoDragon = true;
public static bool SnowSoul = true;
public static int RandomSeed = 0;
public static short GetDistance(ushort X, ushort Y, ushort X2, ushort Y2)
{
return (short)Math.Sqrt((X - X2) * (X - X2) + (Y - Y2) * (Y - Y2));
}
#region Translate
public static void SaveTranslate()
{
var file = Environment.CurrentDirectory + "Translate.txt";
if (File.Exists(file))
File.Delete(file);
StreamWriter writer = new StreamWriter(File.Create(file), Encoding);
writer.AutoFlush = true;
foreach (var item in Kernel.Translateed)
writer.WriteLine(item.Key + "@@" + item.Value);
writer.Close();
}
public static void LoadTranslate()
{
var file = Environment.CurrentDirectory + "Translate.txt";
if (File.Exists(file))
{
string[] text = File.ReadAllLines(file, Encoding);
for (int x = 0; x < text.Length; x++)
{
string line = text[x];
string[] split = line.Split(new string[] { "@@" }, StringSplitOptions.RemoveEmptyEntries);
if (split.Length < 1)
continue;
var key = split[0];
if (split.Length < 2)
continue;
var value = split[1];
if (!Kernel.Translateed.ContainsKey(key))
Kernel.Translateed.Add(key, value);
}
}
}
#endregion
#region VersionChecker
//if (VersionChecker.IsValidVersion() == false)
//{
// MessageBox.Show("Your Trial Version has expired, Please get the Full version |Contact 011 42 72 19 32");
// SomailProject.Console.WriteLine("Enter Password:");
// Program.Password = Console.ReadLine();
// if (ClassExtensions.Get64HashCode(Program.Password) != 4586181316755855993)
// {
// MessageBox.Show("Your Trial Version has expired, Please get the Full version |Contact 011 42 72 19 32");
// SomailProject.Console.WriteLine("Thx. For Waiting...!");
// SomailProject.Console.WriteLine("Wrong Password!");
// SomailProject.Console.WriteLine("If Want To make this Source Work");
// SomailProject.Console.WriteLine("You need to put the right Password. !");
// SomailProject.Console.ReadLine();
// MessageBox.Show("You Will Get Hacked. | Contact 011 42 72 19 32");
// System.Console.ForegroundColor = System.ConsoleColor.DarkGreen;
// System.Console.WindowLeft = System.Console.WindowTop = 0;
// System.Console.WindowHeight = System.Console.BufferHeight = System.Console.LargestWindowHeight;
// System.Console.WindowWidth = System.Console.BufferWidth = System.Console.LargestWindowWidth;
// System.Console.CursorVisible = false;
// int width, height;
// int[] y;
// int[] l;
// Initialize(out width, out height, out y, out l);
// int ms;
// while (true)
// {
// DateTime t1 = DateTime.Now;
// CopraStep(width, height, y, l);
// ms = 10 - (int)((TimeSpan)(DateTime.Now - t1)).TotalMilliseconds;
// if (ms > 0)
// System.Threading.Thread.Sleep(ms);
// if (System.Console.KeyAvailable)
// if (System.Console.ReadKey().Key == ConsoleKey.F5)
// Initialize(out width, out height, out y, out l);
// }
// // Environment.Exit(0);
// }
// elsez
// {
// VersionChecker.TrialEnd();
// MessageBox.Show("Your Trial Version has Renewed, To get the Full version");
// }
// return;
//}
//else
//{
// VersionChecker chk = new VersionChecker();
//}
#endregion VersionChecker
#region Closing Events
private static bool SomailConsole_CloseEvent(CtrlType sig)
{
Save();
return true;
}
private static Native.ConsoleEventHandler SomailHandler;
[DllImport("Kernel32")]
private static extern bool SetConsoleCtrlHandler(Native.ConsoleEventHandler handler, bool add);
private delegate bool EventHandler(CtrlType sig);
#endregion
public static bool Save(bool Exit = false)
{
try
{
using (var conn = Database.DataHolder.MySqlConnection)
{
conn.Open();
foreach (Client.GameState client in Program.Values)
{
SaveTranslate();
Database.JiangHuTable.FullSave(client);
Database.EntityTable.SaveEntity(client);
Database.SkillTable.SaveClientSpells(client);
Database.SkillTable.SaveProficiencies(client);
Database.ArenaTable.SaveArenaStatistics(client.Are naStatistic);
Database.TeamArenaTable.SaveArenaStatistics(client .TeamArenaStatistic);
client.WardRobe.Save();
}
}
Database.InnerPowerTable.Save();
Database.Flowers.SaveFlowers();
AuctionBase.Save();
Game.ClanWarArena.Save();
using (MySqlCommand cmd = new MySqlCommand(MySqlCommandType.SELECT).Select("configuration").Where("Server", Constants.ServerName))
{
using (MySqlReader r = new MySqlReader(cmd))
{
if (r.Read())
{
new Database.MySqlCommand(Database.MySqlCommandType.Up date).Update("configuration").Set("EntityID", EntityUID.Now).Set("ServerKingdom", Kernel.ServerKingdom).Set("GuildID", Game.ConquerStructures.Society.Guild.GuildCounter. Now).Where("Server", Constants.ServerName).Execute();
if (r.ReadByte("LastDailySignReset") != DateTime.Now.Month) MsgSignIn.Reset();
}
}
}
using (var cmd = new MySqlCommand(MySqlCommandType.Update).Update("configuration"))
cmd.Set("LastDailySignReset", DateTime.Now.Month).Execute();
Console.WriteLine("Saving cmd Done.");
//if (Exit)
// Environment.Exit(0);
}
catch (Exception e)
{
Console.WriteLine(e.ToString());
return false;
}
return true;
}
#region Exceptions & Logs
public static void AddVendorLog(String vendor, string buying, string moneyamount, ConquerItem Item)
{
String folderN = DateTime.Now.Year + "-" + DateTime.Now.Month,
Path = "gmlogs\\VendorLogs\\",
NewPath = System.IO.Path.Combine(Path, folderN);
if (!File.Exists(NewPath + folderN))
{
System.IO.Directory.CreateDirectory(System.IO.Path .Combine(Path, folderN));
}
if (!File.Exists(NewPath + "\\" + DateTime.Now.Day + ".txt"))
{
using (System.IO.FileStream fs = System.IO.File.Create(NewPath + "\\" + DateTime.Now.Day + ".txt"))
{
fs.Close();
}
}
using (System.IO.StreamWriter file = new System.IO.StreamWriter(NewPath + "\\" + DateTime.Now.Day + ".txt", true))
{
file.WriteLine("------------------------------------------------------------------------------------");
file.WriteLine("{0} HAS BOUGHT AN ITEM : {2} FROM {1} SHOP - for {3}", vendor, buying, Item.ToLog(), moneyamount);
file.WriteLine("------------------------------------------------------------------------------------");
file.Close();
}
}
public static void AddGMCommand(string gm, string commandStr)
{
String folderN = DateTime.Now.Year + "-" + DateTime.Now.Month,
Path = "gmlogs\\GMCommandsLog\\",
NewPath = System.IO.Path.Combine(Path, folderN);
if (!File.Exists(NewPath + folderN))
{
System.IO.Directory.CreateDirectory(System.IO.Path .Combine(Path, folderN));
}
if (!File.Exists(NewPath + "\\" + DateTime.Now.Day + ".txt"))
{
using (System.IO.FileStream fs = System.IO.File.Create(NewPath + "\\" + DateTime.Now.Day + ".txt"))
{
fs.Close();
}
}
using (System.IO.StreamWriter file = new System.IO.StreamWriter(NewPath + "\\" + DateTime.Now.Day + ".txt", true))
{
file.WriteLine(gm + commandStr);
file.Close();
}
}
public static void RemoveCps(string text)
{
try
{
text = "[" + DateTime.Now.ToString("HH:mm:ss") + "]" + text;
String folderN = DateTime.Now.Year + "-" + DateTime.Now.Month,
Path = "gmlogs\\RemoveCps\\",
NewPath = System.IO.Path.Combine(Path, folderN);
if (!File.Exists(NewPath + folderN))
{
System.IO.Directory.CreateDirectory(System.IO.Path .Combine(Path, folderN));
}
if (!File.Exists(NewPath + "\\" + DateTime.Now.Day + ".txt"))
{
using (System.IO.FileStream fs = System.IO.File.Create(NewPath + "\\" + DateTime.Now.Day + ".txt"))
{
System.IO.StreamWriter file = new System.IO.StreamWriter(NewPath + "\\" + DateTime.Now.Day + ".txt", true);
fs.Close();
}
}
using (System.IO.StreamWriter file = new System.IO.StreamWriter(NewPath + "\\" + DateTime.Now.Day + ".txt", true))
{
file.WriteLine(text);
file.Close();
}
}
catch (Exception ex) { Console.WriteLine(ex); }
}
public static void AddCpsWin(string text)
{
try
{
text = "[" + DateTime.Now.ToString("HH:mm:ss") + "]" + text;
String folderN = DateTime.Now.Year + "-" + DateTime.Now.Month,
Path = "gmlogs\\AddWinCps\\",
NewPath = System.IO.Path.Combine(Path, folderN);
if (!File.Exists(NewPath + folderN))
{
System.IO.Directory.CreateDirectory(System.IO.Path .Combine(Path, folderN));
}
if (!File.Exists(NewPath + "\\" + DateTime.Now.Day + ".txt"))
{
using (System.IO.FileStream fs = System.IO.File.Create(NewPath + "\\" + DateTime.Now.Day + ".txt"))
{
fs.Close();
}
}
using (System.IO.StreamWriter file = new System.IO.StreamWriter(NewPath + "\\" + DateTime.Now.Day + ".txt", true))
{
file.WriteLine(text);
file.Close();
}
}
catch (Exception ex) { Console.WriteLine(ex); }
}
public static void AddDropLog(String Name, ConquerItem Item)
{
String folderN = DateTime.Now.Year + "-" + DateTime.Now.Month,
Path = "gmlogs\\droplogs\\",
NewPath = System.IO.Path.Combine(Path, folderN);
if (!File.Exists(NewPath + folderN))
{
System.IO.Directory.CreateDirectory(System.IO.Path .Combine(Path, folderN));
}
string path = NewPath + "\\" + DateTime.Now.Day + ".txt";
if (!File.Exists(path)) File.AppendAllText(path, "");
string text = "------------------------------------------------------------------------------------"
+ Environment.NewLine + string.Format("Entity {0} HAS DROPPED AN ITEM : {1} -", Name, Item.ToLog())
+ Environment.NewLine + "------------------------------------------------------------------------------------";
File.AppendAllText(path, text);
}
public static void AddTradeLog(Game.ConquerStructures.Trade first, String firstN, Game.ConquerStructures.Trade second, String secondN)
{
String folderN = DateTime.Now.Year + "-" + DateTime.Now.Month,
Path = "database\\Security\\Trade\\",
NewPath = System.IO.Path.Combine(Path, folderN);
if (!File.Exists(NewPath + folderN))
{
System.IO.Directory.CreateDirectory(System.IO.Path .Combine(Path, folderN));
}
if (!File.Exists(NewPath + "\\" + DateTime.Now.Day + ".txt"))
{
using (System.IO.FileStream fs = System.IO.File.Create(NewPath + "\\" + DateTime.Now.Day + ".txt"))
{
fs.Close();
}
}
using (System.IO.StreamWriter file = new System.IO.StreamWriter(NewPath + "\\" + DateTime.Now.Day + ".txt", true))
{
file.WriteLine("************************************************** **********************************");
file.WriteLine("First Person TradeLog ({0}) -", firstN);
file.WriteLine("Gold Traded: " + first.Money);
file.WriteLine("Conquer Points Traded: " + first.ConquerPoints);
for (int i = 0; i < first.Items.Count; i++)
{
file.WriteLine("------------------------------------------------------------------------------------");
file.WriteLine("Item : " + first.Items[i].ToLog());
file.WriteLine("------------------------------------------------------------------------------------");
}
file.WriteLine("Second Person TradeLog ({0}) -", secondN);
file.WriteLine("Gold Traded: " + second.Money);
file.WriteLine("Conquer Points Traded: " + second.ConquerPoints);
for (int i = 0; i < second.Items.Count; i++)
{
file.WriteLine("------------------------------------------------------------------------------------");
file.WriteLine("Item : " + second.Items[i].ToLog());
file.WriteLine("------------------------------------------------------------------------------------");
}
file.WriteLine("************************************************** **********************************");
}
}
public static void AddMobLog(string War, string name, uint CPs = 0, uint item = 0)
{
String folderN = DateTime.Now.Year + "-" + DateTime.Now.Month,
Path = "gmlogs\\MobLogs\\",
NewPath = System.IO.Path.Combine(Path, folderN);
if (!File.Exists(NewPath + folderN))
{
System.IO.Directory.CreateDirectory(System.IO.Path .Combine(Path, folderN));
}
if (!File.Exists(NewPath + "\\" + DateTime.Now.Day + ".txt"))
{
using (System.IO.FileStream fs = System.IO.File.Create(NewPath + "\\" + DateTime.Now.Day + ".txt"))
{
fs.Close();
}
}
using (System.IO.StreamWriter file = new System.IO.StreamWriter(NewPath + "\\" + DateTime.Now.Day + ".txt", true))
{
if (CPs != 0)
file.WriteLine(name + " got " + CPs + " CPs from the [" + War + "] as prize at " + DateTime.Now.Hour + ":" + DateTime.Now.Minute + ":" + DateTime.Now.Second);
else
file.WriteLine(name + " got " + item + " Item from the [" + War + "] as prize at " + DateTime.Now.Hour + ":" + DateTime.Now.Minute + ":" + DateTime.Now.Second);
}
}
public static void AddWarLog(string War, string CPs, string name)
{
String folderN = DateTime.Now.Year + "-" + DateTime.Now.Month,
Path = "gmlogs\\Warlogs\\",
NewPath = System.IO.Path.Combine(Path, folderN);
if (!File.Exists(NewPath + folderN))
{
System.IO.Directory.CreateDirectory(System.IO.Path .Combine(Path, folderN));
}
if (!File.Exists(NewPath + "\\" + DateTime.Now.Day + ".txt"))
{
using (System.IO.FileStream fs = System.IO.File.Create(NewPath + "\\" + DateTime.Now.Day + ".txt"))
{
fs.Close();
}
}
using (System.IO.StreamWriter file = new System.IO.StreamWriter(NewPath + "\\" + DateTime.Now.Day + ".txt", true))
{
file.WriteLine(name + " got " + CPs + " CPs from the [" + War + "] as prize at " + DateTime.Now.Hour + ":" + DateTime.Now.Minute + ":" + DateTime.Now.Second);
}
}
static void Application_ThreadException(object sender, UnhandledExceptionEventArgs e)
{
SaveException(e.ExceptionObject as Exception);
}
public static void SaveException(Exception e)
{
Console.WriteLine(e);
var dt = DateTime.Now;
string date = dt.Month + "-" + dt.Day + "//";
if (!Directory.Exists(Application.StartupPath + Constants.UnhandledExceptionsPath))
Directory.CreateDirectory(Application.StartupPath + "\\" + Constants.UnhandledExceptionsPath);
if (!Directory.Exists(Application.StartupPath + "\\" + Constants.UnhandledExceptionsPath + date))
Directory.CreateDirectory(Application.StartupPath + "\\" + Constants.UnhandledExceptionsPath + date);
if (!Directory.Exists(Application.StartupPath + "\\" + Constants.UnhandledExceptionsPath + date + e.TargetSite.Name))
Directory.CreateDirectory(Application.StartupPath + "\\" + Constants.UnhandledExceptionsPath + date + e.TargetSite.Name);
string fullPath = Application.StartupPath + "\\" + Constants.UnhandledExceptionsPath + date + e.TargetSite.Name + "\\";
string date2 = dt.Hour + "-" + dt.Minute;
List<string> Lines = new List<string>();
Lines.Add("----Exception message----");
Lines.Add(e.Message);
Lines.Add("----End of exception message----\r\n");
Lines.Add("----Stack trace----");
Lines.Add(e.StackTrace);
Lines.Add("----End of stack trace----\r\n");
//Lines.Add("----Data from exception----");
//foreach (KeyValuePair<object, object> data in e.Data)
// Lines.Add(data.Key.ToString() + "->" + data.Value.ToString());
//Lines.Add("----End of data from exception----\r\n");
File.WriteAllLines(fullPath + date2 + ".txt", Lines.ToArray());
}
#endregion
private static void WorkConsole()
{
while (true)
{
try
{
CommandsAI(Console.ReadLine());
}
catch (Exception e) { Console.WriteLine(e); }
}
}
public static DateTime LastRandomReset = DateTime.Now;
public static Network.GamePackets.BlackSpotPacket BlackSpotPacket = new Network.GamePackets.BlackSpotPacket();
public static bool MyPC = true;
public static void CommandsAI(string command)
{
try
{
if (command == null)
return;
string[] data = command.Split(' ');
switch (data[0])
{
case "@testmode":
{
if (TestingMode)
{
TestingMode = false;
Console.WriteLine("Test Mode Off");
}
else
{
TestingMode = true;
Kernel.SendWorldMessage(new Network.GamePackets.Message(string.Concat(new object[] { "Server will exit for 5 min to fix some bugs, please be paitent" }), System.Drawing.Color.Black, 0x7db), Program.Values);
CommandsAI("@save");
new Database.MySqlCommand(Database.MySqlCommandType.Up date).Update("configuration").Set("ItemUID", ConquerItem.ItemUID.Now).Where("Server", Constants.ServerName).Execute();
Database.EntityVariableTable.Save(0, Vars);
var WC = Program.Values.ToArray();
foreach (Client.GameState client in WC)
{
if (client.Account.State != AccountTable.AccountState.ProjectManager)
{
client.Send("Server will exit for 5 min to fix some bugs, please be paitent !");
client.Disconnect();
}
}
if (GuildWar.IsWar)
GuildWar.End();
new Database.MySqlCommand(Database.MySqlCommandType.Up date).Update("configuration").Set("ItemUID", ConquerItem.ItemUID.Now).Where("Server", Constants.ServerName).Execute();
Console.WriteLine("Test Mode On");
}
break;
}
case "@clear":
{
Console.Clear();
SomailProject.Console.WriteLine("Consle and program Cleared ");
break;
}
case "@sh":
{
Console.WriteLine(Program.SnowBa);
break;
}
case "@sh1":
{
Program.SnowBa = true;
break;
}
case "@sh2":
{
Program.SnowBa = false;
break;
}
case "@Copra":
case "@bigbos":
SomailProject.Console.WriteLine("Server will restart after 10 minutes.");
Kernel.SendWorldMessage(new SomailProject.Network.GamePackets.Message("The server will be brought down for maintenance in 5 minute, Please exit the game now.", System.Drawing.Color.Orange, 0x7db), Program.Values);
System.Threading.Thread.Sleep(0x7530);
Kernel.SendWorldMessage(new SomailProject.Network.GamePackets.Message("The server will be brought down for maintenance in 4 minute 30 second, Please exit the game now.", System.Drawing.Color.Orange, 0x7db), Program.Values);
System.Threading.Thread.Sleep(0x7530);
Kernel.SendWorldMessage(new SomailProject.Network.GamePackets.Message("The server will be brought down for maintenance in 4 minute, Please exit the game now.", System.Drawing.Color.Orange, 0x7db), Program.Values);
System.Threading.Thread.Sleep(0x7530);
Kernel.SendWorldMessage(new SomailProject.Network.GamePackets.Message("The server will be brought down for maintenance in 3 minute 30 second, Please exit the game now.", System.Drawing.Color.Orange, 0x7db), Program.Values);
System.Threading.Thread.Sleep(0x7530);
Kernel.SendWorldMessage(new SomailProject.Network.GamePackets.Message("The server will be brought down for maintenance in 3 minute, Please exit the game now.", System.Drawing.Color.Orange, 0x7db), Program.Values);
System.Threading.Thread.Sleep(0x7530);
Kernel.SendWorldMessage(new SomailProject.Network.GamePackets.Message("The server will be brought down for maintenance in 2 minute 30 second, Please exit the game now.", System.Drawing.Color.Orange, 0x7db), Program.Values);
System.Threading.Thread.Sleep(0x7530);
Kernel.SendWorldMessage(new SomailProject.Network.GamePackets.Message("The server will be brought down for maintenance in 2 minute, Please exit the game now.", System.Drawing.Color.Orange, 0x7db), Program.Values);
System.Threading.Thread.Sleep(0x7530);
Kernel.SendWorldMessage(new SomailProject.Network.GamePackets.Message("The server will be brought down for maintenance in 1 minute 30 second, Please exit the game now.", System.Drawing.Color.Orange, 0x7db), Program.Values);
System.Threading.Thread.Sleep(0x7530);
Kernel.SendWorldMessage(new SomailProject.Network.GamePackets.Message("The server will be brought down for maintenance in 1 minute, Please exit the game now.", System.Drawing.Color.Orange, 0x7db), Program.Values);
System.Threading.Thread.Sleep(0x7530);
Kernel.SendWorldMessage(new SomailProject.Network.GamePackets.Message("The server will be brought down for maintenance in 30 second, Please exit the game now.", System.Drawing.Color.Orange, 0x7db), Program.Values);
SomailProject.Console.WriteLine("Server will exit after 1 minute.");
CommandsAI("@save");
System.Threading.Thread.Sleep(0x7530);
Kernel.SendWorldMessage(new SomailProject.Network.GamePackets.Message("The Server restarted, Please log in after 5 minutes ", System.Drawing.Color.Orange, 0x7db), Program.Values);
try
{
CommandsAI("@restart");
}
catch
{
SomailProject.Console.WriteLine("Server cannot exit");
}
break;
case "@flushbans":
{
Database.IPBan.Load();
break;
}
case "@alivetime":
{
DateTime now = DateTime.Now;
TimeSpan t2 = new TimeSpan(StartDate.ToBinary());
TimeSpan t1 = new TimeSpan(now.ToBinary());
Console.WriteLine("The server has been online " + (int)(t1.TotalHours - t2.TotalHours) + " hours, " + (int)((t1.TotalMinutes - t2.TotalMinutes) % 1) + " minutes.");
break;
}
case "@online":
{
Console.WriteLine("Online Entitys count: " + Kernel.GamePool.Count);
string line = "";
foreach (Client.GameState pClient in Program.Values)
line += pClient.Entity.Name + ",";
if (line != "")
{
line = line.Remove(line.Length - 1);
Console.WriteLine("Entitys: " + line);
}
break;
}
case "@memoryusage":
{
var proc = System.Diagnostics.Process.GetCurrentProcess();
Console.WriteLine("Thread count: " + proc.Threads.Count);
Console.WriteLine("Memory set(MB): " + ((double)((double)proc.WorkingSet64 / 1024)) / 1024);
proc.Close();
break;
}
case "@save":
{
Save();
}
break;
case "@PlayerCap":
{
try
{
PlayerCap = int.Parse(data[1]);
}
catch
{
}
break;
}
case "@skill":
{
Game.Features.Tournaments.SkillPk.SkillTournament. Open();
foreach (var clien in Kernel.GamePool.Values)
{
if (clien.Team == null)
clien.Team = new Game.ConquerStructures.Team(clien);
Game.Features.Tournaments.SkillPk.SkillTournament. Join(clien, 3);
}
break;
}
case "@team":
{
Game.Features.Tournaments.TeamPk.TeamTournament.Op en();
foreach (var clien in Kernel.GamePool.Values)
{
if (clien.Team == null)
clien.Team = new Game.ConquerStructures.Team(clien);
Game.Features.Tournaments.TeamPk.TeamTournament.Jo in(clien, 3);
}
break;
}
case "@exit":
{
Program.Save(true);
CommandsAI("@save");
GameServer.Disable();
for (int i = 0; i < AuthServer.Length; i++)
{
AuthServer[i].Disable();
}
new Database.MySqlCommand(Database.MySqlCommandType.Up date).Update("configuration").Set("ItemUID", ConquerItem.ItemUID.Now).Where("Server", Constants.ServerName).Execute();
Database.EntityVariableTable.Save(0, Vars);
var WC = Program.Values.ToArray();
Parallel.ForEach(Program.Values, client =>
{
client.Send(" Server will exit for 5 min to Solve The Problem, please be paitent ");
client.Disconnect();
});
Kernel.SendWorldMessage(new Network.GamePackets.Message(string.Concat(new object[] { " Server will exit for 5 min to Solve The Problem, please be paitent " }), System.Drawing.Color.Black, 0x7db), Program.Values);
if (GuildWar.IsWar)
GuildWar.End();
new Database.MySqlCommand(Database.MySqlCommandType.Up date).Update("configuration").Set("ItemUID", ConquerItem.ItemUID.Now).Where("Server", Constants.ServerName).Execute();
Environment.Exit(0);
}
break;
case "serverpass":
{
using (MySqlCommand cmd = new MySqlCommand(MySqlCommandType.SELECT))
{
cmd.Select("configuration").Where("Server", Constants.ServerName);
using (MySqlReader r = new MySqlReader(cmd))
{
if (r.Read())
Constants.ServerGMPass = r.ReadString("ServerGMPass");
}
}
break;
}
case "@pressure":
{
Console.WriteLine("Genr: " + World.GenericThreadPool.ToString());
Console.WriteLine("Send: " + World.SendPool.ToString());
Console.WriteLine("Recv: " + World.ReceivePool.ToString());
break;
}
case "@restart":
{
try
{
Program.Save();
Kernel.SendWorldMessage(new Network.GamePackets.Message(string.Concat(new object[] { "Server Will Be Restart Now !" }), System.Drawing.Color.Black, 0x7db), Program.Values);
new Database.MySqlCommand(Database.MySqlCommandType.Up date).Update("configuration").Set("ItemUID", ConquerItem.ItemUID.Now).Where("Server", Constants.ServerName).Execute();
var WC = Program.Values.ToArray();
foreach (Client.GameState client in WC)
{
client.Send(" Server Will Be Restart Now ");
client.Disconnect();
}
GameServer.Disable();
for (int i = 0; i < AuthServer.Length; i++)
{
AuthServer[i].Disable();
}
if (GuildWar.IsWar)
GuildWar.End();
new Database.MySqlCommand(Database.MySqlCommandType.Up date).Update("configuration").Set("ItemUID", ConquerItem.ItemUID.Now).Where("Server", Constants.ServerName).Execute();
Application.Restart();
Environment.Exit(0);
}
catch (Exception e)
{
Console.WriteLine(e);
Console.ReadLine();
}
}
break;
case "@account":
{
Database.AccountTable account = new AccountTable(data[1]);
account.Password = data[2];
account.State = AccountTable.AccountState.Entity;
account.Save();
}
break;
case "@process":
{
HandleClipboardPacket(command);
break;
}
}
}
catch (Exception e)
{
Console.WriteLine(e.ToString());
}
}
public static void WriteLine(string Line)
{
try
{
Console.WriteLine(Line);
}
catch { }
}
public static void HandleClipboardPacket(string cmd)
{
string[] pData = cmd.Split(' ');
long off = 0, type = 0, val = 0;
if (pData.Length > 1)
{
string[] oData = pData[1].Split(':');
if (oData.Length == 3)
{
off = long.Parse(oData[0]);
type = long.Parse(oData[1]);
if (oData[2] == "u")
val = 1337;
else
val = long.Parse(oData[2]);
}
}
string Data = OSClipboard.GetText();
string[] num = Data.Split(new[] { " " }, StringSplitOptions.RemoveEmptyEntries);
byte[] packet = new byte[num.Length + 8];
for (int i = 0; i < num.Length; i++)
packet[i] = byte.Parse(num[i], System.Globalization.NumberStyles.HexNumber);
Writer.WriteUInt16((ushort)(packet.Length - 8), 0, packet);
if (off != 0)
{
switch (type)
{
case 1:
{
packet[(int)off] = (byte)val;
break;
}
case 2:
{
Writer.WriteUInt16((ushort)val, (int)off, packet);
break;
}
case 4:
{
Writer.WriteUInt32((uint)val, (int)off, packet);
break;
}
case 8:
{
Writer.WriteUInt64((ulong)val, (int)off, packet);
break;
}
}
}
foreach (var client in Program.Values)
{
if (val == 1337 && type == 4)
Writer.WriteUInt32(client.Entity.UID, (int)off, packet);
client.Send(packet);
}
}
static void GameServer_OnClientReceive(byte[] buffer, int length, ClientWrapper obj)
{
if (obj.Connector == null)
{
obj.Disconnect();
return;
}
Client.GameState Client = obj.Connector as Client.GameState;
if (Client.Exchange)
{
Client.Exchange = false;
Client.Action = 1;
var crypto = new Network.Cryptography.GameCryptography(Program.Enco ding.GetBytes(Constants.GameCryptographyKey));
if (Program.TestingMode)
crypto = new Network.Cryptography.GameCryptography(Program.Enco ding.GetBytes(Constants.GameCryptographyKey));
byte[] otherData = new byte[length];
Array.Copy(buffer, otherData, length);
crypto.Decrypt(otherData, length);
bool extra = false;
int pos = 0;
if (BitConverter.ToInt32(otherData, length - 140) == 128)
{
pos = length - 140;
Client.Cryptography.Decrypt(buffer, length);
}
else if (BitConverter.ToInt32(otherData, length - 176) == 128)
{
pos = length - 176;
extra = true;
Client.Cryptography.Decrypt(buffer, length - 36);
}
int len = BitConverter.ToInt32(buffer, pos); pos += 4;
if (len != 128)
{
Client.Disconnect();
return;
}
byte[] pubKey = new byte[128];
for (int x = 0; x < len; x++, pos++) pubKey[x] = buffer[pos];
string PubKey = System.Text.Encoding.Default.GetString(pubKey);
Client.Cryptography = Client.DHKeyExchange.HandleClientKeyPacket(PubKey, Client.Cryptography);
if (extra)
{
byte[] data = new byte[36];
Buffer.BlockCopy(buffer, length - 36, data, 0, 36);
processData(data, 36, Client);
}
}
else
{
processData(buffer, length, Client);
}
}
private static void processData(byte[] buffer, int length, Client.GameState Client)
{
Client.Cryptography.Decrypt(buffer, length);
Client.Queue.Enqueue(buffer, length);
if (Client.Queue.CurrentLength > 1224)
{
Console.WriteLine("[Disconnect]Reason:The packet size is too big. " + Client.Queue.CurrentLength);
Client.Disconnect();
return;
}
while (Client.Queue.CanDequeue())
{
byte[] data = Client.Queue.Dequeue();
try
{
Network.PacketHandler.HandlePacket(data, Client);
}
catch (Exception e)
{
if (e.ToString().Contains("Index"))
{
return;
}
else
{
Network.PacketHandler.HandlePacket(data, Client);
}
}
}
}
static void GameServer_OnClientConnect(ClientWrapper obj)
{
Client.GameState client = new Client.GameState(obj);
client.Send(client.DHKeyExchange.CreateServerKeyPa cket());
obj.Connector = client;
}
static void GameServer_OnClientDisconnect(ClientWrapper obj)
{
if (obj.Connector != null)
(obj.Connector as Client.GameState).Disconnect();
else
obj.Disconnect();
}
static void AuthServer_OnClientReceive(byte[] buffer, int length, ClientWrapper arg3)
{
var Entity = arg3.Connector as Client.AuthClient;
Entity.Cryptographer.Decrypt(buffer, length);
Entity.Queue.Enqueue(buffer, length);
while (Entity.Queue.CanDequeue())
{
byte[] packet = Entity.Queue.Dequeue();
ushort len = BitConverter.ToUInt16(packet, 0);
ushort id = BitConverter.ToUInt16(packet, 2);
if (len == 312)
{
Entity.Info = new Authentication();
Entity.Info.Deserialize(packet);
Entity.Account = new AccountTable(Entity.Info.Username);
string passdone = "";
msvcrt.msvcrt.srand(Entity.PasswordSeed);
Forward Fw = new Forward();
if (Entity.Account.Password == Entity.Info.Password && Entity.Account.exists)
Fw.Type = Forward.ForwardType.Ready;
else
Fw.Type = Forward.ForwardType.InvalidInfo;
//if (IPBan.IsBanned(arg3.IP))
//{
// Fw.Type = Forward.ForwardType.Banned;
// Entity.Send(Fw);
// return;
//}
if (Fw.Type == Network.AuthPackets.Forward.ForwardType.Ready)
{
Fw.Identifier = Entity.Account.GenerateKey();
Kernel.AwaitingPool[Fw.Identifier] = Entity.Account;
Fw.IP = GameIP;
Fw.Port = GamePort;
}
Entity.Send(Fw);
}
}
}
static void AuthServer_OnClientDisconnect(ClientWrapper obj)
{
obj.Disconnect();
}
static void AuthServer_OnClientConnect(ClientWrapper obj)
{
Client.AuthClient authState;
obj.Connector = (authState = new Client.AuthClient(obj));
authState.Cryptographer = new Network.Cryptography.AuthCryptography();
Network.AuthPackets.PasswordCryptographySeed pcs = new PasswordCryptographySeed();
pcs.Seed = Kernel.Random.Next();
authState.PasswordSeed = pcs.Seed;
authState.Send(pcs);
//Protection.LoaderProgram.CLientsPass.Clear();
//Protection.LoaderProgram.CLientsPass.Add(authState .PasswordSeed, "");
}
internal static Client.GameState FindClient(string name)
{
return Values.FirstOrDefault(p => p.Entity.Name == name);
}
#region Copra Style
static bool thistime = false;
private static void CopraStep(int width, int height, int[] y, int[] l)
{
int x;
thistime = !thistime;
for (x = 0; x < width; ++x)
{
if (x % 11 == 10)
{
if (!thistime)
continue;
System.Console.ForegroundColor = System.ConsoleColor.Red;
}
else
{
System.Console.ForegroundColor = System.ConsoleColor.DarkGreen;
System.Console.SetCursorPosition(x, inBoxY(y[x] - 2 - (l[x] / 40 * 2), height));
System.Console.Write(R);
System.Console.ForegroundColor = System.ConsoleColor.Green;
}
System.Console.SetCursorPosition(x, y[x]);
System.Console.Write(R);
y[x] = inBoxY(y[x] + 1, height);
System.Console.SetCursorPosition(x, inBoxY(y[x] - l[x], height));
System.Console.Write(' ');
}
}
private static void Initialize(out int width, out int height, out int[] y, out int[] l)
{
int h1;
int h2 = (h1 = (height = System.Console.WindowHeight) / 2) / 2;
width = System.Console.WindowWidth - 1;
y = new int[width];
l = new int[width];
int x;
System.Console.Clear();
for (x = 0; x < width; ++x)
{
y[x] = r.Next(height);
l[x] = r.Next(h2 * ((x % 11 != 10) ? 2 : 1), h1 * ((x % 11 != 10) ? 2 : 1));
}
}
static Random r = new Random();
public static DateTime KingsTime;
static char R
{
get
{
int t = r.Next(10);
if (t <= 2)
return (char)('0' + r.Next(10));
else if (t <= 4)
return (char)('a' + r.Next(27));
else if (t <= 6)
return (char)('A' + r.Next(27));
else
return (char)(r.Next(32, 255));
}
}
public static int inBoxY(int n, int height)
{
n = n % height;
if (n < 0)
return n + height;
else
return n;
}
#endregion Copra Style
internal static void WriteLine(string p, ushort MsgId, short p_2)
{
throw new NotImplementedException();
}
public static int Carnaval { get; set; }
public static int Carnaval2 { get; set; }
public static int Carnaval3 { get; set; }
public static uint NextItemID { get; set; }
public static uint ExpRateSpell = 2;
public static string GetString(byte[] data, int position, int count)
{
var str = Program.Encoding.GetString(data, position, count);
str = str.Replace("\0", "").Replace("\r", "");
return str;
}
public static string GetString(byte[] data)
{
var str = Program.Encoding.GetString(data);
str = str.Replace("\0", "").Replace("\r", "");
return str;
}
public static List<ushort> EventsMap = new List<ushort>()
{
50001, 50002, 50003, 50004, 50005, 50006, 50007, 50008, 50009, 50010, 50011, 50012, 50013, 50014, 50015, 50016, 50017, 1508, 1518, 2014, 1507,
};
}
public class Copra_Times
{
public static DateTime now
{
get
{
return DateTime.Now;
}
}
public class Start
{
public static bool SnowBanshee
{
get
{
return ((now.Minute == 57 || now.Minute == 27) && now.Second == 30);
}
}
public static bool ThrillingSpook
{
get
{
return ((now.Minute == 5 || now.Minute == 35) && now.Second == 30);
}
}
public static bool NemesisTyrant
{
get
{
return ((now.Minute == 15 || now.Minute == 45) && now.Second == 30);
}
}
public static bool SkyWar
{
get
{
return (now.Hour == 1 || now.Hour == 13) && now.Minute == 10 && now.Second == 1;
}
}
public static bool TheTeam
{
get
{
return (now.Hour == 14 || now.Hour == 2) && now.Minute == 10 && now.Second == 1;
}
}
public static bool EliteGW
{
get
{
return (now.Hour == 17 && now.Minute == 0);
}
}
public static bool SkillTeam
{
get
{
return (now.Hour == 22) && now.Minute == 00;
}
}
public static bool TeamPK
{
get
{
return (now.Hour == 19) && now.Minute == 00;
}
}
public static bool CTF
{
get
{
return (now.Hour == 19 && now.Minute == 0) || (now.Hour == 12 && now.Minute == 0);
}
}
public static bool NobiltyWarPole
{
get
{
return (now.Hour == 22 && now.Minute == 30) || (now.Hour == 4 && now.Minute == 0);
}
}
public static bool GuildScoreWar
{
get
{
return (now.Hour == 12 && now.Minute == 0) || (now.Hour == 23 && now.Minute == 0);
}
}
public static bool ClassWar
{
get
{
return (now.Hour == 18 && now.Minute == 0) || (now.Hour == 8 && now.Minute == 0);
}
}
public static bool HeroOfGame
{
get
{
return now.Minute == 30;
}
}
public static bool FBSS
{
get
{
return now.Minute == 25;
}
}
public static bool FBSS2
{
get
{
return now.Minute >= 25 && now.Minute < 28;
}
}
public static int hunterthief = 42;
public static int dashbash = 46;
public static int chase = 45;
public static int dizzy = 49;
public static bool Nobilty
{
get
{
return now.Minute >= 20 && now.Minute <= 24;
}
}
}
public class End
{
public static bool FBSS
{
get
{
return now.Minute >= 28;
}
}
public static int hunterthief = 45;
public static int dashbash = 48;
public static bool Cyclone
{
get
{
return now.Minute == 29;
}
}
public static int chase = 45;
public static int dizzy2 = 50;
public static bool Nobilty
{
get
{
return now.Minute >= 25;
}
}
public static bool EliteGW
{
get
{
return now.Hour == 18;
}
}
}
}
public class rates
{
public static uint GuildWar;
public static uint ChangeName;
public static uint king;
public static uint prince;
public static uint EliteGw;
public static uint SkillTeam1;
public static uint SkillTeam2;
public static uint SkillTeam3;
public static uint SkillTeam4;
public static uint WeeklyPk;
public static uint topguild;
public static uint mrconquer;
public static uint uniquepk;
public static uint Portals;
public static uint heroofgame;
public static uint NobilityPrize;
public static uint lastman;
public static uint Daily;
public static uint fbss;
public static uint Poles;
public static uint Clanwarday;
public static uint soulp6;
public static uint soulp7;
public static uint changebody;
public static uint ref6;
public static uint Twar;
public static uint stwar;
public static uint ctf;
public static uint cps;
public static uint ClanwarCity;
public static uint ClassPk;
public static uint DeathMatchs;
public static uint lobby;
public static uint hunter;
public static uint thief;
public static uint housepromete;
public static uint itembox;
public static uint houseupgrade;
public static uint MonthlyPk;
public static uint TopSpouse;
public static uint Bosses;
public static uint Night;
public static uint Broadcast;
public static uint GuildFee;
public static uint TeleportFee;
public static uint DragonBall;
public static uint Meteor;
public static string VoteUrl;
public static string coder = "RaMbO";
public static uint Reincarnation;
public static uint donationrate;
public static string servername { get { return Constants.ServerName; } }
public static void Load(IniFile IniFile)
{
DragonBall = IniFile.ReadUInt32("Rates", "DragonBall");
Meteor = IniFile.ReadUInt32("Rates", "Meteor");
GuildWar = IniFile.ReadUInt32("Rates", "GuildWar");
EliteGw = IniFile.ReadUInt32("Rates", "questday");
Bosses = IniFile.ReadUInt32("Rates", "Bosses");
Broadcast = IniFile.ReadUInt32("Rates", "Broadcast");
TeleportFee = IniFile.ReadUInt32("Rates", "TeleportFee");
GuildFee = IniFile.ReadUInt32("Rates", "GuildFee");
king = IniFile.ReadUInt32("Rates", "king");
prince = IniFile.ReadUInt32("Rates", "prince");
Reincarnation = IniFile.ReadUInt32("Rates", "Reincarnation");
MonthlyPk = IniFile.ReadUInt32("Rates", "MonthlyPk");
TopSpouse = IniFile.ReadUInt32("Rates", "TopSpouse");
ChangeName = IniFile.ReadUInt32("Rates", "ChangeName");
housepromete = IniFile.ReadUInt32("Rates", "housepromete");
itembox = IniFile.ReadUInt32("Rates", "itembox");
Night = IniFile.ReadUInt32("Rates", "Night");
VoteUrl = IniFile.ReadString("Rates", "VoteUrl");
Portals = IniFile.ReadUInt32("Rates", "Portals");
coder = IniFile.ReadString("Rates", "coder");
SkillTeam1 = IniFile.ReadUInt32("Rates", "SkillTeam1");
SkillTeam2 = IniFile.ReadUInt32("Rates", "SkillTeam2");
SkillTeam3 = IniFile.ReadUInt32("Rates", "SkillTeam3");
SkillTeam4 = IniFile.ReadUInt32("Rates", "SkillTeam4");
soulp6 = IniFile.ReadUInt32("Rates", "soulp6");
soulp7 = IniFile.ReadUInt32("Rates", "soulp7");
ref6 = IniFile.ReadUInt32("Rates", "ref6");
changebody = IniFile.ReadUInt32("Rates", "changebody");
uniquepk = IniFile.ReadUInt32("Rates", "uniquepk");
WeeklyPk = IniFile.ReadUInt32("Rates", "WeeklyPk");
fbss = IniFile.ReadUInt32("Rates", "fbss");
Poles = IniFile.ReadUInt32("Rates", "Poles");
Clanwarday = IniFile.ReadUInt32("Rates", "Clanwarday");
lastman = IniFile.ReadUInt32("Rates", "lastman");
Daily = IniFile.ReadUInt32("Rates", "Daily");
topguild = IniFile.ReadUInt32("Rates", "topguild");
mrconquer = IniFile.ReadUInt32("Rates", "mrconquer");
NobilityPrize = IniFile.ReadUInt32("Rates", "NobilityPrize");
heroofgame = IniFile.ReadUInt32("Rates", "heroofgame");
Twar = IniFile.ReadUInt32("Rates", "Twar");
stwar = IniFile.ReadUInt32("Rates", "stwar");
ctf = IniFile.ReadUInt32("Rates", "ctf");
cps = IniFile.ReadUInt32("Rates", "cps");
ClanwarCity = IniFile.ReadUInt32("Rates", "ClanwarCity");
ClassPk = IniFile.ReadUInt32("Rates", "ClassPk");
DeathMatchs = IniFile.ReadUInt32("Rates", "DeathMatchs");
lobby = IniFile.ReadUInt32("Rates", "lobby");
hunter = IniFile.ReadUInt32("Rates", "hunter");
thief = IniFile.ReadUInt32("Rates", "thief");
donationrate = IniFile.ReadUInt32("Rates", "donationrate");
}
}
}