Jump to content

eressea

Legendary Member
  • Posts

    534
  • Credits

  • Joined

  • Last visited

  • Days Won

    7
  • Feedback

    0%

Posts posted by eressea

  1. I'd have killed for this info in the past when I began playing with it.

     

    Your droprate system is good that you dont need to mass-add drops to the npcdata if the server pop is too small or unstable for the korean system to work well. Lovely.

     

    edit: rabbits event do work, I used it 2years ago or so

     

    Just fixed one last problem with rabbit event (added droptime + rename event_search -> event_search_manager)

     

    Do you have some tested events you can add?

  2. Maybe I'm bringing owls to Athens, but if it helped anyone...

     

    Ignore the [drop] section, it's my custom event drop system (percent, not korea based), just use droptime_... variables OR look down below the settings (if you're experienced)

    
    [coretimeteleport]
    eventperiod = 2006/08/15-00:01 ~ 2010/12/31-23:59
    coretime = 20:0 ~ 23:59
    priceratio = 50
    dayoption = 1 ~ 5
    
    [PCCafeCouponEvent]
    EventPeriod = 2006/08/15-00:01 ~ 2010/12/31-23:59
    EventAddedPeriod = 2006/08/15-00:01 ~ 2010/12/31-23:59
    EventOrdinal = 0
    coupon_item_info = 0
    
    [XmasSantaEvent]
    EventPeriod = 2006/08/14-00:01 ~ 2010/12/31-23:59
    ;EventPeriod = 2016/05/25-00:00 ~ 2016/06/29-23:59
    buff_id_count = 1
    buff_id1 = 78905346
    delay_time = 30
    
    [YearCatchEvent]
    EventPeriod = 2006/08/14-00:01 ~ 2010/12/31-23:59
    delay_time = 30
    
    ; FIREWORKS
    
    ;[event] 
    ;eventname = fireworks_event 
    ;eventnpcname = fire_event 
    ;flagsettingtime = 120000
    ;event_doing = 1 
    ;dropitem_count = 0
    ;droptime_count = 0
    ;npctime_count = 1
    ;npctime0= 2016/05/25-00:00 ~ 2016/06/29-23:59
    ;timevariable_count = 0
    
    ;[npcsetting] 
    ;npcsetting_count = 1
    ;npceventname0 = fire_event
    
    ;[drop]
    ;maxleveldifference = 8
    ;count = 3
    ;item0 = 6403
    ;chance0 = 5.0
    ;item1 = 6404
    ;chance1 = 4.0
    ;item2 = 6405
    ;chance2 = 1.0
    
    
    ; CHRISTMASS [trees, agathion]
    
    ;[event]
    ;eventname = christmas
    ;eventnpcname = christmas
    ;flagsettingtime = 120000
    ;event_doing = 1
    ;dropitem_count = 0
    ;droptime_count = 0
    ;npctime_count = 1
    ;npctime0 = 2016/05/25-00:00 ~ 2016/06/29-23:59
    ;timevariable_count = 0
    
    ;[npcsetting] 
    ;npcsetting_count = 1
    ;npceventname0 = christmas
    
    ;[drop]
    ;maxleveldifference = 8
    ;count = 4
    ;item0 = 5556
    ;chance0 = 6.0
    ;item1 = 5557
    ;chance1 = 6.0
    ;item2 = 5558
    ;chance2 = 15.0
    ;item3 = 5559
    ;chance3 = 3.0
    
    
    ; CHRISTMASS [turkey]
    
    ;[event]
    ;eventname = br_xmas_event
    ;eventnpcname = br_xmas_event
    ;flagsettingtime = 600000
    ;event_doing = 1
    ;dropitem_count = 0
    ;droptime_count = 1
    ;droptime0 = 2016/05/25-00:00 ~ 2016/06/29-23:59
    ;npctime_count = 1
    ;npctime0 = 2016/05/25-00:00 ~ 2016/06/29-23:59
    ;timevariable_count = 0
    
    
    
    ; PIG EVENT
    
    ;[event]
    ;eventname = event_mutant_pig
    ;eventnpcname = event_mutant_pig
    ;flagsettingtime = 600000
    ;event_doing = 1
    ;dropitem_count = 0
    ;droptime_count = 0
    ;npctime_count = 9
    ;npctime0 = 2016/06/11-20:00 ~ 2016/06/11-23:00
    ;npctime1 = 2016/06/12-16:00 ~ 2016/06/12-17:00
    ;npctime2 = 2016/06/12-20:00 ~ 2016/06/12-21:00
    ;npctime3 = 2016/06/13-16:00 ~ 2016/06/13-17:00
    ;npctime4 = 2016/06/13-20:00 ~ 2016/06/13-21:00
    ;npctime5 = 2016/06/14-16:00 ~ 2016/06/14-17:00
    ;npctime6 = 2016/06/14-20:00 ~ 2016/06/14-21:00
    ;npctime7 = 2016/06/15-16:00 ~ 2016/06/15-17:00
    ;npctime8 = 2016/06/15-20:00 ~ 2016/06/15-21:00
    ;eventperiod = 2016/06/11-00:00 ~ 2016/06/18-23:59
    ;timevariable_count = 0
    ; 
    ;[npcsetting]
    ;npcsetting_count = 1
    ;npc_eventname0 = event_mutant_pig_manager
    
    
    
    ;; RAT EVENT
    ;
    ;[event]
    ;eventname = event_mutant_rat
    ;eventnpcname = event_mutant_rat
    ;flagsettingtime = 600000
    ;event_doing = 1
    ;dropitem_count = 0
    ;droptime_count = 0
    ;npctime_count = 9
    ;npctime0 = 2016/06/12-12:00 ~ 2016/06/12-17:50
    ;npctime1 = 2016/06/12-18:00 ~ 2016/06/12-23:50
    ;npctime2 = 2016/06/13-00:00 ~ 2016/06/13-23:50
    ;npctime3 = 2016/06/14-00:00 ~ 2016/06/14-22:00
    ;npctime4 = 2016/06/14-23:30 ~ 2016/06/15-00:30
    ;npctime5 = 2016/06/15-10:00 ~ 2016/06/15-11:00
    ;npctime6 = 2016/06/15-12:00 ~ 2016/06/15-13:00
    ;npctime7 = 2016/06/15-14:00 ~ 2016/06/15-15:00
    ;npctime8 = 2016/06/15-16:00 ~ 2016/06/15-17:00
    ;eventperiod = 2016/06/12-00:00 ~ 2016/06/16-23:59
    ;timevariable_count = 0
    ; 
    ;[npcsetting]
    ;npcsetting_count = 1
    ;npc_eventname0 = event_mutant_rat_manager
    
    
    ; SEARCH EVENT - rabbits - MAYBE DOESN'T WORK AS EXPECTED, I'M STILL TESTING IT
    ; you need to go through npcpos.txt and change [EventName]=[event_search]
    ; to [EventName]=[event_search_manager] everywhere EXCEPT npc event_search_thing
    
    [event]
    eventname = event_search
    eventnpcname = event_search
    flagsettingtime = 600000
    event_doing = 1
    dropitem_count = 0
    droptime_count = 1
    droptime0 = 2016/06/14-00:00 ~ 2016/06/19-23:59
    npctime_count = 8
    npctime0 = 2016/06/15-00:00 ~ 2016/06/15-13:00
    npctime1 = 2016/06/15-14:00 ~ 2016/06/15-23:00
    npctime2 = 2016/06/16-00:00 ~ 2016/06/16-13:00
    npctime3 = 2016/06/16-14:30 ~ 2016/06/16-23:30
    npctime4 = 2016/06/17-10:00 ~ 2016/06/17-13:00
    npctime5 = 2016/06/17-14:00 ~ 2016/06/17-23:00
    npctime6 = 2016/06/18-00:00 ~ 2016/06/18-13:00
    npctime7 = 2016/06/18-14:00 ~ 2016/06/18-23:00
    eventperiod = 2016/06/14-00:00 ~ 2016/06/19-23:59
    timevariable_count = 0
     
    [npcsetting]
    npcsetting_count = 1
    npc_eventname0 = event_search_manager
    
    
    

    I'll probably add more when I test it

     

     

    Okay, if you want my event drop system (flat probability based):

     

    hook bool CNPC::Die(CCreature *killer) at 0x72972C, do some random rolling and if desired, call 0x533E44 (add drop to given NPC) BEFORE proceeding to 0x72972C:

    typedef bool(__thiscall *t)(CCreature*, int, UINT64, bool, int, int, int, void*, int, void*);
    t f = (t) 0x00533E44;
    UINT32 itemOptionKey[2];
    itemOptionKey[0] = 0;
    itemOptionKey[1] = 0;
    UINT16 baseAttribute[8];
    baseAttribute[0] = 0xfffe;
    for (size_t i = 1 ; i < 8 ; ++i) {
    baseAttribute[i] = 0;
    }
    return f(this, itemId, count, false, 0, 0, 0, reinterpret_cast<void*>(itemOptionKey), 0, reinterpret_cast<void*>(baseAttribute));
    
    • Thanks 1
  3.  

    I figured I'd add one just for the hell of it...

     

    No //announce character limit

     

    Original: 4C 8B CB 4C 8B C6 BA 40 00 00 00 48 8D 8C 24 E0 00 00 00 E8 83 13 55 00 48 8D 8C 24 E0 00 00 00 E8 E6 0A 42 00
    Replace: 48 8B CE 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 E8 E6 0A 42 00
     
    Never was a big fan of random hex editing, way too lazy to write another extender guide though so

     

     

    I'm no fan of hex editing, I do everything inside my extender.

    These are only some tiny bits that can be used without any C++ coding, function hooking, fake vtables etc.

     

    EDIT: Brand new one (BUT NOT TESTED YET, JUST PATCHED LIVE IN MEMORY ON MY TESTERVER :))

     

    Original: 84 C0 74 47 41 B8 74 00  00 00 48 8D 15 6A E7 4F

    Remove annoying //load_npcsetting time condition ("can't load npc setting within 12 min."): 30 C0 74 47 41 B8 74 00  00 00 48 8D 15 6A E7 4F

  4. Hi, you can freely use these (just hexedit GF rev 83 l2server.exe and replace what you want):

     

    Original: 84 C0 74 23 48 8B 03 BA  A8 0A 00 00 48 8B CB FF

    Allow skills on airships: 30 C0 74 23 48 8B 03 BA  A8 0A 00 00 48 8B CB FF

     

    Original: 00 00 41 8A D7 49 8B CC E8 DF F7 FF FF

    Keep buffs on mount: 00 00 41 8A D7 49 8B CC 90 90 90 90 90

     

    Original: F8 E6 01 B2 01 48 8B CD E8 67 D7 FE FF

    Keep buffs on dismount: F8 E6 01 B2 01 48 8B CD 90 90 90 90 90

     

    Original: 8B 07 BA EC 02 00 00 48 8B CF FF 90 F8 07 00 00 90

    If mob moves and skill fails (distance), at least auto attack it: 89 FA 4C 89 E9 90 90 90 90 90 B8 9C 0A 71 00 FF D0

     

    Original: C7 43 18 1E 00 00 00 BA E8 03 00 00 41 B8 02 00

    Shutdown 180 seconds: C7 43 18 B4 00 00 00 BA E8 03 00 00 41 B8 02 00

    Shutdown n seconds: C7 43 18 nn0 nn1 nn2 nn3 BA E8 03 00 00 41 B8 02 00

     

     

  5. do you even know what that code is doing ? originaly , just setting to zero wouldnt explain the crash.

     

    Not in the global scope, but for example the first one is in UGameEngine::LoadMapThread.

    They call something like

     

    UObjectLoader *res = UObject::GetLoader(something);

    if (res->var84h[something2]->var10h) {

        here they access res->var84h[something2]->var10h->var1c

        which is totally wrong if you don't have mutex here

    }

     

    so my fix does simply this:

     

    void *someptr = res->var84h[something2]->var10h;

    if (*someptr) {

        now i work with someptr which is copy

    }

     

    the best solution would be to add mutexes, but I don't have the source code :))

  6. There's a race condition error in engine.dll:

     

    engine.dll:00CE80AA lea     eax, [eax+edx*4]
    engine.dll:00CE80AD cmp     dword ptr [eax+10h], 0  <----- now it's not 0, so it won't jump on the next line
    engine.dll:00CE80B1 jz      0CE80C8h     -- meanwhile some other thread sets dword ptr [eax+10h] to 0 --
    engine.dll:00CE80B3 mov     ecx, [eax+10h]    <----- so now we have ecx == 0
    engine.dll:00CE80B6 mov     ecx, [ecx+1Ch]    <----- read dword ptr [0+1ch] -> CRASH
    engine.dll:00CE80B9 test    ecx, 0x4000000
    engine.dll:00CE80BF jnz     short loc_CE80C8
    engine.dll:00CE80C1 mov     dword ptr [eax+10h], 0
     
    It can be fixed this way:
     
    engine.dll:00CE80AA lea     eax, [eax+edx*4]
    engine.dll:00CE80AD mov     ecx, [eax+10h]   <----- we copy that value from memory
    engine.dll:00CE80B0 jecxz   0CE80C8h          <----- and compare it this way - jecxz is a nice instruction :)
    engine.dll:00CE80B2 mov     ecx, [ecx+1ch]    <----- even if some other thread resets dword ptr [eax+10h], we have still copy in ecx
    engine.dll:00CE80B5 test    ecx, 0x4000000
    engine.dll:00CE80BB jne     0CE80C8h
    engine.dll:00CE80BD nop
    engine.dll:00CE80BE nop           <----- we saved 4 bytes :)
    engine.dll:00CE80BF nop
    engine.dll:00CE80C0 nop
    engine.dll:00CE80C1 mov     dword ptr [eax+10h], 0
     
    There are two occurrences of this bug in engine.dll, to fix them both replace following (in unpacked engine.dll ofc)
     
    old: 83 78 10 00 74 15 8B 48 10 8B 49 1C F7 C1 00 00 00 04 75 07
    new: 8B 48 10 E3 16 8B 49 1C F7 C1 00 00 00 04 75 0B 90 90 90 90
     
    old: 83 78 10 00 74 13 8B 48 10 F7 41 1C 00 00 00 04 75 07
    new: 8B 48 10 E3 14 F7 41 1C 00 00 00 04 75 0b 90 90 90 90
     
    Enjoy ;)
  7. Can you please share the system folder you are using to run in windows 10?

     

    Gracia Final Windows 10 fix:

     

    https://osamelahora.cz/update-nogamma/files/system-oh/engine.dll (needed for W10)

    https://osamelahora.cz/update-nogamma/files/system-oh/l2.bin (needed for W10, rename it to l2.exe if you don't have l2.bin in your system)

    https://osamelahora.cz/update-nogamma/files/system-oh/NWindow.dll (needed for W10)

     

    https://osamelahora.cz/update-nogamma/files/system-oh/D3DDrv.dll (some fixes)

  8. hello,

     

    just didn't want to keep this for myself (took 3 hours with assembler)

     

    global shout disable/enable:

     

    0x8abc3a:

    disable = 45 3B D4 45 0F 4C E2 (original)

    enable  = 31 DB 89 5C 24 3C 90

     

    0x8abc4a:

    disable = 3B CE 45 0F 4C F1 (original)

    enable  = 8D 74 24 A0 31 FF

     

    enjoy :)

×
×
  • Create New...