Jump to content


  • Posts

  • Joined

  • Last visited

About Adimgar

  • Birthday 02/20/1983

Profile Information

  • Gender
  • Location
  • Server
    Comunidad DimRO
  • Discord: ADimGaR#2253
  • Interests
    Software development, camping, gaming, family

Contact Methods

Recent Profile Visitors

1,832 profile views

Adimgar's Achievements


Poring (1/15)

  • Week One Done
  • One Month Later
  • One Year In

Recent Badges




Community Answers

  1. It's up to date, a couple of days ago actually. The new column is present and with proper values as seen in the screenshot. I'll load mob_db sql's again and see if it still behaves that way. I believe almost everyone are using YML by now. Do you use SQL? can't you replicate this behaviour? maybe it's just my rA XD Thanks again.
  2. Yes, i'm useng renewal. Oh my, never paid attention to that attribute, so that's why they're taking only 10% of damage thank you so much. However, reviewing SQL mob_db, they also have that value: And still there is that huge difference, as if when using SQL db were not reading/considering that flag, maybe?
  3. I've noticed that since the mob_db update to YML, when using yml format, Boss mobs receive a max damage of around 5,000, but when using SQL mob_db with the exact same values, they receive full skill/attack damage. Using SQL db. Using YML db. Is that a bug? a feature? is there something missing to do with the new YML system? Thanks in advance.
  4. Great work! thanks for your amazing work guys, good bye to messy txt databases. As a suggestion it'll be great to have a file structure like item db, (ie mob_db_mvp.yml, mob_db_mini_boss.yml and mob_db_general.yml) or something like that, giving a better organization and customization posibilities. A little question here. How does this apply to SQL? id, name_aegis and name_english are NOT NULL. If I want to add a new drop to a mob, shoul I only populate id, name_aegis, name_english, drop1_item, drop1_rate to mob_db2_re? Also this update has broken FluxCP mob databases (mvp ranking, etc), so maybe a mob_db_compat.sql views are coming? Thanks again for your great work.
  5. OMG!!! XD You're absolutely right!, I was still blaming the views and/or the module, due that all other modules and querys works just fine with full group by. Disabled full group by and now it work's as it should. The simplest sollutions sometimes are the hardest to see when you're stuck XD. Thank you so much my friend!.
  6. Hi. It depends on how do you want to deliver your client (ZIP file or Installer ie). If you want to use a ZIP file, you just need to compress your patched exe, your launcher exe (I believe you have it because you mentioned patching), your System folder and your GRF file or DATA folder. Upload that file to any host you want (Mega, Google drive, etc.) share the link to your players and ask them to extract it in their game folder. If you want to use an installer, there are plenty pieces of sw to achieve that, one of the most used (and free) is NSIS. You can setup your installer including the same files as for the zip and also upload it anywhere you want. For the launcher and the patching process, you'll need a webhost to store your patches and web config. The most used is Thor Patcher, there are plenty of guides in the forums on how to use it. Good luck with your server!
  7. Solved: diff --git a/src/map/itemdb.cpp b/src/map/itemdb.cpp index 1a56cd2df..a535c724b 100644 --- a/src/map/itemdb.cpp +++ b/src/map/itemdb.cpp @@ -649,6 +649,18 @@ uint64 ItemDatabase::parseBodyNode(const YAML::Node &node) { if (!exists) item->flag.dropEffect = DROPEFFECT_NONE; } + + if (this->nodeExists(flagNode, "NoAutoLoot")) { + bool active; + + if (!this->asBool(flagNode, "NoAutoLoot", active)) + return 0; + + item->flag.noautoloot = active; + } else { + if (!exists) + item->flag.noautoloot = false; + } } else { if (!exists) { item->flag.buyingstore = false; @@ -657,6 +669,7 @@ uint64 ItemDatabase::parseBodyNode(const YAML::Node &node) { item->flag.guid = false; item->flag.bindOnEquip = false; item->flag.broadcast = false; + item->flag.noautoloot = false; if (!(item->flag.delay_consume & DELAYCONSUME_TEMP)) item->flag.delay_consume = DELAYCONSUME_NONE; item->flag.dropEffect = DROPEFFECT_NONE; @@ -2115,6 +2128,8 @@ static bool itemdb_read_sqldb_sub(std::vector<std::string> str) { flags["NoConsume"] = std::stoi(str[index]) ? "true" : "false"; if (!str[++index].empty()) flags["DropEffect"] = str[index]; + if (!str[++index].empty()) + flags["NoAutoLoot"] = std::stoi(str[index]) ? "true" : "false"; node["Flags"] = flags; YAML::Node delay; @@ -2219,7 +2234,7 @@ static int itemdb_read_sqldb(void) { "`location_head_top`,`location_head_mid`,`location_head_low`,`location_armor`,`location_right_hand`,`location_left_hand`,`location_garment`,`location_shoes`,`location_right_accessory`,`location_left_accessory`," "`location_costume_head_top`,`location_costume_head_mid`,`location_costume_head_low`,`location_costume_garment`,`location_ammo`,`location_shadow_armor`,`location_shadow_weapon`,`location_shadow_shield`,`location_shadow_shoes`,`location_shadow_right_accessory`,`location_shadow_left_accessory`," "`weapon_level`,`equip_level_min`,`equip_level_max`,`refineable`,`view`,`alias_name`," - "`flag_buyingstore`,`flag_deadbranch`,`flag_container`,`flag_uniqueid`,`flag_bindonequip`,`flag_dropannounce`,`flag_noconsume`,`flag_dropeffect`," + "`flag_buyingstore`,`flag_deadbranch`,`flag_container`,`flag_uniqueid`,`flag_bindonequip`,`flag_dropannounce`,`flag_noconsume`,`flag_dropeffect`,`flag_noautoloot`," "`delay_duration`,`delay_status`,`stack_amount`,`stack_inventory`,`stack_cart`,`stack_storage`,`stack_guildstorage`,`nouse_override`,`nouse_sitting`," "`trade_override`,`trade_nodrop`,`trade_notrade`,`trade_tradepartner`,`trade_nosell`,`trade_nocart`,`trade_nostorage`,`trade_noguildstorage`,`trade_nomail`,`trade_noauction`,`script`,`equip_script`,`unequip_script`" #ifdef RENEWAL diff --git a/src/map/itemdb.hpp b/src/map/itemdb.hpp index 5307110e8..3594457eb 100644 --- a/src/map/itemdb.hpp +++ b/src/map/itemdb.hpp @@ -901,6 +901,7 @@ struct item_data bool broadcast; ///< Will be broadcasted if someone obtain the item [Cydh] bool bindOnEquip; ///< Set item as bound when equipped e_item_drop_effect dropEffect; ///< Drop Effect Mode + bool noautoloot; } flag; struct {// item stacking limitation uint16 amount; diff --git a/src/map/mob.cpp b/src/map/mob.cpp index 2ea69795e..31472a496 100644 --- a/src/map/mob.cpp +++ b/src/map/mob.cpp @@ -2252,6 +2252,8 @@ static void mob_item_drop(struct mob_data *md, struct item_drop_list *dlist, str if( sd == NULL ) sd = map_charid2sd(dlist->second_charid); if( sd == NULL ) sd = map_charid2sd(dlist->third_charid); test_autoloot = sd + && (itemdb_search(ditem->item_data.nameid))->flag.noautoloot == false + && (itemdb_type(ditem->item_data.nameid) != IT_CARD) && (drop_rate <= sd->state.autoloot || pc_isautolooting(sd, ditem->item_data.nameid)) && (flag?(battle_config.homunculus_autoloot?(battle_config.hom_idle_no_share == 0 || !pc_isidle_hom(sd)):0): (battle_config.idle_no_autoloot == 0 || DIFF_TICK(last_tick, sd->idletime) < battle_config.idle_no_autoloot)); ALTER TABLE item_db_re ADD COLUMN `flag_noautoloot` tinyint(1) unsigned DEFAULT NULL AFTER `flag_dropeffect`; ALTER TABLE item_db2_re ADD COLUMN `flag_noautoloot` tinyint(1) unsigned DEFAULT NULL AFTER `flag_dropeffect`; Thanks to @Litro Endemic
  8. Yes, i've already tweaked a bit the command behaviour in src, and made some scripts, but the intention is to enable/disable autolooting per-item globally through a db flag I'm a little lost there because i'm still getting used to/understanding rA's source code. @Litro Endemic Wow, that was quick!, thank you so much! i'll try it today and give my feedback. Thank you both for your answers. EDIT: Implemented and tested, it works like a charm!, thank you so much, however, it does works when using YAML db, but my online/production server uses SQL db, i'm not migrating to YAML just yet. I've edited SQL query in itemdb.cpp: @@ -2219,7 +2234,7 @@ static int itemdb_read_sqldb(void) { "`location_head_top`,`location_head_mid`,`location_head_low`,`location_armor`,`location_right_hand`,`location_left_hand`,`location_garment`,`location_shoes`,`location_right_accessory`,`location_left_accessory`," "`location_costume_head_top`,`location_costume_head_mid`,`location_costume_head_low`,`location_costume_garment`,`location_ammo`,`location_shadow_armor`,`location_shadow_weapon`,`location_shadow_shield`,`location_shadow_shoes`,`location_shadow_right_accessory`,`location_shadow_left_accessory`," "`weapon_level`,`equip_level_min`,`equip_level_max`,`refineable`,`view`,`alias_name`," - "`flag_buyingstore`,`flag_deadbranch`,`flag_container`,`flag_uniqueid`,`flag_bindonequip`,`flag_dropannounce`,`flag_noconsume`,`flag_dropeffect`," + "`flag_buyingstore`,`flag_deadbranch`,`flag_container`,`flag_uniqueid`,`flag_bindonequip`,`flag_dropannounce`,`flag_noconsume`,`flag_dropeffect`,`flag_noautoloot`," "`delay_duration`,`delay_status`,`stack_amount`,`stack_inventory`,`stack_cart`,`stack_storage`,`stack_guildstorage`,`nouse_override`,`nouse_sitting`," "`trade_override`,`trade_nodrop`,`trade_notrade`,`trade_tradepartner`,`trade_nosell`,`trade_nocart`,`trade_nostorage`,`trade_noguildstorage`,`trade_nomail`,`trade_noauction`,`script`,`equip_script`,`unequip_script`" #ifdef RENEWAL and also altered item_db_re and item_db2_re tables with the new column, but it gives me the the following errors on some items when loading them: [Error]: Loading [72/15405] rows from 'item_db_re' script error on line 0 parse_line: expect command, missing function name or calling undeclared function 0 : '1' I believe i'm missing some other src modification. Haven't found where else SQL item_db flags are read. Any clues? EDIT2: Found it: itemdb.cpp: @@ -2115,6 +2128,8 @@ static bool itemdb_read_sqldb_sub(std::vector<std::string> str) { flags["NoConsume"] = std::stoi(str[index]) ? "true" : "false"; if (!str[++index].empty()) flags["DropEffect"] = str[index]; + if (!str[++index].empty()) + flags["NoAutoLoot"] = std::stoi(str[index]) ? "true" : "false"; node["Flags"] = flags; YAML::Node delay; For anyone interested, the last step to enable SQL db: alter table item_db_re add column `flag_noautoloot` tinyint(1) unsigned DEFAULT NULL after `flag_dropeffect`; alter table item_db2_re add column `flag_noautoloot` tinyint(1) unsigned DEFAULT NULL after `flag_dropeffect`; Thanks again!
  9. Hi everyone. I'd like to request a source modification on autoloot behaviour, using a new item_db flag (flag_autoloot) which will prevent an item to be autolooted. If the flag as a null value (default value), it'll be autolooted as usual, but if it has a non null value, it won't be autolooted. Instead of modifying mob.cpp for adding custom conditions on when an item can/cannot be autolooted, it'll be much easier to customize with a global item flag. I hope you'll find this request usefull.
  10. Hi everyone. I would like to request the addition of a new flag to items (item_db), the autoloot flag, which will control if an item can be autolooted or not. By default it should be NULL, which means it can be autolooted as usual, but for those items with a non null value, they won't be autolooted. Instead of editing source mob.cpp to change autoloot behaviour (i've seen most of autoloot modifications are about prevent certain items to be looted) and made it easy to customize. I know it should require some source modifications as well, i'll bee requesting the same thing on source requests. I hope you'll find this option usefull.
  11. Exactly, i've already modified Flux source to read those views instead the tables, but it throws another error (idk if it's something about php that can't query/handle views). I also started to edit all the item module to match rA's db tables as they are, even trying to reproduce the view's logic, but i don't have much php knowledge, no success there either.
  12. Great work Neo. I've been testing your software with so many different patches in a few clients (2020 and 2021) which i've previously patched seccessfully with nemo, but i haven't been able to make them work with warp, it always gives me the CTwitterDataMgr error, no matter the langtype and the external settings config i choose. My external settings are ok and working on my actual server/client. Is there something i could be missing or something that has changed regarding external settings vs nemo's? EDIT. Starting with a fresh set of patches got rid of Twitter message, but now it gives me "Failed to connect to server" when accessing map server. Keep up the greak work you do!.
  13. Que tal. Para el tema de los colores (palettes) primero necesitas contar con ellos (Archivos .pal corespindientes a cada clase/género) e incluirlos en tu archivo GRF (/data/palette), puesto que el juego por "default" solo incluye esos pocos colores, tanto para vestimenta como para cabello. En las secciones de descargas del foro podrás encontrar varios conjuntos de palettes compartidos por la comunidad. Una vez que los tengas y los hagas agregado a tu grf (o carpeta data), deberás editar tu archivo rathena/conf/import/battle_conf.txt indicando el número máximo de paletas que agregaste (no olvides considerar el 0) de la siguiente manera: max_hair_style: 27 //Máximo número de estilos de cabello max_hair_color: 127 //Máximo número de colores de cabello max_cloth_color: 699 //Máximo número de colores de vestimenta Para tu NPC estilista, puedes obtener esta configuración directamente para evitar actualizar el código del NPC si llegas a incluir más colores, algo similar a esto: [email protected]_ccolor = getbattleflag("max_cloth_color"); [email protected]_hstyle = getbattleflag("max_hair_style"); [email protected]_hcolor = getbattleflag("max_hair_color"); y utilizar esas variables en la lógica de tu NPC para indicar hasta cual número puede llegar. Espero te sea de utilidad. Saludos.
  14. Great work!! Being an Old School SQL old man, i'm still getting used to it, but i do like it so far. Will this migration extend to mob_db too?, because now we have beautifull item_db.yml files and the old mob_db.txt (csv) files. It'll be great to do so for consistency and custimization (ie custom drops easyness), with a separated mob_db.yml, mob_db_mvp.yml and mob_db_champion.yml would be fantastic imo. Asking for a little help, i've loaded compatibility views in sql, but control panel still cannot read tiem_db (missing columns), what is the right support forum to ask for help on this? Congratulations and keep up with the excelent work!.
  15. Hi. Sorry to revive such an old post, but i've been trying to achieve exactly this, made some source modifications but no success. Although this can be "easily" achieved with scripts (example dynamic shop npc), the shop window still displays Zeny and Z as currency, we can of course change messages to warn the player the don't have enough "item" for pay for the item, but the "standard" buy behaviour of the marketshop needs to be redone by OnBuyItem event, where we have to npcshopdelitem to remove them (Cannot set 0 as stock amount) so it leads to an error (console only) when out of stock all items. It would be great and usefull to have a default marketshop where "item" can be used as currency, and if it's possible to display it on the price (1,000 PC [Poring Coins]) it'll be fantastic. So please, review this suggestion, I believe it's really usefull.
  • Create New...

Important Information

By using this site, you agree to our Terms of Use and Privacy Policy.