?? char_data.c
字號(hào):
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: 家族個(gè)人聲望
feedpoint = (exp1 - exp2) / 20000; // 減半
#else
feedpoint = (exp1 - exp2) / 10000;
#endif
sprintf(tmpbuf, "%d", feedpoint);
if (feedpoint > 0){
// CoolFish: 2001/10/03
int fd = getfdFromCharaIndex(ownerindex);
#ifdef _PERSONAL_FAME // Arminius 8.30: 家族個(gè)人聲望
CHAR_earnFame(ownerindex, feedpoint);
#endif
#ifdef _NEW_MANOR_LAW
sprintf(tmpbuf1, "%d", CHAR_getInt(ownerindex,CHAR_FAME));
#endif
#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,
#ifndef _NEW_MANOR_LAW
"",
#else
tmpbuf1,
#endif
// CoolFish: 2001/10/03
CHAR_getWorkInt(ownerindex, CHAR_WORKFMCHARINDEX),
CONNECT_getFdid(fd));
// CHAR_getWorkInt(ownerindex, CHAR_WORKFMCHARINDEX), 0);
#ifdef _NEW_MANOR_LAW
{
int i;
for(i=0;i<FAMILY_MAXHOME;i++){
// 任何一個(gè)莊園有在挑戰(zhàn)排程,氣勢(shì)值一改變就向AC要最新氣勢(shì)資料
if(fmpointlist.fm_inwar[i]){
saacproto_ACShowTopFMList_send(acfd, FM_TOP_MOMENTUM);
break;
}
}
}
#endif
}
#ifdef _NEW_MANOR_LAW
// 未審核通過(guò)時(shí)只更新成員氣勢(shì)值
else if(CHAR_getInt(ownerindex, CHAR_FMLEADERFLAG) == FMMEMBER_APPLY){
sprintf(tmpbuf,"%d",CHAR_getInt(ownerindex,CHAR_FAME));
saacproto_ACFixFMData_send(acfd,
CHAR_getChar(ownerindex,CHAR_FMNAME),
CHAR_getInt(ownerindex,CHAR_FMINDEX),
CHAR_getWorkInt(ownerindex,CHAR_WORKFMINDEXI),
FM_FIX_FAME,tmpbuf,"",
CHAR_getWorkInt(ownerindex,CHAR_WORKFMCHARINDEX),
CONNECT_getFdid(fd));
}
#endif
#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
#ifdef _TEACHER_SYSTEM
iGetFame = feedpoint/20; // 導(dǎo)師獲得學(xué)生所得聲望的 5% (1/20)
// 檢查所得的聲望有沒(méi)有大於0
if(iGetFame > 0){
// 檢查有沒(méi)有導(dǎo)師
if(strlen(CHAR_getChar(ownerindex,CHAR_TEACHER_ID)) > 0 && strlen(CHAR_getChar(ownerindex,CHAR_TEACHER_NAME)) > 0){
int iPlayernum = CHAR_getPlayerMaxNum(),i;
char szMsg[128];
// 檢查導(dǎo)師在不在線(xiàn)上
for(i=0;i<iPlayernum;i++){
if(CHAR_getCharUse(i) == FALSE) continue;
if(strcmp(CHAR_getChar(ownerindex,CHAR_TEACHER_ID),CHAR_getChar(i,CHAR_CDKEY)) == 0 &&
strcmp(CHAR_getChar(ownerindex,CHAR_TEACHER_NAME),CHAR_getChar(i,CHAR_NAME)) == 0){
float fGetFame = (float)iGetFame/100;
// 導(dǎo)師在線(xiàn)上
CHAR_setWorkInt(i,CHAR_WORK_GET_TEACHER_FAME,CHAR_getWorkInt(i,CHAR_WORK_GET_TEACHER_FAME) + iGetFame);
sprintf(szMsg,"獲得學(xué)生 %s %.2f 點(diǎn)聲望",CHAR_getChar(ownerindex,CHAR_NAME),fGetFame);
CHAR_talkToCli(i,-1,szMsg,CHAR_COLORYELLOW);
break;
}
}
}
}
#endif
}
}
}
}
return 0;
}
#ifdef _NPC_FUSION
int PETFUSION_FusionPetSub( int charaindex, int Subindex1, int Subindex2, int *work, int *skill)
{
int i;
int base[4]={0,0,0,0};
int petskill[7]={-1,-1,-1,-1,-1,-1,-1};
if( !CHAR_CHECKINDEX( Subindex1)) return 0;
if( EVOLUTION_getPetFusionCode( CHAR_getInt( Subindex1, CHAR_PETID) ) < 0 ){
return 0;
}
if( CHAR_getInt( Subindex1, CHAR_FUSIONBEIT) == 1 ||
CHAR_getInt( Subindex1, CHAR_FUSIONRAISE) > 0 )return 0;//檢查是否為融合寵
for( i=0; i<4; i++) {
work[i] = 0;
}
if( PET_getBaseAndSkill( charaindex, Subindex1, base, petskill, 0) == FALSE )
return 0;
if( CHAR_getInt( Subindex1, CHAR_LV) < 80 ){//等級(jí)銷(xiāo)弱
for( i=0; i<4; i++) {
base[i] = base[i]*0.8;
}
}
for( i=0; i<4; i++) {
work[i] = base[i];
}
for( i=0; i<7; i++) {
skill[i] = petskill[i];
}
if( !CHAR_CHECKINDEX( Subindex2)) return 1;
if( EVOLUTION_getPetFusionCode( CHAR_getInt( Subindex2, CHAR_PETID) ) < 0 ){
return 0;
}
if( CHAR_getInt( Subindex2, CHAR_FUSIONBEIT) == 1 ||
CHAR_getInt( Subindex2, CHAR_FUSIONRAISE) > 0 )return 0;//檢查是否為融合寵
if( PET_getBaseAndSkill( charaindex, Subindex2, base, NULL, 0) == FALSE )
return 0;
if( CHAR_getInt( Subindex2, CHAR_LV) < 80 ){//等級(jí)銷(xiāo)弱
for( i=0; i<4; i++) {
base[i] = base[i]*0.8;
}
}
for( i=0; i<4; i++) {
work[i] += base[i];
}
return 2;
}
BOOL PETFUSION_FusionPetMain( int charaindex, int Mainindex, int *work, int *skill)
{
int i;
int base[4]={0,0,0,0};
int petskill[7]={-1,-1,-1,-1,-1,-1,-1};
if( !CHAR_CHECKINDEX( Mainindex)) return FALSE;
if( EVOLUTION_getPetFusionCode( CHAR_getInt( Mainindex, CHAR_PETID) ) < 0 ){
return 0;
}
if( CHAR_getInt( Mainindex, CHAR_FUSIONBEIT) == 1 ||
CHAR_getInt( Mainindex, CHAR_FUSIONRAISE) > 0 )return FALSE;//檢查是否為融合寵
if( PET_getBaseAndSkill( charaindex, Mainindex, base, petskill, 0) == FALSE )
return -1;
if( CHAR_getInt( Mainindex, CHAR_LV) < 80 ){//等級(jí)銷(xiāo)弱
for( i=0; i<4; i++) {
base[i] = base[i]*0.8;
}
}
for( i=0; i<4; i++) {
work[i] += base[i]*0.6;
}
for( i=0; i<7; i++) {
skill[i] = petskill[i];
}
return TRUE;
}
BOOL PETFUSION_DelPet( int toindex, int Mainindex, int Subindex1, int Subindex2, int flg)
{
int i, j, cnt=0;
int petindex[3];
petindex[0] = Mainindex;
petindex[1] = Subindex1;
petindex[2] = Subindex2;
for( i=0; i<3; i++) {
if( !CHAR_CHECKINDEX( petindex[i] ) ) continue;
for( j=0; j<CHAR_MAXPETHAVE; j++) {
int pindex = CHAR_getCharPet( toindex, j);
if( !CHAR_CHECKINDEX( pindex) ) continue;
if( pindex == petindex[i] )
break;
}
if( j >= CHAR_MAXPETHAVE){
}else {
char szPet[256];
char msgbuf[256];
CHAR_setCharPet( toindex, j, -1);
snprintf( szPet, sizeof( szPet ), "K%d", j);
CHAR_sendStatusString( toindex, szPet );
snprintf( msgbuf,sizeof( msgbuf), "交出%s。", CHAR_getChar( petindex[i], CHAR_NAME));
CHAR_talkToCli( toindex, -1, msgbuf, CHAR_COLORYELLOW);
LogPet(
CHAR_getChar( toindex, CHAR_NAME ),
CHAR_getChar( toindex, CHAR_CDKEY ),
CHAR_getChar( petindex[i], CHAR_NAME),
CHAR_getInt( petindex[i], CHAR_LV),
"TenseiDel",
CHAR_getInt( toindex,CHAR_FLOOR),
CHAR_getInt( toindex,CHAR_X ),
CHAR_getInt( toindex,CHAR_Y ),
CHAR_getChar( petindex[i], CHAR_UNIQUECODE) // shan 2001/12/14
);
}
CHAR_endCharOneArray( petindex[i] );
cnt++;
}
if( cnt >= flg )
return TRUE;
return FALSE;
}
int PETFUSION_Evolution( int charaindex, int petindex)
{
char buf[256], buf1[256];
int newindex=-1;
CHAR_setInt( petindex, CHAR_FUSIONTIMELIMIT, -1);
sprintf( buf, "蛋〈%s〉孵化成", CHAR_getChar( petindex, CHAR_NAME));
newindex = EVOLUTION_createPetFromEnemyIndex( charaindex, petindex, 0);
if( !CHAR_CHECKINDEX( newindex) ){
CHAR_talkToCli( charaindex, -1, "寵物孵化發(fā)生錯(cuò)誤。", CHAR_COLORYELLOW);
return -1;
}
sprintf( buf1, "〈%s〉。", CHAR_getChar( newindex, CHAR_NAME));
strcat( buf, buf1);
CHAR_talkToCli( charaindex, -1, buf, CHAR_COLORYELLOW);
LogPetFeed(
CHAR_getChar( charaindex, CHAR_NAME),
CHAR_getChar( charaindex, CHAR_CDKEY),
CHAR_getChar( petindex, CHAR_NAME),
petindex,
CHAR_getInt( petindex, CHAR_LV),
buf, // Key
CHAR_getInt( charaindex, CHAR_FLOOR),
CHAR_getInt( charaindex, CHAR_X),
CHAR_getInt( charaindex, CHAR_Y),
CHAR_getChar( petindex, CHAR_UNIQUECODE) );
return newindex;
}
#endif
#ifdef _PET_TRANS
int 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_2TRANS
int NPC_PetTransManGetAns( int total1, int total2, int LV, int rank, int tran )
#else
int 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_STONE
void 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;
}
}
#endif
#ifdef _STATUS_WATERWORD //水世界狀態(tài)
void CHAR_CheckWaterStatus( int charaindex)
{
if( !CHAR_CHECKINDEX( charaindex) ) return;
if( CHAR_getWorkInt( charaindex, CHAR_WORKSTATUSWATER) == -1 ){
return;
}
if( CHAR_getWorkInt( charaindex, CHAR_WORKSTATUSWATER) > 0 ){
CHAR_setWorkInt( charaindex, CHAR_WORKSTATUSWATER,
CHAR_getWorkInt( charaindex, CHAR_WORKSTATUSWATER) -1 );
if( CHAR_getWorkInt( charaindex, CHAR_WORKSTATUSWATER) != 0 &&
CHAR_getWorkInt( charaindex, CHAR_WORKSTATUSWATER)%10 == 0 ){
char buf1[256];
sprintf( buf1, "水中呼吸時(shí)間剩馀%d分。",
CHAR_getWorkInt( charaindex, CHAR_WORKSTATUSWATER));
CHAR_talkToCli( charaindex, -1, buf1, CHAR_COLORYELLOW);
}
}
if( CHAR_getWorkInt( charaindex, CHAR_WORKBATTLEMODE) != BATTLE_CHARMODE_NONE ){
return;
}
if( CHAR_getWorkInt( charaindex, CHAR_WORKMAPFLOORTYPE) == 1 &&
CHAR_getWorkInt( charaindex, CHAR_WORKSTATUSWATER) <= 0 ){//水世界
char token[256];
int defhp=0;
int maxhp = CHAR_getWorkInt( charaindex, CHAR_WORKMAXHP);
int myhp = CHAR_getInt( charaindex, CHAR_HP);
defhp = (maxhp*0.033);
if( defhp <= 0 ) defhp = 1;
myhp = myhp - defhp;
sprintf( token, "因無(wú)法呼吸,扣%d HP。", defhp);
CHAR_talkToCli( charaindex, -1, token, CHAR_COLORYELLOW);
if( myhp <= 0 ){
myhp = 1;
if(CHAR_getInt(charaindex,CHAR_FLOOR) == 151 || CHAR_getInt(charaindex,CHAR_FLOOR) == 160
|| CHAR_getInt(charaindex,CHAR_FLOOR) == 161 ) CHAR_warpToSpecificPoint(charaindex,702,213,27);
else CHAR_warpToSpecificPoint( charaindex, 200,102,1021);
}
CHAR_setInt( charaindex, CHAR_HP, myhp);
CHAR_send_P_StatusString( charaindex, CHAR_P_STRING_HP);
}
}
#endif
int 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;
}
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -