Перейти к содержанию

Мапфлаг droprate


Sanasol

Рекомендуемые сообщения

Синтакс:

<mapname>    mapflag    droprate    <rate>

Настройка:

drops.conf

// Enable the droprate mapflag? (Note 1)
droprate_mapflag: 1

Примеры:

Дроп монстров убиваемых в Пронтере будет урезан в половину.

т.е. Poring дропает Empty Bottle с шансом 100% (@mi). Если его вызвать в Пронтере шанс будет 50%

 prontera    mapflag    droprate    50

Дроп монстров убиваемых в Геффене будет удвоен.

т.е. Fabre дпроает Clover с шансом 10% (@mi). Если его вызвать в Геффене шанс будет 20%

   geffen    mapflag    droprate    200

Скачать

дифф

Index: conf/battle/drops.conf
===================================================================
--- conf/battle/drops.conf (revision 14935)
+++ conf/battle/drops.conf (working copy)
@@ -146,3 +146,6 @@
// 333 = show announces for 3.33% or lower drop chance items
// 10000 = show announces for all items
rare_drop_announce: 0
+
+// Enable the droprate mapflag? (Note 1)
+droprate_mapflag: 1
\ No newline at end of file
Index: src/map/atcommand.c
===================================================================
--- src/map/atcommand.c (revision 14935)
+++ src/map/atcommand.c (working copy)
@@ -4433,6 +4433,8 @@
strcat(atcmd_output, "PartyLock | ");
if (map[m_id].flag.guildlock)
strcat(atcmd_output, "GuildLock | ");
+ if (map[m_id].droprate)
+ strcat(atcmd_output, "DropRate | ");
clif_displaymessage(fd, atcmd_output);

switch (list) {
Index: src/map/battle.c
===================================================================
--- src/map/battle.c (revision 14935)
+++ src/map/battle.c (working copy)
@@ -4014,6 +4014,7 @@
{ "display_party_name", &battle_config.display_party_name, 0, 0, 1, },
{ "cashshop_show_points", &battle_config.cashshop_show_points, 0, 0, 1, },
{ "mail_show_status", &battle_config.mail_show_status, 0, 0, 2, },
+ { "droprate_mapflag", &battle_config.droprate_mapflag, 0, 0, 1, },
// BattleGround Settings
{ "bg_update_interval", &battle_config.bg_update_interval, 1000, 100, INT_MAX, },
{ "bg_short_attack_damage_rate", &battle_config.bg_short_damage_rate, 80, 0, INT_MAX, },
Index: src/map/battle.h
===================================================================
--- src/map/battle.h (revision 14935)
+++ src/map/battle.h (working copy)
@@ -487,6 +487,7 @@
int display_party_name;
int cashshop_show_points;
int mail_show_status;
+ int droprate_mapflag; // [Xantara]

// [BattleGround Settings]
int bg_update_interval;
Index: src/map/map.h
===================================================================
--- src/map/map.h (revision 14935)
+++ src/map/map.h (working copy)
@@ -506,6 +506,7 @@
int jexp; // map experience multiplicator
int bexp; // map experience multiplicator
int nocommand; //Blocks @/# commands for non-gms. [Skotlex]
+ int droprate; // [Xantara]
// Instance Variables
int instance_id;
int instance_src_map;
Index: src/map/mob.c
===================================================================
--- src/map/mob.c (revision 14935)
+++ src/map/mob.c (working copy)
@@ -2227,9 +2227,13 @@
if (sd && sd->sc.data[SC_ITEMBOOST]) // now rig the drop rate to never be over 90% unless it is originally >90%.
drop_rate = max(drop_rate,cap_value((int)(0.5+drop_rate*(sd->sc.data[SC_ITEMBOOST]->val1)/100.),0,9000));

+ // Drops affected by the mapflag droprate [Xantara]
+ if(map[m].droprate && battle_config.droprate_mapflag)
+ drop_rate = (int)( (drop_rate * map[m].droprate) / 100. );
+
// attempt to drop the item
if (rand() % 10000 >= drop_rate)
- continue;
+ continue;

ditem = mob_setdropitem(md->db->dropitem[i].nameid, 1);

@@ -2354,6 +2358,11 @@
temp = md->db->mvpitem[i].p;
if(temp <= 0 && !battle_config.drop_rate0item)
temp = 1;
+
+ // Drops affected by the mapflag droprate [Xantara]
+ if(map[m].droprate && battle_config.droprate_mapflag)
+ temp = (int)( (temp * map[m].droprate) / 100. );
+
if(temp <= rand()%10000+1) //if ==0, then it doesn't drop
continue;

Index: src/map/npc.c
===================================================================
--- src/map/npc.c (revision 14935)
+++ src/map/npc.c (working copy)
@@ -3117,6 +3117,15 @@
map[m].flag.partylock=state;
else if (!strcmpi(w3,"guildlock"))
map[m].flag.guildlock=state;
+ else if (!strcmpi(w3,"droprate")) {
+ if (state) {
+ if (sscanf(w4, "%d", &state) == 1)
+ map[m].droprate = state;
+ else
+ map[m].droprate = 100;
+ } else
+ map[m].droprate = 100;
+ }
else
ShowError("npc_parse_mapflag: unrecognized mapflag '%s' (file '%s', line '%d').\n", w3, filepath, strline(buffer,start-buffer));

Index: src/map/script.c
===================================================================
--- src/map/script.c (revision 14935)
+++ src/map/script.c (working copy)
@@ -348,7 +348,8 @@
MF_ALLOWKS,
MF_MONSTER_NOTELEPORT,
MF_PVP_NOCALCRANK, //50
- MF_BATTLEGROUND
+ MF_BATTLEGROUND,
+ MF_DROPRATE
};

const char* script_op2name(int op)

  • Upvote 2
Ссылка на комментарий
Поделиться на другие сайты

×
×
  • Создать...
Яндекс.Метрика