Jump to content


  • Content count

  • Joined

  • Last visited

Everything posted by xP3NG3Rx


    I still don't know why this source is so special. Btw this made my evening: LANG: GERMANY And the kind regards, holy cow.
  2. Hello, This little thing is marks your pet seal into your inventory like the autopotion. This arrives with the v17.5 patch. Open PetSystem.cpp and replace or make it fit for you: void CPetActor::SetSummonItem(LPITEM pItem) { if (NULL == pItem) { LPITEM pSummonItem = ITEM_MANAGER::instance().FindByVID(m_dwSummonItemVID); if (NULL != pSummonItem) pSummonItem->SetSocket(1, FALSE); m_dwSummonItemVID = 0; m_dwSummonItemVnum = 0; return; } pItem->SetSocket(1, TRUE); m_dwSummonItemVID = pItem->GetVID(); m_dwSummonItemVnum = pItem->GetVnum(); } After that open the uiInventory.py and paste this code below the autopotion if-statement in the RefreshBagSlotWindow function. elif itemVnum >= 53001 and itemVnum <= 53256: metinSocket = [player.GetItemMetinSocket(globalSlotNumber, j) for j in xrange(player.METIN_SOCKET_MAX_NUM)]# <!> globalSlotNumber may be different <!> isActivated = 0 != metinSocket[1] if isActivated: self.wndItem.ActivateSlot(i) else: self.wndItem.DeactivateSlot(i)
  3. Hello. The most people here and on every board in this section don't have any clue about programming and they cannot do even nothing with the open source library codes, so here are the cryptlib(5.6.3 and 5.6.5) and libjpeg(9a) libraries what built with vc141 by me on the latest(I think) SDK on Windows10 10.0.16299.0. Sorry for my raw style but this is the truth. https://mega.nz/#!6VBxWIRQ!_lsb7efyt2agFvb3rMqw0DQZBdfyFWw7UlmiBLllRMU https://mega.nz/#!OIBynKrK!BqxqT9OymvnFn0folypyaKBXXt8xohAMG5TX7CtRp3I Aaaand I don't wanna talk about the services, that is another story... Peace.
  4. [MiniFix] PartyRemovePacket

    Hello, Today I'm gonna share with you a little fix from the official server. https://pastebin.com/15aqnrif
  5. Anyone know what the fuk is this shit??
  6. c++ [C++/Python]17.5 Element Image on target

    Of course it isn't problem. But let me to inform you; on the official, they are using a new part value stores the vnum of pendant, and than querying the values from it. int *__cdecl playerGetElementByVID(int a1, int a2) { int *result; // eax int iPendantVnum; // eax signed int iN; // [esp+8h] [ebp-1Ch] char tItemApply; // [esp+Ch] [ebp-18h] char *pPendantItemData; // [esp+14h] [ebp-10h] int iVID; // [esp+18h] [ebp-Ch] _DWORD *pDestInstance; // [esp+1Ch] [ebp-8h] int _dummy; // [esp+20h] [ebp-4h] if ( !PyTuple_GetLong(a2, 0, &iVID) ) return (int *)Py_BadArgument(); _dummy = 0; pDestInstance = (_DWORD *)(*(int (__thiscall **)(signed int, int))(MEMORY[4] + 8))(4, iVID);// CPythonCharacterManager::Instance().GetInstancePtr(iVID); if ( !pDestInstance ) return python27_Py_BuildValue((int)"i", 0); iPendantVnum = CInstanceBase::GetPart(pDestInstance, 6);// New PART_PENDANT to querying the equipped item of the target if ( !CItemManager::GetItemDataPointer(0, iPendantVnum, &pPendantItemData) ) return python27_Py_BuildValue((int)"i", 0); iN = 0; while ( 2 ) { if ( iN >= 3 ) return python27_Py_BuildValue((int)"i", 0); CItemData::GetApply(pPendantItemData, iN, (int)&tItemApply); switch ( tItemApply.bType ) { case 99: // APPLY_ENCHANT_ELECT result = python27_Py_BuildValue((int)"i", 2048); break; case 100: // APPLY_ENCHANT_FIRE result = python27_Py_BuildValue((int)"i", 4096); break; case 101: // APPLY_ENCHANT_ICE result = python27_Py_BuildValue((int)"i", 8192); break; case 102: // APPLY_ENCHANT_WIND result = python27_Py_BuildValue((int)"i", 16384); break; case 103: // APPLY_ENCHANT_EARTH result = python27_Py_BuildValue((int)"i", 32768); break; case 104: // APPLY_ENCHANT_DARK result = python27_Py_BuildValue((int)"i", 65536); break; default: ++iN; continue; } break; } return result; }
  7. c++ [C++/Python]17.5 Element Image on target

    Me neither see the server side codes why . Also the official version is client side only. Anyway thanks.
  8. 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: uiEquipDialog.py Pastebin ~ MEGA UIScriptEquipmentDialog.py Pastebin ~ MEGA UIScriptCostumeEquipmentDialog.py 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 interFaceModule.py 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 uitarget.py and check this diff to fix it for yourself: https://www.diffchecker.com/lqi9xdb7 ( ----EndEdit---- Ohh I almost forgot, here are the bgs ^^-> ui.7z - MEGA All done, press escape to exit... :')
  9. open Decrypt file foxpack [PAY]

    #banrequest #ASAP
  10. c++ Chat history update

    @metin2-factory Just try that code what you paste
  11. c++ Chat history update

    Hello everyone. Here is a little snippet for the chat history. I made this to turn back the "All" state if you turn off every each button.
  12. c++ Chat history update

    Yes, that is only for debug.
  13. c++ [FIX] Yang Gold Bug Negative!

    case POINT_GOLD: { UINT newGold = MINMAX(0, GetGold() + amount, g_llMaxGold);//!!!MaxGold SetGold(newGold); val = GetGold(); } break;
  14. I would never use this ugly type of code It hurts when I'm trying to read it.
  15. open System question.

    I will release the mine if I will have time to write the guide for it >,<
  16. Save Login single slot

    Ahh no, leave the python alone.
  17. open [I PAY] Arial font problem

    Maybe this? self.serverInfo.SetText("sv:HQ:ÑÑÑÇatrix") # This is INTENDED! If you change this horrendous thing, fix the dot bug before # (This solves it for the english alphabet) self.serverInfo.SetText("") (c)Wom@Think(?)
  18. Searching for someone who knows python

    Or explain your problem here, maybe?
  19. v17.5 Beta new packs are here! New dungeon w/ weapons, armors, mobs, sashes. New Halloween minigame gui files, costumes, pet and mount with 2 textures. And so on.. https://mega.nz/#!OUIyVZDD!ype03n5EIuKbBkz0JzSGHCMHPBtjhZbbwUSYxYgt2ew I wasn't update my proto packer yet. I cannot decrypt the mob_proto because of the changed structure. And the item_proto is containing a lot of new informations, new types, subtypes, applytypes and so on. item_proto: https://mega.nz/#!qBwCmKBC!wYp28d456Npdza9xOHZ5_zjFTQRRhNCtj9rxUtSHurE
  20. c++ New Item Type = ITEM_GACHA

    Hi there! Here you can see my all modifications about this codes, what I showed in my video, when you split or stack the same items the opening count will be correct always. <!> Carefully, it could be different name of variables, and different types what you have to fix by yourself <!>
  21. New Metin2 Armor - Official GameForge

    Sometimes the brazilian servers insert the new updates earlier than gayforge.
  22. New Metin2 Armor - Official GameForge

    You can find in this patch.
  23. v17.4 Beta new packs (Nothing special) https://mega.nz/#!uVIjQDoY!kukBR-pFoxQqMzgt7cbVIAmYnTnepcXu6-_op1CDKVI
  24. [C++] DB + NoTXT!

    Hey devs! One word: Works! Follow the steps: 1.) Open "db/src/Main.cpp" file and write this to the top of the file, under to the includes: // NOTXT_STARTUP_BEGIN BOOL g_noTXT = false; // NOTXT_STARTUP_END 2.) Search for this: "int iDisableHotBackup;" and put under this: // NOTXT_STARTUP_BEGIN int iNoTXT; if (CConfig::instance().GetValue("NO_TXT", &iNoTXT)) { if (iNoTXT) { sys_log(0, "CONFIG: NO_TXT"); g_noTXT = true; } } // NOTXT_STARTUP_END 3.) Save&Close. Now open "db/src/ClientManager.h" and replace: bool InitializeMobTable(); bool InitializeItemTable();With: // NOTXT_STARTUP_BEGIN bool InitializeMobTableTXT(); bool InitializeItemTableTXT(); bool InitializeMobTableSQL(); bool InitializeItemTableSQL(); // NOTXT_STARTUP_END 4.) Save&Close. Then open "db/src/ClientManagerBoot.cpp" and put this the top of the file: // NOTXT_STARTUP_BEGIN extern int g_noTXT; // NOTXT_STARTUP_END 5.) Replace this: bool CClientManager::InitializeMobTable()With this: bool CClientManager::InitializeMobTableTXT()And repeat it with ItemProto(::InitializeItemTable) 6.) Search for this: "bool CClientManager::InitializeTables()" and replace this: if (!InitializeMobTable()) { sys_err("InitializeMobTable FAILED"); return false; } if (!MirrorMobTableIntoDB()) { sys_err("MirrorMobTableIntoDB FAILED"); return false; } if (!InitializeItemTable()) { sys_err("InitializeItemTable FAILED"); return false; } if (!MirrorItemTableIntoDB()) { sys_err("MirrorItemTableIntoDB FAILED"); return false; }With this: // NOTXT_STARTUP_BEGIN if (g_noTXT) // item and mob proto { if (!InitializeMobTableSQL()) { sys_err("InitializeMobTableSQL FAILED"); return false; } if (!InitializeItemTableSQL()) { sys_err("InitializeItemTableSQL FAILED"); return false; } } else { if (!InitializeMobTableTXT()) { sys_err("InitializeMobTableTXT FAILED"); return false; } if (!MirrorMobTableIntoDB()) { sys_err("MirrorMobTableIntoDB FAILED"); return false; } if (!InitializeItemTableTXT()) { sys_err("InitializeItemTableTXT FAILED"); return false; } if (!MirrorItemTableIntoDB()) { sys_err("MirrorItemTableIntoDB FAILED"); return false; } } // NOTXT_STARTUP_END7.) And last put these functions into the file: 7+1.) New item_proto_table.sql: DROP TABLE IF EXISTS `item_proto`; CREATE TABLE `item_proto` ( `vnum` int(11) unsigned NOT NULL DEFAULT '0', `vnum_range` int(11) unsigned NOT NULL DEFAULT '0', `name` varbinary(200) NOT NULL DEFAULT 'Noname ', `locale_name` varbinary(24) NOT NULL DEFAULT 'Noname ', `type` tinyint(2) NOT NULL DEFAULT '0', `subtype` tinyint(2) NOT NULL DEFAULT '0', `weight` tinyint(3) DEFAULT '0', `size` tinyint(3) DEFAULT '0', `antiflag` int(11) DEFAULT '0', `flag` int(11) DEFAULT '0', `wearflag` int(11) DEFAULT '0', `immuneflag` set('PARA','CURSE','STUN','SLEEP','SLOW','POISON','TERROR') CHARACTER SET big5 NOT NULL DEFAULT '', `gold` int(11) DEFAULT '0', `shop_buy_price` int(10) unsigned NOT NULL DEFAULT '0', `refined_vnum` int(10) unsigned NOT NULL DEFAULT '0', `refine_set` smallint(11) unsigned NOT NULL DEFAULT '0', `refine_set2` smallint(5) unsigned NOT NULL DEFAULT '0', `magic_pct` tinyint(4) NOT NULL DEFAULT '0', `limittype0` tinyint(4) DEFAULT '0', `limitvalue0` int(11) DEFAULT '0', `limittype1` tinyint(4) DEFAULT '0', `limitvalue1` int(11) DEFAULT '0', `applytype0` tinyint(4) DEFAULT '0', `applyvalue0` int(11) DEFAULT '0', `applytype1` tinyint(4) DEFAULT '0', `applyvalue1` int(11) DEFAULT '0', `applytype2` tinyint(4) DEFAULT '0', `applyvalue2` int(11) DEFAULT '0', `value0` int(11) DEFAULT '0', `value1` int(11) DEFAULT '0', `value2` int(11) DEFAULT '0', `value3` int(11) DEFAULT '0', `value4` int(11) DEFAULT '0', `value5` int(11) DEFAULT '0', `socket0` tinyint(4) DEFAULT '-1', `socket1` tinyint(4) DEFAULT '-1', `socket2` tinyint(4) DEFAULT '-1', `socket3` tinyint(4) DEFAULT '-1', `socket4` tinyint(4) DEFAULT '-1', `socket5` tinyint(4) DEFAULT '-1', `specular` tinyint(4) NOT NULL DEFAULT '0', `socket_pct` tinyint(4) NOT NULL DEFAULT '0', `addon_type` smallint(6) NOT NULL DEFAULT '0', PRIMARY KEY (`vnum`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_bin; But you can modify your item_proto with "Design table" option in navicat, just make the vnum_range column to the second column after the vnum, as you can see in the query. conf.txt: NO_TXT = 1 0: TXT1: SQL Special thanks to: - iMer, Zonni for the snippets ^^ Changelog: - "0" If you find any errors or problems just post a message into this thread. I tested on win. I hope you like it. With regards, P3NG3R.
  25. Hello everyone. It's a good day to share an old code with you. First of all you need to know: I don't help to install it. Don't even take the contact with me about it. The whole code is written by me, and reversed from official binaries. At the beginning do a backup for your files(srcs+pys) and READ CAREFULLY the readme. W/o brain.exe please close this tab, or your browser, thank you for your understanding. Preview: Download.exe Enjoy & #h4v3fun, pngr