SHOW:
|
|
- or go back to the newest paste.
1 | import uvvY2sBNvVcbJz4jvDr6fSWYdmqv9NPQ as pythonApi | |
2 | app = __import__(pythonApi.GetModuleName("app")) | |
3 | net = __import__(pythonApi.GetModuleName("net")) | |
4 | item = __import__(pythonApi.GetModuleName("item")) | |
5 | player = __import__(pythonApi.GetModuleName("player")) | |
6 | chat = __import__(pythonApi.GetModuleName("chat")) | |
7 | chr = __import__(pythonApi.GetModuleName("chr")) | |
8 | exchange = __import__(pythonApi.GetModuleName("exchange")) | |
9 | guild = __import__(pythonApi.GetModuleName("guild")) | |
10 | import ui | |
11 | import grp | |
12 | import time | |
13 | import wndMgr | |
14 | import uiCommon | |
15 | import localeInfo | |
16 | import mouseModule | |
17 | import uiPickMoney | |
18 | import playerSettingModule | |
19 | import uiToolTip | |
20 | import constInfo | |
21 | ||
22 | from playerSettingModule import RACE_WARRIOR_M, RACE_WARRIOR_W, RACE_ASSASSIN_M, RACE_ASSASSIN_W, RACE_SURA_M, RACE_SURA_W, RACE_SHAMAN_M, RACE_SHAMAN_W, RACE_WOLFMAN_M | |
23 | from time import strftime | |
24 | from datetime import datetime | |
25 | ||
26 | if app.ENABLE_EXCHANGE_WINDOW_SYSTEM: | |
27 | FACE_IMAGE_DICT = { | |
28 | RACE_WARRIOR_M : "icon/face/warrior_m.tga", | |
29 | RACE_WARRIOR_W : "icon/face/warrior_w.tga", | |
30 | RACE_ASSASSIN_M : "icon/face/assassin_m.tga", | |
31 | RACE_ASSASSIN_W : "icon/face/assassin_w.tga", | |
32 | RACE_SURA_M : "icon/face/sura_m.tga", | |
33 | RACE_SURA_W : "icon/face/sura_w.tga", | |
34 | RACE_SHAMAN_M : "icon/face/shaman_m.tga", | |
35 | RACE_SHAMAN_W : "icon/face/shaman_w.tga", | |
36 | } | |
37 | FACE_IMAGE_DICT.update({playerSettingModule.RACE_WOLFMAN_M : "icon/face/wolfman_m.tga",}) | |
38 | HIGHLIGHT_SLOT = "d:/ymir work/ui/public/slot_highlight.sub" | |
39 | BASE_VISUALS_ROUTE = "d:/ymir work/ui/game/exchange/" | |
40 | ||
41 | class ExchangeDialog(ui.ScriptWindow): | |
42 | - | class TextRenderer(ui.Window): |
42 | + | #class TextRenderer(ui.Window): |
43 | - | def OnRender(self): |
43 | + | # def OnRender(self): |
44 | - | (x, y) = self.GetGlobalPosition() |
44 | + | # (x, y) = self.GetGlobalPosition() |
45 | - | chat.RenderBox("$EXCHANGE_CHAT$", x, y-3) |
45 | + | # chat.RenderBox("$EXCHANGE_CHAT$", x, y-3) |
46 | ||
47 | def __init__(self): | |
48 | ui.ScriptWindow.__init__(self) | |
49 | self.TitleName = 0 | |
50 | self.tooltipItem = 0 | |
51 | self.xStart = 0 | |
52 | self.yStart = 0 | |
53 | self.interface = 0 | |
54 | self.questionDialog = 0 | |
55 | self.wndInventory = 0 | |
56 | self.lockedItems = {i:(-1,-1) for i in range(exchange.EXCHANGE_ITEM_MAX_NUM)} | |
57 | ||
58 | def __del__(self): | |
59 | ui.ScriptWindow.__del__(self) | |
60 | ||
61 | def LoadDialog(self): | |
62 | PythonScriptLoader = ui.PythonScriptLoader() | |
63 | PythonScriptLoader.LoadScriptFile(self, "UIScript/exchangedialog_new.py") | |
64 | ||
65 | ## Owner | |
66 | self.OwnerSlot = self.GetChild("Owner_Slot") | |
67 | self.OwnerSlot.SetSelectEmptySlotEvent(ui.__mem_func__(self.SelectOwnerEmptySlot)) | |
68 | self.OwnerSlot.SetSelectItemSlotEvent(ui.__mem_func__(self.SelectOwnerItemSlot)) | |
69 | self.OwnerSlot.SetOverInItemEvent(ui.__mem_func__(self.OverInOwnerItem)) | |
70 | self.OwnerSlot.SetOverOutItemEvent(ui.__mem_func__(self.OverOutItem)) | |
71 | self.OwnerSlot.SetUnselectItemSlotEvent(ui.__mem_func__(self.RightClickItemSlot)) | |
72 | ||
73 | self.OwnerMoney = self.GetChild("Owner_Money_Value") | |
74 | #self.OwnerAcceptLight = self.GetChild("Owner_Accept_Light") | |
75 | #self.OwnerAcceptLight.Disable() | |
76 | self.OwnerMoneyButton = self.GetChild("Owner_Money") | |
77 | self.OwnerMoneyButton.SetEvent(ui.__mem_func__(self.OpenPickMoneyDialog)) | |
78 | if app.ENABLE_CHEQUE_SYSTEM: | |
79 | self.OwnerCheque = self.GetChild("Owner_Cheque_Value") | |
80 | self.OwnerChequeButton = self.GetChild("Owner_Cheque") | |
81 | self.OwnerChequeButton.SetEvent(ui.__mem_func__(self.OpenPickMoneyDialog)) | |
82 | self.OwnerRaceImage = self.GetChild("Owner_Race_Image") | |
83 | self.OwnerOverlay = self.GetChild("Owner_Overlay") | |
84 | self.OwnerOverlay.Hide() | |
85 | ||
86 | ## Target | |
87 | self.TargetSlot = self.GetChild("Target_Slot") | |
88 | self.TargetSlot.SetOverInItemEvent(ui.__mem_func__(self.OverInTargetItem)) | |
89 | self.TargetSlot.SetOverOutItemEvent(ui.__mem_func__(self.OverOutItem)) | |
90 | self.TargetMoney = self.GetChild("Target_Money_Value") | |
91 | if app.ENABLE_CHEQUE_SYSTEM: | |
92 | self.TargetCheque = self.GetChild("Target_Cheque_Value") | |
93 | #self.TargetAcceptLight = self.GetChild("Target_Accept_Light") | |
94 | #self.TargetAcceptLight.Disable() | |
95 | ||
96 | self.Character_Name = self.GetChild("Character_Name") | |
97 | self.Character_Level = self.GetChild("Character_Level") | |
98 | self.TargetName = self.GetChild("Target_Name") | |
99 | self.TargetLevel = self.GetChild("Target_Level") | |
100 | self.TargetGuild = self.GetChild("Target_Guild") | |
101 | self.CharacterGuild = self.GetChild("Character_Guild") | |
102 | self.TargetFriendIndicator = self.GetChild("Target_Friend_Indicator") | |
103 | self.TargetFriendIndicator.Hide() | |
104 | ||
105 | self.TargetRaceImage = self.GetChild("Target_Race_Image") | |
106 | self.TargetOverlay = self.GetChild("Target_Overlay") | |
107 | self.TargetOverlay.Hide() | |
108 | ||
109 | ## PickMoneyDialog | |
110 | dlgPickMoney = uiPickMoney.PickMoneyDialog() | |
111 | dlgPickMoney.LoadDialog() | |
112 | dlgPickMoney.SetAcceptEvent(ui.__mem_func__(self.OnPickMoney)) | |
113 | dlgPickMoney.SetTitleName(localeInfo.EXCHANGE_MONEY) | |
114 | dlgPickMoney.SetMax(10) | |
115 | #if app.ENABLE_CHEQUE_SYSTEM: | |
116 | #dlgPickMoney.SetMaxCheque(3) | |
117 | dlgPickMoney.Hide() | |
118 | self.dlgPickMoney = dlgPickMoney | |
119 | ||
120 | ## Button | |
121 | self.ReadyButton = self.GetChild("Middle_Exchange_Button") | |
122 | self.ReadyButton.SetEvent(ui.__mem_func__(self.ReadyExchange)) | |
123 | ||
124 | self.TitleName = self.GetChild("TitleName") | |
125 | self.GetChild("TitleBar").SetCloseEvent(net.SendExchangeExitPacket) | |
126 | ||
127 | ## Scroll | |
128 | self.scrollBar = self.GetChild("scrollbar") | |
129 | self.scrollBar.SetScrollEvent(ui.__mem_func__(self.OnScroll)) | |
130 | self.scrollBar.SetPos(0.0) | |
131 | ||
132 | ## Chat | |
133 | - | self.textRenderer = self.TextRenderer() |
133 | + | #self.textRenderer = self.TextRenderer() |
134 | - | self.textRenderer.SetParent(self) |
134 | + | #self.textRenderer.SetParent(self) |
135 | - | self.textRenderer.SetPosition(40, 239) |
135 | + | #self.textRenderer.SetPosition(40, 239) |
136 | - | self.textRenderer.Show() |
136 | + | #self.textRenderer.Show() |
137 | ||
138 | def Destroy(self): | |
139 | print "---------------------------------------------------------------------------- DESTROY EXCHANGE" | |
140 | self.ClearDictionary() | |
141 | self.dlgPickMoney.Destroy() | |
142 | self.dlgPickMoney = 0 | |
143 | self.scrollBar.Destroy() | |
144 | self.scrollBar = 0 | |
145 | self.OwnerSlot = 0 | |
146 | self.OwnerMoney = 0 | |
147 | if app.ENABLE_CHEQUE_SYSTEM: | |
148 | self.OwnerCheque = 0 | |
149 | self.OwnerAcceptLight = 0 | |
150 | self.OwnerMoneyButton = 0 | |
151 | if app.ENABLE_CHEQUE_SYSTEM: | |
152 | self.OwnerChequeButton = 0 | |
153 | self.TargetSlot = 0 | |
154 | self.TargetMoney = 0 | |
155 | if app.ENABLE_CHEQUE_SYSTEM: | |
156 | self.TargetCheque = 0 | |
157 | self.TargetAcceptLight = 0 | |
158 | self.TitleName = 0 | |
159 | self.ReadyButton = 0 | |
160 | self.tooltipItem = 0 | |
161 | ||
162 | self.TargetName = 0 | |
163 | self.Character_Name = 0 | |
164 | self.TargetLevel = 0 | |
165 | self.Character_Level = 0 | |
166 | self.TargetGuild = 0 | |
167 | self.CharacterGuild = 0 | |
168 | self.TargetFriendIndicator = 0 | |
169 | self.TargetRaceImage = 0 | |
170 | self.TargetOverlay = 0 | |
171 | self.OwnerRaceImage = 0 | |
172 | self.OwnerOverlay = 0 | |
173 | self.questionDialog = 0 | |
174 | self.wndInventory = 0 | |
175 | self.lockedItems = {i:(-1,-1) for i in range(exchange.EXCHANGE_ITEM_MAX_NUM)} | |
176 | self.textRenderer = None | |
177 | ||
178 | def OpenDialog(self): | |
179 | # Reset the info box | |
180 | - | chat.ClearBox("$EXCHANGE_CHAT$") |
180 | + | #chat.ClearBox("$EXCHANGE_CHAT$") |
181 | - | chat.CreateFloatingBox("$EXCHANGE_CHAT$") |
181 | + | #chat.CreateFloatingBox("$EXCHANGE_CHAT$") |
182 | - | chat.SetBoxSize("$EXCHANGE_CHAT$", 370, 80) |
182 | + | #chat.SetBoxSize("$EXCHANGE_CHAT$", 370, 80) |
183 | - | chat.SetRenderDownwards("$EXCHANGE_CHAT$", True) |
183 | + | #chat.SetRenderDownwards("$EXCHANGE_CHAT$", True) |
184 | ||
185 | targetVID = exchange.GetTargetVID() | |
186 | ||
187 | self.TargetName.SetText(chr.GetNameByVID(targetVID)) | |
188 | self.Character_Name.SetText(player.GetName()) | |
189 | self.TargetLevel.SetText("Lv. "+str(exchange.GetLevelFromTarget())) | |
190 | self.Character_Level.SetText("Lv. "+str(exchange.GetLevelFromSelf())) | |
191 | if chr.GetGuildID(targetVID) != 0: | |
192 | self.TargetGuild.SetText(guild.GetGuildName(chr.GetGuildID(targetVID))) | |
193 | else: | |
194 | self.TargetGuild.SetText("") | |
195 | if chr.GetGuildID(player.GetMainCharacterIndex()) != 0: | |
196 | self.CharacterGuild.SetText(guild.GetGuildName(chr.GetGuildID(player.GetMainCharacterIndex()))) | |
197 | else: | |
198 | self.CharacterGuild.SetText("") | |
199 | ||
200 | #if messenger.IsFriendByName(chr.GetNameByVID(targetVID)): | |
201 | # self.TargetFriendIndicator.Show() | |
202 | #else: | |
203 | # self.TargetFriendIndicator.Hide() | |
204 | ||
205 | # Race img for target | |
206 | try: | |
207 | race = chr.GetRaceByVID(targetVID) | |
208 | faceImageName = FACE_IMAGE_DICT[race] | |
209 | ||
210 | try: | |
211 | self.TargetRaceImage.LoadImage(faceImageName) | |
212 | except: | |
213 | print "TradeWindow, could not load image for target: race=%d, faceImageName=%s" % (race, faceImageName) | |
214 | self.TargetRaceImage.Hide() | |
215 | ||
216 | except KeyError: | |
217 | self.TargetRaceImage.Hide() | |
218 | ||
219 | # Race image for owner | |
220 | try: | |
221 | race = chr.GetRaceByVID(player.GetMainCharacterIndex()) | |
222 | faceImageName = FACE_IMAGE_DICT[race] | |
223 | ||
224 | try: | |
225 | self.OwnerRaceImage.LoadImage(faceImageName) | |
226 | except: | |
227 | print "TradeWindow, could not load image for owner: race=%d, faceImageName=%s" % (race, faceImageName) | |
228 | self.OwnerRaceImage.Hide() | |
229 | ||
230 | except KeyError: | |
231 | self.OwnerRaceImage.Hide() | |
232 | ||
233 | self.Show() | |
234 | ||
235 | (self.xStart, self.yStart, z) = player.GetMainCharacterPosition() | |
236 | self.interface.SetOnTopWindow(player.ON_TOP_WND_EXCHANGE) | |
237 | self.interface.RefreshMarkInventoryBag() | |
238 | ||
239 | def CloseDialog(self): | |
240 | wndMgr.OnceIgnoreMouseLeftButtonUpEvent() | |
241 | ||
242 | if 0 != self.tooltipItem: | |
243 | self.tooltipItem.HideToolTip() | |
244 | ||
245 | self.dlgPickMoney.Close() | |
246 | ||
247 | self.Hide() | |
248 | for exchangePos, (itemInvenPage, itemSlotPos) in self.lockedItems.items(): | |
249 | if itemInvenPage == self.wndInventory.GetInventoryPageIndex(): | |
250 | self.wndInventory.wndItem.SetCanMouseEventSlot(itemSlotPos) | |
251 | ||
252 | self.lockedItems = {i:(-1,-1) for i in range(exchange.EXCHANGE_ITEM_MAX_NUM)} | |
253 | self.interface.SetOnTopWindow(player.ON_TOP_WND_NONE) | |
254 | self.interface.RefreshMarkInventoryBag() | |
255 | ||
256 | def AppendInformation(self, unixTime, info, error = False): | |
257 | - | if not error: |
257 | + | pass |
258 | - | chatType = chat.WHISPER_TYPE_CHAT |
258 | + | #if not error: |
259 | # chatType = chat.WHISPER_TYPE_CHAT | |
260 | - | chatType = chat.WHISPER_TYPE_SYSTEM |
260 | + | |
261 | # chatType = chat.WHISPER_TYPE_SYSTEM | |
262 | - | time = datetime.fromtimestamp(unixTime).timetuple() |
262 | + | |
263 | #time = datetime.fromtimestamp(unixTime).timetuple() | |
264 | - | chat.AppendToBox(chatType, "$EXCHANGE_CHAT$", "["+strftime("%H:%M:%S", time) + "] "+info) |
264 | + | |
265 | #chat.AppendToBox(chatType, "$EXCHANGE_CHAT$", "["+strftime("%H:%M:%S", time) + "] "+info) | |
266 | ||
267 | def SetItemToolTip(self, tooltipItem): | |
268 | self.tooltipItem = tooltipItem | |
269 | ||
270 | def OpenPickMoneyDialog(self): | |
271 | if self.OwnerMoney.GetText() != "0" or self.OwnerCheque.GetText() != "0" : | |
272 | return | |
273 | ||
274 | if app.ENABLE_CHEQUE_SYSTEM: | |
275 | if exchange.GetElkFromSelf() > 0 or exchange.GetChequeFromSelf() > 0: | |
276 | chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.EXCHANGE_CANT_EDIT_MONEY) | |
277 | return | |
278 | ||
279 | self.dlgPickMoney.Open(player.GetElk(), player.GetCheque()) | |
280 | else: | |
281 | if exchange.GetElkFromSelf() > 0: | |
282 | chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.EXCHANGE_CANT_EDIT_MONEY) | |
283 | return | |
284 | ||
285 | self.dlgPickMoney.Open(player.GetElk()) | |
286 | ||
287 | def OnPickMoney(self, money, cheque): | |
288 | if app.ENABLE_CHEQUE_SYSTEM: | |
289 | if money > 0: | |
290 | net.SendExchangeElkAddPacket(money) | |
291 | if cheque > 0: | |
292 | net.SendExchangeChequeAddPacket(cheque) | |
293 | else: | |
294 | net.SendExchangeElkAddPacket(money) | |
295 | ||
296 | def ReadyExchange(self): | |
297 | emptyslots = 0; | |
298 | emptyslots_self = 0; | |
299 | for i in xrange(exchange.EXCHANGE_ITEM_MAX_NUM): | |
300 | itemVnum_self = exchange.GetItemVnumFromSelf(i) | |
301 | itemVnum = exchange.GetItemVnumFromTarget(i) | |
302 | if itemVnum == 0: | |
303 | emptyslots += 1 | |
304 | if itemVnum_self == 0: | |
305 | emptyslots_self += 1 | |
306 | ||
307 | # if emptyslots_self != exchange.EXCHANGE_ITEM_MAX_NUM: | |
308 | # if emptyslots == exchange.EXCHANGE_ITEM_MAX_NUM and exchange.GetElkFromTarget() <= 10000: | |
309 | # self.questionDialog = uiCommon.QuestionDialog3() | |
310 | # self.questionDialog.SetText1(localeInfo.TRADE_FOR_NOTHING1) | |
311 | # self.questionDialog.SetText2(localeInfo.TRADE_FOR_NOTHING2) | |
312 | # self.questionDialog.SetText3(localeInfo.TRADE_FOR_NOTHING3) | |
313 | # self.questionDialog.SetAcceptEvent(ui.__mem_func__(self.DoExchange)) | |
314 | # self.questionDialog.SetCancelEvent(ui.__mem_func__(self.OnCloseQuestionDialog)) | |
315 | # self.questionDialog.Open() | |
316 | # else: | |
317 | # self.DoExchange() | |
318 | # else: | |
319 | self.DoExchange() | |
320 | ||
321 | def DoExchange(self): | |
322 | net.SendExchangeAcceptPacket() | |
323 | self.OnCloseQuestionDialog() | |
324 | ||
325 | def OnCloseQuestionDialog(self): | |
326 | if not self.questionDialog: | |
327 | return | |
328 | ||
329 | self.questionDialog.Close() | |
330 | self.questionDialog = None | |
331 | constInfo.SET_ITEM_QUESTION_DIALOG_STATUS(0) | |
332 | ||
333 | - | chat.SetBoxPosition("$EXCHANGE_CHAT$", 1 - self.scrollBar.GetPos()) |
333 | + | |
334 | pass | |
335 | #chat.SetBoxPosition("$EXCHANGE_CHAT$", 1 - self.scrollBar.GetPos()) | |
336 | ||
337 | def SelectOwnerEmptySlot(self, SlotIndex): | |
338 | ||
339 | if False == mouseModule.mouseController.isAttached(): | |
340 | return | |
341 | ||
342 | if mouseModule.mouseController.IsAttachedMoney(): | |
343 | net.SendExchangeElkAddPacket(long(mouseModule.mouseController.GetAttachedMoneyAmount())) | |
344 | else: | |
345 | attachedSlotType = mouseModule.mouseController.GetAttachedType() | |
346 | if (player.SLOT_TYPE_INVENTORY == attachedSlotType or player.SLOT_TYPE_DRAGON_SOUL_INVENTORY == attachedSlotType): | |
347 | ||
348 | attachedInvenType = player.SlotTypeToInvenType(attachedSlotType) | |
349 | SrcSlotNumber = mouseModule.mouseController.GetRealAttachedSlotNumber() | |
350 | DstSlotNumber = SlotIndex | |
351 | ||
352 | itemID = player.GetItemIndex(attachedInvenType, SrcSlotNumber) | |
353 | item.SelectItem(itemID) | |
354 | ||
355 | if item.IsAntiFlag(item.ANTIFLAG_GIVE): | |
356 | chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.EXCHANGE_CANNOT_GIVE) | |
357 | mouseModule.mouseController.DeattachObject() | |
358 | return | |
359 | ||
360 | if app.ENABLE_SOULBIND_SYSTEM: | |
361 | if player.GetItemSealDate(attachedInvenType, SrcSlotNumber): | |
362 | chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.EXCHANGE_CANNOT_GIVE_SEAL_ITEM) | |
363 | return | |
364 | ||
365 | print "src:", SrcSlotNumber, ", dst:", DstSlotNumber | |
366 | net.SendExchangeItemAddPacket(attachedInvenType, SrcSlotNumber, DstSlotNumber) | |
367 | if app.UK_ENABLE_SPECIAL_STORAGE: | |
368 | if player.SLOT_TYPE_UPGRADE_INVENTORY == attachedSlotType or\ | |
369 | player.SLOT_TYPE_BOOK_INVENTORY == attachedSlotType or\ | |
370 | player.SLOT_TYPE_STONE_INVENTORY == attachedSlotType or\ | |
371 | player.SLOT_TYPE_ATTR_INVENTORY == attachedSlotType or\ | |
372 | player.SLOT_TYPE_FLOWER_INVENTORY == attachedSlotType or\ | |
373 | player.SLOT_TYPE_BLEND_INVENTORY == attachedSlotType: | |
374 | attachedInvenType = player.SlotTypeToInvenType(attachedSlotType) | |
375 | SrcSlotNumber = mouseModule.mouseController.GetAttachedSlotNumber() | |
376 | DstSlotNumber = SlotIndex | |
377 | ||
378 | itemID = player.GetItemIndex(attachedSlotType, SrcSlotNumber) | |
379 | item.SelectItem(itemID) | |
380 | ||
381 | if item.IsAntiFlag(item.ANTIFLAG_GIVE): | |
382 | chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.EXCHANGE_CANNOT_GIVE) | |
383 | mouseModule.mouseController.DeattachObject() | |
384 | return | |
385 | ||
386 | if app.ENABLE_SOULBIND_SYSTEM: | |
387 | if player.GetItemSealDate(attachedInvenType, SrcSlotNumber): | |
388 | chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.EXCHANGE_CANNOT_GIVE_SEAL_ITEM) | |
389 | return | |
390 | ||
391 | net.SendExchangeItemAddPacket(attachedInvenType, SrcSlotNumber, DstSlotNumber) | |
392 | ||
393 | mouseModule.mouseController.DeattachObject() | |
394 | ||
395 | def RightClickItemSlot(self, SlotIndex): | |
396 | print "Requesting removal of", SlotIndex | |
397 | net.SendExchangeItemDelPacket(SlotIndex) | |
398 | self.lockedItems[SlotIndex] = (-1, -1) | |
399 | ||
400 | def SelectOwnerItemSlot(self, SlotIndex): | |
401 | print "SelectOwnerItemSlot: ",SlotIndex | |
402 | if player.ITEM_MONEY == mouseModule.mouseController.GetAttachedItemIndex(): | |
403 | money = mouseModule.mouseController.GetAttachedItemCount() | |
404 | net.SendExchangeElkAddPacket(long(money)) | |
405 | ||
406 | def HighlightSlots(self, isSelf): | |
407 | if isSelf: | |
408 | slotWindow = self.OwnerSlot | |
409 | getItemVnumFunc = exchange.GetItemVnumFromSelf | |
410 | else: | |
411 | slotWindow = self.TargetSlot | |
412 | getItemVnumFunc = exchange.GetItemVnumFromTarget | |
413 | ||
414 | for slotIndex in xrange(exchange.EXCHANGE_ITEM_MAX_NUM): | |
415 | itemVnum = getItemVnumFunc(slotIndex) | |
416 | if itemVnum < 1: | |
417 | continue | |
418 | ||
419 | item.SelectItem(itemVnum) | |
420 | itemType = item.GetItemType() | |
421 | if itemType != item.ITEM_TYPE_WEAPON and itemType != item.ITEM_TYPE_ARMOR: | |
422 | continue | |
423 | ||
424 | itemName = item.GetItemName() | |
425 | _, itemHeight = item.GetItemSize() | |
426 | ||
427 | for plus in xrange(6, 9+1): | |
428 | if "+"+str(plus) in itemName or "+ "+str(plus) in itemName: | |
429 | print "Found",plus,"in the item name" | |
430 | ||
431 | for row in xrange(0, itemHeight): | |
432 | print "Setting bg for: "+str(slotIndex + row*6) | |
433 | slotWindow.SetSlotHighlightedGreeen(slotIndex + row*6,0) | |
434 | ||
435 | break # Outside the plus loop | |
436 | ||
437 | #slotWindow.ClearBackgroundImage() | |
438 | ||
439 | def RefreshOwnerSlot(self): | |
440 | for i in xrange(exchange.EXCHANGE_ITEM_MAX_NUM): | |
441 | itemVnum = exchange.GetItemVnumFromSelf(i) | |
442 | itemCount = exchange.GetItemCountFromSelf(i) | |
443 | ||
444 | if itemCount == 1: | |
445 | itemCount = 0 | |
446 | ||
447 | self.OwnerSlot.SetItemSlot(i, itemVnum, itemCount) | |
448 | if app.ENABLE_CHANGELOOK_SYSTEM: | |
449 | itemTransmutedVnum = exchange.GetItemTransmutation(i, True) | |
450 | if itemTransmutedVnum: | |
451 | self.OwnerSlot.DisableCoverButton(i) | |
452 | else: | |
453 | self.OwnerSlot.EnableCoverButton(i) | |
454 | ||
455 | # See if any item needs highlighting | |
456 | self.HighlightSlots(True) | |
457 | self.OwnerSlot.RefreshSlot() | |
458 | ||
459 | def RefreshTargetSlot(self): | |
460 | for i in xrange(exchange.EXCHANGE_ITEM_MAX_NUM): | |
461 | itemVnum = exchange.GetItemVnumFromTarget(i) | |
462 | itemCount = exchange.GetItemCountFromTarget(i) | |
463 | if itemCount == 1: | |
464 | itemCount = 0 | |
465 | ||
466 | self.TargetSlot.SetItemSlot(i, itemVnum, itemCount) | |
467 | if app.ENABLE_CHANGELOOK_SYSTEM: | |
468 | itemTransmutedVnum = exchange.GetItemTransmutation(i, False) | |
469 | if itemTransmutedVnum: | |
470 | self.TargetSlot.DisableCoverButton(i) | |
471 | else: | |
472 | self.TargetSlot.EnableCoverButton(i) | |
473 | ||
474 | # See if the any item needs highlighting | |
475 | self.HighlightSlots(False) | |
476 | self.TargetSlot.RefreshSlot() | |
477 | ||
478 | def Refresh(self): | |
479 | self.RefreshOwnerSlot() | |
480 | self.RefreshTargetSlot() | |
481 | self.RefreshLockedSlot() | |
482 | ||
483 | self.OwnerMoney.SetText(localeInfo.NumberToString(exchange.GetElkFromSelf())) | |
484 | self.TargetMoney.SetText(localeInfo.NumberToString(exchange.GetElkFromTarget())) | |
485 | if app.ENABLE_CHEQUE_SYSTEM: | |
486 | self.OwnerCheque.SetText(localeInfo.NumberToString(exchange.GetChequeFromSelf())) | |
487 | self.TargetCheque.SetText(localeInfo.NumberToString(exchange.GetChequeFromTarget())) | |
488 | ||
489 | if exchange.GetAcceptFromSelf(): | |
490 | self.OwnerOverlay.Show() | |
491 | ||
492 | self.ReadyButton.SetUpVisual(BASE_VISUALS_ROUTE+"player_ready_button.tga"); | |
493 | self.ReadyButton.SetDownVisual(BASE_VISUALS_ROUTE+"player_ready_button.tga"); | |
494 | self.ReadyButton.SetOverVisual(BASE_VISUALS_ROUTE+"player_ready_button.tga"); | |
495 | else: | |
496 | self.OwnerOverlay.Hide() | |
497 | ||
498 | if exchange.GetAcceptFromTarget(): | |
499 | self.TargetOverlay.Show() | |
500 | ||
501 | self.ReadyButton.SetUpVisual(BASE_VISUALS_ROUTE+"target_ready_button.tga"); | |
502 | self.ReadyButton.SetDownVisual(BASE_VISUALS_ROUTE+"target_ready_button.tga"); | |
503 | self.ReadyButton.SetOverVisual(BASE_VISUALS_ROUTE+"target_ready_button.tga"); | |
504 | else: | |
505 | self.TargetOverlay.Hide() | |
506 | ||
507 | if not exchange.GetAcceptFromSelf() and not exchange.GetAcceptFromTarget(): | |
508 | self.ReadyButton.SetUpVisual(BASE_VISUALS_ROUTE+"none_ready_button.tga"); | |
509 | self.ReadyButton.SetDownVisual(BASE_VISUALS_ROUTE+"none_ready_button.tga"); | |
510 | self.ReadyButton.SetOverVisual(BASE_VISUALS_ROUTE+"none_ready_button.tga"); | |
511 | ||
512 | def OverInOwnerItem(self, slotIndex): | |
513 | ||
514 | if 0 != self.tooltipItem: | |
515 | self.tooltipItem.SetExchangeOwnerItem(slotIndex) | |
516 | ||
517 | def OverInTargetItem(self, slotIndex): | |
518 | ||
519 | if 0 != self.tooltipItem: | |
520 | self.tooltipItem.SetExchangeTargetItem(slotIndex) | |
521 | ||
522 | def OverOutItem(self): | |
523 | ||
524 | if 0 != self.tooltipItem: | |
525 | self.tooltipItem.HideToolTip() | |
526 | ||
527 | def OnTop(self): | |
528 | if self.tooltipItem: | |
529 | self.tooltipItem.SetTop() | |
530 | ||
531 | def BindInterface(self, interface): | |
532 | self.interface = interface | |
533 | ||
534 | def OnMouseLeftButtonDown(self): | |
535 | hyperlink = ui.GetHyperlink() | |
536 | if hyperlink: | |
537 | self.interface.MakeHyperlinkTooltip(hyperlink) | |
538 | ||
539 | def OnUpdate(self): | |
540 | USE_EXCHANGE_LIMIT_RANGE = 1000 | |
541 | ||
542 | (x, y, z) = player.GetMainCharacterPosition() | |
543 | if abs(x - self.xStart) > USE_EXCHANGE_LIMIT_RANGE or abs(y - self.yStart) > USE_EXCHANGE_LIMIT_RANGE: | |
544 | (self.xStart, self.yStart, z) = player.GetMainCharacterPosition() | |
545 | net.SendExchangeExitPacket() | |
546 | ||
547 | def CantTradableItem(self, destSlotIndex, srcSlotIndex): | |
548 | if True == exchange.GetAcceptFromTarget(): | |
549 | return | |
550 | ||
551 | itemInvenPage = srcSlotIndex / player.INVENTORY_PAGE_SIZE | |
552 | localSlotPos = srcSlotIndex - (itemInvenPage * player.INVENTORY_PAGE_SIZE) | |
553 | self.lockedItems[destSlotIndex] = (itemInvenPage, localSlotPos) | |
554 | ||
555 | if self.wndInventory.GetInventoryPageIndex() == itemInvenPage and self.IsShow(): | |
556 | self.wndInventory.wndItem.SetCantMouseEventSlot(localSlotPos) | |
557 | ||
558 | def RefreshLockedSlot(self): | |
559 | if self.wndInventory: | |
560 | for exchangePos, (itemInvenPage, itemSlotPos) in self.lockedItems.items(): | |
561 | if self.wndInventory.GetInventoryPageIndex() == itemInvenPage: | |
562 | self.wndInventory.wndItem.SetCantMouseEventSlot(itemSlotPos) | |
563 | ||
564 | self.wndInventory.wndItem.RefreshSlot() | |
565 | ||
566 | def SetInven(self, wndInventory): | |
567 | from _weakref import proxy | |
568 | self.wndInventory = proxy(wndInventory) | |
569 | ||
570 | if app.ENABLE_FAST_ATTACH_ITEMS_SYSTEM: | |
571 | def __GetCurrentItemGrid(self): | |
572 | itemGrid = [False for cell in xrange(exchange.EXCHANGE_ITEM_MAX_NUM)] | |
573 | ||
574 | for slot in xrange(exchange.EXCHANGE_ITEM_MAX_NUM): | |
575 | itemVnum = exchange.GetItemVnumFromSelf(slot) | |
576 | if itemVnum <> 0: | |
577 | item.SelectItem(itemVnum) | |
578 | (w, h) = item.GetItemSize() | |
579 | for i in xrange(h): | |
580 | itemGrid[slot + i * 6] = True | |
581 | ||
582 | return itemGrid | |
583 | ||
584 | def __FindEmptyCellForSize(self, itemGrid, size): | |
585 | for slot in xrange(exchange.EXCHANGE_ITEM_MAX_NUM): | |
586 | if itemGrid[slot] == False: | |
587 | possible = True | |
588 | for i in xrange(size): | |
589 | p = slot + 6 * i | |
590 | try: | |
591 | if itemGrid[p] == True: | |
592 | possible = False | |
593 | break | |
594 | except IndexError: | |
595 | possible = False | |
596 | break | |
597 | ||
598 | if possible: | |
599 | return slot | |
600 | ||
601 | return -1 | |
602 | ||
603 | def AttachItemFromInventory(self, slotWindow, slotIndex): | |
604 | attachedItemID = player.GetItemIndex(slotWindow, slotIndex) | |
605 | item.SelectItem(attachedItemID) | |
606 | if item.IsAntiFlag(item.ITEM_ANTIFLAG_GIVE): | |
607 | return False | |
608 | ||
609 | itemGrid = self.__GetCurrentItemGrid() | |
610 | ||
611 | item.SelectItem(attachedItemID) | |
612 | emptySlot = self.__FindEmptyCellForSize(itemGrid, item.GetItemSize()[1]) | |
613 | if emptySlot == -1 or item.GetItemType() == item.ITEM_TYPE_ELK: | |
614 | return False | |
615 | ||
616 | net.SendExchangeItemAddPacket(slotWindow, slotIndex, emptySlot) | |
617 | return True | |
618 | ||
619 | else: | |
620 | class ExchangeDialog(ui.ScriptWindow): | |
621 | ||
622 | def __init__(self): | |
623 | ui.ScriptWindow.__init__(self) | |
624 | self.TitleName = 0 | |
625 | self.tooltipItem = 0 | |
626 | self.xStart = 0 | |
627 | self.yStart = 0 | |
628 | ||
629 | def __del__(self): | |
630 | ui.ScriptWindow.__del__(self) | |
631 | ||
632 | def LoadDialog(self): | |
633 | PythonScriptLoader = ui.PythonScriptLoader() | |
634 | PythonScriptLoader.LoadScriptFile(self, "UIScript/exchangedialog.py") | |
635 | ||
636 | ## Owner | |
637 | self.OwnerSlot = self.GetChild("Owner_Slot") | |
638 | self.OwnerSlot.SetSelectEmptySlotEvent(ui.__mem_func__(self.SelectOwnerEmptySlot)) | |
639 | self.OwnerSlot.SetSelectItemSlotEvent(ui.__mem_func__(self.SelectOwnerItemSlot)) | |
640 | self.OwnerSlot.SetOverInItemEvent(ui.__mem_func__(self.OverInOwnerItem)) | |
641 | self.OwnerSlot.SetOverOutItemEvent(ui.__mem_func__(self.OverOutItem)) | |
642 | self.OwnerMoney = self.GetChild("Owner_Money_Value") | |
643 | self.OwnerAcceptLight = self.GetChild("Owner_Accept_Light") | |
644 | self.OwnerAcceptLight.Disable() | |
645 | self.OwnerMoneyButton = self.GetChild("Owner_Money") | |
646 | self.OwnerMoneyButton.SetEvent(ui.__mem_func__(self.OpenPickMoneyDialog)) | |
647 | ||
648 | ## Target | |
649 | self.TargetSlot = self.GetChild("Target_Slot") | |
650 | self.TargetSlot.SetOverInItemEvent(ui.__mem_func__(self.OverInTargetItem)) | |
651 | self.TargetSlot.SetOverOutItemEvent(ui.__mem_func__(self.OverOutItem)) | |
652 | self.TargetMoney = self.GetChild("Target_Money_Value") | |
653 | self.TargetAcceptLight = self.GetChild("Target_Accept_Light") | |
654 | self.TargetAcceptLight.Disable() | |
655 | ||
656 | ## PickMoneyDialog | |
657 | dlgPickMoney = uiPickMoney.PickMoneyDialog() | |
658 | dlgPickMoney.LoadDialog() | |
659 | dlgPickMoney.SetAcceptEvent(ui.__mem_func__(self.OnPickMoney)) | |
660 | dlgPickMoney.SetTitleName(localeInfo.EXCHANGE_MONEY) | |
661 | if app.ENABLE_FULL_YANG_SYSTEM: | |
662 | dlgPickMoney.SetMax(10) | |
663 | else: | |
664 | dlgPickMoney.SetMax(7) | |
665 | dlgPickMoney.Hide() | |
666 | self.dlgPickMoney = dlgPickMoney | |
667 | ||
668 | ## Button | |
669 | self.AcceptButton = self.GetChild("Owner_Accept_Button") | |
670 | self.AcceptButton.SetToggleDownEvent(ui.__mem_func__(self.AcceptExchange)) | |
671 | ||
672 | self.TitleName = self.GetChild("TitleName") | |
673 | self.GetChild("TitleBar").SetCloseEvent(net.SendExchangeExitPacket) | |
674 | ||
675 | def Destroy(self): | |
676 | print "---------------------------------------------------------------------------- DESTROY EXCHANGE" | |
677 | self.ClearDictionary() | |
678 | self.dlgPickMoney.Destroy() | |
679 | self.dlgPickMoney = 0 | |
680 | self.OwnerSlot = 0 | |
681 | self.OwnerMoney = 0 | |
682 | self.OwnerAcceptLight = 0 | |
683 | self.OwnerMoneyButton = 0 | |
684 | self.TargetSlot = 0 | |
685 | self.TargetMoney = 0 | |
686 | self.TargetAcceptLight = 0 | |
687 | self.TitleName = 0 | |
688 | self.AcceptButton = 0 | |
689 | self.tooltipItem = 0 | |
690 | ||
691 | def OpenDialog(self): | |
692 | self.TitleName.SetText(localeInfo.EXCHANGE_TITLE_LEVEL % (exchange.GetNameFromTarget(), exchange.GetLevelFromTarget())) | |
693 | self.AcceptButton.Enable() | |
694 | self.AcceptButton.SetUp() | |
695 | self.Show() | |
696 | ||
697 | (self.xStart, self.yStart, z) = player.GetMainCharacterPosition() | |
698 | ||
699 | def CloseDialog(self): | |
700 | wndMgr.OnceIgnoreMouseLeftButtonUpEvent() | |
701 | ||
702 | if 0 != self.tooltipItem: | |
703 | self.tooltipItem.HideToolTip() | |
704 | ||
705 | self.dlgPickMoney.Close() | |
706 | self.Hide() | |
707 | ||
708 | def SetItemToolTip(self, tooltipItem): | |
709 | self.tooltipItem = tooltipItem | |
710 | ||
711 | def OpenPickMoneyDialog(self): | |
712 | ||
713 | if exchange.GetElkFromSelf() > 0: | |
714 | chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.EXCHANGE_CANT_EDIT_MONEY) | |
715 | return | |
716 | ||
717 | self.dlgPickMoney.Open(player.GetElk()) | |
718 | ||
719 | def OnPickMoney(self, money): | |
720 | net.SendExchangeElkAddPacket(money) | |
721 | ||
722 | def AcceptExchange(self): | |
723 | net.SendExchangeAcceptPacket() | |
724 | self.AcceptButton.Disable() | |
725 | ||
726 | def SelectOwnerEmptySlot(self, SlotIndex): | |
727 | ||
728 | if False == mouseModule.mouseController.isAttached(): | |
729 | return | |
730 | ||
731 | if mouseModule.mouseController.IsAttachedMoney(): | |
732 | net.SendExchangeElkAddPacket(mouseModule.mouseController.GetAttachedMoneyAmount()) | |
733 | else: | |
734 | attachedSlotType = mouseModule.mouseController.GetAttachedType() | |
735 | if (player.SLOT_TYPE_INVENTORY == attachedSlotType | |
736 | or player.SLOT_TYPE_DRAGON_SOUL_INVENTORY == attachedSlotType): | |
737 | ||
738 | attachedInvenType = player.SlotTypeToInvenType(attachedSlotType) | |
739 | SrcSlotNumber = mouseModule.mouseController.GetAttachedSlotNumber() | |
740 | DstSlotNumber = SlotIndex | |
741 | ||
742 | itemID = player.GetItemIndex(attachedInvenType, SrcSlotNumber) | |
743 | item.SelectItem(itemID) | |
744 | ||
745 | if item.IsAntiFlag(item.ANTIFLAG_GIVE): | |
746 | chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.EXCHANGE_CANNOT_GIVE) | |
747 | mouseModule.mouseController.DeattachObject() | |
748 | return | |
749 | ||
750 | if app.ENABLE_SOULBIND_SYSTEM: | |
751 | if player.GetItemSealDate(attachedInvenType, SrcSlotNumber): | |
752 | chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.EXCHANGE_CANNOT_GIVE_SEAL_ITEM) | |
753 | return | |
754 | ||
755 | net.SendExchangeItemAddPacket(attachedInvenType, SrcSlotNumber, DstSlotNumber) | |
756 | ||
757 | mouseModule.mouseController.DeattachObject() | |
758 | ||
759 | def SelectOwnerItemSlot(self, SlotIndex): | |
760 | ||
761 | if player.ITEM_MONEY == mouseModule.mouseController.GetAttachedItemIndex(): | |
762 | ||
763 | money = mouseModule.mouseController.GetAttachedItemCount() | |
764 | net.SendExchangeElkAddPacket(money) | |
765 | ||
766 | def RefreshOwnerSlot(self): | |
767 | for i in xrange(exchange.EXCHANGE_ITEM_MAX_NUM): | |
768 | itemIndex = exchange.GetItemVnumFromSelf(i) | |
769 | itemCount = exchange.GetItemCountFromSelf(i) | |
770 | if 1 == itemCount: | |
771 | itemCount = 0 | |
772 | self.OwnerSlot.SetItemSlot(i, itemIndex, itemCount) | |
773 | self.OwnerSlot.RefreshSlot() | |
774 | ||
775 | def RefreshTargetSlot(self): | |
776 | for i in xrange(exchange.EXCHANGE_ITEM_MAX_NUM): | |
777 | itemIndex = exchange.GetItemVnumFromTarget(i) | |
778 | itemCount = exchange.GetItemCountFromTarget(i) | |
779 | if 1 == itemCount: | |
780 | itemCount = 0 | |
781 | self.TargetSlot.SetItemSlot(i, itemIndex, itemCount) | |
782 | self.TargetSlot.RefreshSlot() | |
783 | ||
784 | def Refresh(self): | |
785 | ||
786 | self.RefreshOwnerSlot() | |
787 | self.RefreshTargetSlot() | |
788 | ||
789 | self.OwnerMoney.SetText(localeInfo.NumberToMoneyString(exchange.GetElkFromSelf())) | |
790 | self.TargetMoney.SetText(localeInfo.NumberToMoneyString(exchange.GetElkFromTarget())) | |
791 | ||
792 | if True == exchange.GetAcceptFromSelf(): | |
793 | self.OwnerAcceptLight.Down() | |
794 | else: | |
795 | self.AcceptButton.Enable() | |
796 | self.AcceptButton.SetUp() | |
797 | self.OwnerAcceptLight.SetUp() | |
798 | ||
799 | if True == exchange.GetAcceptFromTarget(): | |
800 | self.TargetAcceptLight.Down() | |
801 | else: | |
802 | self.TargetAcceptLight.SetUp() | |
803 | ||
804 | def OverInOwnerItem(self, slotIndex): | |
805 | ||
806 | if 0 != self.tooltipItem: | |
807 | self.tooltipItem.SetExchangeOwnerItem(slotIndex) | |
808 | ||
809 | def OverInTargetItem(self, slotIndex): | |
810 | ||
811 | if 0 != self.tooltipItem: | |
812 | self.tooltipItem.SetExchangeTargetItem(slotIndex) | |
813 | ||
814 | def OverOutItem(self): | |
815 | ||
816 | if 0 != self.tooltipItem: | |
817 | self.tooltipItem.HideToolTip() | |
818 | ||
819 | def OnTop(self): | |
820 | self.tooltipItem.SetTop() | |
821 | ||
822 | def OnUpdate(self): | |
823 | ||
824 | USE_EXCHANGE_LIMIT_RANGE = 1000 | |
825 | ||
826 | (x, y, z) = player.GetMainCharacterPosition() | |
827 | if abs(x - self.xStart) > USE_EXCHANGE_LIMIT_RANGE or abs(y - self.yStart) > USE_EXCHANGE_LIMIT_RANGE: | |
828 | (self.xStart, self.yStart, z) = player.GetMainCharacterPosition() | |
829 | net.SendExchangeExitPacket() | |
830 |