PageRenderTime 58ms CodeModel.GetById 23ms RepoModel.GetById 1ms app.codeStats 0ms

/Scripts/Multis/HousePlacementTool.cs

https://bitbucket.org/Kel/crepuscule
C# | 745 lines | 593 code | 136 blank | 16 comment | 79 complexity | 89a70b5aa0dd3fbcdaedd96a6af666d6 MD5 | raw file
  1. using System;
  2. using System.Collections;
  3. using Server;
  4. using Server.Gumps;
  5. using Server.Multis;
  6. using Server.Mobiles;
  7. using Server.Targeting;
  8. namespace Server.Items
  9. {
  10. public class HousePlacementTool: CrepusculeItem
  11. {
  12. public override int LabelNumber{ get{ return 1060651; } } // a house placement tool
  13. [Constructable]
  14. public HousePlacementTool() : base( 0x14F6 )
  15. {
  16. Weight = 3.0;
  17. LootType = LootType.Blessed;
  18. }
  19. public override void OnDoubleClick( Mobile from )
  20. {
  21. if ( IsChildOf( from.Backpack ) )
  22. from.SendGump( new HousePlacementCategoryGump( from ) );
  23. else
  24. from.SendLocalizedMessage( 1042001 ); // That must be in your pack for you to use it.
  25. }
  26. public HousePlacementTool( Serial serial ) : base( serial )
  27. {
  28. }
  29. public override void Serialize( GenericWriter writer )
  30. {
  31. base.Serialize( writer );
  32. writer.Write( (int) 0 ); // version
  33. }
  34. public override void Deserialize( GenericReader reader )
  35. {
  36. base.Deserialize( reader );
  37. int version = reader.ReadInt();
  38. if ( Weight == 0.0 )
  39. Weight = 3.0;
  40. }
  41. }
  42. public class HousePlacementCategoryGump : Gump
  43. {
  44. private Mobile m_From;
  45. private const int LabelColor = 0x7FFF;
  46. private const int LabelColorDisabled = 0x4210;
  47. public HousePlacementCategoryGump( Mobile from ) : base( 50, 50 )
  48. {
  49. m_From = from;
  50. from.CloseGump( typeof( HousePlacementCategoryGump ) );
  51. from.CloseGump( typeof( HousePlacementListGump ) );
  52. AddPage( 0 );
  53. AddBackground( 0, 0, 270, 145, 5054 );
  54. AddImageTiled( 10, 10, 250, 125, 2624 );
  55. AddAlphaRegion( 10, 10, 250, 125 );
  56. AddHtmlLocalized( 10, 10, 250, 20, 1060239, LabelColor, false, false ); // <CENTER>HOUSE PLACEMENT TOOL</CENTER>
  57. AddButton( 10, 110, 4017, 4019, 0, GumpButtonType.Reply, 0 );
  58. AddHtmlLocalized( 45, 110, 150, 20, 3000363, LabelColor, false, false ); // Close
  59. AddButton( 10, 40, 4005, 4007, 1, GumpButtonType.Reply, 0 );
  60. AddHtmlLocalized( 45, 40, 200, 20, 1060390, LabelColor, false, false ); // Classic Houses
  61. AddButton( 10, 60, 4005, 4007, 2, GumpButtonType.Reply, 0 );
  62. AddHtmlLocalized( 45, 60, 200, 20, 1060391, LabelColor, false, false ); // 2-Story Customizable Houses
  63. AddButton( 10, 80, 4005, 4007, 3, GumpButtonType.Reply, 0 );
  64. AddHtmlLocalized( 45, 80, 200, 20, 1060392, LabelColor, false, false ); // 3-Story Customizable Houses
  65. }
  66. public override void OnResponse( Server.Network.NetState sender, RelayInfo info )
  67. {
  68. if ( !m_From.CheckAlive() )
  69. return;
  70. switch ( info.ButtonID )
  71. {
  72. case 1: // Classic Houses
  73. {
  74. m_From.SendGump( new HousePlacementListGump( m_From, HousePlacementEntry.ClassicHouses ) );
  75. break;
  76. }
  77. case 2: // 2-Story Customizable Houses
  78. {
  79. m_From.SendGump( new HousePlacementListGump( m_From, HousePlacementEntry.TwoStoryFoundations ) );
  80. break;
  81. }
  82. case 3: // 3-Story Customizable Houses
  83. {
  84. m_From.SendGump( new HousePlacementListGump( m_From, HousePlacementEntry.ThreeStoryFoundations ) );
  85. break;
  86. }
  87. }
  88. }
  89. }
  90. public class HousePlacementListGump : Gump
  91. {
  92. private Mobile m_From;
  93. private HousePlacementEntry[] m_Entries;
  94. private const int LabelColor = 0x7FFF;
  95. private const int LabelHue = 0x480;
  96. public HousePlacementListGump( Mobile from, HousePlacementEntry[] entries ) : base( 50, 50 )
  97. {
  98. m_From = from;
  99. m_Entries = entries;
  100. from.CloseGump( typeof( HousePlacementCategoryGump ) );
  101. from.CloseGump( typeof( HousePlacementListGump ) );
  102. AddPage( 0 );
  103. AddBackground( 0, 0, 520, 420, 5054 );
  104. AddImageTiled( 10, 10, 500, 20, 2624 );
  105. AddAlphaRegion( 10, 10, 500, 20 );
  106. AddHtmlLocalized( 10, 10, 500, 20, 1060239, LabelColor, false, false ); // <CENTER>HOUSE PLACEMENT TOOL</CENTER>
  107. AddImageTiled( 10, 40, 500, 20, 2624 );
  108. AddAlphaRegion( 10, 40, 500, 20 );
  109. AddHtmlLocalized( 50, 40, 225, 20, 1060235, LabelColor, false, false ); // House Description
  110. AddHtmlLocalized( 275, 40, 75, 20, 1060236, LabelColor, false, false ); // Storage
  111. AddHtmlLocalized( 350, 40, 75, 20, 1060237, LabelColor, false, false ); // Lockdowns
  112. AddHtmlLocalized( 425, 40, 75, 20, 1060034, LabelColor, false, false ); // Cost
  113. AddImageTiled( 10, 70, 500, 280, 2624 );
  114. AddAlphaRegion( 10, 70, 500, 280 );
  115. AddImageTiled( 10, 360, 500, 20, 2624 );
  116. AddAlphaRegion( 10, 360, 500, 20 );
  117. AddHtmlLocalized( 10, 360, 250, 20, 1060645, LabelColor, false, false ); // Bank Balance:
  118. AddLabel( 250, 360, LabelHue, Banker.GetBalance( from ).ToString() );
  119. AddImageTiled( 10, 390, 500, 20, 2624 );
  120. AddAlphaRegion( 10, 390, 500, 20 );
  121. AddButton( 10, 390, 4017, 4019, 0, GumpButtonType.Reply, 0 );
  122. AddHtmlLocalized( 50, 390, 100, 20, 3000363, LabelColor, false, false ); // Close
  123. for ( int i = 0; i < entries.Length; ++i )
  124. {
  125. int page = 1 + (i / 14);
  126. int index = i % 14;
  127. if ( index == 0 )
  128. {
  129. if ( page > 1 )
  130. {
  131. AddButton( 450, 390, 4005, 4007, 0, GumpButtonType.Page, page );
  132. AddHtmlLocalized( 400, 390, 100, 20, 3000406, LabelColor, false, false ); // Next
  133. }
  134. AddPage( page );
  135. if ( page > 1 )
  136. {
  137. AddButton( 200, 390, 4014, 4016, 0, GumpButtonType.Page, page - 1 );
  138. AddHtmlLocalized( 250, 390, 100, 20, 3000405, LabelColor, false, false ); // Previous
  139. }
  140. }
  141. HousePlacementEntry entry = entries[i];
  142. int y = 70 + (index * 20);
  143. AddButton( 10, y, 4005, 4007, 1 + i, GumpButtonType.Reply, 0 );
  144. AddHtmlLocalized( 50, y, 225, 20, entry.Description, LabelColor, false, false );
  145. AddLabel( 275, y, LabelHue, entry.Storage.ToString() );
  146. AddLabel( 350, y, LabelHue, entry.Lockdowns.ToString() );
  147. AddLabel( 425, y, LabelHue, entry.Cost.ToString() );
  148. }
  149. }
  150. public override void OnResponse( Server.Network.NetState sender, RelayInfo info )
  151. {
  152. if ( !m_From.CheckAlive() )
  153. return;
  154. int index = info.ButtonID - 1;
  155. if ( index >= 0 && index < m_Entries.Length )
  156. {
  157. if ( m_From.AccessLevel < AccessLevel.GameMaster && BaseHouse.HasAccountHouse( m_From ) )
  158. m_From.SendLocalizedMessage( 501271 ); // You already own a house, you may not place another!
  159. else
  160. m_From.Target = new NewHousePlacementTarget( m_Entries, m_Entries[index] );
  161. }
  162. else
  163. {
  164. m_From.SendGump( new HousePlacementCategoryGump( m_From ) );
  165. }
  166. }
  167. }
  168. public class NewHousePlacementTarget : MultiTarget
  169. {
  170. private HousePlacementEntry m_Entry;
  171. private HousePlacementEntry[] m_Entries;
  172. private bool m_Placed;
  173. public NewHousePlacementTarget( HousePlacementEntry[] entries, HousePlacementEntry entry ) : base( entry.MultiID, entry.Offset )
  174. {
  175. Range = 14;
  176. m_Entries = entries;
  177. m_Entry = entry;
  178. }
  179. protected override void OnTarget( Mobile from, object o )
  180. {
  181. if ( !from.CheckAlive() )
  182. return;
  183. IPoint3D ip = o as IPoint3D;
  184. if ( ip != null )
  185. {
  186. if ( ip is Item )
  187. ip = ((Item)ip).GetWorldTop();
  188. Point3D p = new Point3D( ip );
  189. Region reg = Region.Find( new Point3D( p ), from.Map );
  190. if ( from.AccessLevel >= AccessLevel.GameMaster || reg.AllowHousing( from, p ) )
  191. m_Placed = m_Entry.OnPlacement( from, p );
  192. else if ( reg is TreasureRegion )
  193. from.SendLocalizedMessage( 1043287 ); // The house could not be created here. Either something is blocking the house, or the house would not be on valid terrain.
  194. else
  195. from.SendLocalizedMessage( 501265 ); // Housing can not be created in this area.
  196. }
  197. }
  198. protected override void OnTargetFinish( Mobile from )
  199. {
  200. if ( !from.CheckAlive() )
  201. return;
  202. if ( !m_Placed )
  203. from.SendGump( new HousePlacementListGump( from, m_Entries ) );
  204. }
  205. }
  206. public class HousePlacementEntry
  207. {
  208. private Type m_Type;
  209. private int m_Description;
  210. private int m_Storage;
  211. private int m_Lockdowns;
  212. private int m_Cost;
  213. private int m_MultiID;
  214. private Point3D m_Offset;
  215. public Type Type{ get{ return m_Type; } }
  216. public int Description{ get{ return m_Description; } }
  217. public int Storage{ get{ return m_Storage; } }
  218. public int Lockdowns{ get{ return m_Lockdowns; } }
  219. public int Cost{ get{ return m_Cost; } }
  220. public int MultiID{ get{ return m_MultiID; } }
  221. public Point3D Offset{ get{ return m_Offset; } }
  222. public HousePlacementEntry( Type type, int description, int storage, int lockdowns, int cost, int xOffset, int yOffset, int zOffset, int multiID )
  223. {
  224. m_Type = type;
  225. m_Description = description;
  226. m_Storage = storage;
  227. m_Lockdowns = lockdowns;
  228. m_Cost = cost;
  229. m_Offset = new Point3D( xOffset, yOffset, zOffset );
  230. m_MultiID = multiID;
  231. }
  232. public BaseHouse ConstructHouse( Mobile from )
  233. {
  234. try
  235. {
  236. object[] args;
  237. if ( m_Type == typeof( HouseFoundation ) )
  238. args = new object[4]{ from, m_MultiID, m_Storage, m_Lockdowns };
  239. else if ( m_Type == typeof( SmallOldHouse ) || m_Type == typeof( SmallShop ) || m_Type == typeof( TwoStoryHouse ) )
  240. args = new object[2]{ from, m_MultiID };
  241. else
  242. args = new object[1]{ from };
  243. return Activator.CreateInstance( m_Type, args ) as BaseHouse;
  244. }
  245. catch
  246. {
  247. }
  248. return null;
  249. }
  250. public void PlacementWarning_Callback( Mobile from, bool okay, object state )
  251. {
  252. if ( !from.CheckAlive() )
  253. return;
  254. PreviewHouse prevHouse = (PreviewHouse)state;
  255. if ( !okay )
  256. {
  257. prevHouse.Delete();
  258. return;
  259. }
  260. if ( prevHouse.Deleted )
  261. {
  262. /* Too much time has passed and the test house you created has been deleted.
  263. * Please try again!
  264. */
  265. from.SendGump( new NoticeGump( 1060637, 30720, 1060647, 32512, 320, 180, null, null ) );
  266. return;
  267. }
  268. Point3D center = prevHouse.Location;
  269. Map map = prevHouse.Map;
  270. prevHouse.Delete();
  271. ArrayList toMove;
  272. //Point3D center = new Point3D( p.X - m_Offset.X, p.Y - m_Offset.Y, p.Z - m_Offset.Z );
  273. HousePlacementResult res = HousePlacement.Check( from, m_MultiID, center, out toMove );
  274. switch ( res )
  275. {
  276. case HousePlacementResult.Valid:
  277. {
  278. if ( from.AccessLevel < AccessLevel.GameMaster && BaseHouse.HasAccountHouse( from ) )
  279. {
  280. from.SendLocalizedMessage( 501271 ); // You already own a house, you may not place another!
  281. }
  282. else
  283. {
  284. BaseHouse house = ConstructHouse( from );
  285. if ( house == null )
  286. return;
  287. house.Price = m_Cost;
  288. if ( Banker.Withdraw( from, m_Cost ) )
  289. {
  290. from.SendLocalizedMessage( 1060398, m_Cost.ToString() ); // ~1_AMOUNT~ gold has been withdrawn from your bank box.
  291. }
  292. else
  293. {
  294. house.RemoveKeys( from );
  295. house.Delete();
  296. from.SendLocalizedMessage( 1060646 ); // You do not have the funds available in your bank box to purchase this house. Try placing a smaller house, or adding gold or checks to your bank box.
  297. return;
  298. }
  299. house.MoveToWorld( center, from.Map );
  300. for ( int i = 0; i < toMove.Count; ++i )
  301. {
  302. object o = toMove[i];
  303. if ( o is Mobile )
  304. ((Mobile)o).Location = house.BanLocation;
  305. else if ( o is Item )
  306. ((Item)o).Location = house.BanLocation;
  307. }
  308. }
  309. break;
  310. }
  311. case HousePlacementResult.BadItem:
  312. case HousePlacementResult.BadLand:
  313. case HousePlacementResult.BadStatic:
  314. case HousePlacementResult.BadRegionHidden:
  315. case HousePlacementResult.NoSurface:
  316. {
  317. from.SendLocalizedMessage( 1043287 ); // The house could not be created here. Either something is blocking the house, or the house would not be on valid terrain.
  318. break;
  319. }
  320. case HousePlacementResult.BadRegion:
  321. {
  322. from.SendLocalizedMessage( 501265 ); // Housing cannot be created in this area.
  323. break;
  324. }
  325. }
  326. }
  327. public bool OnPlacement( Mobile from, Point3D p )
  328. {
  329. if ( !from.CheckAlive() )
  330. return false;
  331. ArrayList toMove;
  332. Point3D center = new Point3D( p.X - m_Offset.X, p.Y - m_Offset.Y, p.Z - m_Offset.Z );
  333. HousePlacementResult res = HousePlacement.Check( from, m_MultiID, center, out toMove );
  334. switch ( res )
  335. {
  336. case HousePlacementResult.Valid:
  337. {
  338. if ( from.AccessLevel < AccessLevel.GameMaster && BaseHouse.HasAccountHouse( from ) )
  339. {
  340. from.SendLocalizedMessage( 501271 ); // You already own a house, you may not place another!
  341. }
  342. else
  343. {
  344. from.SendLocalizedMessage( 1011576 ); // This is a valid location.
  345. PreviewHouse prev = new PreviewHouse( m_MultiID );
  346. MultiComponentList mcl = prev.Components;
  347. Point3D banLoc = new Point3D( center.X + mcl.Min.X, center.Y + mcl.Max.Y + 1, center.Z );
  348. for ( int i = 0; i < mcl.List.Length; ++i )
  349. {
  350. MultiTileEntry entry = mcl.List[i];
  351. int itemID = entry.m_ItemID & 0x3FFF;
  352. if ( itemID >= 0xBA3 && itemID <= 0xC0E )
  353. {
  354. banLoc = new Point3D( center.X + entry.m_OffsetX, center.Y + entry.m_OffsetY, center.Z );
  355. break;
  356. }
  357. }
  358. for ( int i = 0; i < toMove.Count; ++i )
  359. {
  360. object o = toMove[i];
  361. if ( o is Mobile )
  362. ((Mobile)o).Location = banLoc;
  363. else if ( o is Item )
  364. ((Item)o).Location = banLoc;
  365. }
  366. prev.MoveToWorld( center, from.Map );
  367. /* You are about to place a new house.
  368. * Placing this house will condemn any and all of your other houses that you may have.
  369. * All of your houses on all shards will be affected.
  370. *
  371. * In addition, you will not be able to place another house or have one transferred to you for one (1) real-life week.
  372. *
  373. * Once you accept these terms, these effects cannot be reversed.
  374. * Re-deeding or transferring your new house will not uncondemn your other house(s) nor will the one week timer be removed.
  375. *
  376. * If you are absolutely certain you wish to proceed, click the button next to OKAY below.
  377. * If you do not wish to trade for this house, click CANCEL.
  378. */
  379. from.SendGump( new WarningGump( 1060635, 30720, 1049583, 32512, 420, 280, new WarningGumpCallback( PlacementWarning_Callback ), prev ) );
  380. return true;
  381. }
  382. break;
  383. }
  384. case HousePlacementResult.BadItem:
  385. case HousePlacementResult.BadLand:
  386. case HousePlacementResult.BadStatic:
  387. case HousePlacementResult.BadRegionHidden:
  388. case HousePlacementResult.NoSurface:
  389. {
  390. from.SendLocalizedMessage( 1043287 ); // The house could not be created here. Either something is blocking the house, or the house would not be on valid terrain.
  391. break;
  392. }
  393. case HousePlacementResult.BadRegion:
  394. {
  395. from.SendLocalizedMessage( 501265 ); // Housing cannot be created in this area.
  396. break;
  397. }
  398. }
  399. return false;
  400. }
  401. private static Hashtable m_Table;
  402. static HousePlacementEntry()
  403. {
  404. m_Table = new Hashtable();
  405. FillTable( m_ClassicHouses );
  406. FillTable( m_TwoStoryFoundations );
  407. FillTable( m_ThreeStoryFoundations );
  408. }
  409. public static HousePlacementEntry Find( BaseHouse house )
  410. {
  411. object obj = m_Table[house.GetType()];
  412. if ( obj is HousePlacementEntry )
  413. {
  414. return ((HousePlacementEntry)obj);
  415. }
  416. else if ( obj is ArrayList )
  417. {
  418. ArrayList list = (ArrayList)obj;
  419. for ( int i = 0; i < list.Count; ++i )
  420. {
  421. HousePlacementEntry e = (HousePlacementEntry)list[i];
  422. if ( e.m_MultiID == (house.ItemID & 0x3FFF) )
  423. return e;
  424. }
  425. }
  426. else if ( obj is Hashtable )
  427. {
  428. Hashtable table = (Hashtable)obj;
  429. obj = table[house.ItemID & 0x3FFF];
  430. if ( obj is HousePlacementEntry )
  431. return (HousePlacementEntry)obj;
  432. }
  433. return null;
  434. }
  435. private static void FillTable( HousePlacementEntry[] entries )
  436. {
  437. for ( int i = 0; i < entries.Length; ++i )
  438. {
  439. HousePlacementEntry e = (HousePlacementEntry)entries[i];
  440. object obj = m_Table[e.m_Type];
  441. if ( obj == null )
  442. {
  443. m_Table[e.m_Type] = e;
  444. }
  445. else if ( obj is HousePlacementEntry )
  446. {
  447. ArrayList list = new ArrayList();
  448. list.Add( obj );
  449. list.Add( e );
  450. m_Table[e.m_Type] = list;
  451. }
  452. else if ( obj is ArrayList )
  453. {
  454. ArrayList list = (ArrayList)obj;
  455. if ( list.Count == 8 )
  456. {
  457. Hashtable table = new Hashtable();
  458. for ( int j = 0; j < list.Count; ++j )
  459. table[((HousePlacementEntry)list[j]).m_MultiID] = list[j];
  460. table[e.m_MultiID] = e;
  461. m_Table[e.m_Type] = table;
  462. }
  463. else
  464. {
  465. list.Add( e );
  466. }
  467. }
  468. else if ( obj is Hashtable )
  469. {
  470. ((Hashtable)obj)[e.m_MultiID] = e;
  471. }
  472. }
  473. }
  474. private static HousePlacementEntry[] m_ClassicHouses = new HousePlacementEntry[]
  475. {
  476. new HousePlacementEntry( typeof( SmallOldHouse ), 1011303, 425, 212, 37000, 0, 4, 0, 0x0064 ),
  477. new HousePlacementEntry( typeof( SmallOldHouse ), 1011304, 425, 212, 37000, 0, 4, 0, 0x0066 ),
  478. new HousePlacementEntry( typeof( SmallOldHouse ), 1011305, 425, 212, 36750, 0, 4, 0, 0x0068 ),
  479. new HousePlacementEntry( typeof( SmallOldHouse ), 1011306, 425, 212, 35250, 0, 4, 0, 0x006A ),
  480. new HousePlacementEntry( typeof( SmallOldHouse ), 1011307, 425, 212, 36750, 0, 4, 0, 0x006C ),
  481. new HousePlacementEntry( typeof( SmallOldHouse ), 1011308, 425, 212, 36750, 0, 4, 0, 0x006E ),
  482. new HousePlacementEntry( typeof( SmallShop ), 1011321, 425, 212, 50500, -1, 4, 0, 0x00A0 ),
  483. new HousePlacementEntry( typeof( SmallShop ), 1011322, 425, 212, 52500, 0, 4, 0, 0x00A2 ),
  484. new HousePlacementEntry( typeof( SmallTower ), 1011317, 580, 290, 73500, 3, 4, 0, 0x0098 ),
  485. new HousePlacementEntry( typeof( TwoStoryVilla ), 1011319, 1100, 550, 113750, 3, 6, 0, 0x009E ),
  486. new HousePlacementEntry( typeof( SandStonePatio ), 1011320, 850, 425, 76500, -1, 4, 0, 0x009C ),
  487. new HousePlacementEntry( typeof( LogCabin ), 1011318, 1100, 550, 81750, 1, 6, 0, 0x009A ),
  488. new HousePlacementEntry( typeof( GuildHouse ), 1011309, 1370, 685, 131500, -1, 7, 0, 0x0074 ),
  489. new HousePlacementEntry( typeof( TwoStoryHouse ), 1011310, 1370, 685, 162750, -3, 7, 0, 0x0076 ),
  490. new HousePlacementEntry( typeof( TwoStoryHouse ), 1011311, 1370, 685, 162000, -3, 7, 0, 0x0078 ),
  491. new HousePlacementEntry( typeof( LargePatioHouse ), 1011315, 1370, 685, 129250, -4, 7, 0, 0x008C ),
  492. new HousePlacementEntry( typeof( LargeMarbleHouse ), 1011316, 1370, 685, 160500, -4, 7, 0, 0x0096 ),
  493. new HousePlacementEntry( typeof( Tower ), 1011312, 2119, 1059, 366500, 0, 7, 0, 0x007A ),
  494. new HousePlacementEntry( typeof( Keep ), 1011313, 2625, 1312, 572750, 0, 11, 0, 0x007C ),
  495. new HousePlacementEntry( typeof( Castle ), 1011314, 4076, 2038, 865250, 0, 16, 0, 0x007E )
  496. };
  497. public static HousePlacementEntry[] ClassicHouses{ get{ return m_ClassicHouses; } }
  498. private static HousePlacementEntry[] m_TwoStoryFoundations = new HousePlacementEntry[]
  499. {
  500. new HousePlacementEntry( typeof( HouseFoundation ), 1060241, 425, 212, 30500, 0, 4, 0, 0x13EC ), // 7x7 2-Story Customizable House
  501. new HousePlacementEntry( typeof( HouseFoundation ), 1060242, 580, 290, 34500, 0, 5, 0, 0x13ED ), // 7x8 2-Story Customizable House
  502. new HousePlacementEntry( typeof( HouseFoundation ), 1060243, 650, 325, 38500, 0, 5, 0, 0x13EE ), // 7x9 2-Story Customizable House
  503. new HousePlacementEntry( typeof( HouseFoundation ), 1060244, 700, 350, 42500, 0, 6, 0, 0x13EF ), // 7x10 2-Story Customizable House
  504. new HousePlacementEntry( typeof( HouseFoundation ), 1060245, 750, 375, 46500, 0, 6, 0, 0x13F0 ), // 7x11 2-Story Customizable House
  505. new HousePlacementEntry( typeof( HouseFoundation ), 1060246, 800, 400, 50500, 0, 7, 0, 0x13F1 ), // 7x12 2-Story Customizable House
  506. new HousePlacementEntry( typeof( HouseFoundation ), 1060253, 580, 290, 34500, 0, 4, 0, 0x13F8 ), // 8x7 2-Story Customizable House
  507. new HousePlacementEntry( typeof( HouseFoundation ), 1060254, 650, 325, 39000, 0, 5, 0, 0x13F9 ), // 8x8 2-Story Customizable House
  508. new HousePlacementEntry( typeof( HouseFoundation ), 1060255, 700, 350, 43500, 0, 5, 0, 0x13FA ), // 8x9 2-Story Customizable House
  509. new HousePlacementEntry( typeof( HouseFoundation ), 1060256, 750, 375, 48000, 0, 6, 0, 0x13FB ), // 8x10 2-Story Customizable House
  510. new HousePlacementEntry( typeof( HouseFoundation ), 1060257, 800, 400, 52500, 0, 6, 0, 0x13FC ), // 8x11 2-Story Customizable House
  511. new HousePlacementEntry( typeof( HouseFoundation ), 1060258, 850, 425, 57000, 0, 7, 0, 0x13FD ), // 8x12 2-Story Customizable House
  512. new HousePlacementEntry( typeof( HouseFoundation ), 1060259, 1100, 550, 61500, 0, 7, 0, 0x13FE ), // 8x13 2-Story Customizable House
  513. new HousePlacementEntry( typeof( HouseFoundation ), 1060265, 650, 325, 38500, 0, 4, 0, 0x1404 ), // 9x7 2-Story Customizable House
  514. new HousePlacementEntry( typeof( HouseFoundation ), 1060266, 700, 350, 43500, 0, 5, 0, 0x1405 ), // 9x8 2-Story Customizable House
  515. new HousePlacementEntry( typeof( HouseFoundation ), 1060267, 750, 375, 48500, 0, 5, 0, 0x1406 ), // 9x9 2-Story Customizable House
  516. new HousePlacementEntry( typeof( HouseFoundation ), 1060268, 800, 400, 53500, 0, 6, 0, 0x1407 ), // 9x10 2-Story Customizable House
  517. new HousePlacementEntry( typeof( HouseFoundation ), 1060269, 850, 425, 58500, 0, 6, 0, 0x1408 ), // 9x11 2-Story Customizable House
  518. new HousePlacementEntry( typeof( HouseFoundation ), 1060270, 1100, 550, 63500, 0, 7, 0, 0x1409 ), // 9x12 2-Story Customizable House
  519. new HousePlacementEntry( typeof( HouseFoundation ), 1060271, 1100, 550, 68500, 0, 7, 0, 0x140A ), // 9x13 2-Story Customizable House
  520. new HousePlacementEntry( typeof( HouseFoundation ), 1060277, 700, 350, 42500, 0, 4, 0, 0x1410 ), // 10x7 2-Story Customizable House
  521. new HousePlacementEntry( typeof( HouseFoundation ), 1060278, 750, 375, 48000, 0, 5, 0, 0x1411 ), // 10x8 2-Story Customizable House
  522. new HousePlacementEntry( typeof( HouseFoundation ), 1060279, 800, 400, 53500, 0, 5, 0, 0x1412 ), // 10x9 2-Story Customizable House
  523. new HousePlacementEntry( typeof( HouseFoundation ), 1060280, 850, 425, 59000, 0, 6, 0, 0x1413 ), // 10x10 2-Story Customizable House
  524. new HousePlacementEntry( typeof( HouseFoundation ), 1060281, 1100, 550, 64500, 0, 6, 0, 0x1414 ), // 10x11 2-Story Customizable House
  525. new HousePlacementEntry( typeof( HouseFoundation ), 1060282, 1100, 550, 70000, 0, 7, 0, 0x1415 ), // 10x12 2-Story Customizable House
  526. new HousePlacementEntry( typeof( HouseFoundation ), 1060283, 1150, 575, 75500, 0, 7, 0, 0x1416 ), // 10x13 2-Story Customizable House
  527. new HousePlacementEntry( typeof( HouseFoundation ), 1060289, 750, 375, 46500, 0, 4, 0, 0x141C ), // 11x7 2-Story Customizable House
  528. new HousePlacementEntry( typeof( HouseFoundation ), 1060290, 800, 400, 52500, 0, 5, 0, 0x141D ), // 11x8 2-Story Customizable House
  529. new HousePlacementEntry( typeof( HouseFoundation ), 1060291, 850, 425, 58500, 0, 5, 0, 0x141E ), // 11x9 2-Story Customizable House
  530. new HousePlacementEntry( typeof( HouseFoundation ), 1060292, 1100, 550, 64500, 0, 6, 0, 0x141F ), // 11x10 2-Story Customizable House
  531. new HousePlacementEntry( typeof( HouseFoundation ), 1060293, 1100, 550, 70500, 0, 6, 0, 0x1420 ), // 11x11 2-Story Customizable House
  532. new HousePlacementEntry( typeof( HouseFoundation ), 1060294, 1150, 575, 76500, 0, 7, 0, 0x1421 ), // 11x12 2-Story Customizable House
  533. new HousePlacementEntry( typeof( HouseFoundation ), 1060295, 1200, 600, 82500, 0, 7, 0, 0x1422 ), // 11x13 2-Story Customizable House
  534. new HousePlacementEntry( typeof( HouseFoundation ), 1060301, 800, 400, 50500, 0, 4, 0, 0x1428 ), // 12x7 2-Story Customizable House
  535. new HousePlacementEntry( typeof( HouseFoundation ), 1060302, 850, 425, 57000, 0, 5, 0, 0x1429 ), // 12x8 2-Story Customizable House
  536. new HousePlacementEntry( typeof( HouseFoundation ), 1060303, 1100, 550, 63500, 0, 5, 0, 0x142A ), // 12x9 2-Story Customizable House
  537. new HousePlacementEntry( typeof( HouseFoundation ), 1060304, 1100, 550, 70000, 0, 6, 0, 0x142B ), // 12x10 2-Story Customizable House
  538. new HousePlacementEntry( typeof( HouseFoundation ), 1060305, 1150, 575, 76500, 0, 6, 0, 0x142C ), // 12x11 2-Story Customizable House
  539. new HousePlacementEntry( typeof( HouseFoundation ), 1060306, 1200, 600, 83000, 0, 7, 0, 0x142D ), // 12x12 2-Story Customizable House
  540. new HousePlacementEntry( typeof( HouseFoundation ), 1060307, 1250, 625, 89500, 0, 7, 0, 0x142E ), // 12x13 2-Story Customizable House
  541. new HousePlacementEntry( typeof( HouseFoundation ), 1060314, 1100, 550, 61500, 0, 5, 0, 0x1435 ), // 13x8 2-Story Customizable House
  542. new HousePlacementEntry( typeof( HouseFoundation ), 1060315, 1100, 550, 68500, 0, 5, 0, 0x1436 ), // 13x9 2-Story Customizable House
  543. new HousePlacementEntry( typeof( HouseFoundation ), 1060316, 1150, 575, 75500, 0, 6, 0, 0x1437 ), // 13x10 2-Story Customizable House
  544. new HousePlacementEntry( typeof( HouseFoundation ), 1060317, 1200, 600, 82500, 0, 6, 0, 0x1438 ), // 13x11 2-Story Customizable House
  545. new HousePlacementEntry( typeof( HouseFoundation ), 1060318, 1250, 625, 89500, 0, 7, 0, 0x1439 ), // 13x12 2-Story Customizable House
  546. new HousePlacementEntry( typeof( HouseFoundation ), 1060319, 1300, 650, 96500, 0, 7, 0, 0x143A ) // 13x13 2-Story Customizable House
  547. };
  548. public static HousePlacementEntry[] TwoStoryFoundations{ get{ return m_TwoStoryFoundations; } }
  549. private static HousePlacementEntry[] m_ThreeStoryFoundations = new HousePlacementEntry[]
  550. {
  551. new HousePlacementEntry( typeof( HouseFoundation ), 1060272, 1150, 575, 73500, 0, 8, 0, 0x140B ), // 9x14 3-Story Customizable House
  552. new HousePlacementEntry( typeof( HouseFoundation ), 1060284, 1200, 600, 81000, 0, 8, 0, 0x1417 ), // 10x14 3-Story Customizable House
  553. new HousePlacementEntry( typeof( HouseFoundation ), 1060285, 1250, 625, 86500, 0, 8, 0, 0x1418 ), // 10x15 3-Story Customizable House
  554. new HousePlacementEntry( typeof( HouseFoundation ), 1060296, 1250, 625, 88500, 0, 8, 0, 0x1423 ), // 11x14 3-Story Customizable House
  555. new HousePlacementEntry( typeof( HouseFoundation ), 1060297, 1300, 650, 94500, 0, 8, 0, 0x1424 ), // 11x15 3-Story Customizable House
  556. new HousePlacementEntry( typeof( HouseFoundation ), 1060298, 1350, 675, 100500, 0, 9, 0, 0x1425 ), // 11x16 3-Story Customizable House
  557. new HousePlacementEntry( typeof( HouseFoundation ), 1060308, 1300, 650, 96000, 0, 8, 0, 0x142F ), // 12x14 3-Story Customizable House
  558. new HousePlacementEntry( typeof( HouseFoundation ), 1060309, 1350, 675, 102500, 0, 8, 0, 0x1430 ), // 12x15 3-Story Customizable House
  559. new HousePlacementEntry( typeof( HouseFoundation ), 1060310, 1370, 685, 109000, 0, 9, 0, 0x1431 ), // 12x16 3-Story Customizable House
  560. new HousePlacementEntry( typeof( HouseFoundation ), 1060311, 1370, 685, 115500, 0, 9, 0, 0x1432 ), // 12x17 3-Story Customizable House
  561. new HousePlacementEntry( typeof( HouseFoundation ), 1060320, 1350, 675, 103500, 0, 8, 0, 0x143B ), // 13x14 3-Story Customizable House
  562. new HousePlacementEntry( typeof( HouseFoundation ), 1060321, 1370, 685, 110500, 0, 8, 0, 0x143C ), // 13x15 3-Story Customizable House
  563. new HousePlacementEntry( typeof( HouseFoundation ), 1060322, 1370, 685, 117500, 0, 9, 0, 0x143D ), // 13x16 3-Story Customizable House
  564. new HousePlacementEntry( typeof( HouseFoundation ), 1060323, 2119, 1059, 124500, 0, 9, 0, 0x143E ), // 13x17 3-Story Customizable House
  565. new HousePlacementEntry( typeof( HouseFoundation ), 1060324, 2119, 1059, 131500, 0, 10, 0, 0x143F ), // 13x18 3-Story Customizable House
  566. new HousePlacementEntry( typeof( HouseFoundation ), 1060327, 1150, 575, 73500, 0, 5, 0, 0x1442 ), // 14x9 3-Story Customizable House
  567. new HousePlacementEntry( typeof( HouseFoundation ), 1060328, 1200, 600, 81000, 0, 6, 0, 0x1443 ), // 14x10 3-Story Customizable House
  568. new HousePlacementEntry( typeof( HouseFoundation ), 1060329, 1250, 625, 88500, 0, 6, 0, 0x1444 ), // 14x11 3-Story Customizable House
  569. new HousePlacementEntry( typeof( HouseFoundation ), 1060330, 1300, 650, 96000, 0, 7, 0, 0x1445 ), // 14x12 3-Story Customizable House
  570. new HousePlacementEntry( typeof( HouseFoundation ), 1060331, 1350, 675, 103500, 0, 7, 0, 0x1446 ), // 14x13 3-Story Customizable House
  571. new HousePlacementEntry( typeof( HouseFoundation ), 1060332, 1370, 685, 111000, 0, 8, 0, 0x1447 ), // 14x14 3-Story Customizable House
  572. new HousePlacementEntry( typeof( HouseFoundation ), 1060333, 1370, 685, 118500, 0, 8, 0, 0x1448 ), // 14x15 3-Story Customizable House
  573. new HousePlacementEntry( typeof( HouseFoundation ), 1060334, 2119, 1059, 126000, 0, 9, 0, 0x1449 ), // 14x16 3-Story Customizable House
  574. new HousePlacementEntry( typeof( HouseFoundation ), 1060335, 2119, 1059, 133500, 0, 9, 0, 0x144A ), // 14x17 3-Story Customizable House
  575. new HousePlacementEntry( typeof( HouseFoundation ), 1060336, 2119, 1059, 141000, 0, 10, 0, 0x144B ), // 14x18 3-Story Customizable House
  576. new HousePlacementEntry( typeof( HouseFoundation ), 1060340, 1250, 625, 86500, 0, 6, 0, 0x144F ), // 15x10 3-Story Customizable House
  577. new HousePlacementEntry( typeof( HouseFoundation ), 1060341, 1300, 650, 94500, 0, 6, 0, 0x1450 ), // 15x11 3-Story Customizable House
  578. new HousePlacementEntry( typeof( HouseFoundation ), 1060342, 1350, 675, 102500, 0, 7, 0, 0x1451 ), // 15x12 3-Story Customizable House
  579. new HousePlacementEntry( typeof( HouseFoundation ), 1060343, 1370, 685, 110500, 0, 7, 0, 0x1452 ), // 15x13 3-Story Customizable House
  580. new HousePlacementEntry( typeof( HouseFoundation ), 1060344, 1370, 685, 118500, 0, 8, 0, 0x1453 ), // 15x14 3-Story Customizable House
  581. new HousePlacementEntry( typeof( HouseFoundation ), 1060345, 2119, 1059, 126500, 0, 8, 0, 0x1454 ), // 15x15 3-Story Customizable House
  582. new HousePlacementEntry( typeof( HouseFoundation ), 1060346, 2119, 1059, 134500, 0, 9, 0, 0x1455 ), // 15x16 3-Story Customizable House
  583. new HousePlacementEntry( typeof( HouseFoundation ), 1060347, 2119, 1059, 142500, 0, 9, 0, 0x1456 ), // 15x17 3-Story Customizable House
  584. new HousePlacementEntry( typeof( HouseFoundation ), 1060348, 2119, 1059, 150500, 0, 10, 0, 0x1457 ), // 15x18 3-Story Customizable House
  585. new HousePlacementEntry( typeof( HouseFoundation ), 1060353, 1350, 675, 100500, 0, 6, 0, 0x145C ), // 16x11 3-Story Customizable House
  586. new HousePlacementEntry( typeof( HouseFoundation ), 1060354, 1370, 685, 109000, 0, 7, 0, 0x145D ), // 16x12 3-Story Customizable House
  587. new HousePlacementEntry( typeof( HouseFoundation ), 1060355, 1370, 685, 117500, 0, 7, 0, 0x145E ), // 16x13 3-Story Customizable House
  588. new HousePlacementEntry( typeof( HouseFoundation ), 1060356, 2119, 1059, 126000, 0, 8, 0, 0x145F ), // 16x14 3-Story Customizable House
  589. new HousePlacementEntry( typeof( HouseFoundation ), 1060357, 2119, 1059, 134500, 0, 8, 0, 0x1460 ), // 16x15 3-Story Customizable House
  590. new HousePlacementEntry( typeof( HouseFoundation ), 1060358, 2119, 1059, 143000, 0, 9, 0, 0x1461 ), // 16x16 3-Story Customizable House
  591. new HousePlacementEntry( typeof( HouseFoundation ), 1060359, 2119, 1059, 151500, 0, 9, 0, 0x1462 ), // 16x17 3-Story Customizable House
  592. new HousePlacementEntry( typeof( HouseFoundation ), 1060360, 2119, 1059, 160000, 0, 10, 0, 0x1463 ), // 16x18 3-Story Customizable House
  593. new HousePlacementEntry( typeof( HouseFoundation ), 1060366, 1370, 685, 115500, 0, 7, 0, 0x1469 ), // 17x12 3-Story Customizable House
  594. new HousePlacementEntry( typeof( HouseFoundation ), 1060367, 2119, 1059, 124500, 0, 7, 0, 0x146A ), // 17x13 3-Story Customizable House
  595. new HousePlacementEntry( typeof( HouseFoundation ), 1060368, 2119, 1059, 133500, 0, 8, 0, 0x146B ), // 17x14 3-Story Customizable House
  596. new HousePlacementEntry( typeof( HouseFoundation ), 1060369, 2119, 1059, 142500, 0, 8, 0, 0x146C ), // 17x15 3-Story Customizable House
  597. new HousePlacementEntry( typeof( HouseFoundation ), 1060370, 2119, 1059, 151500, 0, 9, 0, 0x146D ), // 17x16 3-Story Customizable House
  598. new HousePlacementEntry( typeof( HouseFoundation ), 1060371, 2119, 1059, 160500, 0, 9, 0, 0x146E ), // 17x17 3-Story Customizable House
  599. new HousePlacementEntry( typeof( HouseFoundation ), 1060372, 2119, 1059, 169500, 0, 10, 0, 0x146F ), // 17x18 3-Story Customizable House
  600. new HousePlacementEntry( typeof( HouseFoundation ), 1060379, 2119, 1059, 131500, 0, 7, 0, 0x1476 ), // 18x13 3-Story Customizable House
  601. new HousePlacementEntry( typeof( HouseFoundation ), 1060380, 2119, 1059, 141000, 0, 8, 0, 0x1477 ), // 18x14 3-Story Customizable House
  602. new HousePlacementEntry( typeof( HouseFoundation ), 1060381, 2119, 1059, 150500, 0, 8, 0, 0x1478 ), // 18x15 3-Story Customizable House
  603. new HousePlacementEntry( typeof( HouseFoundation ), 1060382, 2119, 1059, 160000, 0, 9, 0, 0x1479 ), // 18x16 3-Story Customizable House
  604. new HousePlacementEntry( typeof( HouseFoundation ), 1060383, 2119, 1059, 169500, 0, 9, 0, 0x147A ), // 18x17 3-Story Customizable House
  605. new HousePlacementEntry( typeof( HouseFoundation ), 1060384, 2119, 1059, 179000, 0, 10, 0, 0x147B ) // 18x18 3-Story Customizable House
  606. };
  607. public static HousePlacementEntry[] ThreeStoryFoundations{ get{ return m_ThreeStoryFoundations; } }
  608. }
  609. }