📄 item_gen.c
字号:
} }#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 ++ ) { CHAR_setItemIndex( charaindex, haveitemindexs[i], -1); CHAR_sendItemDataOne( charaindex, haveitemindexs[i]); 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]); } CHAR_sendItemData( charaindex, haveitemindexs, cnt); if( ret >= 0 ) { int rc; int createitemindex = ITEM_makeItemAndRegist( ret); // 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=NULL; 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)) == "\0" ) { print(" ITEM_TYPECODE == NULL error !!\n"); return FALSE; } if( !strcmp( code, "NULL" ) ) return FALSE; if( (inslaystr = ITEM_getChar( inslayindex, ITEM_INLAYCODE)) == "\0" ) { 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, "武器或防具已经镶满了。", 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 ) { //参数 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) ) == "\0" ) 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 != "\0" && !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 + -