Jump to content
  • Create New...


  • Posts

  • Joined

  • Last visited

  • Days Won


Karbust last won the day on May 30

Karbust had the most liked content!

About Karbust


  • Nationality
  • Country
  • Gender

Social Networks

Recent Profile Visitors

The recent visitors block is disabled and is not being shown to other users.

Karbust's Achievements

  1. Well, actually didn't try that option, tried others and none worked so, made a new one. I though the SelectItem only worked with items in the inventory/safebox/etc., based on the code I saw, so I didn't even test it. Thanks for your input as always
  2. Sup bois I needed a way to get the value3 on hair costumes to be used on render target: But, I needed to get the value3 with the change look system, for which there wasn't a function already. Open UserInterface -> PythonItemModule.cpp, and after: PyObject* itemLoadItemTable(PyObject* poSelf, PyObject* poArgs) Add: PyObject* itemGetValueByVnum(PyObject* poSelf, PyObject* poArgs) { int iValueIndex; if (!PyTuple_GetInteger(poArgs, 0, &iValueIndex)) return Py_BadArgument(); int iVnum; if (!PyTuple_GetInteger(poArgs, 1, &iVnum)) return Py_BadArgument(); CItemData* pItemData; CItemManager::Instance().GetItemDataPointer(iVnum, &pItemData); if (!pItemData) return Py_BuildException("Not yet select item data"); return Py_BuildValue("i", pItemData->GetValue(iValueIndex)); } Then, after: { "LoadItemTable", itemLoadItemTable, METH_VARARGS }, Add: { "GetValueByVnum", itemGetValueByVnum, METH_VARARGS }, How to use it? On uitooltip.py elif itemSubType == item.COSTUME_TYPE_HAIR: #Hair if self.__ItemGetRace() == player.GetRace(): itemVnum_prv = itemVnum if app.ENABLE_CHANGE_LOOK_SYSTEM and getChangelookVnum: itemVnum_prv = getChangelookVnum self.__ModelPreview(item.GetValueByVnum(3, itemVnum_prv), 1, player.GetRace()) else: self.__ModelPreview(item.GetValue(3), 1, player.GetRace()) Result:
  3. You can find in that topic all the updates from metin2 official. It also includes the protos.
  4. Use like this: PUBLIC_IP: internal ip PROXY_IP: external ip Like I said, I use this both on cloud (AWS) and localhost, when I want friends to join. About the mysql, check the logs (/var/db/mysql) for errors.
  5. Ignore my define, I usually disable it on localhost, unless I have friends joining in. void DESC::SendLoginSuccessPacket() { TAccountTable & rTable = GetAccountTable(); TPacketGCLoginSuccess p; p.bHeader = HEADER_GC_LOGIN_SUCCESS_NEWSLOT; p.handle = GetHandle(); p.random_key = DESC_MANAGER::instance().MakeRandomKey(GetHandle()); // FOR MARK thecore_memcpy(p.players, rTable.players, sizeof(rTable.players)); for (int i = 0; i < PLAYER_PER_ACCOUNT; ++i) { #ifdef ENABLE_PROXY_IP if (!g_stProxyIP.empty()) rTable.players[i].lAddr=inet_addr(g_stProxyIP.c_str()); #endif CGuild* g = CGuildManager::instance().GetLinkedGuild(rTable.players[i].dwID); if (g) { p.guild_id[i] = g->GetID(); strlcpy(p.guild_name[i], g->GetName(), sizeof(p.guild_name[i])); } else { p.guild_id[i] = 0; p.guild_name[i][0] = '\0'; } } Packet(&p, sizeof(TPacketGCLoginSuccess)); }
  6. On Google cloud and AWS, you need to use this: [Hidden Content]
  7. I already have it like this: def OnKeyDown(self, key): if self.interface.wndWeb and self.interface.wndWeb.IsShow(): return if key == app.DIK_ESC: self.RequestDropItem(FALSE) constInfo.SET_ITEM_DROP_QUESTION_DIALOG_STATUS(0) try: self.onPressKeyDict[key]() except KeyError: pass except: raise return TRUE It happens with ESC and clicking Cancel... EDIT: Solved. Thanks @PACI On game.py, on RequestDropItem function, at the end was SET_ITEM_DROP_QUESTION_DIALOG_STATUS, but on uidragonsoul.py it was checking for GET_ITEM_QUESTION_DIALOG_STATUS...
  8. Yes I added dbg on the RequestDropItem function def RequestDropItem(self, answer): dbg.LogBox("Got here") if not self.itemDropQuestionDialog: dbg.LogBox("Got here 2") return if answer: dropType = self.itemDropQuestionDialog.dropType dropCount = self.itemDropQuestionDialog.dropCount dropNumber = self.itemDropQuestionDialog.dropNumber if player.SLOT_TYPE_INVENTORY == dropType or\ (player.SLOT_TYPE_SKILL_BOOK_INVENTORY == dropType or\ player.SLOT_TYPE_UPGRADE_ITEMS_INVENTORY == dropType or\ player.SLOT_TYPE_STONE_INVENTORY == dropType or\ player.SLOT_TYPE_GIFT_BOX_INVENTORY == dropType or\ player.SLOT_TYPE_CHANGERS_INVENTORY == dropType and app.ENABLE_SPECIAL_INVENTORY_SYSTEM): if dropNumber == player.ITEM_MONEY: net.SendGoldDropPacketNew(dropCount) snd.PlaySound("sound/ui/money.wav") else: # PRIVATESHOP_DISABLE_ITEM_DROP self.__SendDropItemPacket(dropNumber, dropCount) # END_OF_PRIVATESHOP_DISABLE_ITEM_DROP elif player.SLOT_TYPE_DRAGON_SOUL_INVENTORY == dropType: # PRIVATESHOP_DISABLE_ITEM_DROP self.__SendDropItemPacket(dropNumber, dropCount, player.DRAGON_SOUL_INVENTORY) # END_OF_PRIVATESHOP_DISABLE_ITEM_DROP self.itemDropQuestionDialog.Close() self.itemDropQuestionDialog = None dbg.LogBox("Got here 3") constInfo.SET_ITEM_DROP_QUESTION_DIALOG_STATUS(0) It's reaching "Got here" and "Got here 3"
  9. Hello Any idea on how to solve this bug? In case the video isn't enough, after I try to drop a dragon soul gem, I can't do anything else on the window until I close and re-open the client.
  10. M2 Download Center The Enigma Protector v6.80 x86.rar ( Internal ) The Enigma Protector v6.80 x64.rar ( Internal ) Hello Here you go, The Enigma Protector 6.80 with x64 and x86 already cracked. x64: x86:
  11. Those are git changes, not sure what website "reverses" them. You can easily apply the changes by hand. Where you find a "-" it's the line that got removed/edit. Where you find a "+" it's the new line.
  12. Actually, I did not, but from the calculations I just did, that string is well bellow the 512 max size, and that function works fine (when the db doesn't crash while loading another character). But thank you anyway.
  13. Well, I don't know what to tell you. I've search all "socket" occurrences on db and I can't find any problem...
  14. GetItemCache already returns NULL in case it doesn't find the item... CItemCache * CClientManager::GetItemCache(DWORD id) { TItemCacheMap::iterator it = m_map_itemCache.find(id); if (it == m_map_itemCache.end()) return NULL; return it->second; } In here: CItemCache * c; if (!pNew) return; c = GetItemCache(pNew->id); // 아이템 새로 생성 if (!c) { if (g_log) sys_log(0, "ITEM_CACHE: PutItemCache ==> New CItemCache id%d vnum%d new owner%d", pNew->id, pNew->vnum, pNew->owner); c = new CItemCache; m_map_itemCache.insert(TItemCacheMap::value_type(pNew->id, c)); } Declares "c", then if GetItemCache doesn't return an object of type CItemCache, it will return a NULL value, then it's the if... Doing "!c" or "c == NULL" it's the same thing. The problem is why the "new CItemCache" crashes the db, and only when the 6 slots are enabled, otherwise it runs without any problem...

Important Information

Terms of Use / Privacy Policy / Guidelines / We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.