1. import ui
  2. import constInfo
  3. import chat
  4. import time
  5. import item
  6. import uiWeb
  7. import uiToolTip
  8. import app
  9. # import urllib
  10. import localeInfo
  11. import player
  12. ## add "editline.CanEdit()" in the ui.py
  13. IS_BUY = FALSE ## Do not change
  14. class Itemshop(ui.ScriptWindow):
  15. ###########
  16. ##Options##
  17. ###########
  18. ## Banner options
  19. bannerOptions = {
  20. 'folder' : 'locale/ae/ui/itemshop/banner/', ## folderpath to the banner images
  21. 'time' : 5, ## time in seconds to change the banner automatically
  22. 'timeToFade' : 0.04,
  23. 'interval' : 0.05,
  24. 'banner_0' : 'banner_0',
  25. 'banner_1' : 'banner_1',
  26. }
  27. ## Buy coins; voting options
  28. link = {
  29. 'buyCoins' : "http://goo.gl/forms/gwopLqxyfa",
  30. # 'vote' : "http://homepage.ephyra2.info/?s=vote4coins_system",
  31. }
  32. ## achievementshop category options
  33. categorys = {
  34. 'achievementshop' : [
  35. ['الأحجار',1],
  36. ['المرافقين',2],
  37. ['الدواب',3],
  38. ['التفعيلات',4],
  39. ['شايغراب',5],
  40. ['خامات',6],
  41. ['الأزياء',7],
  42. ['منوعات',8],
  43. ['الإكسسورات',9],
  44. ['الأسلحة',10],
  45. ],
  46. }
  47. def __init__(self):
  48. ui.ScriptWindow.__init__(self)
  49. self.isLoaded = FALSE
  50. def __LoadScript(self):
  51. try:
  52. self.__LoadVariables()
  53. except:
  54. import exception
  55. exception.Abort('test.__LoadScript.LoadVariables')
  56. ## Load script
  57. try:
  58. pyScrLoader = ui.PythonScriptLoader()
  59. pyScrLoader.LoadScriptFile(self, 'uiscript/itemshop_v2.py')
  60. except:
  61. import exception
  62. exception.Abort('test.__LoadScript.LoadObject')
  63. ## Load gui
  64. try:
  65. self.BindObjects()
  66. except:
  67. import exception
  68. exception.Abort('test.__LoadScript.BindObjects')
  69. ## Load events
  70. try:
  71. self.BindEvents()
  72. except:
  73. import exception
  74. exception.Abort('test.__LoadScript.BindEvents')
  75. self.isLoaded = TRUE
  76. ## Load variables (DONT CHANGE)
  77. def __LoadVariables(self):
  78. self.bannerVar = {
  79. 'fadeOut' : 0,
  80. 'currentTime' : 0 ,
  81. 'intervallEndTime' : 0,
  82. 'currentAlphaValue' : 0,
  83. 'currentImage' : 0,
  84. 'lastSwitch' : time.clock() + self.bannerOptions['time'],
  85. }
  86. self.page = {
  87. 'curPage' : 'STARTPAGE',
  88. }
  89. self.arrows = {
  90. 'startpage' : {
  91. 'mostBought' : 1,
  92. 'hotOffers' : 1,
  93. },
  94. 'achievementshop' : {
  95. 'arrowOnSale' : 1,
  96. 'arrowCategory' : 0,
  97. },
  98. }
  99. self.category = {
  100. 'achievementshop' : 0,
  101. }
  102. ## Bind the objects in __LoadScript
  103. def BindObjects(self):
  104. self.board = self.GetChild('Board')
  105. self.elements = {
  106. 'titlebar' : self.GetChild('titlebar'),
  107. 'pages' : {
  108. 'startpage' : self.GetChild('Startpage'),
  109. 'achievementshop' : self.GetChild('Achievementshop'),
  110. },
  111. 'windows' : {
  112. 'startpage': {
  113. 'banner' : self.GetChild('Banner'),
  114. 'mostBought' : self.GetChild('MostBought'),
  115. },
  116. ## Itemshop start ##
  117. ## Itemshop end ##
  118. },
  119. 'buttons' : {
  120. 'startpage': {
  121. 'startpage' : self.GetChild('btn_startpage'),
  122. 'achievementshop' : self.GetChild('btn_achievementshop'),
  123. 'banner_0' : self.GetChild('btn_banner_0'),
  124. 'banner_1' : self.GetChild('btn_banner_1'),
  125. # 'vote' : self.GetChild('btn_vote'),
  126. 'mostBought_left' : self.GetChild('btn_mostBought_left'),
  127. 'mostBought_right' : self.GetChild('btn_mostBought_right'),
  128. 'hotOffers_up' : self.GetChild('btn_hotOffers_up'),
  129. 'hotOffers_down' : self.GetChild('btn_hotOffers_down'),
  130. },
  131. 'images' : {
  132. 'ALmutiri' : self.GetChild('ALmutiri_dev'),
  133. },
  134. 'achievementshop' : {
  135. 'onSale_left' : self.GetChild('btn_AsOnSale_left'),
  136. 'onSale_right' : self.GetChild('btn_AsOnSale_right'),
  137. 'onSale_up' : self.GetChild('btn_AsCategory_up'),
  138. 'onSale_down' : self.GetChild('btn_AsCategory_down'),
  139. },
  140. },
  141. 'textline' : {
  142. 'menue' : {
  143. 'achievementshop_coins' : self.GetChild('tx_a_coins'),
  144. },
  145. 'achievementshop': {
  146. 'page_nr' : self.GetChild('tx_AsOnSale_pageNr'),
  147. },
  148. },
  149. 'images' : {
  150. 'startpage': {
  151. 'banner' : self.GetChild('image_banner'),
  152. 'fade_banner' : self.GetChild('image_fade_banner'),
  153. },
  154. },
  155. 'itemBoxes' : {
  156. 'startpage' : {
  157. 'mostBought': {
  158. 'box_00' : ItemBox(),
  159. 'box_01' : ItemBox(),
  160. 'box_02' : ItemBox(),
  161. },
  162. 'hotOffers': {
  163. 'box_00' : ItemBox(),
  164. 'box_01' : ItemBox(),
  165. },
  166. },
  167. 'achievementshop' : {
  168. 'box_00' : ItemBox(),
  169. 'box_01' : ItemBox(),
  170. 'box_02' : ItemBox(),
  171. 'box_03' : ItemBox(),
  172. 'box_04' : ItemBox(),
  173. 'box_05' : ItemBox(),
  174. 'box_06' : ItemBox(),
  175. 'box_07' : ItemBox(),
  176. 'box_08' : ItemBox(),
  177. 'box_09' : ItemBox(),
  178. 'box_010' : ItemBox(),
  179. 'box_011' : ItemBox(),
  180. },
  181. },
  182. }
  183. ##Itemshop category buttons
  184. # for i in xrange(min(10, len(self.categorys['itemshop']))):
  185. # self.elements['buttons']['itemshop']['category_%d' % i] = self.CreateCategoryButton(self.elements['pages']['itemshop'], 44, 47+30*i,self.categorys['itemshop'][i][0], self.__OnClickItemshopCategory, self.categorys['itemshop'][i][1])
  186. # for i in xrange(min(10, len(self.categorys['voteshop']))):
  187. # self.elements['buttons']['voteshop']['category_%d' % i] = self.CreateCategoryButton(self.elements['pages']['voteshop'], 44, 47+30*i,self.categorys['voteshop'][i][0], self.__OnClickVoteshopCategory, self.categorys['voteshop'][i][1])
  188. self.AchievementshopCategoryRefresh()
  189. self.webWnd = uiWeb.WebWindow()
  190. self.webWnd.LoadWindow()
  191. self.webWnd.Hide()
  192. self.PopUp = PricePopUp()
  193. def SendSystemChat(self, text):
  194. chat.AppendChat(chat.CHAT_TYPE_INFO, "<System>: "+str(text))
  195. ## Bind events to the objects in __LoadScript
  196. def BindEvents(self):
  197. self.elements['titlebar'].SetCloseEvent(ui.__mem_func__(self.__OnClickClose))
  198. # self.elements['buttons']['menue']['question'].SetEvent(self.__OnClickQuestion)
  199. self.elements['buttons']['startpage']['startpage'].SetEvent(self.ChangePage, 'STARTPAGE')
  200. self.elements['buttons']['startpage']['achievementshop'].SetEvent(self.ChangePage, 'ACHIEVEMENTSHOP')
  201. # self.elements['buttons']['startpage']['vote'].SetEvent(self.__OnClickVote)
  202. ## Change Banner
  203. self.elements['buttons']['startpage']['banner_0'].SetToggleDownEvent(lambda arg = 0: self.__OnClickBannerBtn(arg))
  204. self.elements['buttons']['startpage']['banner_0'].SetToggleUpEvent(lambda arg = 0: self.__OnClickBannerBtn(arg))
  205. self.elements['buttons']['startpage']['banner_1'].SetToggleDownEvent(lambda arg = 1: self.__OnClickBannerBtn(arg))
  206. self.elements['buttons']['startpage']['banner_1'].SetToggleUpEvent(lambda arg = 1: self.__OnClickBannerBtn(arg))
  207. ## Item boxes most bought
  208. self.elements['itemBoxes']['startpage']['mostBought']['box_00'].Open(self.elements['pages']['startpage'],91+8,389-100+8)
  209. self.elements['itemBoxes']['startpage']['mostBought']['box_01'].Open(self.elements['pages']['startpage'],235+8,389-100+8)
  210. self.elements['itemBoxes']['startpage']['mostBought']['box_02'].Open(self.elements['pages']['startpage'],382+8,389-100+8)
  211. ## Item boxes hot offers
  212. self.elements['itemBoxes']['startpage']['hotOffers']['box_00'].Open(self.elements['pages']['startpage'],603,193-100)
  213. self.elements['itemBoxes']['startpage']['hotOffers']['box_01'].Open(self.elements['pages']['startpage'],603,307-100)
  214. ## Item boxes achievementshop
  215. self.elements['itemBoxes']['achievementshop']['box_00'].Open(self.elements['pages']['achievementshop'],259,126-100)
  216. self.elements['itemBoxes']['achievementshop']['box_01'].Open(self.elements['pages']['achievementshop'],405,126-100)
  217. self.elements['itemBoxes']['achievementshop']['box_02'].Open(self.elements['pages']['achievementshop'],551,126-100)
  218. self.elements['itemBoxes']['achievementshop']['box_03'].Open(self.elements['pages']['achievementshop'],259,216-100)
  219. self.elements['itemBoxes']['achievementshop']['box_04'].Open(self.elements['pages']['achievementshop'],405,216-100)
  220. self.elements['itemBoxes']['achievementshop']['box_05'].Open(self.elements['pages']['achievementshop'],551,216-100)
  221. self.elements['itemBoxes']['achievementshop']['box_06'].Open(self.elements['pages']['achievementshop'],259,306-100)
  222. self.elements['itemBoxes']['achievementshop']['box_07'].Open(self.elements['pages']['achievementshop'],405,306-100)
  223. self.elements['itemBoxes']['achievementshop']['box_08'].Open(self.elements['pages']['achievementshop'],551,306-100)
  224. self.elements['itemBoxes']['achievementshop']['box_09'].Open(self.elements['pages']['achievementshop'],259,396-100)
  225. self.elements['itemBoxes']['achievementshop']['box_010'].Open(self.elements['pages']['achievementshop'],405,396-100)
  226. self.elements['itemBoxes']['achievementshop']['box_011'].Open(self.elements['pages']['achievementshop'],551,396-100)
  227. ## Arrows Startpage
  228. self.elements['buttons']['startpage']['mostBought_left'].SetEvent(self.__OnClickArrow, 'MOSTBOUGHT_LEFT')
  229. self.elements['buttons']['startpage']['mostBought_right'].SetEvent(self.__OnClickArrow, 'MOSTBOUGHT_RIGHT')
  230. self.elements['buttons']['startpage']['hotOffers_up'].SetEvent(self.__OnClickArrow, 'HOTOFFERS_UP')
  231. self.elements['buttons']['startpage']['hotOffers_down'].SetEvent(self.__OnClickArrow, 'HOTOFFERS_DOWN')
  232. ## Arrows Achievementshop
  233. self.elements['buttons']['achievementshop']['onSale_left'].SetEvent(self.__OnClickArrow, 'ACHIEVEMENTSHOP_ONSALE_LEFT')
  234. self.elements['buttons']['achievementshop']['onSale_right'].SetEvent(self.__OnClickArrow, 'ACHIEVEMENTSHOP_ONSALE_RIGHT')
  235. self.elements['buttons']['achievementshop']['onSale_up'].SetEvent(self.__OnClickArrow, 'ACHIEVEMENTSHOP_ONSALE_UP')
  236. self.elements['buttons']['achievementshop']['onSale_down'].SetEvent(self.__OnClickArrow, 'ACHIEVEMENTSHOP_ONSALE_DOWN')
  237. ## Textlines
  238. self.elements['textline']['achievementshop']['page_nr'].SetParent(self.elements['pages']['achievementshop'])
  239. def __del__(self):
  240. ui.ScriptWindow.__del__(self)
  241. ## Hide the Gui
  242. def Destroy(self):
  243. self.Hide()
  244. ## Open the gui
  245. def Open(self, isCoins, vsCoins, asCoins, banner_0, banner_1):
  246. if FALSE == self.isLoaded:
  247. self.__LoadScript()
  248. self.bannerOptions['banner_0'] = banner_0
  249. self.bannerOptions['banner_1'] = banner_1
  250. self.SetAchievementshopCoins(asCoins)
  251. self.page['curPage'] = 'STARTPAGE'
  252. self.ChangePage('STARTPAGE')
  253. self.ChangeBannerButton(0)
  254. self.SwitchBanner(0)
  255. self.SetTop()
  256. self.Show()
  257. ## Close the gui
  258. def Close(self):
  259. self.Hide()
  260. ## Hide other pages and load the new Page
  261. def ChangePage(self, page):
  262. self.page['curPage'] = page
  263. if page == 'STARTPAGE':
  264. self.arrows['startpage']['mostBought'] = 1
  265. self.arrows['startpage']['hotOffers'] = 1
  266. self.HotOffersItemsRefresh()
  267. self.MostBoughtItemsRefresh()
  268. self.elements['pages']['achievementshop'].Hide()
  269. self.elements['pages']['startpage'].Show()
  270. elif page == 'ACHIEVEMENTSHOP':
  271. self.arrows['achievementshop']['arrowOnSale'] = 1
  272. self.category['achievementshop'] = self.categorys['achievementshop'][0][1]
  273. self.arrows['achievementshop']['arrowCategory'] = 0
  274. self.AchievementshopCategoryRefresh()
  275. self.AchievementshopItemsRefresh()
  276. self.elements['pages']['startpage'].Hide()
  277. self.elements['pages']['achievementshop'].Show()
  278. def ChangeBannerButton(self, enable):
  279. if enable == 0:
  280. self.elements['buttons']['startpage']['banner_1'].SetUp()
  281. self.elements['buttons']['startpage']['banner_0'].Down()
  282. elif enable == 1:
  283. self.elements['buttons']['startpage']['banner_0'].SetUp()
  284. self.elements['buttons']['startpage']['banner_1'].Down()
  285. #########################
  286. ## REFRESH ITEMS START ##
  287. #########################
  288. def HotOffersItemsRefresh(self):
  289. curPage = self.arrows['startpage']['hotOffers']
  290. ## Hide Itemboxes
  291. for i in xrange(2):
  292. self.elements['itemBoxes']['startpage']['hotOffers']['box_0%d' % i].Hide()
  293. ## Load hotOffers first itemboxes
  294. for i in xrange(min(2, len(constInfo.ITEMSHOP['items']['startpage']['hotOffers']) - curPage * 2 +2)):
  295. curItem = constInfo.ITEMSHOP['items']['startpage']['hotOffers'][i + (curPage - 1)*2]
  296. self.elements['itemBoxes']['startpage']['hotOffers']['box_0%d' % i].SetContent(curItem[0], curItem[1], curItem[2], curItem[3]) ## type, itemvnum, itemdetails, price
  297. self.elements['itemBoxes']['startpage']['hotOffers']['box_0%d' % i].SetPercent(curItem[4]) ## percent
  298. self.elements['itemBoxes']['startpage']['hotOffers']['box_0%d' % i].SetTime(curItem[5], curItem[6]) ## time , runOut
  299. self.elements['itemBoxes']['startpage']['hotOffers']['box_0%d' % i].Show()
  300. if curPage * 2 >= len(constInfo.ITEMSHOP['items']['startpage']['hotOffers']):
  301. self.elements['buttons']['startpage']['hotOffers_down'].Hide()
  302. else:
  303. self.elements['buttons']['startpage']['hotOffers_down'].Show()
  304. if curPage > 1:
  305. self.elements['buttons']['startpage']['hotOffers_up'].Show()
  306. else:
  307. self.elements['buttons']['startpage']['hotOffers_up'].Hide()
  308. def MostBoughtItemsRefresh(self):
  309. curPage = self.arrows['startpage']['mostBought']
  310. ## Hide Itemboxes
  311. for i in xrange(3):
  312. self.elements['itemBoxes']['startpage']['mostBought']['box_0%d' % i].Hide()
  313. ## Load mostBought first itemboxes
  314. for i in xrange(min(3, len(constInfo.ITEMSHOP['items']['startpage']['mostBought']) - curPage * 3 +3)):
  315. curItem = constInfo.ITEMSHOP['items']['startpage']['mostBought'][i + (curPage - 1)*3]
  316. self.elements['itemBoxes']['startpage']['mostBought']['box_0%d' % i].SetContent(curItem[0], curItem[1], curItem[2], curItem[3]) ## type, itemvnum, itemdetails, price
  317. self.elements['itemBoxes']['startpage']['mostBought']['box_0%d' % i].SetPercent(curItem[4]) ## percent
  318. self.elements['itemBoxes']['startpage']['mostBought']['box_0%d' % i].SetTime(curItem[5], curItem[6]) ## time , runOut
  319. self.elements['itemBoxes']['startpage']['mostBought']['box_0%d' % i].Show()
  320. if curPage * 3 >= len(constInfo.ITEMSHOP['items']['startpage']['mostBought']):
  321. self.elements['buttons']['startpage']['mostBought_right'].Hide()
  322. else:
  323. self.elements['buttons']['startpage']['mostBought_right'].Show()
  324. if curPage > 1:
  325. self.elements['buttons']['startpage']['mostBought_left'].Show()
  326. else:
  327. self.elements['buttons']['startpage']['mostBought_left'].Hide()
  328. def AchievementshopItemsRefresh(self):
  329. curPage = self.arrows['achievementshop']['arrowOnSale']
  330. # self.SendSystemChat('curPage: '+str(curPage))
  331. ## Hide Itemboxes
  332. for i in xrange(12):
  333. self.elements['itemBoxes']['achievementshop']['box_0%d' % i].Hide()
  334. ## Load mostBought first itemboxes
  335. try:
  336. for i in xrange(min(12, len(constInfo.ITEMSHOP['items']['achievementshop'][self.category['achievementshop']]) - curPage * 12 +12)):
  337. curItem = constInfo.ITEMSHOP['items']['achievementshop'][self.category['achievementshop']][i + (curPage - 1)*12]
  338. # self.SendSystemChat('curItem: '+ str(i)+ ' ' +str(curItem))
  339. self.elements['itemBoxes']['achievementshop']['box_0%d' % i].SetContent(curItem[0], curItem[1], curItem[2], curItem[3]) ## type, itemvnum, itemdetails, price
  340. self.elements['itemBoxes']['achievementshop']['box_0%d' % i].SetPercent(curItem[4]) ## percent
  341. self.elements['itemBoxes']['achievementshop']['box_0%d' % i].SetTime(curItem[5], curItem[6]) ## time , runOut
  342. self.elements['itemBoxes']['achievementshop']['box_0%d' % i].Show()
  343. # self.SendSystemChat('curItem: added' + str(i))
  344. except:
  345. self.SendChat('Hier wurden keine Items gefunden, bitte patchen.')
  346. self.SendChat('Tritt der Fehler weiterhin auf, dann bitte einem GM melden, mit folgendem Fehler: [Error 002]')
  347. self.elements['buttons']['achievementshop']['onSale_right'].Hide()
  348. self.elements['buttons']['achievementshop']['onSale_left'].Hide()
  349. self.elements['textline']['achievementshop']['page_nr'].Hide()
  350. return
  351. maxPage = self.RoundUp(float(len(constInfo.ITEMSHOP['items']['achievementshop'][self.category['achievementshop']]))/float(12))
  352. if maxPage > 1:
  353. self.elements['textline']['achievementshop']['page_nr'].SetText(str(curPage) + ' / ' + str(maxPage))
  354. self.elements['textline']['achievementshop']['page_nr'].Show()
  355. else:
  356. self.elements['textline']['achievementshop']['page_nr'].Hide()
  357. if curPage * 12 >= len(constInfo.ITEMSHOP['items']['achievementshop'][self.category['achievementshop']]):
  358. self.elements['buttons']['achievementshop']['onSale_right'].Hide()
  359. else:
  360. self.elements['buttons']['achievementshop']['onSale_right'].Show()
  361. if curPage > 1:
  362. self.elements['buttons']['achievementshop']['onSale_left'].Show()
  363. else:
  364. self.elements['buttons']['achievementshop']['onSale_left'].Hide()
  365. def AchievementshopCategoryRefresh(self):
  366. try:
  367. for i in xrange(10):
  368. self.elements['buttons']['achievementshop']['category_%d' % i].Hide()
  369. except:
  370. pass
  371. try:
  372. for i in xrange(min(10, len(self.categorys['achievementshop']))):
  373. scrolledId = i + self.arrows['achievementshop']['arrowCategory']
  374. self.elements['buttons']['achievementshop']['category_%d' % i] = self.CreateCategoryButton(self.elements['pages']['achievementshop'], 44, 47+30*i,self.categorys['achievementshop'][scrolledId][0], self.__OnClickAchievementshopCategory, self.categorys['achievementshop'][scrolledId][1])
  375. self.elements['buttons']['achievementshop']['category_%d' % i].Show()
  376. except:
  377. pass
  378. if (len(self.categorys['achievementshop']) > 10):
  379. if (self.arrows['achievementshop']['arrowCategory'] <= 0):
  380. self.elements['buttons']['achievementshop']['onSale_down'].Show()
  381. self.elements['buttons']['achievementshop']['onSale_up'].Hide()
  382. elif (self.arrows['achievementshop']['arrowCategory']+10 < len(self.categorys['achievementshop'])):
  383. self.elements['buttons']['achievementshop']['onSale_down'].Show()
  384. self.elements['buttons']['achievementshop']['onSale_up'].Show()
  385. elif (self.arrows['achievementshop']['arrowCategory']+10 >= len(self.categorys['achievementshop'])):
  386. self.elements['buttons']['achievementshop']['onSale_down'].Hide()
  387. self.elements['buttons']['achievementshop']['onSale_up'].Show()
  388. else:
  389. self.elements['buttons']['achievementshop']['onSale_down'].Hide()
  390. self.elements['buttons']['achievementshop']['onSale_up'].Hide()
  391. #######################
  392. ## REFRESH ITEMS END ##
  393. #######################
  394. #########################
  395. ## OnClick Events START #
  396. #########################
  397. ## Arrows (startpage [mostBought, hotOffers], itemshop, voteshop)
  398. def __OnClickArrow(self, arrow):
  399. if arrow == 'MOSTBOUGHT_LEFT':
  400. self.arrows['startpage']['mostBought'] -= 1
  401. self.MostBoughtItemsRefresh()
  402. elif arrow == 'MOSTBOUGHT_RIGHT':
  403. self.arrows['startpage']['mostBought'] += 1
  404. self.MostBoughtItemsRefresh()
  405. elif arrow == 'HOTOFFERS_UP':
  406. self.arrows['startpage']['hotOffers'] -= 1
  407. self.HotOffersItemsRefresh()
  408. elif arrow == 'HOTOFFERS_DOWN':
  409. self.arrows['startpage']['hotOffers'] += 1
  410. self.HotOffersItemsRefresh()
  411. elif arrow == 'ACHIEVEMENTSHOP_ONSALE_LEFT':
  412. self.arrows['achievementshop']['arrowOnSale'] -= 1
  413. self.AchievementshopItemsRefresh()
  414. elif arrow == 'ACHIEVEMENTSHOP_ONSALE_RIGHT':
  415. self.arrows['achievementshop']['arrowOnSale'] += 1
  416. self.AchievementshopItemsRefresh()
  417. elif arrow == 'ACHIEVEMENTSHOP_ONSALE_UP':
  418. self.arrows['achievementshop']['arrowCategory'] -= 1
  419. self.AchievementshopItemsRefresh()
  420. elif arrow == 'ACHIEVEMENTSHOP_ONSALE_DOWN':
  421. self.arrows['achievementshop']['arrowCategory'] += 1
  422. self.AchievementshopItemsRefresh()
  423. ## Category Buttons
  424. def __OnClickAchievementshopCategory(self, arg):
  425. self.category['achievementshop'] = arg
  426. self.arrows['achievementshop']['arrowOnSale'] = 1
  427. self.AchievementshopItemsRefresh()
  428. ## Show the current market price of coins
  429. def __OnClickQuestion(self):
  430. if self.PopUp.IsShow():
  431. self.PopUp.Close()
  432. else:
  433. self.PopUp.Open()
  434. ## Close gui
  435. def __OnClickClose(self):
  436. self.Close()
  437. ## Switch the banner
  438. def __OnClickBannerBtn(self, arg):
  439. self.SwitchBanner(arg)
  440. ## Open link to buy coins
  441. def __OnClickBuyCoins(self):
  442. self.webWnd.Open(self.link['buyCoins'])
  443. ## Open link to vote
  444. # def __OnClickVote(self):
  445. # self.webWnd.Open(self.link['vote'])
  446. ########################
  447. ## OnClick Events END ##
  448. ########################
  449. ## Other functions [ConvertNumberToCoins, SetVoteshopCoins, SetItemshopCoins, CreateCategoryButton, SendChat, OnUpdate(BANNER,), SwitchBanner, SetAlpha]
  450. def ConvertNumberToCoins(self, coins, text):
  451. if coins <= 0 :
  452. return("0 %s" % text)
  453. return("%s %s" % ('.'.join([ i-3<0 and str(coins)[:i] or str(coins)[i-3:i] for i in range(len(str(coins))%3, len(str(coins))+1, 3) if i ]), text))
  454. def SetAchievementshopCoins(self, coins):
  455. self.elements['textline']['menue']['achievementshop_coins'].SetText('%s' % self.ConvertNumberToCoins(coins, ''))
  456. def CreateCategoryButton(self, parent, x, y, text, func, arg):
  457. button = ui.Button()
  458. button.SetParent(parent)
  459. button.SetUpVisual("locale/ae/ui/itemshop/btn_category_norm.sub")
  460. button.SetOverVisual("locale/ae/ui/itemshop/btn_category_press.sub")
  461. button.SetDownVisual("locale/ae/ui/itemshop/btn_category_hover.sub")
  462. button.SetText(text)
  463. button.SetEvent(ui.__mem_func__(func), arg)
  464. button.SetPosition(x, y)
  465. button.Show()
  466. return button
  467. def SendChat(self, text):
  468. chat.AppendChat(chat.CHAT_TYPE_INFO, '<Shop>: '+str(text))
  469. def OnUpdate(self):
  470. ## Banner UPDATE START
  471. if self.bannerVar['lastSwitch'] < time.clock():
  472. if self.bannerVar['currentImage'] == 1:
  473. self.SwitchBanner(0)
  474. else:
  475. self.SwitchBanner(1)
  476. ## if image fade out activated, start fading out
  477. if self.bannerVar['fadeOut'] == 1:
  478. ## get current time
  479. self.bannerVar['currentTime'] = time.clock()
  480. ## if alpha value is bigger than zero, then check if it's time to change the alpha value - interval;
  481. ## else deactivate fade out and hide the fade_banner and change the banner button
  482. if self.bannerVar['currentAlphaValue'] > 0.0:
  483. if self.bannerVar['currentTime'] >= self.bannerVar['intervallEndTime']:
  484. newAlphaValue = self.bannerVar['currentAlphaValue']
  485. newAlphaValue -= self.bannerOptions['interval']
  486. self.SetAlpha(self.elements['images']['startpage']['fade_banner'], newAlphaValue)
  487. self.bannerVar['intervallEndTime'] = self.bannerVar['currentTime'] + self.bannerOptions['timeToFade']
  488. else:
  489. self.bannerVar['fadeOut'] = 0
  490. self.elements['images']['startpage']['fade_banner'].Hide()
  491. ## Banner UPDATE END ##
  492. ## switch the banner with a fade out
  493. def SwitchBanner(self,newBanner):
  494. self.bannerVar['lastSwitch'] = time.clock() + self.bannerOptions['time'] + self.bannerOptions['timeToFade']/self.bannerOptions['interval']
  495. self.elements['images']['startpage']['fade_banner'].LoadImage(self.bannerOptions['folder'] + self.bannerOptions['banner_%d' % self.bannerVar['currentImage']] + '.jpg')
  496. self.elements['images']['startpage']['fade_banner'].Show()
  497. self.elements['images']['startpage']['banner'].LoadImage(self.bannerOptions['folder'] + self.bannerOptions['banner_%d' % newBanner]+ '.jpg')
  498. self.bannerVar['currentImage'] = newBanner
  499. self.SetAlpha(self.elements['images']['startpage']['fade_banner'], 1.0)
  500. self.bannerVar['fadeOut'] = 1
  501. self.bannerVar['intervallEndTime'] = self.bannerVar['currentTime'] + self.bannerOptions['timeToFade']
  502. self.ChangeBannerButton(newBanner)
  503. ## set the alpha value of an image 'transparent'
  504. def SetAlpha(self, image, alpha):
  505. self.bannerVar['currentAlphaValue'] = alpha
  506. image.SetAlpha(alpha)
  507. def RoundUp(self, num):
  508. if (num + 1) != int(num+1):
  509. return int(num+1)
  510. else:
  511. return int(num)
  512. ## Other functions end
  513. def OnPressEscapeKey(self):
  514. self.Close()
  515. return TRUE
  516. def OnPressExitKey(self):
  517. self.Close()
  518. return TRUE
  519. class ItemBox(ui.ScriptWindow):
  520. def __init__(self):
  521. ui.ScriptWindow.__init__(self)
  522. self.isLoaded = FALSE
  523. self.time = None
  524. self.runOut = None
  525. self.price = None
  526. self.itemData = []
  527. self.lastTime = None
  528. def __LoadScript(self):
  529. try:
  530. pyScrLoader = ui.PythonScriptLoader()
  531. pyScrLoader.LoadScriptFile(self, 'uiscript/itemshop_v2_itembox.py')
  532. except:
  533. import exception
  534. exception.Abort('test.__LoadScript.LoadObject')
  535. try:
  536. self.itemBox = self.GetChild('Background')
  537. self.timeBox = self.GetChild('TimeBox')
  538. self.countdown = self.GetChild('tx_countdown')
  539. self.percentBox = self.GetChild('PercentBox')
  540. self.tx_percent = self.GetChild('tx_percent')
  541. self.btn_buy = self.GetChild('btn_buy')
  542. self.itemName = self.GetChild('tx_itemName')
  543. self.itemPrice = self.GetChild('tx_itemPrice')
  544. self.amount = self.GetChild('ed_amount')
  545. self.amountBox = self.GetChild('sb_amount')
  546. self.icon = self.GetChild('icon_item')
  547. self.toolTip = uiToolTip.ItemToolTip()
  548. self.toolTip.HideToolTip()
  549. self.itemBuyQuestionDialog = ItemBuyDialog()
  550. except:
  551. import exception
  552. exception.Abort('test.__LoadScript.BindObject')
  553. try:
  554. self.btn_buy.SetEvent(self.__OnClickBuy)
  555. self.amount.SetNumberMode()
  556. self.itemBuyQuestionDialog.SetAcceptEvent(lambda arg=TRUE: self.AnswerBuyItem(arg))
  557. self.itemBuyQuestionDialog.SetCancelEvent(lambda arg=FALSE: self.AnswerBuyItem(arg))
  558. self.icon.SAFE_SetStringEvent("MOUSE_OVER_IN",self.Icon_MouseOverIn)
  559. self.icon.SAFE_SetStringEvent("MOUSE_OVER_OUT",self.Icon_MouseOverOut)
  560. except:
  561. import exception
  562. exception.Abort('test.__LoadScript.BindEvent')
  563. self.isLoaded = TRUE
  564. def __del__(self):
  565. ui.ScriptWindow.__del__(self)
  566. def Destroy(self):
  567. self.Hide()
  568. ## Set the content of this box
  569. def SetContent(self, type, id, itemData, price):
  570. self.type = type
  571. self.itemData = itemData
  572. self.id = id ## id from mysql, used to identify the item from the table
  573. self.price = price
  574. self.itemPrice.SetText('%d %s' % (price, (['I-Coins','V-Coins','نقاط الإنجازات'])[type]))
  575. self.amount.SetText('1')
  576. item.SelectItem(itemData[0])
  577. if item.IsFlag(4) == 1:
  578. self.amountBox.Show()
  579. else:
  580. self.amountBox.Hide()
  581. self.itemName.SetText(item.GetItemName())
  582. ## Load the image and scale the item if the slotsize is bigger than 1
  583. self.icon.LoadImage(str(item.GetIconImageFileName()))
  584. self.icon.SetScale(1, ([1, 0.6, 0.4])[item.GetItemSize()[1]-1])
  585. self.btn_buy.Enable()
  586. self.amount.KillFocus()
  587. self.amount.CanEdit(TRUE)
  588. self.timeBox.Hide()
  589. self.percentBox.Hide()
  590. def SetTime(self, time, runOut):
  591. if time == 0:
  592. self.timeBox.Hide()
  593. self.time = None
  594. return
  595. else:
  596. self.timeBox.Show()
  597. self.time = time
  598. self.runOut = runOut
  599. self.lastTime = 0
  600. def SetPercent(self, percent):
  601. if percent == 0:
  602. self.percentBox.Hide()
  603. return
  604. else:
  605. self.percentBox.LoadImage("locale/ae/ui/itemshop/discount_percent_box.sub")
  606. self.percentBox.Show()
  607. self.itemPrice.SetText('%d %s' % (self.price-(self.price/100.00)*percent, (['I-Coins','V-Coins','نقاط الإنجازات'])[self.type]))
  608. self.tx_percent.SetText(str(percent) + '%')
  609. ## Set the parent to attach and the coordinates
  610. def Open(self,parent,x,y):
  611. if FALSE == self.isLoaded:
  612. self.__LoadScript()
  613. self.SetParent(parent)
  614. self.SetPosition(x,y)
  615. self.amount.SetText('1')
  616. self.btn_buy.Disable()
  617. self.amountBox.Hide()
  618. self.amount.CanEdit(FALSE)
  619. self.Show()
  620. def Icon_MouseOverIn(self):
  621. self.toolTip.ClearToolTip()
  622. item.SelectItem(self.itemData[0])
  623. attrSlot = [(self.itemData[4],self.itemData[5]),(self.itemData[6],self.itemData[7]),(self.itemData[8],self.itemData[9]),(self.itemData[10],self.itemData[11]),(self.itemData[12],self.itemData[13]),(self.itemData[14],self.itemData[15]),(self.itemData[16],self.itemData[17])]
  624. #attrSlot += [(0,0) for i in range(player.ATTRIBUTE_SLOT_MAX_NUM-len(attrSlot))]
  625. for i in xrange(player.ATTRIBUTE_SLOT_MAX_NUM):
  626. attrSlot.append((0, 0))
  627. ## if item is real time (limit type) then calculate the time
  628. if item.GetLimit(0)[0] == 7:
  629. self.toolTip.AddItemData(self.itemData[0], [self.itemData[1] + app.GetGlobalTimeStamp(),self.itemData[2],self.itemData[3],0,0,0], attrSlot)
  630. else:
  631. self.toolTip.AddItemData(self.itemData[0], [self.itemData[1],self.itemData[2],self.itemData[3],0,0,0], attrSlot)
  632. def Icon_MouseOverOut(self):
  633. self.toolTip.HideToolTip()
  634. def OnUpdate(self):
  635. amount = self.amount.GetText()
  636. if amount:
  637. ## if the first character of amount is a 0 or its empty and not focused, then set the amount to 1
  638. if (amount != "" and amount[0] == '0') or (not self.amount.IsFocus() and amount == ""):
  639. self.amount.SetText('1')
  640. if int(amount) > 200:
  641. self.amount.SetText('200')
  642. ## if time is set then calculate the time until end
  643. if self.time:
  644. remaining = self.time - app.GetGlobalTimeStamp()
  645. if self.lastTime < time.clock():
  646. if remaining <= 0:
  647. if self.runOut == 1:
  648. self.time = None
  649. self.countdown.SetText('منتهية الصلاحية')
  650. self.btn_buy.Disable()
  651. self.amount.CanEdit(FALSE) ## new function in ui
  652. else:
  653. self.timeBox.Hide()
  654. self.percentBox.Hide()
  655. self.itemPrice.SetText('%d %s' % (self.price, (['I-Coins','V-Coins','نقاط الإنجازات'])[self.type]))
  656. return
  657. self.lastTime = time.clock() + 1
  658. hoursRemaining = int(remaining) / 3600
  659. minutesRemaining = int(remaining % 3600) / 60
  660. secondsRemaining = int(remaining % 60)
  661. self.countdown.SetText('س%d د%d ث%d' % (hoursRemaining, minutesRemaining, secondsRemaining))
  662. def __OnClickBuy(self):
  663. if self.amount.GetText() == '':
  664. self.amount.SetText('1')
  665. self.amount.KillFocus()
  666. amount = self.amount.GetText()
  667. price = int(amount) * int(self.itemPrice.GetText().split(' ')[0])
  668. if amount == '1':
  669. self.itemBuyQuestionDialog.SetText("هل تريد شراء %s من %d %s حقا؟" % (self.itemName.GetText(), price, (['I-Coins','V-Coins','نقاط الإنجازات'])[self.type]))
  670. else:
  671. self.itemBuyQuestionDialog.SetText("هل تريد شرا %s عدد %s من %d %s حقا؟" % (amount, self.itemName.GetText(), price, (['I-Coins','V-Coins','نقاط الإنجازات'])[self.type]))
  672. self.itemBuyQuestionDialog.Open()
  673. def AnswerBuyItem(self, arg):
  674. self.itemBuyQuestionDialog.Close()
  675. if arg == 1:
  676. # self.SendChat('BUY ID: %d AMOUNT: %s' % (self.id, self.amount.GetText()))
  677. import event
  678. constInfo.ITEMSHOP["questCMD"] = 'BUY#%d#%s' % (self.id, self.amount.GetText())
  679. event.QuestButtonClick(int(constInfo.ITEMSHOP["qid"]))
  680. ## Send buy item : [type, id, amount]
  681. self.amount.SetText('1')
  682. def SendChat(self, text):
  683. chat.AppendChat(chat.CHAT_TYPE_INFO, '<Shop>: '+str(text))
  684. class ItemBuyDialog(ui.ScriptWindow):
  685. def __init__(self):
  686. ui.ScriptWindow.__init__(self)
  687. self.__CreateDialog()
  688. def __del__(self):
  689. ui.ScriptWindow.__del__(self)
  690. def __CreateDialog(self):
  691. pyScrLoader = ui.PythonScriptLoader()
  692. pyScrLoader.LoadScriptFile(self, "uiscript/questiondialog.py")
  693. self.board = self.GetChild("board")
  694. self.textLine = self.GetChild("message")
  695. self.acceptButton = self.GetChild("accept")
  696. self.cancelButton = self.GetChild("cancel")
  697. def Open(self):
  698. global IS_BUY
  699. if IS_BUY == TRUE:
  700. return
  701. IS_BUY = TRUE
  702. self.SetCenterPosition()
  703. self.SetTop()
  704. self.Show()
  705. def Close(self):
  706. global IS_BUY
  707. IS_BUY = FALSE
  708. self.Hide()
  709. def SetWidth(self, width):
  710. height = self.GetHeight()
  711. self.SetSize(width, height)
  712. self.board.SetSize(width, height)
  713. self.SetCenterPosition()
  714. self.UpdateRect()
  715. def SAFE_SetAcceptEvent(self, event):
  716. self.acceptButton.SAFE_SetEvent(event)
  717. def SAFE_SetCancelEvent(self, event):
  718. self.cancelButton.SAFE_SetEvent(event)
  719. def SetAcceptEvent(self, event):
  720. self.acceptButton.SetEvent(event)
  721. def SetCancelEvent(self, event):
  722. self.cancelButton.SetEvent(event)
  723. def SetText(self, text):
  724. self.textLine.SetText(text)
  725. def SetAcceptText(self, text):
  726. self.acceptButton.SetText(text)
  727. def SetCancelText(self, text):
  728. self.cancelButton.SetText(text)
  729. def OnPressEscapeKey(self):
  730. self.Close()
  731. return TRUE
  732. class PricePopUp(ui.ScriptWindow):
  733. POPUPTXTLINK = "http://client.connect.ephyra2.info/shopprices.txt"
  734. def __init__(self):
  735. ui.ScriptWindow.__init__(self)
  736. self.isLoaded = FALSE
  737. def __LoadScript(self):
  738. try:
  739. pyScrLoader = ui.PythonScriptLoader()
  740. pyScrLoader.LoadScriptFile(self, "uiscript/itemshop_popup.py")
  741. except:
  742. import exception
  743. exception.Abort("test.__LoadScript.LoadObject")
  744. try:
  745. self.board = self.GetChild("ItemshopPopupBoard")
  746. self.closeBtn = self.GetChild("CloseButton")
  747. self.itemShopText = {
  748. "text_0" : self.GetChild("label_text_0"),
  749. "text_1" : self.GetChild("label_text_1"),
  750. "text_2" : self.GetChild("label_text_2"),
  751. "text_3" : self.GetChild("label_text_3"),
  752. }
  753. self.voteShopText = self.GetChild("label_text_4")
  754. self.slot = self.GetChild("ItemSlotPreview")
  755. except:
  756. import exception
  757. exception.Abort("test.__LoadScript.BindObject")
  758. self.closeBtn.SetEvent(ui.__mem_func__(self.Close))
  759. self.toolTip = uiToolTip.ItemToolTip()
  760. self.slot.SetOverInItemEvent(ui.__mem_func__(self.OverInItem))
  761. self.slot.SetOverOutItemEvent(ui.__mem_func__(self.OverOutItem))
  762. self.isLoaded = TRUE
  763. def __del__(self):
  764. ui.ScriptWindow.__del__(self)
  765. def Destroy(self):
  766. self.Close()
  767. def Open(self):
  768. if FALSE == self.isLoaded:
  769. self.__LoadScript()
  770. self.SetTop()
  771. self.Show()
  772. self.BuildPage()
  773. def OverOutItem(self):
  774. self.toolTip.Hide()
  775. def OverInItem(self):
  776. self.toolTip.Show()
  777. self.toolTip.SetItemToolTip(self.vnum)
  778. def BuildPage(self):
  779. try:
  780. respons = str(urllib.urlopen(self.POPUPTXTLINK).read())
  781. self.txt = eval(respons)
  782. self.vnum = None
  783. count = None
  784. for i in range(4):
  785. if self.txt[i].find("[ITEMSHOP_TEXT_"+str(i)+"]") != -1:
  786. startIndex = self.txt[i].find("[ITEMSHOP_TEXT_"+str(i)+"]")+17
  787. endIndex = self.txt[i].find("[/ITEMSHOP_TEXT_"+str(i)+"]")
  788. self.itemShopText['text_'+str(i)].SetText(str((self.txt[i])[startIndex:endIndex]))
  789. if self.txt[4].find("[VOTESHOP_TEXT_0]") != -1:
  790. startIndex = self.txt[4].find("[VOTESHOP_TEXT_0]")+17
  791. endIndex = self.txt[4].find("[/VOTESHOP_TEXT_0]")
  792. self.voteShopText.SetText(str((self.txt[4])[startIndex:endIndex]))
  793. if self.txt[5].find("[VOTESHOP_ITEM_VNUM]") != -1:
  794. startIndex = self.txt[5].find("[VOTESHOP_ITEM_VNUM]")+20
  795. endIndex = self.txt[5].find("[/VOTESHOP_ITEM_VNUM]")
  796. self.vnum = int((self.txt[5])[startIndex:endIndex])
  797. if self.txt[6].find("[VOTESHOP_ITEM_COUNT]") != -1:
  798. startIndex = self.txt[6].find("[VOTESHOP_ITEM_COUNT]")+21
  799. endIndex = self.txt[6].find("[/VOTESHOP_ITEM_COUNT]")
  800. count = int((self.txt[6])[startIndex:endIndex])
  801. if self.vnum:
  802. self.slot.Show()
  803. self.slot.SetItemSlot(0, self.vnum, count)
  804. self.slot.RefreshSlot()
  805. else:
  806. self.slot.Hide()
  807. except:
  808. self.Hide()
  809. def SendSystemChat(self, text):
  810. chat.AppendChat(chat.CHAT_TYPE_INFO, "<System>: "+str(text))
  811. def Close(self):
  812. self.Hide()
  813. def OnPressEscapeKey(self):
  814. self.Close()
  815. return TRUE
  816. def OnPressExitKey(self):
  817. self.Close()
  818. return TRUE
  819. class LoadingBar(ui.ScriptWindow):
  820. def __init__(self):
  821. ui.ScriptWindow.__init__(self)
  822. self.isLoaded = FALSE
  823. def __LoadScript(self):
  824. ## Load gui
  825. try:
  826. self.BindObjects()
  827. except:
  828. import exception
  829. exception.Abort('test.__LoadScript.BindObjects')
  830. ## Load events
  831. try:
  832. self.BindEvents()
  833. except:
  834. import exception
  835. exception.Abort('test.__LoadScript.BindEvents')
  836. self.isLoaded = TRUE
  837. ## Bind the objects in __LoadScript
  838. def BindObjects(self):
  839. self.board = ui.ThinBoard()
  840. self.board.SetSize(260,30)
  841. self.board.SetCenterPosition()
  842. self.board.Show()
  843. self.progressBarActualFile = ui.AniImageBox()
  844. self.progressBarActualFile.SetParent(self.board)
  845. self.progressBarActualFile.AppendImage('locale\ae\ui\itemshop\loadingBar.tga')
  846. self.progressBarActualFile.SetPosition(5, 8)
  847. self.progressBarActualFile.SetDelay(90)
  848. self.progressBarActualFile.SetPercentage(0, 100)
  849. self.progressBarActualFile.Show()
  850. self.lb_0 = ui.TextLine()
  851. self.lb_0.SetParent(self.board)
  852. self.lb_0.SetPosition(250,9)
  853. self.lb_0.SetText('جاري التحميل')
  854. self.lb_0.Show()
  855. self.lb_1 = ui.TextLine()
  856. self.lb_1.SetParent(self.board)
  857. self.lb_1.SetPosition(130,9)
  858. self.lb_1.SetText('0%')
  859. self.lb_1.Show()
  860. ## Bind events to the objects in __LoadScript
  861. def BindEvents(self):
  862. pass
  863. #self.elements['buttons']['menue']['close'].SetEvent(self.__OnClickClose)
  864. def __del__(self):
  865. ui.ScriptWindow.__del__(self)
  866. ## Hide the Gui
  867. def Destroy(self):
  868. self.Hide()
  869. def SetPercent(self, percent):
  870. if percent >= 100:
  871. self.board.Hide()
  872. else:
  873. self.board.SetTop()
  874. self.board.Show()
  875. self.progressBarActualFile.SetPercentage(percent, 100)
  876. self.lb_1.SetText(str(percent) +'%')
  877. ## Open the gui
  878. def Open(self):
  879. if FALSE == self.isLoaded:
  880. self.__LoadScript()
  881. self.SetTop()
  882. self.Show()
  883. ## Close the gui
  884. def Close(self):
  885. self.Hide()