Jump to content
metin2dev

metin2-factory

Members
  • Content count

    157
  • Joined

  • Last visited

metin2-factory last won the day on September 27

metin2-factory had the most liked content!

Community Reputation

110 Excellent

2 Followers

About metin2-factory

  • Rank
    Friendly

Profile Information

  • Gender
    Male

Recent Profile Visitors

1,771 profile views
  1. [TOOL]Advanced Regen Editor

    A nice update has been released, look above
  2. [New]Demon tower

    Looks good!
  3. open Memory leak

    Every time you're using direct query it allocates new object of SQLMSg and it returns the pointer to this object. it'd be preffered to be handled by an auto_ptr so it would deallocate all of the containing dynamic objects inside of SQLMsg automatically when SQLMsg destructor is called. The reason they used a delete in this call is because they probably knew for certian they wouldn't use this pointer to the object anymore and it can potentially cause a memory leak. My advice is to always use an auto_ptr as it saves you the trouble to remember where and when to delete this pointer. *Incase you know for sure that you won't use the SQLMsg pointer object anymore(mostly for actions such as UPDATE / DELETE / INSERT) then you should add delete before the directquery as you mentioned above(Although, you are still in risk that the dynamically allocated objects inside SQLMsg will not be free'd). Hope i made it clear.
  4. [TOOL]Advanced Regen Editor

    Mate, So far i'm the one with 100+ rank/likes. i have contributed to this forum much more than you that's for sure. Surf around the C++ code release section and find for yourself how many useful guides i made. all of my stuff worked and working today 100%. I have never posted any leeched code/tool and i have no intention to do so. So take your lame ass some where else/keep your thoughts to yourself. Thanks. P.S Here's a proof for the efficient difference between my tool and the old italian tool. If you have a little bit of programming knowledge you'll easily realize which one is better. My code: Italian tool code:
  5. [TOOL]Advanced Regen Editor

    What a load of crap. there is a similar tool made long time ago(in Italian language) but i took nothing out of this tool code except a few layout design ideas. the italian tool is poorly coded with unefficient & un-maintainable code, without seperation of UI and Logic,No containers, and the list goes on and on. Here, i have made it fully english + coded the tool from scratch(in an efficient,maintainable way) + coded new features that no tool existing today has. and i have obfuscated it so leecher dumbass like yourself can't steal the code. You don't have to trust me but it's a fact that this tool has features that no other tool has today. And yes, the tool was built with wpf. P.S About 90% of these features do not exist in the old italian tool.
  6. [TOOL]Advanced Regen Editor

    Advanced Regen Editor I have worked in the past week on a new regen tool(made in C#-WPF) to make the life easier for the mappers/server owner between us. It is an advanced regen tool that includes all the basic functions + new ones such as: mob/group file viewer. Importing regen file. Remember information - Remember the last data entered such as direction, respawn time,count etc. Color Character by color(Mob-Red, Stone-Blue, Boss-turquoise, NPC-Belge, Group-Black). Add a character - Left click. Remove a character - right click on a character dot. Load MOB/Group information - select mob_names.txt/group.txt to view information on a data grid(shown on screen shots below). When choosing a group.txt make sure you have type field set on group. Ctrl Z Feature - Reverse action, that means that if you added a character it will be deleted and if you removed a character it will be added back. Separation of exported files - Files will be exported upon the type of the map character, if you had stone,boss and npc character then stone.txt,boss.txt and npc.txt will be generated. If you find any bugs, please reply here with the bug information in specific details. Please Like this thread if you find my tool useful! Ⓒ Metin2 Guild Wars. Version 1.0 Download Link: https://mega.nz/#!bM8Hmbgb!emV186zxV8fBNqVq6QWMTdWN4GIo0ss590QFh-p8lcM Update 06/10/2017: Zoom in/out feature has been added. View entities seperately feature has been added. Import regen bug has been fixed. Enjoy! Version 1.1 Download Link: https://mega.nz/#!2dNmALib!ysMvKxw47vc5_3Rq7l1y_89pIfJG0xReu_YI-ElRsDs Virus total: https://www.virustotal.com/#/file/876d21f140e3be617c0587377b4e7cdfc3fb50cbe6a7d14d70c69b61cd183924/detection Enjoy!!
  7. c++ [C++]Reload map regens ingame

    Well, i didn't see someone published it before until now. and if you look at the implementations of his and mine, you could easily notice the difference. Anyway, it doesn't hurt
  8. c++ [C++]Reload map regens ingame

    This feature was created custom made by me. but a similar version may be included in other servers. and np It should work, you have an issue with your server files/src. I can help you and fix it(not for free), send me a pm.
  9. c++ [C++]Reload map regens ingame

    Author: (c) Metin2 Factory/Guild Wars This implementation includes a new ingame GM command: /reload_regen which reloads ingame current map regen(regen.txt,boss.txt,stones.txt,etc) including server_attr Please follow the following steps: Open cmd.cpp look for: ACMD(do_purge); Add below: ACMD(reload_regen); Look for: { "nowar", do_nowar, 0, POS_DEAD, GM_PLAYER }, Add below: { "reload_regen", reload_regen , 0, POS_DEAD, GM_GOD }, Open cmd_gm.cpp look for the end of ACMD(do_purge) function and add below: ACMD(reload_regen) { std::vector<LPEVENT> regenEvent = SECTREE_MANAGER::instance().GetRegenEvent(ch->GetMapIndex()); for (std::vector<LPEVENT>::iterator it = regenEvent.begin(); it != regenEvent.end(); ++it) { event_cancel(&(*it)); } FuncPurge func(ch); func.m_bAll = true; LPSECTREE_MAP lm = SECTREE_MANAGER::instance().GetMap(ch->GetMapIndex()); lm->for_each(func); char * mapIndex; mapIndex = number_to_str(ch->GetMapIndex(), 10); SECTREE_MANAGER::instance().BuildMap(mapIndex, LocaleService_GetMapPath().c_str()); } Open sectree_manager.cpp Look for the end of int SECTREE_MANAGER::Build(const char * c_pszListFileName, const char* c_pszMapBasePath) function Add below: int SECTREE_MANAGER::BuildMap(const char * c_pszMapID, const char* c_pszMapBasePath) { std::string mapIndexPath = c_pszMapBasePath; mapIndexPath += "/index"; int test; FILE* fp = fopen(mapIndexPath.c_str(), "rb"); if (fp == NULL) { return 0; } std::string line; char buf[256 + 1]; while (fgets(buf, 256, fp)) { std::string tmp = buf; if (tmp.find(c_pszMapID) != std::string::npos) { printf("found!!"); break; } } char szFilename[256]; char szMapName[256]; int iIndex; *strrchr(buf, '\n') = '\0'; if (!strncmp(buf, "//", 2) || *buf == '#') return 0; sscanf(buf, " %d %s ", &iIndex, szMapName); snprintf(szFilename, sizeof(szFilename), "%s/%s/Setting.txt", c_pszMapBasePath, szMapName); TMapSetting setting; setting.iIndex = iIndex; if (!LoadSettingFile(iIndex, szFilename, setting)) { sys_err("can't load file %s in LoadSettingFile", szFilename); return 0; } snprintf(szFilename, sizeof(szFilename), "%s/%s/Town.txt", c_pszMapBasePath, szMapName); if (!LoadMapRegion(szFilename, setting, szMapName)) { sys_err("can't load file %s in LoadMapRegion", szFilename); return 0; } if (true == test_server) sys_log(0, "[BUILD] Build %s %s %d ", c_pszMapBasePath, szMapName, iIndex); // ¸ÕÀú ÀÌ ¼­¹ö¿¡¼­ ÀÌ ¸ÊÀÇ ¸ó½ºÅ͸¦ ½ºÆùÇØ¾ß Çϴ°¡ È®ÀÎ ÇÑ´Ù. if (map_allow_find(iIndex)) { LPSECTREE_MAP pkMapSectree = BuildSectreeFromSetting(setting); m_map_pkSectree.insert(std::map<DWORD, LPSECTREE_MAP>::value_type(iIndex, pkMapSectree)); snprintf(szFilename, sizeof(szFilename), "%s/%s/server_attr", c_pszMapBasePath, szMapName); LoadAttribute(pkMapSectree, szFilename, setting); snprintf(szFilename, sizeof(szFilename), "%s/%s/regen.txt", c_pszMapBasePath, szMapName); regen_load(szFilename, setting.iIndex, setting.iBaseX, setting.iBaseY); snprintf(szFilename, sizeof(szFilename), "%s/%s/npc.txt", c_pszMapBasePath, szMapName); regen_load(szFilename, setting.iIndex, setting.iBaseX, setting.iBaseY); snprintf(szFilename, sizeof(szFilename), "%s/%s/boss.txt", c_pszMapBasePath, szMapName); regen_load(szFilename, setting.iIndex, setting.iBaseX, setting.iBaseY); snprintf(szFilename, sizeof(szFilename), "%s/%s/stone.txt", c_pszMapBasePath, szMapName); regen_load(szFilename, setting.iIndex, setting.iBaseX, setting.iBaseY); snprintf(szFilename, sizeof(szFilename), "%s/%s/dungeon.txt", c_pszMapBasePath, szMapName); LoadDungeon(iIndex, szFilename); pkMapSectree->Build(); } return 1; } Open regen.cpp Look for: regen->event = event_create(regen_event, info, PASSES_PER_SEC(number(0, 16)) + PASSES_PER_SEC(regen->time)); add below: SECTREE_MANAGER::instance().AddRegenEventToMap(lMapIndex, regen->event); Open sectree_manager.h Look for: std::map<DWORD, std::vector<npc_info> > m_mapNPCPosition; Add below: std::map<long, std::vector<LPEVENT>> m_mapRegen; Look for: bool GetRandomLocation(long lMapIndex, PIXEL_POSITION & r_pos, DWORD dwCurrentX = 0, DWORD dwCurrentY = 0, int iMaxDistance = 0); Add below: void AddRegenEventToMap(long lMapIndex, LPEVENT event) { m_mapRegen[lMapIndex].push_back(event); } std::vector<LPEVENT> GetRegenEvent(long lMapIndex) { return m_mapRegen[lMapIndex]; } Open utils.h from common folder Look for: /*----atoi function-----*/ Add below: /*----itoa function-----*/ inline char* number_to_str(int val, int base) { static char buf[32] = { 0 }; int i = 30; for (; val && i; --i, val /= base) buf[i] = "0123456789abcdef"[val % base]; return &buf[i + 1]; } /*----itoa function-----*/ Recompile the source and enjoy.
  10. Hi send me a pm with your skype i saw the post where you were looking for a web developer

  11. open Dungeon function question

    If you want a seperate dungeon for each different player you should use d.join instead of pc.warp d.joim(mapindex) Or, recode d.new_jump_party to work also for single players.
  12. Looking for proffesional metin2 animator

    I'm working on a big project, looking for proffesional animator that has previous knowledge with 3dmax. Paying well. Send me a forum PM for more info.
  13. Search Professional web developer.

    Hi, i'm searching Professional web developer. Paying well, for more info send me a forum PM and we will talk on skype.
  14. Begin

    Look at the client/server source code. learn the classes/functions hierarchy. Add/Modify slowly the source and experience the changes in game. Learn the Client/Server packet structure and try adding your own packets to transmit data from client to server and vice versa. Take a look at some released systems from known people and study what they did. GL.
  15. [C++/PY] Stackable refine scrolls

    Topic has been updated.
×