📄 复件 char.c
字号:
"core_Dying", /* CHAR_DYINGFUNC */ "core_PlayerTalked",/* CHAR_TALKEDFUNC */ "", /* CHAR_PREATTACKEDFUNC */ "", /* CHAR_POSTATTACKEDFUNC */ "", /* CHAR_OFFFUNC */ "", /* CHAR_LOOKEDFUNC */ "", /* CHAR_ITEMPUTFUNC */ "", /* CHAR_SPECIALTALKEDFUNC */ "", /* CHAR_WINDOWTALKEDFUNC */#ifdef _USER_CHARLOOPS "", // CHAR_LOOPFUNCTEMP1, "", // CHAR_LOOPFUNCTEMP2, "", //CHAR_BATTLEPROPERTY,#endif }; for( i = 0; i < CHAR_FUNCTABLENUM; i ++ ) { strcpysafe( ch->charfunctable[i].string, sizeof( ch->charfunctable[i]), tmp[i]); }}void CHAR_loginAddItem( int charaindex ){/* int emptyindex, itemindex, id; int itemID[10]={ 20128, 20130, 20171, 20176, 20296, 20287, 20288, 20289, 20290, 20291}; { int trn_num=0; trn_num=CHAR_getInt(charaindex,CHAR_TRANSMIGRATION); CHAR_setInt( charaindex, CHAR_MAXPOOLITEMHAVELIMIT, 10 + (trn_num * 4) ) ; CHAR_setInt( charaindex, CHAR_MAXPOOLPETHAVELIMIT , 5 + (trn_num * 2) ); } while( 1){ emptyindex = CHAR_findEmptyItemBox( charaindex ); if( emptyindex == -1 ) break; id = rand()%10; itemindex = ITEM_makeItemAndRegist( itemID[id] ); if( !ITEM_CHECKINDEX( itemindex) ) break; CHAR_setItemIndex( charaindex, emptyindex, itemindex); ITEM_setWorkInt( itemindex, ITEM_WORKCHARAINDEX, charaindex); ITEM_setWorkInt( itemindex, ITEM_WORKOBJINDEX, -1); //andy_log print("@:%d.", emptyindex); } while( 1){ emptyindex = CHAR_findEmptyPoolItemBox( charaindex ); if( emptyindex == -1 ) break; id = rand()%10; itemindex = ITEM_makeItemAndRegist( itemID[id] ); if( !ITEM_CHECKINDEX( itemindex) ) break; CHAR_setPoolItemIndex( charaindex, emptyindex, itemindex); ITEM_setWorkInt( itemindex, ITEM_WORKCHARAINDEX, charaindex); ITEM_setWorkInt( itemindex, ITEM_WORKOBJINDEX, -1); //andy_log print("&:%d.", emptyindex); }*/}void CHAR_loginCheckUserItem( int charaindex){ typedef void (*ATTACHFUNC)(int,int); int i, itemindex; for( i=0; i<CHAR_STARTITEMARRAY; i++){ //检查装备中道具 int ti; itemindex = CHAR_getItemIndex( charaindex , i ); if( !ITEM_CHECKINDEX( itemindex)){ continue; } ITEM_setItemUniCode( itemindex); if( (i == ITEM_getEquipPlace( charaindex, itemindex )) || i == CHAR_DECORATION1 || i == CHAR_DECORATION2 ){ char category[256]; ATTACHFUNC atf; atf=(ATTACHFUNC)ITEM_getFunctionPointer(itemindex,ITEM_ATTACHFUNC); if( atf ) atf( charaindex, itemindex ); if( ITEM_canuseMagic( itemindex)) { snprintf( category, sizeof( category), "J%d",i); CHAR_sendStatusString( charaindex, category ); } }else{ if( (ti = CHAR_findEmptyItemBox( charaindex )) == -1 ) continue; CHAR_setItemIndex( charaindex , i, -1); CHAR_setItemIndex( charaindex , ti, itemindex); } } for( i = CHAR_STARTITEMARRAY ; i < CHAR_MAXITEMHAVE ; i++ ){ //检查携带道具 itemindex = CHAR_getItemIndex( charaindex , i ); if( !ITEM_CHECKINDEX( itemindex)) continue; ITEM_setItemUniCode( itemindex); } //检查寄放店道具 for( i = 0 ; i < CHAR_MAXPOOLITEMHAVE ; i++ ){ itemindex = CHAR_getPoolItemIndex( charaindex , i ); if( !ITEM_CHECKINDEX( itemindex) ) continue; ITEM_setItemUniCode( itemindex); } // WON ADD 修正道具的设定问题 if(!NPC_EventCheckFlg( charaindex,134)){ for (i = 0; i < CHAR_MAXITEMHAVE; i ++) { itemindex = CHAR_getItemIndex(charaindex, i); fix_item_bug(charaindex, itemindex); } for (i = 0; i < CHAR_MAXPOOLITEMHAVE; i++) { itemindex = CHAR_getPoolItemIndex(charaindex, i); fix_item_bug(charaindex, itemindex); } NPC_EventSetFlg(charaindex, 134); }}void CHAR_LoginBesideSetWorkInt( int charaindex, int clifd){ CHAR_setWorkInt( charaindex, CHAR_WORKPARTYMODE, CHAR_PARTY_NONE); CHAR_setWorkInt( charaindex, CHAR_WORKPARTYINDEX1, -1); CHAR_setWorkInt( charaindex, CHAR_WORKPARTYINDEX2, -1); CHAR_setWorkInt( charaindex, CHAR_WORKPARTYINDEX3, -1); CHAR_setWorkInt( charaindex, CHAR_WORKPARTYINDEX4, -1); CHAR_setWorkInt( charaindex, CHAR_WORKPARTYINDEX5, -1); CHAR_setWorkInt( charaindex, CHAR_WORKTRADEMODE, CHAR_TRADE_FREE); CHAR_setWorkInt( charaindex, CHAR_WORKFMINDEXI, -1); CHAR_setWorkInt( charaindex, CHAR_WORKFMCHANNEL, -1); CHAR_setWorkInt( charaindex, CHAR_WORKFMCHANNELQUICK, -1); CHAR_setWorkInt( charaindex, CHAR_WORKFMFLOOR, -1); CHAR_setWorkInt( charaindex, CHAR_WORKFMDP, 0); CHAR_setWorkInt( charaindex, CHAR_WORKFMPKFLAG, -1); CHAR_setWorkInt( charaindex, CHAR_WORKFMSETUPFLAG, -1); CHAR_setWorkInt( charaindex, CHAR_WORKFMMANINDEX, -1); CHAR_setWorkInt( charaindex, CHAR_WORKFMCHARINDEX, -1); CHAR_setWorkInt( charaindex, CHAR_WORKBATTLEFLAG, -1); CHAR_setWorkInt( charaindex, CHAR_WORK_PET0_STAT, 0); CHAR_setWorkInt( charaindex, CHAR_WORK_PET1_STAT, 0); CHAR_setWorkInt( charaindex, CHAR_WORK_PET2_STAT, 0); CHAR_setWorkInt( charaindex, CHAR_WORK_PET3_STAT, 0); CHAR_setWorkInt( charaindex, CHAR_WORK_PET4_STAT, 0); CHAR_setWorkInt( charaindex, CHAR_WORKACTION, -1); CHAR_setWorkInt( charaindex, CHAR_WORKEFFECT, -1); CHAR_setWorkInt( charaindex, CHAR_WORKFD, clifd); if( CHAR_getInt( charaindex, CHAR_SILENT) > 100000000 ) CHAR_setInt( charaindex, CHAR_SILENT, 0); CHAR_setWorkInt( charaindex, CHAR_WORKLOGINTIME, (int)NowTime.tv_sec); CHAR_setWorkInt( charaindex, CHAR_WORKTALKCOUNT, 0 ); CHAR_setWorkInt( charaindex, CHAR_WORKTALKTIME, (int)NowTime.tv_sec); CHAR_setWorkInt( charaindex, CHAR_WORKPETFOLLOW, -1);#ifdef _ITEM_ADDEXP //vincent 经验提升 CHAR_setWorkInt(charaindex,CHAR_WORKITEM_ADDEXP, 0); CHAR_setWorkInt(charaindex,CHAR_WORKITEM_ADDEXPTIME, 0);#endif#ifdef _NEWOPEN_MAXEXP if( CHAR_getInt( charaindex, CHAR_OLDEXP) > 0 || CHAR_getInt( charaindex, CHAR_OLDEXP) < 0 ){ CHAR_ChangeExp( charaindex); }#endif#ifdef _PETSKILL_BECOMEFOX CHAR_setWorkInt( charaindex, CHAR_WORKFOXROUND, -1 );#endif#ifdef _MAP_TIME CHAR_setWorkInt(charaindex,CHAR_WORK_MAP_TIME,0); #endif#ifdef _ITEM_ADDEXP2 CHAR_setWorkInt( charaindex, CHAR_WORKITEM_ADDEXP, CHAR_getInt( charaindex, CHAR_ADDEXPPOWER) ); CHAR_setWorkInt( charaindex, CHAR_WORKITEM_ADDEXPTIME , CHAR_getInt( charaindex, CHAR_ADDEXPTIME) );#endif}BOOL CHAR_CheckProfessionEquit( int toindex){ int i, j, itemindex, newindex; int FixItem[16]={ 2028,2029,2030,2031,2032,2033,2034,2035, 2036,2037,2038,2039,2040,2041,2042,2043 }; CHAR_HaveSkill *pSkil; if(!NPC_EventCheckFlg( toindex, 149)){ for (i = 0; i < CHAR_MAXITEMHAVE; i ++) { itemindex = CHAR_getItemIndex( toindex, i); if( !ITEM_CHECKINDEX( itemindex)) continue; for( j=0; j<16; j++){ if( ITEM_getInt( itemindex, ITEM_ID) == FixItem[j] ){ CHAR_setItemIndex( toindex, i, -1 ); ITEM_endExistItemsOne( itemindex); newindex = ITEM_makeItemAndRegist( FixItem[j]); if( !ITEM_CHECKINDEX( newindex) ) break; CHAR_setItemIndex( toindex , i, newindex); ITEM_setWorkInt( itemindex, ITEM_WORKCHARAINDEX, toindex); ITEM_setWorkInt( itemindex, ITEM_WORKOBJINDEX, -1); CHAR_sendItemDataOne( toindex, i); } } } for (i = 0; i < CHAR_MAXPOOLITEMHAVE; i++){ int itemindex = CHAR_getPoolItemIndex(toindex, i); if( !ITEM_CHECKINDEX( itemindex)) continue; for( j=0; j<16; j++){ if( ITEM_getInt( itemindex, ITEM_ID) == FixItem[j] ){ CHAR_setPoolItemIndex( toindex, i, -1); ITEM_endExistItemsOne( itemindex); newindex = ITEM_makeItemAndRegist( FixItem[j]); if( !ITEM_CHECKINDEX( newindex) ) break; CHAR_setPoolItemIndex( toindex , i, newindex); ITEM_setWorkInt( itemindex, ITEM_WORKCHARAINDEX, toindex); ITEM_setWorkInt( itemindex, ITEM_WORKOBJINDEX, -1); } } } NPC_EventSetFlg( toindex, 149); } if( NPC_EventCheckFlg( toindex, 156) ) return TRUE; NPC_EventSetFlg( toindex, 156); return TRUE;}static void CHAR_setLuck( int charaindex);void CHAR_login( int clifd, char* data, int saveindex ){ int charaindex,objindex; Char ch; int per;// char c_temp2[4096]; if( CHAR_makeCharFromStringToArg( data , &ch ) == FALSE ){ fprint ("制作人物错误!\n"); goto MAKECHARDATAERROR; } CHAR_setCharFuncTable( &ch); charaindex = CHAR_initCharOneArray( &ch ); if( charaindex == -1 ){ fprint ("制作人物错误!\n"); CHAR_endCharData(&ch); goto MAKECHARDATAERROR; }#ifdef _NEWSAVE CHAR_setInt( charaindex, CHAR_SAVEINDEXNUMBER, saveindex); print("存档装载索引:%d\n", CHAR_getInt( charaindex, CHAR_SAVEINDEXNUMBER) );#endif char cdkey[16]; CONNECT_getCdkey( clifd, cdkey, sizeof( cdkey )); if(strcmp(cdkey,CHAR_getChar( charaindex, CHAR_CDKEY))!=0){// print( "修正人物账号%s=>%s\n",CHAR_getChar( charaindex, CHAR_CDKEY),cdkey);// CHAR_setChar( charaindex, CHAR_CDKEY, cdkey); print( "账号%s与档案人物账号%s不相同",cdkey,CHAR_getChar( charaindex, CHAR_CDKEY)); goto DELETECHARDATA; } printf("\ncharaindex:%d\n",charaindex); if( CHAR_getFlg( charaindex, CHAR_ISDIE)){ print( "?data? ISDIE flg is standing.\n"); CHAR_setFlg( charaindex, CHAR_ISDIE, FALSE); }#ifndef _FIX_UNNECESSARY // Arminius 7.9 airplane logout if( CHAR_getWorkInt( charaindex, CHAR_WORKPARTYMODE) == CHAR_PARTY_CLIENT ) { int oyaindex = CHAR_getWorkInt( charaindex, CHAR_WORKPARTYINDEX1); if( CHAR_CHECKINDEX( oyaindex)) { if (CHAR_getInt( oyaindex, CHAR_WHICHTYPE ) == CHAR_TYPEBUS) { if ((CHAR_getInt( oyaindex, CHAR_BASEIMAGENUMBER) !=100355) && (CHAR_getInt( oyaindex, CHAR_BASEIMAGENUMBER) !=100461)) { if(CHAR_getWorkInt(oyaindex,CHAR_NPCWORKINT5)==1) { if( CHAR_getInt( charaindex, CHAR_LASTTALKELDER)>=0){ int fl,x,y; CHAR_getElderPosition( CHAR_getInt( charaindex, CHAR_LASTTALKELDER), &fl, &x, &y ); CHAR_setInt(charaindex,CHAR_FLOOR,fl); CHAR_setInt(charaindex,CHAR_X,x); CHAR_setInt(charaindex,CHAR_Y,y); } } } } } }#endif// Nuke 20040420: CHECK MAX POINT#if 1 { int lv,vi,str,tou,dx,skup,trn,teq,quest,level,total,max; float table[]={437,490,521,550,578,620,888}; //各转最高点数(减10) //float table[]={620,660,700,740,780,820}; //各转最高点数(减10) lv = CHAR_getInt(charaindex,CHAR_LV); vi = CHAR_getInt(charaindex,CHAR_VITAL); str = CHAR_getInt(charaindex,CHAR_STR); tou = CHAR_getInt(charaindex,CHAR_TOUGH); dx = CHAR_getInt(charaindex,CHAR_DEX); trn = CHAR_getInt(charaindex,CHAR_TRANSMIGRATION); teq = CHAR_getInt(charaindex,CHAR_TRANSEQUATION); skup = CHAR_getInt(charaindex,CHAR_SKILLUPPOINT); quest=(teq >> 16)& 0xFF; level=teq & 0xFFF; total=(vi+str+tou+dx)/100+skup;// max=(trn==0)?(lv-1)*3+20+10: // 0转447// (lv-1)*3+table[trn-1]/12.0+quest/4.0+(level-trn*85)/4.0+10+1+10+trn*10;/* print("升级点数:%d\n",(lv-1)*getSkup()); print("继承点术:%f\n",(table[trn-1]/12.0)); print("历史任务:%f\n",quest/4.0); print("历史等级:%f\n",(level-trn*85)/4.0); print("历史等级:%d/%d\n",level,trn*85); print("转前祝福:%d\n",getTransPoint(trn)); print("误差1点:%d\n",1); print("转後祝福:%d\n",getTransPoint(trn)); print("转生红利:%d\n",trn*10);*/#ifdef _REVLEVEL if (strcmp(getRevLevel(),"是")==0){ if(trn>=getChartrans()){ if(lv>getMaxLevel()){ lv=getMaxLevel(); print("[%s:%s]lv:%d->%d", CHAR_getChar(charaindex,CHAR_CDKEY), CHAR_getChar(charaindex,CHAR_NAME), CHAR_getInt(charaindex,CHAR_LV), getMaxLevel()); } }else if(lv>getYBLevel()){ lv=getYBLevel(); print("[%s:%s]lv:%d->%d", CHAR_getChar(charaindex,CHAR_CDKEY), CHAR_getChar(charaindex,CHAR_NAME), CHAR_getInt(charaindex,CHAR_LV), getMaxLevel()); } CHAR_setInt(charaindex,CHAR_LV,lv); }#endif float jxds=(level-trn*85)/4.0; if(jxds<0)jxds=0;#ifdef _SKILLUPPOINT_CF max=(trn==0)?getTransPoint(trn)+(lv-1)*getSkup()+20: getTransPoint(trn)+(lv-1)*getSkup()+table[trn-1]/12.0+quest/4.0+jxds+getTransPoint(trn)+ trn*10+1;#else max=(trn==0)?(lv-1)*3+20+10: // 0转447 (lv-1)*3+table[trn-1]/12.0+quest/4.0+(level-trn*85)/4.0+10+1+10+trn*10;#endif/* 1转以上=升级点数+继承点术+历史任务+历史等级+转前祝福+误差1点+转後祝福+转生红利 */// if (trn==6) max=max-20; /* 六转时没有转前祝福与转後祝福 */#ifdef _REVLEVEL if (total>max && strcmp(getPoint(),"否")==0)#else if (total>max )#endif { print("\n重调点数[%s:%s]:%d->%d ", CHAR_getChar(charaindex,CHAR_CDKEY), CHAR_getChar(charaindex,CHAR_NAME), total,max); CHAR_setInt(charaindex,CHAR_VITAL,1000); CHAR_setInt(charaindex,CHAR_STR,0); CHAR_setInt(charaindex,CHAR_TOUGH,0); CHAR_setInt(charaindex,CHAR_DEX,0); CHAR_setInt(charaindex,CHAR_SKILLUPPOINT,max-10); } // 补足六转点数不足之玩家/* if ((trn==6) && (total < max)) { print("\n补足点数[%s:%s]:%d->%d ", CHAR_getChar(charaindex,CHAR_CDKEY), CHAR_getChar(charaindex,CHAR_NAME), total,max); CHAR_setInt(charaindex,CHAR_SKILLUPPOINT, CHAR_getInt(charaindex,CHAR_SKILLUPPOINT)+(max-total)); }*/ }#endif { int EQ_BBI=-1, EQ_ARM=-1, EQ_NUM=-1, EQ_BI=-1, CH_BI=-1; CH_BI = CHAR_getInt( charaindex, CHAR_BASEIMAGENUMBER); EQ_BBI = CHAR_getInt( charaindex, CHAR_BASEBASEIMAGENUMBER); if(CH_BI != EQ_BBI){ EQ_ARM = CHAR_getItemIndex(charaindex,CHAR_ARM); EQ_NUM=ITEM_FIST; if ( ITEM_CHECKINDEX( EQ_ARM)) { EQ_NUM=ITEM_getInt(EQ_ARM,ITEM_TYPE); } EQ_BI=CHAR_getNewImagenumberFromEquip( EQ_BBI, EQ_NUM); if( CHAR_getInt( charaindex, CHAR_RIDEPET) == -1 ) { //非骑宠 if( EQ_BI != CH_BI ) { print("\n 非骑宠形象 %d [%d=>%d]", charaindex, CHAR_getInt( charaindex, CHAR_BASEIMAGENUMBER), EQ_BI ); CHAR_setInt( charaindex, CHAR_BASEIMAGENUMBER, EQ_BI); } } } } { int x,y; if( CHAR_isAppearPosition( CHAR_getInt( charaindex, CHAR_FLOOR),&x, &y )) { int flelder, xelder, yelder; CHAR_getElderPosition(CHAR_getInt(charaindex, CHAR_LASTTALKELDER), &flelder, &xelder, &yelder); CHAR_setInt(charaindex, CHAR_FLOOR, flelder); CHAR_setInt(charaindex, CHAR_X, xelder);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -