Popular Content

Showing content with the highest reputation since 04/24/2019 in all areas

  1. 22 points
    Hello guys! After job, before sleep here is the latest patch, the v19.2. Have fun Ramadan costumes, hairstyles, pets New minigame "samemonster" gui elements 6th7th attribute gui elements Download locale_de locale_en locale_hu
  2. 10 points Includes: - PSD login - Cuttet PNGs login - Background animation login - PSD ingame - Cuttet PNGs ingame - Animation HP and MP - Skill Icons Code is not included! Download:!cPhWBIrb!J9ydnNNqucGfIe91W7ADvlQOkiwWfvCsLbGrw-VccAI Id love to see this one coded and on an actual server. If you use it please let me see so i can take a look!
  3. 8 points
    There is not much to say here. They are simply boulders for the map. Download:!rhliAQYa!5vxhT2_8ojFseCyIzVdSwEggXWch2ckakzF-pogo5yA Special place:
  4. 7 points
  5. 6 points
    Learning English is too difficult, so I found a Chinese beauty to explain what problems I encountered.@ReFresh
  6. 6 points
    This is the official armor, but deprived of shoulders and a chain around the neck. Only for him. Download:!vxcy3ALD!h0lvpchTvKbk1oPBlfhkOW7ATEXHf-Y0qRp7j8Ggpws
  7. 5 points
    Something I wrote in a hurry. (add it to the end of the lines) def OnKeyDown(self, key): ''' A fast method to login by keyboard shortcuts. ''' # Create a keyboard range enum as tuple from F1 to F4. dikAvailableList = range(0x3B, 0x3E + 1) if not key in dikAvailableList: return try: # Creates a file object, which would be utilized to call other support methods associated with it. # Change old_open method with open if you get error. file = old_open('user//credentials', 'r') try: # Finds the given element in a list and returns its position. account_index = dikAvailableList.index(key) # Reads until EOF using readline() and returns a list containing the lines. account_data = file.readlines().__getitem__(account_index) # Returns a list of all the words in the string, using str as the separator. account_data = account_data.split(':') # Applies a function to all the items in an input list. account_data = map(lambda item: item.rstrip(), account_data) # Decode the password. account_data[-1] = self.decode(self.__ReadSavedPassword(), next(reversed(account_data))) # Connect to the server by using list [id, pw]. self.Connect(*account_data) # Raised when a sequence subscript is out of range. except IndexError: pass # A closed file cannot be read or written any more. file.close() # Raised when an I/O operation fails for an I/O-related reason, e.g., “file not found” or “disk full”. except IOError: return
  8. 5 points
    I do not remember why I did it, but probably for no particular purpose. Maybe it will be useful to someone. Download:!ns8gBA4Z!AYJYX7iKEWlKG5WM4vZ3nb4x78IpZXYK3zmojXL6ks4
  9. 3 points
    Hi devs! The original equipment viewer is not updated for the new equipments I am thinking of costumes + rings + belt Here is the extended version. Images: Here are my modified files to root and uiscript package, the .py files: Pastebin ~ MEGA Pastebin ~ MEGA Pastebin ~ MEGA Ehm yeah this was the easiest part of this, now comin' the serverside and binary parts. Server: 1.) Open gamepacket.h than search for: "typedef struct pakcet_view_equip" and replace all structure with this: typedef struct pakcet_view_equip { BYTE header; DWORD vid; struct { DWORD vnum; BYTE count; long alSockets[ITEM_SOCKET_MAX_NUM]; TPlayerItemAttribute aAttr[ITEM_ATTRIBUTE_MAX_NUM]; } equips[16]; } TPacketViewEquip; PS: lel "pakcet" xD nevermind Save&Close 2.) Open char.cpp and search for this: "void CHARACTER::SendEquipment(LPCHARACTER ch)" and replace the event with this(Thanks ATAG): void CHARACTER::SendEquipment(LPCHARACTER ch) { TPacketViewEquip p; p.header = HEADER_GC_VIEW_EQUIP; p.vid = GetVID(); int pos[16] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 19, 20, 21, 22, 23 }; for (int i = 0; i < 16; i++) { LPITEM item = GetWear(pos[i]); if (item) { p.equips[i].vnum = item->GetVnum(); p.equips[i].count = item->GetCount(); thecore_memcpy(p.equips[i].alSockets, item->GetSockets(), sizeof(p.equips[i].alSockets)); thecore_memcpy(p.equips[i].aAttr, item->GetAttributes(), sizeof(p.equips[i].aAttr)); } else { p.equips[i].vnum = 0; } } ch->GetDesc()->Packet(&p, sizeof(p)); } Serverside done! - Build! Binary: 1.) Open UserInterfacePacket.h than search for this: "typedef struct pakcet_view_equip" and replace with this: typedef struct pakcet_view_equip { BYTE header; DWORD dwVID; TEquipmentItemSet equips[16]; } TPacketGCViewEquip; PS: we met again with pakcet xD, Save&Close. 2.) Open UserInterfacePythonNetworkStreamPhaseGame.cpp than search for this: "bool CPythonNetworkStream::RecvViewEquipPacket()" and replace with this: bool CPythonNetworkStream::RecvViewEquipPacket() { TPacketGCViewEquip kViewEquipPacket; if (!Recv(sizeof(kViewEquipPacket), &kViewEquipPacket)) return false; PyCallClassMemberFunc(m_apoPhaseWnd[PHASE_WINDOW_GAME], "OpenEquipmentDialog", Py_BuildValue("(i)", kViewEquipPacket.dwVID)); for (int i = 0; i < 16; ++i) { TEquipmentItemSet & rItemSet = kViewEquipPacket.equips[i]; PyCallClassMemberFunc(m_apoPhaseWnd[PHASE_WINDOW_GAME], "SetEquipmentDialogItem", Py_BuildValue("(iiii)", kViewEquipPacket.dwVID, i, rItemSet.vnum, rItemSet.count)); for (int j = 0; j < ITEM_SOCKET_SLOT_MAX_NUM; ++j) PyCallClassMemberFunc(m_apoPhaseWnd[PHASE_WINDOW_GAME], "SetEquipmentDialogSocket", Py_BuildValue("(iiii)", kViewEquipPacket.dwVID, i, j, rItemSet.alSockets[j])); for (int k = 0; k < ITEM_ATTRIBUTE_SLOT_MAX_NUM; ++k) PyCallClassMemberFunc(m_apoPhaseWnd[PHASE_WINDOW_GAME], "SetEquipmentDialogAttr", Py_BuildValue("(iiiii)", kViewEquipPacket.dwVID, i, k, rItemSet.aAttr[k].bType, rItemSet.aAttr[k].sValue)); } return true; } Binaryside done! - Build! ---Edit---- Multiple opening bugfix: Open and search for this: "def OpenEquipmentDialog(self, vid):" if you found it replace that function with this: def OpenEquipmentDialog(self, vid): if self.equipmentDialogDict.has_key(vid): self.equipmentDialogDict[vid].Destroy() self.CloseEquipmentDialog(vid) dlg = uiEquipmentDialog.EquipmentDialog() dlg.SetItemToolTip(self.tooltipItem) dlg.SetCloseEvent(ui.__mem_func__(self.CloseEquipmentDialog)) dlg.Open(vid) self.equipmentDialogDict[vid] = dlg Show the "View equip" button on the targetbar: Open and check this diff to fix it for yourself: ( ----EndEdit---- Ohh I almost forgot, here are the bgs ^^-> ui.7z - MEGA All done, press escape to exit... :')
  10. 3 points
    Rules §2 Topics (2.5) Questions & Answers specific rules Don't modify your thread (or reply to it) to mark it solved, and not explain the solution to the issue. Please use our tag system and vote good/bad answers so everyone can clearly see what matters! Best regards Raylee
  11. 3 points
    Revive event for use in quests like when kill, when login... The event is triggered when the player revive. Source: Example of usage: when revive begin chat("Hello metin2dev.") end 
  12. 3 points
    Try to search in source monkey I believe you will find a solution
  13. 3 points
    Dear community, WoM3 is looking for a C++ developer to help taking the project to new heights together with our creative team consisting of 2 game designers, 3 developers, 1 mapper and 2 designers. Knowledge of python and lua will help. We require a minimum B2/C1 level of english, experience in working in teams and collaboration tools such as git is a plus. We offer: full or part time position in a fun and creative work environment and a salary to match your skills. Interested? write to me on
  14. 2 points
    Create a user named core and set it to localhost and give the correct user privileges. God damn its not that hard to fix it. (When you already created core user, take care that password from user table (unhashed) and password from conf.txt from db core are same.)
  15. 2 points
  16. 2 points
    World Editor is the Map Editor for Metin2 and it's probably for download elsewhere in this forum. I don't have time for handholding sorry.
  17. 2 points
    def ResizeToolTip(self): self.SetSize(self.toolTipWidth, self.TOOL_TIP_HEIGHT + self.toolTipHeight) problem is that SetSize() want int arguments. An integer is required.
  18. 2 points
    Metin2 Extended Item Award You can store all bonuses and stones for items. I wrote that as request from @ProfessorEnte, more informations at repository. 2018-04-02 14:02:11 Monday Fixed problem with save bonus after reload items. Fixed problem with unknown values. Correction for socket real time and more. Fixed unknown average/skill damage bonus value. player.item_proto.addon_type = -1 (Eg. 189, 199, 299, 1139, 1179, 2159, 2179, 3169, 3219, 5119, 5129, 6019, 6069, 6079, 7169)[+0 - +9] That's for the items which have addon type (-1) and you added them in item shop without bonuses like skill damage or hit damage, value x, y as default, so they'll will be without bonuses and get bugged. Now when the item will be inserted there'll be a check if item doesn't have those bonuses (from query) add a random average/skill damage bonus value. INSERT INTO player.item_award(`login`, `vnum`, `count`, `mall`) VALUES ('account', 189, 1, 1); 2019-04-12 02:31:18 Friday Fixed unique items based on the real time. Fixed unstackable items. Fixed if item count overflow occured, then set it to maximum. Added support for books. (check skill types, unknown skill), skill vnum need to be saved into socket0, (4=Aura of the Sword < player.skill_proto), if the skill vnum is unknown, there will be a random book based on pc races, excluded skills PASSIVE, GUILD, SUPPORT. Added a to-do for ITEM_BLEND, check if apply_type exists in bonuses, check if apply_value/apply_duration is equal with grades (1/2/3/4/5) from settings, blend.txt Added auto query. # Random book INSERT INTO player.item_award(`login`, `vnum`, `count`, `mall`) VALUES ('account', 50300, 1, 1); # Specific book by skill vnum INSERT INTO player.item_award(`login`, `vnum`, `count`, `socket0`, `mall`) VALUES ('account', 50300, 1, 4, 1); 2019-04-16 14:54:48 Tuesday (Video - Click) Added a check for attr types and values min - max. You can't insert wrong bonuses into a specific item. Eg. Add 2000 MAX_HP on your Sword+9, was possible, now not. Eg. Add +500 INT to your shield, now there's a check for min-max value of player.item_attr Lv.1 - Lv.5 and your 500 INTvalue will be replaced with max value from lvl5 of bonus, like 12 (lv5), that happen with all the bonuses, same thing with the values lower than lvl1, like 5 HP_REGEN on your neck, when the minimum (lv1) is 10, the value will be replaced with 10. If the bonus type can't be added into a specific item, the bonus will be ignored > deleted. (example: critical pct to armor) Refactorized all the code and moved all features into ItemAwardManager.cpp. C++11 or higher is required for checking attributes. # Test unknown types + higher and lower values in game. INSERT INTO `player`.`item_award`(`login`, `vnum`, `count`, `attrtype0`, `attrvalue0`, `attrtype1`, `attrvalue1`, `attrtype2`, `attrvalue2`, `attrtype3`, `attrvalue3`, `attrtype4`, `attrvalue4`, `mall`) VALUES ( 'test', 149, 1, 17, 25, -- ATTBONUS_HUMAN 22, 35, -- ATTBONUS_DEVIL, 32, 175, -- RESIST_BELL 33, -150, -- RESIST_FAN 48, 1, -- IMMUNE_STUN 1 ); # See the min-max values for all the bonuses from weapon. SELECT apply+0 AS `index`, apply AS `name`, lv1 as `min_value`, lv5 as `max_value` FROM `item_attr` WHERE weapon > 0; # See if a specific bonus is included in bonuses of weapon. SELECT apply, apply+0 FROM `item_attr` WHERE weapon > 0 AND apply in ('ATTBONUS_HUMAN', 'ATTBONUS_DEVIL', 'RESIST_BELL', 'RESIST_FAN', 'IMMUNE_STUN'); Sockets & attrs INSERT INTO `player`.`item_award`(`login`, `vnum`, `count`, `given_time`, `why`, `socket0`, `socket1`, `socket2`, `attrtype0`, `attrvalue0`, `attrtype1`, `attrvalue1`, `attrtype2`, `attrvalue2`, `attrtype3`, `attrvalue3`, `attrtype4`, `attrvalue4`, `mall`) VALUES ( 'test', -- ACCOUNT_NAME 12029, -- ITEM_VNUM 1, -- ITEM_COUNT '2018-03-25 05:53:17', -- GIVEN_TIME 'ITEM_SHOP', -- REASON 28442, 28441, 28438, -- SOCKET 1 & 2 & 3 1, 1500, -- APPLY_MAX_HP 29, 10, -- APPLY_RESIST_SWORD, 30, 10, -- APPLY_RESIST_TWOHAND 31, 10, -- APPLY_RESIST_DAGGER 32, 10, -- APPLY_RESIST_BELL 1 -- MALL ); For those who use @martysama0134 source: //@Srcs/Server/db/src/ClientManager.cpp #define ENABLE_ITEMAWARD_REFRESH // Should be enabled Github repository or download - (click here):
  19. 2 points
    This is an archiver I've created, and it looks quite stable so far. The PackMakerLite (PML) supports type0-1-2-3-4-5 (type4-5 only pack, not unpack). As a summarize, the metin2 types are handled like this: Type 0 - only storage (no encryption/compression; it can be read fully from the .epk) Type 1 - compressed - lzo(file) Type 2 - compressed and encrypted - xtea(lzo(file)) Type 3 - encrypted with Panama - you must save an .iv key server-side in the panama/ folder. (content readable only after auth phase) The official used it only for patch2. Type 4 - encrypted with a mix of ciphers (cshybridcrypt) - you must save a .dat key server-side in the package/ folder. (content readable only after auth phase) Practically all the metin2_patch files. Type 5 - like type 4, but a server-side map/<map_name> is also provided. (content readable only after accessing the <map_name> map as a player) The official used it only for the catacomb data. Usage: Its settings (xtea keys, extensions, pack types to use) can be changed inside PackMakerLite.json: You can actually integrate the tool in the menu context (running the .reg files) for packing folders and unpacking .eix files. Remove "--nolog" from the .bat files if you want to see the logs again. Last but not least: since the client handles all the filenames in lowercase, this tools automatically converts them as well.
  20. 2 points
    Ok, there're many guys which want that and wroted me in PM, i'll leave the code here. root/ locale/en/ui/
  21. 2 points
    That's my avatar in the WoM forum cool idea with the ouroboros
  22. 2 points
    Click Select click_glow_select select_glow Enjoy!QaZ20IxL!QJmS_Rh96Pi8aOzmNlecRAR7bxi4ZoGrOZsRwoJICp8
  23. 2 points
    Hello guys Today i'm gonna release new design for wedding costumes i know its not my best but i'm tried with many style but i think white design is good i will share more soon for diffrent design for wedding and more so wait me i hope you like them :) screens banner test Download: Click here if you like it just say thanks if you found any problem just reply me i will try to fix it regards, Dane
  24. 2 points
    That happened to me and is not a render target problem is just a map problem (maybe when rendering). And after so much debug I found a "solution", you can solve it just giving the (0, 0, 0) position to the model instance when you create it. EterLib/CRenderTarget.cpp ->
  25. 2 points
    Buy them you mongrel holy shit, show some respect.