217 lines
No EOL
5.8 KiB
C#
217 lines
No EOL
5.8 KiB
C#
// Check PackUpHouse() for that crash on item delete. It causes a crash in RemoveMulti (Core)
|
|
|
|
using System;
|
|
using System.Collections;
|
|
using Server;
|
|
using Server.Multis;
|
|
|
|
namespace Knives.TownHouses
|
|
{
|
|
public class General
|
|
{
|
|
public static string Version{ get { return "2.01"; } }
|
|
|
|
// This setting determines the suggested gold value for a single square of a home
|
|
// which then derives price, lockdowns and secures.
|
|
public static int SuggestionFactor { get{ return 600; } }
|
|
|
|
// This setting determines if players need License in order to rent out their property
|
|
public static bool RequireRenterLicense{ get{ return false; } }
|
|
|
|
public static void Configure()
|
|
{
|
|
EventSink.WorldSave += new WorldSaveEventHandler( OnSave );
|
|
}
|
|
|
|
public static void Initialize()
|
|
{
|
|
EventSink.Login += new LoginEventHandler( OnLogin );
|
|
EventSink.Speech += new SpeechEventHandler( HandleSpeech );
|
|
EventSink.ServerStarted += new ServerStartedEventHandler( OnStarted );
|
|
}
|
|
|
|
private static void OnStarted()
|
|
{
|
|
foreach (TownHouse house in TownHouse.AllTownHouses)
|
|
{
|
|
house.InitSectorDefinition();
|
|
RUOVersion.UpdateRegion(house.ForSaleSign);
|
|
}
|
|
}
|
|
|
|
public static void OnSave( WorldSaveEventArgs e )
|
|
{
|
|
foreach( TownHouseSign sign in new ArrayList( TownHouseSign.AllSigns ) )
|
|
sign.ValidateOwnership();
|
|
|
|
foreach( TownHouse house in new ArrayList( TownHouse.AllTownHouses ) )
|
|
if ( house.Deleted )
|
|
{
|
|
TownHouse.AllTownHouses.Remove( house );
|
|
continue;
|
|
}
|
|
}
|
|
|
|
private static void OnLogin( LoginEventArgs e )
|
|
{
|
|
foreach( BaseHouse house in BaseHouse.GetHouses( e.Mobile ) )
|
|
if ( house is TownHouse )
|
|
((TownHouse)house).ForSaleSign.CheckDemolishTimer();
|
|
}
|
|
|
|
private static void HandleSpeech( SpeechEventArgs e )
|
|
{
|
|
ArrayList houses = new ArrayList(BaseHouse.GetHouses( e.Mobile ));
|
|
|
|
if ( houses == null )
|
|
return;
|
|
|
|
foreach( BaseHouse house in houses )
|
|
{
|
|
if (!RUOVersion.RegionContains(house.Region, e.Mobile))
|
|
continue;
|
|
|
|
if ( house is TownHouse )
|
|
house.OnSpeech( e );
|
|
|
|
if ( house.Owner == e.Mobile
|
|
&& e.Speech.ToLower() == "create rental contract"
|
|
&& CanRent( e.Mobile, house, true ) )
|
|
{
|
|
e.Mobile.AddToBackpack( new RentalContract() );
|
|
e.Mobile.SendMessage( "A rental contract has been placed in your bag." );
|
|
}
|
|
|
|
if ( house.Owner == e.Mobile
|
|
&& e.Speech.ToLower() == "check storage" )
|
|
{
|
|
int count = 0;
|
|
|
|
e.Mobile.SendMessage( "You have {0} lockdowns and {1} secures available.", RemainingSecures( house ), RemainingLocks( house ) );
|
|
|
|
if ( (count = AllRentalLocks( house )) != 0 )
|
|
e.Mobile.SendMessage( "Current rentals are using {0} of your lockdowns.", count );
|
|
if ( (count = AllRentalSecures( house )) != 0 )
|
|
e.Mobile.SendMessage( "Current rentals are using {0} of your secures.", count );
|
|
}
|
|
}
|
|
}
|
|
|
|
private static bool CanRent( Mobile m, BaseHouse house, bool say )
|
|
{
|
|
if ( house is TownHouse && ((TownHouse)house).ForSaleSign.PriceType != "Sale" )
|
|
{
|
|
if ( say )
|
|
m.SendMessage( "You must own your property to rent it." );
|
|
|
|
return false;
|
|
}
|
|
|
|
if ( RequireRenterLicense )
|
|
{
|
|
RentalLicense lic = m.Backpack.FindItemByType( typeof( RentalLicense ) ) as RentalLicense;
|
|
|
|
if ( lic != null && lic.Owner == null )
|
|
lic.Owner = m;
|
|
|
|
if ( lic == null || lic.Owner != m )
|
|
{
|
|
if ( say )
|
|
m.SendMessage( "You must have a renter's license to rent your property." );
|
|
|
|
return false;
|
|
}
|
|
}
|
|
|
|
if ( EntireHouseContracted( house ) )
|
|
{
|
|
if ( say )
|
|
m.SendMessage( "This entire house already has a rental contract." );
|
|
|
|
return false;
|
|
}
|
|
|
|
if ( RemainingSecures( house ) < 0 || RemainingLocks( house ) < 0 )
|
|
{
|
|
if ( say )
|
|
m.SendMessage( "You don't have the storage available to rent property." );
|
|
|
|
return false;
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
#region Rental Info
|
|
|
|
public static bool EntireHouseContracted( BaseHouse house )
|
|
{
|
|
foreach( Item item in TownHouseSign.AllSigns )
|
|
if ( item is RentalContract && house == ((RentalContract)item).ParentHouse )
|
|
if ( ((RentalContract)item).EntireHouse )
|
|
return true;
|
|
|
|
return false;
|
|
}
|
|
|
|
public static bool HasContract( BaseHouse house )
|
|
{
|
|
foreach( Item item in TownHouseSign.AllSigns )
|
|
if ( item is RentalContract && house == ((RentalContract)item).ParentHouse )
|
|
return true;
|
|
|
|
return false;
|
|
}
|
|
|
|
public static bool HasOtherContract( BaseHouse house, RentalContract contract )
|
|
{
|
|
foreach( Item item in TownHouseSign.AllSigns )
|
|
if ( item is RentalContract && item != contract && house == ((RentalContract)item).ParentHouse )
|
|
return true;
|
|
|
|
return false;
|
|
}
|
|
|
|
public static int RemainingSecures( BaseHouse house )
|
|
{
|
|
if ( house == null )
|
|
return 0;
|
|
|
|
int a, b, c, d;
|
|
|
|
return (Core.AOS ? house.GetAosMaxSecures() - house.GetAosCurSecures( out a, out b, out c, out d ) : house.MaxSecures - house.SecureCount) - AllRentalSecures( house );
|
|
}
|
|
|
|
public static int RemainingLocks( BaseHouse house )
|
|
{
|
|
if ( house == null )
|
|
return 0;
|
|
|
|
return (Core.AOS ? house.GetAosMaxLockdowns() - house.GetAosCurLockdowns() : house.MaxLockDowns - house.LockDownCount) - AllRentalLocks( house );
|
|
}
|
|
|
|
public static int AllRentalSecures( BaseHouse house )
|
|
{
|
|
int count = 0;
|
|
|
|
foreach( TownHouseSign sign in TownHouseSign.AllSigns )
|
|
if ( sign is RentalContract && ((RentalContract)sign).ParentHouse == house )
|
|
count+=sign.Secures;
|
|
|
|
return count;
|
|
}
|
|
|
|
public static int AllRentalLocks( BaseHouse house )
|
|
{
|
|
int count = 0;
|
|
|
|
foreach( TownHouseSign sign in TownHouseSign.AllSigns )
|
|
if ( sign is RentalContract && ((RentalContract)sign).ParentHouse == house )
|
|
count+=sign.Locks;
|
|
|
|
return count;
|
|
}
|
|
|
|
#endregion
|
|
}
|
|
} |