Jump to content

Zeke

Active Member
  • Posts

    81
  • Joined

  • Last visited

  • Days Won

    6
  • Feedback

    0%

Posts posted by Zeke

  1. 4 hours ago, Heathcliff™ said:

     

     

    Client still inform you that you have icon problems with xy item, and your client won't crash bcs of this small "error". This correction is just for not flooding it every second if you have missing icon. It will inform you once, and set a default image for it as I mentioned before. ?

    Its good idea to help someone like that. on my project tho that i want everything under control i would like a logic bug (logic because you can't have an item with out an image) to crash. so i would throw an errror there ^^ its just different point of view. your idea is good tho for the other ones than me :P 

    • Love 1
  2. 1 hour ago, Erebus said:

    It sounds neat, but the design still needs some work to it.

    Other than that it looks cool!

    Yeah there will be a skin system per server for custom designs thats just for a starting version. for the start i dont point at the view but on the code. skins will be better with time ^_^

  3. Hello community long time no see.

    Some weeks ago i started a project for metin2wiki and i started made it as platform(Im not selling/giving code) that someone will can login/register pay a price per month(not yet) upload all the needed files(item.proto.txt etc etc) and our platform make the wiki for you(we have the hosting and it will be like: www.wiki.com/servername but you can take it as iframe on your site or make your domain point on this). i dont want to be in details for now the reason i made this post is that in some weeks from now i will need some online servers to test my wiki(of course completly free). i dont need access to your database or something like this just .txt files and some dumps from sql files(like refine_proto.sql) here is 1 picture(2 to show the multilanguage).

    1 picture 1000 words

    spacer.png

     

    spacer.png

     

    This is not a shitty php site. for that one i used JS/NODE/VUE/VEUX/QUASAR. you dont have seen a faster wiki site in your life :P of course no need for a single reload of page ^^. if a server with 50+ online want to join you can add me on discord: Zeke#3984

    • Love 1
  4. 3 hours ago, Fleon said:

    from this i understood that you know nothing about it, pdo is a php extension/driver and MySQL is a database so this must be some ripoff that i won't even look at.

    It always have been a PHP problem, since PHP pre 7 lacks a lot on security.

    Please check them out to learn more:

    https://en.wikipedia.org/wiki/MySQL

    https://en.wikipedia.org/wiki/PHP#PDO

    You are totally right but pdo its more paramatized from mysql (not mysqli cause mysqli is updated to) so i can me something like "more secure"
    the thing i want to say is that 80% metin2 public sites now are with old code(mysql) and you can find some backdoors

    • Metin2 Dev 2
  5. M2 Download Center

    This is the hidden content, please
    ( Internal )

    Screen:

    Spoiler

    171553lwfKbeI.jpg

     

    Video:

    https://metin2.download/picture/7qv2nIP9i5lgOj6R72ca6EztdGrd2CIL/.gif

     

    Why is this feature good?

    Cause every yang goes on this little window and players can see the chat log with out the yang spamming when the farm ^^

    Download: 

    This is the hidden content, please

    • Metin2 Dev 121
    • Eyes 1
    • Dislove 1
    • Angry 2
    • Think 4
    • Good 31
    • Love 6
    • Love 80
  6. 11 minutes ago, WeedHex said:

    I'm looking for the c++ change for make  pickup function more faster.

    It already exist. Can someone share it for us?

    Go on client source PythonPlayer and search for this:
     

    void CPythonPlayer::SendClickItemPacket(DWORD dwIID)

    if you do s_dwNextTCPTime = 0 and comment the s_dwNextTCPTime=dwCurTime + 500; down there it will have no delay. example code:
     

    
    void CPythonPlayer::SendClickItemPacket(DWORD dwIID)
    {
    	if (IsObserverMode())
    		return;
    
    	static DWORD s_dwNextTCPTime = 0;
    
    	DWORD dwCurTime=ELTimer_GetMSec();
    
    	if (dwCurTime >= s_dwNextTCPTime)
    	{
    		// s_dwNextTCPTime=dwCurTime + 500;
    
    		const char * c_szOwnerName;
    		if (!CPythonItem::Instance().GetOwnership(dwIID, &c_szOwnerName))
    			return;
    
    		if (strlen(c_szOwnerName) > 0)
    		if (0 != strcmp(c_szOwnerName, GetName()))
    		{
    			CItemData * pItemData;
    			if (!CItemManager::Instance().GetItemDataPointer(CPythonItem::Instance().GetVirtualNumberOfGroundItem(dwIID), &pItemData))
    			{
    				Tracenf("CPythonPlayer::SendClickItemPacket(dwIID=%d) : Non-exist item.", dwIID);
    				return;
    			}
    			if (!IsPartyMemberByName(c_szOwnerName) || pItemData->IsAntiFlag(CItemData::ITEM_ANTIFLAG_DROP | CItemData::ITEM_ANTIFLAG_GIVE))
    			{
    				PyCallClassMemberFunc(m_ppyGameWindow, "OnCannotPickItem", Py_BuildValue("()"));
    				return;
    			}
    		}
    
    		CPythonNetworkStream& rkNetStream=CPythonNetworkStream::Instance();
    		rkNetStream.SendItemPickUpPacket(dwIID);
    	}
    }

     

    • Love 2
  7. 11 minutes ago, DeYaN. said:

    Hello there ,  i have lag on my server because the log.log register too many comands ( aprox 4.000.000  every 3 days ) and i want to disable it ..

    I try to comment with // at Query but i don`t think it`s perfect...

    please take a look !

      Hide contents

    #include "stdafx.h"
    #include "constants.h"
    #include "config.h"
    #include "log.h"

    #include "char.h"
    #include "desc.h"
    #include "item.h"
    #include "locale_service.h"

    static char    __escape_hint[1024];

    LogManager::LogManager() : m_bIsConnect(false)
    {
    }

    LogManager::~LogManager()
    {
    }

    bool LogManager::Connect(const char * host, const int port, const char * user, const char * pwd, const char * db)
    {
        if (m_sql.Setup(host, user, pwd, db, g_stLocale.c_str(), false, port))
            m_bIsConnect = true;

        return m_bIsConnect;
    }

    void LogManager::Query(const char * c_pszFormat, ...)
    {
        char szQuery[4096];
        va_list args;

        va_start(args, c_pszFormat);
        vsnprintf(szQuery, sizeof(szQuery), c_pszFormat, args);
        va_end(args);

        if (test_server)
            sys_log(0, "LOG: %s", szQuery);

        m_sql.AsyncQuery(szQuery);
    }

    bool LogManager::IsConnected()
    {
        return m_bIsConnect;
    }

    void LogManager::ItemLog(DWORD dwPID, DWORD x, DWORD y, DWORD dwItemID, const char * c_pszText, const char * c_pszHint, const char * c_pszIP, DWORD dwVnum)
    {
        m_sql.EscapeString(__escape_hint, sizeof(__escape_hint), c_pszHint, strlen(c_pszHint));

        //Query("INSERT DELAYED INTO log%s (type, time, who, x, y, what, how, hint, ip, vnum) VALUES('ITEM', NOW(), %u, %u, %u, %u, '%s', '%s', '%s', %u)",
                //get_table_postfix(), dwPID, x, y, dwItemID, c_pszText, __escape_hint, c_pszIP, dwVnum);
    }

    void LogManager::ItemLog(LPCHARACTER ch, LPITEM item, const char * c_pszText, const char * c_pszHint)
    {
        if (NULL == ch || NULL == item)
        {
            sys_err("character or item nil (ch %p item %p text %s)", get_pointer(ch), get_pointer(item), c_pszText);
            return;
        }

        ItemLog(ch->GetPlayerID(), ch->GetX(), ch->GetY(), item->GetID(),
                NULL == c_pszText ? "" : c_pszText,
                   c_pszHint, ch->GetDesc() ? ch->GetDesc()->GetHostName() : "",
                   item->GetOriginalVnum());
    }

    void LogManager::ItemLog(LPCHARACTER ch, int itemID, int itemVnum, const char * c_pszText, const char * c_pszHint)
    {
        ItemLog(ch->GetPlayerID(), ch->GetX(), ch->GetY(), itemID, c_pszText, c_pszHint, ch->GetDesc() ? ch->GetDesc()->GetHostName() : "", itemVnum);
    }

    void LogManager::CharLog(DWORD dwPID, DWORD x, DWORD y, DWORD dwValue, const char * c_pszText, const char * c_pszHint, const char * c_pszIP)
    {
        m_sql.EscapeString(__escape_hint, sizeof(__escape_hint), c_pszHint, strlen(c_pszHint));

        //Query("INSERT DELAYED INTO log%s (type, time, who, x, y, what, how, hint, ip) VALUES('CHARACTER', NOW(), %u, %u, %u, %u, '%s', '%s', '%s')",
                //get_table_postfix(), dwPID, x, y, dwValue, c_pszText, __escape_hint, c_pszIP);
    }

    void LogManager::CharLog(LPCHARACTER ch, DWORD dw, const char * c_pszText, const char * c_pszHint)
    {
        if (ch)
            CharLog(ch->GetPlayerID(), ch->GetX(), ch->GetY(), dw, c_pszText, c_pszHint, ch->GetDesc() ? ch->GetDesc()->GetHostName() : "");
        else
            CharLog(0, 0, 0, dw, c_pszText, c_pszHint, "");
    }

    void LogManager::LoginLog(bool isLogin, DWORD dwAccountID, DWORD dwPID, BYTE bLevel, BYTE bJob, DWORD dwPlayTime)
    {
        Query("INSERT DELAYED INTO loginlog%s (type, time, channel, account_id, pid, level, job, playtime) VALUES (%s, NOW(), %d, %u, %u, %d, %d, %u)",
                get_table_postfix(), isLogin ? "'LOGIN'" : "'LOGOUT'", g_bChannel, dwAccountID, dwPID, bLevel, bJob, dwPlayTime);
    }

    void LogManager::MoneyLog(BYTE type, DWORD vnum, int gold)
    {
        if (type == MONEY_LOG_RESERVED || type >= MONEY_LOG_TYPE_MAX_NUM)
        {
            sys_err("TYPE ERROR: type %d vnum %u gold %d", type, vnum, gold);
            return;
        }

        //Query("INSERT DELAYED INTO money_log%s VALUES (NOW(), %d, %d, %d)", get_table_postfix(), type, vnum, gold);
    }

    void LogManager::HackLog(const char * c_pszHackName, const char * c_pszLogin, const char * c_pszName, const char * c_pszIP)
    {
        m_sql.EscapeString(__escape_hint, sizeof(__escape_hint), c_pszHackName, strlen(c_pszHackName));

        Query("INSERT INTO hack_log (time, login, name, ip, server, why) VALUES(NOW(), '%s', '%s', '%s', '%s', '%s')", c_pszLogin, c_pszName, c_pszIP, g_stHostname.c_str(), __escape_hint);
    }

    void LogManager::HackLog(const char * c_pszHackName, LPCHARACTER ch)
    {
        if (ch->GetDesc())
        {
            HackLog(c_pszHackName, 
                    ch->GetDesc()->GetAccountTable().login,
                    ch->GetName(),
                    ch->GetDesc()->GetHostName());
        }
    }

    void LogManager::HackCRCLog(const char * c_pszHackName, const char * c_pszLogin, const char * c_pszName, const char * c_pszIP, DWORD dwCRC)
    {
        Query("INSERT INTO hack_crc_log (time, login, name, ip, server, why, crc) VALUES(NOW(), '%s', '%s', '%s', '%s', '%s', %u)", c_pszLogin, c_pszName, c_pszIP, g_stHostname.c_str(), c_pszHackName, dwCRC);
    }

    void LogManager::PCBangLoginLog(DWORD dwPCBangID, const char* c_szPCBangIP, DWORD dwPlayerID, DWORD dwPlayTime)
    {
        Query("INSERT INTO pcbang_loginlog (time, pcbang_id, ip, pid, play_time) VALUES (NOW(), %u, '%s', %u, %u)",
                dwPCBangID, c_szPCBangIP, dwPlayerID, dwPlayTime);
    }

    void LogManager::GoldBarLog(DWORD dwPID, DWORD dwItemID, GOLDBAR_HOW eHow, const char* c_pszHint)
    {
        char szHow[32+1];
        
        switch (eHow)
        {
            case PERSONAL_SHOP_BUY:
                snprintf(szHow, sizeof(szHow), "'BUY'");
                break;
                
            case PERSONAL_SHOP_SELL:
                snprintf(szHow, sizeof(szHow), "'SELL'");
                break;
                
            case SHOP_BUY:
                snprintf(szHow, sizeof(szHow), "'SHOP_BUY'");
                break;
                
            case SHOP_SELL:
                snprintf(szHow, sizeof(szHow), "'SHOP_SELL'");
                break;
                
            case EXCHANGE_TAKE:
                snprintf(szHow, sizeof(szHow), "'EXCHANGE_TAKE'");
                break;
                
            case EXCHANGE_GIVE:
                snprintf(szHow, sizeof(szHow), "'EXCHANGE_GIVE'");
                break;

            case QUEST:
                snprintf(szHow, sizeof(szHow), "'QUEST'");
                break;

            default:
                snprintf(szHow, sizeof(szHow), "''");
                break;
        }
        
        //Query("INSERT DELAYED INTO goldlog%s (date, time, pid, what, how, hint) VALUES(CURDATE(), CURTIME(), %u, %u, %s, '%s')", 
                //get_table_postfix(), dwPID, dwItemID, szHow, c_pszHint);
    }

    void LogManager::CubeLog(DWORD dwPID, DWORD x, DWORD y, DWORD item_vnum, DWORD item_uid, int item_count, bool success)
    {
        //Query("INSERT DELAYED INTO cube%s (pid, time, x, y, item_vnum, item_uid, item_count, success) "
                //"VALUES(%u, NOW(), %u, %u, %u, %u, %d, %d)",
                //get_table_postfix(), dwPID, x, y, item_vnum, item_uid, item_count, success?1:0);
    }

    void LogManager::SpeedHackLog(DWORD pid, DWORD x, DWORD y, int hack_count)
    {
        Query("INSERT INTO speed_hack%s (pid, time, x, y, hack_count) "
                "VALUES(%u, NOW(), %u, %u, %d)",
                get_table_postfix(), pid, x, y, hack_count);
    }

    void LogManager::ChangeNameLog(DWORD pid, const char *old_name, const char *new_name, const char *ip)
    {
        //Query("INSERT DELAYED INTO change_name%s (pid, old_name, new_name, time, ip) "
                //"VALUES(%u, '%s', '%s', NOW(), '%s') ",
                //get_table_postfix(), pid, old_name, new_name, ip);
    }

    void LogManager::GMCommandLog(DWORD dwPID, const char* szName, const char* szIP, BYTE byChannel, const char* szCommand)
    {
        m_sql.EscapeString(__escape_hint, sizeof(__escape_hint), szCommand, strlen(szCommand));

        Query("INSERT DELAYED INTO command_log%s (userid, server, ip, port, username, command, date ) "
                "VALUES(%u, 999, '%s', %u, '%s', '%s', NOW()) ",
                get_table_postfix(), dwPID, szIP, byChannel, szName, __escape_hint);
    }

    void LogManager::RefineLog(DWORD pid, const char* item_name, DWORD item_id, int item_refine_level, int is_success, const char* how)
    {
        m_sql.EscapeString(__escape_hint, sizeof(__escape_hint), item_name, strlen(item_name));

        //Query("INSERT INTO refinelog%s (pid, item_name, item_id, step, time, is_success, setType) VALUES(%u, '%s', %u, %d, NOW(), %d, '%s')",
                //get_table_postfix(), pid, __escape_hint, item_id, item_refine_level, is_success, how);
    }


    void LogManager::ShoutLog(BYTE bChannel, BYTE bEmpire, const char * pszText)
    {
        m_sql.EscapeString(__escape_hint, sizeof(__escape_hint), pszText, strlen(pszText));

        //Query("INSERT INTO shout_log%s VALUES(NOW(), %d, %d,'%s')", get_table_postfix(), bChannel, bEmpire, __escape_hint);
    }

    void LogManager::LevelLog(LPCHARACTER pChar, unsigned int level, unsigned int playhour)
    {
        if (true == LC_IsEurope())
        {
            DWORD aid = 0;

            if (NULL != pChar->GetDesc())
            {
                aid = pChar->GetDesc()->GetAccountTable().id;
            }

            //Query("REPLACE INTO levellog%s (name, level, time, account_id, pid, playtime) VALUES('%s', %u, NOW(), %u, %u, %d)",
                    //get_table_postfix(), pChar->GetName(), level, aid, pChar->GetPlayerID(), playhour);
        }
        else
        {
            //Query("REPLACE INTO levellog%s (name, level, time, playtime) VALUES('%s', %u, NOW(), %d)",
                    //get_table_postfix(), pChar->GetName(), level, playhour);
        }
    }

    void LogManager::BootLog(const char * c_pszHostName, BYTE bChannel)
    {
        //Query("INSERT INTO bootlog (time, hostname, channel) VALUES(NOW(), '%s', %d)",
                //c_pszHostName, bChannel);
    }

    void LogManager::VCardLog(DWORD vcard_id, DWORD x, DWORD y, const char * hostname, const char * giver_name, const char * giver_ip, const char * taker_name, const char * taker_ip)
    {
        //Query("INSERT DELAYED INTO vcard_log (vcard_id, x, y, hostname, giver_name, giver_ip, taker_name, taker_ip) VALUES(%u, %u, %u, '%s', '%s', '%s', '%s', '%s')",
                //vcard_id, x, y, hostname, giver_name, giver_ip, taker_name, taker_ip);
    }

    void LogManager::FishLog(DWORD dwPID, int prob_idx, int fish_id, int fish_level, DWORD dwMiliseconds, DWORD dwVnum, DWORD dwValue)
    {
        //Query("INSERT INTO fish_log%s VALUES(NOW(), %u, %d, %u, %d, %u, %u, %u)",
                //get_table_postfix(),
                //dwPID,
                //prob_idx,
                //fish_id,
                //fish_level,
                //dwMiliseconds,
                //dwVnum,
                //dwValue);
    }

    void LogManager::QuestRewardLog(const char * c_pszQuestName, DWORD dwPID, DWORD dwLevel, int iValue1, int iValue2)
    {
        Query("INSERT INTO quest_reward_log%s VALUES('%s',%u,%u,2,%u,%u,NOW())", 
                get_table_postfix(), 
                c_pszQuestName,
                dwPID,
                dwLevel,
                iValue1, 
                iValue2);
    }

    void LogManager::DetailLoginLog(bool isLogin, LPCHARACTER ch)
    {
        if (NULL == ch->GetDesc())
            return;

        if (true == isLogin)
        {
            Query("INSERT INTO loginlog2(type, is_gm, login_time, channel, account_id, pid, ip, client_version) "
                    "VALUES('INVALID', %s, NOW(), %d, %u, %u, inet_aton('%s'), '%s')",
                    ch->IsGM() == true ? "'Y'" : "'N'",
                    g_bChannel,
                    ch->GetDesc()->GetAccountTable().id,
                    ch->GetPlayerID(),
                    ch->GetDesc()->GetHostName(),
                    ch->GetDesc()->GetClientVersion());
        }
        else
        {
            Query("SET @i = (SELECT MAX(id) FROM loginlog2 WHERE account_id=%u AND pid=%u)",
                    ch->GetDesc()->GetAccountTable().id,
                    ch->GetPlayerID());

            Query("UPDATE loginlog2 SET type='VALID', logout_time=NOW(), playtime=TIMEDIFF(logout_time,login_time) WHERE id=@i");
        }
    }

    void LogManager::DragonSlayLog(DWORD dwGuildID, DWORD dwDragonVnum, DWORD dwStartTime, DWORD dwEndTime)
    {
        //Query( "INSERT INTO dragon_slay_log%s VALUES( %d, %d, FROM_UNIXTIME(%d), FROM_UNIXTIME(%d) )",
                //get_table_postfix(),
                //dwGuildID, dwDragonVnum, dwStartTime, dwEndTime);
    }

    void LogManager::HackShieldLog(unsigned long ErrorCode, LPCHARACTER ch)
    {
        struct in_addr st_addr;

    #ifndef __WIN32__
        if (0 == inet_aton(ch->GetDesc()->GetHostName(), &st_addr))
    #else
        unsigned long in_address;
        in_address = inet_addr(ch->GetDesc()->GetHostName());
        st_addr.s_addr = in_address;
        if (INADDR_NONE == in_address)
    #endif
        {
            Query( "INSERT INTO hackshield_log(time, account_id, login, pid, name, reason, ip) "
                    "VALUES(NOW(), %u, '%s', %u, '%s', %u, 0)",
                    ch->GetDesc()->GetAccountTable().id, ch->GetDesc()->GetAccountTable().login,
                    ch->GetPlayerID(), ch->GetName(),
                    ErrorCode);
        }
        else
        {
            Query( "INSERT INTO hackshield_log(time, account_id, login, pid, name, reason, ip) "
                    "VALUES(NOW(), %u, '%s', %u, '%s', %u, inet_aton('%s'))",
                    ch->GetDesc()->GetAccountTable().id, ch->GetDesc()->GetAccountTable().login,
                    ch->GetPlayerID(), ch->GetName(),
                    ErrorCode,
                    ch->GetDesc()->GetHostName());
        }
    }

     

    Thats a way xD but the better way its to search where this log functions you dont want called on your source and comment this or make it with defines if you want someday to open them again

  8. 7 minutes ago, bumxd said:

    i need what can see empire flag on VIP too, now i have this bug: https://metin2.download/picture/4BDVzzIuFLXS3y2qgBS3SAMT7El4lI85/.png i see myself empire flag, when i change costume, effect empire flag is off, and all good will, but after teleport again will empire flag myself.. and other player can empire flag remove(if change costume in costume slot)

    my instancebase.cpp function:

      Hide contents

    BOOL CInstanceBase::IsSameEmpire(CInstanceBase& rkInstDst)

    {

    if (0 == rkInstDst.m_dwEmpireID)

    return TRUE;

    if (IsGameMaster())

    return TRUE;

     

    // #ifdef __ONEX_VIP__

    // if (IsVIP())

    // return TRUE;

    // #endif

    if (rkInstDst.IsGameMaster())

    return TRUE;

     

    // #ifdef __ONEX_VIP__

    // if (rkInstDst.IsVIP())

    // return TRUE;

    // #endif

    if (rkInstDst.m_dwEmpireID==m_dwEmpireID)

    return TRUE;

    return FALSE;

    }

    instancebaseeffect.cpp function:

      Hide contents

    void CInstanceBase::__AttachEmpireEffect(DWORD eEmpire)

    {

    if (!__IsExistMainInstance())

    return;

     

    CInstanceBase* pkInstMain=__GetMainInstancePtr();

    if (IsWarp())

    return;

    if (IsObject())

    return;

    if (IsFlag())

    return;

    if (IsResource())

    return;

    if (pkInstMain->IsGameMaster())

    {

    }

    #ifdef __ONEX_VIP__

    else if (pkInstMain->IsVIP())

    {

    }

    #endif

    else

    {

    if (pkInstMain->IsSameEmpire(*this))

    return;

    // HIDE_OTHER_EMPIRE_EUNHYEONG_ASSASSIN

    if (IsAffect(AFFECT_EUNHYEONG))

    return;

    // END_OF_HIDE_OTHER_EMPIRE_EUNHYEONG_ASSASSIN

    }

    if (IsGameMaster())

    return;

     

    // #ifdef __ONEX_VIP__

    // if (IsVIP())

    // return;

    // #endif

    __EffectContainer_AttachEffect(EFFECT_EMPIRE+eEmpire);

    }

     

    You dont need to show the flag when player is vip?
    instancebaseeffect.cpp
    replace this:
     

    else if (pkInstMain->IsVIP())
    {
    
    }

    with:
     

    if (pkInstMain->IsVIP())
    	return;

     

  9. 1 hour ago, lexy337 said:

    Hello, I am new to MT2 server creating stuff and i am really into it, but I wasn't able to find anything else but simple tutorials using already made servers files, so I would like to find out more about theory behind it. I have been searching for hours, but I haven't found any articles yet regarding how are server files actually created? Are they whole programmed by authors, is it about reverse engineering, cracking the official ones, how to get the official server file..? If you knew the answers or some articles, guides, resources I would be really glad.

    Have a nice day.

    Lexy337

    Mt2 serverfiles was leaked i think on 2007. i think new versions/updates are fanmade (not surely about all that :P )

  10. 1 hour ago, charparodar said:

    I didn't tell the contrary, I just said that the topic is a complete copy past, because of the text background (is gray)

    I think we aren't supposed to do so much spam, maybe some mod can clean the topic...

    Yeah i copy paste it from the other forum that i post it cause i was bored to write it again. 
    yes. if is possible some mod delete this spam :) 

  11. M2 Download Center

    This is the hidden content, please
    ( Internal )

    Hello community. i had some free time so and i did this. is not something special but someone might want to use it.
     

    Spoiler

    244830Sans-titre-3.png

     

    Download: 

    This is the hidden content, please


    You put your database information on include/dbconfig.

    You put your client download link on index.php variable: $DownloadLink

    IF something not work good just report it here and i will fix it.

    • Metin2 Dev 102
    • Eyes 6
    • Dislove 2
    • Angry 1
    • Not Good 1
    • Confused 4
    • Scream 1
    • Good 65
    • Love 13
    • Love 69
  12. 6 hours ago, Mali61 said:

    :wub:Thanks for your nice comment dude, but I don't share another system on this forum. Because some people know everything and Hard Level Coding. So do you create anything or just criticize others ha Tasho? Please show us your Hard Level Coding Style. 

    Man criticize sometimes is good think. it will make you better everytime someone criticize you like this "your coding is bad" this would be something that i would take it as a test to make my programming skills better. :) 

    • Love 1
  13. Hello guys i have a problem. on my server i have a boss that he need 40-50 players to be killed and this boss have 120 items on drop.
    the problem is that items are dropped but all items are dropped for 1 or 2 players from all this items. what i mean? 
     

    Spoiler

    18386409_1544501498933789_2070637405_n.j

    As you can see on the icon all items are in name House... i want all players to get drop from all this items...

    My mob_drop_item:
     

    Spoiler
    
    Group	Zeron_epic				
    {
    	Mob	6091	
    	Type	drop		
    
    	1	30192	1	90		---Γαλακτώδης χυμός
    	2	30194	1	90		---Ρόπαλο Ορκ
    	3	50135	1	100		---Κουτι με αξεσουαρ
    	4	50727	30	99		---Ρόδο των Βουνών
    	5	50725	30	99		---Πασχαλιά
    	6	50724	30	99		---Σελινόριζα
    	7	50722	30	99		---Καμπανούλα
    	8	50723	30	99		---Άνθος Μανόλιας
    	9	50728	30	99		---Μουριά
    	10	50721	30	99		---Άνθος Ροδακινιάς
    	11	50726	30	99		---Μανιτάρι Τούε
    	12	71015	1	90		---Δαχτυλίδι Εμπειρίας
    	13	71016	1	90		---Γάντια του Κλέφτη
    	14	27992	1	100		---Άσπρο Μαργαριτάρι
    	15	27993	1	100		---Μπλε Μαργαριτάρι
    	16	27994	1	100		---Ματωμένο Μαργαριτάρι
    	17	71129	1	100		---Νύχι δράκου
    	18	71123	1	100		---Λέπι δράκου
    	19	12260	1	80		---Μάσκα τρόμου+0
    	20	12280	1	90		---Κράνος πολεμιστή+0
    	21	12390	1	80		---Κουκούλα Ορκ+0
    	22	12400	1	90		---Κουκούλα αράχνης+0
    	23	12530	1	80		---Κράνος με κέρατα+0
    	24	12540	1	90		---Μαγικό κράνος+0
    	25	12670	1	80		---Καπέλο καρδινάλιου+0
    	26	12680	1	90		---Καπέλο ψυχής+0
    	27	50301	1	99		---Τέχνη Πολέμου του Sun Zi
    	28	50302	1	99		---Τέχνη Πολέμου του Wu Ζi
    	29	50303	1	99		---WeiLiao Zi
    	30	50304	1	90		---Κυριαρχία των Συνδυασμών
    	31	50305	1	90		---Αρχείο Κύριων Συνδυασμών
    	32	50314	1	99		---Βιβλίο Μεταμορφώσεων
    	33	50315	1	99		---Ανώτερες Μεταμορφώσεις
    	34	50316	1	99		---Ανώτατες Μεταμορφώσεις
    	35	50600	1	99		---Εγχειρίδιο Εξόρυξης
    	36	31007	1	90		---Ηφαιστειακή γη
    	37	30019	1	90		---Φλεγόμενη Χαίτη
    	38	70253	1	90		---Πράσινο Βότανο
    	39	70254	1	90		---Μωβ Βότανο
    	40	70251	1	90		---Κόκκινο Βότανο
    	41	70252	1	90		---Μπλε Βότανο
    	42	31076	1	90		---Βότανα ήλιου
    	43	31089	1	90		---Κύβος Λήθης
    	44	31069	1	90		---Ουρί του Παραδείσου
    	45	85011	1	50		---Μαστορική Κορδέλα (απλή)
    	46	50135	1	50		---Κουτι με αξεσουαρ
    	47	50135	1	25		---Κουτι με αξεσουαρ
    	48	50135	1	5		---Κουτι με αξεσουαρ
    	49	50512	1	25		---Λίθος Ουράνιου Τόξου
    	50	50512	1	25		---Λίθος Ουράνιου Τόξου
    	51	71138	1	25		---Epic mount 1
    	52	71139	1	25		---Epic mount 2
    	53	30192	1	90		---Γαλακτώδης χυμός
    	54	30194	1	90		---Ρόπαλο Ορκ
    	55	50135	1	100		---Κουτι με αξεσουαρ
    	56	50727	30	99		---Ρόδο των Βουνών
    	57	50725	30	99		---Πασχαλιά
    	58	50724	30	99		---Σελινόριζα
    	59	50722	30	99		---Καμπανούλα
    	60	50723	30	99		---Άνθος Μανόλιας
    	61	50728	30	99		---Μουριά
    	62	50721	30	99		---Άνθος Ροδακινιάς
    	63	50726	30	99		---Μανιτάρι Τούε
    	64	71015	1	90		---Δαχτυλίδι Εμπειρίας
    	65	71016	1	90		---Γάντια του Κλέφτη
    	66	27992	1	100		---Άσπρο Μαργαριτάρι
    	67	27993	1	100		---Μπλε Μαργαριτάρι
    	68	27994	1	100		---Ματωμένο Μαργαριτάρι
    	69	71129	1	100		---Νύχι δράκου
    	70	71123	1	100		---Λέπι δράκου
    	71	12260	1	80		---Μάσκα τρόμου+0
    	72	12280	1	90		---Κράνος πολεμιστή+0
    	73	12390	1	80		---Κουκούλα Ορκ+0
    	74	12400	1	90		---Κουκούλα αράχνης+0
    	75	12530	1	80		---Κράνος με κέρατα+0
    	76	12540	1	90		---Μαγικό κράνος+0
    	77	12670	1	80		---Καπέλο καρδινάλιου+0
    	78	12680	1	90		---Καπέλο ψυχής+0
    	79	50301	1	99		---Τέχνη Πολέμου του Sun Zi
    	80	50302	1	99		---Τέχνη Πολέμου του Wu Ζi
    	81	50303	1	99		---WeiLiao Zi
    	82	50304	1	90		---Κυριαρχία των Συνδυασμών
    	83	50305	1	90		---Αρχείο Κύριων Συνδυασμών
    	84	50314	1	99		---Βιβλίο Μεταμορφώσεων
    	85	50315	1	99		---Ανώτερες Μεταμορφώσεις
    	86	50316	1	99		---Ανώτατες Μεταμορφώσεις
    	87	50600	1	99		---Εγχειρίδιο Εξόρυξης
    	88	31007	1	90		---Ηφαιστειακή γη
    	89	30019	1	90		---Φλεγόμενη Χαίτη
    	90	70253	1	90		---Πράσινο Βότανο
    	91	70254	1	90		---Μωβ Βότανο
    	92	70251	1	90		---Κόκκινο Βότανο
    	93	70252	1	90		---Μπλε Βότανο
    	94	31076	1	90		---Βότανα ήλιου
    	95	31089	1	90		---Κύβος Λήθης
    	96	31069	1	90		---Ουρί του Παραδείσου
    	97	85011	1	50		---Μαστορική Κορδέλα (απλή)
    	98	50135	1	50		---Κουτι με αξεσουαρ
    	99	50135	1	25		---Κουτι με αξεσουαρ
    	100	50135	1	5		---Κουτι με αξεσουαρ
    	101	50512	1	25		---Λίθος Ουράνιου Τόξου
    	102	50512	1	25		---Λίθος Ουράνιου Τόξου
    	103	71138	1	25		---Epic mount 1
    	104	71139	1	25		---Epic mount 2
    	105	31007	1	90		---Ηφαιστειακή γη
    	106	30019	1	90		---Φλεγόμενη Χαίτη
    	107	70253	1	90		---Πράσινο Βότανο
    	108	70254	1	90		---Μωβ Βότανο
    	109	70251	1	90		---Κόκκινο Βότανο
    	110	70252	1	90		---Μπλε Βότανο
    	111	31076	1	90		---Βότανα ήλιου
    	112	31089	1	90		---Κύβος Λήθης
    	113	31069	1	90		---Ουρί του Παραδείσου
    }

     

    If someone know the solution plese tell me :) ty

×
×
  • 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.