📄 pet.c
字号:
#endif }; for( i = 0; i < CHAR_FUNCTABLENUM; i ++ ) { strcpysafe( ch->charfunctable[i].string, sizeof( ch->charfunctable[i]), tmp[i]); } if( ch->data[CHAR_MAILMODE] != CHAR_PETMAIL_NONE ) { strcpysafe( ch->charfunctable[CHAR_LOOPFUNC].string, sizeof( ch->charfunctable[CHAR_LOOPFUNC]), "PETMAIL_Loop"); } return( CHAR_initCharOneArray( ch));}int PET_createPetFromCharaIndex( int charaindex, int enemyindex){ Char CharNew; int newindex; int havepetelement; char szPet[128]; int i; havepetelement = CHAR_getCharPetElement( charaindex); if( havepetelement < 0 ) return -1; memset( &CharNew, 0, sizeof( Char ) ); if( !CHAR_getDefaultChar( &CharNew,31010 ) )return -1; CharNew.data[CHAR_BASEBASEIMAGENUMBER] = CharNew.data[CHAR_BASEIMAGENUMBER] = CHAR_getInt(enemyindex,CHAR_BASEIMAGENUMBER); CharNew.data[CHAR_WHICHTYPE] = CHAR_TYPEPET; CharNew.data[CHAR_HP] = CHAR_getInt(enemyindex, CHAR_HP); CharNew.data[CHAR_MP] = CHAR_getInt(enemyindex, CHAR_MP); CharNew.data[CHAR_MAXMP] = CHAR_getInt(enemyindex, CHAR_MAXMP); CharNew.data[CHAR_VITAL] = CHAR_getInt(enemyindex, CHAR_VITAL); CharNew.data[CHAR_STR] = CHAR_getInt(enemyindex, CHAR_STR); CharNew.data[CHAR_TOUGH] = CHAR_getInt(enemyindex, CHAR_TOUGH); CharNew.data[CHAR_DEX] = CHAR_getInt(enemyindex, CHAR_DEX); CharNew.data[CHAR_LUCK] = CHAR_getInt(enemyindex, CHAR_LUCK); CharNew.data[CHAR_FIREAT] = CHAR_getInt(enemyindex, CHAR_FIREAT); CharNew.data[CHAR_WATERAT] = CHAR_getInt(enemyindex, CHAR_WATERAT); CharNew.data[CHAR_EARTHAT] = CHAR_getInt(enemyindex, CHAR_EARTHAT); CharNew.data[CHAR_WINDAT] = CHAR_getInt(enemyindex, CHAR_WINDAT); //CharNew.data[CHAR_EXP] = CHAR_getInt(enemyindex, CHAR_EXP); CharNew.data[CHAR_SLOT] = CHAR_getInt(enemyindex, CHAR_SLOT); CharNew.data[CHAR_MODAI] = CHAR_getInt(enemyindex, CHAR_MODAI); CharNew.data[CHAR_LV] = CHAR_getInt(enemyindex, CHAR_LV); CharNew.data[CHAR_POISON] = CHAR_getInt(enemyindex, CHAR_POISON); CharNew.data[CHAR_PARALYSIS]= CHAR_getInt(enemyindex, CHAR_PARALYSIS); CharNew.data[CHAR_SLEEP] = CHAR_getInt(enemyindex, CHAR_SLEEP); CharNew.data[CHAR_STONE] = CHAR_getInt(enemyindex, CHAR_STONE); CharNew.data[CHAR_DRUNK] = CHAR_getInt(enemyindex, CHAR_DRUNK); CharNew.data[CHAR_CONFUSION]= CHAR_getInt(enemyindex, CHAR_CONFUSION); CharNew.data[CHAR_RARE] = CHAR_getInt(enemyindex, CHAR_RARE); CharNew.data[CHAR_PETRANK] = CHAR_getInt(enemyindex, CHAR_PETRANK); CharNew.data[CHAR_PETID] = CHAR_getInt(enemyindex, CHAR_PETID); CharNew.data[CHAR_CRITIAL] = CHAR_getInt(enemyindex, CHAR_CRITIAL); CharNew.data[CHAR_COUNTER] = CHAR_getInt(enemyindex, CHAR_COUNTER); CharNew.data[CHAR_PETMAILEFFECT] = RAND(0, PETMAIL_EFFECTMAX); for( i = 0; i < CHAR_MAXPETSKILLHAVE; i ++ ) { CharNew.unionTable.indexOfPetskill[i] = CHAR_getPetSkill( enemyindex, i); } CharNew.data[CHAR_ALLOCPOINT] = CHAR_getInt(enemyindex, CHAR_ALLOCPOINT); strcpysafe( CharNew.string[CHAR_NAME].string, sizeof(CharNew.string[CHAR_NAME].string), CHAR_getChar( enemyindex, CHAR_NAME) ); newindex = PET_initCharOneArray( &CharNew ); if( newindex < 0 ){ return -1; } CHAR_setMaxExpFromLevel( newindex, CHAR_getInt( enemyindex, CHAR_LV )); CHAR_complianceParameter( newindex ); CHAR_setWorkInt( newindex, CHAR_WORKPLAYERINDEX, charaindex); CHAR_setCharPet( charaindex, havepetelement, newindex); CHAR_setChar( newindex, CHAR_OWNERCDKEY, CHAR_getChar( charaindex, CHAR_CDKEY)); CHAR_setChar( newindex, CHAR_OWNERCHARANAME, CHAR_getChar( charaindex, CHAR_NAME)); snprintf( szPet, sizeof( szPet ), "K%d", havepetelement ); CHAR_sendStatusString( charaindex, szPet ); snprintf( szPet, sizeof( szPet ), "W%d", havepetelement ); CHAR_sendStatusString( charaindex, szPet ); return newindex;}BOOL PET_SelectBattleEntryPet( int charaindex, int petarray){ int pindex; /* 爵 反轮仁 仿弘匹仇木卞娄匀井井月第 岭丐曰 */ if( CHAR_getWorkInt( charaindex, CHAR_WORKBATTLEMODE) != BATTLE_CHARMODE_NONE) return FALSE; /* -1及桦宁反]-1卞仄化本永玄仄化蔽歹曰[*/ if( petarray == -1 ) { CHAR_setInt( charaindex, CHAR_DEFAULTPET, -1 ); return TRUE; } if( !CHAR_CHECKPETINDEX( petarray)) return FALSE; pindex = CHAR_getCharPet( charaindex, petarray ); if( !CHAR_CHECKINDEX( pindex)) return FALSE; if( CHAR_getFlg( pindex, CHAR_ISDIE )) return FALSE; CHAR_setInt( charaindex, CHAR_DEFAULTPET, petarray ); return TRUE;}// Robin 0707 petFollow <charaindex>#if 1int PET_dropPetFollow( int charaindex, int havepetindex, int tofl, int tox, int toy){ char szPet[128]; int dirx[9],diry[9]; int i; int objindex=-1; int floor,x,y; int petindex; if( CHAR_getWorkInt( charaindex, CHAR_WORKBATTLEMODE) != BATTLE_CHARMODE_NONE) return FALSE; petindex = CHAR_getCharPet(charaindex,havepetindex); if( petindex == -1 ) return FALSE; if( !CHAR_CHECKINDEX( charaindex ) )return FALSE; if( CHAR_CHECKINDEX( petindex) == FALSE ) return FALSE; if (CHAR_getInt(petindex, CHAR_PETFAMILY) == 1){ CHAR_talkToCli(charaindex, -1, "家族守护兽无法丢出!", CHAR_COLORYELLOW); return FALSE; } if (CHAR_getInt(charaindex, CHAR_RIDEPET) == havepetindex){ CHAR_talkToCli(charaindex, -1, "骑乘中的宠物无法跟随!", CHAR_COLORYELLOW); return FALSE; } if( tofl == -1 ) { for( i = 0 ; i < 7 ; i ++ ){ dirx[i+2] = CHAR_getDX(CHAR_getInt(charaindex,CHAR_DIR) + i+1); diry[i+2] = CHAR_getDY(CHAR_getInt(charaindex,CHAR_DIR) + i+1); } dirx[0] = CHAR_getDX(CHAR_getInt(charaindex,CHAR_DIR)); diry[0] = CHAR_getDY(CHAR_getInt(charaindex,CHAR_DIR)); dirx[1] = 0; diry[1] = 0; floor = CHAR_getInt( charaindex,CHAR_FLOOR ); for( i = 0 ; i < 9 ; i ++ ){ int x=CHAR_getInt(charaindex,CHAR_X)+dirx[i]; int y=CHAR_getInt(charaindex,CHAR_Y)+diry[i]; if( PET_isPutPoint( floor, x, y ) == TRUE ) { break; } } if( i == 9 ) i = 1; x=CHAR_getInt(charaindex,CHAR_X)+dirx[i]; y=CHAR_getInt(charaindex,CHAR_Y)+diry[i]; } else { if( MAP_walkAbleFromPoint( tofl,tox,toy, FALSE ) == FALSE ) { print( "map walkable err %s:%d\n", __FILE__,__LINE__); return FALSE; } floor = tofl; x = tox; y = toy; } objindex = PET_dropPetAbsolute( petindex,floor,x,y, FALSE ); if( objindex == -1 ) return FALSE; CHAR_setWorkInt( petindex,CHAR_WORKOBJINDEX,objindex ); CHAR_setCharPet( charaindex, havepetindex, -1); CHAR_setInt( petindex, CHAR_FLOOR, floor); CHAR_setInt( petindex, CHAR_X, x); CHAR_setInt( petindex, CHAR_Y, y); CHAR_setInt( petindex, CHAR_PUTPETTIME, NowTime.tv_sec); if( havepetindex == CHAR_getInt( charaindex, CHAR_DEFAULTPET)) { int fd; CHAR_setInt( charaindex, CHAR_DEFAULTPET, -1); fd = getfdFromCharaIndex( charaindex); lssproto_KS_send( fd, havepetindex, 0); } CHAR_sendCToArroundCharacter( objindex); if( CHAR_getInt( charaindex, CHAR_WHICHTYPE) == CHAR_TYPEPLAYER) { snprintf( szPet, sizeof( szPet ), "K%d", havepetindex ); CHAR_sendStatusString( charaindex, szPet ); } CHAR_setWorkInt( charaindex, CHAR_WORKPETFOLLOW, petindex); CHAR_setWorkInt( petindex, CHAR_WORKPETFOLLOWMODE, CHAR_PETFOLLOW_NOW); CHAR_setWorkInt( petindex, CHAR_WORKPETFOLLOWCOUNT, 0); CHAR_setInt( petindex, CHAR_PUTPETTIME, (int)(NowTime.tv_sec)); CHAR_setInt( petindex, CHAR_WORKPLAYERINDEX, charaindex); LogPet( CHAR_getChar( charaindex, CHAR_NAME ), CHAR_getChar( charaindex, CHAR_CDKEY ), CHAR_getChar( petindex, CHAR_NAME), CHAR_getInt( petindex, CHAR_LV), "Follow(溜宠)", CHAR_getInt( charaindex,CHAR_FLOOR), CHAR_getInt( charaindex,CHAR_X ), CHAR_getInt( charaindex,CHAR_Y ), CHAR_getChar( petindex, CHAR_UNIQUECODE) ); return 1;}#endifBOOL PET_getBaseForAllocpoint( int toindex, int *work){ int LevelUpPoint=0; if( CHAR_getInt( toindex, CHAR_WHICHTYPE) != CHAR_TYPEPET) return FALSE; LevelUpPoint = CHAR_getInt( toindex, CHAR_ALLOCPOINT ); work[3] =(( LevelUpPoint >> 24 ) & 0xFF); work[0] = (( LevelUpPoint >> 16 ) & 0xFF); work[1] = (( LevelUpPoint >> 8 ) & 0xFF); work[2] = (( LevelUpPoint >> 0 ) & 0xFF); return TRUE;}void PET_showEditBaseMsg( int charaindex, int toindex, int itemindex, int *work){ int i, maxnums = 6000; char buf1[256]; char buf2[][32]={"腕力成长率","耐久力成长率","速度成长率","体力成长率","能力"}; char buf3[][32]={"大幅提高","略为提高","略为减少"}; if( CHAR_getInt( toindex, CHAR_WHICHTYPE) != CHAR_TYPEPET) return; memset( buf1, 0, sizeof( buf1)); for( i=0; i<4; i++) { int type = ITEM_getInt( itemindex, (ITEM_MODIFYATTACK + i));// print(" 喂[%d]%d+%d ", i, work[i], type); work[i] += type; strcpy( buf1,"\0"); if( work[i] > maxnums ) { sprintf(buf1,"%s 已经达到最高了。", buf2[i]); work[i] = maxnums; }else if( work[i] < 0 ) { sprintf(buf1,"%s 已经为零了。", buf2[i]); work[i] = 0; }else { if( type > 0 ) { if( type > 2 ) { sprintf(buf1,"%s %s %s", buf2[i], buf3[0], "。"); }else { sprintf(buf1,"%s %s %s", buf2[i], buf3[1], "。"); } }else if( type < 0 ){ sprintf(buf1,"%s %s %s", buf2[i], buf3[2], "。"); } } if( strcmp( buf1, "\0")) { CHAR_talkToCli( charaindex, toindex, buf1, CHAR_COLORYELLOW); } }}BOOL CHAR_DelPetForIndex( int charaindex, int petindex){ int i; for( i=0; i<CHAR_MAXPETHAVE; i++) { int pindex = CHAR_getCharPet( charaindex, i); if( !CHAR_CHECKINDEX( pindex) ) continue; if( pindex == petindex ) break; } if( i >= CHAR_MAXPETHAVE){ return FALSE; }else { char szPet[256]; char msgbuf[256]; CHAR_setCharPet( charaindex, i, -1); snprintf( szPet, sizeof( szPet ), "K%d", i); CHAR_sendStatusString( charaindex, szPet ); snprintf( msgbuf,sizeof( msgbuf), "交出%s。", CHAR_getChar( petindex, CHAR_NAME)); CHAR_talkToCli( charaindex, -1, msgbuf, CHAR_COLORYELLOW); CHAR_endCharOneArray( petindex ); } return TRUE;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -