// TMW2 script // Author: Jesusalva // // Magic Script: TMW2_DROPS // // Realm of Drops - A passive skill which drastically improves drop rates function script SK_drops { .@mobId=getarg(0, killedrid); if (getskilllv(TMW2_DROPS) <= 0) return; if (.@mobId <= 0) return; if (@skdrop[.@mobId] < 0) return; // Keep in mind that it is reset on logout @skdrop[.@mobId]+=1; .@lv=getmonsterinfo(.@mobId, MOB_LV); .@min=10-getskilllv(TMW2_DROPS)+(.@lv/10); // Maybe we are in condition for the bonus drop if (@skdrop[.@mobId] % .@min == 0) { // This creates .@item and .@rate with same index deletearray($@MobDrop_item); deletearray($@MobDrop_rate); getmobdrops(.@mobId); .@count = $@MobDrop_count; copyarray(.@item[0], $@MobDrop_item[0], .@count); copyarray(.@rate[0], $@MobDrop_rate[0], .@count); // .@total => sum of all drop rates // .@array => The real array for relative_array_random() .@total = 0; .@array = -1; for (.@i = 0; .@i < .@count; ++.@i) { .@s = getarraysize(.@array); array_push(.@array, .@item[.@i]); array_push(.@array, .@rate[.@i]); .@total+=.@rate[.@i]; } // Now we determine if you can, or cannot, get a bonus drop if (.@total < 500) { if (.@total < 200) { // Hard limit: 2% of total drop rate (-1 prevents execution) @skdrop[.@mobId]=-1; return; } else { // Soft limit: Half the efficiency if (@skdrop[.@mobId] % (.@min*2) != 0) return; } } // You can! So give you a random bonus drop with proper ponderation .@drop = relative_array_random(.@array); getmapxy(.@m$, .@x, .@y, 0); makeitem(.@drop, 1, .@m$, .@x, .@y); if ($@GM_OVERRIDE || debug) debugmes("Realm of Drops: Created %d as bonus drop in (%d,%d) [TDR %d KL %d]", .@drop, .@x, .@y, .@total, @skdrop[.@mobId]); } return; }