Dispose() public method

public Dispose ( ) : void
return void
Esempio n. 1
0
        public void HandleRequest(HttpListenerContext context)
        {
            NameValueCollection query;
            using (var rdr = new StreamReader(context.Request.InputStream))
                query = HttpUtility.ParseQueryString(rdr.ReadToEnd());

            using (var db = new Database())
            {
                Account acc = db.Verify(query["guid"], query["password"]);
                if (acc == null)
                {
                    byte[] status = Encoding.UTF8.GetBytes("<Error>Wrong Username or Password</Error>");
                    context.Response.OutputStream.Write(status, 0, status.Length);
                }
                else
                {
                    var serializer = new XmlSerializer(acc.GetType(),
                        new XmlRootAttribute(acc.GetType().Name) {Namespace = ""});

                    var xws = new XmlWriterSettings();
                    xws.OmitXmlDeclaration = true;
                    xws.Encoding = Encoding.UTF8;
                    XmlWriter xtw = XmlWriter.Create(context.Response.OutputStream, xws);
                    serializer.Serialize(xtw, acc, acc.Namespaces);
                }
                db.Dispose();
            }
        }
Esempio n. 2
0
        public void HandleRequest(HttpListenerContext context)
        {
            NameValueCollection query;
            using (var rdr = new StreamReader(context.Request.InputStream))
                query = HttpUtility.ParseQueryString(rdr.ReadToEnd());

            using (var db = new Database())
            {
                Account acc = db.Verify(query["guid"], query["password"]);
                byte[] status;
                if (acc == null)
                    status = Encoding.UTF8.GetBytes("<Error>Bad login</Error>");
                else
                {
                    try
                    {
                        status = Encoding.UTF8.GetBytes(db.GetGuildBoard(acc));
                    }
                    catch (Exception e)
                    {
                        status = Encoding.UTF8.GetBytes("<Error>" + e.Message + "</Error>");
                    }
                }
                context.Response.OutputStream.Write(status, 0, status.Length);
                db.Dispose();
            }
        }
        public void HandleRequest(HttpListenerContext context)
        {
            NameValueCollection query;
            using (var rdr = new StreamReader(context.Request.InputStream))
                query = HttpUtility.ParseQueryString(rdr.ReadToEnd());

            using (var db = new Database())
            {
                Account acc = db.Verify(query["guid"], query["password"]);
                byte[] status;
                if (acc == null)
                {
                    status = Encoding.UTF8.GetBytes("<Error>Bad login</Error>");
                }
                else
                {
                    MySqlCommand cmd = db.CreateQuery();
                    cmd.CommandText = "UPDATE accounts SET password=SHA1(@password) WHERE id=@accId;";
                    cmd.Parameters.AddWithValue("@accId", acc.AccountId);
                    cmd.Parameters.AddWithValue("@password", query["newPassword"]);
                    if (cmd.ExecuteNonQuery() > 0)
                        status = Encoding.UTF8.GetBytes("<Success />");
                    else
                        status = Encoding.UTF8.GetBytes("<Error>Internal error</Error>");
                }
                context.Response.OutputStream.Write(status, 0, status.Length);
                db.Dispose();
            }
        }
Esempio n. 4
0
        public void HandleRequest(HttpListenerContext context)
        {
            NameValueCollection query;
            using (var rdr = new StreamReader(context.Request.InputStream))
                query = HttpUtility.ParseQueryString(rdr.ReadToEnd());
            using (var db = new Database())
            {
                Account acc = db.GetAccount(int.Parse(query["accountId"]));
                Char chr = db.LoadCharacter(acc, int.Parse(query["charId"]));

                MySqlCommand cmd = db.CreateQuery();
                cmd.CommandText = @"SELECT time, killer, firstBorn FROM death WHERE accId=@accId AND chrId=@charId;";
                cmd.Parameters.AddWithValue("@accId", query["accountId"]);
                cmd.Parameters.AddWithValue("@charId", query["charId"]);
                int time;
                string killer;
                bool firstBorn;
                using (MySqlDataReader rdr = cmd.ExecuteReader())
                {
                    rdr.Read();
                    time = Database.DateTimeToUnixTimestamp(rdr.GetDateTime("time"));
                    killer = rdr.GetString("killer");
                    firstBorn = rdr.GetBoolean("firstBorn");
                }
                db.Dispose();
                using (var wtr = new StreamWriter(context.Response.OutputStream))
                    wtr.Write(chr.FameStats.Serialize(acc, chr, time, killer, firstBorn));
            }
        }
Esempio n. 5
0
        public void HandleRequest(HttpListenerContext context)
        {
            string status;
            using (var db = new Database())
            {
                NameValueCollection query = HttpUtility.ParseQueryString(context.Request.Url.Query);

                MySqlCommand cmd = db.CreateQuery();
                cmd.CommandText = "SELECT id FROM accounts WHERE uuid=@uuid";
                cmd.Parameters.AddWithValue("@uuid", query["guid"]);
                object id = cmd.ExecuteScalar();

                if (id != null)
                {
                    try
                    {
                        //int amount = int.Parse(query["jwt"]);
                        //cmd = db.CreateQuery();
                        //cmd.CommandText = "UPDATE stats SET credits = credits + @amount WHERE accId=@accId";
                        //cmd.Parameters.AddWithValue("@accId", (int)id);
                        //cmd.Parameters.AddWithValue("@amount", amount);
                        //int result = cmd.ExecuteNonQuery();
                        //if (result > 0)
                        //    status = "Ya done...";
                        //else
                        //    status = "Internal error :(";
                        status = "Yeah... We kind of fixed this...";
                    }
                    catch
                    {
                        status = "Yeah... We kind of fixed this...";
                    }
                }
                else
                {
                    status = "Yeah... We kind of fixed this...";
                }
                db.Dispose();
            }

            byte[] res = Encoding.UTF8.GetBytes(
                @"<html>
    <head>
        <title>Nope</title>
        <script>window.close();</script>
    </head>
    <body style='background: #333333'>
        <h1 style='color: #EEEEEE; text-align: center'>
            " + status + @"
        </h1>
    </body>
</html>");
            context.Response.OutputStream.Write(res, 0, res.Length);
        }
Esempio n. 6
0
        public void HandleRequest(HttpListenerContext context)
        {
            NameValueCollection query;
            using (var rdr = new StreamReader(context.Request.InputStream))
                query = HttpUtility.ParseQueryString(rdr.ReadToEnd());

            using (var db = new Database())
            {
                byte[] status;
                if (!IsValidUsername(query["newGUID"]))
                    status = Encoding.UTF8.GetBytes("<Error>Invalid Username</Error>");
                if (db.HasUuid(query["guid"]) &&
                    db.Verify(query["guid"], "") != null)
                {
                    if (db.HasUuid(query["newGUID"]))
                        status = Encoding.UTF8.GetBytes("<Error>Username is already taken!</Error>");
                    else
                    {
                        MySqlCommand cmd = db.CreateQuery();
                        cmd.CommandText =
                            "UPDATE accounts SET uuid=@newUuid, name=@newUuid, password=SHA1(@password), guest=FALSE WHERE uuid=@uuid, name=@name;";
                        cmd.Parameters.AddWithValue("@uuid", query["guid"]);
                        cmd.Parameters.AddWithValue("@newUuid", query["newGUID"]);
                        cmd.Parameters.AddWithValue("@password", query["newPassword"]);

                        if (cmd.ExecuteNonQuery() > 0)
                            status = Encoding.UTF8.GetBytes("<Success />");
                        else
                            status = Encoding.UTF8.GetBytes("<Error>Internal Error</Error>");
                    }
                }
                else
                {
                    if (db.Register(query["newGUID"], query["newPassword"], false) != null)
                        status = Encoding.UTF8.GetBytes("<Success />");
                    else
                        status = Encoding.UTF8.GetBytes("<Error>Internal Error</Error>");
                }
                context.Response.OutputStream.Write(status, 0, status.Length);
                db.Dispose();
            }
        }
Esempio n. 7
0
        public void HandleRequest(HttpListenerContext context)
        {
            NameValueCollection query;
            using (var rdr = new StreamReader(context.Request.InputStream))
                query = HttpUtility.ParseQueryString(rdr.ReadToEnd());

            using (var db = new Database())
            {
                Account acc = db.Verify(query["guid"], query["password"]);
                byte[] status;
                if (acc == null)
                {
                    status = Encoding.UTF8.GetBytes("<Error>Bad login</Error>");
                }
                else
                {
                    MySqlCommand cmd = db.CreateQuery();
                    object exescala;
                    cmd.CommandText = "SELECT COUNT(name) FROM accounts WHERE name=@name;";
                    cmd.Parameters.AddWithValue("@name", query["name"]);
                    exescala = cmd.ExecuteScalar();
                    if (int.Parse(exescala.ToString()) > 0)
                        status = Encoding.UTF8.GetBytes("<Error>Duplicated name</Error>");
                    else
                    {
                        cmd = db.CreateQuery();
                        cmd.CommandText = "UPDATE accounts SET name=@name, namechosen=TRUE WHERE id=@accId;";
                        cmd.Parameters.AddWithValue("@accId", acc.AccountId);
                        cmd.Parameters.AddWithValue("@name", query["name"]);
                        if (cmd.ExecuteNonQuery() != 0)
                            status = Encoding.UTF8.GetBytes("<Success />");
                        else
                            status = Encoding.UTF8.GetBytes("<Error>Internal error</Error>");
                    }
                }
                context.Response.OutputStream.Write(status, 0, status.Length);
                db.Dispose();
            }
        }
Esempio n. 8
0
        static void Main(string[] args)
        {
            XmlConfigurator.ConfigureAndWatch(new FileInfo("log4net.config"));

            Thread.CurrentThread.CurrentCulture = CultureInfo.InvariantCulture;
            Thread.CurrentThread.Name = "Entry";

            using (Settings = new SimpleSettings("wServer"))
            {
                var db = new Database(Settings.GetValue("conn"));
                RealmManager manager = new RealmManager(
                    Settings.GetValue<int>("maxClient", "100"),
                    Settings.GetValue<int>("tps", "20"),
                    db);

                manager.Initialize();
                manager.Run();

                Server server = new Server(manager, 2050);
                PolicyServer policy = new PolicyServer();

                Console.CancelKeyPress += (sender, e) => e.Cancel = true;

                policy.Start();
                server.Start();
                log.Info("Server initialized.");

                while (Console.ReadKey(true).Key != ConsoleKey.Escape) ;

                log.Info("Terminating...");
                server.Stop();
                policy.Stop();
                manager.Stop();
                db.Dispose();
                log.Info("Server terminated.");
            }
        }
 public void Execute(Player player, string[] args)
 {
     if (args.Length < 2)
     {
         player.SendHelp("Usage: /setguild <username> <guild id>");
     }
     else
     {
         try
         {
             using (var dbx = new Database())
             {
                 var cmd = dbx.CreateQuery();
                 cmd.CommandText = "UPDATE accounts SET guild=@guild WHERE name=@name";
                 cmd.Parameters.AddWithValue("@guild", args[1]);
                 cmd.Parameters.AddWithValue("@name", args[0]);
                 if (cmd.ExecuteNonQuery() == 0)
                 {
                     player.SendInfo("Could not change guild.");
                 }
                 else
                 {
                     player.SendInfo("Guild successfully changed");
                     Console.ForegroundColor = ConsoleColor.Yellow;
                     Console.Out.WriteLine(args[1] + "'s guild has been changed");
                     Console.ForegroundColor = ConsoleColor.White;
                 }
                 dbx.Dispose();
             }
         }
         catch
         {
             player.SendInfo(
                 "Could not change guild, please change in database.                                Use /setguild <username> <guild id>");
         }
     }
 }
Esempio n. 10
0
 public void Execute(Player player, string[] args)
 {
     try
     {
         if (args.Length < 2)
         {
             player.SendHelp("Use /currency <currency> <player> <amount>");
         }
         else if (args[0] == "ztokens")
         {
             var plr = RealmManager.FindPlayer(args[1]);
             using (var db = new Database())
             {
                 plr.zTokens = db.UpdateCredit(plr.Client.Account, int.Parse(args[2]));
                 plr.UpdateCount++;
                 db.Dispose();
             }
         }
         else if (args[0] == "gold")
         {
             using (var db = new Database())
             {
                 var plr = RealmManager.FindPlayer(args[1]);
                 plr.Credits = db.UpdateCredit(plr.Client.Account, int.Parse(args[2]));
                 plr.UpdateCount++;
                 db.Dispose();
             }
         }
         else if (args[0] == "fame")
         {
             var plr = RealmManager.FindPlayer(args[1]);
             using (var db = new Database())
             {
                 plr.CurrentFame = db.UpdateFame(plr.Client.Account, int.Parse(args[2]));
                 plr.UpdateCount++;
                 db.Dispose();
             }
         }
     }
     catch
     {
         player.SendError("Error!");
     }
 }
Esempio n. 11
0
 public void Execute(Player player, string[] args)
 {
     if (args.Length == 0)
     {
         player.SendHelp("Usage: /unban <username>");
     }
     try
     {
         using (var dbx = new Database())
         {
             var cmd = dbx.CreateQuery();
             cmd.CommandText = "UPDATE accounts SET banned=0 WHERE name=@name";
             cmd.Parameters.AddWithValue("@name", args[0]);
             if (cmd.ExecuteNonQuery() == 0)
             {
                 player.SendInfo("Could not unban");
             }
             else
             {
                 player.SendInfo("Account successfully Unbanned");
                 Console.ForegroundColor = ConsoleColor.Yellow;
                 Console.Out.WriteLine(args[1] + " was Unbanned.");
                 Console.ForegroundColor = ConsoleColor.White;
             }
             dbx.Dispose();
         }
     }
     catch
     {
         player.SendInfo("Could not unban, please unban in database");
     }
 }
Esempio n. 12
0
        public void Execute(Player player, string[] args)
        {
            if (args.Length == 0)
            {
                player.SendHelp("Usage: /whitelist <username>");
            }
            try
            {
                using (var dbx = new Database())
                {
                    var cmd = dbx.CreateQuery();
                    cmd.CommandText = "UPDATE accounts SET rank=1 WHERE name=@name";
                    cmd.Parameters.AddWithValue("@name", args[0]);
                    if (cmd.ExecuteNonQuery() == 0)
                    {
                        player.SendInfo("Could not whitelist!");
                    }
                    else
                    {
                        player.SendInfo("Account successfully whitelisted!");
                        Console.ForegroundColor = ConsoleColor.Yellow;
                        Console.Out.WriteLine(player.nName + " Has Whitelisted " + args[0]);
                        Console.ForegroundColor = ConsoleColor.White;

                        var dir = @"logs";
                        if (!Directory.Exists(dir))
                            Directory.CreateDirectory(dir);
                        using (var writer = new StreamWriter(@"logs\WhitelistLog.log", true))
                        {
                            writer.WriteLine("[" + DateTime.Now + "]" + player.nName + " Has Whitelisted " + args[0]);
                        }
                    }
                    dbx.Dispose();
                }
            }
            catch
            {
                player.SendInfo("Could not whitelist!");
            }
        }
Esempio n. 13
0
        public void Execute(Player player, string[] args)
        {
            if (args.Length < 1)
            {
                player.SendHelp("Usage: /settag [username] <tag>");
            }
            else
            {
                if (args.Length == 1)
                {
                    using (var db = new Database())
                    {

                        var cmd = db.CreateQuery();
                        cmd.CommandText = "UPDATE accounts SET tag=@tag WHERE name=@name";
                        cmd.Parameters.AddWithValue("@name", player.nName);
                        cmd.Parameters.AddWithValue("@tag", args[0]);
                        if (cmd.ExecuteNonQuery() == 0)
                        {
                            player.SendInfo("Could not set tag");
                        }
                        else
                        {
                            player.Name = "[" + args[0] + "] " + player.Client.Account.Name;
                            player.SendInfo("Tag succesfully changed");
                        }
                        db.Dispose();
                    }
                }
                else if (args.Length == 2)
                {
                    var plr = player.Owner.GetUniqueNamedPlayerRough(string.Join(" ", args[0]));
                    if (plr != null)
                    {
                        using (var db = new Database())
                        {

                            var cmd = db.CreateQuery();
                            cmd.CommandText = "UPDATE accounts SET tag=@tag WHERE name=@name";
                            cmd.Parameters.AddWithValue("@name", args[0]);
                            cmd.Parameters.AddWithValue("@tag", args[1]);
                            if (cmd.ExecuteNonQuery() == 0)
                            {
                                player.SendInfo("Could not set tag");
                            }
                            else
                            {
                                plr.Name = "[" + args[1] + "] " + plr.Client.Account.Name;
                                player.SendInfo("Tag succesfully changed");
                            }
                            db.Dispose();
                        }
                    }
                    else
                    {
                        player.SendError("Could not find player");
                    }
                }
            }
        }
Esempio n. 14
0
        public void Execute(Player player, string[] args)
        {
            if (args.Length < 2)
            {
                player.SendHelp("Usage: /ban <username> <reason>");
            }
            else
            {
                try
                {
                    using (var dbx = new Database())
                    {

                        var dir = @"logs";
                        var cmd = dbx.CreateQuery();
                        cmd.CommandText = "UPDATE accounts SET banned=1, rank=0 WHERE name=@name";
                        cmd.Parameters.AddWithValue("@name", args[0]);
                        if (cmd.ExecuteNonQuery() == 0)
                        {
                            player.SendInfo("Could not ban");
                        }
                        else
                        {
                            string reason = string.Join(" ", args.Skip(1).ToArray()).Trim();
                            Player target = null;
                            if ((target = RealmManager.FindPlayer(string.Join(" ", args[0]))) != null)
                            {
                                target.Client.Disconnect();
                                Console.ForegroundColor = ConsoleColor.Yellow;
                                Console.Out.WriteLine(string.Join(" ", args) + " was Banned.");
                                Console.ForegroundColor = ConsoleColor.White;
                            }
                            if (!Directory.Exists(dir))
                            {
                                Directory.CreateDirectory(dir);
                            }
                            using (var writer = new StreamWriter(@"logs\Bans.log", true))
                            {
                                writer.WriteLine(player.Name + " Banned " + args[0] + ". " + "Reason: " + reason);
                            }
                            player.SendInfo("Account successfully Banned");
                        }
                        dbx.Dispose();
                    }
                }
                catch
                {
                    player.SendInfo("Could not ban");
                }
            }
        }
 public void Save()
 {
     try
     {
         if (Database != null)
         {
             if (Character != null)
             {
                 Player.SaveToCharacter();
                 if (Player.Owner.Id != -6)
                     Database.SaveCharacter(Account, Character);
             }
             Database.Dispose();
             Database = null;
         }
         else
         {
             Database = new Database();
             if (Character != null)
             {
                 Player.SaveToCharacter();
                 if (Player.Owner.Id != -6)
                     Database.SaveCharacter(Account, Character);
             }
             Database.Dispose();
             Database = null;
         }
     }
     catch
     {
     }
 }
Esempio n. 16
0
 public void Execute(Player player, string[] args)
 {
     if (args.Length == 0 || args.Length == 1)
     {
         player.SendHelp("Use /rename <Old Player Name> <New Player Name>");
     }
     else if (args.Length == 2)
     {
         using (var db = new Database())
         {
             var db1 = db.CreateQuery();
             db1.CommandText = "SELECT COUNT(name) FROM accounts WHERE name=@name;";
             db1.Parameters.AddWithValue("@name", args[1]);
             if ((int) (long) db1.ExecuteScalar() > 0)
             {
                 player.SendError("Name Already In Use.");
             }
             else
             {
                 db1 = db.CreateQuery();
                 db1.CommandText = "SELECT COUNT(name) FROM accounts WHERE name=@name";
                 db1.Parameters.AddWithValue("@name", args[0]);
                 if ((int) (long) db1.ExecuteScalar() < 1)
                 {
                     player.SendError("Name Not Found.");
                 }
                 else
                 {
                     db1 = db.CreateQuery();
                     db1.CommandText = "UPDATE accounts SET name=@newName, namechosen=TRUE WHERE name=@oldName;";
                     db1.Parameters.AddWithValue("@newName", args[1]);
                     db1.Parameters.AddWithValue("@oldName", args[0]);
                     if (db1.ExecuteNonQuery() > 0)
                     {
                         foreach (var playerX in RealmManager.Worlds)
                         {
                             if (playerX.Key != 0)
                             {
                                 var world = playerX.Value;
                                 foreach (var p in world.Players)
                                 {
                                     var Client = p.Value;
                                     if ((player.Name.ToLower() == args[0].ToLower()) && player.NameChosen)
                                     {
                                         player.Name = args[1];
                                         player.NameChosen = true;
                                         player.UpdateCount++;
                                         break;
                                     }
                                 }
                             }
                         }
                         player.SendInfo("Success!");
                         //
                     }
                     else
                     {
                         player.SendError("Internal Server Error Occurred.");
                     }
                 }
             }
             db.Dispose();
         }
     }
 }
        public override void Tick(RealmTime time)
        {
            if (Players.Count > 0 && !Flags["finished"])
            {
                if (Flags["started"] && !Flags["counting"])
                {
                    if (Enemies.Count < 1 + Pets.Count)
                    {
                        if (monstervalue != 0)
                        {
                            var db = new Database();
                            foreach (var i in Players)
                            {
                                i.Value.CurrentFame =
                                    i.Value.Client.Account.Stats.Fame = db.UpdateFame(i.Value.Client.Account, (int)monstervalue);
                                i.Value.UpdateCount++;
                                i.Value.Client.SendPacket(new NotificationPacket
                                {
                                    Color = new ARGB(0xFFFF6600),
                                    ObjectId = i.Value.Id,
                                    Text = "+" + (int)monstervalue + " Fame"
                                });
                                if (Math.IEEERemainder(monstervalue, 1000) == 0)
                                {
                                    i.Value.Credits = i.Value.Client.Account.Credits = db.UpdateCredit(i.Value.Client.Account, 1);
                                    i.Value.UpdateCount++;
                                }
                            }
                            db.Dispose();
                            Countdown(5);
                        }

                    }
                }

                else if (!Flags["started"] && !Flags["counting"])
                {
                    foreach (var i in RealmManager.Clients.Values)
                        i.SendPacket(new TextPacket
                        {
                            Stars = -1,
                            BubbleTime = 0,
                            Name = "#Announcement",
                            Text = "A Nexus Defense Game has been started. Closing in 1 minute!"
                        });
                    Flags["counting"] = true;
                    Countdown(60);
                }

            }
            base.Tick(time);
        }
Esempio n. 18
0
 public void Execute(Player player, string[] args)
 {
     if (args.Length < 2)
     {
         player.SendHelp("Usage: /grank <username> <number>");
     }
     else
     {
         try
         {
             using (var dbx = new Database())
             {
                 var cmd = dbx.CreateQuery();
                 cmd.CommandText = "UPDATE accounts SET guildRank=@guildRank WHERE name=@name";
                 cmd.Parameters.AddWithValue("@guildRank", args[1]);
                 cmd.Parameters.AddWithValue("@name", args[0]);
                 if (cmd.ExecuteNonQuery() == 0)
                 {
                     player.SendInfo("Could not change guild rank. Use 10, 20, 30, 40, or 50 (invisible)");
                 }
                 else
                 {
                     player.SendInfo("Guild rank successfully changed");
                     Console.ForegroundColor = ConsoleColor.Yellow;
                     Console.Out.WriteLine(args[1] + "'s guild rank has been changed");
                     Console.ForegroundColor = ConsoleColor.White;
                 }
                 dbx.Dispose();
             }
         }
         catch
         {
             player.SendInfo("Could not change rank, please change rank in database");
         }
     }
 }
        public void TickLoop()
        {
            log.Info("Database loop started.");
            do
            {
                //First finish every db query
                if (Manager.Terminating)
                {
                    bool empty = true;
                    foreach (var i in pendings)
                    {
                        if (i.Count > 0)
                        {
                            empty = false;
                            break;
                        }
                    }
                    if (empty) break;
                }

                foreach (ConcurrentQueue<Action<Database>> i in pendings)
                {
                    Action<Database> callback;
                    while (i.TryDequeue(out callback))
                    {
                        try
                        {
                            Database db = new Database(Program.Settings.GetValue("conn"));
                            callback(db);
                            db.Dispose();
                        }
                        catch (Exception ex)
                        {
                            log.Error(ex);
                        }
                    }
                }
            } while (true);
            log.Info("Database loop stopped.");
        }
Esempio n. 20
0
 public void Execute(Player player, string[] args)
 {
     try
     {
         if (args.Length == 0)
         {
             player.SendHelp("Use /gold <amount>");
         }
         else
         {
             using (var db = new Database())
             {
                 player.Credits = db.UpdateCredit(player.Client.Account, int.Parse(args[0]));
                 player.UpdateCount++;
                 db.Dispose();
             }
         }
     }
     catch
     {
         player.SendError("Error");
     }
 }
Esempio n. 21
0
        public override void Tick(RealmTime time)
        {
            if (Players.Count > 0 && !Flags["finished"])
            {
                if (Flags["started"] && !Flags["counting"])
                {
                    if (Enemies.Count < 1 + Pets.Count)
                    {
                        wave++;
                        zombieAmount += Players.Count;
                        famePot += wave * 10 / 2;
                        Flags["counting"] = true;
                        Countdown(5);
                    }
                }

                else if (!Flags["started"] && !Flags["counting"])
                {
                    foreach (var i in RealmManager.Clients.Values)
                        i.SendPacket(new TextPacket
                        {
                            Stars = -1,
                            BubbleTime = 0,
                            Name = "#Announcement",
                            Text = "A zombie minigame has been started. Closing in 1 minute!"
                        });
                    EnterWorld(tower);
                    Flags["counting"] = true;
                    Countdown(60);
                }
                else if (Flags["finished"] && !Flags["counting"])
                {
                    foreach (var i in Players)
                    {
                        var db = new Database();
                        i.Value.CurrentFame =
                            i.Value.Client.Account.Stats.Fame = db.UpdateFame(i.Value.Client.Account, famePot);
                        i.Value.UpdateCount++;
                        i.Value.Client.SendPacket(new NotificationPacket
                        {
                            ObjectId = i.Value.Id,
                            Color = new ARGB(0xFFFF6600),
                            Text = "+" + famePot + " Fame"
                        });
                        Flags["counting"] = true;
                        db.Dispose();

                    }
                }
            }

            base.Tick(time);
        }
Esempio n. 22
0
        public Player(ClientProcessor psr)
            : base((short) psr.Character.ObjectType, psr.Random)
        {
            this.psr = psr;
            statsMgr = new StatsManager(this);
            nName = psr.Account.Name;
            AccountId = psr.Account.AccountId;
            if (psr.Account.Tag != "")
            {
                Name = "[" + psr.Account.Tag + "] " + psr.Account.Name;
            }
            else
            {
                Name = psr.Account.Name;
            }
            Level = psr.Character.Level;
            Experience = psr.Character.Exp;
            ExperienceGoal = GetExpGoal(psr.Character.Level);
            if (psr.Account.Name == "Lucifer" || psr.Account.Name == "Luciferus" || psr.Account.Name == "Amaymon")
                Stars = 666;
            else if (psr.Account.Rank > 2)
                Stars = 100;
            else if (psr.Account.Rank > 1)
                Stars = 95;
            else
                Stars = GetStars(); //Temporary (until pub server)
            Texture1 = psr.Character.Tex1;
            Texture2 = psr.Character.Tex2;
            Credits = psr.Account.Credits;
            zTokens = psr.Account.zTokens;
            NameChosen = psr.Account.NameChosen;
            CurrentFame = psr.Account.Stats.Fame;
            Fame = psr.Character.CurrentFame;
            var state = psr.Account.Stats.ClassStates.SingleOrDefault(_ => _.ObjectType == ObjectType);
            FameGoal = GetFameGoal(state != null ? state.BestFame : 0);
            Glowing = false;
            Guild = psr.Account.Guild.Name;
            GuildRank = psr.Account.Guild.Rank;
            if (psr.Character.HitPoints <= 0)
            {
                HP = psr.Character.MaxHitPoints;
                psr.Character.HitPoints = psr.Character.MaxHitPoints;
            }
            else
                HP = psr.Character.HitPoints;
            MP = psr.Character.MagicPoints;
            ConditionEffects = 0;
            OxygenBar = 100;

            Decision = 0;
            price = new Prices();

            Locked = psr.Account.Locked ?? new List<int>();
            Ignored = psr.Account.Ignored ?? new List<int>();
            try
            {
                using (var dbx = new Database())
                {
                    Locked = dbx.GetLockeds(AccountId);
                    Ignored = dbx.GetIgnoreds(AccountId);

                    dbx.Dispose();
                }
            }
            catch
            {
            }

            Inventory =
                psr.Character.Equipment.Select(
                    _ => _ == -1 ? null : (XmlDatas.ItemDescs.ContainsKey(_) ? XmlDatas.ItemDescs[_] : null)).ToArray();
            SlotTypes = Utils.FromCommaSepString32(XmlDatas.TypeToElement[ObjectType].Element("SlotTypes").Value);
            Stats = new[]
            {
                psr.Character.MaxHitPoints,
                psr.Character.MaxMagicPoints,
                psr.Character.Attack,
                psr.Character.Defense,
                psr.Character.Speed,
                psr.Character.HpRegen,
                psr.Character.MpRegen,
                psr.Character.Dexterity
            };

            Pet = null;
        }
Esempio n. 23
0
 public override void Tick(RealmTime time)
 {
     if (Players.Count > 0 && !Flags["finished"])
     {
         if (Flags["started"] && Flags["counting"])
         {
             if (Enemies.Count < 15 + Pets.Count)
             {
                 SheepSpawns.Shuffle();
                 SpawningSheep.Shuffle();
                 var e = Entity.Resolve(XmlData.IdToObjectType[SpawningSheep.First()]);
                 e.Move(SheepSpawns[0].X, SheepSpawns[0].Y);
                 EnterWorld(e);
             }
         }
         else if (Flags["started"] && !Flags["counting"])
         {
             var div = (int)Math.Ceiling((double)(FamePot / Players.Count));
             double golddivider = HerdedSheep / 20;
             var tokens = (int)Math.Floor(golddivider);
             var db = new Database();
             BroadcastPacket(new TextPacket
             {
                 BubbleTime = 0,
                 Stars = -1,
                 Name = "#Sheep Herding",
                 Text = "Time's up! You each win " + div + " fame!"
             }, null);
             foreach (var i in Players)
             {
                 i.Value.CurrentFame =
                     i.Value.Client.Account.Stats.Fame = db.UpdateFame(i.Value.Client.Account, div);
                 i.Value.UpdateCount++;
                 i.Value.Client.SendPacket(new NotificationPacket
                 {
                     ObjectId = i.Value.Id,
                     Color = new ARGB(0xFFFF6600),
                     Text = "+" + div + " Fame"
                 });
                 i.Value.Credits = i.Value.Client.Account.Credits = db.UpdateCredit(i.Value.Client.Account, tokens);
                 i.Value.UpdateCount++;
             }
             db.Dispose();
             foreach (var i in Enemies)
                 if (!i.Value.isPet)
                     LeaveWorld(i.Value);
             Flags["finished"] = true;
         }
         else if (!Flags["started"] && !Flags["counting"])
         {
             foreach (var i in RealmManager.Clients.Values)
                 i.SendPacket(new TextPacket
                 {
                     Stars = -1,
                     BubbleTime = 0,
                     Name = "#Announcement",
                     Text = "A sheep herding minigame has been started. Closing in 1 minute!"
                 });
             Flags["counting"] = true;
             Countdown(60);
         }
     }
     base.Tick(time);
 }
Esempio n. 24
0
        public void HandleRequest(HttpListenerContext context)
        {
            NameValueCollection query;
            using (var rdr = new StreamReader(context.Request.InputStream))
                query = HttpUtility.ParseQueryString(rdr.ReadToEnd());

            byte[] status = null;

            string span = "";
            switch (query["timespan"])
            {
                case "week":
                    span = "(time >= DATE_SUB(NOW(), INTERVAL 1 WEEK))";
                    break;
                case "month":
                    span = "(time >= DATE_SUB(NOW(), INTERVAL 1 MONTH))";
                    break;
                case "all":
                    span = "TRUE";
                    break;
                default:
                    status = Encoding.UTF8.GetBytes("<Error>Invalid fame list</Error>");
                    break;
            }
            string ac = "FALSE";
            if (query["accountId"] != null)
                ac = "(accId=@accId AND chrId=@charId)";

            if (status == null)
            {
                var doc = new XmlDocument();
                XmlElement root = doc.CreateElement("FameList");

                XmlAttribute spanAttr = doc.CreateAttribute("timespan");
                spanAttr.Value = query["timespan"];
                root.Attributes.Append(spanAttr);

                doc.AppendChild(root);

                using (var db = new Database())
                {
                    MySqlCommand cmd = db.CreateQuery();
                    cmd.CommandText = @"SELECT * FROM death WHERE " + span + @" OR " + ac +
                                      @" ORDER BY totalFame DESC LIMIT 20;";
                    if (query["accountId"] != null)
                    {
                        cmd.Parameters.AddWithValue("@accId", query["accountId"]);
                        cmd.Parameters.AddWithValue("@charId", query["charId"]);
                    }
                    using (MySqlDataReader rdr = cmd.ExecuteReader())
                    {
                        while (rdr.Read())
                        {
                            XmlElement elem = doc.CreateElement("FameListElem");

                            XmlAttribute accIdAttr = doc.CreateAttribute("accountId");
                            accIdAttr.Value = rdr.GetInt32("accId").ToString();
                            elem.Attributes.Append(accIdAttr);
                            XmlAttribute chrIdAttr = doc.CreateAttribute("charId");
                            chrIdAttr.Value = rdr.GetInt32("chrId").ToString();
                            elem.Attributes.Append(chrIdAttr);

                            root.AppendChild(elem);

                            XmlElement nameElem = doc.CreateElement("Name");
                            nameElem.InnerText = rdr.GetString("name");
                            elem.AppendChild(nameElem);
                            XmlElement objTypeElem = doc.CreateElement("ObjectType");
                            objTypeElem.InnerText = rdr.GetString("charType");
                            elem.AppendChild(objTypeElem);
                            XmlElement tex1Elem = doc.CreateElement("Tex1");
                            tex1Elem.InnerText = rdr.GetString("tex1");
                            elem.AppendChild(tex1Elem);
                            XmlElement tex2Elem = doc.CreateElement("Tex2");
                            tex2Elem.InnerText = rdr.GetString("tex2");
                            elem.AppendChild(tex2Elem);
                            XmlElement equElem = doc.CreateElement("Equipment");
                            equElem.InnerText = rdr.GetString("items");
                            elem.AppendChild(equElem);
                            XmlElement fameElem = doc.CreateElement("TotalFame");
                            fameElem.InnerText = rdr.GetString("totalFame");
                            elem.AppendChild(fameElem);
                        }
                    }
                    db.Dispose();
                }

                var settings = new XmlWriterSettings();
                settings.OmitXmlDeclaration = true;
                using (XmlWriter wtr = XmlWriter.Create(context.Response.OutputStream))
                    doc.Save(wtr);
            }
        }
        public void TextBoxButton(TextBoxButtonPacket pkt)
        {
            var type = pkt.Type;

            if (type == "test")
            {
                psr.SendPacket(new TextBoxPacket
                {
                    Button1 = "Yes",
                    Button2 = "No",
                    Message = "Do you want to enter the testing arena?",
                    Title = "Testing Arena Confirmation",
                    Type = "EnterTestArena"
                });
            }
            if (type == "NewClient")
            {
                psr.Disconnect();
            }
            if (type == "DecideArena")
            {
                if (pkt.Button == 1)
                {
                    psr.SendPacket(new TextBoxPacket
                    {
                        Button1 = "Enter",
                        Button2 = "Cancel",
                        Message = "Host an arena at the price of x fame?",
                        Title = "Arena Host Confirmation",
                        Type = "EnterArena2"
                    });
                }
                else
                {
                    psr.SendPacket(new TextBoxPacket
                    {
                        Button1 = "Enter",
                        Button2 = "Cancel",
                        Message = "Enter the arena solo at the price of 150 fame?",
                        Title = "Solo Arena Confirmation",
                        Type = "EnterArena1"
                    });
                }
            }
            if (type == "EnterTestArena")
            {
                if (pkt.Button == 1)
                {
                    if (Client.Account.Stats.Fame >= 150)
                    {
                        /*RealmManager.PlayerWorldMapping.TryAdd(this.AccountId, Owner);
                        psr.Reconnect(new ReconnectPacket()
                        {
                            Host = "",
                            Port = 2050,
                            GameId = world.Id,
                            Name = world.Name,
                            Key = Empty<byte>.Array,
                        });
                        */
                    }
                    else
                    {
                        SendHelp("Not Enough Fame");
                    }
                }
                else
                {
                    SendInfo("Cancelled entering arena.");
                }
            }
            if (type == "EnterArena1")
            {
                if (pkt.Button == 1)
                {
                    if (Client.Account.Stats.Fame >= 50)
                    {
                        using (var db = new Database())
                        {
                            db.UpdateFame(psr.Account, -50);
                            db.Dispose();
                        }

                        var world = RealmManager.GetWorld(World.NEXUS_ID);
                        var fworld = false;
                        foreach (var i in RealmManager.Worlds)
                            if (i.Value is BattleArenaMap)
                                if ((i.Value as BattleArenaMap).Joinable)
                                {
                                    world = i.Value;
                                    fworld = true;
                                    break;
                                }
                        if (!fworld)
                            world = RealmManager.AddWorld(new BattleArenaMap());

                        psr.Reconnect(new ReconnectPacket
                        {
                            Host = "",
                            Port = 2050,
                            GameId = world.Id,
                            Name = world.Name,
                            Key = Empty<byte>.Array,
                        });
                    }
                    else
                    {
                        SendHelp("Not Enough Fame");
                    }
                }
                else
                {
                    SendInfo("Cancelled entering arena.");
                }
            }
            if (type == "EnterArena2")
            {
                if (pkt.Button == 1)
                {
                    var world = RealmManager.GetWorld(World.NEXUS_ID);
                    var fworld = false;
                    foreach (var i in RealmManager.Worlds)
                        if (i.Value is BattleArenaMap2)
                            if ((i.Value as BattleArenaMap2).Joinable)
                            {
                                world = i.Value;
                                fworld = true;
                                break;
                            }
                    if (!fworld)
                        world = RealmManager.AddWorld(new BattleArenaMap2());

                    psr.Reconnect(new ReconnectPacket
                    {
                        Host = "",
                        Port = 2050,
                        GameId = world.Id,
                        Name = world.Name,
                        Key = Empty<byte>.Array,
                    });
                }
                else
                {
                    SendInfo("Cancelled entering arena.");
                }
            }
            if (type == "SheepHerding")
            {
                if (pkt.Button == 1)
                {
                    if (Client.Account.Stats.Fame >= 50)
                    {
                        using (var db = new Database())
                        {
                            db.UpdateFame(psr.Account, -50);
                            db.Dispose();
                        }

                        var world = RealmManager.GetWorld(World.NEXUS_ID);
                        var fworld = false;
                        foreach (var i in RealmManager.Worlds)
                            if (i.Value is Herding)
                                if ((i.Value as Herding).Joinable)
                                {
                                    world = i.Value;
                                    fworld = true;
                                    break;
                                }
                        if (!fworld)
                            world = RealmManager.AddWorld(new Herding());

                        psr.Reconnect(new ReconnectPacket
                        {
                            Host = "",
                            Port = 2050,
                            GameId = world.Id,
                            Name = world.Name,
                            Key = Empty<byte>.Array,
                        });
                    }
                    else
                    {
                        SendHelp("Not Enough Fame");
                    }
                }
                else
                {
                    SendInfo("Cancelled entering sheep herding.");
                }
            }
            if (type == "Zombies")
            {
                if (pkt.Button == 1)
                {
                    if (Client.Account.Stats.Fame >= 10)
                    {
                        using (var db = new Database())
                        {
                            db.UpdateFame(psr.Account, -10);
                            db.Dispose();
                        }

                        var world = RealmManager.GetWorld(World.NEXUS_ID);
                        var fworld = false;
                        foreach (var i in RealmManager.Worlds)
                            if (i.Value is ZombieMG)
                                if ((i.Value as ZombieMG).Joinable)
                                {
                                    world = i.Value;
                                    fworld = true;
                                    break;
                                }
                        if (!fworld)
                            world = RealmManager.AddWorld(new ZombieMG());

                        psr.Reconnect(new ReconnectPacket
                        {
                            Host = "",
                            Port = 2050,
                            GameId = world.Id,
                            Name = world.Name,
                            Key = Empty<byte>.Array,
                        });
                    }
                    else
                    {
                        SendHelp("Not Enough Fame");
                    }
                }
                else
                {
                    SendInfo("Cancelled entering zombies.");
                }
            }
            if (type == "SlotMachine1")
            {
                if (pkt.Button == 1)
                {
                    if (Client.Account.Stats.Fame >= 10)
                    {
                        using (var db = new Database())
                        {
                            db.UpdateFame(psr.Account, -10);
                            db.Dispose();
                        }
                    var weaponsT5 = TierLoot.WeaponItems[5].ToList();
                    var weaponsT6 = TierLoot.WeaponItems[6].ToList();
                    var weaponsT7 = TierLoot.WeaponItems[7].ToList();
                    var abilitiesT3 = TierLoot.AbilityItems[2].ToList();
                    var ringsT3 = TierLoot.RingItems[3].ToList();
                    var armorT6 = TierLoot.ArmorItems[6].ToList();
                    var armorT7 = TierLoot.ArmorItems[7].ToList();
                    var armorT8 = TierLoot.ArmorItems[8].ToList();

                    var calculator = Random.Next(1, 1000);
                    if (calculator <= 600)
                    {
                        SendHelp("Better luck next time!");
                    }
                    else if (calculator <= 700 && calculator > 600)
                    {
                        SendHelp("Congratulations! You won a T5 Weapon!");

                        weaponsT5.Shuffle();

                        var container = new Container(0x0507, 1000*60, true) {BagOwner = psr.Account.AccountId};
                        container.Inventory[0] = weaponsT5[0];
                        container.Move(X + (float) ((invRand.NextDouble()*2 - 1)*0.5),
                            Y + (float) ((invRand.NextDouble()*2 - 1)*0.5));
                        container.Size = 75;
                        Owner.EnterWorld(container);
                    }
                    else if (calculator <= 750 && calculator > 700)
                    {
                        SendHelp("Congratulations! You won a T6 Weapon!");

                        weaponsT6.Shuffle();

                        var container = new Container(0x0507, 1000*60, true) {BagOwner = psr.Account.AccountId};
                        container.Inventory[0] = weaponsT6[0];
                        container.Move(X + (float) ((invRand.NextDouble()*2 - 1)*0.5),
                            Y + (float) ((invRand.NextDouble()*2 - 1)*0.5));
                        container.Size = 75;
                        Owner.EnterWorld(container);
                    }
                    else if (calculator <= 787.5 && calculator > 775)
                    {
                        SendHelp("Congratulations! You won a T7 Weapon!");

                        weaponsT7.Shuffle();

                        var container = new Container(0x0507, 1000*60, true) {BagOwner = psr.Account.AccountId};
                        container.Inventory[0] = weaponsT7[0];
                        container.Move(X + (float) ((invRand.NextDouble()*2 - 1)*0.5),
                            Y + (float) ((invRand.NextDouble()*2 - 1)*0.5));
                        container.Size = 75;
                        Owner.EnterWorld(container);
                    }
                    else if (calculator <= 800 && calculator > 787.5)
                    {
                        SendHelp("Congratulations! You won a T3 Ability!");

                        abilitiesT3.Shuffle();

                        var container = new Container(0x0507, 1000*60, true) {BagOwner = psr.Account.AccountId};
                        container.Inventory[0] = abilitiesT3[0];
                        container.Move(X + (float) ((invRand.NextDouble()*2 - 1)*0.5),
                            Y + (float) ((invRand.NextDouble()*2 - 1)*0.5));
                        container.Size = 75;
                        Owner.EnterWorld(container);
                    }
                    else if (calculator <= 850 && calculator > 800)
                    {
                        SendHelp("Congratulations! You won a T6 Armor!");

                        armorT6.Shuffle();

                        var container = new Container(0x0507, 1000*60, true) {BagOwner = psr.Account.AccountId};
                        container.Inventory[0] = armorT6[0];
                        container.Move(X + (float) ((invRand.NextDouble()*2 - 1)*0.5),
                            Y + (float) ((invRand.NextDouble()*2 - 1)*0.5));
                        container.Size = 75;
                        Owner.EnterWorld(container);
                    }
                    else if (calculator <= 875 && calculator > 850)
                    {
                        SendHelp("Congratulations! You won a T7 Armor!");

                        armorT7.Shuffle();

                        var container = new Container(0x0507, 1000*60, true) {BagOwner = psr.Account.AccountId};
                        container.Inventory[0] = armorT7[0];
                        container.Move(X + (float) ((invRand.NextDouble()*2 - 1)*0.5),
                            Y + (float) ((invRand.NextDouble()*2 - 1)*0.5));
                        container.Size = 75;
                        Owner.EnterWorld(container);
                    }
                    else if (calculator <= 887.5 && calculator > 875)
                    {
                        SendHelp("Congratulations! You won a T8 Armor!");

                        armorT8.Shuffle();

                        var container = new Container(0x0507, 1000*60, true) {BagOwner = psr.Account.AccountId};
                        container.Inventory[0] = armorT8[0];
                        container.Move(X + (float) ((invRand.NextDouble()*2 - 1)*0.5),
                            Y + (float) ((invRand.NextDouble()*2 - 1)*0.5));
                        container.Size = 75;
                        Owner.EnterWorld(container);
                    }
                    else if (calculator <= 900 && calculator > 887.5)
                    {
                        SendHelp("Congratulations! You won a T3 Ring!");

                        ringsT3.Shuffle();

                        var container = new Container(0x0507, 1000*60, true) {BagOwner = psr.Account.AccountId};
                        container.Inventory[0] = ringsT3[0];
                        container.Move(X + (float) ((invRand.NextDouble()*2 - 1)*0.5),
                            Y + (float) ((invRand.NextDouble()*2 - 1)*0.5));
                        container.Size = 75;
                        Owner.EnterWorld(container);
                    }
                    else if (calculator <= 905 && calculator > 900)
                    {
                        SendHelp("Too bad! You only got 1 fame!");
                        Client.Database.UpdateFame(Client.Account, 1);
                        Fame += 1;
                        UpdateCount++;
                    }
                    else if (calculator <= 910 && calculator > 905)
                    {
                        SendHelp("Too bad! You only got 5 fame!");
                        Client.Database.UpdateFame(Client.Account, 5);
                        Fame += 5;
                        UpdateCount++;
                    }
                    else if (calculator <= 940 && calculator > 910)
                    {
                        SendHelp("You won back the fame you paid!");
                        Client.Database.UpdateFame(Client.Account, 10);
                        Fame += 10;
                        UpdateCount++;
                    }
                    else if (calculator <= 970 && calculator > 940)
                    {
                        SendHelp("Nice! You won 25 fame!");
                        Client.Database.UpdateFame(Client.Account, 25);
                        Fame += 25;
                        UpdateCount++;
                    }
                    else if (calculator <= 985 && calculator > 970)
                    {
                        SendHelp("Nice! You won 50 fame!");
                        Client.Database.UpdateFame(Client.Account, 50);
                        Fame += 50;
                        UpdateCount++;
                    }
                    else if (calculator <= 990 && calculator > 985)
                    {
                        SendHelp("Very Nice! You won 100 fame!");
                        Client.Database.UpdateFame(Client.Account, 100);
                        Fame += 100;
                        UpdateCount++;
                    }
                    else if (calculator <= 994 && calculator > 990)
                    {
                        SendHelp("Awesome! You won 500 fame!");
                        Client.Database.UpdateFame(Client.Account, 500);
                        Fame += 500;
                        UpdateCount++;
                    }
                    else if (calculator <= 997 && calculator > 994)
                    {
                        SendHelp("Amazing! You won 1000 fame!");
                        Client.Database.UpdateFame(Client.Account, 1000);
                        Fame += 1000;
                        UpdateCount++;
                    }
                    else if (calculator <= 999 && calculator > 997)
                    {
                        SendHelp("Amazing! You won 5000 fame!");
                        Client.Database.UpdateFame(Client.Account, 5000);
                        Fame += 5000;
                        UpdateCount++;
                    }
                    else if (calculator <= 1000 && calculator > 999)
                    {
                        SendHelp("Incredible! You won the 10000 fame jackpot!");
                        foreach (var i in RealmManager.Clients.Values)
                            i.SendPacket(new TextPacket
                            {
                                BubbleTime = 0,
                                Stars = -1,
                                Name = "#Announcement",
                                Text = Name + " has won the 10000 Fame jackpot on the bronze slot machines!"
                            });
                        Client.Database.UpdateFame(Client.Account, 10000);
                        Fame += 10000;
                        UpdateCount++;
                    }
                    psr.SendPacket(new BuyResultPacket
                    {
                        Result = 0
                    });
                }
                                            else
                    {
                        SendHelp("Not Enough Fame");
                    }
                }
                else
                {
                    SendInfo("Canceled");
                    psr.SendPacket(new BuyResultPacket
                    {
                        Result = 0
                    });

                }
            }
        }
        private void ProcessHelloPacket(HelloPacket pkt)
        {
            db = new Database();
            //Console.Out.WriteLine(pkt.GUID + ": " + pkt.Password);
            if ((account = db.Verify(pkt.GUID, pkt.Password)) == null)
            {
                Console.WriteLine(@"Account not verified.");
                account = Database.CreateGuestAccount(pkt.GUID);

                if (account == null)
                {
                    Console.WriteLine(@"Account is null!");
                    SendPacket(new FailurePacket
                    {
                        Message = "Invalid account."
                    });
                    Disconnect();
                    db.Dispose();
                    return;
                }
                
            }
            if ((ip = db.CheckIp(skt.RemoteEndPoint.ToString().Split(':')[0])) == null)
            {
                Console.WriteLine(@"Error checking IP");
                SendPacket(new FailurePacket
                {
                    Message = "Error with IP."
                });
                Disconnect();
                db.Dispose();
                return;
            }
            Console.WriteLine(@"Client trying to connect!");
            ConnectedBuild = pkt.BuildVersion;
            if (!RealmManager.TryConnect(this))
            {
                if (CheckAccountInUse(account.AccountId) != false)
                {
                    Console.WriteLine(@"Account in use: " + account.AccountId + @" " + account.Name);
                    account = null;
                    SendPacket(new FailurePacket
                    {
                        Message = "Account in use! Retrying..."
                    });
                    Disconnect();
                    db.Dispose();
                    return;
                }
                account = null;
                SendPacket(new FailurePacket
                {
                    Message = "Failed to connect."
                });
                Disconnect();
                Console.WriteLine(@"Failed to connect.");
            }
            else
            {
                Console.ForegroundColor = ConsoleColor.Yellow;
                Console.WriteLine(@"Client loading world");
                Console.ForegroundColor = ConsoleColor.White;
                var world = RealmManager.GetWorld(pkt.GameId);
                if (world == null)
                {
                    SendPacket(new FailurePacket
                    {
                        Message = "Invalid world."
                    });
                    Disconnect();
                    Console.WriteLine(@"Invalid world");
                }
                Console.ForegroundColor = ConsoleColor.Yellow;
                try
                {
                    Console.WriteLine(@"Client joined world " + world.Id);
                }
                catch
                {
                    Console.WriteLine(@"Error! World is null");
                }
                Console.ForegroundColor = ConsoleColor.White;
                if (world.Id == -6) //Test World
                    (world as Test).LoadJson(pkt.MapInfo);

                else if (world.IsLimbo)
                    world = world.GetInstance(this);
                var seed = (uint) ((long) Environment.TickCount*pkt.GUID.GetHashCode())%uint.MaxValue;
                Random = new wRandom(seed);
                targetWorld = world.Id;
                if (!ConnectedBuildStartsWith(clientVer))
                {
                    SendPacket(new TextPacket
                    {
                        BubbleTime = 1,
                        Stars = -1,
                        Name = "",
                        Text = "Your client is outdated. Visit http://forum.zerorealms.com to get the latest one!"
                    });
                    Disconnect();
                    /*SendPacket(new TextBoxPacket
                    {
                        Button1 = "Okay",
                        Message = "Your client is outdated, Click <font color=\"white\"><b><a href='http://forum.zerorealms.com'>Here</a></b></font> to get the latest one!",
                        Title = "Outdated Client!",
                        Type = "NewClient"
                    });*/
                }
                SendPacket(new MapInfoPacket
                {
                    Width = world.Map.Width,
                    Height = world.Map.Height,
                    Name = world.Name,
                    Seed = seed,
                    Background = world.Background,
                    AllowTeleport = world.AllowTeleport,
                    ShowDisplays = world.ShowDisplays,
                    Music = world.GetMusic(Random),
                    ClientXML = world.ClientXML,
                    ExtraXML = world.ExtraXML,

                    SendMusic = ConnectedBuildStartsWith(clientVer)
                });
                stage = ProtocalStage.Handshaked;
            }
        }
Esempio n. 27
0
 public void Execute(Player player, string[] args)
 {
     if (args.Length < 2)
     {
         player.SendHelp(
             "Usage: /rank <username> <number>\n0: Player\n1: Donator\n2: Game Master\n3: Developer\n4: Head Developer\n5: Admin");
     }
     else
     {
         if (int.Parse(args[1]) < player.Client.Account.Rank)
         {
             try
             {
                 using (var dbx = new Database())
                 {
                     var cmd = dbx.CreateQuery();
                     cmd.CommandText = "UPDATE accounts SET rank=@rank WHERE name=@name";
                     cmd.Parameters.AddWithValue("@rank", args[1]);
                     cmd.Parameters.AddWithValue("@name", args[0]);
                     if (cmd.ExecuteNonQuery() == 0)
                     {
                         player.SendInfo("Could not change rank");
                     }
                     else
                     {
                         player.SendInfo("Account rank successfully changed");
                     }
                     dbx.Dispose();
                 }
             }
             catch
             {
                 player.SendInfo("Could not change rank, please change rank in database");
             }
         }
         else
         {
             player.SendError("You cannot set someone's rank higher than your own");
         }
     }
 }
Esempio n. 28
0
 public override void Tick(RealmTime time)
 {
     base.Tick(time);
     if (Players.Count > 0)
     {
         if (!Flags["started"] && !Flags["counting"])
         {
             foreach (var i in RealmManager.Clients.Values)
                 i.SendPacket(new TextPacket
                 {
                     Stars = -1,
                     BubbleTime = 0,
                     Name = "#Announcement",
                     Text = "A paid arena game has been started. Closing in 1 minute!"
                 });
             Flags["counting"] = true;
             Countdown(60);
         }
         else if (Flags["started"] && !Flags["counting"])
         {
             if (Enemies.Count < 1 + Pets.Count)
             {
                 Wave++;
                 if (Wave < 6)
                 {
                     RandomBosses = new[] { "Red Demon", "Phoenix Lord", "Henchman of Oryx" };
                 }
                 if (Wave > 5 && Wave < 11)
                 {
                     RandomBosses = new[]
                     {"Red Demon", "Phoenix Lord", "Henchman of Oryx", "Stheno the Snake Queen"};
                 }
                 if (Wave > 10 && Wave < 16)
                 {
                     RandomBosses = new[]
                     {"Elder Tree", "Stheno the Snake Queen", "Archdemon Malphas", "Septavius the Ghost God"};
                 }
                 if (Wave > 15 && Wave < 21)
                 {
                     RandomBosses = new[]
                     {
                         "Elder Tree", "Archdemon Malphas", "Septavius the Ghost God",
                         "Thessal the Mermaid Goddess",
                         "Crystal Prisoner"
                     };
                 }
                 if (Wave > 20 && Wave < 36)
                 {
                     RandomBosses = new[]
                     {
                         "Thessal the Mermaid Goddess", "Crystal Prisoner", "Tomb Support", "Tomb Defender",
                         "Tomb Attacker", "Oryx the Mad God 2"
                     };
                 }
                 if (Wave > 35)
                 {
                     RandomBosses = new[]
                       {
                         "Thessal the Mermaid Goddess", "Crystal Prisoner", "Tomb Support", "Tomb Defender",
                         "Tomb Attacker", "Oryx the Mad God 2", "Phoenix Wright", "Bridge Sentinel"
                     };
                 }
                 var db = new Database();
                 //FamePot = (Wave/2)*10/(Players.Count == 1 ? 1 : 2);
                 if (Players.Count == 1)
                 {
                     FamePot = Wave / 2 * 10;
                 }
                 else if (Wave % 2 == 1)
                 {
                     FamePot = (Wave + 1) / 4 * 10;
                 }
                 else
                 {
                     FamePot = Wave / 4 * 10;
                 }
                 foreach (var i in Players)
                 {
                     i.Value.CurrentFame =
                         i.Value.Client.Account.Stats.Fame = db.UpdateFame(i.Value.Client.Account, FamePot);
                     i.Value.UpdateCount++;
                     i.Value.Client.SendPacket(new NotificationPacket
                     {
                         Color = new ARGB(0xFFFF6600),
                         ObjectId = i.Value.Id,
                         Text = "+" + FamePot + " Fame"
                     });
                     if (Math.IEEERemainder(Wave, 15) == 0)
                     {
                         i.Value.Credits = i.Value.Client.Account.Credits = db.UpdateCredit(i.Value.Client.Account, 1);
                         i.Value.UpdateCount++;
                     }
                 }
                 db.Dispose();
                 var Invincible = new ConditionEffect();
                 Invincible.Effect = ConditionEffectIndex.Invulnerable;
                 Invincible.DurationMS = 6000;
                 var Healing = new ConditionEffect();
                 Healing.Effect = ConditionEffectIndex.Healing;
                 Healing.DurationMS = 6000;
                 foreach (var i in Players)
                 {
                     i.Value.Client.SendPacket(new SwitchMusicPacket
                     {
                         Music = "Arena"
                     });
                     i.Value.ApplyConditionEffect(Invincible, Healing);
                 }
                 foreach (var i in Players)
                 {
                     try
                     {
                         if (!Participants.Contains(i.Value.Client.Account.Name))
                             Participants.Add(i.Value.Client.Account.Name);
                     }
                     catch
                     {
                     }
                 }
                 Flags["counting"] = true;
                 Timers.Add(new WorldTimer(1000, (world, t) => Countdown(5)));
             }
             else
             {
                 foreach (var i in Enemies)
                 {
                     if (OutOfBounds(i.Value.X, i.Value.Y))
                     {
                         LeaveWorld(i.Value);
                     }
                 }
             }
         }
     }
     else
     {
         if (Participants.Count > 0)
         {
             new Database().AddToArenaLb(Wave, Participants);
             Participants.Clear();
         }
     }
 }
 public void Save()
 {
     try
     {
         if (db != null)
         {
             if (character != null)
             {
                 entity.SaveToCharacter();
                 if (entity.Owner.Id != -6)
                     db.SaveCharacter(account, character);
             }
             db.Dispose();
             db = null;
         }
         else
         {
             db = new Database();
             if (character != null)
             {
                 entity.SaveToCharacter();
                 if (entity.Owner.Id != -6)
                     db.SaveCharacter(account, character);
             }
             db.Dispose();
             db = null;
         }
     }
     catch
     {
     }
 }
Esempio n. 30
-1
        public void HandleRequest(HttpListenerContext context)
        {
            NameValueCollection query;
            using (var rdr = new StreamReader(context.Request.InputStream))
                query = HttpUtility.ParseQueryString(rdr.ReadToEnd());

            using (var db = new Database())
            {
                List<ServerItem> filteredServers = null;
                Account a = db.Verify(query["guid"], query["password"]);
                if (a != null)
                {
                    if (a.Banned)
                    {
                        filteredServers = YoureBanned();
                    }
                    else
                    {
                        filteredServers = GetServersForRank(a.Rank);
                    }
                }
                else
                {
                    filteredServers = GetServersForRank(0);
                }

                var chrs = new Chars
                {
                    Characters = new List<Char>(),
                    NextCharId = 2,
                    MaxNumChars = 1,
                    Account = db.Verify(query["guid"], query["password"]),
                    Servers = filteredServers
                };
                Account dvh = null;
                if (chrs.Account != null)
                {
                    db.GetCharData(chrs.Account, chrs);
                    db.LoadCharacters(chrs.Account, chrs);
                    chrs.News = db.GetNews(chrs.Account);
                    dvh = chrs.Account;
                }
                else
                {
                    chrs.Account = Database.CreateGuestAccount(query["guid"]);
                    chrs.News = db.GetNews(null);
                }

                var ms = new MemoryStream();
                var serializer = new XmlSerializer(chrs.GetType(),
                    new XmlRootAttribute(chrs.GetType().Name) {Namespace = ""});

                var xws = new XmlWriterSettings();
                xws.OmitXmlDeclaration = true;
                xws.Encoding = Encoding.UTF8;
                XmlWriter xtw = XmlWriter.Create(context.Response.OutputStream, xws);
                serializer.Serialize(xtw, chrs, chrs.Namespaces);
                db.Dispose();
            }
        }