RonnieBreathe 0 Posted August 8, 2017 Share Posted August 8, 2017 Hello M2Dev! I got a new problem, this time it's something... very confusing. When i want to trade with someone, and put in 9.999.999Yang/gold however you wanna call it, the person who receives it, get the amout. BUT the person who offers the amount, got like 200.000.000 removed. Its very strange, and i can't figure out, where is the problem. I got long long MAX_YANG and the python part is on maxlenght(20) for the ifdef: new_exchange_window May you can find some details. Thanks for helping! Link to comment Share on other sites More sharing options...
Anyone 15 Posted August 8, 2017 Share Posted August 8, 2017 Post your uiexchange.py Link to comment Share on other sites More sharing options...
Premium North 1171 Posted August 8, 2017 Premium Share Posted August 8, 2017 1 hour ago, Anyone said: Post your uiexchange.py Like its a python problem... Link to comment Share on other sites More sharing options...
Anyone 15 Posted August 8, 2017 Share Posted August 8, 2017 Yes because if you do wrong conversion in python-part when you send packet you send it wrong Link to comment Share on other sites More sharing options...
RonnieBreathe 0 Posted August 8, 2017 Author Share Posted August 8, 2017 Thanks for trying to help; Uiexchange: Spoiler import ui import app import net import grp import chat import item import time import constInfo import wndMgr import player import uiCommon import exchange import localeInfo import mouseModule import uiPickMoney import playerSettingModule class ExchangeDialog(ui.ScriptWindow): FACE_IMAGE_DICT = { playerSettingModule.RACE_WARRIOR_M : "icon/face/warrior_m.tga", playerSettingModule.RACE_WARRIOR_W : "icon/face/warrior_w.tga", playerSettingModule.RACE_ASSASSIN_M : "icon/face/assassin_m.tga", playerSettingModule.RACE_ASSASSIN_W : "icon/face/assassin_w.tga", playerSettingModule.RACE_SURA_M : "icon/face/sura_m.tga", playerSettingModule.RACE_SURA_W : "icon/face/sura_w.tga", playerSettingModule.RACE_SHAMAN_M : "icon/face/shaman_m.tga", playerSettingModule.RACE_SHAMAN_W : "icon/face/shaman_w.tga", } def __init__(self): ui.ScriptWindow.__init__(self) self.TitleName = 0 self.tooltipItem = 0 self.xStart = 0 self.yStart = 0 def __del__(self): ui.ScriptWindow.__del__(self) class Item(ui.ListBoxEx.Item): def __init__(self,parent, text, value=0): ui.ListBoxEx.Item.__init__(self) self.textBox=ui.TextLine() self.textBox.SetParent(self) self.textBox.SetText(text) self.textBox.Show() self.value = value def GetValue(self): return self.value def __del__(self): ui.ListBoxEx.Item.__del__(self) def LoadDialog(self): PythonScriptLoader = ui.PythonScriptLoader() if app.ENABLE_NEW_EXCHANGE_WINDOW: PythonScriptLoader.LoadScriptFile(self, "UIScript/exchangedialog_new.py") else: PythonScriptLoader.LoadScriptFile(self, "UIScript/exchangedialog.py") self.OwnerSlot = self.GetChild("Owner_Slot") self.OwnerSlot.SetSelectEmptySlotEvent(ui.__mem_func__(self.SelectOwnerEmptySlot)) self.OwnerSlot.SetSelectItemSlotEvent(ui.__mem_func__(self.SelectOwnerItemSlot)) self.OwnerSlot.SetOverInItemEvent(ui.__mem_func__(self.OverInOwnerItem)) self.OwnerSlot.SetOverOutItemEvent(ui.__mem_func__(self.OverOutItem)) self.OwnerMoney = self.GetChild("Owner_Money_Value") if not app.ENABLE_NEW_EXCHANGE_WINDOW: self.OwnerAcceptLight = self.GetChild("Owner_Accept_Light") self.OwnerAcceptLight.Disable() self.OwnerMoneyButton = self.GetChild("Owner_Money") self.OwnerMoneyButton.SetEvent(ui.__mem_func__(self.OpenPickMoneyDialog)) self.TargetSlot = self.GetChild("Target_Slot") self.TargetSlot.SetOverInItemEvent(ui.__mem_func__(self.OverInTargetItem)) self.TargetSlot.SetOverOutItemEvent(ui.__mem_func__(self.OverOutItem)) self.TargetMoney = self.GetChild("Target_Money_Value") if not app.ENABLE_NEW_EXCHANGE_WINDOW: self.TargetAcceptLight = self.GetChild("Target_Accept_Light") self.TargetAcceptLight.Disable() dlgPickMoney = uiPickMoney.PickMoneyDialog() dlgPickMoney.LoadDialog() dlgPickMoney.SetAcceptEvent(ui.__mem_func__(self.OnPickMoney)) dlgPickMoney.SetTitleName(localeInfo.EXCHANGE_MONEY) if not app.ENABLE_NEW_EXCHANGE_WINDOW: dlgPickMoney.SetMax(6) else: dlgPickMoney.SetMax(20) dlgPickMoney.Hide() self.dlgPickMoney = dlgPickMoney self.AcceptButton = self.GetChild("Owner_Accept_Button") self.AcceptButton.SetToggleDownEvent(ui.__mem_func__(self.AcceptExchange)) if app.ENABLE_NEW_EXCHANGE_WINDOW: self.TargetAcceptButton = self.GetChild("Target_Accept_Button") self.TitleName = self.GetChild("TitleName") self.GetChild("TitleBar").SetCloseEvent(net.SendExchangeExitPacket) if app.ENABLE_NEW_EXCHANGE_WINDOW: self.FaceOwnerImage = self.GetChild("FaceOwner_Image") self.FaceTargetImage = self.GetChild("FaceTarget_Image") self.TargetName = self.GetChild("target_NameText") self.TargetLevel = self.GetChild("target_LvText") self.ExchangeLogs = self.GetChild("ExchangeLogs") self.LogsScrollBar = ui.ThinScrollBar() self.LogsScrollBar.SetParent(self.ExchangeLogs) self.LogsScrollBar.SetPosition(442 - 75, 17) self.LogsScrollBar.SetScrollBarSize(50) self.LogsScrollBar.Show() self.LogsDropList = ui.ListBoxEx() self.LogsDropList.SetParent(self.ExchangeLogs) self.LogsDropList.itemHeight = 12 self.LogsDropList.itemStep = 13 self.LogsDropList.SetPosition(35, 27) self.LogsDropList.SetSize(0, 45) self.LogsDropList.SetScrollBar(self.LogsScrollBar) self.LogsDropList.SetViewItemCount(2) self.LogsDropList.Show() self.LogsScrollBar.Show() self.listOwnerSlot = [] self.listTargetSlot = [] def Destroy(self): print "---------------------------------------------------------------------------- DESTROY EXCHANGE" self.ClearDictionary() self.dlgPickMoney.Destroy() self.dlgPickMoney = 0 self.OwnerSlot = 0 self.OwnerMoney = 0 if not app.ENABLE_NEW_EXCHANGE_WINDOW: self.OwnerAcceptLight = 0 self.OwnerMoneyButton = 0 self.TargetSlot = 0 self.TargetMoney = 0 if not app.ENABLE_NEW_EXCHANGE_WINDOW: self.TargetAcceptLight = 0 self.TitleName = 0 self.AcceptButton = 0 if app.ENABLE_NEW_EXCHANGE_WINDOW: self.TargetAcceptButton = 0 self.FaceOwnerImage = None self.FaceTargetImage = None self.TargetName = None self.TargetLevel = None self.ExchangesLogsWindow = None self.LogsDropList.RemoveAllItems() self.LogsScrollBar = None self.LogsDropList = None self.tooltipItem = 0 def OpenDialog(self): if constInfo.GUILDSTORAGE["open"] == 1: chat.AppendChat(chat.CHAT_TYPE_INFO, "Du kannst nicht handeln, solange das Gildenlager offen ist.") net.SendExchangeExitPacket() self.TitleName.SetText(localeInfo.EXCHANGE_TITLE_LEVEL % (exchange.GetNameFromTarget(), exchange.GetLevelFromTarget())) self.AcceptButton.Enable() self.AcceptButton.SetUp() if app.ENABLE_NEW_EXCHANGE_WINDOW: self.TargetAcceptButton.Disable() self.TargetAcceptButton.SetUp() self.FaceOwnerImage.LoadImage(self.FACE_IMAGE_DICT[exchange.GetRaceFromSelf()]) self.FaceTargetImage.LoadImage(self.FACE_IMAGE_DICT[exchange.GetRaceFromTarget()]) self.TargetName.SetText(exchange.GetNameFromTarget()) self.TargetLevel.SetText(localeInfo.NEW_EXCHANGE_LEVEL % (exchange.GetLevelFromTarget())) self.LogsDropList.RemoveAllItems() self.LogsDropList.AppendItem(self.Item(self, localeInfo.NEW_EXCHANGE_YOU_READY % (str(time.strftime("[%H:%M:%S]"))), 0)) self.Show() (self.xStart, self.yStart, z) = player.GetMainCharacterPosition() def CloseDialog(self): wndMgr.OnceIgnoreMouseLeftButtonUpEvent() if 0 != self.tooltipItem: self.tooltipItem.HideToolTip() self.dlgPickMoney.Close() self.Hide() def SetItemToolTip(self, tooltipItem): self.tooltipItem = tooltipItem def OpenPickMoneyDialog(self): if exchange.GetElkFromSelf() > 0: chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.EXCHANGE_CANT_EDIT_MONEY) return self.dlgPickMoney.Open(player.GetElk()) def OnPickMoney(self, money): net.SendExchangeElkAddPacket(money) def AcceptExchange(self): if app.ENABLE_NEW_EXCHANGE_WINDOW: atLeastOneItem = 0 atLeastOneYang = 0 for i in xrange(exchange.EXCHANGE_ITEM_MAX_NUM): itemCount = exchange.GetItemCountFromTarget(i) if itemCount >= 1: atLeastOneYang = 1 break if exchange.GetElkFromTarget() >= 1: atLeastOneYang = 1 if atLeastOneItem or atLeastOneYang: net.SendExchangeAcceptPacket() self.AcceptButton.Disable() else: atLeastOneItem = 0 atLeastOneYang = 0 for i in xrange(exchange.EXCHANGE_ITEM_MAX_NUM): itemCount = exchange.GetItemCountFromSelf(i) if itemCount >= 1: atLeastOneYang = 1 break if exchange.GetElkFromSelf() >= 1: atLeastOneYang = 1 if atLeastOneItem or atLeastOneYang: self.questionDialog = uiCommon.QuestionDialog2() self.questionDialog.SetText1(localeInfo.NEW_EXCHANGE_ALERT1) self.questionDialog.SetText2(localeInfo.NEW_EXCHANGE_ALERT2) self.questionDialog.SetAcceptEvent(ui.__mem_func__(self.AcceptQuestion)) self.questionDialog.SetCancelEvent(ui.__mem_func__(self.OnCloseQuestionDialog)) self.questionDialog.Open() else: net.SendExchangeAcceptPacket() self.AcceptButton.Disable() else: net.SendExchangeAcceptPacket() self.AcceptButton.Disable() if app.ENABLE_NEW_EXCHANGE_WINDOW: def AcceptQuestion(self): net.SendExchangeAcceptPacket() self.AcceptButton.Disable() if self.questionDialog: self.questionDialog.Close() self.questionDialog = None def OnCloseQuestionDialog(self): if self.questionDialog: self.questionDialog.Close() self.questionDialog = None self.AcceptButton.Enable() self.AcceptButton.SetUp() def SelectOwnerEmptySlot(self, SlotIndex): if False == mouseModule.mouseController.isAttached(): return if mouseModule.mouseController.IsAttachedMoney(): net.SendExchangeElkAddPacket(str(mouseModule.mouseController.GetAttachedMoneyAmount())) else: attachedSlotType = mouseModule.mouseController.GetAttachedType() if (player.SLOT_TYPE_INVENTORY == attachedSlotType or player.SLOT_TYPE_DRAGON_SOUL_INVENTORY == attachedSlotType): attachedInvenType = player.SlotTypeToInvenType(attachedSlotType) SrcSlotNumber = mouseModule.mouseController.GetAttachedSlotNumber() DstSlotNumber = SlotIndex itemID = player.GetItemIndex(attachedInvenType, SrcSlotNumber) item.SelectItem(itemID) if item.IsAntiFlag(item.ANTIFLAG_GIVE): chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.EXCHANGE_CANNOT_GIVE) mouseModule.mouseController.DeattachObject() return net.SendExchangeItemAddPacket(attachedInvenType, SrcSlotNumber, DstSlotNumber) mouseModule.mouseController.DeattachObject() def SelectOwnerItemSlot(self, SlotIndex): if player.ITEM_MONEY == mouseModule.mouseController.GetAttachedItemIndex(): money = mouseModule.mouseController.GetAttachedItemCount() net.SendExchangeElkAddPacket(str(money)) def RefreshOwnerSlot(self): for i in xrange(exchange.EXCHANGE_ITEM_MAX_NUM): itemIndex = exchange.GetItemVnumFromSelf(i) itemCount = exchange.GetItemCountFromSelf(i) if 1 == itemCount: itemCount = 0 self.OwnerSlot.SetItemSlot(i, itemIndex, itemCount) self.OwnerSlot.RefreshSlot() def RefreshTargetSlot(self): for i in xrange(exchange.EXCHANGE_ITEM_MAX_NUM): itemIndex = exchange.GetItemVnumFromTarget(i) itemCount = exchange.GetItemCountFromTarget(i) if 1 == itemCount: itemCount = 0 self.TargetSlot.SetItemSlot(i, itemIndex, itemCount) self.TargetSlot.RefreshSlot() def Refresh(self): self.RefreshOwnerSlot() self.RefreshTargetSlot() self.OwnerMoney.SetText(localeInfo.NumberToMoneyString(exchange.GetElkFromSelf())) self.TargetMoney.SetText(localeInfo.NumberToMoneyString(exchange.GetElkFromTarget())) if exchange.GetAcceptFromSelf() == True: if not app.ENABLE_NEW_EXCHANGE_WINDOW: self.OwnerAcceptLight.Down() else: self.OwnerSlot.SetSlotBaseImage("d:/ymir work/ui/public/slot_base.sub", 0.3500, 0.8500, 0.3500, 1.0) self.LogsDropList.AppendItem(self.Item(self, localeInfo.NEW_EXCHANGE_YOU_ACCEPT % (str((time.strftime("[%H:%M:%S]")))), 0)) else: if self.AcceptButton.IsDown() == True: self.LogsDropList.AppendItem(self.Item(self, localeInfo.NEW_EXCHANGE_YOU_ABORT % (str((time.strftime("[%H:%M:%S]")))), 0)) self.AcceptButton.Enable() self.AcceptButton.SetUp() if not app.ENABLE_NEW_EXCHANGE_WINDOW: self.OwnerAcceptLight.SetUp() else: self.OwnerSlot.SetSlotBaseImage("d:/ymir work/ui/public/slot_base.sub", 1.0, 1.0, 1.0, 1.0) if exchange.GetAcceptFromTarget() == True: if not app.ENABLE_NEW_EXCHANGE_WINDOW: self.TargetAcceptLight.Down() else: self.TargetAcceptButton.Down() self.TargetSlot.SetSlotBaseImage("d:/ymir work/ui/public/slot_base.sub", 0.3500, 0.8500, 0.3500, 1.0) self.LogsDropList.AppendItem(self.Item(self, localeInfo.NEW_EXCHANGE_ACCEPT % (str((time.strftime("[%H:%M:%S]"))), exchange.GetNameFromTarget()), 0)) else: if not app.ENABLE_NEW_EXCHANGE_WINDOW: self.TargetAcceptLight.SetUp() else: if self.TargetAcceptButton.IsDown() == True: self.LogsDropList.AppendItem(self.Item(self, localeInfo.NEW_EXCHANGE_ABORT % (str((time.strftime("[%H:%M:%S]"))), exchange.GetNameFromTarget()), 0)) self.TargetAcceptButton.SetUp() self.TargetSlot.SetSlotBaseImage("d:/ymir work/ui/public/slot_base.sub", 1.0, 1.0, 1.0, 1.0) def OverInOwnerItem(self, slotIndex): if 0 != self.tooltipItem: self.tooltipItem.SetExchangeOwnerItem(slotIndex) def OverInTargetItem(self, slotIndex): if 0 != self.tooltipItem: self.tooltipItem.SetExchangeTargetItem(slotIndex) def OverOutItem(self): if 0 != self.tooltipItem: self.tooltipItem.HideToolTip() def OnTop(self): self.tooltipItem.SetTop() def OnUpdate(self): if constInfo.GUILDSTORAGE["open"] == 1: chat.AppendChat(chat.CHAT_TYPE_INFO, "Du kannst nicht handeln, solange das Gildenlager offen ist.") net.SendExchangeExitPacket() self.CloseDialog() USE_EXCHANGE_LIMIT_RANGE = 1000 (x, y, z) = player.GetMainCharacterPosition() if abs(x - self.xStart) > USE_EXCHANGE_LIMIT_RANGE or abs(y - self.yStart) > USE_EXCHANGE_LIMIT_RANGE: (self.xStart, self.yStart, z) = player.GetMainCharacterPosition() net.SendExchangeExitPacket() Link to comment Share on other sites More sharing options...
Anyone 15 Posted August 8, 2017 Share Posted August 8, 2017 Edit this net.SendExchangeElkAddPacket(str(money)) with net.SendExchangeElkAddPacket(money) 1 Link to comment Share on other sites More sharing options...
RonnieBreathe 0 Posted August 8, 2017 Author Share Posted August 8, 2017 vor 13 Minuten schrieb Anyone: Edit this net.SendExchangeElkAddPacket(str(money)) with net.SendExchangeElkAddPacket(money) Its already on this in Pick gold: def OnPickMoney(self, money): net.SendExchangeElkAddPacket(money) Link to comment Share on other sites More sharing options...
Anyone 15 Posted August 8, 2017 Share Posted August 8, 2017 Yes change with my edit and tell me if it works. 1 Link to comment Share on other sites More sharing options...
RonnieBreathe 0 Posted August 8, 2017 Author Share Posted August 8, 2017 vor 7 Minuten schrieb Anyone: Yes change with my edit and tell me if it works. Sorry, it didnt change at all :/ oh yeah i figured out: 500.001 yang is the amount, that gets doubled Link to comment Share on other sites More sharing options...
Anyone 15 Posted August 8, 2017 Share Posted August 8, 2017 I don't understand what happen. How many yang you put in the exchange and how much money it send/remove? 1 Link to comment Share on other sites More sharing options...
RonnieBreathe 0 Posted August 8, 2017 Author Share Posted August 8, 2017 Im sorry i'm not english, but i try to explain everything detailed Player1 types 500.001 yang in the inputbox, accepts. Player2 receives 500.001yang, but Player1 loses 1.000.002yang. So it seems like it doubles up on this amout. I searched in exchange.cpp and found one string, maybe thats why: Spoiler if (m_lGold) { for (int i = 1; i < m_lGold+1; i=i+500000) //GetOwner()->CreateFly(4,victim); // 1 Fly pro 500k . dh max 20 auf einmal (TradeLimit: 10kkk GetOwner()->PointChange(POINT_GOLD, -m_lGold, true); victim->PointChange(POINT_GOLD, m_lGold, true); So i got long long gold trade, may it should be this?: for (long long i = 1; i < m_lGold+1; i=i+500000) Link to comment Share on other sites More sharing options...
Honorable Member Distraught 5889 Posted August 8, 2017 Honorable Member Share Posted August 8, 2017 if (m_lGold) { GetOwner()->PointChange(POINT_GOLD, -m_lGold, true); victim->PointChange(POINT_GOLD, m_lGold, true); if (m_lGold > 1000) { char exchange_buf[51]; snprintf(exchange_buf, sizeof(exchange_buf), "%u %s", GetOwner()->GetPlayerID(), GetOwner()->GetName()); LogManager::instance().CharLog(victim, m_lGold, "EXCHANGE_GOLD_TAKE", exchange_buf); snprintf(exchange_buf, sizeof(exchange_buf), "%u %s", victim->GetPlayerID(), victim->GetName()); LogManager::instance().CharLog(GetOwner(), m_lGold, "EXCHANGE_GOLD_GIVE", exchange_buf); } } this part should be like this, what you quoted is just creating the fly effect (but it's commented out) at exchanging gold could you paste your whole exchange.cpp here? 1 Link to comment Share on other sites More sharing options...
Anyone 15 Posted August 8, 2017 Share Posted August 8, 2017 Paste here exchange.cpp (pastebin.com) 1 Link to comment Share on other sites More sharing options...
RonnieBreathe 0 Posted August 8, 2017 Author Share Posted August 8, 2017 https://pastebin.com/hvAVguvy Link to comment Share on other sites More sharing options...
Honorable Member Distraught 5889 Posted August 8, 2017 Honorable Member Share Posted August 8, 2017 hmm you were right, because you commented out the fly effect, the compiler thinks the next line is what goes under the for comment out this part like this // for (int i = 1; i < m_lGold+1; i=i+500000) 1 Link to comment Share on other sites More sharing options...
RonnieBreathe 0 Posted August 8, 2017 Author Share Posted August 8, 2017 vor 2 Minuten schrieb Distraught: hmm you were right, because you commented out the fly effect, the compiler thinks the next line is what goes under the for I think comment out this part like this // for (int i = 1; i < m_lGold+1; i=i+500000) Thanks for helping! I will try it, when my compiler will start - i got an online compiler and the host is currently offline I will update this, if it works, thousand thanks! Link to comment Share on other sites More sharing options...
RonnieBreathe 0 Posted August 8, 2017 Author Share Posted August 8, 2017 Sorry for double-post, but the solution from @Distraught worked! Thank you very much! Link to comment Share on other sites More sharing options...
Recommended Posts
Please sign in to comment
You will be able to leave a comment after signing in
Sign In Now