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;
}
}
}
});
}