UpdateCredit() public method

public UpdateCredit ( Account acc, int amount ) : int
acc Account
amount int
return int
コード例 #1
0
        protected override void HandleRequest()
        {
            using (Database db = new Database())
            {
                try
                {
                    Account acc = db.Verify(Query["guid"], Query["password"], Program.GameData);

                    string classType = Program.GameData.ObjectTypeToId[ushort.Parse(Query["classType"])];

                    if (CheckAccount(acc, db))
                    {
                        int price = Program.GameData.ObjectDescs[ushort.Parse(Query["classType"])].UnlockCost;
                        if (acc.Credits < price) return;
                        db.UpdateCredit(acc, -price);
                        MySqlCommand cmd = db.CreateQuery();
                        cmd.CommandText =
                            "UPDATE unlockedclasses SET available='unrestricted' WHERE accId=@accId AND class=@class;";
                        cmd.Parameters.AddWithValue("@accId", acc.AccountId);
                        cmd.Parameters.AddWithValue("@class", classType);
                        cmd.ExecuteNonQuery();
                    }
                }
                catch (Exception e)
                {
                    using (StreamWriter wtr = new StreamWriter(Context.Response.OutputStream))
                    {
                        wtr.WriteLine("<Error>Invalid classType");
                        wtr.Flush();
                        wtr.WriteLine(e);
                    }
                }
            }
        }
コード例 #2
0
        protected override void HandleRequest()
        {
            StreamWriter wtr = new StreamWriter(Context.Response.OutputStream);
            if (Query.AllKeys.Length > 0)
            {
                using (Database db = new Database())
                {
                    Account acc = db.Verify(Query["guid"], Query["password"], Program.GameData);

                    if (CheckAccount(acc, db, false))
                    {
                        foreach (ItemCostItem item in Prices)
                        {
                            if (item.Type == Query["skinType"] && item.Puchasable == 1)
                            {
                                if (!acc.OwnedSkins.Contains(int.Parse(Query["skinType"])))
                                {
                                    acc.OwnedSkins.Add(int.Parse(Query["skinType"]));
                                    db.UpdateCredit(acc, -item.Price);
                                    MySqlCommand cmd = db.CreateQuery();
                                    cmd.CommandText =
                                        "UPDATE accounts SET ownedSkins=@ownedSkins WHERE uuid=@uuid AND password=SHA1(@password)";
                                    cmd.Parameters.AddWithValue("@ownedSkins",
                                        Utils.GetCommaSepString(acc.OwnedSkins.ToArray()));
                                    cmd.Parameters.AddWithValue("@uuid", Query["guid"]);
                                    cmd.Parameters.AddWithValue("@password", Query["password"]);
                                    if (cmd.ExecuteNonQuery() == 0)
                                        wtr.WriteLine("<Error>Unable to purchase</Error>");
                                }
                            }
                        }
                    }
                }
            }
        }
コード例 #3
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();
         }
     }
 }
コード例 #4
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");
     }
 }
コード例 #5
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!");
     }
 }
コード例 #6
0
 public void Execute(Player player, string[] args)
 {
     if (args.Length == 0)
     {
         player.SendHelp("Use /name <name>");
     }
     else if (args.Length == 1)
     {
         using (var db = new Database())
         {
             var db1 = db.CreateQuery();
             db1.CommandText = "SELECT COUNT(name) FROM accounts WHERE name=@name;";
             db1.Parameters.AddWithValue("@name", args[0]);
             if ((int) (long) db1.ExecuteScalar() > 0)
             {
                 player.SendError("Name Already In Use.");
             }
             else
             {
                 db1 = db.CreateQuery();
                 db1.CommandText = "UPDATE accounts SET name=@name WHERE id=@accId";
                 db1.Parameters.AddWithValue("@name", args[0]);
                 db1.Parameters.AddWithValue("@accId", player.Client.Account.AccountId.ToString());
                 if (db1.ExecuteNonQuery() > 0)
                 {
                     player.Client.Player.Credits = db.UpdateCredit(player.Client.Account, -0);
                     player.Client.Player.Name = args[0];
                     player.Client.Player.NameChosen = true;
                     player.Client.Player.UpdateCount++;
                     player.SendInfo("Success!");
                 }
                 else
                 {
                     player.SendError("Internal Server Error Occurred.");
                 }
             }
             db1.Dispose();
         }
     }
 }
コード例 #7
0
        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);
        }
コード例 #8
0
        protected override void HandleRequest()
        {
            StreamWriter wtr = new StreamWriter(Context.Response.OutputStream);
            if (Query.AllKeys.Length > 0)
            {
                using (Database db = new Database())
                {
                    Package package = Package.GetPackage(int.Parse(Query["packageId"]));

                    if (package == null)
                    {
                        wtr.Write("<Error>This package is not available any more</Error>");
                        return;
                    }

                    JsonSerializer s = new JsonSerializer();
                    var contents = s.Deserialize<PackageContent>(new JsonTextReader(new StringReader(package.Contents)));

                    Account acc = db.Verify(Query["guid"], Query["password"], Program.GameData);

                    if (CheckAccount(acc, db, false))
                    {
                        if (acc.Credits < package.Price)
                        {
                            wtr.Write("<Error>Not enough gold.<Error/>");
                            return;
                        }

                        var cmd = db.CreateQuery();

                        if (contents.items?.Count > 0)
                        {
                            foreach (var i in contents.items)
                            {
                                Dictionary<string, int> itemDic = new Dictionary<string, int>();
                                List<int> gifts = acc.Gifts;
                                gifts.Add(i);

                                cmd = db.CreateQuery();
                                cmd.CommandText =
                                    "UPDATE accounts SET gifts=@gifts WHERE uuid=@uuid AND password=SHA1(@password);";
                                cmd.Parameters.AddWithValue("@gifts", Utils.GetCommaSepString<int>(gifts.ToArray()));
                                cmd.Parameters.AddWithValue("@uuid", Query["guid"]);
                                cmd.Parameters.AddWithValue("@password", Query["password"]);
                                cmd.ExecuteNonQuery();
                            }
                        }

                        if (contents.charSlots > 0)
                        {
                            cmd = db.CreateQuery();
                            cmd.CommandText =
                                "UPDATE accounts SET maxCharSlot=maxCharSlot + @amount WHERE uuid=@uuid AND password=SHA1(@password);";
                            cmd.Parameters.AddWithValue("@amount", contents.charSlots);
                            cmd.Parameters.AddWithValue("@uuid", Query["guid"]);
                            cmd.Parameters.AddWithValue("@password", Query["password"]);
                            if (cmd.ExecuteNonQuery() == 0)
                                return;
                        }

                        if (contents.vaultChests > 0)
                        {
                            for (int j = 0; j < contents.vaultChests; j++)
                                db.CreateChest(acc);
                        }

                        db.UpdateCredit(acc, -package.Price);
                        wtr.Write("<Success/>");
                    }
                }
            }
        }
コード例 #9
0
        protected override void HandleRequest()
        {
            using (var db = new Database())
            {
                int currency = -1;
                int price = -1;
                int.TryParse(Query["currency"], out currency);
                string status = "<Error>Internal Server Error</Error>";
                Account acc;

                if (CheckAccount(acc = db.Verify(Query["guid"], Query["password"], Program.GameData), db, false))
                {
                    var cmd = db.CreateQuery();
                    cmd.CommandText = "SELECT * FROM thealchemist WHERE startTime <= now() AND endTime >= now() AND id=@gameId;";
                    cmd.Parameters.AddWithValue("@gameId", Query["gameId"]);
                    Random rand = new Random();
                    List<int> gifts = new List<int>();

                    using (var rdr = cmd.ExecuteReader())
                    {
                        rdr.Read();
                        if (rdr.HasRows)
                        {
                            List<int> items = Utils.FromCommaSepString32(rdr.GetString("contents")).ToList();
                            List<int> candidates = new List<int>(3);

                            do
                            {
                                int item = items[rand.Next(items.Count)];
                                if (!candidates.Contains(item))
                                    candidates.Add(item);
                            } while (candidates.Count < 3);

                            if (currency == GOLD)
                            {
                                if (Query["status"] == "0")
                                {
                                    if (CurrentGames.ContainsKey(acc.AccountId))
                                        CurrentGames.Remove(acc.AccountId);
                                    CurrentGames.Add(acc.AccountId, candidates.ToArray());
                                    price = rdr.GetInt32("priceFirstInGold");
                                    status = "<Success><Candidates>" +
                                        Utils.GetCommaSepString(candidates.ToArray()) +
                                        "</Candidates><Gold>" +
                                        (acc.Credits - price) +
                                        "</Gold></Success>";
                                }
                                else if (Query["status"] == "1")
                                {
                                    if (CurrentGames.ContainsKey(acc.AccountId))
                                    {
                                        candidates = CurrentGames[acc.AccountId].ToList();
                                        candidates.Shuffle();
                                        status = "<Success><Awards>" + candidates[int.Parse(Query["choice"])] + "</Awards></Success>";
                                        gifts.Add(candidates[int.Parse(Query["choice"])]);
                                        candidates.Remove(candidates[int.Parse(Query["choice"])]);
                                        CurrentGames[acc.AccountId] = candidates.ToArray();
                                    }
                                }
                                else if (Query["status"] == "2")
                                {
                                    if (CurrentGames.ContainsKey(acc.AccountId))
                                    {
                                        candidates = CurrentGames[acc.AccountId].ToList();
                                        candidates.Shuffle();
                                        price = rdr.GetInt32("priceSecondInGold");
                                        status = "<Success><Awards>" + candidates[int.Parse(Query["choice"])] + "</Awards></Success>";
                                        gifts.Add(candidates[int.Parse(Query["choice"])]);
                                        CurrentGames.Remove(acc.AccountId);
                                    }
                                }
                            }
                            else if (currency == FORTUNETOKENS)
                            {
                                if (Query["status"] == "0")
                                {
                                    if (CurrentGames.ContainsKey(acc.AccountId))
                                        CurrentGames.Remove(acc.AccountId);
                                    CurrentGames.Add(acc.AccountId, candidates.ToArray());
                                    price = rdr.GetInt32("priceFirstInToken");
                                    status = "<Success><Candidates>" +
                                        Utils.GetCommaSepString(candidates.ToArray()) +
                                        "</Candidates><FortuneToken>" +
                                        (acc.FortuneTokens - price) +
                                        "</FortuneToken></Success>";
                                }
                                else if (Query["status"] == "1")
                                {
                                    if (CurrentGames.ContainsKey(acc.AccountId))
                                    {
                                        candidates = CurrentGames[acc.AccountId].ToList();
                                        candidates.Shuffle();
                                        status = "<Success><Awards>" + candidates[int.Parse(Query["choice"])] + "</Awards></Success>";
                                        gifts.Add(candidates[int.Parse(Query["choice"])]);
                                        candidates.Remove(candidates[int.Parse(Query["choice"])]);
                                        CurrentGames[acc.AccountId] = candidates.ToArray();
                                    }
                                }
                                else if (Query["status"] == "2")
                                {
                                    status = "<Error>You can not play twiche with a Fortune Token</Error>";
                                }
                            }
                            else
                                status = "<Error>Invalid currency</Error>";
                        }
                        else
                            status = "<Error>Invalid gameId</Error>";
                    }
                    if (currency == GOLD)
                        db.UpdateCredit(acc, price == -1 ? 0 : -price);
                    else if (currency == FORTUNETOKENS)
                        db.UpdateFortuneToken(acc, price == -1 ? 0 : -price);

                    db.AddGifts(acc, gifts);
                }
                else
                    status = "<Error>Account not found</Error>";

                using (StreamWriter wtr = new StreamWriter(Context.Response.OutputStream))
                    wtr.Write(status);
            }
        }
コード例 #10
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);
 }
コード例 #11
0
        private bool ParseContents(Account acc, string json)
        {
            try
            {
                using (var db = new Database())
                {
                    var code = GiftCode.FromJson(json);
                    if (code == null) return false;
                    var cmd = db.CreateQuery();

                    if (code.Gifts.Count > 0)
                    {
                        List<int> gifts = acc.Gifts;
                        foreach (var i in code.Gifts)
                            gifts.Add(i);

                        cmd = db.CreateQuery();
                        cmd.CommandText =
                            "UPDATE accounts SET gifts=@gifts WHERE uuid=@uuid AND password=SHA1(@password);";
                        cmd.Parameters.AddWithValue("@gifts", Utils.GetCommaSepString<int>(gifts.ToArray()));
                        cmd.Parameters.AddWithValue("@uuid", Query["guid"]);
                        cmd.Parameters.AddWithValue("@password", Query["password"]);
                        cmd.ExecuteNonQuery();
                    }

                    if (code.CharSlots > 0)
                    {
                        cmd = db.CreateQuery();
                        cmd.CommandText =
                            "UPDATE accounts SET maxCharSlot=maxCharSlot + @amount WHERE uuid=@uuid AND password=SHA1(@password);";
                        cmd.Parameters.AddWithValue("@amount", code.CharSlots);
                        cmd.Parameters.AddWithValue("@uuid", Query["guid"]);
                        cmd.Parameters.AddWithValue("@password", Query["password"]);
                        cmd.ExecuteNonQuery();
                    }

                    if (code.VaultChests > 0)
                        for (int j = 0; j < code.VaultChests; j++)
                            db.CreateChest(acc);

                    if (code.Gold > 0)
                        db.UpdateCredit(acc, code.Gold);

                    if (code.Fame > 0)
                        db.UpdateFame(acc, code.Fame);
                }
            }
            catch (Exception)
            {
                return false;
            }
            return true;
        }
コード例 #12
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 free 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)
                        {
                            RandomBosses = new[]
                            {
                                "Thessal the Mermaid Goddess", "Crystal Prisoner", "Tomb Support", "Tomb Defender",
                                "Tomb Attacker", "Oryx the Mad God 2"
                            };
                        }
                        var db = new Database();
                        foreach (var i in Players)
                        {
                            if (Math.IEEERemainder(Wave, 25) == 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 {Effect = ConditionEffectIndex.Invulnerable, DurationMS = 5000};
                        var healing = new ConditionEffect {Effect = ConditionEffectIndex.Healing, DurationMS = 5000};
                        foreach (var i in Players)
                        {
                            i.Value.Client.SendPacket(new SwitchMusicPacket()
                            {
                                Music = "Arena"
                            });
                            i.Value.ApplyConditionEffect(new[]
                            {
                                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;
                        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();
                }
            }
        }
コード例 #13
0
        public override void BehaviorEvent(string type)
        {
            var typec = type.Split(':');
            if (typec.Length > 1)
                if (typec[0] == "dmg")
                {
                    try
                    {
                        towerHp -= Convert.ToInt32(typec[1]);
                        if (towerHp > 0)
                            BroadcastPacket(new TextPacket
                            {
                                Stars = -1,
                                BubbleTime = 0,
                                Name = "#Zombies",
                                Text = "Your tower's been damaged! " + towerHp + " HP left."
                            }, null);
                        else
                        {
                            Flags["finished"] = true;

                            BroadcastPacket(new TextPacket
                            {
                                BubbleTime = 0,
                                Stars = -1,
                                Name = "#Zombies",
                                Text = "Your tower's been destroyed! You each earn " + famePot + " fame!"
                            }, null);
                            double golddivider = wave / 15;
                            int tokens = (int)Math.Floor(golddivider);
                            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"
                                });
                                i.Value.Credits = i.Value.Client.Account.Credits = db.UpdateCredit(i.Value.Client.Account, tokens);
                                i.Value.UpdateCount++;
                                Flags["counting"] = true;
                                db.Dispose();

                            }
                            foreach (var i in Enemies)
                            {
                                if (!i.Value.isPet)
                                {
                                    LeaveWorld(i.Value);
                                }
                            }
                            LeaveWorld(tower);

                        }
                    }
                    catch
                    {
                    }
                }
            base.BehaviorEvent(type);
        }
コード例 #14
0
        protected override void HandleRequest()
        {
            rand = Query["ignore"] != null ? new Random(int.Parse(Query["ignore"])) : new Random();

            using (Database db = new Database())
            {
                Account acc = db.Verify(Query["guid"], Query["password"], Program.GameData);
                if (CheckAccount(acc, db, false))
                {
                    if (Query["boxId"] == null)
                    {
                        using (StreamWriter wtr = new StreamWriter(Context.Response.OutputStream))
                            wtr.WriteLine("<Error>Box not found</Error>");
                        return;
                    }
                    MysteryBox box = MysteryBox.GetBox(int.Parse(Query["boxId"]));
                    if (box == null)
                    {
                        using (StreamWriter wtr = new StreamWriter(Context.Response.OutputStream))
                            wtr.WriteLine("<Error>Box not found</Error>");
                        return;
                    }
                    if (box.Sale != null && DateTime.UtcNow <= box.Sale.SaleEnd)
                    {
                        switch (box.Sale.Currency)
                        {
                            case 0:
                                if (acc.Credits < box.Sale.Price)
                                {
                                    using (StreamWriter wtr = new StreamWriter(Context.Response.OutputStream))
                                        wtr.WriteLine("<Error>Not Enough Gold</Error>");
                                    return;
                                }
                                break;

                            case 1:
                                if (acc.Stats.Fame < box.Sale.Price)
                                {
                                    using (StreamWriter wtr = new StreamWriter(Context.Response.OutputStream))
                                        wtr.WriteLine("<Error>Not Enough Fame</Error>");
                                    return;
                                }
                                break;
                        }
                    }
                    else
                    {
                        switch (box.Price.Currency)
                        {
                            case 0:
                                if (acc.Credits < box.Price.Amount)
                                {
                                    using (StreamWriter wtr = new StreamWriter(Context.Response.OutputStream))
                                        wtr.WriteLine("<Error>Not Enough Gold</Error>");
                                    return;
                                }
                                break;

                            case 1:
                                if (acc.Stats.Fame < box.Price.Amount)
                                {
                                    using (StreamWriter wtr = new StreamWriter(Context.Response.OutputStream))
                                        wtr.WriteLine("<Error>Not Enough Fame</Error>");
                                    return;
                                }
                                break;
                        }
                    }

                    MysteryBoxResult res = new MysteryBoxResult
                    {
                        Awards = Utils.GetCommaSepString(GetAwards(box.Contents))
                    };
                    if (box.Sale != null && DateTime.UtcNow <= box.Sale.SaleEnd)
                        res.GoldLeft = box.Sale.Currency == 0
                            ? db.UpdateCredit(acc, -box.Sale.Price)
                            : db.UpdateFame(acc, -box.Sale.Price);
                    else
                        res.GoldLeft = box.Price.Currency == 0
                            ? db.UpdateCredit(acc, -box.Price.Amount)
                            : db.UpdateFame(acc, -box.Price.Amount);

                    if (box.Sale != null && DateTime.UtcNow <= box.Sale.SaleEnd)
                        res.Currency = box.Sale.Currency;
                    else
                        res.Currency = box.Price.Currency;

                    sendMysteryBoxResult(Context.Response.OutputStream, res);

                    int[] gifts = Utils.FromCommaSepString32(res.Awards);
                    foreach (int item in gifts)
                        acc.Gifts.Add(item);

                    MySqlCommand cmd = db.CreateQuery();
                    cmd.CommandText =
                        "UPDATE accounts SET gifts=@gifts WHERE uuid=@uuid AND password=SHA1(@password);";
                    cmd.Parameters.AddWithValue("@uuid", Query["guid"]);
                    cmd.Parameters.AddWithValue("@password", Query["password"]);
                    cmd.Parameters.AddWithValue("@gifts", Utils.GetCommaSepString(acc.Gifts.ToArray()));
                    cmd.ExecuteNonQuery();
                }
                else
                    using (StreamWriter wtr = new StreamWriter(Context.Response.OutputStream))
                        wtr.WriteLine("<Error>Account not found</Error>");
            }
        }