Leaderboard
Popular Content
Showing content with the highest reputation on 05/14/23 in Posts
-
This is for an exclusive Renewal single player journey. I have no idea how to share the same world with a friend. It was a horrible road for me to manage this much already. 100% offline. Just go and have fun Links: Laragon (get the portable one) (link) Rathena (link) Nemo (link) RO Patcher Lite (kRO RE) (link) [This dev stite is very useful bc of the sprite database and has Ro OpenSetup, an optional config file to change resolution and stuff} Warp (link) ROenglishRE (link) Visual Studio (link) STEP 0 Every time one of the steps asks to allow the network (mainly the server step) confirm both private and public, just to make sure it will work Ideally ,install and use Notepad++ and use it to edit everything for the rest of your life Go to WhiteGoblin Guide and do the Microsoft Visual Studio and Laragon steps ONLY. Anything else and you might mess the rest of this one up. I'll provide a txt file for these steps as well. STEP 1 Nemo and RSU Go to Nemo and get the latest full client and exe As of now its the 2022-04-06_Ragexe_1648707856 and the 2022-07-06 full client Install the client and run the rageexe to get the exe downloaded Grab the RSU. Run it in the installed full client. It will take a while. (The one I used is attached) When its done, close it, dont press start or else its going to start installing anticheat STEP 2 Laragon Open Laragon and start all, click on database and creat one called Laragon. Network type is MariaDB or MySQL(tcp/ip) Click on manage users icon that is next to a green refresh icon. Create a user called ragnarok, paasword called ragnarok, check the global privileges box and save. Right click on the white space next to the other databases, create new database called ragnarok Select it and go to File at the top and select run sqlfile... Choose all the sqls in rathena/sql and run. Click green refresh icon (or F5). All done STEP 3 Rathena In rathena\conf\char_athena.conf You can change your server and whspr name to whatever you like In here as well: // Pincode system //=================================== // NOTE: Requires client 2011-03-09aragexeRE or newer. // A window is opened before you can select your character and you will have to enter a pincode by using only your mouse. // Default: yes pincode_enabled: yes Change to "no" for your convenience NEXT Go to rathena\conf\login_athena.conf // 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: no Change to "yes" so you can go straight to gaming Next login delete the _M or_F from your user. It's just for the first time. NEXT Edit src\custom\defines_prehpp to: // Copyright (c) rAthena Dev Teams - Licensed under GNU GPL // For more information, see LICENCE in the main folder #ifndef CONFIG_CUSTOM_DEFINES_PRE_HPP #define CONFIG_CUSTOM_DEFINES_PRE_HPP /** * rAthena configuration file (http://rathena.org) * For detailed guidance on these check http://rathena.org/wiki/SRC/config/ **/ // Custom Settings // A 2021-11-17aRagexeRE of newer client is recommended. #define PACKETVER 20220406 #define PACKETVER_RE #endif /* CONFIG_CUSTOM_DEFINES_PRE_HPP NEXT Go to src\config\core.hpp: [This one is for a horrible bug in the cash shop that messes the numbers and items up] Change this: /// Uncomment for use with Nemo patch ExtendCashShopPreview //#define ENABLE_CASHSHOP_PREVIEW_PATCH to this: /// Uncomment for use with Nemo patch ExtendCashShopPreview #define ENABLE_CASHSHOP_PREVIEW_PATCH NEXT Go to src\config\packets Change the PACKETVER to: #define PACKETVER 20220406 That is for good measure Compile running rAthena.sln with the microsoft studio thingy. Change debug to release. Right click on solution rathena and select build. (Every change you do to any src folder files you will have to do this) (PS. The PACKETVER is whatever the date is written in the basic exe you download from Nemo. Just remember to format it from ex:2022-04-06 to 20220406) STEP 4 ROEnglishRE Get the ROEnglishRE and copy the inside of the Renewal folder to your client and say yes to changing the files Always say yes in this step.(And all other steps I guess) Go to Addon folder, WARP Sessions and grab the 2020_translation.yml (just do this if you don't want my .yml below with other fixes selected) STEP 5 WARP Open Warp, select the exe you downloaded. Hopefully the 20220406 one because patches break all the time from one to the next. Click load source for the patches to show up. Click on the top left icon and select load session. Load ITWORKSv2.0.yml. It will load the translation and a lot of fixes,including cash shop and GM sprite. Test it in the final step. If there are no errors you can experiment with more patches. Read all of them when you have the time, maybe you'll find something else you need/want. Select apply patches Copy or just move your new exe to your client STEP 6 PUT IT ALL TOGETHER Run laragon and start all (if it's not running already) Run the runserver.bat from rathena Run your new exe. Maybe it will say that it changed. Click okay, close the laucher that shows up and open your new exe again And you are in. Make shortcuts of these and put a 1 2 3 order so you will never forget it. FINAL STEP Become a GM by going to Laragon, ragnarok database, click on login, click on data, it is between table:login and querry Go to the row of your new account and change Group_id to 99. MVSandLaragon.txt rsu.exe Rathena Full Guide by Akawari.txt ITWORKSv2.0.yml1 point
-
View File guildgetitem2 & guildgetitembound2 This command sends items to the guild storage without the need of server restart. Example: prontera,100,100,5 script guildgetitem2 100,{ //guildgetitem2 <item id>,<amount>,<identify>,<refine>,<attribute>,<card1>,<card2>,<card3>,<card4>{,<account ID>}; switch ( guildgetitem2(1218, 1, 1, 1, 10, 4305, 0, 0, 0) ) { case 1: dispbottom "Item added to your guild storage."; end; case 0: dispbottom "Unknown Error."; break; case -1: dispbottom "Cannot open both storages."; break; case -2: dispbottom "Player doesn't have a guild."; break; case -3: dispbottom "Player doesn't have a guild storage."; break; case -4: dispbottom "Guild storage being used by someone else."; break; case -5: dispbottom "Guild storage is full."; break; } end; } Works much like getitem2 and it uses the attached players guildstorage. Submitter Skorm Submitted 10/18/2014 Category Source Modifications Video Content Author Skorm1 point
-
I don't know what you're trying to accomplish, I thought you wanted party member's hp to be seen even while in gvg map. If you want party member's hp to be seen while cloaked, that's different since it is not visible by party members by default. (Check edit at the bottom) Here is what my unedited server (default settings) look like when a party member is cloaked/hidden. vlc-record-2023-05-13-15h48m49s-2023-05-13 15-46-17.mp4-.mp4 Anyway these are the codes that work for me without the cloaking thing: void clif_hpmeter_single(int fd, int id, unsigned int hp, unsigned int maxhp) { struct map_session_data* sd = map_id2sd(id); struct map_session_data* tsd = (struct map_session_data*)session[fd]->session_data; bool sameparty = false; bool isBg = false; if (sd && tsd && (sd->sc.option & (OPTION_HIDE | OPTION_CLOAK | OPTION_CHASEWALK) || sd->special_state.perfect_hiding || map_flag_gvg(sd->bl.m))) { if (sd->status.party_id && tsd->status.party_id && sd->status.party_id == tsd->status.party_id) sameparty = true; if (sd->bg_id && tsd->bg_id && sd->bg_id == tsd->bg_id) isBg = true; if (!sameparty && !isBg) return; } #if PACKETVER < 20100126 const int cmd = 0x106; #else const int cmd = 0x80e; #endif WFIFOHEAD(fd,packet_len(cmd)); WFIFOW(fd,0) = cmd; WFIFOL(fd,2) = id; #if PACKETVER < 20100126 if( maxhp > INT16_MAX ) {// To correctly display the %hp bar. [Skotlex] WFIFOW(fd,6) = hp/(maxhp/100); WFIFOW(fd,8) = 100; } else { WFIFOW(fd,6) = hp; WFIFOW(fd,8) = maxhp; } #else WFIFOL(fd,6) = hp; WFIFOL(fd,10) = maxhp; #endif WFIFOSET(fd, packet_len(cmd)); } static int clif_hpmeter_sub(struct block_list *bl, va_list ap) { struct map_session_data *sd, *tsd; #if PACKETVER < 20100126 const int cmd = 0x106; #else const int cmd = 0x80e; #endif sd = va_arg(ap, struct map_session_data *); tsd = (TBL_PC *)bl; nullpo_ret(sd); nullpo_ret(tsd); if( !tsd->fd || tsd == sd ) return 0; if (!pc_has_permission(tsd, PC_PERM_VIEW_HPMETER)) return 0; bool sameparty = false; bool isBg = false; if (sd->sc.option & (OPTION_HIDE | OPTION_CLOAK | OPTION_CHASEWALK) || sd->special_state.perfect_hiding || map_flag_gvg(sd->bl.m)) { if (sd->status.party_id && tsd->status.party_id && sd->status.party_id == tsd->status.party_id) sameparty = true; if (sd->bg_id && tsd->bg_id && sd->bg_id == tsd->bg_id) isBg = true; if(!sameparty && !isBg) return 0; } WFIFOHEAD(tsd->fd,packet_len(cmd)); WFIFOW(tsd->fd,0) = cmd; WFIFOL(tsd->fd,2) = sd->status.account_id; #if PACKETVER < 20100126 if( sd->battle_status.max_hp > INT16_MAX ) { //To correctly display the %hp bar. [Skotlex] WFIFOW(tsd->fd,6) = sd->battle_status.hp/(sd->battle_status.max_hp/100); WFIFOW(tsd->fd,8) = 100; } else { WFIFOW(tsd->fd,6) = sd->battle_status.hp; WFIFOW(tsd->fd,8) = sd->battle_status.max_hp; } #else WFIFOL(tsd->fd,6) = sd->battle_status.hp; WFIFOL(tsd->fd,10) = sd->battle_status.max_hp; #endif WFIFOSET(tsd->fd,packet_len(cmd)); return 0; } For the cloaking/hiding I'll have to look at it some other time. Edit: NVM I found an easy fix to the cloaking/hiding thing Find: //Whenever we send "changeoption" to the client, the provoke icon is lost //There is probably an option for the provoke icon, but as we don't know it, we have to do this for now if (sc->data[SC_PROVOKE]) { const struct TimerData *td = get_timer(sc->data[SC_PROVOKE]->timer); clif_status_change(bl, StatusIconChangeTable[SC_PROVOKE], 1, (!td ? INFINITE_TICK : DIFF_TICK(td->tick, gettick())), 0, 0, 0); } Change To: //Whenever we send "changeoption" to the client, the provoke icon is lost //There is probably an option for the provoke icon, but as we don't know it, we have to do this for now if (sc->data[SC_PROVOKE]) { const struct TimerData *td = get_timer(sc->data[SC_PROVOKE]->timer); clif_status_change(bl, StatusIconChangeTable[SC_PROVOKE], 1, (!td ? INFINITE_TICK : DIFF_TICK(td->tick, gettick())), 0, 0, 0); } if (sd) clif_hpmeter(sd); It seems that the party member hp doesn't show when you cloak in front of other party members but if you walk away outside of their screen then walk back it'll show, so I just made it that if you cloak you'll send your hpmeter to everyone in screen range.1 point
-
Try to change this: if (unit->group->skill_id == PF_SPIDERWEB && unit->bl.id != srcunit->bl.id && unit->group->src_id == src->id) { //skill_delunitgroup(unit->group); // This one is instant Delete unit->limit = min(unit->limit,1000); // This one you can change "1000" to change the timing (lower number = faster deletion) unit->group->limit = unit->limit; return 1; } to this: if (unit->group->skill_id == PF_SPIDERWEB && unit->bl.id != srcunit->bl.id && unit->group->src_id == src->id && unit->group->val2) { //skill_delunitgroup(unit->group); // This one is instant Delete unit->limit = min(unit->limit,1000); // This one you can change "1000" to change the timing (lower number = faster deletion) unit->group->limit = unit->limit; return 1; }1 point
-
1 point
-
Thanks so much for sharing this with everyone. I'll even use it too. Just to let you know that in skill.cpp this line you asked to look for is different, there are more things. case AM_CALLHOMUN: //[orn] if (sd && !hom_call(sd)) clif_skill_fail(sd,skill_id,USESKILL_FAIL_LEVEL,0); break; in lasted rA: case AM_CALLHOMUN: //[orn] if (sd && !hom_call(sd)) clif_skill_fail(sd,skill_id,USESKILL_FAIL_LEVEL,0); #ifdef RENEWAL else if (sd && hom_is_active(sd->hd)) skill_area_temp[0] = 1; // Already passed pre-cast checks #endif break; It would be good to update your post with the fix.1 point
-
First, thanks again for the release. I have a few suggestions and I would be happy if these could be created and shared. These are the things I noticed or what I think would improve it: The select window should close after selecting a homunculus. You could set a setting in battle/homunculus.conf, which sets the maximum number of homunculus that can be stored. For example that the player may have a maximum of 4 different homunculus. I found a bug, if you have more than one of the same embyros, it just comes out a random homunculus. Also you can have multiple same homunculus, which should not be possible. I think the goal behind the storage system is that you can have all homunculus 1x and not as an example 4 same lifs. (Example you have Lifs with Lv. 1 or Lv. 40 or Lv.88, which of the Lifs has now which level). Therefore the possibility would be practical to prevent that you can have more than one homunculus of the same kind. That you don't get an item back in your inventory when you use "Rest". It might be read directly from the SQL database.1 point