-
Posts
1161 -
Joined
-
Days Won
10 -
Feedback
100%
Content Type
Forums
Store
Third Party - Providers Directory
Feature Plan
Release Notes
Docs
Events
Everything posted by Karbust
-
I already have it, it works with weapons and armors, but not every mount, like I showed on the video...
-
Hey, did you manage to fix the effects? It is working but not on everything, somehow some mounts don't get the effect:
-
You could also probably try using JetBrains's CLion with Qt, or only Qt (C++). CLion CMake's projects are also detected by Windows Defender, but the final executable isn't. For C#, you could try JetBrains's Rider. It doesn't require Visual Studio installed, only .NET.
-
After all, it's getting detected. I haven't used this patcher in almost 2 years. I made a fresh compilation just in case. [Hidden Content] I'm currently using the patcher I made in Electron, it isn't being detected. [Hidden Content]
- 88 replies
-
- 37
-
I've also used this patcher as a base for years and never had any problem with antiviruses...
-
Change resolution in realtime
Karbust replied to Helia01's topic in Community Support - Questions & Answers
I also followed this topic. It indeed looks interesting. -
I keep getting this error in Debug mode: std::shared_ptr<CGrannyMotion> CGraphicThing::GetMotionPointer(int iMotion) { assert(CheckMotionIndex(iMotion)); //line 131 if (iMotion >= m_pgrnFileInfo->AnimationCount) return NULL; if (m_motions.empty()) return NULL; return m_motions.at(iMotion); } Any idea? Thank you
-
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
-
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:
-
Official Protos 2021
Karbust replied to JoaoBuzzo's topic in Community Support - Questions & Answers
You can find in that topic all the updates from metin2 official. It also includes the protos. -
Google Cloud Platform Metin2 Hosting problem
Karbust replied to Shahin's topic in Community Support - Questions & Answers
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. -
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)); }
-
On Google cloud and AWS, you need to use this: [Hidden Content]
-
Dragon Soul Drop Item Bug
Karbust replied to Karbust's topic in Community Support - Questions & Answers
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... -
Dragon Soul Drop Item Bug
Karbust replied to Karbust's topic in Community Support - Questions & Answers
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" -
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.
-
-
Diff reader website name?
Karbust replied to Shahin's topic in Community Support - Questions & Answers
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. -
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.
-
Well, I don't know what to tell you. I've search all "socket" occurrences on db and I can't find any problem...
-
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...
-
That's the complete opposite of the previous instruction... Obviously it will crash on the else when it tries to access anything inside and find nothing...
-
I recently noticed that the client closes after the character levels up, but not always, but almost always. On the client syserr I get different packets, like this: Unknown packet header: 194, last: 17 75 Unknown packet header: 235, last: 17 75 Nothing reported on the server side syserr. packet.h typedef struct packet_point_change { int header; DWORD dwVID; BYTE type; long long amount; long long value; } TPacketGCPointChange; char.h typedef struct character_point { long long points[POINT_MAX_NUM]; BYTE job; BYTE voice; int level; DWORD exp; long long gold; long hp; int sp; long iRandomHP; int iRandomSP; int stamina; BYTE skill_group; } CHARACTER_POINT; I used this: Any idea? Like I said, it doesn't happen every time, but it happens more times than it doesn't.
-
What? My extern folder only has cryptopp self-compiled, nothing else, all other libraries are through installed packages...
-
Tried without the -j flag, same error. Also without the -j flag, tried c++17 and c++14, nothing. My clang version: # clang++ -v FreeBSD clang version 11.0.1 ([email protected]:llvm/llvm-project.git llvmorg-11.0.1-0-g43ff75f2c3fe) Target: i386-unknown-freebsd13.0 Thread model: posix InstalledDir: /usr/bin Without using the 6 slots it works completely, that PutItemCache function isn't something new, so I wasn't expecting changes to make it work