Yardım item karşılığı level verme quest

  • Konuyu açan Konuyu açan classone45
  • Açılış Tarihi Açılış Tarihi
  • Yanıt Yanıt 19
  • Gösterim Gösterim 175
Konu sahibi bu konuda soru soruyor. Sorusu ile ilgili bilgisi olanların yanıtlamasını bekliyor.

classone45

Üye
Üye
Mesaj
81
Çözümler
2
Beğeni
3
Puan
414
Ticaret Puanı
0
31132 kodlu itemden örneğin 50 tane verince level atlamasını istiyorum 10 level 10 level verirse daha iyi olur max level 250 ama normal exp verirsede olur yapabilcek var mı?
 
Çözüm
buyur bu işini görecektir

level_up_quest.lua:
Genişlet Daralt Kopyala
quest level_up_quest begin
    state start begin
        when 20094.chat."Seviye Atlamak İstiyorum" begin
            if pc.get_level() < 90 or pc.get_level() == 250 then
                say("Maalesef, seviyen uygun değil.")
            return
            end
            local itemkodu = 31132
            say("10 seviye atlamak için gerekenler şu şekilde:")
            say_item("x50 " ..item_name(itemkodu).. " ", itemkodu,"")
            say("Seviye atlamak istiyor musun?")
            say("")
            local sec = select ( "Evet" , "Hayır " )
            if sec == 1 then
                if pc.count_item(itemkodu) >= 50 then
                    -- eşyayı sil...
bazı bilgileri bize sağlaman lazım

  • seviye kaçtan başlayıp 250'ye kadar gidecek?
  • srcden constants.cpp dosyasını konuya eklemeni istiyorum.
  • npcden mi yapılacak yapılacaksa hani npc olacak kodunu söylemen lazım.
 
bazı bilgileri bize sağlaman lazım

  • seviye kaçtan başlayıp 250'ye kadar gidecek?
  • srcden constants.cpp dosyasını konuya eklemeni istiyorum.
  • npcden mi yapılacak yapılacaksa hani npc olacak kodunu söylemen lazım.
exp olarak verdiriceksen ona gerek yok direkt level verdirebilirsin constants önemsiz yani
 
31132 kodlu itemden örneğin 50 tane verince level atlamasını istiyorum 10 level 10 level verirse daha iyi olur max level 250 ama normal exp verirsede olur yapabilcek var mı?

Bir tane yaptım, bu işini görür. Hazır piyasada paylaşılmamışken bizim foruma özel olsun girip girip alsınlar =)

Şuanki durum için büyülü metale göre ayarlı dilersen değişebilirsin npc olarak da 9003'e bağlı bunu da değişebilirsin.

lua:
Genişlet Daralt Kopyala
quest level_up_quest begin
    state start begin
        when 9003.chat."Seviye Atlamak İstiyorum" begin
            if pc.count_item(25041) >= 50 then
                local current_level = pc.get_level()
                local current_exp = pc.get_exp()
                local exp_to_next_level = pc.get_next_exp()

                -- eşyayı sil
                pc.remove_item(25041, 50)

                -- exp hesap
                local required_exp_for_next_level = exp_to_next_level - current_exp
                local next_level_exp = pc.get_next_exp(current_level + 1)
                local exp_to_give = required_exp_for_next_level + (next_level_exp / 2)

                -- gerekli exp ver
                pc.give_exp2(exp_to_give)

                say("Tebrikler! 1 seviye atladınız.")
            else
                say("Maalesef, gerekli eşyadan 50 adet yok.")
                say("Lütfen yeterli miktarda eşya toplayın.")
            end
        end
    end
end
 
Exp yerine direk seviye verdirmek statülerini sıfırlar benim gönderdiğim exp taraflı fakat 10 seviye değil 1 seviye verir. Böylesi daha kullanışlı olur diye düşünüyorum

Ek olarak sanırım seviye sınırı eklememişiz onun için de queste şöyle bir ek yapabilirsin

Bul
Lua:
Genişlet Daralt Kopyala
if pc.count_item(25041) >= 50 then

Güncelle
Lua:
Genişlet Daralt Kopyala
if pc.count_item(25041) >= 50 and pc.get_level() < 250 then
 
Seviye versin expye gerek yok statülerini de tekrar verebilirler dersen level vermeye göre de uyarlanabilir.
31132 kodlu itemden örneğin 50 tane verince level atlamasını istiyorum 10 level 10 level verirse daha iyi olur max level 250 ama normal exp verirsede olur yapabilcek var mı?
 
En son bir moderatör tarafından düzenlenmiş:
bazı bilgileri bize sağlaman lazım

  • seviye kaçtan başlayıp 250'ye kadar gidecek?
  • srcden constants.cpp dosyasını konuya eklemeni istiyorum.
  • npcden mi yapılacak yapılacaksa hani npc olacak kodunu söylemen lazım.
90-250
npc kodu : 20094

constants.cpp:
Genişlet Daralt Kopyala
#include "stdafx.h"
#include "char.h"
#include "../../common/CommonDefines.h"
TJobInitialPoints JobInitialPoints[JOB_MAX_NUM] =
/*
   {
   int st, ht, dx, iq;
   int max_hp, max_sp;
   int hp_per_ht, sp_per_iq;
   int hp_per_lv_begin, hp_per_lv_end;
   int sp_per_lv_begin, sp_per_lv_end;
   int max_stamina;
   int stamina_per_con;
   int stamina_per_lv_begin, stamina_per_lv_end;
   }
 */
{
    {   6,  4,  3,  3,  600,   200,     40,    20,    44, 44,     22, 22,     800,      5,      1, 3  }, // JOB_WARRIOR  16
    {   4,  3,  6,  3,  650,   200,     40,    20,    44, 44,     22, 22,     800,      5,      1, 3  }, // JOB_ASSASSIN 16
    {   5,  3,  3,  5,  650,   200,     40,    20,    44, 44,     22, 22,     800,      5,      1, 3  }, // JOB_SURA     16
    {   3,  4,  3,  6,  700,   200,     40,    20,    44, 44,     22, 22,     800,      5,      1, 3  },  // JOB_SHAMANa  16
#ifdef ENABLE_WOLFMAN_CHARACTER
    {   2,  6,  6,  2,  600,   200,     40,    20,    36, 44,     18, 22,     800,      5,      1, 3  },
#endif
};

const TMobRankStat MobRankStats[MOB_RANK_MAX_NUM] =
/*
   {
   int         iGoldPercent;
   }
 */
{
    {  20,  }, // MOB_RANK_PAWN,
    {  20,  }, // MOB_RANK_S_PAWN,
    {  25,  }, // MOB_RANK_KNIGHT,
    {  30,  }, // MOB_RANK_S_KNIGHT,
    {  50,  }, // MOB_RANK_BOSS,
    { 100,  }  // MOB_RANK_KING,
};

TBattleTypeStat BattleTypeStats[BATTLE_TYPE_MAX_NUM] =
/*
   {
   int         AttGradeBias;
   int         DefGradeBias;
   int         MagicAttGradeBias;
   int         MagicDefGradeBias;
   }
 */
{
    {      0,      0,      0,    -10    }, // BATTLE_TYPE_MELEE,
    {     10,    -20,    -10,    -15    }, // BATTLE_TYPE_RANGE,
    {     -5,     -5,     10,     10    }, // BATTLE_TYPE_MAGIC,
    {      0,      0,      0,      0    }, // BATTLE_TYPE_SPECIAL,
    {     10,    -10,      0,    -15    }, // BATTLE_TYPE_POWER,
    {    -10,     10,    -10,      0    }, // BATTLE_TYPE_TANKER,
    {     20,    -20,      0,    -10    }, // BATTLE_TYPE_SUPER_POWER,
    {    -20,     20,    -10,      0    }, // BATTLE_TYPE_SUPER_TANKER,
};

const DWORD * exp_table = NULL;

const DWORD exp_table_common[PLAYER_MAX_LEVEL_CONST + 1] =
{
    0,    //    0
    300,
    800,
    1500,
    2500,
    4300,
    7200,
    11000,
    17000,
    24000,
    33000,    //    10
    43000,
    58000,
    76000,
    100000,
    130000,
    169000,
    219000,
    283000,
    365000,
    472000,    //    20
    610000,
    705000,
    813000,
    937000,
    1077000,
    1237000,
    1418000,
    1624000,
    1857000,
    2122000,    //    30
    2421000,
    2761000,
    3145000,
    3580000,
    4073000,
    4632000,
    5194000,
    5717000,
    6264000,
    6837000,    //    40
    7600000,
    8274000,
    8990000,
    9753000,
    10560000,
    11410000,
    12320000,
    13270000,
    14280000,
    15340000,    //    50
    16870000,
    18960000,
    19980000,
    21420000,
    22930000,
    24530000,
    26200000,
    27960000,
    29800000,
    32780000,    //    60
    36060000,
    39670000,
    43640000,
    48000000,
    52800000,
    58080000,
    63890000,
    70280000,
    77310000,
    85040000,    //    70
    93540000,
    102900000,
    113200000,
    124500000,
    137000000,
    150700000,
    165700000,
    236990000,
    260650000,
    286780000,    //    80
    315380000,
    346970000,
    381680000,
    419770000,
    461760000,
    508040000,
    558740000,
    614640000,
    676130000,
    743730000,    //    90
    1041222000,
    1145344200,
    1259878620,
    1385866482,
    1524453130,
    1676898443,
    1844588288,
    2029047116,
    2050000000,
    2150000000u,    //    100
    2210000000u,
    2250000000u,
    2280000000u,
    2310000000u,
    2330000000u,    //    105
    2350000000u,
    2370000000u,
    2390000000u,
    2400000000u,
    2410000000u,    //    110
    2420000000u,
    2430000000u,
    2440000000u,
    2450000000u,
    2460000000u,    //    115
    2470000000u,
    2480000000u,
    2490000000u,
    2490000000u,
    2500000000u,    //    120
    // extra
    2500000000u,2500000000u,2500000000u,2500000000u,2500000000u,2500000000u,2500000000u,2500000000u,2500000000u,2500000000u, // 130
    2500000000u,2500000000u,2500000000u,2500000000u,2500000000u,2500000000u,2500000000u,2500000000u,2500000000u,2500000000u, // 140
    2500000000u,2500000000u,2500000000u,2500000000u,2500000000u,2500000000u,2500000000u,2500000000u,2500000000u,2500000000u, // 150
    2500000000u,2500000000u,2500000000u,2500000000u,2500000000u,2500000000u,2500000000u,2500000000u,2500000000u,2500000000u, // 160
    2500000000u,2500000000u,2500000000u,2500000000u,2500000000u,2500000000u,2500000000u,2500000000u,2500000000u,2500000000u, // 170
    2500000000u,2500000000u,2500000000u,2500000000u,2500000000u,2500000000u,2500000000u,2500000000u,2500000000u,2500000000u, // 180
    2500000000u,2500000000u,2500000000u,2500000000u,2500000000u,2500000000u,2500000000u,2500000000u,2500000000u,2500000000u, // 190
    2500000000u,2500000000u,2500000000u,2500000000u,2500000000u,2500000000u,2500000000u,2500000000u,2500000000u,2500000000u, // 200
    2500000000u,2500000000u,2500000000u,2500000000u,2500000000u,2500000000u,2500000000u,2500000000u,2500000000u,2500000000u, // 210
    2500000000u,2500000000u,2500000000u,2500000000u,2500000000u,2500000000u,2500000000u,2500000000u,2500000000u,2500000000u, // 220
    2500000000u,2500000000u,2500000000u,2500000000u,2500000000u,2500000000u,2500000000u,2500000000u,2500000000u,2500000000u, // 230
    2500000000u,2500000000u,2500000000u,2500000000u,2500000000u,2500000000u,2500000000u,2500000000u,2500000000u,2500000000u, // 240
    2500000000u,2500000000u,2500000000u,2500000000u,2500000000u,2500000000u,2500000000u,2500000000u,2500000000u,2500000000u, // 250
};

const int * aiPercentByDeltaLev = NULL;
const int * aiPercentByDeltaLevForBoss = NULL;


const int aiPercentByDeltaLevForBoss_euckr[MAX_EXP_DELTA_OF_LEV] =
{
    1,      // -15  0
    3,          // -14  1
    5,          // -13  2
    7,          // -12  3
    15,         // -11  4
    30,         // -10  5
    60,         // -9   6
    90,         // -8   7
    91,         // -7   8
    92,         // -6   9
    93,         // -5   10
    94,         // -4   11
    95,         // -3   12
    97,         // -2   13
    99,         // -1   14
    100,        // 0    15
    105,        // 1    16
    110,        // 2    17
    115,        // 3    18
    120,        // 4    19
    125,        // 5    20
    130,        // 6    21
    135,        // 7    22
    140,        // 8    23
    145,        // 9    24
    150,        // 10   25
    155,        // 11   26
    160,        // 12   27
    165,        // 13   28
    170,        // 14   29
    180         // 15   30
};



const int aiPercentByDeltaLev_euckr[MAX_EXP_DELTA_OF_LEV] =
{
    1,  //  -15 0
    5,  //  -14 1
    10, //  -13 2
    20, //  -12 3
    30, //  -11 4
    50, //  -10 5
    70, //  -9  6
    80, //  -8  7
    85, //  -7  8
    90, //  -6  9
    92, //  -5  10
    94, //  -4  11
    96, //  -3  12
    98, //  -2  13
    100,    //  -1  14
    100,    //  0   15
    105,    //  1   16
    110,    //  2   17
    115,    //  3   18
    120,    //  4   19
    125,    //  5   20
    130,    //  6   21
    135,    //  7   22
    140,    //  8   23
    145,    //  9   24
    150,    //  10  25
    155,    //  11  26
    160,    //  12  27
    165,    //  13  28
    170,    //  14  29
    180,    //  15  30
};

const DWORD party_exp_distribute_table[PLAYER_EXP_TABLE_MAX + 1] =
{
    0,
    10,        10,        10,        10,        15,        15,        20,        25,        30,        40,        // 1 - 10
    50,        60,        80,        100,    120,    140,    160,    184,    210,    240,    // 11 - 20
    270,    300,    330,    360,    390,    420,    450,    480,    510,    550,    // 21 - 30
    600,    640,    700,    760,    820,    880,    940,    1000,    1100,    1180,    // 31 - 40
    1260,    1320,    1380,    1440,    1500,    1560,    1620,    1680,    1740,    1800,    // 41 - 50
    1860,    1920,    2000,    2100,    2200,    2300,    2450,    2600,    2750,    2900,    // 51 - 60
    3050,    3200,    3350,    3500,    3650,    3800,    3950,    4100,    4250,    4400,    // 61 - 70
    4600,    4800,    5000,    5200,    5400,    5600,    5800,    6000,    6200,    6400,    // 71 - 80
    6600,    6900,    7100,    7300,    7600,    7800,    8000,    8300,    8500,    8800,    // 81 - 90
    9000,    9000,    9000,    9000,    9000,    9000,    9000,    9000,    9000,    9000,    // 91 - 100
    10000,    10000,    10000,    10000,    10000,    10000,    10000,    10000,    10000,    10000,    // 101 - 110
    12000,    12000,    12000,    12000,    12000,    12000,    12000,    12000,    12000,    12000,    // 111 - 120
    // 14000,    14000,    14000,    14000,    14000,    14000,    14000,    14000,    14000,    14000,    // 130
    // 14000,    14000,    14000,    14000,    14000,    14000,    14000,    14000,    14000,    14000,    // 140
    // 14000,    14000,    14000,    14000,    14000,    14000,    14000,    14000,    14000,    14000,    // 150
    // 14000,    14000,    14000,    14000,    14000,    14000,    14000,    14000,    14000,    14000,    // 160
    // 14000,    14000,    14000,    14000,    14000,    14000,    14000,    14000,    14000,    14000,    // 170
    // 14000,    14000,    14000,    14000,    14000,    14000,    14000,    14000,    14000,    14000,    // 180
    // 14000,    14000,    14000,    14000,    14000,    14000,    14000,    14000,    14000,    14000,    // 190
    // 14000,    14000,    14000,    14000,    14000,    14000,    14000,    14000,    14000,    14000,    // 200
    // 14000,    14000,    14000,    14000,    14000,    14000,    14000,    14000,    14000,    14000,    // 210
    // 14000,    14000,    14000,    14000,    14000,    14000,    14000,    14000,    14000,    14000,    // 220
    // 14000,    14000,    14000,    14000,    14000,    14000,    14000,    14000,    14000,    14000,    // 230
    // 14000,    14000,    14000,    14000,    14000,    14000,    14000,    14000,    14000,    14000,    // 240
    // 14000,    14000,    14000,    14000,    14000,    14000,    14000,    14000,    14000,    14000,    // 250
};

Coord aArroundCoords[ARROUND_COORD_MAX_NUM] =
{
    {         0,          0        },
    {        0,      50     },
    {       35,     35      },
    {       50,     -0      },
    {       35,     -35     },
    {       0,      -50     },
    {       -35,    -35     },
    {       -50,    0       },
    {       -35,    35      },
    {       0,      100     },
    {       71,     71      },
    {       100,    -0      },
    {       71,     -71     },
    {       0,      -100    },
    {       -71,    -71     },
    {       -100,   0       },
    {       -71,    71      },
    {       0,      150     },
    {       106,    106     },
    {       150,    -0      },
    {       106,    -106    },
    {       0,      -150    },
    {       -106,   -106    },
    {       -150,   0       },
    {       -106,   106     },
    {       0,      200     },
    {       141,    141     },
    {       200,    -0      },
    {       141,    -141    },
    {       0,      -200    },
    {       -141,   -141    },
    {       -200,   0       },
    {       -141,   141     },
    {       0,      250     },
    {       177,    177     },
    {       250,    -0      },
    {       177,    -177    },
    {       0,      -250    },
    {       -177,   -177    },
    {       -250,   0       },
    {       -177,   177     },
    {       0,      300     },
    {       212,    212     },
    {       300,    -0      },
    {       212,    -212    },
    {       0,      -300    },
    {       -212,   -212    },
    {       -300,   0       },
    {       -212,   212     },
    {       0,      350     },
    {       247,    247     },
    {       350,    -0      },
    {       247,    -247    },
    {       0,      -350    },
    {       -247,   -247    },
    {       -350,   0       },
    {       -247,   247     },
    {       0,      400     },
    {       283,    283     },
    {       400,    -0      },
    {       283,    -283    },
    {       0,      -400    },
    {       -283,   -283    },
    {       -400,   0       },
    {       -283,   283     },
    {       0,      450     },
    {       318,    318     },
    {       450,    -0      },
    {       318,    -318    },
    {       0,      -450    },
    {       -318,   -318    },
    {       -450,   0       },
    {       -318,   318     },
    {       0,      500     },
    {       354,    354     },
    {       500,    -0      },
    {       354,    -354    },
    {       0,      -500    },
    {       -354,   -354    },
    {       -500,   0       },
    {       -354,   354     },
    {       0,      550     },
    {       389,    389     },
    {       550,    -0      },
    {       389,    -389    },
    {       0,      -550    },
    {       -389,   -389    },
    {       -550,   0       },
    {       -389,   389     },
    {       0,      600     },
    {       424,    424     },
    {       600,    -0      },
    {       424,    -424    },
    {       0,      -600    },
    {       -424,   -424    },
    {       -600,   0       },
    {       -424,   424     },
    {       0,      650     },
    {       460,    460     },
    {       650,    -0      },
    {       460,    -460    },
    {       0,      -650    },
    {       -460,   -460    },
    {       -650,   0       },
    {       -460,   460     },
    {       0,      700     },
    {       495,    495     },
    {       700,    -0      },
    {       495,    -495    },
    {       0,      -700    },
    {       -495,   -495    },
    {       -700,   0       },
    {       -495,   495     },
    {       0,      750     },
    {       530,    530     },
    {       750,    -0      },
    {       530,    -530    },
    {       0,      -750    },
    {       -530,   -530    },
    {       -750,   0       },
    {       -530,   530     },
    {       0,      800     },
    {       566,    566     },
    {       800,    -0      },
    {       566,    -566    },
    {       0,      -800    },
    {       -566,   -566    },
    {       -800,   0       },
    {       -566,   566     },
    {       0,      850     },
    {       601,    601     },
    {       850,    -0      },
    {       601,    -601    },
    {       0,      -850    },
    {       -601,   -601    },
    {       -850,   0       },
    {       -601,   601     },
    {       0,      900     },
    {       636,    636     },
    {       900,    -0      },
    {       636,    -636    },
    {       0,      -900    },
    {       -636,   -636    },
    {       -900,   0       },
    {       -636,   636     },
    {       0,      950     },
    {       672,    672     },
    {       950,    -0      },
    {       672,    -672    },
    {       0,      -950    },
    {       -672,   -672    },
    {       -950,   0       },
    {       -672,   672     },
    {       0,      1000    },
    {       707,    707     },
    {       1000,   -0      },
    {       707,    -707    },
    {       0,      -1000   },
    {       -707,   -707    },
    {       -1000,  0       },
    {       -707,   707     },
};

const DWORD guild_exp_table[GUILD_MAX_LEVEL+1] =
{
    0,
    15000UL,
    45000UL,
    90000UL,
    160000UL,
    235000UL,
    325000UL,
    430000UL,
    550000UL,
    685000UL,
    835000UL,
    1000000UL,
    1500000UL,
    2100000UL,
    2800000UL,
    3600000UL,
    4500000UL,
    6500000UL,
    8000000UL,
    10000000UL,
    42000000UL
};

const DWORD guild_exp_table2[GUILD_MAX_LEVEL+1] =
{
    0,
    15000UL,
    45000UL,
    90000UL,
    160000UL,
    235000UL,
    325000UL,
    430000UL,
    550000UL,
    685000UL,
    835000UL,
    1000000UL,
    1500000UL,
    2100000UL,
    2800000UL,
    3600000UL,
    4500000UL,
    6500000UL,
    8000000UL,
    10000000UL,
    42000000UL
};

const int aiMobEnchantApplyIdx[MOB_ENCHANTS_MAX_NUM] =
{
    APPLY_CURSE_PCT,
    APPLY_SLOW_PCT,
    APPLY_POISON_PCT,
    APPLY_STUN_PCT,
    APPLY_CRITICAL_PCT,
    APPLY_PENETRATE_PCT,
#if defined(ENABLE_WOLFMAN_CHARACTER) && !defined(USE_MOB_BLEEDING_AS_POISON)
    APPLY_BLEEDING_PCT,
#endif
};

const int aiMobResistsApplyIdx[MOB_RESISTS_MAX_NUM] =
{
    APPLY_RESIST_SWORD,
    APPLY_RESIST_TWOHAND,
    APPLY_RESIST_DAGGER,
    APPLY_RESIST_BELL,
    APPLY_RESIST_FAN,
    APPLY_RESIST_BOW,
    APPLY_RESIST_FIRE,
    APPLY_RESIST_ELEC,
    APPLY_RESIST_MAGIC,
    APPLY_RESIST_WIND,
    APPLY_POISON_REDUCE,
#if defined(ENABLE_WOLFMAN_CHARACTER) && !defined(USE_MOB_CLAW_AS_DAGGER)
    APPLY_RESIST_CLAW,
#endif
#if defined(ENABLE_WOLFMAN_CHARACTER) && !defined(USE_MOB_BLEEDING_AS_POISON)
    APPLY_BLEEDING_REDUCE,
#endif
};

const int aiSocketPercentByQty[5][4] =
{
    {  0,  0,  0,  0 },
    {  3,  0,  0,  0 },
    { 10,  1,  0,  0 },
    { 15, 10,  1,  0 },
    { 20, 15, 10,  1 }
};

const int aiWeaponSocketQty[WEAPON_NUM_TYPES] =
{
    4, // WEAPON_SWORD,
    4, // WEAPON_DAGGER,
    4, // WEAPON_BOW,
    4, // WEAPON_TWO_HANDED,
    4, // WEAPON_BELL,
    4, // WEAPON_FAN,
    0, // WEAPON_ARROW,
    0, // WEAPON_MOUNT_SPEAR
#ifdef ENABLE_WOLFMAN_CHARACTER
    3, // WEAPON_CLAW
#endif
};

const int aiArmorSocketQty[ARMOR_NUM_TYPES] =
{
    4, // ARMOR_BODY,
    1, // ARMOR_HEAD,
    1, // ARMOR_SHIELD,
    0, // ARMOR_WRIST,
    0, // ARMOR_FOOTS,
    0  // ARMOR_ACCESSORY
};


#ifdef __AURA_SYSTEM__
int s_aiAuraRefineInfo[AURA_GRADE_MAX_NUM][AURA_REFINE_INFO_MAX] = {
    //  [ Grade | LevelMin | LevelMax | NeedEXP | EvolMaterial | EvolMaterialCount | EvolCost | EvolPCT ]
        {1,   1,  49,  1000, 30617, 10,  5000000, 100},
        {2,  50,  99,  2000, 31136, 10,  5000000, 100},
        {3, 100, 149,  4000, 31137, 10,  5000000, 100},
        {4, 150, 199,  8000, 31138, 10,  8000000, 100},
        {5, 200, 249, 16000, 31138, 20, 10000000, 100},
        {6, 250, 250,     0,     0,  0,        0,   0},
        {0,   0,   0,     0,     0,  0,        0,   0}
};

int* GetAuraRefineInfo(BYTE bLevel)
{
    if (bLevel > 250)
        return NULL;

    for (int i = 0; i < AURA_GRADE_MAX_NUM; ++i)
    {
        if (bLevel >= s_aiAuraRefineInfo[i][AURA_REFINE_INFO_LEVEL_MIN] && bLevel <= s_aiAuraRefineInfo[i][AURA_REFINE_INFO_LEVEL_MAX])
            return s_aiAuraRefineInfo[i];
    }

    return NULL;
}

int GetAuraRefineInfo(BYTE bGrade, BYTE bInfo)
{
    if (bGrade >= AURA_GRADE_MAX_NUM || bInfo >= AURA_REFINE_INFO_MAX)
        return 0;

    return s_aiAuraRefineInfo[bGrade - 1][bInfo];
}
#endif

TItemAttrMap g_map_itemAttr;
TItemAttrMap g_map_itemRare;

const TApplyInfo aApplyInfo[MAX_APPLY_NUM] =
/*
{
   DWORD dwPointType;
}
 */
{
    // Point Type
    { POINT_NONE,            },   // APPLY_NONE,        0
    { POINT_MAX_HP,                },   // APPLY_MAX_HP,        1
    { POINT_MAX_SP,                },   // APPLY_MAX_SP,        2
    { POINT_HT,                    },   // APPLY_CON,        3
    { POINT_IQ,                    },   // APPLY_INT,        4
    { POINT_ST,                    },   // APPLY_STR,        5
    { POINT_DX,                    },   // APPLY_DEX,        6
    { POINT_ATT_SPEED,                },   // APPLY_ATT_SPEED,    7
    { POINT_MOV_SPEED,                },   // APPLY_MOV_SPEED,    8
    { POINT_CASTING_SPEED,            },   // APPLY_CAST_SPEED,    9
    { POINT_HP_REGEN,            },   // APPLY_HP_REGEN,        10
    { POINT_SP_REGEN,            },   // APPLY_SP_REGEN,        11
    { POINT_POISON_PCT,                },   // APPLY_POISON_PCT,    12
    { POINT_STUN_PCT,                },   // APPLY_STUN_PCT,        13
    { POINT_SLOW_PCT,                },   // APPLY_SLOW_PCT,        14
    { POINT_CRITICAL_PCT,        },   // APPLY_CRITICAL_PCT,    15
    { POINT_PENETRATE_PCT,            },   // APPLY_PENETRATE_PCT,    16
    { POINT_ATTBONUS_HUMAN,            },   // APPLY_ATTBONUS_HUMAN,    17
    { POINT_ATTBONUS_ANIMAL,            },   // APPLY_ATTBONUS_ANIMAL,    18
    { POINT_ATTBONUS_ORC,        },   // APPLY_ATTBONUS_ORC,    19
    { POINT_ATTBONUS_MILGYO,            },   // APPLY_ATTBONUS_MILGYO,    20
    { POINT_ATTBONUS_UNDEAD,            },   // APPLY_ATTBONUS_UNDEAD,    21
    { POINT_ATTBONUS_DEVIL,            },   // APPLY_ATTBONUS_DEVIL,    22
    { POINT_STEAL_HP,                },   // APPLY_STEAL_HP,        23
    { POINT_STEAL_SP,                },   // APPLY_STEAL_SP,        24
    { POINT_MANA_BURN_PCT,            },   // APPLY_MANA_BURN_PCT,    25
    { POINT_DAMAGE_SP_RECOVER,            },   // APPLY_DAMAGE_SP_RECOVER,26
    { POINT_BLOCK,                },   // APPLY_BLOCK,        27
    { POINT_DODGE,                },   // APPLY_DODGE,        28
    { POINT_RESIST_SWORD,        },   // APPLY_RESIST_SWORD,    29
    { POINT_RESIST_TWOHAND,            },   // APPLY_RESIST_TWOHAND,    30
    { POINT_RESIST_DAGGER,            },   // APPLY_RESIST_DAGGER,    31
    { POINT_RESIST_BELL,        },   // APPLY_RESIST_BELL,    32
    { POINT_RESIST_FAN,                },   // APPLY_RESIST_FAN,    33
    { POINT_RESIST_BOW,                },   // APPLY_RESIST_BOW,    34
    { POINT_RESIST_FIRE,        },   // APPLY_RESIST_FIRE,    35
    { POINT_RESIST_ELEC,        },   // APPLY_RESIST_ELEC,    36
    { POINT_RESIST_MAGIC,        },   // APPLY_RESIST_MAGIC,    37
    { POINT_RESIST_WIND,        },   // APPLY_RESIST_WIND,    38
    { POINT_REFLECT_MELEE,            },   // APPLY_REFLECT_MELEE,    39
    { POINT_REFLECT_CURSE,            },   // APPLY_REFLECT_CURSE,    40
    { POINT_POISON_REDUCE,            },   // APPLY_POISON_REDUCE,    41
    { POINT_KILL_SP_RECOVER,            },   // APPLY_KILL_SP_RECOVER,    42
    { POINT_EXP_DOUBLE_BONUS,            },   // APPLY_EXP_DOUBLE_BONUS,    43
    { POINT_GOLD_DOUBLE_BONUS,            },   // APPLY_GOLD_DOUBLE_BONUS,44
    { POINT_ITEM_DROP_BONUS,            },   // APPLY_ITEM_DROP_BONUS,    45
    { POINT_POTION_BONUS,        },   // APPLY_POTION_BONUS,    46
    { POINT_KILL_HP_RECOVERY,            },   // APPLY_KILL_HP_RECOVER,    47
    { POINT_IMMUNE_STUN,        },   // APPLY_IMMUNE_STUN,    48
    { POINT_IMMUNE_SLOW,        },   // APPLY_IMMUNE_SLOW,    49
    { POINT_IMMUNE_FALL,        },   // APPLY_IMMUNE_FALL,    50
    { POINT_NONE,            },   // APPLY_SKILL,        51
    { POINT_BOW_DISTANCE,        },   // APPLY_BOW_DISTANCE,    52
    { POINT_ATT_GRADE_BONUS,            },   // APPLY_ATT_GRADE,    53
    { POINT_DEF_GRADE_BONUS,            },   // APPLY_DEF_GRADE,    54
    { POINT_MAGIC_ATT_GRADE_BONUS,      },   // APPLY_MAGIC_ATT_GRADE,    55
    { POINT_MAGIC_DEF_GRADE_BONUS,      },   // APPLY_MAGIC_DEF_GRADE,    56
    { POINT_CURSE_PCT,            },   // APPLY_CURSE_PCT,    57
    { POINT_MAX_STAMINA            },   // APPLY_MAX_STAMINA    58
    { POINT_ATTBONUS_WARRIOR        },   // APPLY_ATTBONUS_WARRIOR  59
    { POINT_ATTBONUS_ASSASSIN        },   // APPLY_ATTBONUS_ASSASSIN 60
    { POINT_ATTBONUS_SURA        },   // APPLY_ATTBONUS_SURA     61
    { POINT_ATTBONUS_SHAMAN        },   // APPLY_ATTBONUS_SHAMAN   62
    { POINT_ATTBONUS_MONSTER        },   //    APPLY_ATTBONUS_MONSTER  63
    { POINT_ATT_BONUS        },   // 64 // APPLY_MALL_ATTBONUS
    { POINT_MALL_DEFBONUS        },   // 65
    { POINT_MALL_EXPBONUS        },   // 66 APPLY_MALL_EXPBONUS
    { POINT_MALL_ITEMBONUS        },   // 67
    { POINT_MALL_GOLDBONUS        },   // 68
    { POINT_MAX_HP_PCT            },        // 69
    { POINT_MAX_SP_PCT            },        // 70
    { POINT_SKILL_DAMAGE_BONUS        },    // 71
    { POINT_NORMAL_HIT_DAMAGE_BONUS    },    // 72

    // DEFEND_BONUS_ATTRIBUTES
    { POINT_SKILL_DEFEND_BONUS        },    // 73
    { POINT_NORMAL_HIT_DEFEND_BONUS    },    // 74
    // END_OF_DEFEND_BONUS_ATTRIBUTES

    // PC_BANG_ITEM_ADD
    { POINT_PC_BANG_EXP_BONUS    },        // 75
    { POINT_PC_BANG_DROP_BONUS    },        // 76
    // END_PC_BANG_ITEM_ADD

    { POINT_NONE,        },

    { POINT_RESIST_WARRIOR,        },
    { POINT_RESIST_ASSASSIN,    },
    { POINT_RESIST_SURA,        },
    { POINT_RESIST_SHAMAN,        },
    { POINT_ENERGY                },
    { POINT_DEF_GRADE            },
    { POINT_COSTUME_ATTR_BONUS    },
    { POINT_MAGIC_ATT_BONUS_PER },
    { POINT_MELEE_MAGIC_ATT_BONUS_PER        },            // 86 APPLY_MELEE_MAGIC_ATTBONUS_PER
    { POINT_RESIST_ICE,            },   // APPLY_RESIST_ICE,    87
    { POINT_RESIST_EARTH,        },   // APPLY_RESIST_EARTH,    88
    { POINT_RESIST_DARK,        },   // APPLY_RESIST_DARK,    89
    { POINT_RESIST_CRITICAL,        },   // APPLY_ANTI_CRITICAL_PCT,    90
    { POINT_RESIST_PENETRATE,        },   // APPLY_ANTI_PENETRATE_PCT,    91

#ifdef ENABLE_WOLFMAN_CHARACTER
    { POINT_BLEEDING_REDUCE,        },    // APPLY_BLEEDING_REDUCE,         92
    { POINT_BLEEDING_PCT,            },    // APPLY_BLEEDING_PCT,             93
    { POINT_ATTBONUS_WOLFMAN,        },
    { POINT_RESIST_WOLFMAN,            },
    { POINT_RESIST_CLAW,            },
#else
    { POINT_NONE,                    },    // APPLY_BLEEDING_REDUCE,         92
    { POINT_NONE,                    },    // APPLY_BLEEDING_PCT,             93
    { POINT_NONE,                    },
    { POINT_NONE,                    },
    { POINT_NONE,                    },
#endif

#ifdef ENABLE_ACCE_SYSTEM
    { POINT_ACCEDRAIN_RATE,            },    // APPLY_ACCEDRAIN_RATE,        97
#else
    { POINT_NONE,            },    // APPLY_ACCEDRAIN_RATE,        97
#endif

#ifdef ENABLE_MAGIC_REDUCTION_SYSTEM
    { POINT_RESIST_MAGIC_REDUCTION,    },    // APPLY_RESIST_MAGIC_REDUCTION,98
#else
    { POINT_NONE,                    },    // APPLY_RESIST_MAGIC_REDUCTION,98
#endif

#ifdef ENABLE_PENDANT_SYSTEM
    { POINT_APPLY_MOUNT, },
    { POINT_ENCHANT_FIRE, },
    { POINT_ENCHANT_ICE, },
    { POINT_ENCHANT_EARTH, },
    { POINT_ENCHANT_DARK, },
    { POINT_ENCHANT_WIND, },
    { POINT_ENCHANT_ELECT, },
    { POINT_RESIST_HUMAN, },
    { POINT_ATTBONUS_SWORD, },
    { POINT_ATTBONUS_TWOHAND, },
    { POINT_ATTBONUS_DAGGER, },
    { POINT_ATTBONUS_BELL, },
    { POINT_ATTBONUS_FAN, },
    { POINT_ATTBONUS_BOW, },
#ifdef ENABLE_WOLFMAN_CHARACTER
    { POINT_ATTBONUS_CLAW, },
#endif
    { POINT_ATTBONUS_CZ, },
    { POINT_ATTBONUS_DESERT, },
    { POINT_ATTBONUS_INSECT, },
#endif
#ifdef ENABLE_EXTRA_APPLY_BONUS
    { POINT_ATTBONUS_STONE, },
    { POINT_ATTBONUS_BOSS, },
    { POINT_ATTBONUS_ELEMENTS, },
    { POINT_ENCHANT_ELEMENTS, },
    { POINT_ATTBONUS_CHARACTERS, },
    { POINT_ENCHANT_CHARACTERS, },
    { POINT_ATTBONUS_RAZADOR, },
    { POINT_ATTBONUS_NEMERE, },
    { POINT_ATTBONUS_LUCIFER, },
    { POINT_ATTBONUS_BLUE_DRAGON, },
    { POINT_ATTBONUS_RED_DRAGON, },
    { POINT_ATTBONUS_AZRAEL, },
#endif
};

const int aiItemMagicAttributePercentHigh[ITEM_ATTRIBUTE_MAX_LEVEL] =
{
    //25, 25, 40, 8, 2,
    30, 40, 20, 8, 2
};

const int aiItemMagicAttributePercentLow[ITEM_ATTRIBUTE_MAX_LEVEL] =
{
    //45, 25, 20, 10, 0,
    50, 40, 10, 0, 0
};

// ADD_ITEM_ATTRIBUTE
const int aiItemAttributeAddPercent[ITEM_ATTRIBUTE_MAX_NUM] =
{
    100, 80, 60, 50, 30, 0, 0,
};
// END_OF_ADD_ITEM_ATTRIBUTE

const int aiExpLossPercents[PLAYER_EXP_TABLE_MAX + 1] =
{
    0,
    5, 5, 5, 5, 5, 5, 5, 5, 5, 4, // 1 - 10
    4, 4, 4, 4, 4, 4, 4, 4, 4, 4, // 11 - 20
    4, 4, 4, 4, 4, 4, 4, 3, 3, 3, // 21 - 30
    3, 3, 3, 3, 3, 3, 3, 3, 3, 3, // 31 - 40
    3, 3, 3, 3, 2, 2, 2, 2, 2, 2, // 41 - 50
    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, // 51 - 60
    2, 2, 1, 1, 1, 1, 1, 1, 1, 1, // 61 - 70
    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 71 - 80
    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 81 - 90
    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 91 - 100
    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 101 - 110
    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 111 - 120
    // 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 130
    // 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 140
    // 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 150
    // 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 160
    // 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 170
    // 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 180
    // 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 190
    // 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 200
    // 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 210
    // 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 220
    // 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 230
    // 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 240
    // 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 250
};

const int aiSkillBookCountForLevelUp[10] =
{
    3, 3, 3, 3, 3, 4, 4, 5, 5, 6
};

// ADD_GRANDMASTER_SKILL
const int aiGrandMasterSkillBookCountForLevelUp[10] =
{
    3, 3, 5, 5, 7, 7, 10, 10, 10, 20,
};

const int aiGrandMasterSkillBookMinCount[10] =
{
//    1, 1, 3, 5, 10, 15, 20, 30, 40, 50,
//    3, 3, 5, 5, 10, 10, 15, 15, 20, 30
    1, 1, 1, 2,  2,  3,  3,  4,  5,  6
};

const int aiGrandMasterSkillBookMaxCount[10] =
{
//    6, 15, 30, 45, 60, 80, 100, 120, 160, 200,
//    6, 10, 15, 20, 30, 40, 50, 60, 70, 80
    5,  7,  9, 11, 13, 15, 20, 25, 30, 35
};
// END_OF_ADD_GRANDMASTER_SKILL

const int CHN_aiPartyBonusExpPercentByMemberCount[9] =
{
    0, 0, 12, 18, 26, 40, 53, 70, 100
};


// UPGRADE_PARTY_BONUS
const int KOR_aiPartyBonusExpPercentByMemberCount[9] =
{
    0,
    0,
    30, // 66% * 2 - 100
    60, // 53% * 3 - 100
    75, // 44% * 4 - 100
    90, // 38% * 5 - 100
    105, // 34% * 6 - 100
    110, // 30% * 7 - 100
    140, // 30% * 8 - 100
};

const int KOR_aiUniqueItemPartyBonusExpPercentByMemberCount[9] =
{
    0,
    0,
    15*2,
    14*3,
    13*4,
    12*5,
    11*6,
    10*7,
    10*8,
};
// END_OF_UPGRADE_PARTY_BONUS

const int * aiChainLightningCountBySkillLevel = NULL;

const int aiChainLightningCountBySkillLevel_euckr[SKILL_MAX_LEVEL+1] =
{
    0,    // 0
    2,    // 1
    2,    // 2
    2,    // 3
    2,    // 4
    2,    // 5
    2,    // 6
    2,    // 7
    2,    // 8
    3,    // 9
    3,    // 10
    3,    // 11
    3,    // 12
    3,    // 13
    3,    // 14
    3,    // 15
    3,    // 16
    3,    // 17
    3,    // 18
    4,    // 19
    4,    // 20
    4,    // 21
    4,    // 22
    4,    // 23
    5,    // 24
    5,    // 25
    5,    // 26
    5,    // 27
    5,    // 28
    5,    // 29
    5,    // 30
    5,    // 31
    5,    // 32
    5,    // 33
    5,    // 34
    5,    // 35
    5,    // 36
    5,    // 37
    5,    // 38
    5,    // 39
    5,    // 40
};

const SStoneDropInfo aStoneDrop[STONE_INFO_MAX_NUM] =
{
    //  mob        pct    {+0    +1    +2    +3    +4}
    {8005,    60,    {30,    30,    30,    9,    1}    },
    {8006,    60,    {28,    29,    31,    11,    1}    },
    {8007,    60,    {24,    29,    32,    13,    2}    },
    {8008,    60,    {22,    28,    33,    15,    2}    },
    {8009,    60,    {21,    27,    33,    17,    2}    },
    {8010,    60,    {18,    26,    34,    20,    2}    },
    {8011,    60,    {14,    26,    35,    22,    3}    },
    {8012,    60,    {10,    26,    37,    24,    3}    },
    {8013,    60,    {2,    26,    40,    29,    3}    },
    {8014,    60,    {0,    26,    41,    30,    3}    },
};

const char * c_apszEmpireNames[EMPIRE_MAX_NUM] =
{
    "전제국",
    "신수국",
    "천조국",
    "진노국"
};

const char * c_apszPrivNames[MAX_PRIV_NUM] =
{
    "",
    "아이템이 나올 확률",
    "돈이 나올 확률",
    "돈 대박이 나올 확률",
    "경험치 배율",
};

const int aiPolymorphPowerByLevel[SKILL_MAX_LEVEL + 1] =
{
    10,   // 1
    11,   // 2
    11,   // 3
    12,   // 4
    13,   // 5
    13,   // 6
    14,   // 7
    15,   // 8
    16,   // 9
    17,   // 10
    18,   // 11
    19,   // 12
    20,   // 13
    22,   // 14
    23,   // 15
    24,   // 16
    26,   // 17
    27,   // 18
    29,   // 19
    31,   // 20
    33,   // 21
    35,   // 22
    37,   // 23
    39,   // 24
    41,   // 25
    44,   // 26
    46,   // 27
    49,   // 28
    52,   // 29
    55,   // 30
    59,   // 31
    62,   // 32
    66,   // 33
    70,   // 34
    74,   // 35
    79,   // 36
    84,   // 37
    89,   // 38
    94,   // 39
    100,  // 40
};

TGuildWarInfo KOR_aGuildWarInfo[GUILD_WAR_TYPE_MAX_NUM] =
/*
   {
   long lMapIndex;
   int iWarPrice;
   int iWinnerPotionRewardPctToWinner;
   int iLoserPotionRewardPctToWinner;
   int iInitialScore;
   int iEndScore;
   };
 */
{
    { 0,        0,      0,      0,      0,      0       },
    { 110,      0,      100,    50,     0,      100     },
    { 111,      0,      100,    50,     0,      10      },
};

//

//


const int aiAccessorySocketAddPct[ITEM_ACCESSORY_SOCKET_MAX_NUM] =
{
    50, 50, 50
};


const int aiAccessorySocketEffectivePct[ITEM_ACCESSORY_SOCKET_MAX_NUM + 1] =
{
    0, 10, 20, 40
};


const int aiAccessorySocketDegradeTime[ITEM_ACCESSORY_SOCKET_MAX_NUM + 1] =
{
    0, 3600 * 24, 3600 * 12, 3600 * 6
};


const int aiAccessorySocketPutPct[ITEM_ACCESSORY_SOCKET_MAX_NUM + 1] =
{
    100, 100, 100, 0
};
// END_OF_ACCESSORY_REFINE

#include "../../common/length.h"
// from import_item_proto.c
typedef struct SValueName
{
    const char *    c_pszName;
    long        lValue;
} TValueName;

TValueName c_aApplyTypeNames[] =
{
    { "STR",        APPLY_STR        },
    { "DEX",        APPLY_DEX        },
    { "CON",        APPLY_CON        },
    { "INT",        APPLY_INT        },
    { "MAX_HP",        APPLY_MAX_HP        },
    { "MAX_SP",        APPLY_MAX_SP        },
    { "MAX_STAMINA",    APPLY_MAX_STAMINA    },
    { "POISON_REDUCE",    APPLY_POISON_REDUCE    },
    { "EXP_DOUBLE_BONUS", APPLY_EXP_DOUBLE_BONUS },
    { "GOLD_DOUBLE_BONUS", APPLY_GOLD_DOUBLE_BONUS },
    { "ITEM_DROP_BONUS", APPLY_ITEM_DROP_BONUS    },
    { "HP_REGEN",    APPLY_HP_REGEN        },
    { "SP_REGEN",    APPLY_SP_REGEN        },
    { "ATTACK_SPEED",    APPLY_ATT_SPEED        },
    { "MOVE_SPEED",    APPLY_MOV_SPEED        },
    { "CAST_SPEED",    APPLY_CAST_SPEED    },
    { "ATT_BONUS",    APPLY_ATT_GRADE_BONUS    },
    { "DEF_BONUS",    APPLY_DEF_GRADE_BONUS    },
    { "MAGIC_ATT_GRADE",APPLY_MAGIC_ATT_GRADE    },
    { "MAGIC_DEF_GRADE",APPLY_MAGIC_DEF_GRADE    },
    { "SKILL",        APPLY_SKILL        },
    { "ATTBONUS_ANIMAL",APPLY_ATTBONUS_ANIMAL    },
    { "ATTBONUS_UNDEAD",APPLY_ATTBONUS_UNDEAD    },
    { "ATTBONUS_DEVIL", APPLY_ATTBONUS_DEVIL    },
    { "ATTBONUS_HUMAN", APPLY_ATTBONUS_HUMAN    },
    { "ADD_BOW_DISTANCE",APPLY_BOW_DISTANCE    },
    { "DODGE",        APPLY_DODGE        },
    { "BLOCK",        APPLY_BLOCK        },
    { "RESIST_SWORD",    APPLY_RESIST_SWORD    },
    { "RESIST_TWOHAND",    APPLY_RESIST_TWOHAND    },
    { "RESIST_DAGGER",    APPLY_RESIST_DAGGER    },
    { "RESIST_BELL",    APPLY_RESIST_BELL    },
    { "RESIST_FAN",    APPLY_RESIST_FAN    },
    { "RESIST_BOW",    APPLY_RESIST_BOW    },
    { "RESIST_FIRE",    APPLY_RESIST_FIRE    },
    { "RESIST_ELEC",    APPLY_RESIST_ELEC    },
    { "RESIST_MAGIC",    APPLY_RESIST_MAGIC    },
    { "RESIST_WIND",    APPLY_RESIST_WIND    },
    { "REFLECT_MELEE",    APPLY_REFLECT_MELEE },
    { "REFLECT_CURSE",    APPLY_REFLECT_CURSE },
    { "RESIST_ICE",        APPLY_RESIST_ICE    },
    { "RESIST_EARTH",    APPLY_RESIST_EARTH    },
    { "RESIST_DARK",    APPLY_RESIST_DARK    },
    { "RESIST_CRITICAL",    APPLY_ANTI_CRITICAL_PCT    },
    { "RESIST_PENETRATE",    APPLY_ANTI_PENETRATE_PCT    },
    { "POISON",        APPLY_POISON_PCT    },
    { "SLOW",        APPLY_SLOW_PCT        },
    { "STUN",        APPLY_STUN_PCT        },
    { "STEAL_HP",    APPLY_STEAL_HP        },
    { "STEAL_SP",    APPLY_STEAL_SP        },
    { "MANA_BURN_PCT",    APPLY_MANA_BURN_PCT    },
    { "CRITICAL",    APPLY_CRITICAL_PCT    },
    { "PENETRATE",    APPLY_PENETRATE_PCT    },
    { "KILL_SP_RECOVER",APPLY_KILL_SP_RECOVER    },
    { "KILL_HP_RECOVER",APPLY_KILL_HP_RECOVER    },
    { "PENETRATE_PCT",    APPLY_PENETRATE_PCT    },
    { "CRITICAL_PCT",    APPLY_CRITICAL_PCT    },
    { "POISON_PCT",    APPLY_POISON_PCT    },
    { "STUN_PCT",    APPLY_STUN_PCT        },
    { "ATT_BONUS_TO_WARRIOR",    APPLY_ATTBONUS_WARRIOR  },
    { "ATT_BONUS_TO_ASSASSIN",    APPLY_ATTBONUS_ASSASSIN },
    { "ATT_BONUS_TO_SURA",    APPLY_ATTBONUS_SURA        },
    { "ATT_BONUS_TO_SHAMAN",    APPLY_ATTBONUS_SHAMAN   },
    { "ATT_BONUS_TO_MONSTER",    APPLY_ATTBONUS_MONSTER  },
    { "ATT_BONUS_TO_MOB",    APPLY_ATTBONUS_MONSTER  },
    { "MALL_ATTBONUS",    APPLY_MALL_ATTBONUS    },
    { "MALL_EXPBONUS",    APPLY_MALL_EXPBONUS    },
    { "MALL_DEFBONUS",    APPLY_MALL_DEFBONUS    },
    { "MALL_ITEMBONUS",    APPLY_MALL_ITEMBONUS    },
    { "MALL_GOLDBONUS", APPLY_MALL_GOLDBONUS    },
    { "MAX_HP_PCT",    APPLY_MAX_HP_PCT    },
    { "MAX_SP_PCT",    APPLY_MAX_SP_PCT    },
    { "SKILL_DAMAGE_BONUS",    APPLY_SKILL_DAMAGE_BONUS    },
    { "NORMAL_HIT_DAMAGE_BONUS",APPLY_NORMAL_HIT_DAMAGE_BONUS    },
    { "SKILL_DEFEND_BONUS",    APPLY_SKILL_DEFEND_BONUS    },
    { "NORMAL_HIT_DEFEND_BONUS",APPLY_NORMAL_HIT_DEFEND_BONUS    },
    { "PCBANG_EXP_BONUS", APPLY_PC_BANG_EXP_BONUS    },
    { "PCBANG_DROP_BONUS", APPLY_PC_BANG_DROP_BONUS    },

    { "RESIST_WARRIOR",    APPLY_RESIST_WARRIOR},
    { "RESIST_ASSASSIN",    APPLY_RESIST_ASSASSIN},
    { "RESIST_SURA",        APPLY_RESIST_SURA},
    { "RESIST_SHAMAN",    APPLY_RESIST_SHAMAN},
    { "INFINITE_AFFECT_DURATION", 0x1FFFFFFF    },
    { "ENERGY", APPLY_ENERGY },
    { "COSTUME_ATTR_BONUS", APPLY_COSTUME_ATTR_BONUS },
    { "MAGIC_ATTBONUS_PER",    APPLY_MAGIC_ATTBONUS_PER    },
    { "MELEE_MAGIC_ATTBONUS_PER",    APPLY_MELEE_MAGIC_ATTBONUS_PER    },

#ifdef ENABLE_WOLFMAN_CHARACTER
    { "BLEEDING_REDUCE",APPLY_BLEEDING_REDUCE },
    { "BLEEDING_PCT",APPLY_BLEEDING_PCT },
    { "ATT_BONUS_TO_WOLFMAN",APPLY_ATTBONUS_WOLFMAN },
    { "RESIST_WOLFMAN",APPLY_RESIST_WOLFMAN },
    { "RESIST_CLAW",APPLY_RESIST_CLAW },
#endif

#ifdef ENABLE_ACCE_SYSTEM
    { "ACCEDRAIN_RATE",APPLY_ACCEDRAIN_RATE },
#endif
#ifdef ENABLE_MAGIC_REDUCTION_SYSTEM
    { "RESIST_MAGIC_REDUCTION",APPLY_RESIST_MAGIC_REDUCTION },
#endif
    #ifdef ENABLE_PENDANT_SYSTEM
    { "APPLY_MOUNT,",APPLY_MOUNT, },
    { "ENCHANT_FIRE",APPLY_ENCHANT_FIRE },
    { "ENCHANT_ICE",APPLY_ENCHANT_ICE },
    { "ENCHANT_EARTH",APPLY_ENCHANT_EARTH },
    { "ENCHANT_DARK",APPLY_ENCHANT_DARK },
    { "ENCHANT_WIND",APPLY_ENCHANT_WIND },
    { "ENCHANT_ELECT",APPLY_ENCHANT_ELECT },
    { "RESIST_HUMAN",APPLY_RESIST_HUMAN },
    { "ATTBONUS_SWORD",APPLY_ATTBONUS_SWORD },
    { "ATTBONUS_TWOHAND",APPLY_ATTBONUS_TWOHAND },
    { "ATTBONUS_DAGGER",APPLY_ATTBONUS_DAGGER },
    { "ATTBONUS_BELL",APPLY_ATTBONUS_BELL },
    { "ATTBONUS_FAN",APPLY_ATTBONUS_FAN },
    { "ATTBONUS_BOW",APPLY_ATTBONUS_BOW },
#ifdef ENABLE_WOLFMAN_CHARACTER
    { "ATTBONUS_CLAW",APPLY_ATTBONUS_CLAW },
#endif
    { "ATTBONUS_CZ",APPLY_ATTBONUS_CZ },
    { "ATTBONUS_DESERT",APPLY_ATTBONUS_DESERT },
    { "ATTBONUS_INSECT",APPLY_ATTBONUS_INSECT },
#endif
#ifdef ENABLE_EXTRA_APPLY_BONUS
    { "ATTBONUS_BOSS",    APPLY_ATTBONUS_BOSS },
    { "ATTBONUS_STONE",    APPLY_ATTBONUS_STONE },
    { "ATTBONUS_ELEMENTS",    APPLY_ATTBONUS_ELEMENTS },
    { "ENCHANT_ELEMENTS",    APPLY_ENCHANT_ELEMENTS },
    { "ATTBONUS_CHARACTERS",    APPLY_ATTBONUS_CHARACTERS },
    { "ENCHANT_CHARACTERS",    APPLY_ENCHANT_CHARACTERS },
    { "ATTBONUS_RAZADOR",    APPLY_ATTBONUS_RAZADOR },
    { "ATTBONUS_NEMERE",    APPLY_ATTBONUS_NEMERE },
    { "ATTBONUS_LUCIFER",    APPLY_ATTBONUS_LUCIFER },
    { "ATTBONUS_BLUE_DRAGON",    APPLY_ATTBONUS_BLUE_DRAGON },
    { "ATTBONUS_RED_DRAGON",    APPLY_ATTBONUS_RED_DRAGON },
    { "ATTBONUS_AZRAEL",    APPLY_ATTBONUS_AZRAEL },
#endif
    { NULL,        0            }
};
// from import_item_proto.c

long FN_get_apply_type(const char *apply_type_string)
{
    TValueName    *value_name;
    for (value_name = c_aApplyTypeNames; value_name->c_pszName; ++value_name)
    {
        if (0==strcasecmp(value_name->c_pszName, apply_type_string))
            return value_name->lValue;
    }
    return 0;
}

Seviye versin expye gerek yok statülerini de tekrar verebilirler dersen level vermeye göre de uyarlanabilir.
direkt seviye verirse statü kullanamıyorlar mı anlamadım

Bir tane yaptım, bu işini görür. Hazır piyasada paylaşılmamışken bizim foruma özel olsun girip girip alsınlar =)

Şuanki durum için büyülü metale göre ayarlı dilersen değişebilirsin npc olarak da 9003'e bağlı bunu da değişebilirsin.

lua:
Genişlet Daralt Kopyala
quest level_up_quest begin
    state start begin
        when 9003.chat."Seviye Atlamak İstiyorum" begin
            if pc.count_item(25041) >= 50 then
                local current_level = pc.get_level()
                local current_exp = pc.get_exp()
                local exp_to_next_level = pc.get_next_exp()

                -- eşyayı sil
                pc.remove_item(25041, 50)

                -- exp hesap
                local required_exp_for_next_level = exp_to_next_level - current_exp
                local next_level_exp = pc.get_next_exp(current_level + 1)
                local exp_to_give = required_exp_for_next_level + (next_level_exp / 2)

                -- gerekli exp ver
                pc.give_exp2(exp_to_give)

                say("Tebrikler! 1 seviye atladınız.")
            else
                say("Maalesef, gerekli eşyadan 50 adet yok.")
                say("Lütfen yeterli miktarda eşya toplayın.")
            end
        end
    end
end
şuan bu 1 seviye 1 seviye mi atlatıyor? eğer öyleyse 10 nasıl yapıcam

Exp yerine direk seviye verdirmek statülerini sıfırlar benim gönderdiğim exp taraflı fakat 10 seviye değil 1 seviye verir. Böylesi daha kullanışlı olur diye düşünüyorum

Ek olarak sanırım seviye sınırı eklememişiz onun için de queste şöyle bir ek yapabilirsin

Bul
Lua:
Genişlet Daralt Kopyala
if pc.count_item(25041) >= 50 then

Güncelle
Lua:
Genişlet Daralt Kopyala
if pc.count_item(25041) >= 50 and pc.get_level() < 250 then
90-250 olduğu için 1 level 1 level çok uzun sürecektir
 
En son bir moderatör tarafından düzenlenmiş:
90-250 olduğu için 1 level 1 level çok uzun sürecektir
@ZEUS06 'ın verdiği questi biraz düzenledim dener misin?

level_up_quest.lua:
Genişlet Daralt Kopyala
quest level_up_quest begin
    state start begin
        when 20094.chat."Seviye Atlamak İstiyorum" begin
            if not pc.get_level() < 90 or pc.get_level() == 250 then
                if pc.count_item(31132) >= 50 then
                    -- eşyayı sil
                    pc.remove_item(31132, 50)
                    -- gerekli exp ver
                    tecrubeYukle = pc.get_next_exp()
                    pc.give_exp2(tecrubeYukle) pc.give_exp2(tecrubeYukle) pc.give_exp2(tecrubeYukle) pc.give_exp2(tecrubeYukle) pc.give_exp2(tecrubeYukle)
                    pc.give_exp2(tecrubeYukle) pc.give_exp2(tecrubeYukle) pc.give_exp2(tecrubeYukle) pc.give_exp2(tecrubeYukle) pc.give_exp2(tecrubeYukle)

                    say("Tebrikler! 10 seviye atladınız.")
                else
                    say("Maalesef, gerekli eşyadan 50 adet yok.")
                    say("Lütfen yeterli miktarda eşya toplayın.")
                end
            else
                say("Maalesef, seviyen uygun değil.")
            end
        end
    end
end
 
@ZEUS06 'ın verdiği questi biraz düzenledim dener misin?

level_up_quest.lua:
Genişlet Daralt Kopyala
quest level_up_quest begin
    state start begin
        when 20094.chat."Seviye Atlamak İstiyorum" begin
            if not pc.get_level() < 90 or pc.get_level() == 250 then
                if pc.count_item(31132) >= 50 then
                    -- eşyayı sil
                    pc.remove_item(31132, 50)
                    -- gerekli exp ver
                    tecrubeYukle = pc.get_next_exp()
                    pc.give_exp2(tecrubeYukle) pc.give_exp2(tecrubeYukle) pc.give_exp2(tecrubeYukle) pc.give_exp2(tecrubeYukle) pc.give_exp2(tecrubeYukle)
                    pc.give_exp2(tecrubeYukle) pc.give_exp2(tecrubeYukle) pc.give_exp2(tecrubeYukle) pc.give_exp2(tecrubeYukle) pc.give_exp2(tecrubeYukle)

                    say("Tebrikler! 10 seviye atladınız.")
                else
                    say("Maalesef, gerekli eşyadan 50 adet yok.")
                    say("Lütfen yeterli miktarda eşya toplayın.")
                end
            else
                say("Maalesef, seviyen uygun değil.")
            end
        end
    end
end
seviye atlamak istiyorum basınca hiç bir şey gelmeden kapanıyor
 
if not sebebi ile olabilir, şöyle düzenleyelim;

if not kısmını sil, aşağıdaki if'i bununla değiş / en alttaki elseyi de say ve end'i ile birlikte silmeyi unutma. İlk elsedeki yazıyı güncellersin.

lua:
Genişlet Daralt Kopyala
if pc.count_item(31132) >= 50 and pc.get_level() >= 90 and pc.get_level() < 250 then
seviye atlamak istiyorum basınca hiç bir şey gelmeden kapanıyor
 
Son düzenleme:
if not sebebi ile olabilir, şöyle düzenleyelim;

if not kısmını sil, aşağıdaki if'i bununla değiş / en alttaki elseyi de say ve end'i ile birlikte silmeyi unutma. İlk elsedeki yazıyı güncellersin.

lua:
Genişlet Daralt Kopyala
if pc.count_item(31132) >= 50 and pc.get_level() >= 90 and pc.get_level() < 250 then
en alt nasıl olacak yapar mısın

level.lua:
Genişlet Daralt Kopyala
quest level_up_quest begin
    state start begin
        when 20094.chat."Seviye Atlamak İstiyorum" begin
                    if pc.count_item(31132) >= 50 and pc.get_level() >= 90 and pc.get_level() < 250 then
                    -- eşyayı sil
                    pc.remove_item(31132, 50)
                    -- gerekli exp ver
                    tecrubeYukle = pc.get_next_exp()
                    pc.give_exp2(tecrubeYukle) pc.give_exp2(tecrubeYukle) pc.give_exp2(tecrubeYukle) pc.give_exp2(tecrubeYukle) pc.give_exp2(tecrubeYukle)
                    pc.give_exp2(tecrubeYukle) pc.give_exp2(tecrubeYukle) pc.give_exp2(tecrubeYukle) pc.give_exp2(tecrubeYukle) pc.give_exp2(tecrubeYukle)
                    say("Tebrikler! 10 seviye atladınız.")
                else
                    say("Maalesef, gerekli eşyadan 50 adet yok.")
                    say("Lütfen yeterli miktarda eşya toplayın.")
                end
            else
                say("Maalesef, seviyen uygun değil.")
            end
        end
    end
end
 
Sil
Sil:
Genişlet Daralt Kopyala
            else
                say("Maalesef, seviyen uygun değil.")
            end

Onun yerine bunu düzenle
düzenle:
Genişlet Daralt Kopyala
                else
                    say("Maalesef, gerekli eşyadan 50 adet yok.")
                    say("Lütfen yeterli miktarda eşya toplayın.")
                end
en alt nasıl olacak yapar mısın

level.lua:
Genişlet Daralt Kopyala
quest level_up_quest begin
    state start begin
        when 20094.chat."Seviye Atlamak İstiyorum" begin
                    if pc.count_item(31132) >= 50 and pc.get_level() >= 90 and pc.get_level() < 250 then
                    -- eşyayı sil
                    pc.remove_item(31132, 50)
                    -- gerekli exp ver
                    tecrubeYukle = pc.get_next_exp()
                    pc.give_exp2(tecrubeYukle) pc.give_exp2(tecrubeYukle) pc.give_exp2(tecrubeYukle) pc.give_exp2(tecrubeYukle) pc.give_exp2(tecrubeYukle)
                    pc.give_exp2(tecrubeYukle) pc.give_exp2(tecrubeYukle) pc.give_exp2(tecrubeYukle) pc.give_exp2(tecrubeYukle) pc.give_exp2(tecrubeYukle)
                    say("Tebrikler! 10 seviye atladınız.")
                else
                    say("Maalesef, gerekli eşyadan 50 adet yok.")
                    say("Lütfen yeterli miktarda eşya toplayın.")
                end
            else
                say("Maalesef, seviyen uygun değil.")
            end
        end
    end
end
 
seviye atlamak istiyorum basınca hiç bir şey gelmeden kapanıyor
bunu dene

level_up_quest.lua:
Genişlet Daralt Kopyala
quest level_up_quest begin
    state start begin
        when 20094.chat."Seviye Atlamak İstiyorum" begin
            if pc.get_level() < 90 or pc.get_level() == 250 then
                say("Maalesef, seviyen uygun değil.")
            else
                if pc.count_item(31132) >= 50 then
                    -- eşyayı sil
                    pc.remove_item(31132, 50)
                    for i = 1, 10 do
                        local tecrubeYukle = pc.get_next_exp()
                        pc.give_exp2(tecrubeYukle)
                    end


                    say("Tebrikler! 10 seviye atladınız.")
                else
                    say("Maalesef, gerekli eşyadan 50 adet yok.")
                    say("Lütfen yeterli miktarda eşya toplayın.")
                end
            end
        end
    end
end
 
bunu dene

level_up_quest.lua:
Genişlet Daralt Kopyala
quest level_up_quest begin
    state start begin
        when 20094.chat."Seviye Atlamak İstiyorum" begin
            if pc.get_level() < 90 or pc.get_level() == 250 then
                say("Maalesef, seviyen uygun değil.")
            else
                if pc.count_item(31132) >= 50 then
                    -- eşyayı sil
                    pc.remove_item(31132, 50)
                    for i = 1, 10 do
                        local tecrubeYukle = pc.get_next_exp()
                        pc.give_exp2(tecrubeYukle)
                    end


                    say("Tebrikler! 10 seviye atladınız.")
                else
                    say("Maalesef, gerekli eşyadan 50 adet yok.")
                    say("Lütfen yeterli miktarda eşya toplayın.")
                end
            end
        end
    end
end
tebrikler 10 seviye atladınız diyor leveli vermiyor eşyayıda kullanıyor
 
buyur bu işini görecektir

level_up_quest.lua:
Genişlet Daralt Kopyala
quest level_up_quest begin
    state start begin
        when 20094.chat."Seviye Atlamak İstiyorum" begin
            if pc.get_level() < 90 or pc.get_level() == 250 then
                say("Maalesef, seviyen uygun değil.")
            return
            end
            local itemkodu = 31132
            say("10 seviye atlamak için gerekenler şu şekilde:")
            say_item("x50 " ..item_name(itemkodu).. " ", itemkodu,"")
            say("Seviye atlamak istiyor musun?")
            say("")
            local sec = select ( "Evet" , "Hayır " )
            if sec == 1 then
                if pc.count_item(itemkodu) >= 50 then
                    -- eşyayı sil
                    pc.remove_item(itemkodu, 50)
                    if pc.get_level() >= 90 and pc.get_level() < 100 then
                        for i = 1, 10 do
                            local tecrubeYukle = pc.get_next_exp()
                            pc.give_exp2(tecrubeYukle)
                        end
                    elseif pc.get_level() >= 100 and pc.get_level() < 110 then
                        pc.give_exp2(-9999999999)
                        pc.give_exp2(2150000000/2) pc.give_exp2(2150000000/2) pc.give_exp2(2250000000/2) pc.give_exp2(2250000000/2) --100 101
                        pc.give_exp2(2280000000/2) pc.give_exp2(2280000000/2) pc.give_exp2(2310000000/2) pc.give_exp2(2310000000/2) --102 103
                        pc.give_exp2(2330000000/2) pc.give_exp2(2330000000/2) pc.give_exp2(2350000000/2) pc.give_exp2(2350000000/2) --104 105
                        pc.give_exp2(2370000000/2) pc.give_exp2(2370000000/2) pc.give_exp2(2390000000/2) pc.give_exp2(2390000000/2) --106 107
                        pc.give_exp2(2400000000/2) pc.give_exp2(2400000000/2) pc.give_exp2(2410000000/2) pc.give_exp2(2410000000/2) --108 109
                    elseif pc.get_level() >= 110 and pc.get_level() < 120 then
                        pc.give_exp2(-9999999999)
                        pc.give_exp2(2410000000/2) pc.give_exp2(2410000000/2) pc.give_exp2(2420000000/2) pc.give_exp2(2420000000/2) --110 111
                        pc.give_exp2(2430000000/2) pc.give_exp2(2430000000/2) pc.give_exp2(2440000000/2) pc.give_exp2(2440000000/2) --112 113
                        pc.give_exp2(2450000000/2) pc.give_exp2(2450000000/2) pc.give_exp2(2460000000/2) pc.give_exp2(2460000000/2) --114 115
                        pc.give_exp2(2470000000/3) pc.give_exp2(2470000000/3)  pc.give_exp2(2470000000/3) pc.give_exp2(2480000000/3) pc.give_exp2(2480000000/3) pc.give_exp2(2480000000/3) --116 117
                        pc.give_exp2(2490000000/3) pc.give_exp2(2490000000/3) pc.give_exp2(2490000000/3) pc.give_exp2(2490000000/3) pc.give_exp2(2490000000/3) pc.give_exp2(2490000000/3) --118 119
                    elseif pc.get_level() >= 120 then
                        pc.give_exp2(-9999999999)
                        for i = 1, 10 do
                            pc.give_exp2(2500000000 / 2) pc.give_exp2(2500000000 / 2)
                        end
                    end
                    say("Tebrikler! 10 seviye atladınız.")
                else
                    say_item_vnum(itemkodu)
                    say("Maalesef, gerekli eşyadan 50 adet yok.")
                    say("Lütfen yeterli miktarda eşya toplayın.")
                end
            end
        end
    end
end
 
Çözüm
Üst