?? char_data.c
字號(hào):
130, // 22
145, // 23
160, // 24
175, // 25
190, // 26
205, // 27
220, // 28
235, // 29
250, // 30
270, // 31
290, // 32
310, // 33
330, // 34
350, // 35
375, // 36
400, // 37
425, // 38
450, // 39
475, // 40
500, // 41
525, // 42
550, // 43
575, // 44
600, // 45
625, // 46
650, // 47
675, // 48
700, // 49
725, // 50
750, // 51
775, // 52
800, // 53
825, // 54
850, // 55
875, // 56
900, // 57
925, // 58
950, // 59
980, // 60
1010, // 61
1040, // 62
1070, // 63
1100, // 64
1130, // 65
1160, // 66
1190, // 67
1220, // 68
1250, // 69
1280, // 70
1310, // 71
1345, // 72
1380, // 73
1415, // 74
1450, // 75
1485, // 76
1520, // 77
1555, // 78
1590, // 79
1630, // 80
1670, // 81
1710, // 82
1750, // 83
1790, // 84
1830, // 85
1870, // 86
1910, // 87
1950, // 88
1990 // 89
}; // 90
// 酵爛讀卅煩董襖煌遙
int GetEnemyExp( int level ){
/*
int exp = 0;
if( level < 5 ){
exp = 2 * level;
}else
if( level < 10 ){
exp = 10 * level;
}else
if( level < 20 ){
exp = 15 * level;
}else
if( level < 30 ){
exp = 30 * level;
}else
if( level < 40 ){
exp = 50 * level;
}else
if( level < 50 ){
exp =60 * level;
}else
if( level < 60 ){
exp =60 * level;
}else{
exp =70 * level;
}
*/
if( level >= arraysizeof( EnemyExpTbl ) )level = arraysizeof( EnemyExpTbl )-1;
return EnemyExpTbl[level];
}
#endif
#ifdef _NEWOPEN_MAXEXP
/*static int NeedLevelUpTbls[] = {
0, 0,
2, 6, 18, 37, 67, 110, 170,
246, 344, 464, 610, 782, 986, 1221,
1491, 1798, 2146, 2534, 2968, 3448, 3978,
4558, 5194, 5885, 6635, 7446, 8322, 9262,
10272, 11352, 12506, 13734, 15042, 16429, 17899,
19454, 21098, 22830, 24656, 26576, 28594, 30710,
32930, 35253, 37683, 40222, 42874, 45638, 48520,
51520, 54642, 57886, 61258, 64757, 68387, 72150,
76050, 80086, 84264, 106110, 113412, 121149, 129352,
138044, 147256, 157019, 167366, 178334, 189958, 202282,
215348, 229205, 243901, 259495, 276041, 293606, 312258,
332071, 353126, 375511, 399318, 424655, 451631, 480370,
511007, 543686, 578571, 615838, 655680, 698312, 743971,
792917, 845443, 901868, 962554, 1027899, 1098353, 1174420,
1256663, 1345723, 1442322, 1547281, 1661531, 1786143, 1922340,
2071533, 2235351, 2415689, 2614754, 2835137, 3079892, 3352633,
3657676, 4000195, 4386445, 4824041, 5322323, 5892866, 6550125,
12326614, 15496114, 20025638, 26821885, 37698249, 56734876, 68097265,
68290815, 68487425, 68687119, 68889921, 69095855, 69304945, 69517215,
69732689, 69951391, 70173345, 70398575, 70627105, 70858959, 71244161,
71342735, 71584705, 71830095, 72078929, 72331231, 72587025, 72846335,
73109185, 73615599, 73655601, 73929215, 74206465, 74487375, 74771969,
75060271, 75352305, 75648095, 75947665, 76421039, 76563241, 76874295,
77189225, 77508055, 77830809, 78157511, 78488185, 78822855, 79161545,
79724279, 79856081, 80206975, 80561985, 80921135, 81284449, 81651951,
82023665, 82399615, 82779825, 83434319, 83558121, 83951255, 84348745,
84750615, 85156889, 85567591, 85982745, 86402375, 86826505, 87575159,
87693361, 88131135, 88573505, 89020495, 89472129, 89928431, 90389425,
90855135, 91325585, 91800799
};
*/
#endif
static int LevelUpTbl[] = { // 經(jīng)驗(yàn)值 等級(jí) 換算表
0, // 0 EX=(lv^4)/10
0, // 1
2, 8, 25, 62, 129,
240, 409, 656, 1000, 1464, // 11
2073, 2856, 3841, 5062, 6553, // 16
8352, 10497, 13032, 16000, 19448, 23425, // 22
27984, 33177, 39062, 45697, 53144, 61465, // 28
70728, 81000, 92352, 104857, 118592, 133633, // 34
150062, 167961, 187416, 208513, 231344, 256000, // 40
282576, 311169, 341880, 374809, 410062, 447745, // 46
487968, 530841, 576480, 625000, 676520, 731161, // 52
789048, 850305, 915062, 983449, 1055600, 1131649, // 58
1211736, 1296000,
1402110, // 61 EX=(lv^4)/(10-0.125*(lv-60))
1515521, 1636671, 1766022, 1904066, 2051322, 2208342, // 67
2375708, 2554041, 2744000, 2946281, 3161630, 3390834, // 73
3634736, 3894230, 4170272, 4463878, 4776136, 5108207, // 79
5461333, 5836843, 6236162, 6660816, 7112448, 7592818, // 85
8103824, 8647511, 9226082, 9841920, 10497600, 11195912, // 91
11939882, 12732800, 13578242, 14480111, 15442664, 16470563, // 97
17568917, 18743336, 20000000, 21345723, 22788045, 24335325, // 103
25996856, 27783000, 29705340, 31776872, 34012224, 36427912, // 109
39042666, 41877804, 44957696, 48310329, 51968004, 55968200, // 115
60354645, 65178685, 70501009, 76393874, 82944000,
95270613, // 121 Nuke 0624 EX=(lv^4)/(2.5-0.25*(lv-120))
110766728, 130792366, 157614250, 195312500, // 125
252047376, // 126 EX=lv^4+60000000*(lv-126)^2 Nuke 0816
320144641, 388435456, 456922881, 525610000, 594499921, 663595776, // 132
732900721, 802417936, 872150625, 942102016,1012275361,1082673936, // 138
1153301041,1224160000 // 140
};
int CHAR_GetLevel()
{
return arraysizeof( LevelUpTbl )-1;
}
int CHAR_GetLevelExp( int charaindex, int level)
{
#ifdef _NEWOPEN_MAXEXP
#ifdef _USER_EXP_CF
if(level>getMaxLevel())level=getMaxLevel();
if(level>getYBLevel())
if (CHAR_getInt(charaindex, CHAR_WHICHTYPE)==CHAR_TYPEPET) {
if(CHAR_getInt(charaindex,CHAR_TRANSMIGRATION)<getPettrans())
return -1;
}else{
if(CHAR_getInt(charaindex,CHAR_TRANSMIGRATION)<getChartrans())
return -1;
}
return getNeedLevelUpTbls(level);
#endif
/* if( level >= arraysizeof( NeedLevelUpTbls ) ){
return -1;
}
return NeedLevelUpTbls[level];*/
#else
if( level >= arraysizeof( LevelUpTbl ) ){
return -1;
}
return LevelUpTbl[level];
#endif
}
int CHAR_GetOldLevelExp( int level)
{
if( level >= arraysizeof( LevelUpTbl ) ){
return -1;
}
return LevelUpTbl[level];
}
int CHAR_LevelUpCheck( int charaindex , int toindex)
{
int exp, level, nextexp, iRet = FALSE;
if( CHAR_CHECKINDEX( charaindex ) == FALSE )return 0;
exp = CHAR_getInt( charaindex, CHAR_EXP );
while( 1 ){
level = CHAR_getInt( charaindex, CHAR_LV );
nextexp = CHAR_GetLevelExp( charaindex, level+1);
if( nextexp < 0 )
break;
// Arminius 7.30 pet limit lv
if (CHAR_getInt(charaindex, CHAR_WHICHTYPE)==CHAR_TYPEPET) {
if (level >= CHAR_getInt(charaindex, CHAR_LIMITLEVEL) &&
CHAR_getInt(charaindex, CHAR_LIMITLEVEL) > 0 ) {
#ifdef _NEWOPEN_MAXEXP
CHAR_setInt( charaindex, CHAR_EXP , 0);
#else
#ifdef _PET_LIMITLEVEL
if( CHAR_getInt( charaindex, CHAR_PETID) == 718
#ifdef _PET_2LIMITLEVEL
|| CHAR_getInt( charaindex, CHAR_PETID) == 401
#endif
) {
nextexp = CHAR_GetLevelExp( charaindex, CHAR_getInt(charaindex, CHAR_LIMITLEVEL));
CHAR_setInt( charaindex, CHAR_EXP , nextexp );
}
#endif
#endif
break;
}
}
if( exp >= nextexp ){
iRet ++;
if( CHAR_getInt( charaindex, CHAR_WHICHTYPE ) == CHAR_TYPEPLAYER ){
CHAR_setInt( charaindex, CHAR_DUELPOINT,
CHAR_getInt( charaindex, CHAR_DUELPOINT) + (level+1)*10 );
}
#ifdef _PET_LIMITLEVEL
else {
CHAR_CheckPetDoLimitlevel( charaindex, toindex, level );
}
#endif
#ifdef _NEWOPEN_MAXEXP
if( level >= CHAR_MAXUPLEVEL ){
}else{
if( CHAR_HandleExp( charaindex) != -1 ){
exp = CHAR_getInt( charaindex, CHAR_EXP );
CHAR_setInt( charaindex, CHAR_LV, level+1 );
}
}
#else
CHAR_setInt( charaindex, CHAR_LV, level+1 );
#endif
}else{
break;
}
}
return iRet;
}
#ifdef _PET_LIMITLEVEL
void CHAR_CheckPetDoLimitlevel( int petindex , int toindex, int level)
{
int LevelUpPoint,vital,str,tgh,dex;
int j,k;
char token[56];
#define RAND(x,y) ((x-1)+1+ (int)( (double)(y-(x-1))*rand()/(RAND_MAX+1.0)) )
if( CHAR_getInt( petindex, CHAR_PETID) == 718
#ifdef _PET_2LIMITLEVEL
|| CHAR_getInt( petindex, CHAR_PETID) == 401
#endif
LevelUpPoint = CHAR_getInt( petindex, CHAR_ALLOCPOINT );
vital = (int )(( LevelUpPoint >> 24 ) & 0xFF);
str = (int)(( LevelUpPoint >> 16 ) & 0xFF);
tgh = (int)(( LevelUpPoint >> 8 ) & 0xFF);
dex = (int)(( LevelUpPoint >> 0 ) & 0xFF);
if( strcmp( CHAR_getChar( petindex, CHAR_OWNERCDKEY), CHAR_getChar( toindex, CHAR_CDKEY) ) ||
strcmp( CHAR_getChar( petindex, CHAR_OWNERCHARANAME), CHAR_getChar( toindex, CHAR_NAME) )){
sprintf(token,"我不認(rèn)識(shí)你呀!快把我還給我主人!");
//andy 1/11 reEdit
vital -= RAND(2,10); if (vital<0) vital=0;
str -= RAND(2,10); if (str<0) str=0;
tgh -= RAND(2,10); if (tgh<0) tgh=0;
dex -= RAND(2,10); if (dex<0) dex=0;
LevelUpPoint = (vital<<24)+(str<<16)+(tgh<<8)+(dex<<0);
CHAR_setInt( petindex, CHAR_ALLOCPOINT , LevelUpPoint);
CHAR_talkToCli( toindex, petindex, token, CHAR_COLORWHITE);
LogPetPointChange(
CHAR_getChar( toindex, CHAR_NAME ),
CHAR_getChar( toindex, CHAR_CDKEY ),
CHAR_getChar( petindex, CHAR_NAME),
petindex, 2,
CHAR_getInt( petindex, CHAR_LV),
"No_master(瑪蕾不對(duì)主人)",
CHAR_getInt( toindex,CHAR_FLOOR),
CHAR_getInt( toindex,CHAR_X ),
CHAR_getInt( toindex,CHAR_Y )
);
}
if( ( level % 20 ) == 0 ) {
for( j=0; j < 3; j++) {
k = RAND( 0, 3);
if( k == 0 )
vital--;
if( k == 1 )
str--;
if( k == 2 )
tgh--;
if( k == 3 )
dex--;
}
if( vital < 0 ) vital =0;
if( str < 0 ) str =0;
if( tgh < 0 ) tgh =0;
if( dex < 0 ) dex =0;
LevelUpPoint = (vital<<24)+(str<<16)+(tgh<<8)+(dex<<0);
CHAR_setInt( petindex, CHAR_ALLOCPOINT , LevelUpPoint);
//print("\n << ( level % 20 ) == 0 >> ");
LogPetPointChange(
CHAR_getChar( toindex, CHAR_NAME ),
CHAR_getChar( toindex, CHAR_CDKEY ),
CHAR_getChar( petindex, CHAR_NAME),
petindex,3,
CHAR_getInt( petindex, CHAR_LV),
"level%20",
CHAR_getInt( toindex,CHAR_FLOOR),
CHAR_getInt( toindex,CHAR_X ),
CHAR_getInt( toindex,CHAR_Y )
);
}
}
}
#endif
int CHAR_PetTakeDrop( int petindex, int floor, int ox, int oy) //強(qiáng)制丟棄寵物升級(jí)
{
int x, y, objindex;
x = rand()%10;
y = rand()%10;
//丟下寵物 CHAR_endCharOneArray
objindex = PET_dropPetAbsolute( petindex,floor,x,y, FALSE );
if( objindex == -1 ) {
return -1;
}
CHAR_setWorkInt( petindex,CHAR_WORKOBJINDEX,objindex );
CHAR_setInt( petindex, CHAR_FLOOR, floor);
CHAR_setInt( petindex, CHAR_X, x);
CHAR_setInt( petindex, CHAR_Y, y);
CHAR_sendCToArroundCharacter( objindex);
return floor;
}
int CHAR_PetTakeLevelUp( int petindex, int lv)//強(qiáng)制寵物升級(jí)
{
int k;
for( k = 1; k < lv; k ++ ){
CHAR_PetLevelUp( petindex );
CHAR_PetAddVariableAi( petindex, AI_FIX_PETLEVELUP );
CHAR_setInt( petindex, CHAR_LV, CHAR_getInt( petindex, CHAR_LV) +1 );
}
CHAR_complianceParameter( petindex );
return k;
}
#ifdef _NEW_MANOR_LAW
extern struct FM_POINTLIST fmpointlist;
#endif
int CHAR_PetLevelUp( int petindex )
{
struct _RankRandTbl{
int min;
int max;
}RankRandTbl[] = {
{ 450, 500 },
{ 470, 520 },
{ 490, 540 },
{ 510, 560 },
{ 530, 580 },
{ 550, 600 },
};
float Param[4] = { 0.0, 0.0, 0.0, 0.0 };
int LevelUpPoint, petrank;
float str, vital, dex, tgh, fRand, i;
#ifdef _TEACHER_SYSTEM
int iGetFame = 0;
#endif
// 婁醒民尼永弁
if( CHAR_CHECKINDEX( petindex ) == FALSE ) return -1;
if( CHAR_getInt( petindex, CHAR_WHICHTYPE ) != CHAR_TYPEPET )return -1;
LevelUpPoint = CHAR_getInt( petindex, CHAR_ALLOCPOINT );
// 矢永玄及仿件弁
petrank = CHAR_getInt( petindex, CHAR_PETRANK );
if( petrank < 0 || petrank > 5 ) petrank = 0;
// 潸
vital = (float)(( LevelUpPoint >> 24 ) & 0xFF);
str = (float)(( LevelUpPoint >> 16 ) & 0xFF);
tgh = (float)(( LevelUpPoint >> 8 ) & 0xFF);
dex = (float)(( LevelUpPoint >> 0 ) & 0xFF);
// ㄠㄟ莢ㄣ 扔奶戊夫毛蕊勻化備嫩 卞ㄠ簫允
for( i = 0; i < 10; i ++ ){
Param[RAND( 0, 3 )] += 1.0;
}
// 仿件弁卞方月 區(qū)及仿件母丞
fRand = (float)RAND( RankRandTbl[petrank].min, RankRandTbl[petrank].max )
* 0.01;
// 喃曰蕊曰禾奶件玄方曰煌遙
vital = (float)vital * fRand + Param[0] * fRand;
str = (float)str * fRand + Param[1] * fRand;
tgh = (float)tgh * fRand + Param[2] * fRand;
dex = (float)dex * fRand + Param[3] * fRand;
// 煌遙
CHAR_setInt( petindex, CHAR_VITAL,
CHAR_getInt( petindex, CHAR_VITAL ) + (int)vital );
CHAR_setInt( petindex, CHAR_STR,
CHAR_getInt( petindex, CHAR_STR ) + (int)str );
CHAR_setInt( petindex, CHAR_TOUGH,
CHAR_getInt( petindex, CHAR_TOUGH ) + (int)tgh );
CHAR_setInt( petindex, CHAR_DEX,
CHAR_getInt( petindex, CHAR_DEX ) + (int)dex );
// CoolFish: 飼育家族聲望更新
{
int level = CHAR_getInt(petindex, CHAR_LV);
int exp1 = 0, exp2 = 0, feedpoint = 0;
if (level > 30){
char tmpbuf[128];
#ifdef _NEW_MANOR_LAW
char tmpbuf1[16];
#endif
int ownerindex = CHAR_getWorkInt(petindex, CHAR_WORKPLAYERINDEX);
#ifdef _FMVER21
#else
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -