SRC改造 mob.c
Athenaのソースを変更することにより、本鯖とは一味違ったRagnarokを体験できる。
今回は、mob.cを変更して、以下を実装する。
mob.cの格納場所は、[athena\src\map\mob.c]
・
ドロップ複数個化
ソースを変更したら、コンパイルし直すこと。
Cygwinでの再コンパイルの仕方は、以下を参照。
・
Athenaの構築
[ドロップ複数個化]
今回は、battle_athena.confに記述されている「item_rate」を使用し、
アイテムが複数個ドロップするように変更する。
最新版Athenaでは、「item_multi_drop」の項目があるが、
ドロップ個数は必ず最大1個になるため、今回は使用しないことにする。
| |
ドロップ判定の回数は、item_rateで決定される。
100で1回判定、200で2回判定・・・を行うことになる。
|

|
[mob.c mob_damage関数 1912行目から]の
item_dropに関する箇所をすべてコメントアウトする。
※使用しているAthenaのバージョンによって
行数が違うので注意。
|

|
[mob.c mob_damage関数 1936行目から]に
下記のプログラムを追加する。
今回はドロップ個数が100以上にならないようにしているが、
自分の好みに合わせて数値を変更すればよい。
|

|
[mob.c mob_damage関数 1936行目から]
int num=0,j;
drop_rate = mob_db[md->class].dropitem[i].p;
if(drop_rate <= 0 && battle_config.drop_rate0item)
drop_rate = 1;
for(j=battle_config.item_rate/100; j>0; j--) {
if(drop_rate > atn_rand()%10000)
num++;
}
if(num == 0)
continue;
if(num > 100)
num=100;
if(itemdb_type(mob_db[md->class].dropitem[i].nameid) == 4 ||
itemdb_type(mob_db[md->class].dropitem[i].nameid) == 5 ||
itemdb_type(mob_db[md->class].dropitem[i].nameid) == 8
num=1;
|
//numは
//dropした個数
//drop率0%も
//dropする設定
//なら1で固定
//
//item_rate/100
//回判定する
//
//
//
//dropした個数
//100で固定
//
//装備アイテム
//ならば個数を
//1にする
//
|
もし、jAthenaや古いバージョンのAthenaを使用している場合は、下記の変更も必要。
| |
[mob.c mob_damage関数 1910行目]を
下記に変更する。
|

|
[mob.c mob_damage関数 1910行目]
| |
[mob.c mob_delay_item_drop関数 1478行目]を
下記に変更する。
|

|
[mob.c mob_delay_item_drop関数 1478行目]
map_addflooritem(&temp_item,ditem->amount,
ditem->m,ditem->x,ditem->y,
ditem->first_bl,ditem->second_bl,ditem->third_bl,0);
|