SaveToCharacter() 공개 메소드

public SaveToCharacter ( ) : void
리턴 void
예제 #1
0
        public override void Buy(Player player)
        {
            Manager.Database.DoActionAsync(db =>
            {
                if (ObjectType == 0x01ca) //Merchant
                {
                    if (TryDeduct(player))
                    {
                        for (var i = 0; i < player.Inventory.Length; i++)
                        {
                            try
                            {
                                XElement ist;
                                Manager.GameData.ObjectTypeToElement.TryGetValue((ushort)MType, out ist);
                                if (player.Inventory[i] == null &&
                                    (player.SlotTypes[i] == 10 ||
                                     player.SlotTypes[i] == Convert.ToInt16(ist.Element("SlotType").Value)))
                                // Exploit fix - No more mnovas as weapons!
                                {
                                    player.Inventory[i] = Manager.GameData.Items[(ushort)MType];

                                    if (Currency == CurrencyType.Fame)
                                        player.CurrentFame =
                                            player.Client.Account.Stats.Fame =
                                                db.UpdateFame(player.Client.Account, -Price);
                                    if (Currency == CurrencyType.Gold)
                                        player.Credits =
                                            player.Client.Account.Credits =
                                                db.UpdateCredit(player.Client.Account, -Price);
                                    if (Currency == CurrencyType.FortuneTokens)
                                        player.Tokens =
                                            player.Client.Account.FortuneTokens =
                                                db.UpdateFortuneToken(player.Client.Account, -Price);

                                    player.Client.SendPacket(new BuyResultPacket
                                    {
                                        Result = 0,
                                        Message = "{\"key\":\"server.buy_success\"}"
                                    });
                                    MRemaining--;
                                    player.UpdateCount++;
                                    player.SaveToCharacter();
                                    UpdateCount++;
                                    return;
                                }
                            }
                            catch (Exception e)
                            {
                                log.Error(e);
                            }
                        }
                        player.Client.SendPacket(new BuyResultPacket
                        {
                            Result = 0,
                            Message = "{\"key\":\"server.inventory_full\"}"
                        });
                    }
                    else
                    {
                        if (player.Stars < RankReq)
                        {
                            player.Client.SendPacket(new BuyResultPacket
                            {
                                Result = 0,
                                Message = "Not enough stars!"
                            });
                            return;
                        }
                        switch (Currency)
                        {
                            case CurrencyType.Gold:
                                player.Client.SendPacket(new BuyResultPacket
                                {
                                    Result = BUY_NO_GOLD,
                                    Message = "{\"key\":\"server.not_enough_gold\"}"
                                });
                                break;
                            case CurrencyType.Fame:
                                player.Client.SendPacket(new BuyResultPacket
                                {
                                    Result = BUY_NO_FAME,
                                    Message = "{\"key\":\"server.not_enough_fame\"}"
                                });
                                break;
                            case CurrencyType.FortuneTokens:
                                player.Client.SendPacket(new BuyResultPacket
                                {
                                    Result = BUY_NO_FORTUNETOKENS,
                                    Message = "{\"key\":\"server.not_enough_fortunetokens\"}"
                                });
                                break;
                        }
                    }
                }
            });
        }
예제 #2
0
        private void DoTrade()
        {
            string failedMsg   = "Error while trading. Trade unsuccessful.";
            string msg         = "Trade Successful!";
            var    thisItems   = new List <Item>();
            var    targetItems = new List <Item>();

            // make sure trade targets are valid
            if (tradeTarget == null || Owner == null || tradeTarget.Owner == null || Owner != tradeTarget.Owner)
            {
                if (this != null)
                {
                    psr.SendPacket(new TradeDonePacket
                    {
                        Result  = 1,
                        Message = failedMsg
                    });
                }

                if (tradeTarget != null)
                {
                    tradeTarget.psr.SendPacket(new TradeDonePacket
                    {
                        Result  = 1,
                        Message = failedMsg
                    });
                }

                //TODO - logThis
                return;
            }

            // get trade items
            for (int i = 4; i < Inventory.Length; i++)
            {
                if (trade[i] && !Inventory[i].Soulbound)
                {
                    thisItems.Add(Inventory[i]);
                    Inventory[i] = null;
                    UpdateCount++;

                    // save this trade info
                    if (itemnumber1 == 0)
                    {
                        items1 = items1 + " " + thisItems[itemnumber1].ObjectId;
                    }
                    else if (itemnumber1 > 0)
                    {
                        items1 = items1 + ", " + thisItems[itemnumber1].ObjectId;
                    }
                    itemnumber1++;
                }


                if (tradeTarget.trade[i] && !tradeTarget.Inventory[i].Soulbound)
                {
                    targetItems.Add(tradeTarget.Inventory[i]);
                    tradeTarget.Inventory[i] = null;
                    tradeTarget.UpdateCount++;

                    // save target trade info
                    if (itemnumber2 == 0)
                    {
                        items2 = items2 + " " + targetItems[itemnumber2].ObjectId;
                    }
                    else if (itemnumber2 > 0)
                    {
                        items2 = items2 + ", " + targetItems[itemnumber2].ObjectId;
                    }
                    itemnumber2++;
                }
            }

            // move thisItems -> tradeTarget
            for (int j = thisItems.Count - 1; j >= 0; j--)
            {
                for (int i = 0; i < tradeTarget.Inventory.Length; i++)
                {
                    if ((tradeTarget.SlotTypes[i] == 0 &&
                         tradeTarget.Inventory[i] == null) ||
                        (thisItems[j] != null &&
                         tradeTarget.SlotTypes[i] == thisItems[j].SlotType &&
                         tradeTarget.Inventory[i] == null))
                    {
                        tradeTarget.Inventory[i] = thisItems[j];
                        thisItems.RemoveAt(j);
                        break;
                    }
                }
            }

            // move tradeItems -> this
            for (int j = targetItems.Count - 1; j >= 0; j--)
            {
                for (int i = 0; i < Inventory.Length; i++)
                {
                    if ((SlotTypes[i] == 0 &&
                         Inventory[i] == null) ||
                        (targetItems[j] != null &&
                         SlotTypes[i] == targetItems[j].SlotType &&
                         Inventory[i] == null))
                    {
                        Inventory[i] = targetItems[j];
                        targetItems.RemoveAt(j);
                        break;
                    }
                }
            }

            // check for lingering items
            if (thisItems.Count > 0 ||
                targetItems.Count > 0)
            {
                msg = "An error occured while trading! Some items were lost!";
            }

            // trade successful, notify and save
            psr.SendPacket(new TradeDonePacket
            {
                Result  = 1,
                Message = msg
            });
            tradeTarget.psr.SendPacket(new TradeDonePacket
            {
                Result  = 1,
                Message = msg
            });
            SaveToCharacter();
            psr.Save();
            tradeTarget.SaveToCharacter();
            tradeTarget.psr.Save();

            // log trade
            const string dir = @"logs";

            if (!Directory.Exists(dir))
            {
                Directory.CreateDirectory(dir);
            }
            using (var writer = new StreamWriter(@"logs\TradeLog.log", true))
            {
                writer.WriteLine(Name + " traded " + "{" + items1 + "}" + " with " + tradeTarget.Name + " for " +
                                 "{" + items2 + "}");
            }
            Console.Out.WriteLine(Name + " traded " + "{" + items1 + "}" + " with " + tradeTarget.Name + " for " +
                                  "{" + items2 + "}");

            // clean up
            items1      = "";
            items2      = "";
            itemnumber1 = 0;
            itemnumber2 = 0;
            UpdateCount++;
            tradeTarget.UpdateCount++;
            name1 = "";
            name2 = "";
            tradeTarget.tradeTarget   = null;
            tradeTarget.trade         = null;
            tradeTarget.tradeAccepted = false;
            tradeTarget   = null;
            trade         = null;
            tradeAccepted = false;
        }