/src/Mango/Items/ItemFactory.cs

https://bitbucket.org/TheRealAtho/mango · C# · 179 lines · 154 code · 25 blank · 0 comment · 9 complexity · 00dd0dc6355056c384b3a32f48550db5 MD5 · raw file

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using Mango.Players;
  6. using MySql.Data.MySqlClient;
  7. using log4net;
  8. using Mango.Rooms.Mapping;
  9. namespace Mango.Items
  10. {
  11. static class ItemFactory
  12. {
  13. private static ILog log = LogManager.GetLogger("Mango.Items.ItemFactory");
  14. public static Item CreateSingleItemNullable(ItemData Data, Player Player, string Flags, string DisplayFlags, double ExpireTimestamp, bool Untradable = false)
  15. {
  16. if (Data == null) throw new InvalidOperationException("Data cannot be null.");
  17. using (var DbCon = Mango.GetServer().GetDatabase().GetConnection())
  18. {
  19. try
  20. {
  21. DbCon.Open();
  22. DbCon.BeginTransaction();
  23. DbCon.SetQuery("INSERT INTO `items` (definition_id,user_id,room_id,room_pos_x,room_pos_y,room_pos_z,room_wall_pos,room_rot,flags,flags_display,untradable,expire_timestamp,soundmanager_id,soundmanager_order) VALUES(@did,@uid,@rid,@x,@y,@z,@wallpos,@rot,@flags,@dflags,@untradable,@expirets,@soundid,@soundorder);");
  24. DbCon.AddParameter("did", Data.Id);
  25. DbCon.AddParameter("uid", Player.Id);
  26. DbCon.AddParameter("rid", 0);
  27. DbCon.AddParameter("x", 0);
  28. DbCon.AddParameter("y", 0);
  29. DbCon.AddParameter("z", 0);
  30. DbCon.AddParameter("wallpos", "");
  31. DbCon.AddParameter("rot", 0);
  32. DbCon.AddParameter("flags", Flags);
  33. DbCon.AddParameter("dflags", DisplayFlags);
  34. DbCon.AddParameter("untradable", Untradable == true ? "1" : "0");
  35. DbCon.AddParameter("expirets", ExpireTimestamp);
  36. DbCon.AddParameter("soundid", 0);
  37. DbCon.AddParameter("soundorder", 0);
  38. DbCon.ExecuteNonQuery();
  39. Item Item = new Item(DbCon.SelectLastId(), Data, Data.Id, Player.Id, 0, "", 0, new Vector3D(), Flags, DisplayFlags, Untradable, ExpireTimestamp, 0, 0);
  40. DbCon.Commit();
  41. return Item;
  42. }
  43. catch (MySqlException)
  44. {
  45. DbCon.Rollback();
  46. return null;
  47. }
  48. }
  49. }
  50. public static List<Item> CreateMultipleItems(ItemData Data, Player Player, string Flags, string DisplayFlags, double ExpireTimestamp, int Amount, bool Untradable = false)
  51. {
  52. if (Data == null) throw new InvalidOperationException("Data cannot be null.");
  53. List<Item> Items = new List<Item>();
  54. using (var DbCon = Mango.GetServer().GetDatabase().GetConnection())
  55. {
  56. try
  57. {
  58. DbCon.Open();
  59. DbCon.BeginTransaction();
  60. for (int i = 0; i < Amount; i++)
  61. {
  62. DbCon.SetQuery("INSERT INTO `items` (definition_id,user_id,room_id,room_pos_x,room_pos_y,room_pos_z,room_wall_pos,room_rot,flags,flags_display,untradable,expire_timestamp,soundmanager_id,soundmanager_order) VALUES(@did,@uid,@rid,@x,@y,@z,@wallpos,@rot,@flags,@dflags,@untradable,@expirets,@soundid,@soundorder);");
  63. DbCon.AddParameter("did", Data.Id);
  64. DbCon.AddParameter("uid", Player.Id);
  65. DbCon.AddParameter("rid", 0);
  66. DbCon.AddParameter("x", 0);
  67. DbCon.AddParameter("y", 0);
  68. DbCon.AddParameter("z", 0);
  69. DbCon.AddParameter("wallpos", "");
  70. DbCon.AddParameter("rot", 0);
  71. DbCon.AddParameter("flags", Flags);
  72. DbCon.AddParameter("dflags", DisplayFlags);
  73. DbCon.AddParameter("untradable", Untradable == true ? "1" : "0");
  74. DbCon.AddParameter("expirets", ExpireTimestamp);
  75. DbCon.AddParameter("soundid", 0);
  76. DbCon.AddParameter("soundorder", 0);
  77. DbCon.ExecuteNonQuery();
  78. Item Item = new Item(DbCon.SelectLastId(), Data, Data.Id, Player.Id, 0, "", 0, new Vector3D(), Flags, DisplayFlags, Untradable, ExpireTimestamp, 0, 0);
  79. Items.Add(Item);
  80. }
  81. DbCon.Commit();
  82. }
  83. catch (MySqlException)
  84. {
  85. DbCon.Rollback();
  86. return null;
  87. }
  88. }
  89. return Items;
  90. }
  91. public static List<Item> CreateTeleporterItems(ItemData Data, Player Player, double ExpireTimestamp, bool Untradable = false)
  92. {
  93. List<Item> Items = new List<Item>();
  94. using (var DbCon = Mango.GetServer().GetDatabase().GetConnection())
  95. {
  96. try
  97. {
  98. DbCon.Open();
  99. DbCon.BeginTransaction();
  100. DbCon.SetQuery("INSERT INTO `items` (definition_id,user_id,room_id,room_pos_x,room_pos_y,room_pos_z,room_wall_pos,room_rot,flags,flags_display,untradable,expire_timestamp,soundmanager_id,soundmanager_order) VALUES(@did,@uid,@rid,@x,@y,@z,@wallpos,@rot,@flags,@dflags,@untradable,@expirets,@soundid,@soundorder);");
  101. DbCon.AddParameter("did", Data.Id);
  102. DbCon.AddParameter("uid", Player.Id);
  103. DbCon.AddParameter("rid", 0);
  104. DbCon.AddParameter("x", 0);
  105. DbCon.AddParameter("y", 0);
  106. DbCon.AddParameter("z", 0);
  107. DbCon.AddParameter("wallpos", "");
  108. DbCon.AddParameter("rot", 0);
  109. DbCon.AddParameter("flags", "");
  110. DbCon.AddParameter("dflags", "");
  111. DbCon.AddParameter("untradable", Untradable == true ? "1" : "0");
  112. DbCon.AddParameter("expirets", ExpireTimestamp);
  113. DbCon.AddParameter("soundid", 0);
  114. DbCon.AddParameter("soundorder", 0);
  115. DbCon.ExecuteNonQuery();
  116. int Item1Id = DbCon.SelectLastId();
  117. DbCon.SetQuery("INSERT INTO `items` (definition_id,user_id,room_id,room_pos_x,room_pos_y,room_pos_z,room_wall_pos,room_rot,flags,flags_display,untradable,expire_timestamp,soundmanager_id,soundmanager_order) VALUES(@did,@uid,@rid,@x,@y,@z,@wallpos,@rot,@flags,@dflags,@untradable,@expirets,@soundid,@soundorder);");
  118. DbCon.AddParameter("did", Data.Id);
  119. DbCon.AddParameter("uid", Player.Id);
  120. DbCon.AddParameter("rid", 0);
  121. DbCon.AddParameter("x", 0);
  122. DbCon.AddParameter("y", 0);
  123. DbCon.AddParameter("z", 0);
  124. DbCon.AddParameter("wallpos", "");
  125. DbCon.AddParameter("rot", 0);
  126. DbCon.AddParameter("flags", Item1Id.ToString());
  127. DbCon.AddParameter("dflags", "");
  128. DbCon.AddParameter("untradable", Untradable == true ? "1" : "0");
  129. DbCon.AddParameter("expirets", ExpireTimestamp);
  130. DbCon.AddParameter("soundid", 0);
  131. DbCon.AddParameter("soundorder", 0);
  132. DbCon.ExecuteNonQuery();
  133. int Item2Id = DbCon.SelectLastId();
  134. Item Item1 = new Item(Item1Id, Data, Data.Id, Player.Id, 0, "", 0, new Vector3D(), Item2Id.ToString(), "", Untradable, ExpireTimestamp, 0, 0);
  135. Item Item2 = new Item(Item2Id, Data, Data.Id, Player.Id, 0, "", 0, new Vector3D(), Item1Id.ToString(), "", Untradable, ExpireTimestamp, 0, 0);
  136. DbCon.SetQuery("UPDATE `items` SET `flags` = @flags WHERE `id` = @id;");
  137. DbCon.AddParameter("flags", Item2.Id.ToString());
  138. DbCon.AddParameter("id", Item1.Id);
  139. DbCon.ExecuteNonQuery();
  140. DbCon.Commit();
  141. Items.Add(Item1);
  142. Items.Add(Item2);
  143. }
  144. catch (MySqlException ex)
  145. {
  146. log.Fatal("Failed to create Teleporter Item", ex);
  147. DbCon.Rollback();
  148. return null;
  149. }
  150. }
  151. return Items;
  152. }
  153. }
  154. }