📄 char_data.c
字号:
} 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)//强制宠物升级{ 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;}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; // 娄醒民尼永弁 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; } // 仿件弁卞方月 区及仿件母丞 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; if (level > 30){ char tmpbuf[128]; int ownerindex = CHAR_getWorkInt(petindex, CHAR_WORKPLAYERINDEX);#ifdef _FMVER21#else if (CHAR_getInt(ownerindex, CHAR_FMINDEX) < 0) return 0; if (CHAR_getInt(ownerindex, CHAR_FMLEADERFLAG) <= 0 ) return 0; if (strcmp(CHAR_getChar(ownerindex, CHAR_FMNAME), "") == 0) return 0;#endif if (CHAR_CHECKINDEX(ownerindex)){ exp1 = CHAR_GetLevelExp( petindex, level); exp2 = CHAR_GetLevelExp( petindex, level - 1); //#ifdef _PERSONAL_FAME // Arminius 8.30: 家族个人声望// feedpoint = (exp1 - exp2) / 20000; // 减半//#else// feedpoint = (exp1 - exp2) / 10000;//#endif if ( exp1 - exp2 > 0){ int feedpoint; // CoolFish: 2001/10/03 int fd = getfdFromCharaIndex(ownerindex);#ifdef _PERSONAL_FAME // Arminius 8.30: 家族个人声望 CHAR_earnFame(ownerindex, exp2 / 20000); sprintf(tmpbuf, "%d", exp2 / 20000);#endif feedpoint=exp2 / 20000;#ifdef _FMVER21 if (CHAR_getInt(ownerindex, CHAR_FMLEADERFLAG) > 0 && CHAR_getInt(ownerindex, CHAR_FMLEADERFLAG) != FMMEMBER_APPLY){ saacproto_ACFixFMData_send(acfd, CHAR_getChar(ownerindex, CHAR_FMNAME), CHAR_getInt(ownerindex, CHAR_FMINDEX), CHAR_getWorkInt(ownerindex, CHAR_WORKFMINDEXI), FM_FIX_FMFEED, tmpbuf, "", CHAR_getWorkInt(ownerindex, CHAR_WORKFMCHARINDEX), CONNECT_getFdid(fd)); }#else saacproto_ACFixFMData_send(acfd, CHAR_getChar(ownerindex, CHAR_FMNAME), CHAR_getInt(ownerindex, CHAR_FMINDEX), CHAR_getWorkInt(ownerindex, CHAR_WORKFMINDEXI), FM_FIX_FMFEED, tmpbuf, "", CHAR_getWorkInt(ownerindex, CHAR_WORKFMCHARINDEX), 0);#endif } } } } return 0;}#ifdef _PET_TRANSint PETTRANS_getPetBase( int petindex, int *work, int *petrank){ int i, total=-1; if( !CHAR_CHECKINDEX( petindex) ){ total = 0; *petrank = 1; for( i=0; i<4; i++) { work[i] = 50; total += work[i]; } }else{ int LevelUpPoint = CHAR_getInt( petindex, CHAR_ALLOCPOINT ); *petrank = CHAR_getInt( petindex, CHAR_PETRANK ); work[0] = (float)(( LevelUpPoint >> 24 ) & 0xFF); work[1] = (float)(( LevelUpPoint >> 16 ) & 0xFF); work[2] = (float)(( LevelUpPoint >> 8 ) & 0xFF); work[3] = (float)(( LevelUpPoint >> 0 ) & 0xFF); total = ( work[0] + work[1] + work[2] + work[3] ); if( total > 150 ) total = 150; if( total < 0 ) total = 0; } return total;}#ifdef _PET_2TRANSint NPC_PetTransManGetAns( int total1, int total2, int LV, int rank, int tran )#elseint NPC_PetTransManGetAns( int total1, int total2, int LV, int rank )#endif{ int ans=0 , TransLV = 100; float total = 0.00; int Fx=1; if( LV > 130 ) LV = 130; total = ( (float)total1/100 ); // 玛蕾最高 total1=200 total = total*total*total*total*total; if( total < 1 ) total = 0; else total= total*1.3; // 所以total最大=41.6 最小=0 Fx = (int)((5-rank)*1.2)+5; // rank=0~6 所以 Fx最大=11(rank=0)最小=4(rank=6) ans = (int)total + total2 + ((LV-TransLV)/Fx); //42+150+30/11=194#ifdef _PET_2TRANS if( tran == 0 ){ if( ans > 150 ) ans = 150; } else{ if( ans > 200 ) ans = 200; }#else if( ans > 150 ) { ans = 150; }#endif print("\n ans = %d", ans); return ans;}int PETTRANS_PetTransManStatus( int toindex, int petindex1, int petindex2){ int petrank=0,i; int total1,total2,total,petLV,ans; int petID,enemynum,ret=-1; int work[4]={0,0,0,0}; int base[4]={0,0,0,0};#define RAND(x,y) ((x-1)+1+ (int)( (double)(y-(x-1))*rand()/(RAND_MAX+1.0)) ) total1 = PETTRANS_getPetBase( petindex1, work, &petrank); total2 = PETTRANS_getPetBase( petindex2, base, &petrank); petLV = CHAR_getInt( petindex2, CHAR_LV);#ifdef _PET_2TRANS ans = NPC_PetTransManGetAns( total1, total2, petLV, petrank, CHAR_getInt( petindex2, CHAR_TRANSMIGRATION ) );#else ans = NPC_PetTransManGetAns( total1, total2, petLV, petrank );#endif total = total1 + (total2*4); total2 = 0; for( i=0; i<4; i++) { work[i] = work[i]*4; total2 += work[i]; } total = total1 + total2; for( i=0; i<4; i++) { base[i] = (ans * (base[i]+work[i])) /total; } enemynum = ENEMY_getEnemyNum(); petID = CHAR_getInt( petindex2, CHAR_PETID); for( i=0; i<enemynum; i++) { if( ENEMY_getInt(i, ENEMY_TEMPNO) == petID ) break; } if( i == enemynum ) return -1; ret = GetNewPet( toindex, petindex2, i, base); if( ret < 0 ) return -1; return ret;}#endif#ifdef _CHIKULA_STONEvoid CHAR_AutoChikulaStone( int charaindex, int Dflg){ int Myhp, i, dnums; if( !CHAR_CHECKINDEX( charaindex) ) return; if( CHAR_getWorkInt( charaindex, CHAR_WORKBATTLEMODE) != BATTLE_CHARMODE_NONE ) return; switch( Dflg ){ case 1: //HP Myhp = CHAR_getInt( charaindex, CHAR_HP); dnums = CHAR_getWorkInt( charaindex, CHAR_WORKCHIKULAHP); Myhp += dnums; if( Myhp > CHAR_getWorkInt( charaindex, CHAR_WORKMAXHP) ){ Myhp = CHAR_getWorkInt( charaindex, CHAR_WORKMAXHP); } CHAR_setInt( charaindex, CHAR_HP, Myhp); CHAR_complianceParameter( charaindex ); CHAR_send_P_StatusString( charaindex, CHAR_P_STRING_HP); for( i=0; i<CHAR_MAXPETHAVE; i++) { int petindex = CHAR_getCharPet( charaindex, i); if( !CHAR_CHECKINDEX( petindex) ) continue; Myhp = CHAR_getInt( petindex, CHAR_HP); Myhp += dnums; if( Myhp > CHAR_getWorkInt( petindex, CHAR_WORKMAXHP) ){ Myhp = CHAR_getWorkInt( petindex, CHAR_WORKMAXHP); } CHAR_setInt( petindex, CHAR_HP, Myhp); CHAR_send_K_StatusString( charaindex, i, CHAR_K_STRING_HP|CHAR_K_STRING_AI); } break; case 2://MP Myhp = CHAR_getInt( charaindex, CHAR_MP); dnums = CHAR_getWorkInt( charaindex, CHAR_WORKCHIKULAMP); Myhp += dnums; if( Myhp > CHAR_getWorkInt( charaindex, CHAR_WORKMAXMP) ){ Myhp = CHAR_getWorkInt( charaindex, CHAR_WORKMAXMP); } CHAR_setInt( charaindex, CHAR_MP, Myhp); CHAR_complianceParameter( charaindex ); CHAR_send_P_StatusString( charaindex, CHAR_P_STRING_MP); break; }}#endifint CHAR_findSurplusPetBox( int charaindex ){ int i, remnants=0; for( i=0; i<CHAR_MAXPETHAVE; i++){ int petindex = CHAR_getCharPet( charaindex, i); if( !CHAR_CHECKINDEX( petindex) ) remnants++; } return remnants;}#ifdef _FM_METAMOvoid CHAR_ReMetamo( int charaindex ){ int oldMetamo=CHAR_getInt( charaindex , CHAR_BASEIMAGENUMBER); if( oldMetamo>=100700 && oldMetamo<100819){ int newMetamo; int hbMetamo[]={ 100000,100010,100025,100035,100055,100045, 100060,100070,100095,100090,100100,100110, 100135,100125,100145,100150,100165,100160, 100190,100185,100200,100210,100230,100220, }; newMetamo=hbMetamo[(oldMetamo-100700)/5]; CHAR_setInt( charaindex , CHAR_BASEIMAGENUMBER , newMetamo ); CHAR_setInt( charaindex , CHAR_BASEBASEIMAGENUMBER , newMetamo ); CHAR_sendCToArroundCharacter( CHAR_getWorkInt( charaindex , CHAR_WORKOBJINDEX )); CHAR_send_P_StatusString( charaindex , CHAR_P_STRING_BASEBASEIMAGENUMBER); CHAR_complianceParameter( charaindex ); }}#endif#ifdef _NEW_PLAYER_RIDEvoid CHAR_PlayerRide( int charaindex ){ int i,j; int MetamoList[5][13]={ /*{ 小矮子 赛亚人 辫子男孩 酷哥 熊皮男 大个 小矮妹 熊皮妹 帽子妹 短发夹妹 手套女 辣妹 虎}, 此行为说明行 */ { 100000, 100025, 100055, 100060, 100095, 100100, 100135, 100145, 100165, 100190, 100200, 100230, 309}, //红 { 100005, 100030, 100050, 100065, 100085, 100115, 100120, 100140, 100170, 100195, 100210, 100225, 307}, //绿 { 100010, 100035, 100045, 100070, 100090, 100110, 100125, 100150, 100160, 100185, 100215, 100220, 310}, //黄 { 100015, 100020, 100040, 100075, 100080, 100105, 100130, 100155, 100175, 100180, 100205, 100235, 308}, //灰 { 331 , 483 , 330 , 332 , 483 , 332 , 333 , 333 , 331 , 330 , 332 , 483 , 0 }, //雷 }; for(i=0;i<4;i++) for(j=0;j<12;j++) if(CHAR_getInt( charaindex, CHAR_BASEIMAGENUMBER) == MetamoList[i][j]){ if(strstr( getPlayerRide(), "配套送虎加雷")){ setNewplayergivepet(3,MetamoList[i][12]); setNewplayergivepet(4,MetamoList[4][j]); }else if(strstr( getPlayerRide(), "配套送雷")){ setNewplayergivepet(4,MetamoList[4][j]); }else if(strstr( getPlayerRide(), "配套送虎")){ setNewplayergivepet(4,MetamoList[i][12]); } break; }}#endif#ifdef _USER_EXP_CF
BOOL LoadEXP( char* filename )
{
FILE* fp;
int i = 0;
int MaxLevel=0;
fp = fopen(filename, "r");
if (fp == NULL)
{
print("无法打开文件\n");
return FALSE;
}
while(1){
char line[64], exp[64];
if (fgets(line, sizeof(line), fp) == NULL) break;
chop(line);
if( line[0] == '#' )
continue;
for( i=0; i<strlen(line); i++ ){
if( line[i] == '#' ){
line[i] = '\0';
break;
}
}
//*************************************
MaxLevel = MaxLevel + 1;
if (MaxLevel >= 200) break;
easyGetTokenFromString(line, 2, exp, sizeof(exp));
NeedLevelUpTbls[MaxLevel]=atoi(exp);
}
fclose(fp);
return TRUE;
}#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -