Jump to content

Ken

Inactive Member
  • Posts

    726
  • Joined

  • Last visited

  • Days Won

    44
  • Feedback

    0%

Everything posted by Ken

  1. M2 Download Center Download Here ( Internal ) Hey everyone, it's a nice day to share something I just wrote Grid class in python language. You can use it as fast moving into the window with this or something else. Usage: from grid import Grid import item import chat grid = Grid(width=5, height=9) item.SelectItem(11299) (width, height) = item.GetItemSize() available_position = grid.find_blank(width, height) if available_position == -1: chat.AppendChat(chat.CHAT_TYPE_INFO, "There is no available position.") return chat.AppendChat(chat.CHAT_TYPE_INFO, "Available position is %d" % (available_position)) Best Regards Ken
  2. If you've interest about reverse engineering, you can check out this tool. (I can't say it's better than IDA). It's just made by NSA. Here is the link for ya. The tool was written in Java. (To provide cross-platform support). [Hidden Content] Installation guide is here too: [Hidden Content]InstallationGuide.html Best Regards Ken
  3. With 19.1, They've added two GUI in the game. (Lucky box, The new fish system). Here are two files. FishingGameWindow.py LuckyBoxWindow.py About the new cheat blocker ; Webzen should try harder than this. At least gameguard was better than this Thanks to @T4UMP Best Regards Ken
  4. As i see in your codes, you're just trying to show the item's full name that which has not full name (skill book, skill forget items and polymorph items) when you pick up them on the ground. I liked thank you for sharing with us. Best Regards Ken
  5. It seems like you're missing format when you call sys_log function. Can you show us to your char_item.cpp, please? Best Regards Ken
  6. There is nothing to do with the Syserr file. Do you have any game.core file in your channel folders? It seems like you do have one.
  7. Ken

    Manu Mount + Texture

    [Hidden Content]
  8. Ken

    Manu Mount + Texture

    The blue lines does not look good. It could be good without them too. Thank you for sharing with us.
  9. You can show your character as a NPC. You just need to add a few variables and write a few situations with that variables prevent from Null pointer or unexpected errors. (I mean crashing game file)
  10. Hi everyone, I would like to share a memory leak fix about pack type Hybrid, Hybrid with SDB and panama. I saw it while analyzing Webzen's new pack type. EterPack.cpp Search this: if( !m_pCSHybridCryptPolicy->DecryptMemory(std::string(filename), static_cast<const BYTE*>(*data), index->data_size, *zObj) ) { return false; } Replace with this if( !m_pCSHybridCryptPolicy->DecryptMemory(std::string(filename), static_cast<const BYTE*>(*data), index->data_size, *zObj) ) { delete zObj; return false; } Search this: if( !m_pCSHybridCryptPolicy->GetSupplementaryDataBlock(std::string(filename), pSDBData, iSDBSize) ) { return false; } Replace with this if( !m_pCSHybridCryptPolicy->GetSupplementaryDataBlock(std::string(filename), pSDBData, iSDBSize) ) { delete zObj; return false; } Search this: else if (COMPRESSED_TYPE_PANAMA == index->compressed_type) { CLZObject * zObj = new CLZObject; __Decrypt_Panama(filename, static_cast<const BYTE*>(*data), index->data_size, *zObj); out_file.BindLZObjectWithBufferedSize(zObj); *data = zObj->GetBuffer(); } Replace with this: else if (COMPRESSED_TYPE_PANAMA == index->compressed_type) { CLZObject * zObj = new CLZObject; if (!__Decrypt_Panama(filename, static_cast<const BYTE*>(*data), index->data_size, *zObj)) { delete zObj; return false; } out_file.BindLZObjectWithBufferedSize(zObj); *data = zObj->GetBuffer(); } Best Regards Ken
  11. Hi, everyone today I would like to share a fix which Webzen has made with you. The fix is about the target position. Ymir is not checking if the target is on horse or not. It would be useful for range attacks. Find this: D3DXVECTOR3 CActorInstance::OnGetFlyTargetPosition() { D3DXVECTOR3 v3Center; if (m_fRadius<=0) { BuildBoundingSphere(); v3Center = m_v3Center; } else { v3Center = m_v3Center; } D3DXVec3TransformCoord(&v3Center, &v3Center, &GetTransform()); return v3Center; } Replace with this: D3DXVECTOR3 CActorInstance::OnGetFlyTargetPosition() { D3DXVECTOR3 v3Center; if (m_fRadius <= 0) BuildBoundingSphere(); v3Center = m_v3Center; D3DXVec3TransformCoord(&v3Center, &v3Center, &GetTransform()); if (__IsMountingHorse()) v3Center.z += 110.0f; return v3Center; } Best Regards Ken
  12. Psuedo-Code ; signed int __stdcall CPythonNonPlayer::GetMonsterHitRange(char a1) { signed int v2; // [esp+0h] [ebp-1Ch] int v3; // [esp+18h] [ebp-4h] v3 = sub_3236B90(a1); if ( !v3 ) return 70.0; if ( *(v3 + 272) ) v2 = *(v3 + 272); else v2 = 100; return v2; } Reversed function: float CPythonNonPlayer::GetMonsterHitRangeByVnum(DWORD raceVnum) const { const TMobTable * p = GetTable(raceVnum); if (!p) return 70.0f; if (p->hitRange) return p->hitRange; return 100.0f; } Best Regards Ken
  13. Hey, I would like to share a small function for fish event. You can find this function in uiMiniGameFishEvent.py (The uncythonized root files) too. Best Regards Ken
  14. I just want to say something about your "official" fix. Webzen didn't change anything like you did. If you want a proof, here it is. If you want to see with your eyes, here is the address from the official binary. (0x39004F0) [Hidden Content] Best Regards Ken
  15. Webzen didn't create a new function to return m_FriendNameMap. They just make m_FriendNameMap public. (It was protected before). Also, you can use const_iterator instead of iterator. (You're not modifying it.) Here is the reversed version of webzen's function. This version is for c++11 This is for c++03 PS: This function has come with a system that called mailbox. Best Regards Ken
  16. Sorry but this is not a challenge or something else. You just want someone to solve your problem without pay in your own way. (Challenge). If this is a challenge, then you can put some money. That's my option Best Regards Ken
  17. std::string GetFirstLineFromFile(std::string stFileName) { std::ifstream file(stFileName.c_str(), std::ios::in); if (!file.is_open()) return "Can not open the file"; std::string stLine = ""; if (!getline(file, stLine)) return "Can not get the first line!"; return stLine; } It will get the first line of the file. You can use this anywhere you want. (Don't forget to include fstream and string libraries) Best Regards Ken
  18. Hi, everyone. Most people know when you are trying to connect the server with a lot of people, the server can not respond to you or something might go wrong. This example is same for warp too. Webzen did something about this too and I'd like to share it with you. What are exactly are we doing? If the client can not connect to the server, the client will wait one second to connect the server again. Open NetStream.cpp. Find Connect function and replace with this bool CNetworkStream::Connect(const CNetworkAddress& c_rkNetAddr, int limitSec) { Clear(); m_addr = c_rkNetAddr; m_sock = socket(AF_INET, SOCK_STREAM, 0); if (m_sock == INVALID_SOCKET) { Clear(); OnConnectFailure(); return false; } DWORD arg = 1; ioctlsocket(m_sock, FIONBIO, &arg); // Non-blocking mode if (connect(m_sock, reinterpret_cast<PSOCKADDR>(&m_addr), m_addr.GetSize()) == SOCKET_ERROR) { int error = WSAGetLastError(); // If something went wrong, the client will wait one second to connect the server again. // Of course, it will clear and setting up everything again. if (error != WSAEWOULDBLOCK) { Sleep(1000); Clear(); m_sock = socket(AF_INET, SOCK_STREAM, 0); if (m_sock == INVALID_SOCKET) { Clear(); OnConnectFailure(); return false; } ioctlsocket(m_sock, FIONBIO, &arg); if (connect(m_sock, reinterpret_cast<PSOCKADDR>(&m_addr), m_addr.GetSize()) == SOCKET_ERROR) { Tracen("error != WSAEWOULDBLOCK"); Clear(); OnConnectFailure(); return false; } } } m_connectLimitTime = time(NULL) + limitSec; return true; } Best Regards Ken
  19. The quest must know what's there in the item shop. You can create an array for this in questlib.lua or the quest. You can use a query to fetch what's there in the item shop. (I do not recommend this method because it might be a lag in the game.) You must cache it even If you want. Then you can check it with pc.get_wear() You can create an array for this in the quest or questlib.lua (I gave an example) The last thing is to combine all of them quest xxx begin state start begin when login with pc.get_map_index() == xx begin -- You can use a query to fetch the item vnums from the table. (I still do not recommend this method if you are not using cache method) local blockedItems = { 11209, 11409, 11609, 11809 } -- Wear positions, is exist in common/length.h if you want to check it out. local wearPositions = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 19, 20, 21, 22 } -- Make a loop and check every wear position and check is equal to the blocked items in array or not. for i = 1, table.getn(blockedItems), 1 do for j = 1, table.getn(wearPositions), 1 do if (pc.get_wear(wearPositions[j]) == blockedItems[i]) then chat("You can't..") return end end end end end end Best Regards Ken
  20. You're playing a multiplayer game. The member might lose his connection sometimes because of the internet provider or unknown packets. You can't pay this to the party members. If you do, most people are going to insult you in the game. Anyway, thanks for sharing with us. Best Regards Ken
  21. Ken

    Small Messenger Fix

    Hey, @Horinna thanks for feeding back. About the last bug, the system is not doing the same things for the companion. To fix this; Find this line in messenger_manager.cpp m_Relation[account].erase(companion); m_InverseRelation[companion].erase(account); And add this code blog m_Relation[companion].erase(account); m_InverseRelation[account].erase(companion); Best Regards Ken
×
×
  • Create New...

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.