Jump to content
metin2dev
Ekstasia2

Search the Community

Showing results for tags 'source'.



More search options

  • Search By Tags

    Type tags separated by commas.
  • Search By Author

Content Type


Forums

  • Community
    • Announcements
    • Feedback
  • Metin2
    • General
    • Questions and Answers
    • Guides & HowTo
    • Design
    • Private Servers
    • Services
    • Videos
  • Releases
    • General
    • Tools
    • Programming / Scripts
    • Quests
    • Binaries & Clients/Serverfiles
    • 3D Models
    • 2D Graphics
    • Operating Systems
  • Safe Zone
    • Offtopic
    • Games Talk
    • Music/Videos/Art

Categories

There are no results to display.

There are no results to display.


Find results in...

Find results that contain...


Date Created

  • Start

    End


Last Updated

  • Start

    End


Filter by number of...

Joined

  • Start

    End


Group


Website URL


ICQ


Yahoo


Skype


Location

Found 164 results

  1. Hello devs Today I would like to present you a new solution that can make you feel more safe with your GMs. This is my first release and it's very simple to do, I'm just posting it here for the newbies and those who don't know how to start searching and other shit like that WHAT IS THIS SYSTEM? This system is a number of preventions for GameMaster characters about certain interractions with normal players in the game. The functions you are about to see are blocking GMs from: Trading items with normal players (and the opposite) Invite normal players to parties (and the opposite) Invite normal players to guilds (and the opposite) Adding normal players as friend contacts (I would say and the opposite but it already exists by default ) Drop items to the ground Build their own private shops with the Bundle item Buy items from a private shop Block a GM from buffing normal players Using the commands /set, /a and /setskillother to normal players WHO IS THIS SYSTEM FOR? I believe we can all agree that trust in partnership is a rare thing these days. This system is released from me for the Admins out there that cannot trust their GMs (and many times their self) so much. Imagine having a server and your GM just gives away items for free to everyone. Bad huh? I thought so... So with this system you are sure that your GMs will do their job properly and won't violate any game rules behind your backs. Your server has rules (as all games out there) and if you wanted people to have some items for free you can easily put those items for sale into the town vendors. People who do this kind of things behind your backs are not authorized by you to do it but I believe that it happened (if not happening yet) to the best of you guys, that's why I'm releasing it. It's time to set some things right in your servers, GMs exist to answer questions and not helping players cheat without any authorization from the administrators, so without further ado, let's get started. SORRY AGAIN, ONE MORE THING I BELIEVE THIS QUESTION IS IN THE MIND OF A DEVELOPER WHO READS THIS GUIDE: MIND RAPIST, WHY DO YOU USE THE IsGM() BOOLEAN TO CHECK IF A PLAYER IS A GM AND NOT USE THE TRADITIONAL CHECK GetGMLevel() > GM_PLAYER? In this tutorial, we will be using the bool IsGM() instead of the usual check because some of the guys who see this may have added @Alina's GM Elevation system. In that case, GetGMLevel() won't work before the character elevates, so our GMs will be able to bypass the check and just create a perfect item, relog and give it away before they elevate. We don't want that don't we? So who ever wants to use GetGMLevel() > GM_PLAYER instead of IsGM() there is no difference you can do that guys, except if you did the elevation system, then you need to use my function in order to work. So let's get the party started. PARTY INVITATION BLOCK In char.cpp search for the function "void CHARACTER::PartyInvite(LPCHARACTER pchInvitee)" and under add this: Done with party block, let's continue BUNDLE USAGE BLOCK FOR CREATING PRIVATE SHOPS In char_item.cpp search for the function "bool CHARACTER::UseItemEx(LPITEM item, TItemPos DestCell)" and under add this: Done, let's continue ITEM DROP BLOCK Still in char_item.cpp search for the function "bool CHARACTER::DropItem(TItemPos Cell, BYTE bCount)" and under add this: Done with that one, you can close char_item.cpp. Let's move on BUFF BLOCK In char_skill.cpp find this: and paste this under it: Done with that, next! /SET COMMAND BLOCK FOR PLAYERS In cmd_gm.cpp search for the function "ACMD(do_set)" and under add this: Done, but do not close, we have more commands to block! /A COMMAND BLOCK FOR PLAYERS Still in cmd_gm.cpp, search for the function "ACMD(do_advance)" and under add this: Do not close that file yet, one more command left to block /SETSKILLOTHER COMMAND BLOCK FOR PLAYERS Still in this file, search for the function "ACMD(do_setskillother)" and under add this: Done with the commands, you may close cmd_gm.cpp and move on EXCHANGE BLOCK In exchange.cpp search for the function "bool CHARACTER::ExchangeStart(LPCHARACTER victim)" and under (if you have sash system in your source, the top line may be "if ( IsOpenSafebox() || GetShopOwner() || GetMyShop() || IsCubeOpen() || IsAcceOpen() )") add this: Done with the exchange, moving on! GUILD INVITATION BLOCK In guild.cpp search for the function "void CGuild::Invite( LPCHARACTER pchInviter, LPCHARACTER pchInvitee )" and under add this: Here goes the guild invitation, let's move forward FRIEND LIST BLOCK In input_main.cpp search for the function "int CInputMain::Messenger(LPCHARACTER ch, const char* c_pData, size_t uiBytes)" and find this line: change it like this: Still in the same function, find this line in "case MESSENGER_SUBHEADER_CG_ADD_BY_NAME:": and add this: Friends are done. Let's move on to the last one! BUYING ITEMS FROM PRIVATE SHOPS BLOCK In shop_manager.cpp search for the function "void CShopManager::Buy(LPCHARACTER ch, BYTE pos)" and under add this: Done It's not something hard to do, I just gathered everything in one place, you can now sleep at night knowing that your GMs cannot fraud you. I would like to give special thanks to @VegaS who wrote the blocks for buffs, party and guild invitation, thanks so much buddy Note: These will block any interraction between a GM and a normal player, but a GM will be able to interract with another GM (example trade GM with GM). And before someone asks yes I thought about a safebox block for GMs but there is no need for that since you can login to his account and create 3 players, then logout and delete them directly from their database, leaving 3 warriors with Level 0 that cannot login to the game. Let the poor GMs have their safebox it's the only thing left to them after that I think xD So I hope I helped some folks here the tutorial is done Kind regards ~ Mind Rapist
  2. Hi, How do I change the regeneration percentage of the elixir item? Bênção de Helong (S) > Change percent hp to instant hp Example item 70020
  3. Hello, here's a tutorial on how to update your MySQL Connector C (i think it's not supported anymore thanks oracle @.@) into MariaDB Connector C extracted from my source. You must need MariaDB, if you use MySQL with this connector don't ask help because it's not ment to be compatible. With this edit you could use MariaDB Connector v3.x without any problem. 1) Makefile update Open your libsql, db and game makefile and on the CFLAGS/IFLAGS add this: -I<your Extern source>/include/mariadb (ie.: ../Extern/include/mariadb) Also, if you have a -I referencing mysql please delete it Then, add this to your libsql, db and game CFLAGS this -D__MARIADB__ Finally, change on your db and game LIBS this -lmysqlclient into -lmariadbclient -lssl -lcrypto NOTE: If you already link libssl and libcrypto you can skip them NOTE ON 64BIT ENVIRONMENT: 2) Source Update Edit this code from libsql/AsyncSQL.h: #include <mysql/mysql.h> #include <mysql/errmsg.h> #include <mysql/mysqld_error.h> into: #ifdef __MARIADB__ #include <mariadb/mysql.h> #include <mariadb/errmsg.h> #include <mariadb/mysqld_error.h> #else #include <mysql/mysql.h> #include <mysql/errmsg.h> #include <mysql/mysqld_error.h> #endif Edit this code on db/DBManager.h #include <mysql/mysql.h> into this: #ifdef __MARIADB__ #include <mariadb/mysql.h> #else #include <mysql/mysql.h> #endif Finally, edit this file on libsql/AsyncSQL.cpp fprintf(stdout, "AsyncSQL: connected to %s (reconnect %d)\n", m_stHost.c_str(), m_hDB.reconnect); into: #ifdef __MARIADB__ fprintf(stdout, "AsyncSQL: connected to %s\n", m_stHost.c_str()); #else fprintf(stdout, "AsyncSQL: connected to %s (reconnect %d)\n", m_stHost.c_str(), m_hDB.reconnect); #endif 3) Database Server Update Now we're gonna replace the name "window" because MariaDB introduce the window operator that conflict with the query name What we will basicly do is change any "window" in query into "windows" db/AuctionManager.cpp function LoadAuctionItem() Replace: FROM item WHERE window = 'AUCTION' To: FROM item WHERE windows = 'AUCTION' db/ClientManagerPlayer.cpp Replace: ///////////////////////////////////////////// // 2) 아이템이 DBCache 에 없음 : DB 에서 가져옴 ///////////////////////////////////////////// else { snprintf(szQuery, sizeof(szQuery), "SELECT id,window+0,pos,count,vnum,socket0,socket1,socket2,attrtype0,attrvalue0,attrtype1,attrvalue1,attrtype2,attrvalue2,attrtype3,attrvalue3,attrtype4,attrvalue4,attrtype5,attrvalue5,attrtype6,attrvalue6 " "FROM item%s WHERE owner_id=%d AND (window < %d or window = %d)", GetTablePostfix(), pTab->id, SAFEBOX, DRAGON_SOUL_INVENTORY); CDBManager::instance().ReturnQuery(szQuery, QID_ITEM, peer->GetHandle(), new ClientHandleInfo(dwHandle, pTab->id)); into: ///////////////////////////////////////////// // 2) 아이템이 DBCache 에 없음 : DB 에서 가져옴 ///////////////////////////////////////////// else { snprintf(szQuery, sizeof(szQuery), "SELECT id,windows+0,pos,count,vnum,socket0,socket1,socket2,attrtype0,attrvalue0,attrtype1,attrvalue1,attrtype2,attrvalue2,attrtype3,attrvalue3,attrtype4,attrvalue4,attrtype5,attrvalue5,attrtype6,attrvalue6 " "FROM item%s WHERE owner_id=%d AND (windows < %d or windows = %d)", GetTablePostfix(), pTab->id, SAFEBOX, DRAGON_SOUL_INVENTORY); CDBManager::instance().ReturnQuery(szQuery, QID_ITEM, peer->GetHandle(), new ClientHandleInfo(dwHandle, pTab->id)); Also replace: ClientHandleInfo * pkInfo = new ClientHandleInfo(dwHandle, packet->player_id); pkInfo->account_id = packet->account_id; CDBManager::instance().ReturnQuery(queryStr, QID_PLAYER, peer->GetHandle(), pkInfo); //-------------------------------------------------------------- // 아이템 가져오기 //-------------------------------------------------------------- snprintf(queryStr, sizeof(queryStr), "SELECT id,window+0,pos,count,vnum,socket0,socket1,socket2,attrtype0,attrvalue0,attrtype1,attrvalue1,attrtype2,attrvalue2,attrtype3,attrvalue3,attrtype4,attrvalue4,attrtype5,attrvalue5,attrtype6,attrvalue6 " "FROM item%s WHERE owner_id=%d AND (window < %d or window = %d)", GetTablePostfix(), packet->player_id, SAFEBOX, DRAGON_SOUL_INVENTORY); CDBManager::instance().ReturnQuery(queryStr, QID_ITEM, peer->GetHandle(), new ClientHandleInfo(dwHandle, packet->player_id)); Into: ClientHandleInfo * pkInfo = new ClientHandleInfo(dwHandle, packet->player_id); pkInfo->account_id = packet->account_id; CDBManager::instance().ReturnQuery(queryStr, QID_PLAYER, peer->GetHandle(), pkInfo); //-------------------------------------------------------------- // 아이템 가져오기 //-------------------------------------------------------------- snprintf(queryStr, sizeof(queryStr), "SELECT id,windows+0,pos,count,vnum,socket0,socket1,socket2,attrtype0,attrvalue0,attrtype1,attrvalue1,attrtype2,attrvalue2,attrtype3,attrvalue3,attrtype4,attrvalue4,attrtype5,attrvalue5,attrtype6,attrvalue6 " "FROM item%s WHERE owner_id=%d AND (windows < %d or windows = %d)", GetTablePostfix(), packet->player_id, SAFEBOX, DRAGON_SOUL_INVENTORY); CDBManager::instance().ReturnQuery(queryStr, QID_ITEM, peer->GetHandle(), new ClientHandleInfo(dwHandle, packet->player_id)); Finally replace: snprintf(queryStr, sizeof(queryStr), "DELETE FROM player%s WHERE id=%d", GetTablePostfix(), pi->player_id); delete CDBManager::instance().DirectQuery(queryStr); snprintf(queryStr, sizeof(queryStr), "DELETE FROM item%s WHERE owner_id=%d AND (window < %d or window = %d)", GetTablePostfix(), pi->player_id, SAFEBOX, DRAGON_SOUL_INVENTORY); delete CDBManager::instance().DirectQuery(queryStr); Into: snprintf(queryStr, sizeof(queryStr), "DELETE FROM player%s WHERE id=%d", GetTablePostfix(), pi->player_id); delete CDBManager::instance().DirectQuery(queryStr); snprintf(queryStr, sizeof(queryStr), "DELETE FROM item%s WHERE owner_id=%d AND (windows < %d or windows = %d)", GetTablePostfix(), pi->player_id, SAFEBOX, DRAGON_SOUL_INVENTORY); delete CDBManager::instance().DirectQuery(queryStr); 4) Query update Design your player.item table, and change "window" to "windows". We have update into the new connector (mariadb connector c 3.x safetly), if you would like to downgrade change -lmariadbclient into -lmysqlclient, remove -D__MARIADB__ and change the -I referencing mariadb into mysql. Thanks for reading UPDATE: I've found other place to edit "window" into "windows" Open ClientManager.cpp From: else sys_log(0, "SAFEBOX id[%d] size[%d]", pSafebox->dwID, pSafebox->bSize); } if (0 == pSafebox->dwID) pSafebox->dwID = pi->account_id; pi->pSafebox = pSafebox; m2char szQuery[512]; snprintf(szQuery, sizeof(szQuery), "SELECT id, window+0, pos, count, vnum, socket0, socket1, socket2, " "attrtype0, attrvalue0, " "attrtype1, attrvalue1, " "attrtype2, attrvalue2, " "attrtype3, attrvalue3, " "attrtype4, attrvalue4, " "attrtype5, attrvalue5, " "attrtype6, attrvalue6 " "FROM item%s WHERE owner_id=%d AND window='%s'", GetTablePostfix(), pi->account_id, pi->ip[0] == 0 ? "SAFEBOX" : "MALL"); To: else sys_log(0, "SAFEBOX id[%d] size[%d]", pSafebox->dwID, pSafebox->bSize); } if (0 == pSafebox->dwID) pSafebox->dwID = pi->account_id; pi->pSafebox = pSafebox; m2char szQuery[512]; snprintf(szQuery, sizeof(szQuery), "SELECT id, windows+0, pos, count, vnum, socket0, socket1, socket2, " "attrtype0, attrvalue0, " "attrtype1, attrvalue1, " "attrtype2, attrvalue2, " "attrtype3, attrvalue3, " "attrtype4, attrvalue4, " "attrtype5, attrvalue5, " "attrtype6, attrvalue6 " "FROM item%s WHERE owner_id=%d AND windows='%s'", GetTablePostfix(), pi->account_id, pi->ip[0] == 0 ? "SAFEBOX" : "MALL"); From: else pItemAward->dwSocket0 = item_table->aLimits[i].lValue; break; } } } snprintf(szQuery, sizeof(szQuery), "INSERT INTO item%s (id, owner_id, window, pos, vnum, count, socket0, socket1, socket2) " "VALUES(%u, %u, '%s', %d, %u, %u, %u, %u, %u)", GetTablePostfix(), GainItemID(), pi->account_id, pi->ip[0] == 0 ? "SAFEBOX" : "MALL", iPos, pItemAward->dwVnum, pItemAward->dwCount, pItemAward->dwSocket0, pItemAward->dwSocket1, dwSocket2); } To: else pItemAward->dwSocket0 = item_table->aLimits[i].lValue; break; } } } snprintf(szQuery, sizeof(szQuery), "INSERT INTO item%s (id, owner_id, windows, pos, vnum, count, socket0, socket1, socket2) " "VALUES(%u, %u, '%s', %d, %u, %u, %u, %u, %u)", GetTablePostfix(), GainItemID(), pi->account_id, pi->ip[0] == 0 ? "SAFEBOX" : "MALL", iPos, pItemAward->dwVnum, pItemAward->dwCount, pItemAward->dwSocket0, pItemAward->dwSocket1, dwSocket2); } From: m_map_itemCache.erase(p->id); delete c; } m2char szQuery[512]; snprintf(szQuery, sizeof(szQuery), "REPLACE INTO item%s (id, owner_id, window, pos, count, vnum, socket0, socket1, socket2, " "attrtype0, attrvalue0, " "attrtype1, attrvalue1, " "attrtype2, attrvalue2, " "attrtype3, attrvalue3, " "attrtype4, attrvalue4, " "attrtype5, attrvalue5, " "attrtype6, attrvalue6 " ") " "VALUES(%u, %u, %d, %d, %u, %u, %ld, %ld, %ld, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d" ")", GetTablePostfix(), p->id, p->owner, p->window, To: m_map_itemCache.erase(p->id); delete c; } m2char szQuery[512]; snprintf(szQuery, sizeof(szQuery), "REPLACE INTO item%s (id, owner_id, windows, pos, count, vnum, socket0, socket1, socket2, " "attrtype0, attrvalue0, " "attrtype1, attrvalue1, " "attrtype2, attrvalue2, " "attrtype3, attrvalue3, " "attrtype4, attrvalue4, " "attrtype5, attrvalue5, " "attrtype6, attrvalue6 " ") " "VALUES(%u, %u, %d, %d, %u, %u, %ld, %ld, %ld, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d" ")", GetTablePostfix(), p->id, p->owner, p->window, UPDATE2: Open db/Cache.cpp and find: if (memcmp(aAttr, p->aAttr, sizeof(TPlayerItemAttribute) * ITEM_ATTRIBUTE_MAX_NUM)) isAttr = true; char szColumns[QUERY_MAX_LEN]; char szValues[QUERY_MAX_LEN]; char szUpdate[QUERY_MAX_LEN]; int iLen = snprintf(szColumns, sizeof(szColumns), "id, owner_id, window, pos, count, vnum"); int iValueLen = snprintf(szValues, sizeof(szValues), "%u, %u, %d, %d, %u, %u", p->id, p->owner, p->window, p->pos, p->count, p->vnum); int iUpdateLen = snprintf(szUpdate, sizeof(szUpdate), "owner_id=%u, window=%d, pos=%d, count=%u, vnum=%u", p->owner, p->window, p->pos, p->count, p->vnum); Replace into: if (memcmp(aAttr, p->aAttr, sizeof(TPlayerItemAttribute) * ITEM_ATTRIBUTE_MAX_NUM)) isAttr = true; char szColumns[QUERY_MAX_LEN]; char szValues[QUERY_MAX_LEN]; char szUpdate[QUERY_MAX_LEN]; int iLen = snprintf(szColumns, sizeof(szColumns), "id, owner_id, windows, pos, count, vnum"); int iValueLen = snprintf(szValues, sizeof(szValues), "%u, %u, %d, %d, %u, %u", p->id, p->owner, p->window, p->pos, p->count, p->vnum); int iUpdateLen = snprintf(szUpdate, sizeof(szUpdate), "owner_id=%u, windows=%d, pos=%d, count=%u, vnum=%u", p->owner, p->window, p->pos, p->count, p->vnum);
  4. Hello. I saw this stuff on this and on another board also with bugs or it was incomplete, and I made it to myself. Feel free to use it with your brain. Good to know about this: The name of those items which have attributes will be golden. The skillbook and skillforget items will show the name of skill also. If the item isn't yours than the ownership color will be red instead of yellow. * Készségkönyv = Skillbook(id:50300) * Feledés könyve = Skillforget book(id:70037) PS.: If you have problems with the implementation: start to upgrade your programming knowledges and don't disturb me in private message, I won't answer. Thank you for understanding. https://mega.nz/#!KAh3DQqL!yQQX9o4N8sTsS7Woa4W07C8t5jwp0TV5xg7MHLSFz5Y
  5. Hi community! As you know, the original item_scale looks like this: #ID JOB SEX X Y Z SCALE_X SCALE_Y SCALE_Z 85001 JOB_WOLFMAN M 100 100 100 0 0 0 85001 JOB_ASSASSIN M 62 68 62 0 0 0.52 85001 JOB_ASSASSIN F 62 62 62 0 0 0.45 85001 JOB_SHAMAN M 75 75 75 0 0 0.3 85001 JOB_SHAMAN F 65 65 65 0 0 0.43 85001 JOB_SURA M 73 77 73 0 0 0.4 85001 JOB_SURA F 65 70 65 0 0 0.4 85001 JOB_WARRIOR M 78 83 78 0 0 0.3 85001 JOB_WARRIOR F 70 70 70 0 0 0.4 But the GF changed to like this: #ID JOB SEX X Y Z 85001 JOB_WOLFMAN M 100 100 100 85001 JOB_ASSASSIN M 62 68 62 85001 JOB_ASSASSIN F 62 62 62 85001 JOB_SHAMAN M 75 75 75 85001 JOB_SHAMAN F 65 65 65 85001 JOB_SURA M 73 77 73 85001 JOB_SURA F 65 70 65 85001 JOB_WARRIOR M 78 83 78 85001 JOB_WARRIOR F 70 70 70 As you can see they just removed the last 3 columns. My question is, someone knows how to change the binary source to could handle this? Because I don't know, how they calculate the scale from the x y z columns. Thanks in advance!
  6. Hello all. I have a problem which gives me headaches. I tried to compile all libraries of the external links for the binary source but still with no success. I can compile successfully the binary in release and distribute mode, but in debug mode it gives me this error: 1>eterlib.lib(GrpTextInstance.obj) : error LNK2019: unresolved external symbol "int __cdecl Ymir_WideCharToMultiByte(unsigned int,unsigned long,wchar_t const *,int,char *,int,char const *,int *)" (?Ymir_WideCharToMultiByte@@YAHIKPB_WHPADHPBDPAH@Z) referenced in function "public: static int __cdecl CGraphicTextInstance::Hyperlink_GetText(char *,int)" (?Hyperlink_GetText@CGraphicTextInstance@@SAHPADH@Z) 1>eterlib.lib(GrpTextInstance.obj) : error LNK2019: unresolved external symbol "wchar_t __cdecl Arabic_ConvSymbol(wchar_t)" (?Arabic_ConvSymbol@@YA_W_W@Z) referenced in function "public: void __thiscall CGraphicTextInstance::Update(void)" (?Update@CGraphicTextInstance@@QAEXXZ) 1>eterlib.lib(GrpTextInstance.obj) : error LNK2019: unresolved external symbol "bool __cdecl Arabic_IsInPresentation(wchar_t)" (?Arabic_IsInPresentation@@YA_N_W@Z) referenced in function "public: void __thiscall CGraphicTextInstance::Update(void)" (?Update@CGraphicTextInstance@@QAEXXZ) 1>eterlib.lib(GrpTextInstance.obj) : error LNK2019: unresolved external symbol "bool __cdecl Arabic_HasPresentation(wchar_t *,int)" (?Arabic_HasPresentation@@YA_NPA_WH@Z) referenced in function "public: void __thiscall CGraphicTextInstance::Update(void)" (?Update@CGraphicTextInstance@@QAEXXZ) 1>eterlib.lib(GrpTextInstance.obj) : error LNK2019: unresolved external symbol "bool __cdecl Arabic_IsInSymbol(wchar_t)" (?Arabic_IsInSymbol@@YA_N_W@Z) referenced in function "public: void __thiscall CGraphicTextInstance::Update(void)" (?Update@CGraphicTextInstance@@QAEXXZ) 1>eterlib.lib(GrpTextInstance.obj) : error LNK2019: unresolved external symbol "unsigned int __cdecl Arabic_MakeShape(wchar_t *,unsigned int,wchar_t *,unsigned int)" (?Arabic_MakeShape@@YAIPA_WI0I@Z) referenced in function "public: void __thiscall CGraphicTextInstance::Update(void)" (?Update@CGraphicTextInstance@@QAEXXZ) 1>eterlib.lib(GrpTextInstance.obj) : error LNK2019: unresolved external symbol "int __cdecl Ymir_MultiByteToWideChar(unsigned int,unsigned long,char const *,int,wchar_t *,int)" (?Ymir_MultiByteToWideChar@@YAHIKPBDHPA_WH@Z) referenced in function "public: void __thiscall CGraphicTextInstance::Update(void)" (?Update@CGraphicTextInstance@@QAEXXZ) What can I do?
  7. Ashiné

    open More enchant items?

    Hello. On pure SF and Source I'm learning to create a metin2 server. I'm not creating a mega project just for my teachings ... maybe in a couple of years I'll be able to make some project I noticed that there are, for example, Enchant item and Enchant item +. Enchant item adds to the standard 5 bonus items (strong against humans + 10%). Enchant item + adds improved bonuses (strong against people + 18%) or (average damage up to 120%) in the item. Is it possible to do this on the server? For each advice I will be very happy, I would very much like to make a variety of bonuses. I would also ask if you do not know how to make an unlimited Enchant item. Many thanks and apologize for English.
  8. kagamatosama

    open Horse visible bug

    Hello! Anyone know how can i solve tihs? (Video is not from me, but the bug is fully like mine!) Thanks in advance !!!
  9. Typical

    open Lags in Virtualbox

    (Sorry for mistakes, my English is bad) Hi, for some time now a virtual machine is running very slowly. The commissioning takes only +/- 10 minutes, where it once started in a moment. The screen is not smooth and everything is very slow. I reinstalled it several times and checked it on different versions, but on each one it is the same. The problem only occurs on FreeBSD 9.2. Other versions (such as 9.0 or 9.3) work quickly and do not lag. Before this inscription disappears it takes about 3-4 minutes, and the rest can be seen in the following video. Please help. Log from virtualbox: https://pastebin.com/YmyCRWeV
  10. Rider

    open Sources & Website

    Greetings all, I'm writing this topic to ask Metin2Dev for some help. I'm a Webdeveloper and wanted to create some new stuff for websites and forums. To do that, I need a database so I can see what queries can I integrate. Now I don't know how this works since sources were been released and that's why I'm asking for some help, since it's been like 4-5 years that I don't start a metin2 server. The introduction got long, so the request is this: Where can I find sources or even compiled files (but better sources) so can create a local server for test purposes on developing new websites? If there is a guide to help me to make it work so I can start it that would be super awesome I don't know if there is a link for everyone or not in case PM it to me if that's possible. Thanks for reading this!
  11. RcDragon

    open [SOURCE]Mob spawn

    Hi guys, I would like to know how can I spawn a mob via source. Like...I want to spawn a mob (mob2_vnum) when another certain mob(mob1_vnum) reach 90% of his hp...so I tried this...didn' worked... if (mob1_vnum->GetHPPct() > 98) { SpawnMob(mob2_vnum); } Can someone tell me how to do that correctly? Please...
  12. LiiKeFam3

    Char select bug [40k]

    Hi, metin2dev. Today i've noticed a bug, and i don't know how to solve it. Bug: No hair and played minutes .
  13. Hey Devs! Anyone can you help me? I do not want to disappear after teleport the skills. Thanks!
  14. Here you got some bugfixes from me. Stack Potts etc directly in Belt Inventory, before putting them to Inventory Stack items you drop for Other guys in your party: Fix for the Drops Pet makes if they kill an Monster Pets run towards your dropped items and pick them up for you:
  15. hello, i have a question of the topic start position from the individually character i would like a start position for the individually character, Warrior, Shaman, Ninja and the orther guy you know, the guy with the red hand ... the ninja have point 350 240 and the warrior 500 600 and the orther guys also and now... i dont know how to implement it. I am looking for the solution kind regards
  16. Hi all. I have got a question, if you can help me. How to editing the source of PackMaker for that only one pack file make/enpack and extract/unpack? I hope for you answer to my question. Thank you very mutch.
  17. If I search for "GEOMKYUNG" (aura of the sword I think) I get this output: I looked up in those .cpp and .h files but did not find anything(you can see the lines in the output,only lines with RemoveAffect() etc). Where is the skill defined? If I want to create a new skill or modify this skill where do I actually need to look? Tried to look into that database and did not find anything,it's too big
  18. Hi, recently released a new version of llvm (6) and I decided to update the source of vanilla 70220. (NOT TESTED) Download Cryptopp 5.6.5 Boost 1.65.1 Minilzo 2.09 MariaDB 101 DevIL 1.8.7 To install, you will need several packages. pkg install gmake pkg install subversion pkg install clang-devel Compiled on freebsd 11.1 i386 Best regard
  19. oncemoron

    open No module named net

    Hello guys, I have big problem with source. I compile my source and try to open client application. And show this error. Some advice to solution? Sorry for my bad english.
  20. Numele serverului: Ransom2 Canale deschise: 4 Nivel maxim: 120 Puncte status: 90 Site-ul serverului: http://ransom2.org Forumul serverului: http://board.ransom2.org Inregistrare: http://ransom2.org/reg.php Client: http://ransom2.org/download.php Rata experienta: Setata din mobi Rata yang: Setata din mobi Rata obiecte: Setata din mobi Rata fierarului: Difera de la item la item Detalii despre server: Un server pvm hard. Detalii despre evenimente: Evenimente zilnice. Prezentare full screen : http://ransom2.org/prezentare.php Echipa jocului: Elijah - Administrator Damon - Administrator B.Eduard - Administrator forum & Designer
  21. iShadoW

    open how could i fix that?

    i have a problem with db source, i add gaya , and cheque but when i create a character or i have one already , he;s part_main and part_base from db with no armor is 127 look and my code from db is this: queryLen = snprintf(queryStr, sizeof(queryStr), "INSERT INTO player%s " "(id, account_id, name, level, st, ht, dx, iq, " "job, voice, dir, x, y, z, " "hp, mp, random_hp, random_sp, stat_point, stamina, part_base, part_main, part_hair, part_sash, gold,gaya, cheque, playtime, " "skill_level, quickslot) " "VALUES(0, %u, '%s', %d, %d, %d, %d, %d, " "%d, %d, %d, %d, %d, %d, %d, " "%d, %d, %d, %d, %d, %d, %d, 0, %d, %d, %d, %d, 0 ", GetTablePostfix(), packet->account_id, packet->player_table.name, packet->player_table.level, packet->player_table.st, packet->player_table.ht, packet->player_table.dx, packet->player_table.iq, packet->player_table.job, packet->player_table.voice, packet->player_table.dir, packet->player_table.x, packet->player_table.y, packet->player_table.z, packet->player_table.hp, packet->player_table.sp, packet->player_table.sRandomHP, packet->player_table.sRandomSP, // packet->player_table.sHorse_appearance, packet->player_table.stat_point, packet->player_table.stamina, packet->player_table.part_base, packet->player_table.part_base, packet->player_table.gold , packet->player_table.gaya #ifdef ENABLE_CHEQUE_SYSTEM ,packet->player_table.cheque #endif ); and as well when i compile it tell me , there are too many arguments for format thank you.
  22. Hello, I´m searching for the file in the source where I can change the base vaules on each character like Vit, Dex, Int... Hope that someone can help me
  23. How to compile Metin2 server on x64 without jails or VMs First, make sure to use the default FreeBSD compiler (cc for .c and c++ for .cpp), i tryied GCC but i didn't get any result. Second, add "-m32" to all the CFLAGS in your makefile. Finally, make this changes on your srcs if you got any error building with CLang The Extern dosen't need to be changed, but the freebsd libraries must be linked with -L/usr/local/lib32 rather than -L/usr/local/lib. WARNING: I failed to build MySQL/MariaDB Connector with -m32 flags, i recommend you to use a VM/Jail for build x86 libraries char_manager.cpp line 20 there is something that include boost/bind.hpp, change that include with this: #if !defined(__GNUC__) || defined(__clang__) #include <boost/bind.hpp> #endif line 650 change all the function: void CHARACTER_MANAGER::Update(int iPulse) { using namespace std; #if defined(__GNUC__) && !defined(__clang__) using namespace __gnu_cxx; #endif BeginPendingDestroy(); // PC 캐릭터 업데이트 { if (!m_map_pkPCChr.empty()) { // 컨테이너 복사 CHARACTER_VECTOR v; v.reserve(m_map_pkPCChr.size()); #if defined(__GNUC__) && !defined(__clang__) transform(m_map_pkPCChr.begin(), m_map_pkPCChr.end(), back_inserter(v), select2nd<NAME_MAP::value_type>()); #else transform(m_map_pkPCChr.begin(), m_map_pkPCChr.end(), back_inserter(v), boost::bind(&NAME_MAP::value_type::second, _1)); #endif if (0 == (iPulse % PASSES_PER_SEC(5))) { FuncUpdateAndResetChatCounter f; for_each(v.begin(), v.end(), f); } else { //for_each(v.begin(), v.end(), mem_fun(&CFSM::Update)); for_each(v.begin(), v.end(), bind2nd(mem_fun(&CHARACTER::UpdateCharacter), iPulse)); } } // for_each_pc(bind2nd(mem_fun(&CHARACTER::UpdateCharacter), iPulse)); } // 몬스터 업데이트 { if (!m_set_pkChrState.empty()) { CHARACTER_VECTOR v; v.reserve(m_set_pkChrState.size()); #if defined(__GNUC__) && !defined(__clang__) transform(m_set_pkChrState.begin(), m_set_pkChrState.end(), back_inserter(v), identity<CHARACTER_SET::value_type>()); #else v.insert(v.end(), m_set_pkChrState.begin(), m_set_pkChrState.end()); #endif for_each(v.begin(), v.end(), bind2nd(mem_fun(&CHARACTER::UpdateStateMachine), iPulse)); } } // 산타 따로 업데이트 { CharacterVectorInteractor i; if (CHARACTER_MANAGER::instance().GetCharactersByRaceNum(xmas::MOB_SANTA_VNUM, i)) { for_each(i.begin(), i.end(), bind2nd(mem_fun(&CHARACTER::UpdateStateMachine), iPulse)); } } // 1시간에 한번씩 몹 사냥 개수 기록 if (0 == (iPulse % PASSES_PER_SEC(3600))) { for (itertype(m_map_dwMobKillCount) it = m_map_dwMobKillCount.begin(); it != m_map_dwMobKillCount.end(); ++it) DBManager::instance().SendMoneyLog(MONEY_LOG_MONSTER_KILL, it->first, it->second); #ifdef _USE_SERVER_KEY_ extern bool Metin2Server_IsInvalid(); extern bool g_bShutdown; if (Metin2Server_IsInvalid()) { g_bShutdown = true; } #endif m_map_dwMobKillCount.clear(); } // 테스트 서버에서는 60초마다 캐릭터 개수를 센다 if (test_server && 0 == (iPulse % PASSES_PER_SEC(60))) sys_log(0, "CHARACTER COUNT vid %zu pid %zu", m_map_pkChrByVID.size(), m_map_pkChrByPID.size()); // 지연된 DestroyCharacter 하기 FlushPendingDestroy(); } sectree.h line 90 inside find_if function change the it_tree declaration with this #ifdef __clang__ LPSECTREE_LIST::const_iterator it_tree = m_neighbor_list.begin(); #else LPSECTREE_LIST::iterator it_tree = m_neighbor_list.begin(); #endif stdafx.h line 24 after <vector> include change all the part that include boost/unordered_map and tr1/unordered_map to this: #if defined(__clang__) #include <float.h> #include <unordered_map> #include <unordered_set> #define TR1_NS std #elif defined(__GNUC__) #include <float.h> #include <tr1/unordered_map> #include <tr1/unordered_set> #define TR1_NS std::tr1 #elif defined(_MSC_VER) #include <boost/unordered_map.hpp> #include <boost/unordered_set.hpp> #define TR1_NS boost #define isdigit iswdigit #define isspace iswspace #endif We've builded our server on x64 machine, but we created a x86 application. Why? Compiling on x64 increases the value of some C types (eg.: sizeof(int) return 4bit in x86 and 8bit on x64). Let's take for example this packet: typedef struct command_script_button { BYTE header; unsigned int idx; } TPacketCGScriptButton; The size of this packet will be 5 on x86 program, and 9 on a x64 program. If we use a x86 metin2 client, the server will except 9 bytes to be received however it will only receive 5 bytes, leaving the server listening for the 4 remaning bytes. The first, possible fix for x64, is building the metin2 client on x64 bit, loosing compatibily with old x86 PCs. The second, is to change all the packets on client/server to the same data (eg.: int becames int32 etc...), so the server builded in x64 will understand that the int packets are 4 byte and not 8; but, convering (on the rest of the server) a 8byte int into a 4byte int could lead up to loosing data. The wrong fix is to define int,long with int32 and long32 (for example). This won't fix nothing because it's like you're using a x86 program, so you could not use any x64 advantage. PS: Sorry for bad english, i hope it's now more clear for everyone
  24. Hi Devs! Anyone can you help me? How to move the Sash in Inventory from CostumeWindow? Thanks the replies, and sorry for my english.
  25. So my problem is that it says Procedureentrypoint "_GrannyUpdateModelMatrix@16" was not found on the dll "......./metin2client.exe" Can someone help me to fix it :)?
×