Guest User

PythonOfflineshop.h

a guest
Mar 9th, 2026
49
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.67 KB | None | 0 0
  1. #ifndef __INCLUDE_HEADER_PYTHON_OFFLINESHO__
  2. #define __INCLUDE_HEADER_PYTHON_OFFLINESHO__
  3.  
  4. #ifdef __ENABLE_NEW_OFFLINESHOP__
  5. #include "PythonBackground.h"
  6.  
  7. namespace offlineshop
  8. {
  9. template <class T>
  10. void ZeroObject(T& obj)
  11. {
  12. memset(&obj, 0, sizeof(obj));
  13. }
  14.  
  15. template <class T>
  16. void CopyObject(T& objDest, const T& objSrc)
  17. {
  18. memcpy(&objDest, &objSrc, sizeof(objDest));
  19. }
  20.  
  21. template <class T>
  22. void CopyContainer(T& objDest, const T& objSrc)
  23. {
  24. objDest = objSrc;
  25. }
  26.  
  27. template <class T>
  28. void DeletePointersContainer(T& obj)
  29. {
  30. typename T::iterator it = obj.begin();
  31. for (; it != obj.end(); it++)
  32. delete(*it);
  33. }
  34.  
  35. template <class T ,template <class> class S, typename S<T>::iterator >
  36. void ForEach(S<T>& container, std::function<void(T&)> func)
  37. {
  38. S<T>::iterator it=container.begin(), iter;
  39.  
  40. while((iter = it++) != container.end())
  41. func(*iter);
  42. }
  43.  
  44. template <class T , class K, template <class,class> class S, typename S<K,T>::iterator >
  45. void ForEach(S<K,T>& container, std::function<void(T&)> func)
  46. {
  47. S<K,T>::iterator it=container.begin(), iter;
  48.  
  49. while((iter = it++) != container.end())
  50. func(iter->second);
  51. }
  52. }
  53.  
  54. namespace offlineshop
  55. {
  56. enum eConstOfflineshop {
  57. OFFLINESHOP_DURATION_MAX_DAYS = 8,
  58. OFFLINESHOP_DURATION_MAX_HOURS = 23,
  59. OFFLINESHOP_DURATION_MAX_MINUTES= OFFLINESHOP_DURATION_MAX_DAYS * 24 * 60,
  60. OFFLINESHOP_MAX_FILTER_HISTORY_SIZE = 50,
  61. OFFLINESHOP_MAX_ITEM_NUM = 80,
  62. };
  63. }
  64.  
  65. #ifdef __ENABLE_NEW_SHOP_IN_CITIES__
  66. namespace offlineshop
  67. {
  68. class ShopInstance
  69. {
  70. public:
  71. ShopInstance()
  72. {
  73. m_dwVID = 0;
  74. m_iType = 0;
  75. m_stSign.clear();
  76. }
  77.  
  78. ~ShopInstance()
  79. {
  80. m_dwVID = 0;
  81. m_iType = 0;
  82. m_stSign.clear();
  83. }
  84.  
  85. void SetVID(DWORD dwVID)
  86. {
  87. m_dwVID = dwVID;
  88. }
  89.  
  90. void SetShopType(int iType)
  91. {
  92. m_iType = iType;
  93. }
  94.  
  95. void SetSign(const char* cpszSign)
  96. {
  97. m_stSign = cpszSign;
  98. }
  99.  
  100. void Show(float x, float y, float z)
  101. {
  102.  
  103. m_thingInstance.Clear();
  104. m_thingInstance.ReserveModelThing(1);
  105. m_thingInstance.ReserveModelInstance(1);
  106. m_thingInstance.RegisterModelThing(0, (CGraphicThing *)CResourceManager::Instance().GetResourcePointer("offlineshop/shop.gr2"));
  107. m_thingInstance.SetModelInstance(0, 0, 0);
  108. m_thingInstance.SetPosition(x, -y, z);
  109. m_thingInstance.Show();
  110. m_thingInstance.Update();
  111. m_thingInstance.Transform();
  112. m_thingInstance.Deform();
  113. }
  114.  
  115. DWORD GetVID() const
  116. {
  117. return m_dwVID;
  118. }
  119.  
  120. std::string GetSign() const
  121. {
  122. return m_stSign;
  123. }
  124.  
  125. int GetType() const
  126. {
  127. return m_iType;
  128. }
  129.  
  130. CGraphicThingInstance* GetThingInstancePtr()
  131. {
  132. return &m_thingInstance;
  133. }
  134.  
  135. void Clear()
  136. {
  137. m_thingInstance.Clear();
  138. m_dwVID = 0;
  139. m_iType = 0;
  140. m_stSign.clear();
  141. }
  142.  
  143. void Render()
  144. {
  145. m_thingInstance.Render();
  146. }
  147.  
  148. void BlendRender()
  149. {
  150. m_thingInstance.BlendRender();
  151. }
  152.  
  153. void Update()
  154. {
  155. m_thingInstance.Update();
  156. }
  157. #ifdef ENABLE_NEW_GAME_OPTIONS
  158. void Hide()
  159. {
  160. m_thingInstance.Hide();
  161. }
  162.  
  163. bool IsShow()
  164. {
  165. return m_thingInstance.isShow();
  166. }
  167.  
  168. void ShowShop()
  169. {
  170. return m_thingInstance.Show();
  171. }
  172. #endif
  173. private:
  174. CGraphicThingInstance m_thingInstance;
  175. DWORD m_dwVID;
  176. int m_iType;
  177. std::string m_stSign;
  178. };
  179. }
  180. #endif
  181.  
  182. class CPythonOfflineshop : public CSingleton<CPythonOfflineshop>
  183. {
  184. public:
  185. typedef struct SDatetime
  186. {
  187. BYTE bMinutes;
  188. BYTE bHour;
  189. BYTE bDay;
  190. BYTE bMonth;
  191. int iYear;
  192. } TDatetime;
  193.  
  194. typedef struct SFilterHistoryElement
  195. {
  196. TDatetime datetime;
  197. DWORD dwCountItem;
  198. offlineshop::TFilterInfo filter;
  199.  
  200. bool operator >(const SFilterHistoryElement& r)
  201. {
  202. if(datetime.iYear != r.datetime.iYear)
  203. return datetime.iYear > r.datetime.iYear;
  204.  
  205. if(datetime.bMonth != r.datetime.bMonth)
  206. return datetime.bMonth > r.datetime.bMonth;
  207.  
  208. if(datetime.bDay != r.datetime.bDay)
  209. return datetime.bDay > r.datetime.bDay;
  210.  
  211. if(datetime.bHour != r.datetime.bHour)
  212. return datetime.bHour > r.datetime.bHour;
  213.  
  214. if(datetime.bMinutes != r.datetime.bMinutes)
  215. return datetime.bMinutes > r.datetime.bMinutes;
  216.  
  217. return false;
  218. }
  219.  
  220. } TFilterHistoryElement;
  221.  
  222. typedef struct SFilterPatternInfo
  223. {
  224. TDatetime datetime_lastuse;
  225. std::string stName;
  226. offlineshop::TFilterInfo filter;
  227. } TFilterPatternInfo;
  228.  
  229. typedef std::vector<TFilterHistoryElement> FILTERHISTORY;
  230. typedef FILTERHISTORY::iterator FILTERHISTORY_ITER;
  231. typedef std::map<int, TFilterPatternInfo> FILTERMAP;
  232. typedef FILTERMAP::iterator FILTERMAP_ITER;
  233.  
  234. static void GetNowAsDatetime(TDatetime& datetime)
  235. {
  236. SYSTEMTIME time;
  237. GetLocalTime(&time);
  238. datetime.bMinutes = (BYTE) time.wMinute;
  239. datetime.bHour = (BYTE) time.wHour;
  240. datetime.bDay = (BYTE) time.wDay;
  241. datetime.bMonth = (BYTE) time.wMonth;
  242. datetime.iYear = (int) time.wYear;
  243. }
  244.  
  245. static int AllocPatternID()
  246. {
  247. static int id=0;
  248. return id++;
  249. }
  250.  
  251. public:
  252. CPythonOfflineshop();
  253. ~CPythonOfflineshop();
  254.  
  255. void SetWindowObjectPointer(PyObject* poWindow);
  256. PyObject* GetOfflineshopBoard();
  257.  
  258. void ShopListAddItem(const offlineshop::TShopInfo& shop);
  259. void ShopListShow();
  260. void ShopListClear();
  261. void BuyFromSearch(DWORD dwOwnerID, DWORD dwItemID);
  262. void OpenShop(const offlineshop::TShopInfo& shop, const std::vector<offlineshop::TItemInfo>& vec);
  263. void OpenShopOwner( const offlineshop::TShopInfo& shop,
  264. const std::vector<offlineshop::TItemInfo>& vec ,
  265. const std::vector<offlineshop::TItemInfo>& solds,
  266. const std::vector<offlineshop::TOfferInfo>& offers
  267. );
  268. void OpenShopOwnerNoShop();
  269. void ShopClose();
  270. void ShopFilterResult(const std::vector<offlineshop::TItemInfo>& vec);
  271. void OfferListReceived(const std::vector<offlineshop::TOfferInfo>& offers, const std::vector<offlineshop::TMyOfferExtraInfo>& items);
  272. void SafeboxRefresh(const offlineshop::TValutesInfo& valute,const std::vector<DWORD>& ids, const std::vector<offlineshop::TItemInfoEx>& item);
  273. void AuctionList(const std::vector<offlineshop::TAuctionListElement>& auctions);
  274. void MyAuctionOpen(const offlineshop::TAuctionInfo& auction, const std::vector<offlineshop::TAuctionOfferInfo>& offers);
  275. void AuctionOpen(const offlineshop::TAuctionInfo& auction, const std::vector<offlineshop::TAuctionOfferInfo>& offers);
  276. void OpenMyAuctionNoAuction();
  277. void LoadFilterHistory();
  278. void LoadFilterPatterns();
  279. void SaveFilterHistory();
  280. void SaveFilterPatterns();
  281. void AddNewFilterToHistory(TFilterHistoryElement& element);
  282. void PopOldestFilterHistoryElement();
  283. void AddNewFilterPattern(TFilterPatternInfo& pattern);
  284. void UpdateFilterPatternLastUse(int iPatternID);
  285. void RefreshFilterHistory();
  286. void RefreshFilterPatterns();
  287. void RefreshItemNameMap();
  288. void EnableGuiRefreshSymbol();
  289. void ShopBuilding_AddInventoryItem(int iSlot);
  290. void AuctionBuilding_AddInventoryItem(int iSlot);
  291. void ShopBuilding_AddItem(int iWin, int iSlot);
  292. void AuctionBuilding_AddItem(int iWin, int iSlot);
  293.  
  294. #ifdef __ENABLE_NEW_SHOP_IN_CITIES__
  295. void InsertEntity(DWORD dwVID , int iType, const char* szName, long x, long y, long z);
  296. void RemoveEntity(DWORD dwVID);
  297. void RenderEntities();
  298. void UpdateEntities();
  299. bool GetShowNameFlag();
  300. void SetShowNameFlag(bool flag);
  301. void DeleteEntities();
  302. #ifdef ENABLE_NEW_GAME_OPTIONS
  303. void HideEntities();
  304. void ShowEntities();
  305. #endif
  306. #endif
  307.  
  308. private:
  309. PyObject* m_poWindow;
  310.  
  311. FILTERHISTORY m_filterHistory;
  312. FILTERMAP m_filterPatterns;
  313.  
  314. #ifdef __ENABLE_NEW_SHOP_IN_CITIES__
  315. std::vector<offlineshop::ShopInstance*> m_vecShopInstance;
  316. bool m_bIsShowName;
  317. #endif
  318. };
  319.  
  320. extern void initofflineshop();
  321. #endif
  322. #endif
  323.  
Advertisement
Add Comment
Please, Sign In to add comment