1. import os
  2. import app
  3. import dbg
  4. import item
  5. import chat
  6. import net
  7. import localeInfo
  8. import ime
  9. import time
  10. import ui
  11. import uiCommon
  12. import uiToolTip
  13. import colorInfo
  14. import player
  15. import snd
  16. import grp
  17. import mouseModule
  18. import shop
  19. import wndMgr
  20. import uiPrivateShopBuilder
  21. import constInfo
  22. import uiScriptLocale
  23. from uiutils import Edit2 as Edit2
  24. c = colorInfo.CHAT_RGB_NOTICE
  25. titleColor = ui.GenerateColor(c[0],c[1],c[2])
  26. NEGATIVE_COLOR = grp.GenerateColor(0.9, 0.4745, 0.4627, 1.0)
  27. POSITIVE_COLOR = grp.GenerateColor(0.6911, 0.8754, 0.7068, 1.0)
  28. ##Should be disabled becouse this is only for my client UI ##
  29. POSITION_FIX=False
  30. #############################################################
  31. import uiutils
  32. class TextBoard(ui.ThinBoard):
  33. def __init__(self):
  34. ui.ThinBoard.__init__(self)
  35. self.lineHeight = 12
  36. self.childrenList = []
  37. def __del__(self):
  38. ui.ThinBoard.__del__(self)
  39. def Clear(self):
  40. self.lineHeight = 12
  41. self.childrenList = []
  42. def AppendTextLine(self, text):
  43. textLine = ui.TextLine()
  44. textLine.SetParent(self)
  45. textLine.SetFontName(localeInfo.UI_DEF_FONT_LARGE)
  46. textLine.SetText(str(text))
  47. textLine.SetOutline()
  48. textLine.SetFeather(FALSE)
  49. textLine.Show()
  50. textLine.SetPosition(10, self.lineHeight)
  51. self.childrenList.append(textLine)
  52. self.lineHeight += 17
  53. return textLine
  54. class ShopDialogCreate(ui.ScriptWindow):
  55. UI={}
  56. def __init__(self, interface):
  57. ui.ScriptWindow.__init__(self)
  58. self.tooltipItem = uiToolTip.ItemToolTip()
  59. self.tooltipItem.Hide()
  60. self.privateShopBuilder = uiPrivateShopBuilder.PrivateShopBuilder()
  61. self.privateShopBuilder.Hide()
  62. self.privateShopBuilder.SetItemToolTip(self.tooltipItem)
  63. self.pop=None
  64. self.__LoadQuestionDialog()
  65. def __del__(self):
  66. ui.ScriptWindow.__del__(self)
  67. def __LoadQuestionDialog(self):
  68. self.UI["board"] = ui.BoardWithTitleBar()
  69. self.UI["board"].SetCenterPosition()
  70. self.UI["board"].AddFlag("movable")
  71. if POSITION_FIX:
  72. self.UI["board"].SetSize(244, 375)
  73. else:
  74. self.UI["board"].SetSize(244, 365)
  75. self.UI["board"].SetCenterPosition()
  76. self.UI["board"].SetTop()
  77. self.UI["board"].SetTitleName(uiScriptLocale.SHOP_WINDOW_CREATE)
  78. self.UI["board"].Hide()
  79. self.UI["left_title_icon"] = ui.MakeImageBox(self.UI["board"], "offline_shop/left_title_icon.tga", 2, 4)
  80. self.UI["newboard_01"] = ui.NewBoard()
  81. self.UI["newboard_01"].SetParent(self.UI["board"])
  82. self.UI["newboard_01"].SetSize(224, 50)
  83. self.UI["newboard_01"].SetPosition(10,220)
  84. self.UI["newboard_01"].SetTop()
  85. self.UI["newboard_01"].Show()
  86. self.UI["newboard_02"] = ui.NewBoard()
  87. self.UI["newboard_02"].SetParent(self.UI["board"])
  88. self.UI["newboard_02"].SetSize(224, 50)
  89. self.UI["newboard_02"].SetPosition(10,293)
  90. self.UI["newboard_02"].SetTop()
  91. self.UI["newboard_02"].Show()
  92. self.UI["title_image"] = ui.MakeImageBox(self.UI["board"], "d:/ymir work/ui/public/public_intro_btn/raceName_btn.sub", 34, 34)
  93. self.UI["title_image2"] = ui.MakeImageBox(self.UI["board"], "d:/ymir work/ui/public/public_intro_btn/raceName_btn.sub", 34, 205)
  94. self.UI["title_image3"] = ui.MakeImageBox(self.UI["board"], "d:/ymir work/ui/public/public_intro_btn/raceName_btn.sub", 34, 278)
  95. self.UI["yang_image"] = ui.MakeImageBox(self.UI["board"], "offline_shop/yang_board.tga", 42, 362)
  96. self.UI["yang_slot_image"] = ui.MakeImageBox(self.UI["yang_image"], "d:/ymir work/ui/public/parameter_slot_05.sub", 9, 3)
  97. self.UI["infoText"] = ui.TextLine()
  98. self.UI["infoText"].SetParent(self.UI["title_image"])
  99. self.UI["infoText"].SetPosition(62, 3)
  100. self.UI["infoText"].SetFeather()
  101. self.UI["infoText"].SetDefaultFontName()
  102. self.UI["infoText"].SetOutline()
  103. self.UI["infoText"].SetText("Sistem Tan\xfdt\xfdm\xfd")
  104. self.UI["infoText"].Show()
  105. self.UI["nameText"] = ui.MakeText(self.UI["title_image3"], uiScriptLocale.SHOP_NAME, 67, 3, None)
  106. self.UI["nameEdit"]=Edit2(self.UI["newboard_02"],"",15,20,160,32,FALSE,30)
  107. self.UI["selectText"] = ui.TextLine()
  108. self.UI["selectText"].SetParent(self.UI["title_image2"])
  109. self.UI["selectText"].SetPosition(45, 3)
  110. self.UI["selectText"].SetFeather()
  111. self.UI["selectText"].SetDefaultFontName()
  112. self.UI["selectText"].SetOutline()
  113. self.UI["selectText"].SetText(uiScriptLocale.SHOP_TIMEOUT)
  114. self.UI["selectText"].Show()
  115. self.UI["Belirle_Text"] = ui.MakeText(self.UI["newboard_01"], "Belirle - >", 20, 19, None)
  116. self.UI["create"] = ui.MakeButton(self.UI["newboard_02"], 150, 20 , "", "d:/ymir work/ui/game/public/", "onbutton00.sub", "onbutton01.sub", "onbutton02.sub")
  117. self.UI["create"].SetText("")
  118. self.UI["create"].SetEvent(ui.__mem_func__(self.CreateShop))
  119. self.UI["create"].Show()
  120. self.UI["cancel"] = ui.MakeButton(self.UI["board"], 240, 327 , "", "d:/ymir work/ui/game/myshop_deco/", "select_btn_01.sub", "select_btn_02.sub", "select_btn_03.sub")
  121. self.UI["cancel"].SetText(uiScriptLocale.CANCEL)
  122. self.UI["cancel"].SetEvent(ui.__mem_func__(self.Close))
  123. self.UI["cancel"].Hide()
  124. self.textBoard = TextBoard()
  125. self.textBoard.SetParent(self.UI["board"])
  126. self.textBoard.SetPosition(10, 62)
  127. self.textBoard.SetSize(224, 134)
  128. self.textBoard.AddFlag('not_pick')
  129. self.textBoard.Show()
  130. self.RefreshText()
  131. self.UI["price"] = ui.MakeText(self.UI["yang_slot_image"], "", 8, 2, None)
  132. self.UI["price"].SetFeather()
  133. self.UI["price"].SetDefaultFontName()
  134. self.UI["price"].SetOutline()
  135. self.UI["price"].Show()
  136. self.CreateList()
  137. def SplitDescription(self, desc, limit):
  138. total_tokens = desc.split()
  139. line_tokens = []
  140. line_len = 0
  141. lines = []
  142. for token in total_tokens:
  143. if '|' in token:
  144. sep_pos = token.find('|')
  145. line_tokens.append(token[:sep_pos])
  146. lines.append(' '.join(line_tokens))
  147. line_len = len(token) - (sep_pos + 1)
  148. line_tokens = [token[sep_pos + 1:]]
  149. else:
  150. line_len += len(token)
  151. if len(line_tokens) + line_len > limit:
  152. lines.append(' '.join(line_tokens))
  153. line_len = len(token)
  154. line_tokens = [token]
  155. else:
  156. line_tokens.append(token)
  157. if line_tokens:
  158. lines.append(' '.join(line_tokens))
  159. return lines
  160. def RefreshText(self):
  161. self.textBoard.Clear()
  162. lines = self.SplitDescription('Market Tezg\xe2h\xfd sistemi sen oyunda olmasan da senin belirledi\xf0in s\xfcre boyunca nesnelerinin ticaretinin yap\xfdlmas\xfdn\xfd sa\xf0lar. Bu sistem sadece birinci k\xf6y\xfcnde kullan\xfdlabilir. Oyundan \xe7\xfdkman tezg\xe2h\xfdn\xfd kapatmaz.', 35)
  163. if not lines:
  164. return
  165. for line in lines:
  166. self.textBoard.AppendTextLine(line)
  167. def Destroy(self):
  168. self.UI={}
  169. self.__OnClosePopupDialog()
  170. if "board" in self.UI.keys():
  171. self.UI["board"].Hide()
  172. return TRUE
  173. #self.ClearDictionary()
  174. def CreateList(self):
  175. if "select" in self.UI.keys():
  176. self.UI["select"].Hide()
  177. self.UI["select"].Destroy()
  178. self.UI["select"] = None
  179. self.UI["select"] = DropDown(self.UI["board"],"---")
  180. self.UI["select"].SetPosition(100,235)
  181. self.UI["select"].SetSize(120,22)
  182. self.UI["select"].SetTop()
  183. self.UI["select"].OnChange=self.Load
  184. self.UI["select"].Show()
  185. def OnPressEscapeKey(self):
  186. self.Close()
  187. return TRUE
  188. def Close(self):
  189. self.__OnClosePopupDialog()
  190. self.UnLoad()
  191. self.UI["board"].Hide()
  192. self.Hide()
  193. def CreateShop(self):
  194. if len(self.UI["nameEdit"].GetText()) <=0:
  195. self.PopupMessage(uiScriptLocale.SHOP_NAME_EMPTY)
  196. return
  197. id=int(self.UI["select"].DropList.GetSelectedItem().value)
  198. if int(id) <=0:
  199. self.PopupMessage(uiScriptLocale.SHOP_TIMEOUT_EMPTY)
  200. return
  201. item = constInfo.shop_cost[id-1]
  202. if int(item["id"]) <=0:
  203. self.PopupMessage(uiScriptLocale.SHOP_TIMEOUT_EMPTY)
  204. return
  205. self.__OnClosePopupDialog()
  206. self.privateShopBuilder.Open(self.UI["nameEdit"].GetText(),int(item["id"]))
  207. self.Close()
  208. def __OnClosePopupDialog(self):
  209. if self.pop != None:
  210. if self.pop.IsShow():
  211. self.pop.Hide()
  212. self.pop = None
  213. def Hide(self):
  214. if "board" in self.UI.keys():
  215. self.UI["board"].Hide()
  216. self.UI["price"].Hide()
  217. self.UI["select"].dropped = 0
  218. self.UI["select"].ClearItems()
  219. self.UI["nameEdit"].SetText("")
  220. self.Days=0
  221. ui.ScriptWindow.Hide(self)
  222. def Show(self):
  223. self.UI["board"].SetTop()
  224. self.UI["board"].Show()
  225. self.UnLoad()
  226. self.CreateList()
  227. for i in xrange(len(constInfo.shop_cost)):
  228. item=constInfo.shop_cost[i]
  229. name=uiScriptLocale.SHOP_CREATE_NORMAL
  230. if item["time"]>0:
  231. name=str(item["time"])+" "
  232. if item["time"] == 1:
  233. if item["time_val"]==3600:
  234. name+=uiScriptLocale.SHOP_CREATE_HOUR
  235. else:
  236. name+=uiScriptLocale.SHOP_CREATE_DAY
  237. else:
  238. if item["time_val"]==86400:
  239. name+=uiScriptLocale.SHOP_CREATE_DAYS
  240. else:
  241. name+=uiScriptLocale.SHOP_CREATE_HOURS
  242. self.UI["select"].AppendItem(name,i+1)
  243. ui.ScriptWindow.Show(self)
  244. self.UI["board"].Show()
  245. def Load(self):
  246. id=self.UI["select"].DropList.GetSelectedItem().value
  247. if int(id) == 0:
  248. print "unload"
  249. self.UnLoad()
  250. return
  251. item = constInfo.shop_cost[id-1]
  252. if item["price"]>0:
  253. self.UI["price"].SetText(uiScriptLocale.SHOP_CREATE_PRICE+localeInfo.NumberToMoneyStringYeni(item["price"]))
  254. self.UI["price"].Show()
  255. else:
  256. self.UI["price"].Show()
  257. def UnLoad(self):
  258. self.UI["price"].Hide()
  259. self.UI["select"].dropped = 0
  260. self.UI["select"].ClearItems()
  261. self.UI["select"].Hide()
  262. def Clear(self):
  263. self.UI["select"].Clear()
  264. def PopupMessage(self,text):
  265. pop = uiCommon.PopupDialog()
  266. pop.SetText(text)
  267. pop.SetAcceptEvent(self.__OnClosePopupDialog)
  268. pop.Open()
  269. self.pop = pop
  270. self.pop.SetTop()
  271. class DropDown(ui.Window):
  272. dropped = 0
  273. dropstat = 0
  274. last = 0
  275. lastS = 0
  276. maxh = 95
  277. tt = ""
  278. OnChange = None
  279. class Item(ui.ListBoxEx.Item):
  280. def __init__(self,parent, text,value=0):
  281. ui.ListBoxEx.Item.__init__(self)
  282. self.textBox=ui.TextLine()
  283. self.textBox.SetParent(self)
  284. self.textBox.SetText(text)
  285. # self.textBox.SetLimitWidth(parent.GetWidth()-132)
  286. self.textBox.Show()
  287. self.value = value
  288. def GetValue(self):
  289. return self.value
  290. def __del__(self):
  291. ui.ListBoxEx.Item.__del__(self)
  292. def __init__(self,parent,tt = "",down=1):
  293. ui.Window.__init__(self,"TOP_MOST")
  294. self.tt=tt
  295. self.down = down
  296. self.SetParentProxy(parent)
  297. self.bg = ui.Bar("TOP_MOST")
  298. self.bg.SetParent(self)
  299. self.bg.SetPosition(0,0)
  300. self.bg.SetColor(0xc0000000)
  301. self.bg.OnMouseOverIn = self.bgMouseIn
  302. self.bg.OnMouseOverOut = self.bgMouseOut
  303. self.bg.OnMouseLeftButtonDown = self.ExpandMe
  304. self.bg.Show()
  305. self.act = ui.TextLine()
  306. self.act.SetParent(self.bg)
  307. self.act.SetPosition(4,2)
  308. self.act.SetText(self.tt)
  309. self.act.Show()
  310. self.GetText = self.act.GetText
  311. self.Drop = ui.Bar("TOP_MOST")
  312. self.Drop.SetParent(self.GetParentProxy())
  313. self.Drop.SetPosition(0,21)
  314. # self.Drop.SetSize(150,95)
  315. self.Drop.SetSize(150,0)
  316. # self.Drop.SetColor(0xc00a0a0a)
  317. self.Drop.SetColor(0xff0a0a0a)
  318. self.ScrollBar = ui.ThinScrollBar()
  319. self.ScrollBar.SetParent(self.Drop)
  320. self.ScrollBar.SetPosition(132,0)
  321. # self.ScrollBar.SetScrollBarSize(95)
  322. self.ScrollBar.SetScrollBarSize(0)
  323. # self.ScrollBar.Show()
  324. self.DropList = ui.ListBoxEx()
  325. self.DropList.SetParent(self.Drop)
  326. self.DropList.itemHeight = 12
  327. self.DropList.itemStep = 13
  328. self.DropList.SetPosition(0,0)
  329. # self.DropList.SetSize(132,self.maxh)
  330. self.DropList.SetSize(132,13)
  331. self.DropList.SetScrollBar(self.ScrollBar)
  332. self.DropList.SetSelectEvent(self.SetTitle)
  333. self.DropList.SetViewItemCount(0)
  334. self.DropList.Show()
  335. if self.tt != "":
  336. self.AppendItemAndSelect(self.tt)
  337. self.selected = self.DropList.GetSelectedItem()
  338. self.SetSize(120,20)
  339. def __del__(self):
  340. ui.Window.__del__(self)
  341. c = 1
  342. def AppendItem(self,text,value=0):
  343. self.c+=1
  344. self.DropList.AppendItem(self.Item(self,text,value))
  345. self.maxh = min(95,13*self.c)
  346. if self.c > 7:
  347. self.ScrollBar.Show()
  348. def AppendItemAndSelect(self,text,value=0):
  349. self.DropList.AppendItem(self.Item(self,text,value))
  350. self.DropList.SelectIndex(len(self.DropList.itemList)-1)
  351. def ClearItems(self):
  352. self.DropList.RemoveAllItems()
  353. self.AppendItemAndSelect(self.tt)
  354. self.act.SetText(self.tt)
  355. def Clear(self):
  356. self.DropList.SelectIndex(0)
  357. def SelectByAffectId(self,id):
  358. for x in self.DropList.itemList:
  359. if x.value == id:
  360. self.DropList.SelectItem(x)
  361. break
  362. def SetTitle(self,item):
  363. self.act.SetText(str(item.textBox.GetText()))
  364. self.last = self.DropList.basePos
  365. self.lastS = self.ScrollBar.GetPos()
  366. self.dropped = 0
  367. self.selected = item
  368. if self.OnChange:
  369. self.OnChange()
  370. # self.Drop.Hide()
  371. def SetPosition(self,w,h):
  372. ui.Window.SetPosition(self,w,h)
  373. if self.down == 1:
  374. self.Drop.SetPosition(w,h+21)
  375. else:
  376. self.Drop.SetPosition(w,h-self.Drop.GetHeight())
  377. def SetSize(self,w,h):
  378. ui.Window.SetSize(self,w,h)
  379. self.bg.SetSize(w,h)
  380. self.Drop.SetSize(w,0)
  381. self.DropList.SetSize(w-18,self.maxh)
  382. for x in self.DropList.itemList:
  383. x.SetSize(w-18,12)
  384. self.ScrollBar.SetPosition(w-18,0)
  385. def ExpandMe(self):
  386. if self.dropped == 1:
  387. # self.Drop.Hide()
  388. self.dropped = 0
  389. else:
  390. # self.Drop.Show()
  391. self.dropped = 1
  392. def OnUpdate(self):
  393. iter = 6
  394. if self.Drop.GetHeight() < 50:
  395. self.ScrollBar.Hide()
  396. else:
  397. self.ScrollBar.Show()
  398. if self.dropped == 0 and self.dropstat == 1:
  399. if self.Drop.GetHeight() <=0:
  400. self.dropstat = 0
  401. self.Drop.SetSize(self.Drop.GetWidth(),0)
  402. self.ScrollBar.SetScrollBarSize(self.Drop.GetHeight())
  403. self.Drop.Hide()
  404. else:
  405. if self.Drop.GetHeight()-iter < 0:
  406. self.Drop.SetSize(self.Drop.GetWidth(),0)
  407. else:
  408. self.Drop.SetSize(self.Drop.GetWidth(),self.Drop.GetHeight()-iter)
  409. (w,h) = self.GetLocalPosition()
  410. self.SetPosition(w,h)
  411. self.ScrollBar.SetScrollBarSize(self.Drop.GetHeight())
  412. self.DropList.SetViewItemCount(int(self.Drop.GetHeight()/13))
  413. self.DropList.SetBasePos(self.last+1)
  414. self.DropList.SetBasePos(self.last)
  415. elif self.dropped == 1 and self.dropstat == 0:
  416. self.Drop.Show()
  417. self.SetTop()
  418. if self.Drop.GetHeight() >=self.maxh:
  419. self.Drop.SetSize(self.Drop.GetWidth(),self.maxh)
  420. self.ScrollBar.SetScrollBarSize(self.maxh)
  421. self.dropstat = 1
  422. self.DropList.SetViewItemCount(7)
  423. self.ScrollBar.SetPos(self.lastS)
  424. else:
  425. self.ScrollBar.SetScrollBarSize(self.Drop.GetHeight()+iter)
  426. self.Drop.SetSize(self.Drop.GetWidth(),self.Drop.GetHeight()+iter)
  427. (w,h) = self.GetLocalPosition()
  428. self.SetPosition(w,h)
  429. self.DropList.SetViewItemCount(int(self.Drop.GetHeight()/13))
  430. self.DropList.SetBasePos(self.last+1)
  431. self.DropList.SetBasePos(self.last)
  432. ## BG Hover
  433. def bgMouseIn(self):
  434. self.bg.SetColor(0xc00a0a0a)
  435. def bgMouseOut(self):
  436. self.bg.SetColor(0xc0000000)
  437. class ShopEditWindow(ui.ScriptWindow):
  438. def __init__(self):
  439. ui.ScriptWindow.__init__(self)
  440. self.items={}
  441. self.Edit={}
  442. self.pop=None
  443. self.id=0
  444. self.lastUpdate=0
  445. self.priceInputBoard=None
  446. self.__Load()
  447. self.tooltipItem = uiToolTip.ItemToolTip()
  448. self.tooltipItem.Hide()
  449. def __del__(self):
  450. ui.ScriptWindow.__del__(self)
  451. self.Close()
  452. def __Load_LoadScript(self, fileName):
  453. try:
  454. pyScriptLoader = ui.PythonScriptLoader()
  455. pyScriptLoader.LoadScriptFile(self, fileName)
  456. except:
  457. import exception
  458. exception.Abort("ShopEditWindow.__Load_LoadScript")
  459. def __Load_BindObject(self):
  460. try:
  461. self.titleBar = self.GetChild("TitleBar")
  462. self.titleName = self.GetChild("TitleName")
  463. self.ItemSlot = self.GetChild("ItemSlot")
  464. try:
  465. for key in ["BuyButton","SellButton","MiddleTab1","MiddleTab2","MiddleTab2","SmallTab1","SmallTab2","SmallTab3"]:
  466. self.GetChild(key).Hide()
  467. except Exception:
  468. pass
  469. self.CloseButton = self.GetChild("CloseButton")
  470. except:
  471. import exception
  472. exception.Abort("StoneDialog.__Load_BindObject")
  473. self.CloseButton.SetText(uiScriptLocale.SHOP_EDIT_SHOP_CANCEL)
  474. self.CloseButton.SetEvent(ui.__mem_func__(self.Close))
  475. self.titleName.SetText(uiScriptLocale.SHOP_EDIT_SHOP_WINDOW)
  476. self.titleBar.SetCloseEvent(ui.__mem_func__(self.Close))
  477. self.ItemSlot.SAFE_SetButtonEvent("LEFT", "EMPTY", self.OnSelectEmptySlot)
  478. self.ItemSlot.SAFE_SetButtonEvent("LEFT", "EXIST", self.OnSelectItemSlot)
  479. self.ItemSlot.SAFE_SetButtonEvent("RIGHT", "EXIST", self.UnselectItemSlot)
  480. self.ItemSlot.SetOverInItemEvent(ui.__mem_func__(self.OverInItem))
  481. self.ItemSlot.SetOverOutItemEvent(ui.__mem_func__(self.OverOutItem))
  482. self.Edit["Board"] = ui.BoardWithTitleBar()
  483. self.Edit["Board"].SetSize(150, 40)
  484. self.Edit["Board"].AddFlag("movable")
  485. self.Edit["Board"].SetPosition(0,0)
  486. self.Edit["Board"].SetTitleName(uiScriptLocale.SHOP_SELECT)
  487. self.Edit["Board"].SetCloseEvent(self.CloseEdit)
  488. self.Edit["Board"].Show()
  489. self.Edit["ChangePrice"] = ui.Button()
  490. self.Edit["ChangePrice"].SetParent(self.Edit["Board"])
  491. self.Edit["ChangePrice"].SetPosition(30,35)
  492. self.Edit["ChangePrice"].SetUpVisual('d:/ymir work/ui/public/Large_button_01.sub')
  493. self.Edit["ChangePrice"].SetOverVisual('d:/ymir work/ui/public/Large_button_02.sub')
  494. self.Edit["ChangePrice"].SetDownVisual('d:/ymir work/ui/public/Large_button_03.sub')
  495. self.Edit["ChangePrice"].SetText(uiScriptLocale.SHOP_CHANGE_PRICE)
  496. self.Edit["ChangePrice"].Show()
  497. self.Edit["Remove"] = ui.Button()
  498. self.Edit["Remove"].SetParent(self.Edit["Board"])
  499. self.Edit["Remove"].SetPosition(26,30)
  500. self.Edit["Remove"].SetUpVisual('d:/ymir work/ui/public/offlineshoptga.tga')
  501. self.Edit["Remove"].SetOverVisual('d:/ymir work/ui/public/offlineshoptga.tga')
  502. self.Edit["Remove"].SetDownVisual('d:/ymir work/ui/public/offlineshoptga.tga')
  503. self.Edit["Remove"].SetText(uiScriptLocale.SHOP_REMOVE_ITEM)
  504. self.Edit["Remove"].Show()
  505. def __Load(self):
  506. self.__Load_LoadScript("ShopDialog.py")
  507. self.__Load_BindObject()
  508. def CloseEdit(self):
  509. self.Edit["Board"].Hide()
  510. def Show(self,id):
  511. if self.IsShow():
  512. self.Close()
  513. else:
  514. ui.ScriptWindow.Show(self)
  515. net.SendChatPacket("/update_shop_item edit_start|"+id)
  516. net.SendChatPacket("/refresh_shop_items "+id)
  517. self.id=id
  518. self.Refresh()
  519. def OnPressEscapeKey(self):
  520. self.Close()
  521. return TRUE
  522. def __OnClosePopupDialog(self):
  523. if self.pop != None:
  524. if self.pop.IsShow():
  525. self.pop.Hide()
  526. self.pop = None
  527. def __GetRealIndex(self, i):
  528. return shop.SHOP_SLOT_COUNT + i
  529. def Close(self):
  530. if None != self.tooltipItem:
  531. self.tooltipItem.HideToolTip()
  532. self.CancelInputPrice()
  533. self.__OnClosePopupDialog()
  534. self.Edit["Board"].Hide()
  535. self.Hide()
  536. return TRUE
  537. def Clear(self):
  538. self.items={}
  539. self.CancelInputPrice()
  540. self.__OnClosePopupDialog()
  541. self.Edit["Board"].Hide()
  542. self.Refresh()
  543. def GetItemCount(self,slot):
  544. try:
  545. return int(self.items[int(slot)]["count"])
  546. except KeyError:
  547. return 0
  548. def GetItemID(self,slot):
  549. try:
  550. return int(self.items[int(slot)]["vnum"])
  551. except KeyError:
  552. return 0
  553. def AddItem(self,slot,data):
  554. self.items[int(slot)]=data
  555. self.Refresh()
  556. def Refresh(self):
  557. self.CancelInputPrice()
  558. self.__OnClosePopupDialog()
  559. self.Edit["Board"].Hide()
  560. setItemID=self.ItemSlot.SetItemSlot
  561. for i in xrange(shop.SHOP_SLOT_COUNT):
  562. vnum=self.GetItemID(i)
  563. itemCount = self.GetItemCount(i)
  564. setItemID(i, vnum, itemCount)
  565. wndMgr.RefreshSlot(self.ItemSlot.GetWindowHandle())
  566. self.ItemSlot.RefreshSlot()
  567. def __ShowToolTip(self, slot):
  568. if self.tooltipItem:
  569. self.tooltipItem.ClearToolTip()
  570. if int(slot) in self.items.keys():
  571. it=self.items[int(slot)]
  572. if it.get("sourceSlot",-1)!=-1:
  573. self.tooltipItem.SetEditPrivateShopItem(int(it["sourceWindow"]),int(it["sourceSlot"]),it["price"])
  574. else:
  575. self.tooltipItem.AppendSellingPrice(it["price"])
  576. self.tooltipItem.AddItemData(int(it["vnum"]),it["sockets"],it["attrs"],int(it["evolution"]))
  577. else:
  578. self.tooltipItem.HideToolTip()
  579. def OverInItem(self, slotIndex):
  580. #slotIndex = self.__GetRealIndex(slotIndex)
  581. self.ItemSlot.SetUsableItem(FALSE)
  582. self.__ShowToolTip(slotIndex)
  583. def OverOutItem(self):
  584. self.ItemSlot.SetUsableItem(FALSE)
  585. if self.tooltipItem:
  586. self.tooltipItem.HideToolTip()
  587. def OnSelectEmptySlot(self, selectedSlotPos):
  588. isAttached = mouseModule.mouseController.isAttached()
  589. if isAttached:
  590. attachedSlotType = mouseModule.mouseController.GetAttachedType()
  591. attachedSlotPos = mouseModule.mouseController.GetAttachedSlotNumber()
  592. mouseModule.mouseController.DeattachObject()
  593. if player.SLOT_TYPE_INVENTORY != attachedSlotType and player.SLOT_TYPE_DRAGON_SOUL_INVENTORY != attachedSlotType:
  594. return
  595. attachedInvenType = player.SlotTypeToInvenType(attachedSlotType)
  596. count = player.GetItemCount(attachedInvenType, attachedSlotPos)
  597. itemVNum = player.GetItemIndex(attachedInvenType, attachedSlotPos)
  598. item.SelectItem(itemVNum)
  599. if item.IsAntiFlag(item.ANTIFLAG_GIVE) or item.IsAntiFlag(item.ANTIFLAG_MYSHOP):
  600. chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.PRIVATE_SHOP_CANNOT_SELL_ITEM)
  601. return
  602. priceInputBoard = uiCommon.MoneyInputDialog()
  603. priceInputBoard.SetTitle(localeInfo.PRIVATE_SHOP_INPUT_PRICE_DIALOG_TITLE)
  604. priceInputBoard.SetAcceptEvent(ui.__mem_func__(self.AcceptInputPrice))
  605. priceInputBoard.SetCancelEvent(ui.__mem_func__(self.CancelInputPrice))
  606. priceInputBoard.SetMaxLength(11)
  607. priceInputBoard.Open()
  608. #self.ItemSlot.ActivateSlot(int(selectedSlotPos))
  609. self.priceInputBoard = priceInputBoard
  610. self.priceInputBoard.itemVNum = itemVNum
  611. self.priceInputBoard.sourceWindowType = attachedInvenType
  612. self.priceInputBoard.sourceSlotPos = attachedSlotPos
  613. self.priceInputBoard.targetSlotPos = selectedSlotPos
  614. def UnselectItemSlot(self,selectedSlotPos):
  615. self.Edit["Board"].Hide()
  616. #self.ItemSlot.DeactivateSlot(int(selectedSlotPos))
  617. self.CancelInputPrice()
  618. self.__OnClosePopupDialog()
  619. def OnSelectItemSlot(self, selectedSlotPos):
  620. isAttached = mouseModule.mouseController.isAttached()
  621. #selectedSlotPos = self.__GetRealIndex(selectedSlotPos)
  622. if isAttached:
  623. snd.PlaySound("sound/ui/loginfail.wav")
  624. #self.ItemSlot.DeactivateSlot(int(selectedSlotPos))
  625. mouseModule.mouseController.DeattachObject()
  626. self.Edit["Board"].Hide()
  627. else:
  628. if not int(selectedSlotPos) in self.items.keys():
  629. self.Edit["Board"].Hide()
  630. return
  631. snd.PlaySound("sound/ui/drop.wav")
  632. #self.ItemSlot.ActivateSlot(selectedSlotPos)
  633. self.EditItem(selectedSlotPos)
  634. def AcceptInputPrice(self):
  635. if not self.priceInputBoard:
  636. return True
  637. text = self.priceInputBoard.GetText()
  638. if not text:
  639. return True
  640. if not text.isdigit():
  641. return True
  642. if long(text) <= 0:
  643. return True
  644. attachedInvenType = self.priceInputBoard.sourceWindowType
  645. sourceSlotPos = self.priceInputBoard.sourceSlotPos
  646. targetSlotPos = self.priceInputBoard.targetSlotPos
  647. price = long(self.priceInputBoard.GetText())
  648. count = player.GetItemCount(attachedInvenType, sourceSlotPos)
  649. vnum = player.GetItemIndex(attachedInvenType, sourceSlotPos)
  650. self.items[int(targetSlotPos)]={
  651. "vnum":int(vnum),
  652. "count":int(count),
  653. "price":long(price),
  654. "sourceSlot":sourceSlotPos,
  655. "sourceWindow":attachedInvenType
  656. }
  657. snd.PlaySound("sound/ui/pick.wav")
  658. #self.ItemSlot.DeactivateSlot(targetSlotPos)
  659. net.SendChatPacket("/update_shop_item add|%d|%d|%lld|%d|%s"%(int(self.id),int(targetSlotPos),int(sourceSlotPos),int(attachedInvenType),str(price)))
  660. self.Refresh()
  661. #####
  662. self.priceInputBoard = None
  663. return True
  664. def CancelInputPrice(self):
  665. self.priceInputBoard = None
  666. return True
  667. def EditItem(self,slot):
  668. self.Edit["ChangePrice"].SetEvent(ui.__mem_func__(self.EditPrice),int(slot))
  669. self.Edit["Remove"].SetEvent(ui.__mem_func__(self.RemoveItem),int(slot))
  670. (w,h)=(170,328)
  671. (x,y)=self.GetLocalPosition()
  672. self.Edit["Board"].SetPosition((x-w),(y+(h/2)))
  673. self.Edit["Board"].Show()
  674. def EditPrice(self,slot):
  675. self.priceInputBoard = uiCommon.MoneyInputDialog()
  676. self.priceInputBoard.SetTitle(localeInfo.PRIVATE_SHOP_INPUT_PRICE_DIALOG_TITLE)
  677. self.priceInputBoard.SetAcceptEvent(ui.__mem_func__(self.AcceptEditPrice))
  678. self.priceInputBoard.SetCancelEvent(ui.__mem_func__(self.CancelInputPrice))
  679. self.priceInputBoard.SetMaxLength(11)
  680. self.priceInputBoard.Open()
  681. self.priceInputBoard.targetSlotPos = int(slot)
  682. def RemoveItem(self,slot):
  683. self.pop = uiCommon.QuestionDialog()
  684. self.pop.SetText(uiScriptLocale.SHOP_REMOVE_ITEM_QUEST)
  685. self.pop.SetAcceptEvent(lambda arg1=str(slot): self.AcceptRemoveItem(arg1))
  686. self.pop.SetCancelEvent(ui.__mem_func__(self.__OnClosePopupDialog))
  687. self.pop.Open()
  688. def AcceptRemoveItem(self,slot):
  689. if int(slot) in self.items.keys():
  690. snd.PlaySound("sound/ui/drop.wav")
  691. net.SendChatPacket("/update_shop_item remove|"+str(self.id)+"|"+str(self.items[int(slot)]["id"]))
  692. #self.ItemSlot.DeactivateSlot(int(slot))
  693. del self.items[int(slot)]
  694. self.Refresh()
  695. self.__OnClosePopupDialog()
  696. def AcceptEditPrice(self):
  697. if not self.priceInputBoard:
  698. return True
  699. text = self.priceInputBoard.GetText()
  700. if not text:
  701. return True
  702. if not text.isdigit():
  703. return True
  704. if long(text) <= 0:
  705. return True
  706. targetSlotPos = self.priceInputBoard.targetSlotPos
  707. price = long(self.priceInputBoard.GetText())
  708. #self.ItemSlot.DeactivateSlot(int(targetSlotPos))
  709. self.items[int(targetSlotPos)]["price"]=price
  710. snd.PlaySound("sound/ui/drop.wav")
  711. net.SendChatPacket("/update_shop_item price|"+str(self.id)+"|"+str(self.items[int(targetSlotPos)]["id"])+"|"+str(price))
  712. self.Refresh()
  713. self.priceInputBoard = None
  714. return True
  715. def OnUpdate(self):
  716. if self.IsShow() and self.lastUpdate < app.GetGlobalTime():
  717. self.lastUpdate=app.GetGlobalTime()+1000
  718. if int(self.id)>0:
  719. net.SendChatPacket("/update_shop_item edit_tick|"+self.id)
  720. class ShopDialog(ui.ScriptWindow):
  721. Edit={}
  722. UI={}
  723. pop=None
  724. uiNewShopEdit = ShopEditWindow()
  725. uiNewShopEdit.Close()
  726. tooltip = uiToolTip.ToolTip(220)
  727. tooltip.Hide()
  728. BoardHeight=40
  729. CurrentEdit=0
  730. EditBoardY=35
  731. lastUpdate=0
  732. def __init__(self, interface):
  733. self.interface = interface
  734. self.uiNewShopCreate = ShopDialogCreate(interface)
  735. self.uiNewShopCreate.Hide()
  736. ui.ScriptWindow.__init__(self)
  737. self.LoadDialog()
  738. def __del__(self):
  739. ui.ScriptWindow.__del__(self)
  740. def LoadDialog(self):
  741. self.UI["board"]=ui.BoardWithTitleBar()
  742. self.UI["board"].SetParent(self)
  743. self.UI["board"].SetSize(200, self.BoardHeight)
  744. self.UI["board"].SetTitleName(uiScriptLocale.SHOP_WINDOW_NAME)
  745. self.UI["board"].SetCloseEvent(self.Close)
  746. self.UI["board"].Show()
  747. self.UI["shops"]={}
  748. self.Edit["Board"] = ui.BoardWithTitleBar()
  749. self.Edit["Board"].SetParent(self)
  750. self.Edit["Board"].SetSize(150, 100)
  751. if POSITION_FIX:
  752. self.Edit["Board"].SetPosition(250,0)
  753. else:
  754. self.Edit["Board"].SetPosition(220,0)
  755. self.Edit["Board"].SetTitleName(uiScriptLocale.SHOP_SELECT)
  756. self.Edit["Board"].SetCloseEvent(self.CloseEdit)
  757. self.Edit["Board"].Hide()
  758. self.SetCenterPosition()
  759. self.AddFlag("movable")
  760. self.UpdateSize()
  761. def AddEditOption(self,name,text,func):
  762. self.Edit[name] = ui.Button()
  763. self.Edit[name].SetParent(self.Edit["Board"])
  764. self.Edit[name].SetPosition(30,self.EditBoardY)
  765. self.Edit[name].SetUpVisual('d:/ymir work/ui/public/offlineshoptga.tga')
  766. self.Edit[name].SetOverVisual('d:/ymir work/ui/public/offlineshoptga.tga')
  767. self.Edit[name].SetDownVisual('d:/ymir work/ui/public/offlineshoptga.tga')
  768. self.Edit[name].SetText(text)
  769. self.Edit[name].Show()
  770. self.EditBoardY+=30
  771. self.Edit["Board"].SetSize(150, self.EditBoardY)
  772. self.Edit[name].SetEvent(func)
  773. self.UpdateSize()
  774. def CloseEdit(self):
  775. if "Board" in self.Edit.keys():
  776. self.Edit["Board"].Hide()
  777. self.CurrentEdit=0
  778. def Load(self,data):
  779. title=data["name"]
  780. if len(title) > 22:
  781. title = title[:19] + "..."
  782. gui={}
  783. gui["nameTextImage"] = ui.MakeImageBox(self.UI["board"], "d:/ymir work/ui/public/Parameter_Slot_04.sub", 10, self.BoardHeight)
  784. gui["nameTextImage"].SAFE_SetStringEvent("MOUSE_OVER_IN", lambda arg=data: self.__ShowToolTip(arg),TRUE)
  785. gui["nameTextImage"].SAFE_SetStringEvent("MOUSE_OVER_OUT", self.__HideItemToolTip)
  786. gui["name"] = ui.MakeTextLine(gui["nameTextImage"])
  787. gui["name"].SetWindowHorizontalAlignCenter()
  788. gui["name"].SetHorizontalAlignCenter()
  789. gui["name"].SetText(title)
  790. gui["manage"] = ui.MakeButton(self.UI["board"],130, self.BoardHeight,"","d:/ymir work/ui/public/","middle_button_01.tga","middle_button_02.tga","middle_button_03.tga")
  791. gui["manage"].SetText(uiScriptLocale.SHOP_MANAGE)
  792. gui["manage"].SetEvent(ui.__mem_func__(self.ManageShop),data)
  793. gui["manage"].Show()
  794. if self.CurrentEdit==data["id"]:
  795. self.ManageShop(data,1)
  796. gui["data"]=data
  797. self.UI["shops"][str(data["id"])]=gui
  798. self.BoardHeight+=30
  799. self.UpdateSize()
  800. def __OnClosePopupDialog(self):
  801. if self.pop != None:
  802. if self.pop.IsShow():
  803. self.pop.Hide()
  804. self.pop = None
  805. def ManageShop(self,data,force=0):
  806. self.EditBoardY=35
  807. # self.AddEditOption("change_name",uiScriptLocale.SHOP_CHANGE_NAME,lambda arg1=data: self.OnChangeButtonClick(arg1))
  808. self.AddEditOption("get_yang",uiScriptLocale.SHOP_GET_YANG,lambda arg1=data: self.GetShopYang(arg1))
  809. # self.AddEditOption("edit",uiScriptLocale.SHOP_EDIT,lambda arg1=data["id"]: self.OnEditButtonClick(arg1))
  810. self.AddEditOption("close",uiScriptLocale.SHOP_CLOSE,lambda arg1=data: self.CloseShop(arg1))
  811. if self.Edit["Board"].IsShow() and self.CurrentEdit==data["id"] and force==0:
  812. self.Edit["Board"].Hide()
  813. self.CurrentEdit=0
  814. else:
  815. title=data["name"]
  816. if len(title) > 22:
  817. title = title[:19] + "..."
  818. self.Edit["Board"].SetTitleName(title)
  819. self.Edit["Board"].Show()
  820. self.CurrentEdit=data["id"]
  821. def UpdateSize(self):
  822. Y=25
  823. if POSITION_FIX:
  824. Y=45
  825. self.UI["create_button"] = ui.MakeButton(self.UI["board"],10, self.UI["board"].GetHeight()-Y,"","d:/ymir work/ui/public/","offlineshoptga.tga","offlineshoptga.tga","offlineshoptga.tga")
  826. self.UI["create_button"].SetText(uiScriptLocale.SHOP_OPEN)
  827. self.UI["create_button"].SetEvent(lambda : self.CreateShop())
  828. self.UI["create_button"].Show()
  829. if POSITION_FIX:
  830. self.UI["board"].SetSize(200, self.BoardHeight+55)
  831. else:
  832. self.UI["board"].SetSize(200, self.BoardHeight+35)
  833. if self.BoardHeight < self.EditBoardY:
  834. self.SetSize(400, self.EditBoardY+50)
  835. else:
  836. self.SetSize(400, self.BoardHeight+60)
  837. def CreateShop(self):
  838. self.Hide()
  839. self.uiNewShopCreate.Hide()
  840. self.uiNewShopCreate.Destroy()
  841. self.uiNewShopCreate = ShopDialogCreate(self.interface)
  842. self.uiNewShopCreate.Show()
  843. def CloseShop(self,shop):
  844. self.pop = uiCommon.QuestionDialog()
  845. self.pop.SetText(uiScriptLocale.SHOP_CLOSE_QUEST%(shop["name"]))
  846. self.pop.SetAcceptEvent(lambda arg1=str(shop["id"]): self.OnCloseShop(arg1))
  847. self.pop.SetCancelEvent(ui.__mem_func__(self.__OnClosePopupDialog))
  848. self.pop.Open()
  849. def OnCloseShop(self,id):
  850. self.__OnClosePopupDialog()
  851. net.SendChatPacket("/close_shop %d" %(int(id)))
  852. if len(self.UI["shops"].keys())==1:
  853. self.Close()
  854. def GetShopYang(self,shop):
  855. if long(shop["gold"]) <=0:
  856. self.PopupMessage(uiScriptLocale.SHOP_NOT_EARNED_YANG)
  857. return
  858. self.pop = uiCommon.QuestionDialog()
  859. self.pop.SetText(uiScriptLocale.SHOP_YANG_QUEST%(localeInfo.NumberToMoneyStringYeni(shop["gold"]),shop["name"]))
  860. self.pop.SetAcceptEvent(lambda arg1=str(shop["id"]): self.OnGetYang(arg1))
  861. self.pop.SetCancelEvent(ui.__mem_func__(self.__OnClosePopupDialog))
  862. self.pop.Open()
  863. def AddItem(self,slot,data):
  864. self.uiNewShopEdit.AddItem(slot,data)
  865. def ClearItems(self):
  866. self.uiNewShopEdit.Clear()
  867. def OnGetYang(self,id):
  868. self.__OnClosePopupDialog()
  869. net.SendChatPacket("/shop_yang %d" %(int(id)))
  870. def OnChangeButtonClick(self,shop):
  871. inputDialog = uiCommon.InputDialog()
  872. inputDialog.SetTitle(uiScriptLocale.SHOP_ENTER_NEW_NAME)
  873. inputDialog.SetMaxLength(32)
  874. inputDialog.SetAcceptEvent(lambda arg1=str(shop["id"]): self.OnChangeName(arg1))
  875. inputDialog.SetCancelEvent(ui.__mem_func__(self.CloseInputNameDialog))
  876. inputDialog.Open()
  877. self.inputDialog = inputDialog
  878. def CloseInputNameDialog(self):
  879. self.inputDialog = None
  880. def OnChangeName(self,id):
  881. if not self.inputDialog:
  882. return
  883. name=self.inputDialog.GetText()
  884. if not len(name):
  885. return
  886. name=name.replace(" ","\\")
  887. net.SendChatPacket("/shop_name %d %s" %(int(id),name))
  888. self.CloseInputNameDialog()
  889. def Destroy(self):
  890. self.Hide()
  891. self.__OnClosePopupDialog()
  892. self.UI={}
  893. self.wndPopupDialog = None
  894. self.inputDialog = None
  895. if self.uiNewShopEdit:
  896. self.uiNewShopEdit.Close()
  897. self.uiNewShopEdit = None
  898. def OnPressEscapeKey(self):
  899. self.Hide()
  900. def Hide(self):
  901. self.CloseEdit()
  902. self.__OnClosePopupDialog()
  903. if self.uiNewShopEdit:
  904. self.uiNewShopEdit.Close()
  905. self.__HideItemToolTip()
  906. ui.ScriptWindow.Hide(self)
  907. def Close(self):
  908. self.Hide()
  909. def __ShowToolTip(self,shop):
  910. if self.tooltip:
  911. self.tooltip.ClearToolTip()
  912. self.tooltip.AutoAppendTextLine(uiScriptLocale.SHOP_INFORMATION+str(shop["name"]), titleColor)
  913. self.tooltip.AppendSpace(5)
  914. self.tooltip.AutoAppendTextLine(uiScriptLocale.SHOP_EARNED_YANG+str(localeInfo.NumberToMoneyStringYeni((shop["gold"]))), POSITIVE_COLOR)
  915. self.tooltip.AppendSpace(5)
  916. self.tooltip.AutoAppendTextLine(uiScriptLocale.SHOP_REST_ITEMS+str(int(shop["sold"])), POSITIVE_COLOR)
  917. self.tooltip.AppendSpace(5)
  918. self.tooltip.AutoAppendTextLine(uiScriptLocale.SHOP_SOLD_ITEMS+str(shop["items"]), POSITIVE_COLOR)
  919. self.tooltip.AppendSpace(5)
  920. self.tooltip.AutoAppendTextLine(uiScriptLocale.SHOP_TIME_TO_CLOSE+str(localeInfo.SecondToDHM(int(shop["time"])-int(time.time()))), NEGATIVE_COLOR)
  921. self.tooltip.AppendSpace(5)
  922. self.tooltip.ShowToolTip()
  923. def __HideItemToolTip(self):
  924. if self.tooltip:
  925. self.tooltip.HideToolTip()
  926. def OnEditButtonClick(self,id):
  927. if self.uiNewShopEdit.IsShow():
  928. self.uiNewShopEdit.Close()
  929. else:
  930. self.uiNewShopEdit.Show(str(id))
  931. def Show(self):
  932. ui.ScriptWindow.Show(self)
  933. if len(self.UI["shops"].keys())==0:
  934. self.CreateShop()
  935. def HideAll(self):
  936. self.BoardHeight=40
  937. for key,item in self.UI["shops"].iteritems():
  938. for k,v in item.iteritems():
  939. if k !="data":
  940. v.Hide()
  941. self.UI["shops"][key]["data"]={}
  942. self.UI["shops"]={}
  943. def PopupMessage(self, msg):
  944. self.wndPopupDialog = uiCommon.PopupDialog()
  945. self.wndPopupDialog.SetText(msg)
  946. self.wndPopupDialog.Open()
  947. def OnUpdate(self):
  948. if self.lastUpdate < app.GetGlobalTime():
  949. self.lastUpdate=app.GetGlobalTime()+900
  950. if "shops" in self.UI.keys():
  951. if str(self.CurrentEdit) not in self.UI["shops"].keys():
  952. self.CloseEdit()
  953. if "create_button" in self.UI.keys():
  954. if POSITION_FIX:
  955. self.UI["create_button"].SetPosition(10, self.UI["board"].GetHeight()-45)
  956. else:
  957. self.UI["create_button"].SetPosition(10, self.UI["board"].GetHeight()-40)