Jump to content

Night

Inactive Member
  • Posts

    839
  • Joined

  • Last visited

  • Days Won

    5
  • Feedback

    0%

Posts posted by Night

  1. i think tihs bug cant make the core crash

    try to analysis it to see what make the crash

    40k and game cores that uses src that is true , on anything older this does indeed cz the core to crush , anyway battle.cpp 426 this should be in CalcMeleeDamage so it is from a mob dmg check again just to hlep you search the first arg is 217 (mini attack) and the secound 209 is the max.

  2. possible <- sure

    without any problem <- there is no guarantee

    but most of the time there wont be any problem. and if you are going to buy it then you should ask the on that is selling it to do it for you.

    Buying a 40k is not a great idea I suppose theres so many things should be get fixed. Who to trust? 

    possible <- sure

    without any problem <- there is no guarantee

    but most of the time there wont be any problem. and if you are going to buy it then you should ask the on that is selling it to do it for you.

    Buying a 40k is not a great idea I suppose theres so many things should be get fixed. Who to trust? 

    i said what i said bcz of this :

    I'm considering buying a 40k

    if it is a live server then i do not recommend do in it directly.most of the problem is with the protos , since most ppl still use the protos from db this could cz real problems. any way , updating is not a problem .

    btw, if you do not plane on using your own src then do not upgrade. (there is no point in using 40k files without src anyway)

  3. buy the fix from marty :P i do not think that anyone is going to give it for free (the part alone is worth more then the wolfman)

    He doesn't answer me

    lately he answer once per 3 days . (mostly afk). ah , he might ingore you if he see what you are asking for is kind of too much or too stupid.

    Asking? I want to buy his stuff lol

    same , you are asking him if he want to sell, he is not a store he might sell as well as he might not.

  4. btw there is another comment about the coding :

    			int attr1;
    			int value1;
    			int attr2;
    			int value2;
    			int attr3;
    			int value3;
    			int attr4;
    			int value4;
    			int attr5;
    			int value5;
    			int attr6;
    			int value6;
    			int attr7;
    			int value7;
    			int socket1;
    			int socket2;
    			int socket3;

    basicly this is a bit too much, dont you think so?

                int attr1, value1,
                    attr2, value2,
                    attr3, value3,
                    attr4, value4,
                    attr5, value5,
                    attr6, value6,
                    attr7, value7,
                    socket1, socket2, socket3;

    this looks a bit better.

    and this is ugly as well :

    if (lua_isnumber(L, 3) && lua_isnumber(L, 4) && lua_isnumber(L, 5) && lua_isnumber(L, 6) && lua_isnumber(L, 7) && lua_isnumber(L, 8) && lua_isnumber(L, 9) && lua_isnumber(L, 10) && lua_isnumber(L, 11) && lua_isnumber(L, 12) && lua_isnumber(L, 13) && lua_isnumber(L, 14) && lua_isnumber(L, 15) && lua_isnumber(L, 16) && lua_isnumber(L, 17) && lua_isnumber(L, 18) && lua_isnumber(L, 19))

    you could just do it like this : thx to @martysama0134 for the size_t idea and the multi lua_isnumber check.

    			bool isValid = true;
    			for (size_t i = 3; i < 20; i++)
    			{
    				if (!lua_isnumber(L, i))
    				{
    				isValid = false;
    				break;
    				}
    			}
    			if (!isValid)
    			{
    				lua_pushboolean(L, false);
    				return 1;
    			}
    			else {
    				attr1 = (int)lua_tonumber(L, 3);
    				value1 = (int)lua_tonumber(L, 4);
    
    				attr2 = (int)lua_tonumber(L, 5);
    				value2 = (int)lua_tonumber(L, 6);
    
    				attr3 = (int)lua_tonumber(L, 7);
    				value3 = (int)lua_tonumber(L, 8);
    
    				attr4 = (int)lua_tonumber(L, 9);
    				value4 = (int)lua_tonumber(L, 10);
    
    				attr5 = (int)lua_tonumber(L, 11);
    				value5 = (int)lua_tonumber(L, 12);
    
    				attr6 = (int)lua_tonumber(L, 13);
    				value6 = (int)lua_tonumber(L, 14);
    
    				attr7 = (int)lua_tonumber(L, 15);
    				value7 = (int)lua_tonumber(L, 16);
    
    				socket1 = (int)lua_tonumber(L, 17);
    				socket2 = (int)lua_tonumber(L, 18);
    				socket3 = (int)lua_tonumber(L, 19);
    
    
    				item->SetForceAttribute(0, attr1, value1);
    				item->SetForceAttribute(1, attr2, value2);
    				item->SetForceAttribute(2, attr3, value3);
    				item->SetForceAttribute(3, attr4, value4);
    				item->SetForceAttribute(4, attr5, value5);
    				item->SetForceAttribute(5, attr6, value6);
    				item->SetForceAttribute(6, attr7, value7);
    
    				item->SetSocket(0, socket1);
    				item->SetSocket(1, socket2);
    				item->SetSocket(2, socket3);
    
    				lua_pushboolean(L, true);
    				return 1;
                }
            }
    

     

    if someone want to comment about the first "{" then yes it is not realy needed but some compilers might throw a warning about it + it is just in order to avoid any problem , please do not forget to close it , just add a "}" after this :

    					lua_pushboolean(L, true);
    					return 1;

    (there is https://metin2.download/picture/5NiVRJT5M3QkD3olPArB2oTzxj0Ht5cT/.png  in notpad++ use it to check if there is no problem (vs2013 should help you in a better way) , , sorry about the link , i just could not use bbcode like usual (damn ipb4.x))

    and here you can use an enum (not that effictive it wont change anything) :

    					attr1 = (int)lua_tonumber(L, 3);
    					value1 = (int)lua_tonumber(L, 4);
    					...

    btw , the c-type cast here :

    (int)lua_tonumber(L, 3)

    is basicly always useless. except if you wanted to shut the compiler (it is bcz the convertion for a double to an int means that the program is going to trancate the double (lua_tonumber) (in other words the double is going to lose all the number after the "." for ex. 4.5 to int is 4 ...etc)

    good luck.

    • Love 2
  5. stuborn , he should just change the game file and client bin (root as well and add some files to locale).
     having the src will give him perfect controle over the server , disabling new systems is just kid play.

    and he can have all of the new systems. he can also use cython to protect his python work , have a faster client and so on so on.

  6. add : forkedmapindex.txt in : locale/germany/ :

    #랜덤 성지 세팅 파일
    #성지 추가 방법
    #해더:   맵       신수국시작(xy) 천조국시작(xy) 진노국시작(xy)
    #sungzi: mapindex startposX startposY startposX startposY startposX startposY
    #      맵 신수국시작(xy) 맵 천조국시작(xy) 맵 진노국시작(xy)
    #pass: mapindex1 startposX startposY mapindex2 startposX startposY mapindex3 startposX startposY
    sungzi: 114 948100 36500 937100 22000 953200 18500 metin2_map_sungzi 1902
    #pass: 115 1032200 125900 metin2_map_sungzi_flame_pass01 116 1032200 228300 metin2_map_sungzi_flame_pass02 117 1032200 330700 metin2_map_sungzi_flame_pass03
    pass: 118 1150400 182400 metin2_map_sungzi_flame_hill_01 119 1150400 284800 metin2_map_sungzi_flame_hill_02 120 1150400 387200 metin2_map_sungzi_flame_hill_03 
    sungzi: 121 1188800 17500 1212400 19300 1195800 44900 metin2_map_sungzi_snow 1902
    pass: 122 1200100 167900 metin2_map_sungzi_snow_pass01 123 1200100 270300 metin2_map_sungzi_snow_pass02 124 1200100 372700 metin2_map_sungzi_snow_pass03
    sungzi: 125 1270000 56400 1249700 22200 1283700 20800 metin2_map_sungzi_desert_01 1902
    pass: 126 1242400 142100 metin2_map_sungzi_desert_hill_01 127 1242400 244500 metin2_map_sungzi_desert_hill_02 128 1242400 346900 metin2_map_sungzi_desert_hill_03
    

    this should get rid of the warning , but at least give us the syserr (server)

  7. dofile(get_locale_base_path().."/quest/igshop_settings.lua")
    dofile(get_locale_base_path().."/quest/igshop.lua")

    this looks better + portable

    and why the :

    strlcpy

    i mean yes it does do the job (if you want to make sure that

    msg

    always end with a \0 ) but i think that you should at least make it like this for ex.:

    #ifdef __FreeBSD__ // or any BSD system
        strlcpy(msg, p->msg, sizeof(msg));
    #else
        strncpy(msg, p->msg, sizeof(msg));
    #endif

    btw , strlcpy is not a standard of c++

    btw , this :

    char msg[120+1];

    and this :

    char msg[121];

    is ugly xd .

    one last thing : thx for the release , it is a great idea +1 .

    Since I'm not so proficient in c++ I have a question about the difference between the

    strlcpy and strncpy

    So we always need to terminate the strings with the null character (if no, it could lead to strange results). Then what is the problem with the strlcpy? As you said it automatically set the last character to null. Then why strncpy better? Maybe the packet from the client (in this case) is always terminated by the null character and this is why strncpy enough? :unsure:And one more question, why is this problem if its not a standard? Maybe on different os it could lead to different operation?

    strncpy_s might be a better option as well if you are using windows. but still not protable as usuall same goes for strlcpy.

    strncpy should work more safely (compared to strcpy) by taking a third argument to indicate the maximum allowed size of the target array,however it is hated duo to some problems, strlcpy is just marginally then strncpy , most ppl would prefer using a c++ standard function rather then a BSD fix .

    btw the main diffirence is that strlcpy guarantee to NUL-terminate(as long as size is larger than 0). so if you are confident enough just use strncpy if not and as long as you are in BSD system then you are welcome to use strlcpy . (here is a small help) . for me i prefer strncpy maybe in the far future someone will fix it. or just get ride of it.

    >basicly i hate how ymir coders think ^^. (ask someone who is recoding some part to tell you about the books drop function)

    and one last thing there is that small problem with the syntax highlighting in most of the forums i recommend you to use the spoiler.

    btw , if you use strncpy and there is a problem then there might be a chance to see something funny (such things happen all the time).

    • Love 1
  8. Well in the

    void CInputMain::QuestInputString(LPCHARACTER ch, const void* c_pData)

    function, I've only edited the maximum input, because originally its about 64 (if I remember well) and its not enough in some cases. So the

    strlcpy

    originally from ymir.

    Anyway you are right, and the get_locale_base_path() is a good idea. I'm gonna edit the topic, thanks :)

    i see , Good Job

  9. dofile(get_locale_base_path().."/quest/igshop_settings.lua")
    dofile(get_locale_base_path().."/quest/igshop.lua")

    this looks better + portable

    one last thing : thx for the release , it is a great idea +1 .

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