-
Posts
855 -
Joined
-
Days Won
402 -
Feedback
100%
Content Type
Forums
Store
Feature Plan
Release Notes
Docs
Events
Everything posted by xP3NG3Rx
-
Hello there! Somebody knows a working solution to reach the brazilian servers? I tried many of proxy servers w/ and w/o Ultrasurf also, but the state of the servers is "..." and I can't log in. Yeah, I want to decrypt it, but I cannot while I can't log in =/ Thank you in advance.
-
I think the problem is the public new character select, I'm thinking of the gf like.
-
There is the problem, your exchangedialog.py hasn't the Owner_Cheque_Value object.
-
[Noob]Instant character respawn
xP3NG3Rx replied to FlorinMarian's topic in Community Support - Questions & Answers
Let me to introduce the Search function. -
Well, the ramadan is here, I am not worrying about the food, because it isn't allowed to eat, so why not? <sarcasm detected> I'm atheist. <edit>
-
This bug is so nice . I didn't know about it. Here is the fixed hanma_boss folder to Nemere: [Hidden Content] The Razador still resists to me >,< yamachun_boss (Razador): [Hidden Content]
- 21 replies
-
- 43
-
-
-
-
-
-
-
OnPressEscapeKeyEvent Problem...
xP3NG3Rx replied to Suky's topic in Community Support - Questions & Answers
It could be a wrong coded python file also. -
Very sucks problem at teleportation
xP3NG3Rx replied to Marggraf's topic in Community Support - Questions & Answers
Change the size of the virtual board also, named by "window". -
Small bug with belt system
xP3NG3Rx replied to Karbust's topic in Community Support - Questions & Answers
The system was written like that, it modify the CoverButton image of the slot and don't reset back to the base. Open your uiInventory.py and search the RefreshSlot function of the BeltInventoryWindow class, and replace it with this: def RefreshSlot(self): getItemVnum=player.GetItemIndex for i in xrange(item.BELT_INVENTORY_SLOT_COUNT): slotNumber = item.BELT_INVENTORY_SLOT_START + i self.wndBeltInventorySlot.SetCoverButton(slotNumber, "d:/ymir work/ui/game/quest/slot_button_01.sub",\ "d:/ymir work/ui/game/quest/slot_button_01.sub",\ "d:/ymir work/ui/game/quest/slot_button_01.sub",\ "d:/ymir work/ui/game/belt_inventory/slot_disabled.tga", False, False) self.wndBeltInventorySlot.SetItemSlot(slotNumber, getItemVnum(slotNumber), player.GetItemCount(slotNumber)) self.wndBeltInventorySlot.SetAlwaysRenderCoverButton(slotNumber, True) if player.IsAvailableBeltInventoryCell(slotNumber): self.wndBeltInventorySlot.EnableCoverButton(slotNumber) else: self.wndBeltInventorySlot.DisableCoverButton(slotNumber) self.wndBeltInventorySlot.RefreshSlot() -
i searching for this armor
xP3NG3Rx replied to kingshero's topic in Paid Support / Searching / Recruiting
There is the file request topic, my god. But here they are: NEW* Mit Icon https://mega.nz/#!CksyRQgI!9xEp3XIYvV0mtHccPLTjj7N2701JSjaCmTAqj2fW-JE NEW* ICON: https://mega.nz/#!uocVQBxC!NUF4lAI3gXC3poK7_-lkE7DDjy5oRs-NoTPP6hPv3p8 From .BR client by Red from another board. -
Bug with command_safebox_money
xP3NG3Rx replied to alejogz's topic in Community Support - Questions & Answers
Exactly. -
Hello Today I want to share with all of you a little thing. All times when you are trying to open your safebox, it's requesting the password, isn't it? But for what? I modified to limit these requests to one input per login. Of course if you warp or change character, you need to retype your password again. But with extra modifications you can do it to store the password until you close the client, but I don't recommend this. So, first go to the uiSafeBox.py file and paste this line into the __init__ method of the PasswordDialog class, with taking care of the tabulators: self.lastPassword = "" This variable will store your last entered password. Then replace the Accept method of the same class with this: (take a look for the syntax, modulename, and true/false!) def OnAccept(self): self.lastPassword = str(self.passwordValue.GetText()) m2net.SendChatPacket(self.sendMessage + self.lastPassword) self.CloseDialog() return True When you accept the password input dialog, the entered password will be saved, if it's correct if it isn't as well. Don't worry about it, it will be reset if you entered wrong password. The next step is that to paste these new functions into the same class. def InitSafeboxPassword(self): self.lastPassword = "" def GetSafeboxPwd(self): return self.lastPassword As you can see, here is a function which will reset the entered password . With this, the file is done. Open interfaceModule.py and serach this line: ## Safebox then paste this function below: def InitSafeboxPassword(self): self.dlgPassword.InitSafeboxPassword() Then replace the AskSafeboxPassword and AskMallPassword functions with these: def AskSafeboxPassword(self): if self.wndSafebox.IsShow(): return if self.dlgPassword.IsShow(): self.dlgPassword.CloseDialog() return self.dlgPassword.SetSendMessage("/safebox_password ") if self.dlgPassword.GetSafeboxPwd() != "": self.dlgPassword.OnAccept() return self.dlgPassword.SetTitle(localeInfo.PASSWORD_TITLE) self.dlgPassword.ShowDialog() def AskMallPassword(self): if self.wndMall.IsShow(): return if self.dlgPassword.IsShow(): self.dlgPassword.CloseDialog() return self.dlgPassword.SetSendMessage("/mall_password ") if self.dlgPassword.GetSafeboxPwd() != "": self.dlgPassword.OnAccept() return self.dlgPassword.SetTitle(localeInfo.MALL_PASSWORD_TITLE) self.dlgPassword.ShowDialog() With these functions, if the last entered password is correct, the storages will open automatically with the last entered password. The file is done. Next, open your game.py and search this function: OnSafeBoxError and extend it with this line: self.interface.InitSafeboxPassword() So, as you can see this is the answer from the server to entered wrong password and this function will reset the last entered password as well . That's all, I hope you like it, and have fun. Edit.: Fix for change password. game/src/input_db.cpp void CInputDB::SafeboxChangePasswordAnswer(LPDESC d, const char* c_pData) { //[...] d->GetCharacter()->ChatPacket(CHAT_TYPE_COMMAND, "safebox_change_passwd %d", p->flag); // to the bottom of the function } client/UserInterface/PythonNetworkStreamCommand.cpp void CPythonNetworkStream::ServerCommand(char * c_szCommand) { // [...] const char * szCmd = TokenVector[0].c_str(); if (!strcmpi(szCmd, "quit")) { // [...] } else if (!strcmpi(szCmd, "BettingMoney")) { // [...] } //Add between the "else if" cases: else if (!strcmpi(szCmd, "safebox_change_passwd")) { if (2 != TokenVector.size()) { TraceError("CPythonNetworkStream::ServerCommand(c_szCommand=%s) - Strange Parameter Count : %d", c_szCommand, TokenVector.size()); return; } const int iFlag = atoi(TokenVector[1].c_str()); PyCallClassMemberFunc(m_apoPhaseWnd[PHASE_WINDOW_GAME], "RecvSafeboxPasswordChangeAnswer", Py_BuildValue("(i)", iFlag)); } else if (!strcmpi(szCmd, "gift")) { // [...] } // [...] } client/root/game.py # below of CommandCloseSafebox function add: def RecvSafeboxPasswordChangeAnswer(self, flag): self.interface.RecvSafeboxPasswordChangeAnswer(flag) client/root/interfaceModule.py # Below of CommandCloseSafebox function add: def RecvSafeboxPasswordChangeAnswer(self, flag): if flag: self.dlgPassword.SetSafeboxPwd(str(self.wndSafebox.dlgChangePassword.GetNewPasswordText())) client/root/uiSafeBox.py # change the OnAccept function of the PasswordDialog class with this: def OnAccept(self): if self.lastPassword == "" and "" != str(self.passwordValue.GetText()): self.lastPassword = str(self.passwordValue.GetText()) net.SendChatPacket(self.sendMessage + self.lastPassword) self.CloseDialog() return True # add this new function to the PasswordDialog class: def SetSafeboxPwd(self, pwd): self.lastPassword=pwd # add this line into the ChangePasswordDialog.__init__ function: self.__newPassword = "" # add this line into the ChangePasswordDialog.Open function: self.__newPassword = "" # add this function to the ChangePasswordDialog class: def GetNewPasswordText(self): return self.__newPassword # add the following line into the ChangePasswordDialog.OnAccept function (between the password check and the SendChatPacket): # return True self.__newPassword = newPasswordText #m2net.SendChatPacket("/safebox_change_password %s %s" % (oldPasswordText, newPasswordText)) Edit: fix of flooding: moving the saving method of the password from the OnAccept function to a separated one and calling it when the Safebox opens, this will be enough I guess. client/root/uiSafeBox.py # add the following function to the PasswordDialog class: def SavePassword(self): if self.lastPassword == "" and "" != str(self.passwordValue.GetText()): self.lastPassword = str(self.passwordValue.GetText()) # make the changes on the function in the PasswordDialog class def OnAccept(self): net.SendChatPacket(self.sendMessage + (self.lastPassword if self.lastPassword != "" else self.passwordValue.GetText())) self.CloseDialog() return True client/root/interfaceModule.py # add the following line into the beginning of the OpenSafeboxWindow and the OpenMallWindow function self.dlgPassword.SavePassword()
- 22 replies
-
- 26
-
-
Bug with command_safebox_money
xP3NG3Rx replied to alejogz's topic in Community Support - Questions & Answers
The code of money store in the safebox isn't complete in the source, by the way yes, that isn't looks good. -
Here is a little fix to disable the double potion sounds (green & purple): UI\PythonItem.cpp -> DWORD CPythonItem::__GetUseSoundType(const CItemData& c_rkItemData) Search the case of the ability_up and replace it with this: case CItemData::USE_ABILITY_UP: { if ((c_rkItemData.GetIndex() == 27053 || c_rkItemData.GetIndex() == 27054) || (c_rkItemData.GetIndex() >= 27100 && c_rkItemData.GetIndex() <= 27105) || (c_rkItemData.GetIndex() >= 27110 && c_rkItemData.GetIndex() <= 27115)) return USESOUND_NONE; else return USESOUND_POTION; } break; This is an exception to block the playusesound when you are using an item from inventory: netSendItemUsePacket -> CPythonNetworkStream::SendItemUsePacket -> __PlayInventoryItemUseSound Because of the SpecificEffectPacket plays the sound of the potions as well.
-
Reducing Waiting Time for Respawn (player)
xP3NG3Rx replied to emre408's topic in Community Support - Questions & Answers
cmd_general.cpp ACMD(do_restart) iTimeToDead is a counter which is counting down from 180 while the deadevent is active == 3*60 --> If it passed the character automaticaly will be restarted to the town. Here: You have to edit the 170 for yourself. This is the restart at the current position, which is 10 secs(180-170), if you want 3 secs only, just change it to 177(180-3). And here is the restart to town: 180-173 = 7 secs, I hope you'll understand. -
uiAffectShower.py PythonCharacterModule.cpp RULES!
-
all mobs color transfer to blue
xP3NG3Rx replied to NeXoN's topic in Community Support - Questions & Answers
You did it wrong. Did you add new column to your mob_proto.txt to the right place? Maybe the columns are mixed in the txt and the dump_proto packs wrong your proto. Read the rules again and keep it in... -
Fix the tabs, make fit to your client and a colon is missing from IsEq line. if not player.IsEquipmentSlot(attachedSlotPos):########################################## m2net.SendSafeboxCheckinPacket(attachedInvenType, attachedSlotPos, selectedSlotPos)
-
[Search Update] ItemProto & MobProto
xP3NG3Rx replied to Rusef's topic in Paid Support / Searching / Recruiting
Easy -
## Slot Event def SelectEmptySlot(self, selectedSlotPos): selectedSlotPos = self.__LocalPosToGlobalPos(selectedSlotPos) if mouseModule.mouseController.isAttached(): attachedSlotType = mouseModule.mouseController.GetAttachedType() attachedSlotPos = mouseModule.mouseController.GetAttachedSlotNumber() if player.SLOT_TYPE_SAFEBOX == attachedSlotType: m2net.SendSafeboxItemMovePacket(attachedSlotPos, selectedSlotPos, 0) #snd.PlaySound("sound/ui/drop.wav") else: attachedInvenType = player.SlotTypeToInvenType(attachedSlotType) if player.RESERVED_WINDOW == attachedInvenType: return if player.ITEM_MONEY == mouseModule.mouseController.GetAttachedItemIndex(): #m2net.SendSafeboxDepositMoneyPacket(mouseModule.mouseController.GetAttachedItemCount()) snd.PlaySound("sound/ui/money.wav") else: if not player.IsEquipmentSlot(attachedSlotPos)########################################## m2net.SendSafeboxCheckinPacket(attachedInvenType, attachedSlotPos, selectedSlotPos) #snd.PlaySound("sound/ui/drop.wav") mouseModule.mouseController.DeattachObject()
-
Hello devs. I think that webzen already fixxed this, because I can't reverse the CSlotWindow::OnMouseOver it may be virtualized ? The problem is that, when you are trying to make conditions for the slot with runtime mouse overin, the slot doesn't handle the overin event until now. Here is a demonstration video to show the fixxed problem. Without this fix the MouseOverIn event was running down if your cursor came to the slotboard which is the board of the slots ? instead of the slot. It's difficult to explain. Before you start to implement it, make safety backup of your files! 1.) Define the new OverIn event into the SlotWindow class in the ui.py file: 2.) Define new functions and a helper variable into the eterPythonLib\PythonSlotWindow.h. 3.) Make fit, and add the new functions into the eterPythonLib\PythonSlotWindow.cpp. Example usage: def LoadObj(self): self.wndItem = self.GetChild("ItemSlot") self.wndItem.SetOverInEvent(ui.__mem_func__(self.OverIn)) self.wndItem.SetOverOutEvent(ui.__mem_func__(self.OverOut)) def OverIn(self, selectedSlotPos): chat.AppendChat(chat.CHAT_TYPE_INFO, "OverIn %d", selectedSlotPos) def OverOut(self): chat.AppendChat(chat.CHAT_TYPE_INFO, "OverOut")
-
official Official Unpacked Updates Metin2 - No Spam
xP3NG3Rx replied to pollux's topic in Guides & HowTo
metin2_patch_user_situation (Mega) (Metin2 Download) metin2.sg eterPacks 2017.04.29. (Mega) (Metin2 Download)- 147 replies
-
- 362
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
SoulBind & Cheque & AdvanceRefine Systems
xP3NG3Rx replied to MrLibya's topic in Features & Metin2 Systems
Bye -
That is just the name of the net module. Easy to handle this problem from the error message if someone doesn't notice. And no need source to change the name of the built-in modules , but yeah need to care of it if someone doesn't renamed it.
-
M2 Download Center Download Here ( Internal ) Hello devs. I don't want to talk a lot about nothing, but I have to say what is this. With this little modification the party and the friend requests are cancelled automatically in seconds what you can change in the Open method. ( pyObj.Open(sec) ) Preview video: Make a backup before you are implementing it! And if you found a bug, please explain it. 0.) Open your uiCommon.py file and import chat module. 1.) Replace the whole QuestionDialogWithTimeLimit class in the uiCommon.py file with this: class QuestionDialogWithTimeLimit(QuestionDialog2): def __init__(self): ui.ScriptWindow.__init__(self) self.__CreateDialog() self.endTime = 0 self.timeOverMsg = 0 self.timeOverEvent = None self.timeOverEventArgs = None def __del__(self): QuestionDialog2.__del__(self) def __CreateDialog(self): pyScrLoader = ui.PythonScriptLoader() pyScrLoader.LoadScriptFile(self, "uiscript/questiondialog2.py") self.board = self.GetChild("board") self.textLine1 = self.GetChild("message1") self.textLine2 = self.GetChild("message2") self.acceptButton = self.GetChild("accept") self.cancelButton = self.GetChild("cancel") def Open(self, timeout): self.SetCenterPosition() self.SetTop() self.Show() self.endTime = app.GetTime() + timeout def SetTimeOverEvent(self, event, *args): self.timeOverEvent = event self.timeOverEventArgs = args def SetTimeOverMsg(self, msg): self.timeOverMsg = msg def OnTimeOver(self): if self.timeOverEvent: apply(self.timeOverEvent, self.timeOverEventArgs) if self.timeOverMsg: chat.AppendChat(chat.CHAT_TYPE_INFO, self.timeOverMsg) def OnUpdate(self): leftTime = max(0, self.endTime - app.GetTime()) self.SetText2(localeInfo.UI_LEFT_TIME % (leftTime)) if leftTime <= 0: self.OnTimeOver() 2.) Open your game.py file and replace each of these three methods to these: def OnMessengerAddFriendQuestion(self, name): messengerAddFriendQuestion = uiCommon.QuestionDialogWithTimeLimit() messengerAddFriendQuestion.SetText1(localeInfo.MESSENGER_DO_YOU_ACCEPT_ADD_FRIEND % (name)) messengerAddFriendQuestion.SetTimeOverMsg(localeInfo.MESSENGER_ADD_FRIEND_ANSWER_TIMEOVER) messengerAddFriendQuestion.SetTimeOverEvent(self.OnDenyAddFriend) messengerAddFriendQuestion.SetAcceptEvent(ui.__mem_func__(self.OnAcceptAddFriend)) messengerAddFriendQuestion.SetCancelEvent(ui.__mem_func__(self.OnDenyAddFriend)) messengerAddFriendQuestion.Open(10) messengerAddFriendQuestion.name = name self.messengerAddFriendQuestion = messengerAddFriendQuestion def RecvPartyInviteQuestion(self, leaderVID, leaderName): partyInviteQuestionDialog = uiCommon.QuestionDialogWithTimeLimit() partyInviteQuestionDialog.SetText1(leaderName + localeInfo.PARTY_DO_YOU_JOIN) partyInviteQuestionDialog.SetTimeOverMsg(localeInfo.PARTY_ANSWER_TIMEOVER) partyInviteQuestionDialog.SetTimeOverEvent(self.AnswerPartyInvite, False) partyInviteQuestionDialog.SetAcceptEvent(lambda arg=True: self.AnswerPartyInvite(arg)) partyInviteQuestionDialog.SetCancelEvent(lambda arg=False: self.AnswerPartyInvite(arg)) partyInviteQuestionDialog.Open(10) partyInviteQuestionDialog.partyLeaderVID = leaderVID self.partyInviteQuestionDialog = partyInviteQuestionDialog def BINARY_OnQuestConfirm(self, msg, timeout, pid): confirmDialog = uiCommon.QuestionDialogWithTimeLimit() confirmDialog.SetText1(msg) confirmDialog.Open(timeout) confirmDialog.SetAcceptEvent(lambda answer=True, pid=pid: m2net.SendQuestConfirmPacket(answer, pid) or self.confirmDialog.Hide()) confirmDialog.SetCancelEvent(lambda answer=False, pid=pid: m2net.SendQuestConfirmPacket(answer, pid) or self.confirmDialog.Hide()) self.confirmDialog = confirmDialog 3.) Open your locale/xy/locale_game.txt and add these if these aren't exists: MESSENGER_ADD_FRIEND_ANSWER_TIMEOVER Friend request was cancelled. PARTY_ANSWER_TIMEOVER Party invite was cancelled. Remove MESSENGER_DO_YOU_ACCEPT_ADD_FRIEND_2 line and change MESSENGER_DO_YOU_ACCEPT_ADD_FRIEND_1 with this: MESSENGER_DO_YOU_ACCEPT_ADD_FRIEND %s added you as a friend, accept? At last take a look at your files and correct the net module calls and the True-False syntax. net <--> m2net, True <--> TRUE
- 13 replies
-
- 54
-
-
-
-
