Beiträge von VegaS

    The current method which i did send the packets to auth core aswell and get a result if connection was set with succes or not and then save (user-pw) on a output list.
    There's nothing really complicated, actually the reason why it lasts like this, is for do connect with the brute-force algorithm which i split it on two parts, one is trying to decrypt the md5 (small chances), and the another is generate the passwords and trying all combinations, that is impossible to do a hard brute-force attacks and find password on 2-3 seconds, even if you do a extra algorithm, again, that is impossible, there are a lot a type of passwords with some characters specials, uppercase etc, and durating a lot until the brute-force do the job, doesn't importantly what language you use or method.
    Most of the brute-force methods are written on Python, because it's a flexible language for stuffs like that, even if C++ is a beast, i
    did that just for a new challenge from someone just 4 fun.
    Didn't spend too much time for that shit to do it perfectly and full optimizated/fastest execution and also i'm not a hacker to get accounts on metin2 servers.
    Thanks for reply.


    I know my english sucks.

    First one, thanks for contribution Bitte melden Sie sich an, um diesen Link zu sehen., looks good, maybe exist methods more good without do these things and rewrite the whole affect structure, but if working fine, is ok. << metin2 is already a shit anyway.
    Here are some advices which could help you on future maybe.

    C
    1. typedef unsigned int DWORD;


    You really don't have to use DWORD for affect values.

    • DWORD[0 - 4,294,967,295] - 32 bits (4 bytes)
    • uint16_t | unsigned short [0 - 65535] - 16 bits (2 bytes)

    Exactly what i had in my mind :)
    Now just use an "iterator" of this vector and not the index. Then it is like i would like to do it


    C
    1. std::vector<DWORD> vGoodAffects = {1, 5, 10, 25};
    2. std::vector<DWORD>::iterator it = vGoodAffects.begin();
    3. while (it != vGoodAffects.end())
    4. {
    5. RemoveAffect(*it++, false);
    6. }


    That's a very bad practice Bitte melden Sie sich an, um diesen Link zu sehen. for C++11 >, you don't have to use a another iterator of vector, already we have 'Range-based for loop'.

    • Executes a for loop over a range.
    • Used as a more readable equivalent to the traditional Bitte melden Sie sich an, um diesen Link zu sehen. operating over a range of values, such as all elements in a container.

    That's like how should be.

    C
    1. const std::vector<uint16_t> m_vec_AffectStack = {1, 5, 10, 25};
    2. for (auto it : m_vec_AffectStack) // Access of value, the type of it is uint16_t.
    3. RemoveAffect(it, false);
    • I would preffer to check if affect exist first one, and after that to remove it, and use the function wich send the pointer directly of found affect, not the one with type of it.
    • The function RemoveAffect(type), first one have a loop while and search affect and after that re-send to remove it on RemoveAffect(pointerFound). - Bitte melden Sie sich an, um diesen Link zu sehen.

    So the better one is that one, which send directly to remove it, because already we do the FindAffect which return a pointer from a class method.

    C
    1. const CAffect * pkAff = FindAffect(it);
    2. if (pkAff)
    3. RemoveAffect(const_cast<CAffect *>(pkAff)); // const_cast isn't necessary.


    Zitat von Sanii

    Everytime i see a fixed sized array, i see also the crying skids with errors because of this sizes. (extending array and/or the iteration of it).

    Just do that and they will stop to cry next time.

    C
    1. // Initialize array
    2. const int32_t array[] = {10, 20};
    3. // Loop
    4. for (int32_t i=0; i<sizeof(array)/sizeof(array[0]); ++i) // _countof(array)



    #killing#english#succes

    Zitat von Xtreme Games

    it only sells the system. I am looking for a complete server with everything installed.

    Who gives you these false informations?

    • You're wrong, the last updates wich i did have a special tool tool wich gives you chance to install and convert all automatically.
    • Also i'm offer default translations for some languages full (client-server) - excluded oxevent, and i install everything aswell.

    Kein Problem.Aber denke er wusste es selber nicht jeder der des System benutzt hat denn Bug auch die neuste Vision 2.1 glaube ich hat denn bug

    The latest version is 0.3.2 not '2.1'.


    This 'bug' is fixed since a lot a time and another ones aswell, not all people received it.
    That topic should be closed aswell, have no sense.

    I didn't test it, but you can do some tricks for that.
    With what i made here you can delete the file ../root/introEmpire.py, will no longer be used.
    ________________________________________________________________

    • ../root/networkmodule.py

    Search for:


    Replace it with:


    After that, do it on source this change aswell.

    CSS
    1. //@src/Server/db/src/ClientManager.cpp
    2. //Search for:
    3. snprintf(szQuery, sizeof(szQuery), "UPDATE player_index%s SET empire=%u WHERE id=%u", GetTablePostfix(), p->bEmpire, p->dwAccountID);
    4. //Replace with:
    5. enum {EMPIRE_NONE, EMPIRE_A, EMPIRE_B, EMPIRE_C};
    6. static const uint8_t bDefaultEmpire = EMPIRE_A;
    7. snprintf(szQuery, sizeof(szQuery), "UPDATE player_index%s SET empire=%u WHERE id=%u", GetTablePostfix(), (p->bEmpire == bDefaultEmpire) ? p->bEmpire : bDefaultEmpire, p->dwAccountID);

    Try that.

    First one thanks for release, i'm not good on Lua but i can give some advices on this case.

    • These checks don't need to exist.
    CSS
    1. if s == 3 then
    2. return
    3. elseif pc.job == 4 and s == 2 then // Lykaner hat keine 2. Lehre, darum ist dort der 2. Button "Abbrechen"
    4. return
    5. end
    • Is enough just to check if selectIndex is equal with last element from arbitrary positions of a list.
    Shell-Script
    1. if (s == table.getn(tab)) then
    2. return
    3. end
    • I don't recommended you to use the metatables of pc_functions, instead of pc.job use pc.get_job is more safe and doesn't have sense to use it a metatable on this case.
    • Instead of do a check for each race and insert the group name you can do a simple table wich you can retrieve the name of each race.

    Have fun.
    Attachment code:


    Class Render Monster Card
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    • A simple Python Module which gives you the chance to be able to turn mob differently with a specific animation such as atack, motion, death etc.
    • This module was not designed for beginners in python, this is just a beginning for the rendering of every monster.
    • You can also use it for other systems for render.

    WARNING:

    • I don't offer any support for this, that module is just for guys who know what have to do.
    • Code isn't working like official one.
    • This script has not been tested, is just a simple idea like better then 'pseudocode', you need to improve and do compatible with your scripts.


    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~


    Zitat

    Probably changing the way it indexes the data does the deal, using strings instead of numbers sounds good to me.

    Now you can use it more easy, have fun.