📄 复件 char.c
字号:
CHAR_setInt(charaindex, CHAR_Y, yelder); } }#ifdef _FIX_GAMBLENUM { if( CHAR_getInt(charaindex, CHAR_GAMBLENUM) < 0){ CHAR_setInt(charaindex, CHAR_GAMBLENUM, 0); } }#endif#ifdef _MAP_NOEXIT { int exfloor=-1,ex_X=-1,ex_Y=-1; int map_type=0; unsigned int point; point = MAP_getExFloor_XY( CHAR_getInt(charaindex, CHAR_FLOOR) , &map_type); if( point > 0 ) { if( CHAR_getInt( charaindex, CHAR_LASTTALKELDER) >= 0 ) { CHAR_getElderPosition(CHAR_getInt(charaindex, CHAR_LASTTALKELDER), &exfloor, &ex_X, &ex_Y); } if( map_type >= 0 ) { // map_type >= 0 优先回纪录点 if( exfloor == map_type && exfloor >= 0 ) {//回纪录点 }else { exfloor = (point>>16)&0xffffff; ex_X = (point>>8)&0xff; ex_Y = (point>>0)&0xff; } } if( CHECKFLOORID( exfloor) ) { //检查房间号 CHAR_setInt(charaindex, CHAR_FLOOR, exfloor); CHAR_setInt(charaindex, CHAR_X, ex_X); CHAR_setInt(charaindex, CHAR_Y, ex_Y); } } }#endif if( CHAR_getInt(charaindex,CHAR_X) < 0 || CHAR_getInt(charaindex,CHAR_Y) < 0 ){ CHAR_setInt(charaindex,CHAR_X,1); CHAR_setInt(charaindex,CHAR_Y,1); }#ifdef _MAP_TIME // 如果登入的地图是这些编号的话,回到入口 if(CHAR_getInt(charaindex,CHAR_FLOOR) >= 30017 && CHAR_getInt(charaindex, CHAR_FLOOR) <= 30021){ CHAR_setInt(charaindex,CHAR_FLOOR,30008); CHAR_setInt(charaindex,CHAR_X,39); CHAR_setInt(charaindex,CHAR_Y,38); }#endif#ifdef _FM_METAMO if( CHAR_getInt( charaindex , CHAR_BASEIMAGENUMBER)>=100700 && CHAR_getInt( charaindex , CHAR_BASEIMAGENUMBER)<100819 && (CHAR_getInt( charaindex, CHAR_FMLEADERFLAG ) == FMMEMBER_NONE || CHAR_getInt( charaindex, CHAR_FMLEADERFLAG ) == FMMEMBER_APPLY)){ switch( CHAR_getWorkInt( charaindex, CHAR_WORKFMFLOOR) ){ case 1041: case 2031: case 3031: case 4031: case 5031: case 6031: case 7031: case 8031: case 9031: case 10031: break; default: CHAR_ReMetamo(charaindex); } }#endif#ifdef _AUTO_PK int exfloor=-1,ex_X=-1,ex_Y=-1; if( CHAR_getInt(charaindex, CHAR_FLOOR) == 20000 ){ CHAR_getElderPosition(CHAR_getInt(charaindex, CHAR_LASTTALKELDER), &exfloor, &ex_X, &ex_Y); CHAR_setInt(charaindex, CHAR_FLOOR, exfloor); CHAR_setInt(charaindex, CHAR_X, ex_X); CHAR_setInt(charaindex, CHAR_Y, ex_Y); } CHAR_setInt(charaindex, CHAR_AUTOPK, 0); #endif if( CHAR_getInt(charaindex, CHAR_FLOOR) == 10032 ){ CHAR_setInt(charaindex, CHAR_FLOOR, 10030); CHAR_setInt(charaindex, CHAR_X, 52); CHAR_setInt(charaindex, CHAR_Y, 36); } objindex = initObjectFromObjectMember(OBJTYPE_CHARA,charaindex, CHAR_getInt(charaindex,CHAR_X), CHAR_getInt(charaindex,CHAR_Y), CHAR_getInt(charaindex,CHAR_FLOOR)); if( objindex == -1 ){ fprint ("始化对象错误!\n"); goto DELETECHARDATA; } CHAR_setWorkInt( charaindex,CHAR_WORKOBJINDEX,objindex ); CONNECT_setState( clifd, LOGIN ); CONNECT_setCharaindex( clifd, charaindex ); CHAR_LoginBesideSetWorkInt( charaindex, clifd); CHAR_complianceParameter( charaindex ); //检查人物身上 { int i;// char *petstring; int ID1; for( i = 0; i < CHAR_MAXPETHAVE; i ++ ) { int petindex = CHAR_getCharPet(charaindex,i); if( CHAR_CHECKINDEX( petindex) ) {/* if(CHAR_getInt( petindex, CHAR_FUSIONBEIT )==1 && CHAR_getInt( petindex, CHAR_TRANSMIGRATION )<2) CHAR_setInt( petindex, CHAR_FUSIONBEIT, 0 ); if(CHAR_getInt( petindex, CHAR_FUSIONBEIT )==1 && CHAR_getInt( petindex, CHAR_TRANSMIGRATION )>2){ int vital=CHAR_getInt( petindex, CHAR_VITAL); int str=CHAR_getInt( petindex, CHAR_STR); int tough=CHAR_getInt( petindex, CHAR_TOUGH); int dex=CHAR_getInt( petindex, CHAR_DEX); int lv=CHAR_getInt( petindex, CHAR_LV); int LevelUpPoint = CHAR_getInt( petindex, CHAR_ALLOCPOINT ); int work[4]; float fRand, cvitl, cstr, ctough, cdex; float rnd=(rand()%5+95)/100.0; float Param[4] = { 0.0, 0.0, 0.0, 0.0 }; work[3] =(( LevelUpPoint >> 24 ) & 0xFF); work[0] = (( LevelUpPoint >> 16 ) & 0xFF); work[1] = (( LevelUpPoint >> 8 ) & 0xFF); work[2] = (( LevelUpPoint >> 0 ) & 0xFF); struct _RankRandTbl{ int min; int max; }RankRandTbl[] = { { 450, 500 }, { 470, 520 }, { 490, 540 }, { 510, 560 }, { 530, 580 }, { 550, 600 }, }; int petrank = CHAR_getInt( petindex, CHAR_PETRANK ); if( petrank < 0 || petrank > 5 ) petrank = 0; printf("\n.........................\n"); printf("名:%s\n",CHAR_getChar( petindex, CHAR_NAME)); printf("血:%d\n",vital/15); printf("攻:%d\n",str/80); printf("防:%d\n",tough/80); printf("敏:%d\n",dex/100); printf("成:%f\n",((str/80-20.0)/lv+(tough/80-15.0)/lv+(dex/100-15.0)/lv)); printf(".........................\n"); while(((str/80-20.0)/lv+(tough/80-15.0)/lv+(dex/100-15.0)/lv)>8.5){ vital*=rnd; str*=rnd; tough*=rnd; dex*=rnd; rnd=(rand()%5+95)/100.0; } for(i=0;i<160;i++){ fRand = (float)RAND( RankRandTbl[petrank].min, RankRandTbl[petrank].max ) * 0.01; cvitl += (float)work[3] * fRand + Param[0] * fRand; cstr += (float)work[0] * fRand + Param[1] * fRand; ctough += (float)work[1] * fRand + Param[2] * fRand; cdex += (float)work[2] * fRand + Param[3] * fRand; } rnd=(cstr/80/160.0+ctough/80/160.0+cdex/100/160.0); printf("血:%d\n",work[3]); printf("攻:%d\n",work[0]); printf("防:%d\n",work[1]); printf("敏:%d\n",work[2]); printf("成:%f\n",rnd); if(rnd>8.5){ work[3]*=(8.5/rnd); work[0]*=(8.5/rnd); work[1]*=(8.5/rnd); work[2]*=(8.5/rnd); } LevelUpPoint = ( work[3]<< 24) + ( work[0]<< 16) + ( work[1]<< 8) + ( work[2]<< 0); CHAR_setInt( petindex, CHAR_ALLOCPOINT, LevelUpPoint); CHAR_setInt( petindex, CHAR_VITAL, vital); CHAR_setInt( petindex, CHAR_STR, str); CHAR_setInt( petindex, CHAR_TOUGH, tough); CHAR_setInt( petindex, CHAR_DEX, dex); CHAR_setInt( petindex, CHAR_FUSIONBEIT, 2 ); CHAR_setInt( petindex, CHAR_TRANSMIGRATION,3 ); printf("\n.........................\n"); printf("名:%s\n",CHAR_getChar( petindex, CHAR_NAME)); printf("血:%d\n",vital/15); printf("攻:%d\n",str/80); printf("防:%d\n",tough/80); printf("敏:%d\n",dex/100); printf("成:%f\n",((str/80-20.0)/lv+(tough/80-15.0)/lv+(dex/100-15.0)/lv)); printf(".........................\n"); printf("血:%d\n",work[3]); printf("攻:%d\n",work[0]); printf("防:%d\n",work[1]); printf("敏:%d\n",work[2]); }*/ #ifdef _UNIQUE_P_I // CoolFish: 2001/10/11 Set Pet Unicode CHAR_setPetUniCode(petindex);#endif#ifdef _NEWOPEN_MAXEXP if( CHAR_getInt( petindex, CHAR_OLDEXP) > 0 || CHAR_getInt( charaindex, CHAR_OLDEXP) < 0 ){ CHAR_ChangeExp( petindex); }#endif ID1=CHAR_getInt( petindex, CHAR_PETID);// petstring = CHAR_makePetStringFromPetIndex( petindex);#ifdef _REEDIT_PETBBIS if( ID1 == 1133 ){ CHAR_setInt( petindex, CHAR_BASEIMAGENUMBER, 101578); CHAR_setInt( petindex, CHAR_BASEBASEIMAGENUMBER, 101578); print("PET:%s fix BBI\n", CHAR_getUseName(petindex)); }#endif // WON ADD 修正白虎七技 if( ID1 == 777 )CHAR_setInt( petindex, CHAR_SLOT, 7); CHAR_setWorkInt( petindex, CHAR_WORKPLAYERINDEX, charaindex); // 修正宠技最大值变-1 Robin 20040803 if( CHAR_getInt( petindex, CHAR_SLOT) < 0 ) { int j; for( j=0; j<CHAR_MAXPETSKILLHAVE; j++) { if( CHAR_getPetSkill( petindex, j) >= 0) CHAR_setInt( petindex, CHAR_SLOT, j+1); } //print(" 宠技MAX变-1改6 "); } CHAR_complianceParameter( petindex );#ifdef _FIX_GP_PET_SKILL // WON ADD 修正gp宠会落马术 if( ID1 == 1133){ int j; for( j=0; j<CHAR_MAXPETSKILLHAVE; j++){ if( CHAR_getPetSkill( petindex, j) == 210 ){ // 落马术 CHAR_setPetSkill( petindex, j, -1); } } }#endif } } } { int i;// char *petstring;//ttom// char *c_ptr_index;// char c_temp[4096];// char c_temp1[4096]; int ID1;// int tran_no; BOOL b_find=FALSE; //ttom for( i = 0; i < CHAR_MAXPOOLPETHAVE; i ++ ) { int petindex = CHAR_getCharPoolPet(charaindex,i); if( CHAR_CHECKINDEX( petindex) ) {#ifdef _UNIQUE_P_I // CoolFish: 2001/10/11 Set Pet Unicode CHAR_setPetUniCode(petindex);#endif#ifdef _NEWOPEN_MAXEXP if( CHAR_getInt( petindex, CHAR_OLDEXP) > 0 || CHAR_getInt( charaindex, CHAR_OLDEXP) < 0 ){ CHAR_ChangeExp( petindex); }#endif b_find=FALSE; ID1=CHAR_getInt( petindex, CHAR_PETID);#ifdef _REEDIT_PETBBIS if( ID1 == 1133 ){ CHAR_setInt( petindex, CHAR_BASEIMAGENUMBER, 101578); CHAR_setInt( petindex, CHAR_BASEBASEIMAGENUMBER, 101578); }#endif/* tran_no=CHAR_getInt( charaindex, CHAR_TRANSMIGRATION); petstring = CHAR_makePetStringFromPetIndex( petindex); c_ptr_index=strstr(petstring,"name:"); getStringFromIndexWithDelim(c_ptr_index,":",2,c_temp,sizeof(c_temp)); c_ptr_index=c_temp; getStringFromIndexWithDelim(c_ptr_index,"|",1,c_temp1,sizeof(c_temp1)); if(b_find){//ttom CHAR_setCharPoolPet( charaindex, i, -1); print("\nKill pool pet ID=%d name=%s",ID1,c_temp1); sprintf(c_temp2,"Kill pool pet ID=%d name=%s",ID1,c_temp1); LogKill(CHAR_getChar( charaindex, CHAR_NAME ), CHAR_getChar( charaindex, CHAR_CDKEY ), c_temp2); }else{//ttom*/ CHAR_setWorkInt( petindex, CHAR_WORKPLAYERINDEX, charaindex); CHAR_complianceParameter( petindex ); // }//ttom } } } CHAR_loginCheckUserItem( charaindex); CHAR_complianceParameter( charaindex );#ifdef _PROFESSION_FIX_LEVEL // WON ADD 修正职业经验值 { int i=0; for( i = 0 ; i < CHAR_SKILLMAXHAVE ; i ++ ){ CHAR_HaveSkill* hskill; hskill = CHAR_getCharHaveSkill( charaindex, i ); if( hskill != NULL && hskill->use == TRUE ){ int skill_level = SKILL_getInt( &hskill->skill, SKILL_LEVEL); if( skill_level < 10 ){ SKILL_setInt( &hskill->skill, SKILL_LEVEL, 10* 100 ); } } } }#endif#ifdef _PETSKILL_BECOMEPIG if( CHAR_getInt( charaindex, CHAR_BECOMEPIG) > -1 ){ CHAR_setInt( charaindex, CHAR_BASEIMAGENUMBER, CHAR_getInt( charaindex, CHAR_BECOMEPIG_BBI ) ); } //change fix 处理负很大的乌力时间 else{ CHAR_setInt( charaindex, CHAR_BECOMEPIG, -1 ); }#endif lssproto_CharLogin_send( clifd, SUCCESSFUL,"" ); per = ENCOUNT_getEncountPercentMin( charaindex, CHAR_getInt( charaindex, CHAR_FLOOR), CHAR_getInt( charaindex, CHAR_X), CHAR_getInt( charaindex, CHAR_Y)); if( per != -1) { CHAR_setWorkInt( charaindex, CHAR_WORKENCOUNTPROBABILITY_MIN, per); } per = ENCOUNT_getEncountPercentMax( charaindex, CHAR_getInt( charaindex, CHAR_FLOOR), CHAR_getInt( charaindex, CHAR_X), CHAR_getInt( charaindex, CHAR_Y)); if( per != -1) { CHAR_setWorkInt( charaindex, CHAR_WORKENCOUNTPROBABILITY_MAX, per); } CHAR_setLuck( charaindex); { int i; char* statuscat[]={"C","P","I","S","D","E","F"}; for( i=0 ; i<arraysizeof(statuscat) ; i++ ) CHAR_sendStatusString( charaindex, statuscat[i] ); } { int i; char category[3]; for( i = 0; i < CHAR_MAXPETHAVE; i ++ ) { snprintf( category, sizeof( category), "K%d",i); CHAR_sendStatusString( charaindex, category ); snprintf( category, sizeof( category), "W%d",i); CHAR_sendStatusString( charaindex, category ); } } { int petarray = CHAR_getInt( charaindex, CHAR_DEFAULTPET); if( CHAR_CHECKPETINDEX( petarray)) { if( !CHAR_CHECKINDEX( CHAR_getCharPet( charaindex, petarray))) { petarray = -1; } }else { petarray = -1; } lssproto_KS_send( clifd, petarray, TRUE); } { int flg = 0; CHAR_setFlg( charaindex, CHAR_ISSHOWBATTLEMSG, 0); CHAR_setFlg( charaindex, CHAR_ISDUEL, 0); CHAR_setFlg( charaindex, CHAR_ISTRADECARD, 0); if( CHAR_getFlg( charaindex, CHAR_ISPARTY)) flg |= CHAR_FS_PARTY; if( CHAR_getFlg( charaindex, CHAR_ISDUEL)) flg |= CHAR_FS_DUEL; if( CHAR_getFlg( charaindex, CHAR_ISPARTYCHAT)) flg |= CHAR_FS_PARTYCHAT; if( CHAR_getFlg( charaindex, CHAR_ISTRADECARD)) flg |= CHAR_FS_TRADECARD; // CoolFish: 2001/4/18 CHAR_setFlg( charaindex, CHAR_ISTRADE, 0); lssproto_FS_send( clifd, flg); } MAP_sendArroundCharNeedFD( clifd, charaindex ); CHAR_setInt( charaindex, CHAR_LOGINCOUNT, CHAR_getInt( charaindex, CHAR_LOGINCOUNT) + 1 ); CHAR_sendCToArroundCharacter( objindex ); CHAR_sendArroundCharaData( charaindex ); CHAR_sendWatchEvent(objindex,CHAR_ACTSTAND,NULL,0,TRUE); ADDRESSBOOK_notifyLoginLogout(charaindex,1); CHAR_setWorkInt(charaindex,CHAR_WORKLASTATTACKCHARAINDEX,-1); if(CHAR_getInt(charaindex,CHAR_HP) <= 0 ){ typedef int (*DYINGFUNC)(int); DYINGFUNC dyingfunc=NULL; dyingfunc = (DYINGFUNC)CHAR_getFunctionPointer(charaindex, CHAR_DYINGFUNC ); CHAR_setInt(charaindex,CHAR_HP,1); // HP 设为 1 logHack( CHAR_getWorkInt(charaindex,CHAR_WORKFD), HACK_HP); } if( CHAR_getInt( charaindex,CHAR_SKILLUPPOINT ) >=1 ) CHAR_Skillupsend(charaindex); CHAR_checkEffect( charaindex); // CoolFish: Family 2001/5/30 if ((CHAR_getChar(charaindex, CHAR_FMNAME)!=NULL) && (CHAR_getInt(charaindex, CHAR_FMINDEX) >= 0) && (strcmp(CHAR_getChar(charaindex, CHAR_FMNAME), "") != 0)) {#ifdef _FMVER21 int eventflag = 0; // 是否符合族长得资格 if (CheckLeaderQ(charaindex) >= 0)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -