Moin, es gibt ja den Basar Dupe was das c_reg Packet getrifft, würde gerne hier den Fix veröffentlichen! :)
Viel Spaß damit :)
/// <summary>
/// c_reg packet
/// </summary>
/// <param name="cRegPacket"></param>
public void SellBazaar(CRegPacket cRegPacket)
{
try
{
//Session.SendPacket("info Basar has a Bug for this case the Function to add new Items to Basar got Disabled");
//return;
if (ServerManager.Instance.InShutdown || Session.Character == null || Session.Character.InExchangeOrTrade)
{
return;
}
SpinWait.SpinUntil(() => !ServerManager.Instance.InBazaarRefreshMode);
StaticBonusDTO medal =
Session.Character.StaticBonusList.Find(s => s.StaticBonusType == StaticBonusType.BazaarMedalGold || s.StaticBonusType == StaticBonusType.BazaarMedalSilver);
long price = cRegPacket.Price * cRegPacket.Amount;
long taxmax = price > 100000 ? price / 200 : 500;
long taxmin = price >= 4000 ? (60 + (price - 4000) / 2000 * 30 > 10000 ? 10000 : 60 + (price - 4000) / 2000 * 30) : 50;
long tax = medal == null ? taxmax : taxmin;
long maxGold = 2000000000;
if (Session.Character.Gold < tax || cRegPacket.Amount <= 0 ||
Session.Character.ExchangeInfo != null && Session.Character.ExchangeInfo.ExchangeList.Count( ) > 1 || Session.Character.IsShopping)
{
return;
}
ItemInstance it = Session.Character.Inventory.LoadBySlotAndType(cReg Packet.Slot, cRegPacket.Inventory == 4 ? 0 : (InventoryType)cRegPacket.Inventory);
if (it == null || !it.Item.IsSoldable || it.IsBound)
{
return;
}
if (Session.Character.Authority == AuthorityType.User && Session.Character.Inventory.CountItemInAnInventory (InventoryType.Bazaar) > 10 * (medal == null ? 1 : 10))
{
Session.SendPacket(UserInterfaceHelper.GenerateMsg (Language.Instance.GetMessageFromKey("LIMIT_EXCEED ED"), 0));
return;
}
if (price > (medal != null || Session.Character.Authority >= AuthorityType.GameMaster ? maxGold : 1000000 * it.Amount))
{
Session.SendPacket(UserInterfaceHelper.GenerateMsg (Language.Instance.GetMessageFromKey("PRICE_EXCEED ED"), 0));
return;
}
if (cRegPacket.Price < 0)
{
return;
}
ItemInstance bazar = Session.Character.Inventory.AddIntoBazaarInventory (cRegPacket.Inventory == 4 ? 0 : (InventoryType)cRegPacket.Inventory, cRegPacket.Slot, cRegPacket.Amount);
if (bazar == null)
{
return;
}
short duration;
switch (cRegPacket.Durability)
{
case 1:
duration = 24;
break;
case 2:
duration = 168;
break;
case 3:
duration = 360;
break;
case 4:
duration = 720;
break;
default:
return;
}
DAOFactory.IteminstanceDAO.InsertOrUpdate(bazar);
var bazaarItem = new BazaarItemDTO
{
Amount = bazar.Amount,
DateStart = DateTime.Now,
Duration = duration,
IsPackage = cRegPacket.IsPackage != 0,
MedalUsed = medal != null,
Price = cRegPacket.Price,
SellerId = Session.Character.CharacterId,
ItemInstanceId = bazar.Id
};
DAOFactory.BazaarItemDAO.InsertOrUpdate(ref bazaarItem);
ServerManager.Instance.BazaarRefresh(bazaarItem.Ba zaarItemId);
if (Session.Account.Authority < AuthorityType.GameMaster)
{
Session.Character.Gold -= tax;
Session.SendPacket(Session.Character.GenerateGold( ));
}
Session.SendPacket(Session.Character.GenerateSay(L anguage.Instance.GetMessageFromKey("OBJECT_IN_BAZA AR"), 10));
Session.SendPacket(UserInterfaceHelper.GenerateMsg (Language.Instance.GetMessageFromKey("OBJECT_IN_BA ZAAR"), 0));
Session.SendPacket("rc_reg 1");
}
catch(Exception ex)
{
Logger.Log.Error(ex);
}
}
#endregion
}
}
/// c_reg packet
/// </summary>
/// <param name="cRegPacket"></param>
public void SellBazaar(CRegPacket cRegPacket)
{
try
{
//Session.SendPacket("info Basar has a Bug for this case the Function to add new Items to Basar got Disabled");
//return;
if (ServerManager.Instance.InShutdown || Session.Character == null || Session.Character.InExchangeOrTrade)
{
return;
}
SpinWait.SpinUntil(() => !ServerManager.Instance.InBazaarRefreshMode);
StaticBonusDTO medal =
Session.Character.StaticBonusList.Find(s => s.StaticBonusType == StaticBonusType.BazaarMedalGold || s.StaticBonusType == StaticBonusType.BazaarMedalSilver);
long price = cRegPacket.Price * cRegPacket.Amount;
long taxmax = price > 100000 ? price / 200 : 500;
long taxmin = price >= 4000 ? (60 + (price - 4000) / 2000 * 30 > 10000 ? 10000 : 60 + (price - 4000) / 2000 * 30) : 50;
long tax = medal == null ? taxmax : taxmin;
long maxGold = 2000000000;
if (Session.Character.Gold < tax || cRegPacket.Amount <= 0 ||
Session.Character.ExchangeInfo != null && Session.Character.ExchangeInfo.ExchangeList.Count( ) > 1 || Session.Character.IsShopping)
{
return;
}
ItemInstance it = Session.Character.Inventory.LoadBySlotAndType(cReg Packet.Slot, cRegPacket.Inventory == 4 ? 0 : (InventoryType)cRegPacket.Inventory);
if (it == null || !it.Item.IsSoldable || it.IsBound)
{
return;
}
if (Session.Character.Authority == AuthorityType.User && Session.Character.Inventory.CountItemInAnInventory (InventoryType.Bazaar) > 10 * (medal == null ? 1 : 10))
{
Session.SendPacket(UserInterfaceHelper.GenerateMsg (Language.Instance.GetMessageFromKey("LIMIT_EXCEED ED"), 0));
return;
}
if (price > (medal != null || Session.Character.Authority >= AuthorityType.GameMaster ? maxGold : 1000000 * it.Amount))
{
Session.SendPacket(UserInterfaceHelper.GenerateMsg (Language.Instance.GetMessageFromKey("PRICE_EXCEED ED"), 0));
return;
}
if (cRegPacket.Price < 0)
{
return;
}
ItemInstance bazar = Session.Character.Inventory.AddIntoBazaarInventory (cRegPacket.Inventory == 4 ? 0 : (InventoryType)cRegPacket.Inventory, cRegPacket.Slot, cRegPacket.Amount);
if (bazar == null)
{
return;
}
short duration;
switch (cRegPacket.Durability)
{
case 1:
duration = 24;
break;
case 2:
duration = 168;
break;
case 3:
duration = 360;
break;
case 4:
duration = 720;
break;
default:
return;
}
DAOFactory.IteminstanceDAO.InsertOrUpdate(bazar);
var bazaarItem = new BazaarItemDTO
{
Amount = bazar.Amount,
DateStart = DateTime.Now,
Duration = duration,
IsPackage = cRegPacket.IsPackage != 0,
MedalUsed = medal != null,
Price = cRegPacket.Price,
SellerId = Session.Character.CharacterId,
ItemInstanceId = bazar.Id
};
DAOFactory.BazaarItemDAO.InsertOrUpdate(ref bazaarItem);
ServerManager.Instance.BazaarRefresh(bazaarItem.Ba zaarItemId);
if (Session.Account.Authority < AuthorityType.GameMaster)
{
Session.Character.Gold -= tax;
Session.SendPacket(Session.Character.GenerateGold( ));
}
Session.SendPacket(Session.Character.GenerateSay(L anguage.Instance.GetMessageFromKey("OBJECT_IN_BAZA AR"), 10));
Session.SendPacket(UserInterfaceHelper.GenerateMsg (Language.Instance.GetMessageFromKey("OBJECT_IN_BA ZAAR"), 0));
Session.SendPacket("rc_reg 1");
}
catch(Exception ex)
{
Logger.Log.Error(ex);
}
}
#endregion
}
}
Viel Spaß damit :)