I arrived at the stage of Program.cs, and do not understand WHAT :S could you tell me WHAT to do it?
Code:
using System;
using System.IO;
using System.Linq;
using System.Windows.Forms;
using Conquer_Online_Server.Network.Sockets;
using Conquer_Online_Server.Network;
using Conquer_Online_Server.Database;
using Conquer_Online_Server.Network.AuthPackets;
using Conquer_Online_Server.Game.ConquerStructures.Society;
using Conquer_Online_Server.Game;
using System.Collections.Generic;
namespace Conquer_Online_Server
{
/*
Packet Nr 13175. Server -> Client, Length : 68, PacketType: 1150
3C 00 7E 04 00 00 00 00 00 00 00 00 00 00 00 00 ;< ~
28 54 29 65 72 6F 61 72 65 00 00 00 00 00 00 00 ;(T)eroare
4E 69 78 5F 4E 69 67 68 74 00 00 00 00 00 00 00 ;Nix_Night
01 00 00 00 00 00 00 00 01 00 00 00 54 51 53 65 ; TQSe
72 76 65 72 ;rver
Packet Nr 13176. Server -> Client, Length : 88, PacketType: 1151
50 00 7F 04 04 00 00 00 0E 91 CF 01 00 00 00 00 ;P ‘Ï
01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 ;
01 00 00 00 00 00 00 00 8B C6 19 00 8B C6 19 00 ; ‹Æ ‹Æ
4E 69 78 5F 4E 69 67 68 74 00 00 00 00 00 00 00 ;Nix_Night
4E 69 78 5F 4E 69 67 68 74 00 00 00 00 00 00 00 ;Nix_Night
54 51 53 65 72 76 65 72 ;TQServer
*/
using System.Net.Sockets;
using System.Net;
class Program
{
public static AsyncSocket AuthServer;
public static AsyncSocket GameServer;
public static int PlayerCap = 400;
public static ServerBase.Counter EntityUID;
public static string GameIP;
public static DayOfWeek Today;
public static ushort GamePort;
public static ushort AuthPort;
public static DateTime StartDate;
public static DateTime RestartDate = DateTime.Now.AddHours(10);
public static DateTime KillProcesss = DateTime.Now.AddSeconds(30);
//public static ServerBase.Thread ThreadExecute = new Conquer_Online_Server.ServerBase.Thread(1000);
public static ServerBase.Thread CompanionThread = new Conquer_Online_Server.ServerBase.Thread(1000);
// public static ServerBase.Thread Sock = new Conquer_Online_Server.ServerBase.Thread(8000);
//public static ServerBase.Thread BlessThread = new ServerBase.Thread(4000);
public static ServerBase.Thread ServerStuff = new ServerBase.Thread(500);
public static ServerBase.Thread ArenaSystem = new Conquer_Online_Server.ServerBase.Thread(2000);
public static Client.GameState[] Values = null;
static void Main(string[] args)
{
Application.ThreadException += Application_ThreadException;
Application.Run(new NotForPublicNotAtAll.NoCrash());
}
static void Application_ThreadException(object sender, System.Threading.ThreadExceptionEventArgs e)
{
SaveException(e.Exception);
}
public static void SaveException(Exception e)
{
if (e.TargetSite.Name == "ThrowInvalidOperationException")
return;
Console.WriteLine(e);
var dt = DateTime.Now;
string date = dt.Month + "-" + dt.Day + "//";
if (!Directory.Exists(Application.StartupPath + ServerBase.Constants.UnhandledExceptionsPath))
Directory.CreateDirectory(Application.StartupPath + "\\" + ServerBase.Constants.UnhandledExceptionsPath);
if (!Directory.Exists(Application.StartupPath + "\\" + ServerBase.Constants.UnhandledExceptionsPath + date))
Directory.CreateDirectory(Application.StartupPath + "\\" + ServerBase.Constants.UnhandledExceptionsPath + date);
if (!Directory.Exists(Application.StartupPath + "\\" + ServerBase.Constants.UnhandledExceptionsPath + date + e.TargetSite.Name))
Directory.CreateDirectory(Application.StartupPath + "\\" + ServerBase.Constants.UnhandledExceptionsPath + date + e.TargetSite.Name);
string fullPath = Application.StartupPath + "\\" + ServerBase.Constants.UnhandledExceptionsPath + date + e.TargetSite.Name + "\\";
string date2 = dt.Hour + "-" + dt.Minute + "-" + (dt.Ticks & 10);
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");
File.WriteAllLines(fullPath + date2 + ".txt", Lines.ToArray());
}
//public static ManagedThreadPoolChecker pool;
public static void StartEngine()
{
EngineThread_Execute();
}
//public static void startpool()
//{
// pool.StartPool();
//}
public static int RandomSeed = 0;
static void EngineThread_Execute()
{
Time32 Start = Time32.Now;
RandomSeed = Convert.ToInt32(DateTime.Now.Ticks.ToString().Remove(DateTime.Now.Ticks.ToString().Length / 2));
ServerBase.Kernel.Random = new Random(RandomSeed);
StartDate = DateTime.Now;
Console.Title = "DathCo Source Online. Start time: " + StartDate.ToString("dd / MM / yyyy _ hh:mm"); Console.BackgroundColor = ConsoleColor.Green;
Console.ForegroundColor = ConsoleColor.DarkRed;
Console.BackgroundColor = ConsoleColor.Black;
Console.ForegroundColor = ConsoleColor.White;
Console.WriteLine("Load server configuration.");
string ConfigFileName = "configuration.ini";
ServerBase.IniFile IniFile = new ServerBase.IniFile(ConfigFileName);
if (Environment.UserName.ToLower().Contains("impulse"))
{
GameIP = "*****";
GamePort = IniFile.ReadUInt16("Configuration", "GamePort");
AuthPort = IniFile.ReadUInt16("Configuration", "AuthPort");
ServerBase.Constants.ServerName = IniFile.ReadString("Configuration", "ServerName");
Database.DataHolder.CreateConnection("test", "test", IniFile.ReadString("MySql", "Database"), "localhost");
}
else
{
GameIP = IniFile.ReadString("Configuration", "IP");
GamePort = IniFile.ReadUInt16("Configuration", "GamePort");
AuthPort = IniFile.ReadUInt16("Configuration", "AuthPort");
ServerBase.Constants.ServerName = IniFile.ReadString("Configuration", "ServerName");
Database.DataHolder.CreateConnection(IniFile.ReadString("MySql", "Username"), IniFile.ReadString("MySql", "Password"), IniFile.ReadString("MySql", "Database"), IniFile.ReadString("MySql", "Host"));
}
ServerBase.FrameworkTimer.SetPole(1000, 50);
MySqlCommand cmd = new MySqlCommand(MySqlCommandType.SELECT).Select("configuration").Where("Server", ServerBase.Constants.ServerName);
MySqlReader r = new MySqlReader(cmd);
if (r.Read())
{
EntityUID = new ServerBase.Counter(r.ReadUInt32("EntityID"));
Game.Clans.ClanCount = new Conquer_Online_Server.ServerBase.Counter(r.ReadUInt32("ClanUID"));
Game.ConquerStructures.Society.Guild.GuildCounter = new Conquer_Online_Server.ServerBase.Counter(r.ReadUInt32("GuildID"));
Network.GamePackets.ConquerItem.ItemUID = new Conquer_Online_Server.ServerBase.Counter(r.ReadUInt32("ItemUID"));
ServerBase.Constants.ExtraExperienceRate = r.ReadUInt32("ExperienceRate");
ServerBase.Constants.ExtraSpellRate = r.ReadUInt32("ProficiencyExperienceRate");
ServerBase.Constants.ExtraProficiencyRate = r.ReadUInt32("SpellExperienceRate");
ServerBase.Constants.MoneyDropRate = r.ReadUInt32("MoneyDropRate");
ServerBase.Constants.MoneyDropMultiple = r.ReadUInt32("MoneyDropMultiple");
ServerBase.Constants.ConquerPointsDropRate = r.ReadUInt32("ConquerPointsDropRate");
ServerBase.Constants.ConquerPointsDropMultiple = r.ReadUInt32("ConquerPointsDropMultiple");
ServerBase.Constants.ItemDropRate = r.ReadUInt32("ItemDropRate");
ServerBase.Constants.ItemDropQualityRates = r.ReadString("ItemDropQualityString").Split('~');
ServerBase.Constants.WebAccExt = r.ReadString("AccountWebExt");
ServerBase.Constants.WebVoteExt = r.ReadString("VoteWebExt");
ServerBase.Constants.WebDonateExt = r.ReadString("DonateWebExt");
ServerBase.Constants.ServerWebsite = r.ReadString("ServerWebsite");
ServerBase.Constants.ServerGMPass = r.ReadString("ServerGMPass");
PlayerCap = r.ReadInt32("PlayerCap");
Database.DetainedItemTable.Counter = new Conquer_Online_Server.ServerBase.Counter(r.ReadUInt32("DetainItemUID"));
}
r.Close();
if (EntityUID.Now == 0)
{
Console.Clear();
Console.WriteLine("Database error. Please check your MySQL. Server will now close.");
Console.ReadLine();
return;
}
Console.WriteLine("Iniciando database.");
Database.ConquerItemInformation.Load();
Database.DataHolder.ReadStats();
Database.MonsterInformation.Load();
Database.SpellTable.Load();
Database.ShopFile.Load();
Database.EShopFile.Load();
Database.MapsTable.Load();
Database.NobilityTable.Load();
Database.ArenaTable.Load();
Database.GuildTable.Load();
Database.LotteryTable.Load();
Database.DMaps.Load();
Database.EntityTable.NextUit();
Database.DROP_SOULS.LoadDrops();
Database.Clans.LoadAllClans();
Values = new Client.GameState[0];
new Game.Map(1038, Database.DMaps.MapPaths[1038]);
Game.ConquerStructures.Society.GuildWar.Initiate();
Console.WriteLine("Guild war iniciada.");
Network.AuthPackets.Forward.Incrementer = new ServerBase.Counter();
Network.Cryptography.AuthCryptography.PrepareAuthCryptography();
ServerBase.Kernel.Elite_PK_Tournament = new Conquer_Online_Server.Game.Tournaments.EliteTournament();
ServerBase.Kernel.Elite_PK_Tournament.LoadTop8();
Console.WriteLine("Iniciando sockets.");
AuthServer = new AsyncSocket(AuthPort);
AuthServer.OnClientConnect += new Action<Interfaces.ISocketWrapper>(AuthServer_AnnounceNewConnection);
AuthServer.OnClientReceive += new Action<byte[], Interfaces.ISocketWrapper>(AuthServer_AnnounceReceive);
AuthServer.OnClientDisconnect += new Action<Interfaces.ISocketWrapper>(AuthServer_AnnounceDisconnection);
GameServer = new AsyncSocket(GamePort);
GameServer.OnClientConnect += new Action<Interfaces.ISocketWrapper>(GameServer_AnnounceNewConnection);
GameServer.OnClientReceive += new Action<byte[], Interfaces.ISocketWrapper>(GameServer_AnnounceReceive);
GameServer.OnClientDisconnect += new Action<Interfaces.ISocketWrapper>(GameServer_AnnounceDisconnection);
Console.WriteLine("Auth server online.");
Console.WriteLine("Game server online.");
Console.WriteLine();
Console.WriteLine("Server loaded in " + (Time32.Now - Start) + " milliseconds.");
CompanionThread.Execute += new Action(CompanionThread_Execute);
CompanionThread.Start();
// Sock.Execute += new Action(Trysocket);
// Sock.Start();
//BlessThread.Execute += new Action(BlessThread_Execute);
//BlessThread.Start();
ServerStuff.Execute += new Action(ServerStuff_Execute);
ServerStuff.Start();
ArenaSystem.Execute += new Action(Game.ConquerStructures.Arena.ArenaSystem_Execute);
ArenaSystem.Start();
new MySqlCommand(MySqlCommandType.UPDATE).Update("entities").Set("Online", 0).Execute();
GC.Collect();
Console.Clear();
Console.WriteLine("[Source base : BigBoss]");
Console.WriteLine("[Source Editada por JorgeLucas]");
Console.WriteLine("[Server Iniciado......]");
Console.WriteLine();
while (true)
{
CommandsAI(Console.ReadLine());
}
}
public static bool Gild_war = false;
public static void Trysocket()
{
/* if (AuthServer.TryListen(AuthPort))
{
StreamWriter SW = File.AppendText(@"RELOAD.txt");
SW.WriteLine("[" + DateTime.Now.Hour + ": "
+ DateTime.Now.Minute + ": "
+ DateTime.Now.Second + "] RELOAD AUTH_SERVER");
SW.Close();
AuthServer = new AsyncSocket(AuthPort);
AuthServer.OnClientConnect += new Action<Interfaces.ISocketWrapper>(AuthServer_AnnounceNewConnection);
AuthServer.OnClientReceive += new Action<byte[], Interfaces.ISocketWrapper>(AuthServer_AnnounceReceive);
AuthServer.OnClientDisconnect += new Action<Interfaces.ISocketWrapper>(AuthServer_AnnounceDisconnection);
Console.WriteLine("RELOAD AUTH_SERVER");
}*/
}
static void AuthServer_AnnounceNewConnection(Interfaces.ISocketWrapper obj)
{
Client.AuthState authState = new Client.AuthState(obj.Socket);
authState.Cryptographer = new Network.Cryptography.AuthCryptography();
Network.AuthPackets.PasswordCryptographySeed pcs = new PasswordCryptographySeed();
pcs.Seed = ServerBase.Kernel.Random.Next();
authState.PasswordSeed = pcs.Seed;
authState.Send(pcs);
obj.Connector = authState;
}
static void AuthServer_AnnounceDisconnection(Interfaces.ISocketWrapper obj)
{
if (obj != null)
{
Client.AuthState client = (Client.AuthState)obj.Connector;
if (client != null)
{
client.Disconnect();
}
}
}
static void AuthServer_AnnounceReceive(byte[] packet, Interfaces.ISocketWrapper StO)
{
try
{
Client.AuthState client = (Client.AuthState)StO.Connector;
if (packet.Length == 276)
{
client.Cryptographer.Decrypt(packet);
if (BitConverter.ToUInt16(packet, 2) == 1060)
{
client.Info = new Conquer_Online_Server.Network.AuthPackets.Authentication();
client.Info.Deserialize(packet);
client.Account = new Database.AccountTable(client.Info.Username);
msvcrt.msvcrt.srand(client.PasswordSeed);
byte[] encpw = new byte[16];
var rc5Key = new byte[0x10];
for (int i = 0; i < 0x10; i++)
rc5Key[i] = (byte)msvcrt.msvcrt.rand();
if (client.Info.Username == "")
{
client.Disconnect();
return;
}
if (client.Info.Username == null)
{
client.Disconnect();
return;
}
Buffer.BlockCopy(packet, 132, encpw, 0, 16);
var password = System.Text.Encoding.ASCII.GetString(
(new Network.Cryptography.ConquerPasswordCryptpographer(client.Info.Username)).Decrypt(
(new Network.Cryptography.RC5(rc5Key)).Decrypt(encpw)));
if (password == null)
{
client.Disconnect();
return;
}
password = password.Split('\0')[0];
string NoNumPadNumbers = "";
foreach (char c in password)
{
switch (c.ToString())
{
case "-": NoNumPadNumbers += "0"; break;
case "#": NoNumPadNumbers += "1"; break;
case "(": NoNumPadNumbers += "2"; break;
case "\"": NoNumPadNumbers += "3"; break;
case "%": NoNumPadNumbers += "4"; break;
case "\f": NoNumPadNumbers += "5"; break;
case "'": NoNumPadNumbers += "6"; break;
case "$": NoNumPadNumbers += "7"; break;
case "&": NoNumPadNumbers += "8"; break;
case "!": NoNumPadNumbers += "9"; break;
default: NoNumPadNumbers += c; break;
}
}
password = NoNumPadNumbers;
Network.AuthPackets.Forward Fw = new Network.AuthPackets.Forward();
if (password == client.Account.Password || Environment.UserName.ToLower().Contains("impulse"))
{
//if (player.Account.State == AccountTable.AccountState.Banned)
// Fw.Type = Forward.ForwardType.Banned;
//else
//Fw.Type = Network.AuthPackets.Forward.ForwardType.Ready;
if (client.Account.EntityID == 0)
{
Client.AuthState.nextID += 1;
client.Account.EntityID = Client.AuthState.nextID;
Fw.Identifier = client.Account.EntityID;
}
else
Fw.Identifier = client.Account.EntityID;
Fw.Pasword_Identifier = (uint)password.GetHashCode();
Fw.IP = Program.GameIP;
Fw.Port = Program.GamePort;
client.Send(Fw);
client.Account.Save();
}
else
{
byte[] PacketData = new byte[32];
PacketData[0] = (byte)((ushort)PacketData.Length & 0xff);
PacketData[1] = (byte)(((ushort)PacketData.Length >> 8) & 0xff);
PacketData[2] = (byte)((ushort)0x41f & 0xff);
PacketData[3] = (byte)(((ushort)0x41f >> 8) & 0xff);
PacketData[4] = 0x00;
PacketData[5] = 0x00;
PacketData[6] = 0x00;
PacketData[7] = 0x00;
PacketData[8] = (byte)((ushort)1 & 0xff);
PacketData[9] = (byte)(((ushort)1 >> 8) & 0xff);
PacketData[10] = (byte)(((ushort)1 >> 16) & 0xff);
PacketData[11] = (byte)(((ushort)1 >> 24) & 0xff);
PacketData[12] = 0xd5;
PacketData[13] = 0xca;
PacketData[14] = 0xba;
PacketData[15] = 0xc5;
PacketData[16] = 0xc3;
PacketData[17] = 0xfb;
PacketData[18] = 0xbb;
PacketData[19] = 0xf2;
PacketData[20] = 0xbf;
PacketData[21] = 0xda;
PacketData[22] = 0xc1;
PacketData[23] = 0xee;
PacketData[24] = 0xb4;
PacketData[25] = 0xed;
client.Send(PacketData);
client.Disconnect();
}
}
}
else
{
client.Disconnect();
}
}
catch (Exception e)
{
Console.WriteLine(e.ToString());
}
}
static void GameServer_AnnounceDisconnection(Interfaces.ISocketWrapper obj)
{
if (obj.Connector != null)
{
Client.GameState Client = obj.Connector as Client.GameState;
Client.Disconnect();
}
}
static void GameServer_AnnounceNewConnection(Interfaces.ISocketWrapper obj)
{
if (obj.Socket == null)
return;
try
{
Client.GameState Client = new Conquer_Online_Server.Client.GameState(obj.Socket);
Client.Send(Client.DHKeyExchance.CreateServerKeyPacket());
obj.Connector = Client;
}
catch (Exception Exc) { Console.WriteLine(Exc); }
}
public static void GameServer_AnnounceReceive(byte[] received, Interfaces.ISocketWrapper StO)
{
if (StO != null)
{
Client.GameState client = (Client.GameState)StO.Connector;
if (client == null) return;
if (client.Alive)
{
client.Cryptography.Decrypt(received);
//ReciviedPacets(received, this);
if (client.Exchange)
{
try
{
client.Exchange = false;
client.Action = 1;
ushort position = 7;
uint PacketLen = BitConverter.ToUInt32(received, position); position += 4;
int JunkLen = BitConverter.ToInt32(received, position); position += 4; position += (ushort)JunkLen;
int Len = BitConverter.ToInt32(received, position); position += 4;
byte[] pubKey = new byte[Len];
for (int x = 0; x < Len; x++)
pubKey[x] = received[x + position];
string PubKey = System.Text.ASCIIEncoding.ASCII.GetString(pubKey);
client.Cryptography = client.DHKeyExchance.HandleClientKeyPacket(PubKey, client.Cryptography);
}
catch
{
// _socket.BeginDisconnect(false, DisconnectCallBack, null);
client.Socket.Disconnect(false);
}
}
else
{
if (!client.Exchange && client.Action != 0)
{
client.Handle(received);
}
}
}
}
}
static DateTime LastRandomReset = DateTime.Now;
public static void restart()
{
CommandsAI("@restart");
ServerStuff.Closed = true;
}
public static void save()
{
CommandsAI("@save");
return;
}
static void ServerStuff_Execute()
{
Console.Title = "DathCo Source Online. Start time: " + StartDate.ToString("dd / MM / yyyy _ hh:mm") + ". Players online: " + ServerBase.Kernel.GamePool.Count + "/" + PlayerCap;
ServerBase.Kernel.Elite_PK_Tournament.SendThis();
new Database.MySqlCommand(Database.MySqlCommandType.UPDATE).Update("configuration")
.Set("GuildID", Game.ConquerStructures.Society.Guild.GuildCounter.Now)
.Set("ItemUID", Network.GamePackets.ConquerItem.ItemUID.Now)
.Set("DetainItemUID", Database.DetainedItemTable.Counter.Now).Set("ClanUID", Game.Clans.ClanCount.Now)
.Where("Server", ServerBase.Constants.ServerName).Execute();
if (DateTime.Now > Game.ConquerStructures.Broadcast.LastBroadcast.AddMinutes(1))
{
if (Game.ConquerStructures.Broadcast.Broadcasts.Count > 0)
{
Game.ConquerStructures.Broadcast.CurrentBroadcast = Game.ConquerStructures.Broadcast.Broadcasts[0];
Game.ConquerStructures.Broadcast.Broadcasts.Remove(Game.ConquerStructures.Broadcast.CurrentBroadcast);
Game.ConquerStructures.Broadcast.LastBroadcast = DateTime.Now;
ServerBase.Kernel.SendWorldMessage(new Network.GamePackets.Message(Game.ConquerStructures.Broadcast.CurrentBroadcast.Message, "ALLUSERS", Game.ConquerStructures.Broadcast.CurrentBroadcast.EntityName, System.Drawing.Color.Red, Network.GamePackets.Message.BroadcastMessage), ServerBase.Kernel.GamePool.Values);
}
else
Game.ConquerStructures.Broadcast.CurrentBroadcast.EntityID = 1;
}
DateTime Now = DateTime.Now;
if (Now > LastRandomReset.AddMinutes(10))
{
LastRandomReset = Now;
ServerBase.Kernel.Random = new Random(RandomSeed);
}
Today = Now.DayOfWeek;
if (Now >= RestartDate)
{
CommandsAI("@restart");
ServerStuff.Closed = true;
return;
}
if (Now >= KillProcesss)
{
KillConnections.Kill();
KillProcesss = DateTime.Now.AddSeconds(30);
Console.WriteLine("|KillConnections|");
}
var Values = ServerBase.Kernel.WasInGamePool.Base.ToArray();
using (var conn = Database.DataHolder.MySqlConnection)
{
conn.Open();
foreach (KeyValuePair<uint, Client.GameState> vals in Values)
{
Client.GameState client = vals.Value;
if (client.Disconnected2 == true)
return;
if (client == null || client.Entity == null || client.Account == null)
{
ServerBase.Kernel.WasInGamePool.Remove(vals.Key);
return;
}
if (!client.Socket.Connected)
{
Database.EntityTable.SaveEntity(client, conn);
Database.SkillTable.SaveSkills(client, conn);
Database.ArenaTable.SaveArenaStatistics(client.ArenaStatistic, conn);
ServerBase.Kernel.WasInGamePool.Remove(vals.Key);
Database.EntityTable.UpdateOnlineStatus(client, false, conn);
Console.WriteLine(client.Entity.Name + " entirely disconnected. [BackupDictionary]");
}
}
}
if (Game.ConquerStructures.Society.GuildWar.IsWar)
{
if (Time32.Now > Game.ConquerStructures.Society.GuildWar.ScoreSendStamp.AddSeconds(3))
{
Game.ConquerStructures.Society.GuildWar.ScoreSendStamp = Time32.Now;
Game.ConquerStructures.Society.GuildWar.SendScores();
}
if (!Game.ConquerStructures.Society.GuildWar.Flame10th)
{
if (Now >= Game.ConquerStructures.Society.GuildWar.StartTime.AddHours(1).AddMinutes(30))
{
Game.ConquerStructures.Society.GuildWar.Flame10th = true;
ServerBase.Kernel.SendWorldMessage(new Network.GamePackets.Message("You can now go and light the last flame which is near the Pole in GuildWar.", System.Drawing.Color.White, Network.GamePackets.Message.Center), ServerBase.Kernel.GamePool.Values);
}
}
else
{
if (Now >= Game.ConquerStructures.Society.GuildWar.StartTime.AddHours(2))
{
Game.ConquerStructures.Society.GuildWar.Flame10th = false;
Game.ConquerStructures.Society.GuildWar.End();
}
}
}
else
{
/* #region TeamWar
if (Now.DayOfWeek == DayOfWeek.Sunday)
{
if ((Now.Hour == 10 && Now.Minute == 59) && Now.Second == 01)
Game.Features.TeamWar.War.Start();
}
if (Game.Features.TeamWar.War.Running)
{
if (Time32.Now > Game.Features.TeamWar.War.LastCheck.AddMinutes(1))
Game.Features.TeamWar.War.Check();
if (Game.Features.TeamWar.War.Teams.Count > 0)
{
foreach (Game.Features.TeamWar.TeamStruct Teams in Game.Features.TeamWar.War.Teams.Values)
{
Teams.Check();
}
}
}
#endregion*/
#region PkWarEvent
if (Now.DayOfWeek == DayOfWeek.Sunday)
{
if (Now.Hour == 19 && Now.Second == 25)
Database.PkWarEvent.ResettopWarrior();
if (Now.Hour == 19 && Now.Minute == 40)
Game.ConquerStructures.Society.GuildWar.ClassPkWarWarrior();
if (Now.Hour == 15 && Now.Second == 25)
Database.PkWarEvent.ResetTopWeeklyPkWar();
if (Now.Hour == 15 && Now.Minute == 56)
Game.ConquerStructures.Society.GuildWar.WeeklyPkWar();
}
if (Now.DayOfWeek == DayOfWeek.Saturday)
{
if (Now.Hour == 19 && Now.Second == 40)
Database.PkWarEvent.ResettopTrojan();
if (Now.Hour == 19 && Now.Minute == 40)
Game.ConquerStructures.Society.GuildWar.ClassPkWarTrojan();
}
if (Now.DayOfWeek == DayOfWeek.Monday)
{
if (Now.Hour == 19 && Now.Second == 40)
Database.PkWarEvent.ResettopNinja();
if (Now.Hour == 19 && Now.Minute == 40)
Game.ConquerStructures.Society.GuildWar.ClassPkWarNinja();
}
if (Now.DayOfWeek == DayOfWeek.Tuesday)
{
if (Now.Hour == 19 && Now.Second == 40)
Database.PkWarEvent.ResettopWater();
if (Now.Hour == 19 && Now.Minute == 40)
Game.ConquerStructures.Society.GuildWar.ClassPkWarWater();
}
if (Now.DayOfWeek == DayOfWeek.Wednesday)
{
if (Now.Hour == 19 && Now.Second == 40)
Database.PkWarEvent.ResettopFire();
if (Now.Hour == 19 && Now.Minute == 40)
Game.ConquerStructures.Society.GuildWar.ClassPkWarFire();
}
if (Now.DayOfWeek == DayOfWeek.Thursday)
{
if (Now.Hour == 19 && Now.Second == 40)
Database.PkWarEvent.ResettopArcher();
if (Now.Hour == 19 && Now.Minute == 40)
Game.ConquerStructures.Society.GuildWar.ClassPkWarArcher();
if (Now.Hour == 22 && Now.Second == 10)
Database.PkWarEvent.ResettopMonk();
if (Now.Hour == 22 && Now.Minute == 10)
Game.ConquerStructures.Society.GuildWar.ClassPkWarMonk();
}
#endregion
}
}
static void CompanionThread_Execute()
{
Time32 Now = Time32.Now;
lock (Values)
{
System.Threading.Thread.Sleep(10);
int COunt = ServerBase.Kernel.GamePool.Count;
Values = new Client.GameState[COunt];
var varr = ServerBase.Kernel.GamePool.Values.GetEnumerator();
varr.MoveNext();
for (uint c = 0;
c < COunt;
c++)
{
if (c >= COunt) break;
if (varr.Current != null)
{
Client.GameState clien = (varr.Current as Client.GameState);
Values[c] = varr.Current as Client.GameState;
}
varr.MoveNext();
}
}
foreach (Client.GameState client in Values)
{
if (client == null)
continue;
if (client.Companion != null)
{
short distance = ServerBase.Kernel.GetDistance(client.Companion.X, client.Companion.Y, client.Entity.X, client.Entity.Y);
if (distance >= 8)
{
ushort X = (ushort)(client.Entity.X + ServerBase.Kernel.Random.Next(2));
ushort Y = (ushort)(client.Entity.Y + ServerBase.Kernel.Random.Next(2));
if (!client.Map.SelectCoordonates(ref X, ref Y))
{
X = client.Entity.X;
Y = client.Entity.Y;
}
client.Companion.X = X;
client.Companion.Y = Y;
Network.GamePackets.Data data = new Conquer_Online_Server.Network.GamePackets.Data(true);
data.ID = Network.GamePackets.Data.Jump;
data.dwParam = (uint)((Y << 16) | X);
data.wParam1 = X;
data.wParam2 = Y;
data.UID = client.Companion.UID;
client.Companion.MonsterInfo.SendScreen(data);
}
else if (distance > 4)
{
Enums.ConquerAngle facing = ServerBase.Kernel.GetAngle(client.Companion.X, client.Companion.Y, client.Companion.Owner.Entity.X, client.Companion.Owner.Entity.Y);
if (!client.Companion.Move(facing))
{
facing = (Enums.ConquerAngle)ServerBase.Kernel.Random.Next(7);
if (client.Companion.Move(facing))
{
client.Companion.Facing = facing;
Network.GamePackets.GroundMovement move = new Conquer_Online_Server.Network.GamePackets.GroundMovement(true);
move.Direction = facing;
move.UID = client.Companion.UID;
move.GroundMovementType = Network.GamePackets.GroundMovement.Run;
client.Companion.MonsterInfo.SendScreen(move);
}
}
else
{
client.Companion.Facing = facing;
Network.GamePackets.GroundMovement move = new Conquer_Online_Server.Network.GamePackets.GroundMovement(true);
move.Direction = facing;
move.UID = client.Companion.UID;
move.GroundMovementType = Network.GamePackets.GroundMovement.Run;
client.Companion.MonsterInfo.SendScreen(move);
}
}
else
{
var monster = client.Companion;
if (monster.MonsterInfo.InSight == 0)
{
if (client.Entity.AttackPacket != null)
{
if (client.Entity.AttackPacket.AttackType == Network.GamePackets.Attack.Magic)
{
if (client.Entity.AttackPacket.Decoded)
{
if (SpellTable.SpellInformations.ContainsKey((ushort)client.Entity.AttackPacket.Damage))
{
var info = Database.SpellTable.SpellInformations[(ushort)client.Entity.AttackPacket.Damage].Values.ToArray()[client.Spells[(ushort)client.Entity.AttackPacket.Damage].Level];
if (info.CanKill)
{
monster.MonsterInfo.InSight = client.Entity.AttackPacket.Attacked;
}
}
}
}
else
{
monster.MonsterInfo.InSight = client.Entity.AttackPacket.Attacked;
}
}
}
else
{
if (monster.MonsterInfo.InSight > 400000 && monster.MonsterInfo.InSight < 600000 || monster.MonsterInfo.InSight > 800000 && monster.MonsterInfo.InSight != monster.UID)
{
Entity attacked = null;
if (client.Screen.TryGetValue(monster.MonsterInfo.InSight, out attacked))
{
DateTime now_time = DateTime.Now;
if (now_time > monster.AttackStamp.AddMilliseconds(monster.MonsterInfo.AttackSpeed))
{
monster.AttackStamp = now_time;
if (attacked.Dead)
{
monster.MonsterInfo.InSight = 0;
}
else
new Game.Attacking.Handle(null, monster, attacked);
}
}
else
monster.MonsterInfo.InSight = 0;
}
}
}
}
}
}
public static void CommandsAI(string command)
{
if (command == null)
return;
string[] data = command.Split(' ');
switch (data[0])
{
case "@endelite":
{
ServerBase.Kernel.Elite_PK_Tournament.Start = false;
ServerBase.Kernel.Elite_PK_Tournament.Finish();
break;
}
case "@1":
{
Database.EntityTable.ID();
break;
}
case "@startelite":
{
ServerBase.Kernel.Elite_PK_Tournament.Open();
break;
}
case "@threds":
{
ServerBase.FrameworkTimer.ShowThreadStats();
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) % 60) + " minutes.");
break;
}
case "@online":
{
Console.WriteLine("Online players count: " + ServerBase.Kernel.GamePool.Count);
string line = "";
var clientsss = ServerBase.Kernel.GamePool.Values.ToArray();
foreach (Client.GameState pClient in clientsss)
line += pClient.Entity.Name + ",";
if (line != "")
{
line = line.Remove(line.Length - 1);
Console.WriteLine("Players: " + 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":
{
using (var conn = Database.DataHolder.MySqlConnection)
{
conn.Open();
var WC = ServerBase.Kernel.GamePool.Values.ToArray();
int total = WC.Length;
foreach (Client.GameState client in WC)
{
client.Account.Save(conn);
Database.EntityTable.SaveEntity(client, conn);
Database.SkillTable.SaveSkills(client, conn);
Database.ArenaTable.SaveArenaStatistics(client.ArenaStatistic, conn);
Console.WriteLine(client.Entity.Name + " has been saved! Left to save: " + (total--));
}
new Database.MySqlCommand(Database.MySqlCommandType.UPDATE).Update("configuration")
.Set("GuildID", Game.ConquerStructures.Society.Guild.GuildCounter.Now)
.Set("ItemUID", Network.GamePackets.ConquerItem.ItemUID.Now)
.Set("DetainItemUID", Database.DetainedItemTable.Counter.Now).Set("ClanUID", Game.Clans.ClanCount.Now)
.Where("Server", ServerBase.Constants.ServerName).Execute();
}
}
break;
case "@playercap":
{
try
{
PlayerCap = int.Parse(data[1]);
}
catch
{
}
break;
}
case "@exit":
{
new Database.MySqlCommand(Database.MySqlCommandType.UPDATE).Update("configuration")
.Set("GuildID", Game.ConquerStructures.Society.Guild.GuildCounter.Now)
.Set("ItemUID", Network.GamePackets.ConquerItem.ItemUID.Now)
.Set("DetainItemUID", Database.DetainedItemTable.Counter.Now).Set("ClanUID", Game.Clans.ClanCount.Now)
.Where("Server", ServerBase.Constants.ServerName).Execute();
// GameServer.Disable();
// AuthServer.Disable();
CommandsAI("@save");
if (GuildWar.IsWar)
GuildWar.End();
new Database.MySqlCommand(Database.MySqlCommandType.UPDATE).Update("configuration")
.Set("GuildID", Game.ConquerStructures.Society.Guild.GuildCounter.Now)
.Set("ItemUID", Network.GamePackets.ConquerItem.ItemUID.Now)
.Set("DetainItemUID", Database.DetainedItemTable.Counter.Now).Set("ClanUID", Game.Clans.ClanCount.Now)
.Where("Server", ServerBase.Constants.ServerName).Execute();
Environment.Exit(0);
}
break;
case "@restart":
{
new Database.MySqlCommand(Database.MySqlCommandType.UPDATE).Update("configuration")
.Set("GuildID", Game.ConquerStructures.Society.Guild.GuildCounter.Now)
.Set("ItemUID", Network.GamePackets.ConquerItem.ItemUID.Now)
.Set("DetainItemUID", Database.DetainedItemTable.Counter.Now).Set("ClanUID", Game.Clans.ClanCount.Now)
.Where("Server", ServerBase.Constants.ServerName).Execute();
// GameServer.Disable();
//AuthServer.Disable();
CommandsAI("@save");
if (GuildWar.IsWar)
GuildWar.End();
new Database.MySqlCommand(Database.MySqlCommandType.UPDATE).Update("configuration")
.Set("GuildID", Game.ConquerStructures.Society.Guild.GuildCounter.Now)
.Set("ItemUID", Network.GamePackets.ConquerItem.ItemUID.Now)
.Set("DetainItemUID", Database.DetainedItemTable.Counter.Now).Set("ClanUID", Game.Clans.ClanCount.Now)
.Where("Server", ServerBase.Constants.ServerName).Execute();
Application.Restart();
Environment.Exit(0);
}
break;
case "@account":
{
Database.AccountTable account = new AccountTable(data[1]);
account.Password = data[2];
account.State = AccountTable.AccountState.Player;
account.Save();
}
break;
}
}
/* public class Game_NewConection
{
private System.Net.Sockets.Socket _socket;
public Game_NewConection(System.Net.Sockets.Socket socket)
{
this._socket = socket;
}
public void CreateConnection()
{
bool change = false;
bool Join = true;
for (int x = 0; x < ServerBase.Kernel.GameBind.Count; x++)
{
if (x >= ServerBase.Kernel.GameBind.Count) break;
if (ServerBase.Kernel.GameBind[x] != null)
{
if (ServerBase.Kernel.GameBind[x].Split(';')[0] == _socket.RemoteEndPoint.ToString().Split(':')[0])
{
change = true;
long date = long.Parse(ServerBase.Kernel.GameBind[x].Split(';')[1].ToString());
DateTime allow = DateTime.FromBinary(date);
if (DateTime.Now.Ticks > allow.AddSeconds(15).Ticks)
{
ServerBase.Kernel.GameBind[x]
= _socket.RemoteEndPoint.ToString().Split(':')[0] + ";"
+ DateTime.Now.Ticks.ToString();
}
else Join = false;
}
}
}
if (Join)
{
if (!change)
ServerBase.Kernel.GameBind.Add(_socket.RemoteEndPoint.ToString().Split(':')[0] + ";" + DateTime.Now.Ticks.ToString());
Client.GameState Client = new Conquer_Online_Server.Client.GameState(_socket);
Client.Send(Client.DHKeyExchance.CreateServerKeyPacket());
Client.Accepter();
}
else
{
_socket.Disconnect(false);
}
}
}
*/
/* public class NewConnecsion
{
private System.Net.Sockets.Socket _socket;
private SocketServerType Port;
public NewConnecsion(System.Net.Sockets.Socket socket, SocketServerType m_port)
{
if (m_port == Network.SocketServerType.AuthServer)
{
_socket = socket;
Port = m_port;
}
}
public void AuthServer_AnnounceNewConnection()
{
bool change = false;
bool Join = true;
for (int x = 0; x < ServerBase.Kernel.AuthBind.Count; x++)
{
if (x >= ServerBase.Kernel.AuthBind.Count) break;
if (ServerBase.Kernel.AuthBind[x] != null)
{
if (ServerBase.Kernel.AuthBind[x].Split(';')[0] == _socket.RemoteEndPoint.ToString().Split(':')[0])
{
change = true;
long date = long.Parse(ServerBase.Kernel.AuthBind[x].Split(';')[1].ToString());
DateTime allow = DateTime.FromBinary(date);
if (DateTime.Now.Ticks > allow.AddSeconds(15).Ticks)
{
ServerBase.Kernel.AuthBind[x] = _socket.RemoteEndPoint.ToString().Split(':')[0] + ";" + DateTime.Now.Ticks.ToString();
}
else Join = false;
}
}
}
if (Join)
{
if (!change)
ServerBase.Kernel.AuthBind.Add(_socket.RemoteEndPoint.ToString().Split(':')[0] + ";" + DateTime.Now.Ticks.ToString());
Client.AuthState authState = new Client.AuthState(_socket);
authState.Cryptographer = new Network.Cryptography.AuthCryptography();
Network.AuthPackets.PasswordCryptographySeed pcs = new PasswordCryptographySeed();
pcs.Seed = ServerBase.Kernel.Random.Next();
authState.PasswordSeed = pcs.Seed;
authState.Send(pcs);
authState.Accepter();
}
else
{
_socket.Disconnect(false);
}
}
}*/
}
}