Jump to content

Leaderboard

Popular Content

Showing content with the highest reputation since 03/23/24 in all areas

  1. Froggo Rö Folder This is a simple RO folder that contains everything you need to run a 2022-04-06 client, the latest publicly available. I have cleaned and compressed the data.grf file to reduce its size from 3.47GB to 2.44GB. I have also compressed the official_data.grf file from 1.24GB to 477MB. Before BGM, the Rö folder has a total size of 2.96GB, after BGM it reaches 3.30GB Screenshots Requirements Server Up & Running with ‎‏‏‎ PACKETVER=20220406 Visual C++ Redistributables DirectX Runtime Features Includes latest RoEnglishRE - 16/mar/2024 Custom Lua Support jRO Enchantment Display Includes rsu-kro-rag-lite (kRO updater) - v4.2.2.1316 Includes opensetup - v3.1.0.627 Includes iRO's Setup.exe, thanks to relzz! Includes AzzyAI 1.55 Includes Packet Viewer Download click here to download a .zip file of this ro-folder Extra Warp Profile for 2022-04-06 used for FroggoClient.exe (mirror) 2022-04-06 Vanilla Ragexe Client Login Screen Creator Official Ragnarok Complete Installer (08/Jan/2024)(mirror) Froggö Ro Folder Gitlab's Repo FAQ Why am I getting CHARACTER_INFO size error when trying to log in? Possible reasons: You are using outdated rAthena which doesn't work with 2022-04-06 client. You haven't set correct PACKETVER or done it with mistakes (skill issue ). You haven't recompiled rAthena. You haven't restarted server after recompilation. Why am I getting errors about MSVCP140.dll, VCRUNTIME140.dll when executing FroggoClient.exe? You haven't installed Visual C++ Redist, check requirements section, if problem persists, try installing this too Visual C++ Redist for VS 2012u4 What is official_data.grf ? official_data.grf is from the ROResourceCollection project, which brings many items, mobs and npc files from other RO Regions and merges it into one convenient grf. Why does the Setup.exe opens instead of the FroggoClient.exe? In your Windows registry there is no data about your selected graphic card, to fix it, just set up your settings in Setup.exe and click on OK, be aware to don't select DirectX9, stay on DirectX7 What was removed from the data.grf? Several unnecessary files were removed from the data.grf . These included residual files such as thumbs.db and stray BMP Screenshots. However, the majority of the cleanup was performed in the mob and npc sprite folders. In these folders, some .spr files contained sprites (images) that were not utilized in their corresponding .act files. For example, the monster katrinn's .spr file contained approximately 140 images, but only 6 of them were actually used. In total, out of nearly 90,000 collective images, around 9,400 were removed alv.
    8 points
  2. Version 1.0.0

    115 downloads

    [Event] Chess 1.0 By: MihaSenpai About: Hello Everynyan! My name is Mihael and I hope you are all well. I recently found these files in a personal repository and decided to share them with you. The .ZIP Contains the files: Script: NPC programmed for two players to participate in a game of chess. Map: Files containing the original Map of the event. Sprites: Files containing the event's ORIGINAL NPC Sprites. Hope you like it. If you have any questions, you can contact us here on the Forum or via Discord. A belated Happy 2024 to everyone.
    Free
    5 points
  3. Let's continue to explore new horizons in mapping! A seamless map containing the entire island of Angrboda, where the place of worship of the god Odin is located. The island can be used for a Battle Royale in the RO lore, for other events or as a replacement for the standard three locations. The map size is 400x400 tiles or 800x800 cells. .•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•.•°'°•. odin1map video: Lighting and shadows have been completely restored. In addition, local lighting has been added in various places. Since the map was created for special modes, the places available to players have been expanded. So the huge hill between the first and second areas was completely opened, and a coastal zone was added in the second area. Passages, descents and ascents were also added. The bridge connects the areas. Especially for the Battle Royale mode, shooting and using skills from lowlands and hills is allowed.
    4 points
  4. Hmm, there is an approximation that can be done which will probably be good enough. The point 2 is misleading; what is seen in the UI is a blend of the background + layers. You can't separate them as it's already a final image, if that makes sense. But you could in theory extract a transparency value by using a black and white background version of the composite image. Then do some math magic and approximate the bgra values. I've added the option in 1.1.0, though it's a bit awkward to use (found in File > Export as PNG...).
    3 points
  5. 1. rathena/src/map/script.hpp Search: HAT_EF_MAX Replace: /* Custom Hateffects */ HAT_EF_arcane_aura_A, HAT_EF_arcane_aura_B, HAT_EF_gluttony_aura_A, HAT_EF_gluttony_aura_B, HAT_EF_MAX = 9999 2. rathena/src/map/script_constants.hpp Search: export_constant(HAT_EF_EFST_C_20TH_ANNIVERSARY_HAT); Replace: export_constant(HAT_EF_EFST_C_20TH_ANNIVERSARY_HAT); /* Custom Hateffects */ export_constant(HAT_EF_arcane_aura_A); export_constant(HAT_EF_arcane_aura_B); export_constant(HAT_EF_gluttony_aura_A); export_constant(HAT_EF_gluttony_aura_B); 3. Compile you Server. 4. Copy in you Data/texture/effect/(arcane_aura) and (gluttony_aura) Data(Example_Auras).zip 5. Data/luafiles514/lua files/hateffectinfo/hateffectinfo.lub Search: HAT_EF_efst_C_20th_Anniversary_Hat = 176 } Replace: HAT_EF_efst_C_20th_Anniversary_Hat = 176, HAT_EF_arcane_aura_A = 177, HAT_EF_arcane_aura_B = 178, HAT_EF_gluttony_aura_A = 179, HAT_EF_gluttony_aura_B = 180 } resourceFileName: route effect(Data/effect/name you effect folder/name you str file.str) IsIgnoreRiding: if true when mounting a mount or asking for hateffect will not go up, it will ignore this action isRenderBeforeCharacter: If true when using hateffect it will be over the character. hatEffectPos: Position the Y anchor (up and down) of the hateffect hatEffectPosX: Positions hateffect X anchor (left right) isAdjustPositionWhenShrinkState: always true isAdjustSizeWhenShrinkState: always true Search: [HatEFID.HAT_EF_efst_C_20th_Anniversary_Hat] = { resourceFileName = "efst_C_20th_Anniversary_Hat\\20th_f.str", hatEffectPos = -6, hatEffectPosX = 0, isIgnoreRiding = true, isAdjustPositionWhenShrinkState = true, isAdjustSizeWhenShrinkState = true } } Replace: [HatEFID.HAT_EF_efst_C_20th_Anniversary_Hat] = { resourceFileName = "efst_C_20th_Anniversary_Hat\\20th_f.str", hatEffectPos = -6, hatEffectPosX = 0, isIgnoreRiding = true, isAdjustPositionWhenShrinkState = true, isAdjustSizeWhenShrinkState = true }, [HatEFID.HAT_EF_arcane_aura_A] = { resourceFileName = "arcane_aura\\arcane_aura_particle.str", hatEffectPos = -1, hatEffectPosX = 0, isRenderBeforeCharacter = false, isIgnoreRiding = false, isAdjustPositionWhenShrinkState = true, isAdjustSizeWhenShrinkState = true }, [HatEFID.HAT_EF_arcane_aura_B] = { resourceFileName = "arcane_aura\\arcane_aura.str", hatEffectPos = -2, hatEffectPosX = 0.2, isRenderBeforeCharacter = true, isIgnoreRiding = true, isAdjustPositionWhenShrinkState = true, isAdjustSizeWhenShrinkState = true }, [HatEFID.HAT_EF_gluttony_aura_A] = { resourceFileName = "gluttony_aura\\gluttony_aura_particle.str", hatEffectPos = -1, hatEffectPosX = 0, isRenderBeforeCharacter = false, isIgnoreRiding = false, isAdjustPositionWhenShrinkState = true, isAdjustSizeWhenShrinkState = true }, [HatEFID.HAT_EF_gluttony_aura_B] = { resourceFileName = "gluttony_aura\\gluttony_aura.str", hatEffectPos = -2, hatEffectPosX = 0.2, isRenderBeforeCharacter = true, isIgnoreRiding = true, isAdjustPositionWhenShrinkState = true, isAdjustSizeWhenShrinkState = true } } 6. Add Script NPC: rathena\npc\custom\hateffect.txt (Use command @efc in game) - script HATEFFECT -1,{ OnHatEffect: if(getgmlevel()>= 80){ input .@number; if (.@number < 1) end; if (.@number >= 301) end; for(.@i = 1; .@i < 300; ++.@i) hateffect .@i,false; hateffect .@number,true; end; } OnInit: bindatcmd "efc",strnpcinfo(3)+"::OnHatEffect"; end; } 7. Add npc in rathena\npc\scripts_custom.conf npc: npc/custom/hateffect.txt 8. (OPTIONAL) Add Hateffect in item: Example: - Id: 2301 AegisName: Cotton_Shirt Name: Cotton Shirt Type: Armor Buy: 10 Weight: 100 Defense: 1 Locations: Armor: true ArmorLevel: 1 Refineable: true Script: | hateffect HAT_EF_arcane_aura_A,true; hateffect HAT_EF_arcane_aura_B,true; UnEquipScript: | hateffect HAT_EF_arcane_aura_A,false; hateffect HAT_EF_arcane_aura_B,false; Update: My project all Auras. (09/27/2023) - Pack Auras: My Project All Auras Too my project Ragnarok Online Pre-Renewal(Offline) and guide for easy update. - Data Folder + Server: Google Drive or MediaFire - Client RO: Google Drive or MediaFire Guide for start server and Play: 0. Dowloand Client RO and Update. 1. Download Data Folder + Server 2. Copy all files C:/MyServer/Client (In folder Ragnarok Onmline). 3. Run C:/MyServer/UwAmp/UwAmp.exe 4. Start Server C:/MyServer/rathena/runserver.exe Enjoy!!! Gluttony Aura: Arcane Aura: Credits: LCDTheOG Fros
    3 points
  6. Version 1.0.1

    110 downloads

    i recoded older rAthena Serv Monitor by DarkIrata in newer WPF -> Added Multithreading Server Start -> Added 1Click-Restart Server Button -> Added the WebServ -> Errorlogs are working and saving without crashes -> New design the open-src code -> https://github.com/AoShinRO/rAthena-ServMonitor-ByAoShinHo
    Free
    3 points
  7. Version 1.0.0

    220 downloads

    Hello everyone! Happy New Year! Here are my handmade gifts, custom maps for you: 2024: navayo (+nav_beach, nav_in01, nav_in02) https://rathena.org/board/topic/116200-showcase-navayo/ anrydrago https://rathena.org/board/topic/124265-showcase-miniquest-anry-dragon/ 2023: x_base https://rathena.org/board/topic/140494-showcase-x-base/ crimea https://rathena.org/board/topic/132870-showcase-crimea/ barcode https://rathena.org/board/topic/116040-showcase-barcode/ ice2xlake https://rathena.org/board/topic/124194-showcase-ice-twice-lake/ lv_beach https://rathena.org/board/topic/116553-showcase-love-beach/ yavin1b https://rathena.org/board/topic/116300-showcase-yavin1b/ mystvil https://rathena.org/board/topic/117187-showcase-mystical-vil/ crystal https://rathena.org/board/topic/116079-showcase-crystal/ 1@scp087 https://rathena.org/board/topic/116223-showcase-scp-087/ mag_dun03_ https://rathena.org/board/topic/127185-showcase-magma-dungeon-lvl-3/ b_book(1,2,3,4) https://rathena.org/board/topic/116491-showcase-four-battle-books/ The size of attachments (30mb) on rAthena does not allow to add map resources. You can find the full materials here: https://mega.nz/folder/8atXmYgC#yJEL_ssWj8D8XwmpgInYiQ ~ Keep calm and use it on your server ~ ~ Don't claim my work as yours please and etc ~ ~ Any requests/reports - https://rathena.org/board/profile/47250-w0wzukubg/ Thanks, Zuku ~
    Free
    3 points
  8. Fixed in 1.8.7.1. There was an issue with UV texture coordinates being all set to 0 on new tiles.
    2 points
  9. After encountering issues with the current data.grf, I decided to start from scratch and overhaul the entire process. The result? A significantly reduced file size for the data.grf Previously, the data.grf weighed in at around 2.45GB, but now it’s down to just 2.15GB. In addition to the file size reduction, I’ve added 275~ mini maps to maps that were lacking them. The entire folder, including BGM, now stands at 2.96GB. What was done to the poor data.grf? Besides cleaning up unused sprites from npc and mob folders, now I converted all .BMP files to be 8bit, this doesn't affect quality on a game like RO, instead, it actually makes it easier for the client to handle those assets. .JPG and .PNG were treated as well but with some differences. Feel free to report any issue here
    2 points
  10. Prueba cambiando (BaseLevel/2) por status_get_lv(src)
    2 points
  11. src/status.cpp search for: // Skill-related recovery (only when sit) there you can edit the source. ^-^
    2 points
  12. Hey there, fellow Ragnarok enthusiasts! Welcome to RO Artisan Hub, your cozy corner of creativity where we sprinkle a little bit of magic onto your Ragnarok Online server. Are you ready to give your players an eye-popping visual feast that'll have them coming back for more? You're in the right place! Here's a peek at the goodies we've got lined up for you: Custom Patcher Skins - Tired of the same old loading screens? Our patcher skins are like a breath of fresh air, offering a visual treat that'll get your players excited before they even step foot into your world. (CODE INCLUDED!) Interface Designs - Clunky menus are a thing of the past. We'll deck out your UI with a slick, user-friendly design that's not just pretty to look at but also a breeze to navigate. Logo & Branding - First impressions count, and a killer logo sets the stage for your server's identity. Let us craft a branding package that'll make your server the talk of the town (or, in this case, the world of Midgard). Promotional Graphics - Need to spread the word about your server's latest and greatest features? Our promotional graphics are perfect for catching eyes on social media, forums, and beyond. We're all about collaboration here at RO Artisan Hub, so we'll be with you every step of the way to ensure the final product isn't just good; it's exactly what you envisioned. Your satisfaction is our top priority, and we're not happy until you're over the moon with your new designs. So what are you waiting for? Let's get together and make your Ragnarok Online server the envy of them all. Drop us a message, and we'll start spinning those creative gears right away! Happy gaming, The RO Artisan Hub Team Discord Server: https://discord.gg/KpXFFwrE
    2 points
  13. I have multiple generator project, maybe u can try.
    2 points
  14. Here is another fully furbished Morroc Town! Join my Discord Channel: https://discord.gg/AhBjDJnEW3 Cinematic! morom.mp4
    2 points
  15. This is my new work Payon Town ROM! Join my Discord Channel: https://discord.gg/AhBjDJnEW3 Cinematic! payorm.mp4
    2 points
  16. Was having errors running my own 20220406 client, and this saved me. Thanks for this !
    2 points
  17. I'm developing a server based on a game called Harvest Moon. Conclude the Farm system, it will accept trees, vegetables and animals. What do you think? Any suggestions? Content of the video in Portuguese.
    2 points
  18. There are two methods for doing that: Once you have the current frame, click on: Then add the name of the file, like "test.wav". The file should be in data\wav\test.wav You can add a bunch of sound names by editing the list instead: Then select the sound for the frame from the list. If the sound doesn't play when testing the sprite, then it's just because it wasn't found in the resources. That's not really important, but you can add more resources from File > Settings > Sound:
    2 points
  19. Version 1.2

    777 downloads

    I just updated the existed one by raPalooza~ to include the K and M indicator. DarkBreath is there too. The K is light green like a frog and the M is red wine like frog's blood Used font is PixelOperator 8
    Free
    2 points
  20. Version 1.0.1

    134 downloads

    ***Include Abyss Lake4**** -IllusionTeddy Bear/Labyrinth base on https://www.divine-pride.net/ (Include Drops Table) -No Portal -Issgard Dun/Frozen scale Field are custom to fit my server. (Custom Drops Table) Install : Put Mob and mob skill to rathena\db\import PutNpcfiles (Custom.txt) to rathena\npc\custom add new line npc: npc/custom/Custom.txt at rathena\npc\scripts_custom.conf
    Free
    2 points
  21. Set Auto Farm Level (Use Item) + Auto Attack All Monster + Auto Attack By Monster Name + Auto Loot + Auto HP + Auto SP + Auto Teleport
    1 point
  22. Hi. Try this one if you do not want to use instance system, modified from AnnieRuru' Private MVP & Branch Room in \npc\custom\etc\mvp_room.txt //===== rAthena Script ======================================= //= Private MVP & Branch Room //===== By: ================================================== //= AnnieRuru //===== Current Version: ===================================== //= 1.0 //===== Compatible With: ===================================== //= rAthena Project //===== Description: ========================================= //= Allows players to rent an MVP room for personal use, //= or for a party or guild. //===== Additional Comments: ================================= //= 1.0 First version, edited. [Euphy] //============================================================ prontera,148,174,5 script DB Room Manager 4_F_RUSGREEN,{ mes "[^EFCC00 DB Room Manager ^000000]"; mes "How are thing with you?", " "; mes "I offer two types of DB Room. Choose what best suits your need."; switch(select("Public DB Room", "Private DB Room", "Buy Branches", "Cancel")) { case 1: .@room = select( "Enter Room 1 ["+ getmapusers("06guild_01") +"]", "Enter Room 2 ["+ getmapusers("06guild_02") +"]", "Enter Room 3 ["+ getmapusers("06guild_03") +"]", "Enter Room 4 ["+ getmapusers("06guild_04") +"]"); warp "06guild_0"+ .@room, 0,0; end; case 2: clear; mes "[^EFCC00 DB Room Manager ^000000]"; if ( getvariableofnpc( .rentcost, "DB Room Helper" ) ) mes "The cost to rent a room for "+ getvariableofnpc( .timeout, "DB Room Helper" ) +" minutes is "+ callfunc("F_InsertComma", getvariableofnpc( .rentcost, "DB Room Helper" ) ) +"z."; else mes "You can only use the room for only "+ getvariableofnpc( .timeout, "DB Room Helper" ) +" minutes."; mes " "; .@menu$ = ""; for ( .@i = 5; .@i <= 8; .@i++ ) { if ( getvariableofnpc( .renttime[.@i], "DB Room Helper" ) ) { //mes "Room #"+ .@i +" = "+ .color$[ .type[.@i] ] + .whoinuse$[.@i] +"^000000"; .@menu$ += "Enter Room " + .@i + " ["+ .color$[ .type[.@i] ] + .whoinuse$[.@i] +"^000000]:"; } else .@menu$ += "Rent Room " + .@i + ":"; } next; .@room = select(.@menu$)+4; if ( getvariableofnpc( .renttime[.@room], "DB Room Helper" ) ) { if ( .inuseid[.@room] == getcharid( .type[.@room] ) ) { warp "06guild_0"+ .@room, 0,0; close; } else { mes "[^EFCC00 DB Room Manager ^000000]"; mes "This room is reserved for "; mes .color$[ .type[.@room] ] + .whoinuse$[.@room] +"^000000."; mes "Please select another."; close; } } mes "[^EFCC00 DB Room Manager ^000000]"; mes "Reserve this room for..."; next; .@type = select( "For my party members", "For my guild members", "For personal account use" ); if ( !getcharid(.@type) ) { mes "[^EFCC00 DB Room Manager ^000000]"; mes "You do not own a "+( ( .@type == 1 )? "Party" : "Guild" )+"."; close; } else if ( Zeny < getvariableofnpc( .rentcost, "DB Room Helper" ) ) { mes "You don't have enough zeny to rent a room."; close; } else if ( getvariableofnpc( .renttime[.@room], "DB Room Helper" ) ) { mes "[^EFCC00 DB Room Manager ^000000]"; mes "I'm sorry, somebody else has already registered this room faster than you."; close; } for ( .@i = 1; .@i <= 8; .@i++ ) { if ( ( getvariableofnpc( .renttime[.@i], "DB Room Helper" ) ) && .@type == .type[.@i] && getcharid(.@type) == .inuseid[.@i] ) { mes "[^EFCC00 DB Room Manager ^000000]"; mes "You already rented Room#"+ .@i +". Use that room instead."; close; } } set .type[.@room], .@type; set .inuseid[.@room], getcharid(.@type); set .whoinuse$[.@room], strcharinfo( ( .@type == 3 )? 0 : .@type ); Zeny -= getvariableofnpc( .rentcost, "DB Room Helper" ); warp "06guild_0"+ .@room, 0,0; killmonsterall "06guild_0"+ .@room; donpcevent "Private DB Room Helper#"+ .@room +"::OnEnterMap"; close; case 3: close2; callshop "DB_Room#branch", 1; end; case 4: close; } OnInit: .color$[1] = "^EE8800"; // party color .color$[2] = "^70CC11"; // guild color .color$[3] = "^0000FF"; // account color end; } - script DB Room Helper -1,{ if (.renttime[ atoi( strnpcinfo(2) ) ]) npctalk "Time left: " + callfunc( "Time2Str", .renttime[ atoi( strnpcinfo(2) ) ] + .timeout * 60 ),strnpcinfo(0),bc_self; switch ( select(.menu$ + "Leave this room:" + (compare(strnpcinfo(1),"Private")?"Give up this room":"") ) ) { case 1: if ( mobcount( "this","" ) ) { npctalk "I cannot offer heal service when there are monsters around.",strnpcinfo(0),bc_self; end; } sc_end SC_STONE; sc_end SC_SLOWDOWN; sc_end SC_FREEZE; sc_end SC_SLEEP; sc_end SC_CURSE; sc_end SC_SILENCE; sc_end SC_CONFUSION; sc_end SC_BLIND; sc_end SC_BLEEDING; sc_end SC_DECREASEAGI; sc_end SC_POISON; sc_end SC_HALLUCINATION; sc_end SC_STRIPWEAPON; sc_end SC_STRIPARMOR; sc_end SC_STRIPHELM; sc_end SC_STRIPSHIELD; sc_end SC_CHANGEUNDEAD; sc_end SC_ORCISH; sc_end SC_BERSERK; sc_end SC_SKE; sc_end SC_SWOO; sc_end SC_SKA; percentheal 100,100; specialeffect2 EF_HEAL; npctalk "You are completely healed.",strnpcinfo(0),bc_self; end; case 2: npctalk "Are you sure you want to leave this room?",strnpcinfo(0),bc_self; if ( select( "No, stay here","Yes, leave now") == 2 ) warp .respawnmap$, .respawnx, .respawny; end; case 3: if ( getmapusers( strcharinfo(3) ) > 1 ) { npctalk "There are still some players in this room. Make sure you are the last member in this room to use this option.",strnpcinfo(0),bc_self; end; } mes "[DB Room Helper]"; mes "Are you sure you want to give up this room?"; if ( .rentcost ) mes "You will need to pay again to enter this room."; next; if ( select( "Yes", "No" ) == 2 ) close; awake strnpcinfo(0); end; } close; OnEnterMap: .@id = atoi( strnpcinfo(2) ); .renttime[.@id] = gettimetick(2); sleep .timeout * 60000; mapwarp strnpcinfo(4), .respawnmap$, .respawnx, .respawny; .renttime[.@id] = 0; killmonsterall strnpcinfo(4); end; OnInit: if ( !getstrlen( strnpcinfo(2) ) ) { // Config --------------------------------------------------------------------------------------- // Room rental time, in minutes. // When time runs out, all players inside the room will be kicked out. // Do NOT set this to zero! .timeout = 60; .rentcost = 100000; // Zeny cost for renting a room (0 = free) // Options setting inside the room .@menu[1] = 1; // Turn Heal option On/Off // Respawn point when players leave the room set .respawnmap$, "prontera"; set .respawnx, 150; set .respawny, 174; // Config Ends ------------------------------------------------------------------------ if ( !.timeout ) set .timeout, 60; .menu$ = ( .@menu[1] ? "Heal" : "" ) +":" ; } else { mapannounce strnpcinfo(4), "An administrator has refreshed the server. Please re-register this room.", bc_map; mapwarp strnpcinfo(4), .respawnmap$, .respawnx, .respawny; } end; } - shop DB_Room#branch -1,604:100000,12103:10000000 06guild_01,49,49,4 duplicate(DB Room Helper) DB Room Helper#1 4_F_RUSGREEN 06guild_02,49,49,4 duplicate(DB Room Helper) DB Room Helper#2 4_F_RUSGREEN 06guild_03,49,49,4 duplicate(DB Room Helper) DB Room Helper#3 4_F_RUSGREEN 06guild_04,49,49,4 duplicate(DB Room Helper) DB Room Helper#4 4_F_RUSGREEN 06guild_05,49,49,4 duplicate(DB Room Helper) Private DB Room Helper#5 4_F_RUSGREEN 06guild_06,49,49,4 duplicate(DB Room Helper) Private DB Room Helper#6 4_F_RUSGREEN 06guild_07,49,49,4 duplicate(DB Room Helper) Private DB Room Helper#7 4_F_RUSGREEN 06guild_08,49,49,4 duplicate(DB Room Helper) Private DB Room Helper#8 4_F_RUSGREEN 06guild_01 mapflag nowarpto 06guild_02 mapflag nowarpto 06guild_03 mapflag nowarpto 06guild_04 mapflag nowarpto 06guild_05 mapflag nowarpto 06guild_06 mapflag nowarpto 06guild_07 mapflag nowarpto 06guild_08 mapflag nowarpto 06guild_01 mapflag nomemo 06guild_02 mapflag nomemo 06guild_03 mapflag nomemo 06guild_04 mapflag nomemo 06guild_05 mapflag nomemo 06guild_06 mapflag nomemo 06guild_07 mapflag nomemo 06guild_08 mapflag nomemo 06guild_01 mapflag noteleport 06guild_02 mapflag noteleport 06guild_03 mapflag noteleport 06guild_04 mapflag noteleport 06guild_05 mapflag noteleport 06guild_06 mapflag noteleport 06guild_07 mapflag noteleport 06guild_08 mapflag noteleport 06guild_01 mapflag nosave SavePoint 06guild_02 mapflag nosave SavePoint 06guild_03 mapflag nosave SavePoint 06guild_04 mapflag nosave SavePoint 06guild_05 mapflag nosave SavePoint 06guild_06 mapflag nosave SavePoint 06guild_07 mapflag nosave SavePoint 06guild_08 mapflag nosave SavePoint 06guild_01 mapflag nopenalty 06guild_02 mapflag nopenalty 06guild_03 mapflag nopenalty 06guild_04 mapflag nopenalty 06guild_05 mapflag nopenalty 06guild_06 mapflag nopenalty 06guild_07 mapflag nopenalty 06guild_08 mapflag nopenalty
    1 point
  23. If(BaseLevel >= 50) We ve pre-defined variables. I recommend u to take a look in the doc folder. https://github.com/rathena/rathena/blob/81894eeba6ee613d5c40bedeb48455303f703ccc/doc/script_commands.txt#L580 Rynbef~
    1 point
  24. int32 pc_attendance_counter( map_session_data* sd ){ std::shared_ptr<s_attendance_period> period = pc_attendance_period(); // No running attendance period if( period == nullptr ){ return 0; } // Get the counter for the current period int counter = static_cast<int>(pc_readreg2( sd, ATTENDANCE_COUNT_VAR )); + // Check if we have a remaining counter from a previous period + if( counter >= 20 && !pc_attendance_rewarded_today(sd) ){ + pc_setreg2( sd, ATTENDANCE_COUNT_VAR, 0 ); + return 0; + } // Check if we have a remaining counter from a previous period if( counter > 0 && pc_readreg2( sd, ATTENDANCE_DATE_VAR ) < period->start ){ // Reset the counter to zero pc_setreg2( sd, ATTENDANCE_COUNT_VAR, 0 ); return 0; } return 10 * counter + ( ( pc_attendance_rewarded_today(sd) ) ? 1 : 0 ); } I think this is what @Sapito Sucio is trying to tell you to do. Though you have to really understand that attendance forces players to login/attend. On the days you want them active. It would be best if you just use a daily reward script for the purpose of resetting your daily rewards.
    1 point
  25. - We added Shiba BEP20 Token to payments gateway If you have any inquiries, please let us know
    1 point
  26. 1 point
  27. Oh snap, I forgot this thread xD I did my testing and tried some stuff, but you can't really get those numbers more together as you downsize them. I tried with extremely low size numbers and still, a padding is added between the numbers, also, using low size numbers make it look so blurry and awful xD
    1 point
  28. U can config the job master and add additional lines. Everything u need u will find on doc/script_commands.txt and the Jobchanger on npc/custom/jobmaster.txt by @Euphy Rynbef~
    1 point
  29. Hi, the new minimap option/feature is awesome, thank you for improving GRF Editor still.
    1 point
  30. Hi. please put scripts inside a code box next time, the indentation is all lost otherwise. //==== DarkRO Scripts ==================================== //= Credit Exchanger //===== By: ================================================== //= //===== Current Version: ===================================== //= 1.4 //===== Description: ========================================= //= Allow to Convert Zeny into a Ticket. //===== Changelog: =========================================== //= Not yet tested for bugs //= 1.0 Implementation //= 1.1 Re-script (added quest) //= 1.2 Automated zeny-to-credit exchange and vice-versa //= 1.3 Added @security checking. //= 1.4 Added Black Credit Exchange feature //============================================================ - script Credit Agent -1,{ set @header$,"[^FF8000 Credit Agent ^000000]"; .@credit_id = 40000; //Credit Item ID if (checksecurity()) { message strcharinfo(0), "You can't do this action, Protected by @security."; end; } if(#CREDITPASSPORT > gettimetick(2)) { disable_items; setpcblock(PCBLOCK_COMMANDS, true, getcharid(3)); getinventorylist(); mes @header$; mes "Hello, I can see that you still have your Intergalactical Passport."; mes " "; mes "What can I do for you?"; mes " "; mes "^FF0000Your current credit: " + F_InsertComma(countitem(.@credit_id)); next; switch(prompt("I want to change Zeny to Credit:I want to change Credit to Zeny.:Nothing, just passing by.")){ case 255: setpcblock(PCBLOCK_COMMANDS, false, getcharid(3)); break; case 1: if (@inventorylist_count == MAX_INVENTORY && !countitem(.@credit_id)) { setpcblock(PCBLOCK_COMMANDS, false, getcharid(3)); mes @header$; mes "You need to clear your inventory first."; close(); } mes @header$; mes "The exchange rate is fixed and its ^00008810,000,000^000000 Zeny = 1 ^FF0000Credit^000000."; mes " "; mes "How will you exchange your Zeny?"; next; .@i = prompt("Decide on how many Credits I need.:Exchange all my Zeny:Cancel"); if (.@i == 3) goto L_Cancel; else if (.@i == 255) { setpcblock(PCBLOCK_COMMANDS, false, getcharid(3)); break; } else if (.@i == 1) { mes @header$; mes "How much Credits do you need?"; mes " "; mes "^FF0000(Enter '0' to cancel the transaction)^000000"; next; input @ZTC; if (@ZTC <= 0) goto L_Cancel; else if (@ZTC > MAX_ZENY / 10000000) { L_Exceed: setpcblock(PCBLOCK_COMMANDS, false, getcharid(3)); mes @header$; mes "Sorry, but you have"; mes "exceeded from the limit."; close(); } else if (@ZTC > Zeny / 10000000) { L_LessZeny: setpcblock(PCBLOCK_COMMANDS, false, getcharid(3)); mes @header$; mes "You don't have enough zeny."; close(); } else { L_ConvertZTC: if (!checkweight(.@credit_id,@ZTC)) { mes @header$; mes "Sorry. You can't hold this amount of credit."; mes "Such amount would exceed your weight limit."; for(; @ZTC; @ZTC--) if (checkweight(.@credit_id,@ZTC)) break; if (@ZTC) { mes "You can only hold up to " + @ZTC + "."; mes "Would this amount do?"; next; if (select("Ok, " + @ZTC + " is acceptable", "No, just cancel") == 2) callsub L_Cancel; } else { setpcblock(PCBLOCK_COMMANDS, false, getcharid(3)); close; } } mes @header$; mes "You will be receiving ^FF0000"+@ZTC+" Credit"+(@ZTC != 1 ? "s":"")+"^000000."; mes " "; mes "Proceed?"; next; .@menu = prompt("I changed my mind:Proceed!"); if (.@menu == 1) { setpcblock(PCBLOCK_COMMANDS, false, getcharid(3)); close(); break; } if (.@menu == 255) { setpcblock(PCBLOCK_COMMANDS, false, getcharid(3)); break; } setpcblock(PCBLOCK_COMMANDS, false, getcharid(3)); Zeny -= @ZTC * 10000000; getitem .@credit_id, @ZTC; mes @header$; mes "Here you go!"; mes "Thank you for using our service."; close(); } } else { @ZTC = Zeny / 10000000; if (@ZTC == 0) goto L_LessZeny; else goto L_ConvertZTC; } break; case 2: goto L_ConvertCTZ_Main; break; default: L_Cancel: setpcblock(PCBLOCK_COMMANDS, false, getcharid(3)); mes @header$; mes "Please do come back, Have a nice day!."; close; break; } end; } if(#CRED_Q == 1) { disable_items; setpcblock(PCBLOCK_COMMANDS, true, getcharid(3)); mes @header$; mes "Welcome back!, "+strcharinfo(0)+"."; mes "Do you have what I asked for?"; next; switch(prompt("Yes, here it is!:What do I need again?:I want to change Credit to Zeny.:Not yet.")){ case 255: setpcblock(PCBLOCK_COMMANDS, false, getcharid(3)); break; case 1: if(Zeny < 100000000){ setpcblock(PCBLOCK_COMMANDS, false, getcharid(3)); mes @header$; mes "I think you are missing something this is the list that i needed:"; mes "^FF0000100,000,000 Zeny^000000."; close; } next; mes @header$; mes "Congratulations, Enjoy your Intergalactical Passport."; mes " "; mes "You may now use Zeny to ^FF0000Credit^000000 services in a matter of time."; setpcblock(PCBLOCK_COMMANDS, false, getcharid(3)); Zeny -= 100000000; #CREDITPASSPORT = 1728000+ gettimetick(2); #CRED_Q = 0; close; break; case 2: mes @header$; mes "You will have to bring me the following:"; mes "^FF0000100,000,000 Zeny^000000."; next; setpcblock(PCBLOCK_COMMANDS, false, getcharid(3)); mes @header$; mes "I suggest you look for Simon in Prontera. He is known as gumbling master that could provide you tickets."; mes " "; mes "I'll be waiting for you!"; close; break; case 3: goto L_ConvertCTZ_Main; break; case 4: setpcblock(PCBLOCK_COMMANDS, false, getcharid(3)); mes @header$; mes "Okay, Hurry up!"; close; break; } } mes @header$; mes "Hello, It looks like you don't have an Intergalactical Passport yet."; mes " "; mes "Would you like to have one?"; next; switch(prompt("Yes, I'd like to have one.:Intergalactical Passport? What is that?:I want to change Credit to Zeny.:No thanks!")){ case 1: mes @header$; mes "Very well. You will have to bring me the following:"; mes "^FF0000100,000,000 Zeny^000000."; next; mes @header$; mes "I suggest you look for Simon in Prontera. He is known as gumbling master that could provide you tickets."; mes " "; mes "I'll be waiting for you!"; #CRED_Q = 1; close; break; case 2: mes @header$; mes "An Intergalactical Passport is required to use the Intergalactical currency: ^FF0000Credit^000000."; mes " "; mes "The value of ^FF0000Credit^000000 is equivalent to ^00008810,000,000^000000 Zeny."; next; mes @header$; mes "Once you have this passport, You can exchange Zeny to ^FF0000Credit^000000 with any Credits Agents in major towns."; next; mes @header$; mes "^FF0000NOTE^000000: That the passport is not required when exchanging ^FF0000Credit^000000 to Zeny."; next; mes @header$; mes "That contract will last for 20 days. After that time, You will have to renew your passport."; close; break; case 3: disable_items; setpcblock(PCBLOCK_COMMANDS, true, getcharid(3)); L_ConvertCTZ_Main: mes @header$; mes "The exchange rate is fixed and its 1 ^FF0000Credit^000000 = ^00008810,000,000^000000 Zeny."; mes " "; mes "How will you exchange your ^FF0000Credits^000000?"; next; .@i = prompt("Decide how many Credits to exchange.:Exchange all my Credits:Cancel"); if (.@i == 3) goto L_Cancel; else if (.@i == 255) { setpcblock(PCBLOCK_COMMANDS, false, getcharid(3)); break; } else if (.@i == 1) { mes @header$; mes "How many ^FF0000Credits^000000 do you want to exchange?"; mes " "; mes "^FF0000(Enter '0' to cancel transaction)^000000"; next; input @CTZ; if (@CTZ <= 0) goto L_Cancel; else if (@CTZ > countitem(.@credit_id)) { L_LessCredit: setpcblock(PCBLOCK_COMMANDS, false, getcharid(3)); mes @header$; mes "You don't have enough Credits."; close(); } else { @CTZ_ = Zeny%10000000; if (@CTZ_ > 0) @CTZ_ = ((MAX_ZENY/10000000) - (Zeny/10000000)) - 1; else @CTZ_ = (MAX_ZENY/10000000) - (Zeny/10000000); if (@CTZ > (MAX_ZENY/10000000) || @CTZ_ < @CTZ ) goto L_Exceed; if (@CTZ > countitem(.@credit_id)) goto L_LessCredit; L_ConvertCTZ: mes @header$; mes "You will be exchanging your ^FF0000"+@CTZ+" Credit"+(@CTZ != 1 ? "s":"")+"^000000."; mes " "; mes "Proceed?"; next; .@menu = prompt("I changed my mind:Proceed!"); if (.@menu == 1) { setpcblock(PCBLOCK_COMMANDS, false, getcharid(3)); close(); break; } if (.@menu == 255) { setpcblock(PCBLOCK_COMMANDS, false, getcharid(3)); break; } delitem .@credit_id, @CTZ; Zeny += 10000000 * @CTZ; message(strcharinfo(0), "You have received "+F_InsertComma(10000000 * @CTZ)+" Z."); setpcblock(PCBLOCK_COMMANDS, false, getcharid(3)); mes @header$; mes "Here you go!"; mes "Thank you for using our service."; close(); } close(); } else { @CTZ = countitem(.@credit_id); .@ZenyCap = (MAX_ZENY - Zeny) / 10000000; if (@CTZ == 0) goto L_LessCredit; if (@CTZ >= .@ZenyCap) @CTZ = .@ZenyCap; if (@CTZ == 0) goto L_Exceed; goto L_ConvertCTZ; } break; case 4: setpcblock(PCBLOCK_COMMANDS, false, getcharid(3)); mes @header$; mes "Please do come back, Have a nice day!."; close; break; } } // Duplicates //prontera,132,215,5 duplicate(Credit Agent) Credit Agent#prt 4_M_KHBOY market,99,53,6 duplicate(Credit Agent) Credit Agent#mall 4_M_KHBOY
    1 point
  31. War Declaration System A system which allows guild leaders to declare a war against other guilds. You can only start attacking opposing guild when both guilds will declare each other as enemies. There will be an announcement when guild leaders sets a guild as an antagonist and another announcement saying that both guilds have agreed to declare war on each other. Once both guilds declared war, they can attack each other outside PVP, GvG, BG, Castle Maps, and Towns.. meaning on fields/dungeons only. This should add up some spice on guild vs guild match ups on a server. I'm open for some suggestions for improvement of this system! Cheers! [ Video: ]
    1 point
  32. This is not tested under renewal. I think it should still work, but test it with a GM character first. The default implementation of Homunculi is kind of obnoxious. When you create one, you get one of the homunculi at random, and in order to get another one, you have to completely delete them from existence. Wouldn't it be nice if you could keep the other homunculi to use later? Well, now you can! What it does: - When you use rest, the Homunculus returns to its Embyro. - You can use Call Homunculus to call it back out, just as it was when you rested it. - You can store the Homunculus for later use, allowing you to raise a different Homunculus, which is not normally possible. - Only you can call the Homunculus back out. If another alchemist tries to call it, it doesn't let them. - You can still delete the Homunculi as normal to remove them from existence completely. How it works from a technical perspective: - When you rest the homunculus, it is technically "removed" from you, similar to deleting it, but it returns an embyro with the Homunculus id set to its card[1] slot. - When you call out a Homunculus from an Embyro, if the embyro has a value in its card[1] slot, it restores that Homunculus instead of creating a new one. Some minor limitations: - It's not possible to distinguish embryos from each other, and call homunculus will always try to call the first one it finds in your inventory. You'll need to store the ones you don't want to raise right now, and it may take some trial and error to hatch the right one if you have a bunch. - The name display of the embryo doesn't work with the client I have (it seems like the client will only display the name if the card[1] slot is 0, which it's not if a homunculus is in there). This makes it hard to tell who owns a homunculus embyro. How to implement: Make the following code changes: In homunculus.cpp: Find the method "hom_vaporize": First, add the following variable declarations to the top, under the existing ones: int itemflag; struct item tmp_item; Next, comment out the following line: hd->homunculus.vaporize = flag ? flag : HOM_ST_REST; Then, insert the following at the end of the method, just before the return statement. if (hd->homunculus.intimacy > 0) { memset(&tmp_item, 0, sizeof(tmp_item)); tmp_item.nameid = 7142; tmp_item.amount = 1; tmp_item.identify = 1; tmp_item.card[0] = CARD0_CREATE; tmp_item.card[1] = hd->homunculus.hom_id; tmp_item.card[2] = GetWord(sd->status.char_id, 0); // CharId tmp_item.card[3] = GetWord(sd->status.char_id, 1); if ((itemflag = pc_additem(sd, &tmp_item, tmp_item.amount, LOG_TYPE_PRODUCE))) { clif_additem(sd, 0, 0, itemflag); if (battle_config.skill_drop_items_full) { map_addflooritem(&tmp_item, tmp_item.amount, sd->bl.m, sd->bl.x, sd->bl.y, 0, 0, 0, 0, 0); } } unit_remove_map(&hd->bl, CLR_OUTSIGHT); sd->status.hom_id = 0; unit_free(&hd->bl, CLR_OUTSIGHT); sd->hd = 0; return 1; } Next, find the method "hom_call": Find this code: if (!sd->status.hom_id) //Create a new homun. return hom_create_request(sd, HM_CLASS_BASE + rnd_value(0, 7)) ; Replace it with this: struct item ed; int n; // find the embryo if (!sd->status.hom_id) { //Create or revive a homun. if ((n = pc_search_inventory(sd, 7142)) >= 0) { ed = sd->inventory.u.items_inventory[n]; } else { return false; // no embryo } if (ed.card[1] != 0) { // is it ours? if (sd->status.char_id == MakeDWord(ed.card[2], ed.card[3])) { // revive the homun // delete the embryo pc_delitem(sd, n, 1, 0, 0, LOG_TYPE_CONSUME); sd->status.hom_id = ed.card[1]; // proceed with rest of function } else { // Cannot revive someone else's homunculus return false; } } else { // create a new homun // delete the embryo pc_delitem(sd, n, 1, 0, 0, LOG_TYPE_CONSUME); return hom_create_request(sd, HM_CLASS_BASE + rnd_value(0, 7)); } } Almost done, just one small change to make in skill.cpp. Find this line: if (sd->status.hom_id) //Don't delete items when hom is already out. And comment it out (we never want this method to delete the embyros, since the call method now handles it). Now just recompile your server and you should have the new homunculus behaviour.
    1 point
  33. Honestly, mirroring the download link feels a bit pointless to me. The repo's getting updates overtime, and trying to keep up with mirroring every new version? Nah, not really my jam. I recommend redownloading it, as it appears your initial download may have been corrupted.
    1 point
  34. Project will expire in 7 days and 4 hours

    Our monthly fees: Web Hosting ($32) VPS Backup Drive ($13) 200GB Offsite NAS Sendgrid SMTP Relay ($10) So you all get the emails you're supposed to. Misc software renewals ($5) Forum apps and plugins that require license renewal every 6 months are broken down to a monthly value. There are other costs for back-end services which are specifically sponsored by individual members of the rAthena project so do not require community crowdfunding.
    1 point
  35. Search for this line in your emulator, and you will find it int counter = static_cast<int>(pc_readreg2( sd, ATTENDANCE_COUNT_VAR ));
    1 point
  36. Most of you who use fishing scripts on your server have probably checked out my Fishing Script before...Well I've been working on currently enhancing it. Changelog: v1.2 Shortened most of the script Added Sounds and Effects to make it a bit more lively Added two new Configurations - Auto Fish, Auto Fish on fail Enhanced map announce to work with where-ever the script is located Enhanced randomizing caught junk to enable a lot more to be added Removed Chat menu so the script has less clicking Fishing 1.2.txt This one is slightly different then the one below. Fishing 1.2.txt Please read Optional-Addons before using this script. Optional Add-ons Upcoming Changes This script has been abandoned to start work on a Profession System.
    1 point
  37. [ Creating an Open-source Ragnarok Online Server with kRO & OpenKore Support ] [ Table Of Contents ] Introduction Master List: All The Required Downloads Microsoft Visual Studio 2022: Installation Laragon: Installing and Upgrading rAthena: Installing, Configuring, and Optimizing Flux Control Panel: Installing and Modifying The kRO Client: Updating, Diffing, Hexing, Translating, and Customizing The OpenKore Client: Packet Extraction, Configuration, and Field Updating Logging Into Your Server, Making a GM Account, and Playing! Troubleshooting The Situation Packaging It Up For Transportation Post Install House Cleaning Conclusion [ Introduction ]I'd like to walk you through the complete process of creating an up-to-date open-source server for Ragnarok Online using rAthena. This includes removing all of its security so that it can be accessed via multiple clients. Next, we'll install a web management control panel that users can create accounts on, submit tickets with, even research your servers’ unique stats and databases. Afterwards we're going to transform the latest official Korean client by diffing, hexing, translating, & heavily customizing it. Finally, we're going to configure the OpenKore client to work with our server. As well support interfacing with the official client through proxy.We're going to be using the same packet structure across all aspects so that they can properly communicate with each other. This was selected by researching what the last fully developed version was for OpenKore. (2020-04-01b) Since this is running primarily open-source software, it slowly gets better overtime. This is actually ahead of the International Servers and many other countries not only in features but content. I've included the full process so that anyone can take the next or a different set of packets and reproduce these results. This is also completely portable. Ends with one folder, drag and drop. All software included is free, there is zero piracy endorsed. [ Master List: All The Required Downloads ] [ 3.8GB ]Compiling and Editing:01.) Microsoft Visual Studio (link)02.) Notepad++ (link)Databases and Webserver:03.) Laragon Portable (link)04.) MariaDB Server 10.7.3 (link)05.) PHP 7.4.28 (non thread safe) (link)06.) Nginx 1.21.6 Mainline (link)07.) HeidiSQL 11.3 (64 portable) (link)Server Emulator and Web Management:08.) rAthena (link)09.) Flux Control Panel: (link)Official Client:10.) kRO (v20210406) (link)11.) 2020-04-01bRagexe (link)12.) ROenglishRE (link)13.) RO Patcher Lite (link)14.) RO OpenSetup (link)15.) Nemo (link)OpenKore Client:16.) OpenKore (link)17.) Winsock Packet Editor (link) (password: openkore)Troubleshooting:18.) Visual C++ Redistributable Runtimes All-in-One (link)[ Microsoft Visual Studio 2022: Installation ] [ 7.62GB ]01.) Execute "VisualStudioSetup.exe". (let it update)02.) At the install screen, scroll down to the "Desktop & Mobile" section.03.) Checkmark "Desktop development with C++".04.) Then look on the right side under "Installation details", go to the "Optional" section.05.) Uncheck "Just-In-Time debugger". (this will remove Live Share as well)06.) Uncheck "C++ profiling tools".07.) Uncheck "C++ CMake tools for Windows".08.) Uncheck "C++ ATL for latest v143 build tools (x86 x64)".09.) Uncheck "Test Adapter for Boost.Test".10.) Uncheck "Test Adapter for Google Test".11.) Uncheck "IntelliCode".12.) Uncheck "C++ AddressSanitizer".13.) Click Install. (in bottom right)Note: Wow! Even stripped down, this is a massive 7.62GB installation. Depending on how you access the internet this might take a while. Also, consider how far into the future you are from the time of this post. The install size will be different given it's continually updated. Feel free to move on while this is running in the background. You won't actually need to compile anything until you reach Step 14 of the rAthena section.14.) Install Notepad++ (execute npp.8.3.2.Installer.x64)Note: Moving forward, I highly suggest using Notepad++ to create and edit files. Primarily so you can get a line count without needing to boot all of Visual Studio. This is a clean and lightweight solution.[ Laragon: Installing and Upgrading ]01.) Extract Laragon Portable.02.) Delete "php-5.4.9-nts-Win32-VC9-x86" from "\laragon\bin\php".03.) Extract "php-7.4.28-nts-Win32-vc15-x64" as a folder into "\laragon\bin\php".04.) Delete "mysql-5.1.72-win32" from "\laragon\bin\mysql".05.) Extract "mariadb-10.7.3-winx64" as a folder into "\laragon\bin\mysql".06.) Delete "nginx-1.14.0" from "\laragon\bin\nginx".07.) Extract "nginx-1.21.6" as a folder into "\laragon\bin\nginx".08.) Delete all the contents of "\laragon\bin\heidisql".09.) Extract "HeidiSQL_11.3_64_Portable" directly into "\laragon\bin\heidisql".10.) Open Laragon. Click Start All.11.) Grant MariaDB and Nginx firewall permissions when prompted.12.) Close Laragon window, do not exit the program. Don't worry it's still running in your system tray.[ rAthena: Installing, Configuring, and Optimizing ]01.) Extract rAthena.02.) Go to "\rathena\conf". Rename the "import-tmpl" folder to "import".03.) Open: "\rathena\conf\import\char_conf.txt", add: // Server Communication username and password. userid: supercool passwd: coolsuper server_name: GoblinRO // Login Server IP // The character server connects to the login server using this IP address. // NOTE: This is useful when you are running behind a firewall or are on // a machine with multiple interfaces. login_ip: 127.0.0.1 // Character Server IP // The IP address which clients will use to connect. // Set this to what your server's public IP address is. char_ip: 192.168.1.130 // Starting point for new characters. start_point: iz_int,18,26 // Amount of time in seconds by which the character deletion is delayed. char_del_delay: 10 // Restrict character deletion by email address or birthdate. char_del_option: 1 // Restrict character deletion as long as he is still in a party or guild. char_del_restriction: 0 // Pincode system pincode_enabled: no Note: You're going to want to enter your own userid/passwd, server name, and server IP. (wan if going off network)04.) Open: "\rathena\conf\import\inter_conf.txt", add: "use_sql_db: yes"05.) Open: "\rathena\conf\import\log_conf.txt", add: // log_filter: 1 = logs ANY items log_filter: 1 // log_chat: 63 = logs everything log_chat: 63 06.) Open: "\rathena\conf\import\login_conf.txt", add: // Can you use _M/_F to make new accounts on the server? // Note: This only works if client side password encryption is not enabled. new_account: yes // Ipban features ipban_enable: no 07.) Open: "\rathena\conf\import\map_conf.txt", add: // Server Communication username and password. userid: supercool passwd: coolsuper // Character Server IP // The map server connects to the character server using this IP address. // NOTE: This is useful when you are running behind a firewall or are on // a machine with multiple interfaces. char_ip: 127.0.0.1 // Map Server IP // The IP address which clients will use to connect. // Set this to what your server's public IP address is. map_ip: 192.168.1.130 Note: You're going to want to enter the same userid/passwd and IP used in char_conf.txt.08.) Open: "\rathena\conf\import\packet_conf.txt", add: // IP rules // allow : Accepts connections from the ip range (even if flagged as DDoS) allow: 127.0.0.1 allow: 192.168.0.0/16 Note: Change to match your network setup.09.) Open: "\rathena\src\config\packets.hpp". Comment out lines: 44-62. (packet obfuscation)10.) Open: "\rathena\src\custom\defines_pre.hpp". Line 12 add: "#define PACKETVER 20200401".11.) Open: "\rathena\npc\re\warps\cities\izlude.txt". Comment out lines: 39-54.12.) Open: "\rathena\npc\re\warps\fields\prontera_fild.txt". Comment out lines: 94-113.Note: Why are removing these warps important? So these are the novice start areas to the game. Like any MMORPG these were the most populated maps 24/7/365. It got to the point where they became overflooded not just by new players but bots. You'd wonder around trying to find something to kill that wasn't already taken, to the point leveling actually became a nightmare. So what they did was implement multiple instances of the same maps. Putting players in different load balanced instances allowed everybody to breath and comfortably start the game with some people but not to many.Though this had some downsides. Let's say you just started new characters so you could play with your friends. You might be loaded into prt_fild08a while your friends were loaded into b and c. Meaning there is zero crossover, you're all in your own unique world. You can't see each other, the monsters spawn differently, and that fun starting the game together experience is gone. Given we're setting up a small server here, there is no point in having multiple instances. So we're removing the extras and specifying a singular starting area.13.) Create a new "compile.bat" file inside "\rathena" that contains: @echo off "C:\Program Files\Microsoft Visual Studio\2022\Community\Msbuild\Current\Bin\MSBuild.exe" -m pause Note: Your install location might be different. Adjust accordingly.14.) Execute compile.bat. Wait for it to finish. Check to make sure it's error free at the end.15.) Convert all data files to SQL so you can use MariaDB via running "\rathena\yaml2sql.bat". (you will have to confirm with "Y" ten times during this process)16.) Open "\rathena\sql-files", delete the following: item_db.sql item_db_equip.sql item_db_etc.sql item_db_usable.sql item_db2.sql mob_db.sql mob_db2.sql mob_skill_db.sql mob_skill_db2.sql readme.md 17.) Open "\rathena\sql-files\compatibility" and move "item_db_re_compat.sql" and "item_db2_re_compat.sql" up one level to "\rathena\sql-files". You should now have 16 files (not including folders) inside "\rathena\sql-files".18.) Open Laragon. Click Database. Click New. (bottom left)19.) Under "Session Name", change "Unnamed" to "Laragon". Then click "Open".20.) Click "manage user authentication and privileges" in the top bar.21.) Click "Add". Change username to "ragnarok". Change password to "ragnarok". Checkmark the "Global Privileges" box. Click Save. Click Close.22.) Right click "Laragon" in the top of the left column. Expand "Create new". Click "Database". Enter name "ragnarok". Click OK.23.) Click "ragnarok" in the left column. Go to "File" in the top left. Expand and click "Run SQL File". Direct to "\rathena\sql-files\". Select all 16 .sql files. Click Open. Confirm auto-detect. (let finish)24.) Click "refresh" in the top bar. (next to manage user authentication and privileges)25.) Expand the "ragnarok" database in the left column. Click "login" which will bring it up on the right. Click the "data" tab.26.) Change the account's userid and user_pass to match the server communication username and password created back in step 3.27.) Close these windows. Get back to having Laragon running in your system tray.28.) Open "kRO_FullClient_20210406.zip", extract "msvcr110.dll" into "\rathena".29.) Go to "\rathena", execute "runserver.bat". Three consoles: the login, character, and map servers are going to open.30.) As each part comes online you'll need to grant it firewall access.Note: We're spinning up the server to make sure we're good before moving on. You should see all green status updates.Note: If you plan on including WAN clients, then you'll need to open the: 5121, 6121, 6900, & 80 ports on your network firewall / router. Please consider this a large security risk! The scope of this document does not include properly securing an exposed server. Proceed with caution.[ Flux Control Panel: Installing and Modifying ]01.) Extract FluxCP into "\laragon\www" make sure it's the actual root contents and not just the folder that contains them. (replace index.php)02.) Open "\laragon\www\config\application.php".03.) Line 6: delete BaseURI. EX: 'fluxcp', becomes '',04.) Line 7: change your Installer Password. EX: "secretpassword" becomes "supersecretpassword".05.) Line 43: change MinPasswordLength to 6.06.) Line 45: change PasswordMinUpper to 0.07.) Line 46: change PasswordMinLower to 0.08.) Line 47: change PasswordMinNumber to 0.09.) Line 49: change GMMinPasswordLength to 6.10.) Line 50: change GMPasswordMinUpper to 0.11.) Line 51: change GMPasswordMinLower to 0.12.) Line 52: change GMPasswordMinNumber to 0.13.) Line 53: change GMPasswordMinSymbol to 0.14.) Line 54: change RandomPasswordLength to 6.15.) Line 60: change PincodeEnabled to false.16.) Line 78: change ShowCopyright to false.17.) Line 82: change UseCaptcha to false.18.) Line 99: change AcceptDonations to false.19.) Line 220: change CMSNewsType to 2. (this adds rAthena news) (not required)20.) Line 225: change CMSNewsLimit to 2. (two articles fits the new layout well)21.) Line 233: change SDEnableCreditRewards to false.22.) Comment out lines 251 - 260. (removes fluff from web navigation)23.) Comment out lines 269 - 272. (removes donations from web navigation)24.) Comment out lines 288 - 291. (removes social media from web navigation)25.) Comment out line 305. (removes send email button)26.) Comment out line 307. (removes cash shop button)27.) Comment out lines 329-331. (removes transfer credits and cart)28.) Comment out line 348. (removes cash points)29.) Comment out line 360. (removes paypal)30.) Comment out lines 376 - 380. (removes donations)31.) Save and close file.32.) Open Laragon. Click Database. Click "Open" in the new window. Click "manage user authentication and privileges" in the top bar.33.) Click "Add". Change username to "fluxcpuser". Change password to "fluxcppass". Checkmark the "Global Privileges" box. Click Save. Click Close. Close database window.34.) Open "\laragon\www\config\servers.php".35.) Line 7: change your Server Name to something friendly. EX: "FluxRO" becomes "GoblinRO".36.) Line 17: change your Username from "ragnarok" to "fluxcpuser".37.) Line 18: change your Password from "ragnarok" to "fluxcppass".38.) Line 38: change your Username from "ragnarok" to "fluxcpuser".39.) Line 39: change your Password from "ragnarok" to "fluxcppass".40.) Line 55: change your Server Name to the new one from Line 7.41.) Save and close file.42.) Open Laragon. Click Menu. Expand PHP. Expand Extensions. Click tidy.43.) Click Menu. Expand Nginx. Expand sites-enabled. Click 00-default.conf.44.) Line 9: change "127.0.0.1;" to "all;". Save file. Close file.45.) Open Laragon. Click "Reload" on the Nginx line next to the open port (80).46.) Click Web. The installer should now pop-up in your browser.47.) Enter your installer password changed in Step 4. Click Authenticate.48.) Click "Install or Update Everything". (it's in bold) Confirm process.49.) Once the new site pops up, change the URL from localhost to the IP address of the machine hosting the server. Press enter.50.) Confirm it works and bookmark this page as it's your new control panel, ticket system, and server information tool. (you can click around for fun if you like)Note: You can login via any account on the server or make a new one! During account creation a working email address is NOT required but input of one is. ([email protected], etc.) Accounts flagged as GM in the database will have Admin access in the control panel.[ The kRO Client: Updating, Diffing, Hexing, Translating, and Customizing ]01.) Extract kRO_FullClient_20210406.02.) Extract RO Patcher Lite into "\client".03.) Execute "rsu-kro-rag-lite-x64.exe" and wait for it to finish updating the client.04.) Extract RO OpenSetup into "\client".05.) Extract ROenglishRE.06.) Open "ROenglishRE\Renewal". Copy everything into "\client". (override already present files)07.) Open "ROenglishRE\Client Support\Renewal\2020-09". Copy "data" folder into "\client". (override as well)08.) Extract Nemo. Execute "NEMO.exe".09.) Look for "Input Exe File" at the bottom. Click "Browse". Direct towards "2020-04-01bRagexe.exe".10.) Look for "Output Patched" at the bottom. Click "Browse". Direct towards "\client\2020-04-01bRagexe_patched.exe".11.) Create a new "profile.log" file (any location) that contains: 3 Chat Flood Remove Limit 9 Disable 1rag1 type parameters (Recommended) 14 Disable Hallucination Wavy Screen (Recommended) 16 Disable Swear Filter 20 Extend Chat Box 21 Extend Chat Room Box 22 Extend PM Box 23 Enable /who command (Recommended) 24 Fix Camera Angles (Recommended) 32 Increase Zoom Out Max 34 Enable /showname (Recommended) 35 Read Data Folder First 36 Read msgstringtable.txt (Recommended) 38 Remove Gravity Ads (Recommended) 39 Remove Gravity Logo (Recommended) 41 Disable Nagle Algorithm (Recommended) 44 Translate Client (Recommended) 46 Use Normal Guild Brackets (Recommended) 47 Use Ragnarok Icon 48 Use Plain Text Descriptions (Recommended) 49 Enable Multiple GRFs (Recommended) 50 Skip License Screen 53 Use Ascii on All LangTypes (Recommended) 64 @ Bug Fix (Recommended) 65 Load Custom lua file instead of iteminfo*.lub (Recommended) 73 Remove Hourly Announce (Recommended) 74 Increase Screenshot Quality 84 Remove Serial Display (Recommended) 88 Allow space in guild name 90 Enable DNS Support (Recommended) 91 Disconnect to Login Window 213 Disable Help Message on Login (Recommended) 215 Increase Map Quality 216 Hide Cash Shop 226 Disable Walk To Delay. 230 Always load Korea ExternalSettings lua file (Recommended) 231 Remove hardcoded address/port (Recommended) 232 Restore old login packet (Recommended) 233 Hide SNS Button 242 Disable kRO Site Launch 244 Disable Cheat Defender Game Guard (Recommended) 248 Remove wrong chars from cash shop 253 Skip some hidden menu icon buttons 270 Change AchievementList*.lub path 272 Change Towninfo*.lub path 273 Change PetEvolutionCln*.lub path 274 Change Tipbox*.lub path 275 Change CheckAttendance*.lub path 276 Change OngoingQuestInfoList*.lub path 277 Change RecommendedQuestInfoList*.lub path 278 Change PrivateAirplane*.lub path 279 Fix item description bug 284 Copy patched Cheat Defender Game Guard 289 Fix Homunculus attack AI 313 Change MapInfo*.lub path 322 Case-Insensitive Storage Search 323 Restore Songs Effect 326 Disable OTP Login Packet (Recommended) 328 Enable 44.1 kHz Audio Sampling Frequency 334 Remove Hardcoded HTTP IP 338 Additional client validation (Recommended) 347 Disable OS Privileges execution level 348 Send client flags to server (Recommended) 351 Translate arrows buttons text from korean to english 362 Fixes the Korean Job name issue with LangType (Recommended) 399 Set high priority class for active client 400 Set normal priority class for inactive client 404 Use borderless mode in full screen (Recommended) 416 Fix Tetra Vortex 427 Check is servertype in xml file was set to correct value (Recommended) 12.) Click the "Load Client" button at the bottom.13.) Click the "Load Profile" button to the right of it. Select and open the "profile.log" file just created.14.) Some modifications require input. As each prompt appears, edit them as follows: DATA.INI System/itemInfo_EN.lua 100 System\achievement_list_EN.lub System/Towninfo_EN.lub System\PetEvolutionCln_true_E.lub System/tipbox_EN.lub System/CheckAttendance_EN.lub System\OngoingQuestInfoList_True_EN System\RecommendedQuestInfoList_True_EN System\PrivateAirplane_T_EN.lub System\mapInfo_true_EN.lub Using wrong servertype in clientinfo/sclientinfo xml. Please change servertype to correct one. Note: You'll notice how two of them don't ask for a file extension, which is why we leave it off. That is not erroneous.15.) You should have 70 enabled patches when finished. Click "Apply Selected". Close Nemo.16.) Clean up the "\client" directory by deleting the following no longer required files: \AI_sakray \AuthModuleCache \client \db \doc \HShield \PatchClient 2020-04-01bRagexe_patched.exe.db 2020-04-01bRagexe_patched.exe.txt 2020-04-01bRagexe_patched.exe.secure.txt aossdk.dll ASPLnchr.exe bz32ex.dll CDResFileList.dat dbghelp.dll FORMAT.CFG GameGuard.des IFU13.inf IFU19.inf IFU7A.inf IFUEC.inf Init.exe KOR_LANG.CFG lua.exe mirrors.json NPCHK.DLL NPCIPHER.DLL npkcrypt.dll npkcrypt.sys npkcrypt.vxd npkcusb.sys npkeysdk.dll npkpdb.dll NPPSK.DLL NPSCAN.DES npupdate.dll NPUPDATE0.DLL NPX.DLL opensetup.ini.sample Patch.inf patchRE.inf Patchup.exe Patchup_RE.exe Ragexe.exe RagexeRE.exe RagHash.dat RagnarokKR.inf rsu-kro-rag-lite.exe rsu-kro-rag-lite.ini rsu-kro-renewal-lite.exe rsu-kro-renewal-lite.ini SavePath_Rag.exe SavePath_Sak.exe Setup.exe suipre.dll supdate.log v3hunt.dll Note: This should leave you with 58 files inside "\client". (8 folders + 50 misc)17.) Go to "\client\data". Open "clientinfo.xml". Change it too: <?xml version="1.0" encoding="euc-kr" ?> <clientinfo> <desc>Ragnarok Client Information</desc> <servicetype>korea</servicetype> <servertype>primary</servertype> <connection> <display>GoblinRO</display> <address>192.168.1.130</address> <port>6900</port> <version>55</version> <langtype>0</langtype> </connection> <connection> <display>OpenKore</display> <address>127.0.0.1</address> <port>6901</port> <version>55</version> <langtype>0</langtype> </connection> </clientinfo> Note: Inside the first <connection> block, change the <display> name and <address> to match your server. If WAN, you can use services like No-IP.18.) Go to "\client". Execute "opensetup.exe". (decline Telemetry prompt) Change the options to match your wants and needs. (graphics device, resolution, etc)Note: I personally like 1280x720 when playing in a window. Specifically while using X-Kore which we'll cover later.[ The OpenKore Client: Packet Extraction, Configuration, and Field Updating ] [ Best Client ]Note: Steps 1 and 2 are educational. Worth learning but can be skipped as I've already done this for you.01.) Extract Winsock Packet Editor (WPE). Allow the executable if Windows Defender or your anti-virus software flags it.02.) Using "WPE PRO - modified.exe" follow the Openkore Wiki Connectivity Guide to obtain master version and version number. (screenshot)03.) Extract OpenKore.04.) Go to "\openkore\tables" then open "servers.txt". Find "[Localhost]" towards the bottom. Replace with: [Localhost] ip 192.168.1.130 port 6900 private 1 master_version 0 version 128 charBlockSize 155 serverType kRO_RagexeRE_2020_04_01b serverEncoding Western addTableFolders kRO/RagexeRE_2020_04_01b;translated/kRO_english;kRO Note: Change the IP address to match your server. If WAN, you can use services like No-IP.05.) Go to "\openkore\fields". You'll notice inside are a number of folders labelled by episode number. You're going to want to take all the files out of each of these episodic folders and move them up a directory. Overriding the ones currently in your "\openkore\fields" folder.Note: We're doing this so that the bot can understand the map layouts of the newer content. The rAthena emulator is always improving but currently at the time of posting goes all the way to Episode 18. You might notice the bot is currently only developed up to Episode 17.1. If you play that far then you'll probably have a good idea on making the bot work in uncharted waters. For now, don't worry about it one bit. You're good for a loooooong time. Hell they'll probably have it included by the time you make it there.[ Logging Into Your Server, Making a GM Account, and Playing! ]Note: Even if you want to go straight to using OpenKore, we're going to use the kRO client to finish off the server and make our first accounts. While these steps can be done in OpenKore, it's easier to just follow along using a visual interface for now. If you've picked this project up at a later date, then make sure you've started the rAthena servers. (go to "\rathena", execute "runserver.bat")Using the kRO Client:01.) Go to "\client" and execute "2020-04-01bRagexe_patched.exe".02.) Select "GoblinRO" when prompted. (the server name you entered previously)03.) At the login screen type "admin_M" to make a new account on the server. You need to enter a 6+ digit password as well. (123456)Note: The first account is always a GM account. This has a different set of sprites used that are not compatible with actually wanting to play the game. They look cool because on the off chance you actually crossed one it needed to be unique. Generally you only saw one if you were about to get banned for botting or hacking so it was quite the event to casually see an admin. LOL!04.) Make a new character you're going to use to pwn rule breakers. Once in game, hit escape, then click "exit to windows".05.) Open Laragon. Click Database. Click "Open" in the new window.06.) Expand the "ragnarok" database. Click "login" again like we did in Step 25 of setting up rAthena. Click the "data" tab.07.) Look for the newly created admin account under the server account. Change it's "group_id" to 99. (now has full GM powers)08.) Close these windows. Go back to having Laragon running in your system tray.09.) Once again head to "\client" and execute "2020-04-01bRagexe_patched.exe".10.) At the login screen let's make a real account to actually play on. Once again, "yourname_M" or "yourname_F" (male or female) to make a new account on the server.Note: The sex you select here is only used for account management and does not effect the sex of your characters you make in game. It's pretty much pointless.11.) Spend extra time picking the right hair style, color, sex, and race. This is your new character!!12.) Play the game!Note: Future logins do not require the _M or _F after your account name. This is only done the first time to register a new account on the server from inside the client. You can also register accounts with the Flux Control Panel if you like. If you ever want to delete a character, it'll ask you for your email address as a security check to confirm. Accounts created in client automatically get registered with "[email protected]" as their email address in the database.Using the OpenKore Client:01.) Go to "\openkore\control". Open "config.txt".02.) Line 6: add "Localhost".03.) Line 7: add "0".04.) Line 8: add "Goblin". (your username) (do not add _M or _F)05.) Line 9: add "123456". (your password)06.) Line 11: add "0". (number / position of your character)07.) Save file.08.) Go to "\openkore" and execute "wxstart.exe". (wait for it to process maps and finish loading)09.) Play the game!Note: OpenKore does not currently support the new character start maps. It'll just throw errors in the console about not being able to navigate. Use the kRO client to at least get out of the introduction area. You can walk directly through the beginning and board the ship to Izlude. It's not required to interact with anything if you don't want to. There is stuff to do though, up to you.Using OpenKore inside kRO via X-Kore:01.) Go to "\openkore\control". Open "config.txt".02.) Line 23: change "0" to "3".03.) Line 30: change "ragexe.exe" to "2020-04-01bRagexe_patched".04.) Save file.05.) Go to "\openkore" and execute "wxstart.exe". (wait for it to finish loading)06.) Go to "\client" and execute "2020-04-01bRagexe_patched.exe".07.) Select "OpenKore" when prompted.08.) Login via your normal username and password for the account.09.) Select your character at the next screen.10.) Play the game with two clients at once!Note: I highly suggest running kRO in windowed mode for ease of use. This way you can bounce back and forth between the clients effortlessly. You do not need to keep the kRO or OpenKore windows as a focused priority. You can literally open other applications on top of both without any pause to the botting. You'll hear it in the background still playing the game while you're reading the wiki, checking email, or just doing whatever you please.[ Troubleshooting The Situation ]Note: Having an odd problem loading software at any point? Getting an error and not sure why? I'm not sure why either so give this a whirl.01.) Extract "Visual-C-Runtimes-All-in-One-Feb-2022.zip"02.) Execute "install_all.bat".03.) Wait for it to finish.04.) ??? Try Again ???05.) Probably Success.[ Packaging It Up For Transportation ]01.) Make a new folder called "GoblinRO". (or whatever you like)02.) Place your "\laragon", "\rathena", "\client", & "\openkore" folders inside it.03.) Make a new folder inside called "troubleshooting".04.) Copy "Visual-C-Runtimes-All-in-One-Feb-2022.zip" into "\troubleshooting".05.) Compress your "GoblinRO" folder. (zip/rar)Note: Transportation or not, I suggest you make a backup like this once you're finished. Always a good idea! Also compressing it greatly helps transfer times to things like USB drives or across networks. Not only is the file size reduced from around 5.5GB to 3.9GB but the fact that it doesn't have to work with the insane amount of small files present is a life saver. Remember you can always just extract the /client or /openkore folder if you're on computers that aren't running the server.[ Post Install House Cleaning ]01.) Delete the Master List of downloaded files required for install. (18 files, 3.8GB)02.) Uninstall Microsoft Visual Studio 2022 Community Edition. (7.62GB)Note: You will lose your ability to compile the server again if you make future changes.[ Conclusion ]Alright! Way to make it to the end! I spent a week constructing this. Across that time, I reached out to a lot of the related discord servers and forums. Mainly making sure my instructions were correct and up to date. At most stops I was met with silence then a private message with a price tag. Anywhere from $10-100 an hour, just for their working knowledge of an old MMORPG. For truly custom work I do understand it, but for basics? It really only motivated me more to put this out.I'd like to help remove the ridiculous paywall that has slowly started to surround this information. Sure, this has been a deep dive into an esoteric world. This game is over twenty years old at this point. Though it saddens me to see information omitted or even removed in order to sell it back to people as a service. I think that's not only harmful but gating something we have all enjoyed for decades. This is just information, there is nothing deserving of your currency. Everyone should be able to do this, for free.I hope you have found this both helpful and educational! Feel free to translate into your local language and distribute. I have done three trial runs across different machines and have not had a problem. If you're experiencing issues check that you haven't missed a step. Need support? Check the forum, wiki, github, and discord for both rAthena and OpenKore. Still can't find a solution? Post here! I cannot guarantee a timely response but I will check back in occasionally and try to help out as much as I can. Thanks for reading! /cheers
    1 point
  38. Version 1.0.6

    3995 downloads

    Extended Vending 2.0 Made in Git Hash: '042b88623bf549b88ba619991aaa186d45f7f998' Description Yet another version of Extended Vending, this one works in actual rA c++. It has a few fixes, including vending tax only working with Zeny as currency. What is new? I tried to improve this amazing mod adding a new feature: Vending Report (Mailbox). Basically... whenever you buy items to a vendor, he receive a report that who bough,what items, how many and total profit of them. You can disable this feature through conf/feature, or If you want to disable it for a specific player you must set the permanent variable called NOVREPORT (by a NPC/Bindatcmd/Idk) For < 2015-05-13 Clients Since old mailbox has 300 characters less than RoDex, I decided to take off items name and amount. So only will send 'who bought' and 'total profit'. Feel free to Donate If you want to support me.
    Free
    1 point
  39. For a while I hear "the ragnarok client can't do anything, it's very limited", so I decided to focus 1 year on learning reverse engineering, learning to read the code and invent my own ways, I learned methods to find the shapes and colors, and every day I was perfecting myself, today I can modify basically anything, when I can't, I set a goal to try a little more, here is my showcase and I hope you like it. when I started it was 2021, so 20200401 was my focus. Today I'm already upgrading to 20211117+ Change GM/Player/Mob/npc color? yes! very small npc box? yes I increased (I like space) MENU? YES! AP BAR for all jobs? YES! NEW WARP? yes! CUSTOM BASIC INFO? oh yes!! Custom LoadingBar? Yes! recover the old menu? yes Others mods: New Collection Night mode: Chat: Hp bar colors: others colors Text effects: Select Service Login Screen new position. Updates: I created a diff nemo that allows me to change the style, color, and direction. Original portal My custom
    1 point
  40. Olá a todos! por muito tempo me dediquei ao ragnarok, aprimorando-o de alguma forma e depois de vários anos ganhei experiência de todos os lados, consigo entender o cliente perfeitamente, modificar feitiço entre tantas outras coisas muito legais, no final decidi criar o meu Brinco com todas as coisas que aprendi, e hoje está em desenvolvimento, mas hoje colocarei aqui a maior vitrine de todas as coisas que terminei ou converti para RO. aqui você vai encontrar sprites, monstros, efeitos e outros .. alguns eu fiz a pedido de algum cliente outros foram feitos só para o meu jogo. Efeitos: Tags: Monstros: Hp Bar custom ? Efeitos de LevelUp: Temas de danos: Itens / Auras: Asas 3d Outros: Vou postar mais coisas legais! obrigado
    1 point
  41. I have been fiddling around with it and found a way to actually make "ok" sprites with it This was my result: http://www.framecompare.com/image-compare/screenshotcomparison/91BFMNNU?fbclid=IwAR0nw7btJdrFkXcXkU7-nfEZ2YMDDu9nWb9CyGVk5KlfGbjEcvbRZyReokQ We should try training a model with ToS Sprites maybe? ---------> https://drive.google.com/drive/folders/0B92X6lQqXBPSbFBfQVdwcHpRaG8 Here are the models I used and the order.. there might be better ones or better order but wtv http://www.mediafire.com/file/vf04k6jz0amflzu/models.rar/file Can you please tell me which models did you use for rune knight? I have been playing around and I found that there are no Pixel res-upscalers that soften the edges which is what almost everyone wants im sure. So the only way I found is to re-pixelize it after it was upscaled to your desired size, these are my results Tests are here: http://www.framecompare.com/screenshotcomparison/7YLZLNNX EDIT: One of the most consistent ways of doing this that I've found is 1x_Alias_200000_G.pth > cartoonpainted_400000.pth after that sharpen the result in Photoshop with Smooth focus 300% 3pix Radius 100% Noise Reduction this usually works best with sprites so Its worth tryng it
    1 point
  42. Version 1.1.0

    328 downloads

    Just sharing my own safe refiner NPC that mimics the Safe Refinement System of ROM:EL. As the item increases its refinement level, the materials required will grow exponentially as it requires the copy of the item you are refining based on its next refinement level. The NPC can only refine the item if its next refinement process is not safe anymore for Hollgrehenn. Configurations: .@npc_name$ = Name of your NPC .@price = The required zeny for refining.
    Free
    1 point
  43. This is the easiest way to reload npc only once a command. Type @reloadnpc Enter an accurate directory location of npc without npc/ and without .txt and click OK example: custom/jobmaster wait 2 seconds and NPC successfully reloading NOTE: Make sure this script npc is already installed on athena_script.conf Only GM with level 99 can use @reloadnpc If this script help you, please help me to upvote and rate 5 stars this topic.
    1 point
  44. Version 1.1.1

    1212 downloads

    :!: Angel's Arts - Mapping Project :!: To view all my works click on the link above (guides you at my Facebook page). This map was developed on purpose of being a vip room (divided in 3 parts: entrance(1st floor), living room(2nd floor) and suite(2nd floor)). Any desired changes are by your own. You can use this map for whatever you want. The sale of this map is prohibited (since it's being released for free). Let the credits on the map if you do not perform major changes (only visible on map editor / not apparent for players). Don't entitle yourself as the author of this content. Redistribution in other communities is free as long as the credits are placed. Thanks, Angel. Facebook: Angel's Arts Mapping Project. Hercules profile: Angelisk brAthena profile: Angelisk - link down TSR profile: Angelisk R.O. Services profile: Angel
    Free
    1 point
  45. Heya! WFIFOHEAD(fd, slen); WFIFOW(fd,0)=0xb4; WFIFOW(fd,2)=slen; WFIFOL(fd,4)=npcid; memcpy((char*)WFIFOP(fd,8), mes, slen-8); WFIFOSET(fd,WFIFOW(fd,2)); Let's say you want to send the message "hello", slen being 5 + 9 = 14. First call is obvious, sets the length of the packet. WFIFOW means "Write a Word to the socket (a Word is 2 bytes - uint16) at position 0", giving you the following raw output so far : 0xb4 0x00 - ... It is reversed because of the endianness, which is "always" in little-endian. WFIFOW(fd,2), same as above, giving you (14 = 0x0E) : 0xb4 0x00 - 0x0E 0x00 - ... WFIFOL means "Write a Long to the socket (a Long is 4 bytes - uint32) at position 4", giving you the following raw output so far (let's say the npcid is 297520349 = 0x11BBCCDD) : 0xb4 0x00 - 0x0E 0x00 - 0xDD 0xCC 0xBB 0x11 - ... WFIFOP retrieves the char pointer for the writing socket buffer at the specified position. memcpy simply copies the content of mes ("hello") to that position. Giving you... 0xb4 0x00 - 0x0E 0x00 - 0xDD 0xCC 0xBB 0x11 - 0x48 0x65 0x6c 0x6c 0x6f 0x00 WFIFOSET sets the buffer to the correct position to send it (WFIFOW actually returns a pointer to the position, so in this case it's handy because it returns slen; then again it's a bit pointless, it could have just been "WFIFOSET(fd,slen);" and it would be clearer). /// 00b4 <packet len>.W <npc id>.L <message>.?B This means 0x00b4 is your packet id, followed by a Word (packet length), followed by a Long (npc id), followed by a variable number of bytes (your message). 0x00b4,-1 That means the size of the packet is unknown/variable (indeed, the message can be of any size). 0x00b5,6 That means the size of the packet is always 6 bytes. In this case, the first 2 bytes are the packet ID, the next 4 bytes are the npc id, or : 00b5 <npc id>.L The packet field can be used for something like... 0x00b5,6,clif_scriptnext,2; - this can help you retrieve the positions more easily. For example : packet_db[sd->packet_ver][RFIFOW(fd,0) /* packet id */].pos[0] // pos[0] here is the "2" you defined earlier. Some packet_ver defines different indexes for the same packet, that's why it's useful not to use pre-defined values. To write a new packet, you have the right idea. Find a packet not used, go in a high range to avoid further conflicts. Also there's a packet limit, not really sure where it's defined on rAthena though.
    1 point
  46. Version Royal Turbo Room v2

    1673 downloads

    Edit by : Jeremy Reyes / DaemonSpade.rA Facebook : https://www.facebook.com/GMRaizen this map can be use as Mall/Quest Area or Town? Feel Free to use it.. and thanks haha
    Free
    1 point
×
×
  • Create New...