Leaderboard
Popular Content
Showing content with the highest reputation on 05/07/23 in all areas
-
In the latest version of Rathena this is already implemented. If you're using an older version you might have to diff patch the itemlink commands by Cydh. The older rathena versions supports the "itemlink-20190319-e6f1f21d.diff" Then you would have to edit the atcommand.cpp in ACMD_FUNC(mobinfo) Find: for (i = 0; i < MAX_MOB_DROP_TOTAL; i++) { int droprate; if (mob->dropitem[i].nameid <= 0 || mob->dropitem[i].p < 1 || (item_data = itemdb_exists(mob->dropitem[i].nameid)) == NULL) continue; droprate = mob->dropitem[i].p; #ifdef RENEWAL_DROP if( battle_config.atcommand_mobinfo_type ) { droprate = droprate * pc_level_penalty_mod(mob->lv - sd->status.base_level, mob->status.class_, mob->status.mode, 2) / 100; if (droprate <= 0 && !battle_config.drop_rate0item) droprate = 1; } #endif if (pc_isvip(sd)) // Display drop rate increase for VIP droprate += (droprate * battle_config.vip_drop_increase) / 100; if (item_data->slot) sprintf(atcmd_output2, " - %s[%d] %02.02f%%", item_data->jname, item_data->slot, (float)droprate / 100); else sprintf(atcmd_output2, " - %s %02.02f%%", item_data->jname, (float)droprate / 100); strcat(atcmd_output, atcmd_output2); if (++j % 3 == 0) { clif_displaymessage(fd, atcmd_output); strcpy(atcmd_output, " "); } } if (j == 0) clif_displaymessage(fd, msg_txt(sd,1246)); // This monster has no drops. else if (j % 3 != 0) clif_displaymessage(fd, atcmd_output); // mvp if (mob->mexp) { float mvppercent, mvpremain; sprintf(atcmd_output, msg_txt(sd,1247), mob->mexp); // MVP Bonus EXP:%u clif_displaymessage(fd, atcmd_output); strcpy(atcmd_output, msg_txt(sd,1248)); // MVP Items: mvpremain = 100.0; //Remaining drop chance for official mvp drop mode j = 0; for (i = 0; i < MAX_MVP_DROP_TOTAL; i++) { if (mob->mvpitem[i].nameid <= 0 || (item_data = itemdb_exists(mob->mvpitem[i].nameid)) == NULL) continue; //Because if there are 3 MVP drops at 50%, the first has a chance of 50%, the second 25% and the third 12.5% mvppercent = (float)mob->mvpitem[i].p * mvpremain / 10000.0f; if(battle_config.item_drop_mvp_mode == 0) { mvpremain -= mvppercent; } if (mvppercent > 0) { j++; if (j == 1) { if (item_data->slot) sprintf(atcmd_output2, " %s[%d] %02.02f%%", item_data->jname, item_data->slot, mvppercent); else sprintf(atcmd_output2, " %s %02.02f%%", item_data->jname, mvppercent); } else { if (item_data->slot) sprintf(atcmd_output2, " - %s[%d] %02.02f%%", item_data->jname, item_data->slot, mvppercent); else sprintf(atcmd_output2, " - %s %02.02f%%", item_data->jname, mvppercent); } strcat(atcmd_output, atcmd_output2); } } if (j == 0) clif_displaymessage(fd, msg_txt(sd,1249)); // This monster has no MVP prizes. else clif_displaymessage(fd, atcmd_output); } Change to: for (i = 0; i < MAX_MOB_DROP_TOTAL; i++) { int droprate; int dropbonus = 0; if (mob->dropitem[i].nameid <= 0 || mob->dropitem[i].p < 1 || (item_data = itemdb_exists(mob->dropitem[i].nameid)) == NULL) continue; droprate = mob->dropitem[i].p; #ifdef RENEWAL_DROP if( battle_config.atcommand_mobinfo_type ) { droprate = droprate * pc_level_penalty_mod(mob->lv - sd->status.base_level, mob->status.class_, mob->status.mode, 2) / 100; if (droprate <= 0 && !battle_config.drop_rate0item) droprate = 1; } #endif if((sd->sc.count && sd->sc.data[SC_ITEMBOOST])) // Display drop rate increase for SC_ITEMBOOST eg. Bubblegum dropbonus += (droprate * sd->sc.data[SC_ITEMBOOST]->val1) / 100; if (pc_isvip(sd)) // Display drop rate increase for VIP dropbonus += (droprate * battle_config.vip_drop_increase) / 100; if (dropbonus) sprintf(atcmd_output2, " %s %02.02f%% + (%02.02f%%)", createItemLink(item_data->nameid, 0, NULL).c_str(), (float)droprate / 100, (float)dropbonus / 100); else sprintf(atcmd_output2, " %s %02.02f%%", createItemLink(item_data->nameid, 0, NULL).c_str(), (float)droprate / 100); strcat(atcmd_output, atcmd_output2); j++; clif_displaymessage(fd, atcmd_output); strcpy(atcmd_output, " "); } if (j == 0) clif_displaymessage(fd, msg_txt(sd,1246)); // This monster has no drops. // mvp if (mob->mexp) { float mvppercent, mvpremain; sprintf(atcmd_output, msg_txt(sd,1247), mob->mexp); // MVP Bonus EXP:%u clif_displaymessage(fd, atcmd_output); strcpy(atcmd_output, msg_txt(sd,1248)); // MVP Items: clif_displaymessage(fd, atcmd_output); strcpy(atcmd_output, " "); mvpremain = 100.0; //Remaining drop chance for official mvp drop mode j = 0; for (i = 0; i < MAX_MVP_DROP_TOTAL; i++) { if (mob->mvpitem[i].nameid <= 0 || (item_data = itemdb_exists(mob->mvpitem[i].nameid)) == NULL) continue; //Because if there are 3 MVP drops at 50%, the first has a chance of 50%, the second 25% and the third 12.5% mvppercent = (float)mob->mvpitem[i].p * mvpremain / 10000.0f; if(battle_config.item_drop_mvp_mode == 0) { mvpremain -= mvppercent; } if (mvppercent > 0) { j++; sprintf(atcmd_output2, " %s %02.02f%%", createItemLink(item_data->nameid, 0, NULL).c_str(), mvppercent); strcat(atcmd_output, atcmd_output2); clif_displaymessage(fd, atcmd_output); strcpy(atcmd_output, " "); } } if (j == 0) clif_displaymessage(fd, msg_txt(sd,1249)); // This monster has no MVP prizes. }2 points
-
try this: struct item_data * item_data = item_array[i]; sprintf(atcmd_output, "Item: '%s'/'%s' (%hu) Type: %s", // msg_txt(sd, 1277) item_data->name,createItemLink(item_data->nameid, 0, NULL).c_str(),item_data->nameid, (item_data->type != IT_AMMO) ? itemdb_typename((enum item_types)item_data->type) : itemdb_typename_ammo((enum e_item_ammo)item_data->look));1 point
-
If you have itemlink commands by Cydh implemented you just have to edit in atcommand.cpp Find: struct item_data * item_data = item_array[i]; sprintf(atcmd_output, msg_txt(sd,1277), // Item: '%s'/'%s'[%d] (%hu) Type: %s | Extra Effect: %s item_data->name,item_data->jname,item_data->slot,item_data->nameid, (item_data->type != IT_AMMO) ? itemdb_typename((enum item_types)item_data->type) : itemdb_typename_ammo((enum e_item_ammo)item_data->look), (item_data->script==NULL)? msg_txt(sd,1278) : msg_txt(sd,1279) // None / With script ); Change To: struct item_data * item_data = item_array[i]; sprintf(atcmd_output, "Item: '%s'/'%s' (%hu)", // msg_txt(sd, 1277) item_data->name, createItemLink(item_data->nameid, 0, NULL).c_str(),item_data->nameid);1 point
-
1 point
-
in atcommand.cpp Find: for (j=0; j < MAX_SEARCH && item_data->mob[j].chance > 0; j++) { int dropchance = item_data->mob[j].chance; Change To: for (j=0; j < MAX_SEARCH && item_data->mob[j].chance > 0; j++) { int dropchance = item_data->mob[j].chance; int dropbonus = 0; Find: #endif if (pc_isvip(sd)) // Display item rate increase for VIP dropchance += (dropchance * battle_config.vip_drop_increase) / 100; sprintf(atcmd_output, "- %s (%d): %02.02f%%", mob_db(item_data->mob[j].id)->jname, item_data->mob[j].id, dropchance/100.); Change To: #endif if(sd->sc.count && sd->sc.data[SC_ITEMBOOST]) // Display drop rate increase for SC_ITEMBOOST eg. Bubblegum dropbonus += (dropchance * sd->sc.data[SC_ITEMBOOST]->val1) / 100; if (pc_isvip(sd)) // Display item rate increase for VIP dropbonus += (dropchance * battle_config.vip_drop_increase) / 100; if(dropbonus) sprintf(atcmd_output, "- %s (%d): %02.02f%% + (%02.02f%%)", mob_db(item_data->mob[j].id)->jname, item_data->mob[j].id, dropchance/100., dropbonus/100.); else sprintf(atcmd_output, "- %s (%d): %02.02f%%", mob_db(item_data->mob[j].id)->jname, item_data->mob[j].id, dropchance/100.);1 point
-
thanks for this Working 100% i'm using itemlink-20190319-e6f1f21d.diff1 point
-
But I don't know if it's functional. then study how to add them. https://github.com/Pokye/Sagaan-AntiCheat-V2.0 https://github.com/Pokye/ring-01 point
-
For Hit calculation, if you are on Renewal (150 + Dex + Level) is the right formula as it says here on the code: // Hit stat = status->hit; stat += level + status->dex + (bl->type == BL_PC ? status->luk / 3 + 175 : 150); //base level + ( every 1 dex = +1 hit ) + (every 3 luk = +1 hit) + 175 for BL_PC(Player) types otherwise base level + dex + 150 (175 + Dex + Level + Floor(Luk / 3)) Formula only applies to BL_PC types aka Players If you are on Pre-Renewal it's just (Level + Dex): // Hit stat = status->hit; stat += level + status->dex; For Flee on Renewal is (Level + Agi + 100): // Flee stat = status->flee; stat += level + status->agi + (bl->type == BL_MER ? 0 : bl->type == BL_PC ? status->luk / 5 : 0) + 100; //base level + ( every 1 agi = +1 flee ) + (every 5 luk = +1 flee) + 100 of BL_PC(Player) otherwise base level + agi + 100 and on Pre-Renewal is (Level + Agi): // Flee stat = status->flee; stat += level + status->agi;1 point
-
1 point
-
Version 4.4
5052 downloads
Original idea of this script : http://www.eathena.ws/board/index.php?showtopic=148888 Well, this was my favourite stylist script in eAthena ....xD Since i got some time, and lately received a request on editing a stylist npc script. So i come with with the idea to add some minor features or enhance the original script. The script are written from scratch... A very quick and simple intro for the script, Able to nagivate styles easily ( Forward, Backward, Jump ). Able to blacklist certain style for each style group and separately by Gender. Removed save / load features since not really useful. Enable Zeny as payment for the services. Able to enable any of the 3 services. ( Hairstyle, Hair Color, Cloth Color ) Support multiple type of Currency Payment. ( Item , Cash Points , Zeny and etc ) Customizable. ( If any style was blacklisted, a default style will be displayed ) The script are rewrited and clean up some unecessary parts. Credits : AnnieRuru HudelfFree1 point