2010 081234567891011121314151617181920212223242526272829302010 10

TOP > Auriga/eAthena > title − 【Auriga】三次職の装備可否について
 【Auriga】三次職の装備可否について
Aurigaにおける3次職の装備可否について。

3次職は99レベル以上上がるっていう前提があるから

転職前の2次職と同じ装備に設定して

オリジナル装備を作りたい場合レベル制限してあげれば十分。

ですが、野菜鯖が好きなので

レベル制限?なにそれおいしいの?ということで

レベル制限に関係なく装備可否ができたらなぁと。

*前提*
・三次職の装備は基本的に上位二次職と一緒。
変更したい場合はitem_class3_db.txtに追加しオーバーライドする。
3次専用オリジナル装備を作りたい場合、item_dbのJOBを0にし、他は通常の記述をした後、
item_class3_db.txtに装備可能な職業の数値を追加。

・3次職のJOBID
@jobchange num
num =
    32    ルーンナイト
    33    アークビショップ
    34    ウォーロック
    35    メカニック
    36    レンジャー
    37    ギロチンクロス
    38    ロイヤルガード
    39    修羅
    40    ソーサラー
    41    シャドウチェイサー
    42    ジェネティック
    43    ミンストレル
    44    ワンダラー

である必要があります.

ソースリスト

pc.c
static int pc_isequip(struct map_session_data *sd,int n)

900行目あたり

    if(item->elv > 0 && sd->status.base_level < item->elv)
        return 0;
+//------------------追加---------------------------
+    if(sd->s_class.job >= 32){
+        if(sd->s_class.job >= 38){
+            class = sd->s_class.job - 24;
+        } else {
+            class = sd->s_class.job - 25;
+        }
+        if(((1<<class)&item->class_3) == 0)
+            return 0;
+    } else {
+        if(((1<<sd->s_class.job)&item->class_) == 0)
+            return 0;
+
+        if(item->upper) {
+            if(((1<<sd->s_class.upper)&item->upper) == 0)
+                return 0;
+        }
+    }
+//---------------------ここまで--------------------

    if(item->zone && pc_check_prohibition(sd,item->zone))
        return 0;


itemdb.c
static int itemdb_read_itemdb(void)
340行目あたり
            id->weight = atoi(str[6]);
            id->atk    = atoi(str[7]);
            id->def    = atoi(str[8]);
            id->range  = atoi(str[9]);
            id->slot   = atoi(str[10]);
            id->class_ = (unsigned int)strtoul(str[11],NULL,0);
+//------------------追加--------------------------
+            id->class_3 = (unsigned int)strtoul(str[11],NULL,0);
+//---------------------ここまで--------------------
            id->sex    = atoi(str[12]);

500行目あたり

    printf("read db/item_group_db.txt done\n");
+//------------------追加--------------------------
+    fp=fopen("db/item_class3_db.txt","r");
+    if(fp==NULL){
+        printf("can't read db/item_class3_db.txt\n");
+        return 0;
+    }
+    while(fgets(line,sizeof(line),fp)){
+        if(line[0] == '\0' || line[0] == '\r' || line[0] == '\n')
+            continue;
+        if(line[0]=='/' && line[1]=='/')
+            continue;
+        memset(str,0,sizeof(str));
+        for(j=0,np=p=line;j<2 && p;j++){
+            str[j]=p;
+            p=strchr(p,',');
+            if(p){ *p++=0; np=p; }
+        }
+        if(str[0] == NULL || str[1] == NULL)
+            continue;
+
+        nameid = atoi(str[0]);
+        if(nameid <= 0 || !(id = itemdb_exists(nameid)))
+            continue;
+        //ID,Name,Jname,Group
+        id->class_3 = (unsigned int)strtoul(str[1],NULL,0);
+    }
+    fclose(fp);
+    printf("read db/item_class3_db.txt done\n");
+//---------------------ここまで--------------------
    return 0;
}

itemdb.h
struct item_data

40行目あたり
    int value_buy;
    int value_sell;
    int type;
    unsigned int class_;
+//------------------追加--------------------------
+    unsigned int class_3;
+//---------------------ここまで--------------------
    int sex;
    int equip;
    int weight;
    int atk;

dbフォルダにitem_class3_db.txtを作成
//アイテムID,使用可能職業

使用可能職業の数値は以下
ルーンナイト:128
アークビショップ:256
ウォーロック:512
メカニック:1024
レンジャー:2048
ギロチンクロス:4096
ロイヤルガード:16384
修羅:32768
ソーサラー:65536
シャドウチェイサー:131072
ジェネティック:262144
ミンストレル:524288
ワンダラー:1048576
全職業装備可能:195026943(1000333311)

カテゴリ【Auriga/eAthenaトラックバック(0) | コメント(0) | top↑

+ Comment List +

<<【Auriga】露天の売買を物で行う【オリジナル】 | ホーム |















管理者にだけ表示を許可する

トラックバックURL
http://xachux.blog109.fc2.com/tb.php/6-a822477b 
この記事にトラックバックする(FC2ブログユーザー)

| ホーム |