Пример #1
0
        private void BuyLot(GamePlayer player, byte response)
        {
            if (response != 0x01)
            {
                return;
            }

            lock (DatabaseItem)             // Mannen 10:56 PM 10/30/2006 - Fixing every lock(this)
            {
                if (!string.IsNullOrEmpty(DatabaseItem.OwnerID))
                {
                    return;
                }

                if (HouseMgr.GetHouseNumberByPlayer(player) != 0 && player.Client.Account.PrivLevel != (int)ePrivLevel.Admin)
                {
                    ChatUtil.SendMerchantMessage(player, "You already own another lot or house (Number " + HouseMgr.GetHouseNumberByPlayer(player) + ").");
                    return;
                }

                long totalCost = HouseTemplateMgr.GetLotPrice(DatabaseItem);
                if (player.RemoveMoney(totalCost, "You just bought this lot for {0}.",
                                       eChatType.CT_Merchant, eChatLoc.CL_SystemWindow))
                {
                    InventoryLogging.LogInventoryAction(player, this, eInventoryActionType.Merchant, totalCost);
                    DatabaseItem.LastPaid = DateTime.Now;
                    DatabaseItem.OwnerID  = player.ObjectId;
                    CreateHouse(player, 0);
                }
                else
                {
                    ChatUtil.SendMerchantMessage(player, "You dont have enough money!");
                }
            }
        }
Пример #2
0
        public override IList GetExamineMessages(GamePlayer player)
        {
            IList list = new ArrayList();

            list.Add("You target lot number " + DatabaseItem.HouseNumber + ".");

            if (string.IsNullOrEmpty(DatabaseItem.OwnerID))
            {
                list.Add(" It can be bought for " + Money.GetString(HouseTemplateMgr.GetLotPrice(DatabaseItem)) + ".");
            }
            else if (!string.IsNullOrEmpty(DatabaseItem.Name))
            {
                list.Add(" It is owned by " + DatabaseItem.Name + ".");
            }

            return(list);
        }
Пример #3
0
        public override bool Interact(GamePlayer player)
        {
            if (!base.Interact(player))
            {
                return(false);
            }

            House house = HouseMgr.GetHouseByPlayer(player);

            if (house != null)
            {
                //the player might be targeting a lot he already purchased that has no house on it yet
                if (house.HouseNumber != DatabaseItem.HouseNumber && player.Client.Account.PrivLevel != (int)ePrivLevel.Admin)
                {
                    ChatUtil.SendSystemMessage(player, "You already own a house!");
                    return(false);
                }
            }

            if (string.IsNullOrEmpty(DatabaseItem.OwnerID))
            {
                player.Out.SendCustomDialog("Do you want to buy this lot?\r\n It costs " + Money.GetString(HouseTemplateMgr.GetLotPrice(DatabaseItem)) + "!", BuyLot);
            }
            else
            {
                if (HouseMgr.IsOwner(DatabaseItem, player))
                {
                    player.Out.SendMerchantWindow(HouseTemplateMgr.GetLotMarkerItems(this), eMerchantWindowType.Normal);
                }
                else
                {
                    ChatUtil.SendSystemMessage(player, "You do not own this lot!");
                }
            }

            return(true);
        }
Пример #4
0
        public static bool Start(GameClient client = null)
        {
            // load hookpoint offsets
            House.LoadHookpointOffsets();

            // initialize the house template manager
            HouseTemplateMgr.Initialize();

            _houseList = new Dictionary <ushort, Dictionary <int, House> >();
            _idList    = new Dictionary <ushort, int>();

            int regions = 0;

            foreach (RegionEntry entry in WorldMgr.GetRegionList())
            {
                Region reg = WorldMgr.GetRegion(entry.id);
                if (reg != null && reg.UseHousingManager)
                {
                    if (!_houseList.ContainsKey(reg.ID))
                    {
                        _houseList.Add(reg.ID, new Dictionary <int, House>());
                    }

                    if (!_idList.ContainsKey(reg.ID))
                    {
                        _idList.Add(reg.ID, 0);
                    }

                    regions++;
                }
            }

            int houses     = 0;
            int lotmarkers = 0;

            foreach (DBHouse house in GameServer.Database.SelectAllObjects <DBHouse>())
            {
                Dictionary <int, House> housesForRegion;

                _houseList.TryGetValue(house.RegionID, out housesForRegion);

                // if we don't have the given region loaded as a housing zone, skip this house
                if (housesForRegion == null)
                {
                    continue;
                }

                // if we already loaded this house, that's no bueno, but just skip
                if (housesForRegion.ContainsKey(house.HouseNumber))
                {
                    continue;
                }

                if (SpawnLot(house, housesForRegion) == eLotSpawnType.House)
                {
                    houses++;
                }
                else
                {
                    lotmarkers++;
                }
            }

            if (log.IsInfoEnabled)
            {
                log.Info("[Housing] Loaded " + houses + " houses and " + lotmarkers + " lotmarkers in " + regions + " regions!");
            }

            if (client != null)
            {
                client.Out.SendMessage("Loaded " + houses + " houses and " + lotmarkers + " lotmarkers in " + regions + " regions!", eChatType.CT_System, eChatLoc.CL_SystemWindow);
            }

            if (CheckRentTimer != null)
            {
                CheckRentTimer.Change(Properties.RENT_CHECK_INTERVAL * 60 * 1000, Properties.RENT_CHECK_INTERVAL * 60 * 1000);
            }
            else
            {
                CheckRentTimer = new Timer(CheckRents, null, Properties.RENT_CHECK_INTERVAL * 60 * 1000, Properties.RENT_CHECK_INTERVAL * 60 * 1000);
            }

            return(true);
        }
Пример #5
0
 public virtual bool OnPlayerBuy(GamePlayer player, int item_slot, int number)
 {
     GameMerchant.OnPlayerBuy(player, item_slot, number, HouseTemplateMgr.GetLotMarkerItems(this));
     return(true);
 }