Tsukuru

Tsukuru is a Lua based advanced macro tool for Ragnarok Online that you can interfere any incoming and outgoing packets, edit them or even block them via internal scripting. Check wiki page to find more information.

Changes Log:

30 June 2014
released version 0.1.3 (build 1372) of tkool

  • Fixed: Trigger list checkbox

30 September 2012

released version 0.1.3 (build 1364) of tkool

  • Fixed: splitter control
  • Added: inline command

30 March 2011

released version 0.1.3 (build 1133) of tkool

23 March 2011

released version 0.1.3 (build 865) of tkool
released version 0.1.3 (build 846) of tkool
released version 0.1.3 (build 841) of tkool

22 March 2011
released version 0.1.3 (build 818) of tkool

  • Added: Service trigger
  • Added: Bragi trigger

21 March 2011
released version 0.1.2 of tkool

  • Fixed: Mobsizes bug
  • Added: Inventory list

20 March 2011
released version 0.1.1 of tkool

  • Added: Splitter control
  • Fixed: Resize bug
  • Added: Auto talk with npc
  • Added: NPC support
  • Added: Autorespawn trigger
  • Fixed: recv buffer management
  • paper

    abra spam doesnt work, the rest works though.

    BTW i cant register at forum, i dont know any of those chibi’s =(

  • paper

    nice work btw, can i suggest adding a hot key for ECALL like Home for Safetywall
    Maybe END key would do

  • paper

    Ok i found the reason it didnt know, i play on a server with Vanguard shield.
    I tried it to a server with no anti cheats and it works perfectly.
    Is there a way to bypass vanguard or harmony anti hacks?

  • ragnarok

    hello. I’m new here.

    I am glad i was stumbled like this site. I am very confuse on how to set up properly the Tsukuru for abra. it doesnt seems to work in server i have played. LegitimateRO with no anti cheat. :(

  • ragnarok

    why does abra didnt work in my server it dont have anticheat or gameguard.

  • renJFK

    hello,
    I just adapted tsukuru to renewal client, it’s working fine on rms test server.

  • ragnarok

    hi . thank you for your responce.

    I just wanna ask if this work in rAthena Server?

  • renJFK

    yup, it does. Like I said, I recently tested on rms test server and it’s working perfectly.

  • ragnarok

    I tried in rms and it works. :D thanks alot. i duno in private server with rathena. :D

  • ragnarok

    hello.

    I’t works perfect in non renewal but in Renewal it takes alot of time and some of the self buffs skill like coma, first aid and soon will trigger. i just dont know why. But in non renewal it can summon fast and no self buffs will trigger. :(

  • renJFK

    actually it has nothing to do with renewal since abra allows you use completely random skills and it depends on server configuration, maybe they changed abra mechanics on official or rathena team did mistake on copying official or your private server is using custom abra configuration. in short it can be anything but let me know if anything happens to be wrong with client packets.

  • ragnarok

    I also tried this in villain-ro.net. and it wont work. it says

    previous buffer
    unknown packet (0x30B8) at 9
    AA 00 09 00 00 00 00 9C 00 B8 30 31 01 01 00 01 …….œ.¸01….

    and it wont recognize everything like monster, player and npc.

    it’s an aethena server with latest patch. :(.

  • renJFK

    it mostly depends on packet version, i set it as 25 by default.

  • ragnarok

    yeah maybe the packets. any tips on how to solve this :(.

  • ragnarok

    hello ren.

    i tried it on private server with no gameguard and it wont recognize monster, player and npc. :(

    it always says unknown packets :(

  • ragnarok

    Should I change the packet_db.txt? or im gonna add some packet in it to recognize?

  • Wild

    Same problem here. when I tried the program in private server
    and
    when I check the minibot an error appeared maxsp cannot be nil.
    It is possible to bot your char using this software seems openkore is too complicated and anti bot can kill it.

  • Wild

    can you check this one pls?

    http://i922.photobucket.com/albums/ad68/zedan91/Untitled_zps03fa91df.png

    I played in renewal server.

  • renJFK

    Hello,

    @ragnarok
    It completely depends on server version, even if you change packet version it would save you from getting unknown packets however monster list might not activate. In this version of tsukuru i’m using 2009-2010 packets (which is most popular i suppose) for actor list. (clif_set_unit_walking, clif_set_unit_idle you can check https://rathena.svn.sourceforge.net/svnroot/rathena/trunk/src/map/clif.c for more detail)

    @wild
    Please try changing your packet version to 26, it might help. And also use most recent tsukuru, which is build 1364.

    Oh by the way, I checked villain-ro and they’re using kind of old packet version that’s why tskuru doesn’t see actors on screen. (0×78 for clif_set_unit_idle)

  • ragnarok

    Ren,

    what should I to make it work? so that it will recognize actors on screen. Should i add 0×78 in packet list? sorry I’m clueless in terms of programming :(

    btw, can you give me sample code for blocking a certain skill like Hiding or etc.
    and if status is inactive too. like energy coat.

    thank you and more power.

  • renJFK

    Hello,

    Adding packets solely would not help in your case since it’s part of scripting mechanism. When you check main script file which is tkool.lua you will see a line goes with

    ‘if p == 0x7F7 or p == 0x7F8 or p == 0x7F9 then –clif_set_unit_walking and clif_set_unit_idle’

    In that condition tsukuru parses incoming actor information. For actor part to work properly it needs some information about actor like id, name, coordinates etc. You can see variable assignments in that section.

    For example local id = tk.WBUFL(buf, cur + 5); cur is fixed in this case since all packets come as bundle and cur is required for knowing current packet’s base address in global packet array. Main problem here is, second offset which is the offset in sub packet array. But it’s easy to fetch them as well since r/eathena is opensource and you can see it on source codes. Like I said on my previous comment, check https://rathena.svn.sourceforge.net/svnroot/rathena/trunk/src/map/clif.c and search for clif_set_unit_idle function, you will see everything about offsets.

    And about your second question, I’m not sure I understand it, what do you mean by blocking?

    Cheers.

  • ragnarok

    Hello. ren. Should i add this code to tktool.lua?. I duno what to do :(. but this is the code from clif_set_unit_walking, clif_set_unit_idle. this is what I found.
    sorry im noob in programming. :((

    /*==========================================
    * Prepares ‘unit standing/spawning’ packet
    *——————————————*/
    static int clif_set_unit_idle(struct block_list* bl, unsigned char* buffer, bool spawn)
    {
    struct map_session_data* sd;
    struct status_change* sc = status_get_sc(bl);
    struct view_data* vd = status_get_viewdata(bl);
    unsigned char *buf = WBUFP(buffer,0);
    #if PACKETVER class_);
    #endif
    #if PACKETVER >= 7
    unsigned short offset = 0;
    #endif
    #if PACKETVER >= 20091103
    const char *name;
    #endif
    sd = BL_CAST(BL_PC, bl);

    #if PACKETVER < 20091103
    if(type)
    WBUFW(buf,0) = spawn?0x7c:0×78;
    else
    #endif
    #if PACKETVER < 4
    WBUFW(buf,0) = spawn?0×79:0×78;
    #elif PACKETVER < 7
    WBUFW(buf,0) = spawn?0x1d9:0x1d8;
    #elif PACKETVER < 20080102
    WBUFW(buf,0) = spawn?0x22b:0x22a;
    #elif PACKETVER < 20091103
    WBUFW(buf,0) = spawn?0x2ed:0x2ee;
    #elif PACKETVER = 20091103
    name = status_get_name(bl);
    #if PACKETVER = 20071106
    if (type) { //Non-player packets
    WBUFB(buf,2) = clif_bl_type(bl);
    offset++;
    buf = WBUFP(buffer,offset);
    }
    #endif
    WBUFL(buf, 2) = bl->id;
    WBUFW(buf, 6) = status_get_speed(bl);
    WBUFW(buf, 8) = (sc)? sc->opt1 : 0;
    WBUFW(buf,10) = (sc)? sc->opt2 : 0;
    #if PACKETVER option : 0;
    WBUFW(buf,14) = vd->hair_style;
    WBUFW(buf,16) = vd->weapon;
    WBUFW(buf,18) = vd->head_bottom;
    WBUFW(buf,20) = vd->class_; //Pet armor (ignored by client)
    WBUFW(buf,22) = vd->shield;
    } else {
    #endif
    #if PACKETVER >= 20091103
    WBUFL(buf,12) = (sc)? sc->option : 0;
    offset+=2;
    buf = WBUFP(buffer,offset);
    #elif PACKETVER >= 7
    if (!type) {
    WBUFL(buf,12) = (sc)? sc->option : 0;
    offset+=2;
    buf = WBUFP(buffer,offset);
    } else
    WBUFW(buf,12) = (sc)? sc->option : 0;
    #else
    WBUFW(buf,12) = (sc)? sc->option : 0;
    #endif
    WBUFW(buf,14) = vd->class_;
    WBUFW(buf,16) = vd->hair_style;
    WBUFW(buf,18) = vd->weapon;
    #if PACKETVER head_bottom;
    WBUFW(buf,22) = vd->shield;
    #else
    WBUFW(buf,20) = vd->shield;
    WBUFW(buf,22) = vd->head_bottom;
    #endif
    #if PACKETVER head_top;
    WBUFW(buf,26) = vd->head_mid;

    if( bl->type == BL_NPC && vd->class_ == FLAG_CLASS )
    { //The hell, why flags work like this?
    WBUFW(buf,22) = status_get_emblem_id(bl);
    WBUFW(buf,24) = GetWord(status_get_guild_id(bl), 1);
    WBUFW(buf,26) = GetWord(status_get_guild_id(bl), 0);
    }

    WBUFW(buf,28) = vd->hair_color;
    WBUFW(buf,30) = vd->cloth_color;
    WBUFW(buf,32) = (sd)? sd->head_dir : 0;
    #if PACKETVER status.karma:0; // karma
    WBUFB(buf,35) = vd->sex;
    WBUFPOS(buf,36,bl->x,bl->y,unit_getdir(bl));
    WBUFB(buf,39) = 0;
    WBUFB(buf,40) = 0;
    return packet_len(0x7c);
    }
    #endif
    #if PACKETVER >= 20110111
    WBUFW(buf,34) = vd->robe;
    offset+= 2;
    buf = WBUFP(buffer,offset);
    #endif
    WBUFL(buf,34) = status_get_guild_id(bl);
    WBUFW(buf,38) = status_get_emblem_id(bl);
    WBUFW(buf,40) = (sd)? sd->status.manner : 0;
    #if PACKETVER >= 20091103
    WBUFL(buf,42) = (sc)? sc->opt3 : 0;
    offset+=2;
    buf = WBUFP(buffer,offset);
    #elif PACKETVER >= 7
    if (!type) {
    WBUFL(buf,42) = (sc)? sc->opt3 : 0;
    offset+=2;
    buf = WBUFP(buffer,offset);
    } else
    WBUFW(buf,42) = (sc)? sc->opt3 : 0;
    #else
    WBUFW(buf,42) = (sc)? sc->opt3 : 0;
    #endif
    WBUFB(buf,44) = (sd)? sd->status.karma : 0;
    WBUFB(buf,45) = vd->sex;
    WBUFPOS(buf,46,bl->x,bl->y,unit_getdir(bl));
    WBUFB(buf,49) = (sd)? 5 : 0;
    WBUFB(buf,50) = (sd)? 5 : 0;
    if (!spawn) {
    WBUFB(buf,51) = vd->dead_sit;
    offset++;
    buf = WBUFP(buffer,offset);
    }
    WBUFW(buf,51) = clif_setlevel(bl);
    #if PACKETVER = 20080102
    WBUFW(buf,53) = sd?sd->user_font:0;
    #endif
    #if PACKETVER >= 20091103
    memcpy((char*)WBUFP(buf,55), name, NAME_LENGTH);
    return WBUFW(buffer,2);
    #else
    return packet_len(WBUFW(buffer,0));
    #endif
    }

    * Prepares ‘unit walking’ packet
    *——————————————*/
    static int clif_set_unit_walking(struct block_list* bl, struct unit_data* ud, unsigned char* buffer)
    {
    struct map_session_data* sd;
    struct status_change* sc = status_get_sc(bl);
    struct view_data* vd = status_get_viewdata(bl);
    unsigned char* buf = WBUFP(buffer,0);
    #if PACKETVER >= 7
    unsigned short offset = 0;
    #endif
    #if PACKETVER >= 20091103
    const char *name;
    #endif

    sd = BL_CAST(BL_PC, bl);

    #if PACKETVER < 4
    WBUFW(buf, 0) = 0x7b;
    #elif PACKETVER < 7
    WBUFW(buf, 0) = 0x1da;
    #elif PACKETVER < 20080102
    WBUFW(buf, 0) = 0x22c;
    #elif PACKETVER < 20091103
    WBUFW(buf, 0) = 0x2ec;
    #elif PACKETVER = 20091103
    name = status_get_name(bl);
    #if PACKETVER = 20071106
    WBUFB(buf, 2) = clif_bl_type(bl);
    offset++;
    buf = WBUFP(buffer,offset);
    #endif
    WBUFL(buf, 2) = bl->id;
    WBUFW(buf, 6) = status_get_speed(bl);
    WBUFW(buf, 8) = (sc)? sc->opt1 : 0;
    WBUFW(buf,10) = (sc)? sc->opt2 : 0;
    #if PACKETVER option : 0;
    #else
    WBUFL(buf,12) = (sc)? sc->option : 0;
    offset+=2; //Shift the rest of elements by 2 bytes.
    buf = WBUFP(buffer,offset);
    #endif
    WBUFW(buf,14) = vd->class_;
    WBUFW(buf,16) = vd->hair_style;
    WBUFW(buf,18) = vd->weapon;
    #if PACKETVER head_bottom;
    WBUFL(buf,22) = gettick();
    WBUFW(buf,26) = vd->shield;
    #else
    WBUFW(buf,20) = vd->shield;
    WBUFW(buf,22) = vd->head_bottom;
    WBUFL(buf,24) = gettick();
    #endif
    WBUFW(buf,28) = vd->head_top;
    WBUFW(buf,30) = vd->head_mid;
    WBUFW(buf,32) = vd->hair_color;
    WBUFW(buf,34) = vd->cloth_color;
    WBUFW(buf,36) = (sd)? sd->head_dir : 0;
    #if PACKETVER >= 20110111
    WBUFW(buf,38) = vd->robe;
    offset+= 2;
    buf = WBUFP(buffer,offset);
    #endif
    WBUFL(buf,38) = status_get_guild_id(bl);
    WBUFW(buf,42) = status_get_emblem_id(bl);
    WBUFW(buf,44) = (sd)? sd->status.manner : 0;
    #if PACKETVER opt3 : 0;
    #else
    WBUFL(buf,46) = (sc)? sc->opt3 : 0;
    offset+=2; //Shift the rest of elements by 2 bytes.
    buf = WBUFP(buffer,offset);
    #endif
    WBUFB(buf,48) = (sd)? sd->status.karma : 0;
    WBUFB(buf,49) = vd->sex;
    WBUFPOS2(buf,50,bl->x,bl->y,ud->to_x,ud->to_y,8,8);
    WBUFB(buf,56) = (sd)? 5 : 0;
    WBUFB(buf,57) = (sd)? 5 : 0;
    WBUFW(buf,58) = clif_setlevel(bl);
    #if PACKETVER >= 20080102
    WBUFW(buf,60) = sd?sd->user_font:0;
    #endif
    #if PACKETVER >= 20091103
    memcpy((char*)WBUFP(buf,62), name, NAME_LENGTH);
    return WBUFW(buffer,2);
    #else
    return packet_len(WBUFW(buffer,0));
    #endif
    }

    len = clif_set_unit_idle(bl, buf,true);
    clif_send(buf, len, bl, AREA_WOS);
    if (disguised(bl))
    clif_setdisguise(bl, buf, len);

    len = clif_set_unit_walking(bl,ud,buf);
    clif_send(buf,len,bl,AREA_WOS);
    if (disguised(bl))
    clif_setdisguise(bl, buf, len);

    ud = unit_bl2ud(bl);
    len = ( ud && ud->walktimer != INVALID_TIMER ) ? clif_set_unit_walking(bl,ud,buf) : clif_set_unit_idle(bl,buf,false);
    clif_send(buf,len,&sd->bl,SELF);

    #elif PACKETVER <= 20081217 // change in 0×78 and 0x7c
    3, 28, 19, 11, 3, -1, 9, 5, 55, 53, 58, 60, 42, 2, 6, 6,
    #else

    I mean about the blocking skill(s)

    example. I have hiding skill I want to block so my char can't use the skill or to disabled the skill so my char wont cast that skill.

    I appreciate you a lot.

    More power

  • ragnarok

    Is it possible that Tsukuru automatically adopt any kind of version of ragnarok client even it is oldest packet to latest packet. Means it can recognize the packet even it is too old or very latest.

    thanks your kind response.

  • renJFK

    No, that’s quite impossible since whenever gravity does some changes on game mechanics it also might affect game packet routine which means you always have to maintain tsukuru as well. Actually this is why openkore is dying lately since it is much more complicated and even more harder to maintain.

    And about that code, yes indeed they’re packet generation functions but you can’t just use them as they are. Firstly they are server side codes and secondly written in ansi c.

    If you mean blocking client side yes you can, since tsukuru can interfere both flows incoming and outgoing. Actually tsukuru has a function that spams lastly used skill. You can use that routine for whatever you want. For example let’s assume you want to block abra-cadabra;

    if lastmemoskillid == 290 then return end

    it’s crystal clear but i’ll explain anyways, if you try to send skill id 290 which is abra-cadabra it will return the send function without ACTUALLY sending it back to server thus this will do the trick.

    (https://rathena.svn.sourceforge.net/svnroot/rathena/trunk/db/re/skill_db.txt)

  • renjfk

    No, that’s quite impossible since whenever gravity does some changes on game mechanics it also might affect game packet routine which means you always have to maintain tsukuru as well. Actually this is why openkore is dying lately since it is much more complicated and even more harder to maintain.
    And about that code, yes indeed they’re packet generation functions but you can’t just use them as they are. Firstly they are server side codes and secondly written in ansi c.
    If you mean blocking client side yes you can, since tsukuru can interfere both flows incoming and outgoing. Actually tsukuru has a function that spams lastly used skill. You can use that routine for whatever you want. For example let’s assume you want to block abra-cadabra;
    if lastmemoskillid == 290 then return end
    it’s crystal clear but i’ll explain anyways, if you try to send skill id 290 which is abra-cadabra it will return the send function without ACTUALLY sending it back to server thus this will do the trick.
    https://rathena.svn.sourceforge.net/svnroot/rathena/trunk/db/re/skill_db.txt

  • ragnarok

    hello ren.

    can you give me some details of these:

    or do you have any detailed guide or references for those codes that explains their functions.
    thank you from philippines

  • ragnarok
  • renjfk

    Well, first of all i recommend using some advanced editor like notepad++. And secondly, most of your questions are about lua language, you should learn more about lua before getting those parts and actually if you ask me, it’s fun!

    Check these referances:
    http://www.lua.org/manual/5.1/

    http://www.lua.org/pil/

    In our case, ‘p’ means, it’s the current separated packet in whole packet array, like I said before, all packets come as bundle in a buffer limited to 2048 bytes. And ‘len’ stands for current packet’s length, if you scroll up a bit more you should see it’s coming from packet database. Those numbers next to cur means it’s the offset of sought variable like class, type etc. And type condition check is used for if it’s a monster, npc or player. You can get those constant values from athena source codes as well. Also you can check wiki page for internal api usage.

    http://renos.tk/wiki/

    Cheers.

  • ragnarok

    how should i know if that number is the right offset?

  • renjfk

    Well, there are several ways of doing this, you can start with checking athena source codes and then debug packet traffic and see if it’s correct or not.

  • ragnarok

    can you give me an example on how to do it.

  • ragnarok

    can you give me an example on how to check the right codes or offset?

  • ragnarok

    do you know any tools i can use to debug packet

  • renjfk

    tsukuru already has this feature, just set debug variable to 1 or 2 for detailed packet analyzing.

  • ragnarok

    Hi.

    I tried to play in different private servers. alot of features didnt work like monster, npc, and player same problem. so I tried CreamRO which new server and they are using 2011-03-15RagexeRE. it is renewal and it has 3rd jobs.

    Debug is set to 2
    Here’s the code for CreamRO
    previous buffer
    87 00 62 19 C3 5E 28 45 D2 90 5C 88 ‡.b.Ã^(EҐˆ
    unknown packet (0×857) at 0
    57 08 55 00 06 95 91 8E 06 C8 00 00 00 00 00 00 W.U..•‘Ž.È……
    00 00 00 F2 02 00 00 00 00 00 00 00 00 00 00 00 …………….
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 …………….
    00 00 00 00 00 00 00 2C 06 73 00 00 00 00 00 00 …….,.s……
    00 43 6F 6E 74 69 6E 65 6E 74 61 6C 20 4F 66 66 .Continental Off
    69 63 69 61 6C icial
    6 bytes sent to 280
    68 03 4E 92 8E 06 h.N’Ž.
    30 bytes received from 280
    95 00 4E 92 8E 06 4D 6F 72 72 6F 63 20 56 69 6C •.N’Ž.Morroc Vil
    6C 61 67 65 72 23 72 75 73 32 35 00 00 00 lager#rus25…
    6 bytes sent to 280
    60 03 9C 5F 2D 00 `.œ_-.
    6 bytes received from 280
    7F 00 08 34 C3 5E …4Ã^
    6 bytes sent to 280
    60 03 80 8E 2D 00 `..Ž-.
    6 bytes received from 280
    7F 00 EE 62 C3 5E …bÃ^
    6 bytes sent to 280
    60 03 65 BD 2D 00 `.e½-.
    6 bytes received from 280
    7F 00 D6 91 C3 5E ..Ö‘Ã^
    6 bytes sent to 280
    60 03 4A EC 2D 00 `.Jì-.
    6 bytes received from 280
    7F 00 BD C0 C3 5E ..½ÀÃ^
    6 bytes sent to 280
    60 03 2F 1B 2E 00 `./…
    6 bytes received from 280
    7F 00 9E EF C3 5E ..žïÃ^
    6 bytes sent to 280
    60 03 14 4A 2E 00 `..J..
    6 bytes received from 280
    7F 00 82 1E C4 5E ….Ä^
    6 bytes sent to 280
    60 03 F9 78 2E 00 `..x..

    With no Debug on meaning Debug is Off

    previous buffer
    95 00 8D AB 8E 06 4D 65 64 69 63 23 6D 6F 72 00 •.«Ž.Medic#mor.
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 …………..
    unknown packet (0×857) at 0
    57 08 52 00 06 D9 7E 8E 06 C8 00 00 00 00 00 00 W.R…~Ž.È……
    00 00 00 45 03 00 00 00 00 00 00 00 00 00 00 00 …E…………
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 …………….
    00 00 00 00 00 00 00 26 06 E5 00 00 00 00 00 00 …….&……..
    00 42 75 6C 6C 65 74 69 6E 20 42 6F 61 72 64 23 .Bulletin Board#
    31 31 11
    previous buffer
    87 00 A8 BA C7 5E 26 86 22 88 5C 88 ‡.¨ºÇ^&.”ˆˆ
    unknown packet (0×857) at 0
    57 08 56 00 06 4E 92 8E 06 C8 00 00 00 00 00 00 W.V..N’Ž.È……
    00 00 00 30 00 00 00 00 00 00 00 00 00 00 00 00 …0…………
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 …………….
    00 00 00 00 00 00 00 29 45 20 00 00 00 00 00 00 …….)E ……
    00 4D 6F 72 72 6F 63 20 56 69 6C 6C 61 67 65 72 .Morroc Villager
    23 72 75 73 32 35 #rus25
    previous buffer
    80 00 7A A5 8E 06 00 ..z¥Ž..
    unknown packet (0×857) at 0
    57 08 55 00 06 95 91 8E 06 C8 00 00 00 00 00 00 W.U..•‘Ž.È……
    00 00 00 F2 02 00 00 00 00 00 00 00 00 00 00 00 …………….
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 …………….
    00 00 00 00 00 00 00 2C 06 73 00 00 00 00 00 00 …….,.s……
    00 43 6F 6E 74 69 6E 65 6E 74 61 6C 20 4F 66 66 .Continental Off
    69 63 69 61 6C

    unknown packets appeared are:
    0×0856, 0×0857, 0×0858, 0×0859

  • ragnarok

    pls. help me even in creamRO.

    thanks alot.

  • ragnarok

    give me some sample pls on how to trace the exact codes like openkore they have sticky guidelines.

  • renjfk

    Hello,

    Once I have time I’ll try making a tut using the server you mentioned.

  • ragnarok

    thanks in advance ren. im planning to donate :D. even 5 dollars? if its ok. :P

  • wild

    @renjfk:disqus

    sorry for the late reply. I was on vacation.

    Tsukuru still dont regconize monster/player/npc etc. We have the same problem with ragnarok. We dont know how to make it work and need your sticky guide.

  • ragnarok

    hello. ren. I notice tsukuru works in from 2009-2010-06-30 version of RagexeRE but with this version.
    2010-07-01/
    2010-07-06/
    2010-07-07/
    2010-07-13/
    2010-07-14/
    2010-07-20/
    2010-07-21/
    2010-07-28/
    2010-07-30/
    2010-08-03/
    2010-08-04/
    2010-08-17/
    2010-08-26/
    2010-08-31/
    2010-09-07/
    2010-09-14/
    2010-10-07/
    2010-10-12/
    2010-10-20/
    2010-10-26/
    2010-11-02/
    2010-11-09/
    2010-11-16/
    2010-11-23/
    2010-11-24/
    2010-11-25/
    2010-11-26/
    2010-11-30/
    2010-12-07/
    2010-12-14/
    2010-12-28/
    up to 2012 it wont recognize its monster, npc, and players. and some features doesn’t work.
    Hope you can help us so we can integrate your awesome software to its the latest version of RagexeRE. and I’m gonna share if I learn how to get the right offset. :D

  • ragnarok

    Merry Xmas ren.:D.Help us please

  • kazima

    nice application but it doesnt work in latest RO.

  • ragnarok

    hello ren.. can you update it pls?.. to the latest RO?

  • tsukuru

    got update

  • tsukuru

    got update?

  • Paper

    Can you update your Wiki Guide

  • RnB

    please update this tool?

  • Paper

    can you do a macro that would work against gepard shield?

  • Paper

    No more updates?