?? item_gen.c
字號:
sprintf( buf1, "合成料理等級:%d,增加績分:%d,總共績分:%d。", cTableLevel, adScore, Myscore+adScore); CHAR_setInt( charaindex, CHAR_ABULLSCORE, Myscore+adScore); }else{ sprintf( buf1, "合成料理等級:%d,需等級6以上才加分。", cTableLevel); } CHAR_talkToCli( charaindex, -1, buf1, CHAR_COLORYELLOW); } #endif */ return created; } } return items[RAND( 0, (num-1))].data[ITEM_ID]; } return -3;}int ITEM_canDigest( ITEM_Item *itm ){ /* 1蜊 及箋 及 蟆互澀爛今木化中兇日1} 公丹匹卅中卅日0 */ if( itm->string[ITEM_INGNAME0].string[0] ) return 1; else return 0;}int ITEM_merge_test(void){ int iid,i,k; ITEM_Item itm[1]; for( k = 0 ; k < 10 ; k ++ ){ iid = 1; for( i = 0 ; i < 20 ; i ++ ){ ITEM_makeItem( &itm[0] , iid ); print( "%d RETURN: %d\n", i, // shan iid = ITEM_mergeItem( -1, itm, 1 , 0, -1,0,-1,0) ); } print( "------\n" ); } return 0;}int ITEM_mergeItem_merge( int charaindex, int petid, char *data, int petindex, int alchemist){ BOOL result = FALSE; int i; int ret; int cnt = 0; int itemindexs[CHAR_MAXITEMHAVE - CHAR_STARTITEMARRAY]; int haveitemindexs[CHAR_MAXITEMHAVE - CHAR_STARTITEMARRAY]; // Nuke +2 1026: Avoid merge cheat int itemflag[CHAR_MAXITEMHAVE - CHAR_STARTITEMARRAY]; int j,collision=0; char buff[64]; ITEM_Item items[CHAR_MAXITEMHAVE - CHAR_STARTITEMARRAY]; // Nuke +1 1026 memset(itemflag,0,sizeof(itemflag)); { int emptyindex = CHAR_findEmptyItemBox( charaindex ); if( emptyindex == -1 ){ CHAR_talkToCli( charaindex, -1, "合成時,最少需空一格物品欄位!", CHAR_COLORYELLOW); return -1; } } for( i = CHAR_STARTITEMARRAY; i < CHAR_MAXITEMHAVE; i ++ ) { int haveitemindex; ret = getStringFromIndexWithDelim( data , "|", i - CHAR_STARTITEMARRAY+1, buff, sizeof( buff ) ); if( ret == FALSE ) break; haveitemindex = atoi( buff); if( CHAR_CHECKITEMINDEX( charaindex, haveitemindex) ) { int itemindex = CHAR_getItemIndex( charaindex, haveitemindex); if( ITEM_CHECKINDEX( itemindex)) {#ifdef _ITEM_INSLAY char *code; if( (code = ITEM_getChar( itemindex, ITEM_TYPECODE)) == NULL ) { if( strcmp( code, "\0") ) { char token[256]; snprintf( token, sizeof( token), "似乎對%s沒有興趣。", ITEM_getChar( itemindex, ITEM_NAME)); CHAR_talkToCli( charaindex, -1, token, CHAR_COLORYELLOW); return FALSE; } }#endif if( ITEM_getmergeItemFromFromITEMtabl( ITEM_getInt( itemindex, ITEM_ID)) == TRUE ){ //檢查是否可合成 ITEM_Item *itm; itm = ITEM_getItemPointer(itemindex); if( itm != NULL ) { ITEM_makeItem( &items[cnt], ITEM_getInt( itemindex, ITEM_ID)); itemindexs[cnt] = itemindex; haveitemindexs[cnt] = haveitemindex; // Nuke start 1026 for (j=0;j<cnt;j++) if (itemflag[j] == itemindex) { print("\nMerge Collision!!!"); collision=1; } itemflag[cnt] = itemindex; // Nuke end cnt++; } }else { char msgbuf[128]; snprintf( msgbuf, sizeof( msgbuf), "似乎對%s沒有興趣。", ITEM_getChar( itemindex, ITEM_NAME)); CHAR_talkToCli( charaindex, -1, msgbuf, CHAR_COLORWHITE); } } } } // Nuke start 1026 if (collision) { return FALSE; } // Nuke end if( cnt > 1 ) { int randtable = 0; if( items[0].data[ITEM_TYPE] == ITEM_DISH ) { randtable = 1; } ret = ITEM_mergeItem( charaindex, items, cnt, 0, petid, randtable, petindex, alchemist); if( ret == -10) CHAR_talkToCli( charaindex, -1, "非法的合成方法", CHAR_COLORWHITE); CHAR_setInt( charaindex, CHAR_MERGEITEMCOUNT, CHAR_getInt( charaindex, CHAR_MERGEITEMCOUNT)+1); for( i = 0; i < cnt; i ++ ) {#ifdef _ITEM_PILENUMS int pilenum=0; int itemindex = CHAR_getItemIndex( charaindex, haveitemindexs[i]); if( !ITEM_CHECKINDEX( itemindex) ) continue; pilenum = ITEM_getInt( itemindex, ITEM_USEPILENUMS); pilenum -= 1; ITEM_setInt( itemindex, ITEM_USEPILENUMS, pilenum); if( pilenum <= 0 ){#endif CHAR_setItemIndex( charaindex, haveitemindexs[i], -1); LogItem( CHAR_getChar( charaindex, CHAR_NAME ), /* 平乓仿 */ CHAR_getChar( charaindex, CHAR_CDKEY ),#ifdef _add_item_log_name // WON ADD 在item的log中增加item名稱 itemindexs[i],#else ITEM_getInt( itemindexs[i], ITEM_ID), /* 失奶 丞 寞 */#endif "mergedel(合成所刪除的道具)", CHAR_getInt( charaindex,CHAR_FLOOR), CHAR_getInt( charaindex,CHAR_X ), CHAR_getInt( charaindex,CHAR_Y ), ITEM_getChar( itemindexs[i], ITEM_UNIQUECODE), ITEM_getChar( itemindexs[i], ITEM_NAME), ITEM_getInt( itemindexs[i], ITEM_ID) ); ITEM_endExistItemsOne( itemindexs[i]); #ifdef _ITEM_PILENUMS }#endif } CHAR_sendItemData( charaindex, haveitemindexs, cnt); if( ret >= 0 ) { int rc; int createitemindex = ITEM_makeItemAndRegist( ret);#ifdef _MERGE_LOG print("\n merge[ret:%d]", ret); print("\n merge[createitemindex:%d]", createitemindex);#endif // shan begin if( createitemindex != -1 ){ if( petindex != -1){ if( CHAR_getInt(petindex, CHAR_PETFAMILY) == 1 ){ int ownerindex = CHAR_getWorkInt(petindex, CHAR_WORKPLAYERINDEX); if (!CHAR_CHECKINDEX(ownerindex)){ print("ownerindex err!\n"); return -1; }#ifdef _FMVER21 if( CHAR_getInt( ownerindex, CHAR_FMLEADERFLAG) != FMMEMBER_LEADER){#else if( CHAR_getInt( ownerindex, CHAR_FMLEADERFLAG) != 1){#endif print("\n Pet Ownerindex Error"); return -1; } if( randtable == 1){ char *p; char charbuf1[512]="",charbuf2[1024]="",charbuf[128]=""; char argbuf[256]; int arg1 = 0, arg2 = 0; if( ITEM_getInt( createitemindex, ITEM_TYPE) == 20){ if( (p = strstr( ITEM_getChar(createitemindex, ITEM_ARGUMENT), "氣")) ){ strcpy( argbuf, (p+2)); arg1 = atoi(argbuf); arg1 = arg1 * FOOD_MP_RATE / 100; } if( (p = strstr( ITEM_getChar(createitemindex, ITEM_ARGUMENT), "體")) ){ strcpy( argbuf, (p+2)); arg2 = atoi(argbuf); arg2 = arg2 * FOOD_HP_RATE / 100; } if( arg1 != 0 && arg2 != 0 ){ sprintf( charbuf1, "氣%d體%d", arg1, arg2); } else if( arg1 != 0){ sprintf( charbuf1, "氣%d", arg1); } else if( arg2 != 0){ sprintf( charbuf1, "體%d", arg2); } sprintf( charbuf, "(家族料理)"); strcpy( charbuf2, ITEM_getChar( createitemindex, ITEM_EFFECTSTRING)); strncat( charbuf2, charbuf, 10); ITEM_setChar( createitemindex, ITEM_ARGUMENT, charbuf1); ITEM_setChar( createitemindex, ITEM_EFFECTSTRING, charbuf2); } } } } } // shan end ITEM_setInt( createitemindex, ITEM_MERGEFLG, TRUE); if( createitemindex != -1 ) { rc = CHAR_addItemSpecificItemIndex( charaindex, createitemindex); if( rc >= 0 && rc < CHAR_MAXITEMHAVE) { CHAR_sendItemDataOne( charaindex, rc); LogItem( CHAR_getChar( charaindex, CHAR_NAME ), CHAR_getChar( charaindex, CHAR_CDKEY ),#ifdef _add_item_log_name // WON ADD 在item的log中增加item名稱 createitemindex,#else ITEM_getInt( createitemindex, ITEM_ID),#endif "mergeadd(合成出來的道具)", CHAR_getInt( charaindex,CHAR_FLOOR), CHAR_getInt( charaindex,CHAR_X ), CHAR_getInt( charaindex,CHAR_Y ), ITEM_getChar( createitemindex, ITEM_UNIQUECODE), ITEM_getChar( createitemindex, ITEM_NAME), ITEM_getInt( createitemindex, ITEM_ID) ); result = TRUE; } else { ITEM_endExistItemsOne( createitemindex); } } } } return result;}static int ITEM_getTableNum( int num){ int i; for( i = 0; i < arraysizeof( ItemRandTableForItem); i ++) { if( num <= ItemRandTableForItem[i].maxnum ) { break; } } if( i == arraysizeof( ItemRandTableForItem)) i--; return i;}#ifdef _ITEM_INSLAYint PETSKILL_ITEM_inslay( int charindex, int inslayindex, int itemindex){ char *inslaystr , *code; char buf1[256], buf2[256]; char codeTemp[][32]={ "NULL", "NULL", "NULL"}; char TypeName[][256]={ "攻", "防", "敏", "HP", "MP", "幸運", "傷", "吸", "魔法ID" }; int worktyp[] = { ITEM_MODIFYATTACK, ITEM_MODIFYDEFENCE, ITEM_MODIFYQUICK, ITEM_MODIFYHP, ITEM_MODIFYMP, ITEM_MODIFYLUCK, ITEM_OTHERDAMAGE, ITEM_OTHERDEFC, ITEM_MAGICID }; int worknum[ arraysizeof(worktyp)]; int i;#define MAXCANINSLAY 3 memset( worknum, 0, sizeof( worknum)); if( !CHAR_CHECKINDEX( charindex) ) return FALSE; if( !ITEM_CHECKINDEX( inslayindex) ) return FALSE; if( !ITEM_CHECKINDEX( itemindex) ) return FALSE; if( itemindex == inslayindex ) return FALSE; if( (code = ITEM_getChar( itemindex, ITEM_TYPECODE)) == NULL ) { print(" ITEM_TYPECODE == NULL error !!\n"); return FALSE; } if( !strcmp( code, "\0") || !strcmp( code, "NULL" ) ) return FALSE; if( (inslaystr = ITEM_getChar( inslayindex, ITEM_INLAYCODE)) == NULL ) { print(" ITEM_INLAYCODE == NULL error !!\n"); return FALSE; } for( i = 0; i < MAXCANINSLAY; i ++ ) { if( getStringFromIndexWithDelim( inslaystr , "|", i+1, buf1, sizeof( buf1 ) ) == TRUE ){ if( strcmp( buf1, "\0")){ sprintf( codeTemp[i], "%s", buf1); } continue; } break; } for( i = 0; i < MAXCANINSLAY; i ++ ) { if( strcmp( codeTemp[i], "NULL") ) continue; sprintf( codeTemp[i], "%s", code); break; } if( i == MAXCANINSLAY ) { CHAR_talkToCli( charindex, -1, "武器或防具已經(jīng)鑲滿了。", CHAR_COLORYELLOW); return FALSE; } memset( buf2, 0, sizeof( buf2)); sprintf( buf2, "%s|%s|%s", codeTemp[0], codeTemp[1], codeTemp[2]); print("buf2:%s\n", buf2); ITEM_setChar( inslayindex, ITEM_INLAYCODE, buf2); for( i=0; i<arraysizeof( worktyp)-1; i++) { int pwork1, pwork2; pwork1 = ITEM_getInt( inslayindex, worktyp[i]); pwork2 = ITEM_getInt( itemindex, worktyp[i]); ITEM_setInt( inslayindex, worktyp[i], pwork1+pwork2 ); worknum[i] = pwork1+pwork2; } { char secretname[256], Mname[256]; char *funstr;//ITEM_MAGICID char *magicname; if( ITEM_getInt( itemindex, ITEM_MAGICID) > 0 ) { //魔法 ID int magicid,mp; magicid = ITEM_getInt( itemindex, ITEM_MAGICID); ITEM_setInt( inslayindex, ITEM_MAGICID, magicid); mp = ITEM_getInt( itemindex, ITEM_MAGICUSEMP ); ITEM_setInt( inslayindex, ITEM_MAGICUSEMP, mp); } for( i=ITEM_FIRSTFUNCTION; i<ITEM_LASTFUNCTION; i++) { //function ITEM_setChar( inslayindex, i, "\0"); if( (funstr = ITEM_getChar( itemindex, i)) != NULL ) { ITEM_setChar( inslayindex, i, funstr); } } if( (funstr = ITEM_getChar( itemindex, ITEM_ARGUMENT)) != NULL ) { //參數(shù) ITEM_setChar( inslayindex, ITEM_ARGUMENT, "\0"); ITEM_setChar( inslayindex, ITEM_ARGUMENT, funstr); } memset( Mname, 0, sizeof( Mname)); if( ITEM_getInt( inslayindex, ITEM_MAGICID) > 0 ) { //取得魔法名稱 int marray = MAGIC_getMagicArray( ITEM_getInt( inslayindex, ITEM_MAGICID)); if( marray != -1 ){ if( (magicname = MAGIC_getChar( marray, MAGIC_NAME)) != NULL ){ sprintf( Mname, "%s", magicname); } } ITEM_setInt( inslayindex, ITEM_MAGICID, ITEM_getInt( inslayindex, ITEM_MAGICID)); } sprintf( secretname, "%s%s%d %s%s%d %s%s%d %s%s%d %s%s%d %s%s%d %s%s%d %s", TypeName[0],(worknum[0]>=0)?"+":"",worknum[0], TypeName[1],(worknum[1]>=0)?"+":"",worknum[1], TypeName[2],(worknum[2]>=0)?"+":"",worknum[2], TypeName[3],(worknum[3]>=0)?"+":"",worknum[3], TypeName[4],(worknum[4]>=0)?"+":"",worknum[4], TypeName[6],(worknum[6]>=0)?"+":"",worknum[6], TypeName[7],(worknum[7]>=0)?"+":"",worknum[7], Mname); ITEM_setChar( inslayindex, ITEM_EFFECTSTRING, secretname); } return TRUE;}#endif#ifdef _PETSKILL_FIXITEMint PETSKILL_ITEM_FixItem( int charindex, int fixindex, int *itemindex){ int index, i; char *buf2; int crushes, maxcrushes;#define MAXFIXNUM 2 index = 0; for( i=0; i<MAXFIXNUM; i++) { if( fixindex != itemindex[i] ) { index = itemindex[i]; break; } } if( i == MAXFIXNUM ){ print("PETSKILL_ITEM_FixItem error !!\n"); return FALSE; } if( (buf2 = ITEM_getChar( index, ITEM_INGNAME0) ) == NULL ) return FALSE; for( i=0; i<5; i++ ) {//ITEM_INGVALUE0 char *buf1; if( (buf1 = ITEM_getChar( fixindex, ITEM_INGNAME0+i) ) == NULL ) continue; if( !strcmp( buf2,"") || !strcmp( buf1,"")) continue; if( !strcmp( buf1, buf2) ) { break; } } if( i >= 5 ){#ifdef _ITEM_FIXALLBASE char *ITEM_ARG = ITEM_getChar( index, ITEM_ARGUMENT); if( ITEM_ARG != NULL && !strcmp( ITEM_ARG, "FIXITEMALL") ){ }else{#endif CHAR_talkToCli( charindex, -1, "材料不符", CHAR_COLORYELLOW); return FALSE;#ifdef _ITEM_FIXALLBASE }#endif } crushes = ITEM_getInt( fixindex, ITEM_DAMAGECRUSHE); maxcrushes = ITEM_getInt( fixindex, ITEM_MAXDAMAGECRUSHE); if( crushes >= (maxcrushes*0.80) ) { char buff[256]; sprintf( buff, "%s并沒有損壞到需要修復。", ITEM_getChar( fixindex, ITEM_NAME)); CHAR_talkToCli( charindex, -1, buff, CHAR_COLORYELLOW); return FALSE; }else { char *buf1; if( maxcrushes < 500 ){ CHAR_talkToCli( charindex, -1, "此物品已不能修復", CHAR_COLORYELLOW); return FALSE; } if( crushes <= 0 ) return FALSE; maxcrushes = maxcrushes*0.85; crushes = maxcrushes; ITEM_setInt( fixindex, ITEM_DAMAGECRUSHE, crushes); ITEM_setInt( fixindex, ITEM_MAXDAMAGECRUSHE, maxcrushes); //修正名稱 buf1 = ITEM_getChar( fixindex, ITEM_SECRETNAME); if( strstr( buf1, "(") != 0 ) { char buf5[256]; if( getStringFromIndexWithDelim( buf1,"(",1, buf5, sizeof( buf5)) != FALSE ) { sprintf( buf1, buf5); } } ITEM_setChar( fixindex, ITEM_SECRETNAME, buf1); ITEM_setInt( fixindex, ITEM_CRUSHLEVEL, 0); } return TRUE;}#endif
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -