📄 item.c
字号:
return ITEM_itemStatusStringBuffer;}char* ITEM_makeItemFalseString( void ){ strcpysafe( ITEM_itemStatusStringBuffer, sizeof( ITEM_itemStatusStringBuffer), "||||||||" ); return ITEM_itemStatusStringBuffer;}char* ITEM_makeItemFalseStringWithNum( int haveitemindex ){ snprintf( ITEM_itemStatusStringBuffer, sizeof( ITEM_itemStatusStringBuffer), "%d|||||||||", haveitemindex); return ITEM_itemStatusStringBuffer;}BOOL ITEM_makeItem( ITEM_Item* itm, int number ){ int i; if( ITEM_CHECKITEMTABLE(number) == FALSE ){ print(" Can't makeItem for itemid:%d!!\n", number); return FALSE; } memcpy( itm, &ITEM_tbl[ITEM_idx[number].index].itm , sizeof( ITEM_Item ) ); //new for( i=0 ; i<ITEM_DATAINTNUM ; i++ ){ int randomvalue; randomvalue = RAND(0,ITEM_tbl[ITEM_idx[number].index].randomdata[i]); //new itm->data[i] = ITEM_tbl[ITEM_idx[number].index].itm.data[i] + randomvalue; //new } itm->data[ITEM_LEAKLEVEL] = 1; return TRUE;}int ITEM_makeItemAndRegist( int number ){ ITEM_Item itm; memset( &itm, 0, sizeof( itm)); if( ITEM_makeItem( &itm, number ) == FALSE ) return -1; return ITEM_initExistItemsOne( &itm );}#define EQUIP_FIX_MAX 10000000void ITEM_equipEffect( int index ){ int i; int attribaccum[4] = { 0,0,0,0}; static struct itmeffectstruct{ int itemdataintindex; int charmodifyparamindex; int accumulation; int min; int max; int type; }itemEffect[]={ { ITEM_MODIFYATTACK, CHAR_WORKATTACKPOWER, 0, 0, EQUIP_FIX_MAX, 0}, { ITEM_MODIFYDEFENCE, CHAR_WORKDEFENCEPOWER, -100, 0, EQUIP_FIX_MAX, 0}, { ITEM_MODIFYQUICK, CHAR_WORKQUICK, -100, 0, EQUIP_FIX_MAX, 0}, { ITEM_MODIFYHP, CHAR_WORKMAXHP, 0, 0, EQUIP_FIX_MAX, 0}, { ITEM_MODIFYMP, CHAR_WORKMAXMP, 0, 0, 1000, 0}, // MP 反100引匹 { ITEM_MODIFYLUCK, CHAR_WORKFIXLUCK, 0, 1, 5, 0}, { ITEM_MODIFYCHARM, CHAR_WORKFIXCHARM, 0, 0, 100, 0}, { ITEM_MODIFYAVOID, CHAR_WORKFIXAVOID, 0, 0, EQUIP_FIX_MAX, 0}, { ITEM_POISON, CHAR_WORKMODPOISON, 0, -100, 100, 0}, { ITEM_PARALYSIS, CHAR_WORKMODPARALYSIS, 0, -100, 100, 0}, { ITEM_SLEEP, CHAR_WORKMODSLEEP, 0, -100, 100, 0}, { ITEM_STONE, CHAR_WORKMODSTONE, 0, -100, 100, 0}, { ITEM_DRUNK, CHAR_WORKMODDRUNK, 0, -100, 100, 0}, { ITEM_CONFUSION, CHAR_WORKMODCONFUSION, 0, -100, 100, 0}, { ITEM_CRITICAL, CHAR_WORKMODCRITICAL, 0, -100, 100, 0},#ifdef _ADD_DEAMGEDEFC { ITEM_OTHERDAMAGE, CHAR_WORKOTHERDMAGE, 0, -100, 100, 0}, { ITEM_OTHERDEFC, CHAR_WORKOTHERDEFC, 0, -100, 100, 0},#endif#ifdef _ITEMSET5_TXT { ITEM_MODIFYARRANGE, CHAR_WORKFIXARRANGE, 0, 0, 1000, 0}, { ITEM_MODIFYSEQUENCE, CHAR_WORKFIXSEQUENCE, 0, 0, 100, 1}, { ITEM_ATTACHPILE, CHAR_WORKATTACHPILE, 0, 0, 10, 1}, { ITEM_HITRIGHT, CHAR_WORKHITRIGHT, 0, 0, 40, 1},#endif#ifdef _ITEMSET6_TXT { ITEM_NEGLECTGUARD, CHAR_WORKNEGLECTGUARD, 0, 0, 30, 1},#endif }; for( i = 0 ; i < arraysizeof( itemEffect ); i ++ ) itemEffect[i].accumulation = 0; if( !CHAR_CHECKINDEX(index) )return; for( i = 0 ; i < CHAR_EQUIPPLACENUM ; i ++ ){ int id = CHAR_getItemIndex(index,i); if( ITEM_CHECKINDEX(id) ){ int j; int attrib = 0; for( j=0; j < arraysizeof( itemEffect ); j ++ ) { itemEffect[j].accumulation += ITEM_getInt( id, itemEffect[j].itemdataintindex ); } attrib = ITEM_getInt( id, ITEM_MODIFYATTRIB); if( attrib > 0 && attrib < 5) { attribaccum[attrib - 1] += ITEM_getInt( id, ITEM_MODIFYATTRIBVALUE); } } }#ifdef _FIX_MAXCHARMP for(i = 3 ; i < arraysizeof( itemEffect ) ; i ++ ){#else for(i = 5 ; i < arraysizeof( itemEffect ) ; i ++ ){#endif int work=0; if( itemEffect[i].type == 1 ){ work = itemEffect[i].accumulation; }else{ work = CHAR_getWorkInt(index,itemEffect[i].charmodifyparamindex) + itemEffect[i].accumulation; work = min( itemEffect[i].max, work ); work = max( itemEffect[i].min, work ); } CHAR_setWorkInt( index, itemEffect[i].charmodifyparamindex, work ); } for( i = 0; i < 4; i ++ ) { CHAR_setWorkInt( index, CHAR_WORKFIXEARTHAT + i, CHAR_getWorkInt( index, CHAR_WORKFIXEARTHAT + i) + attribaccum[i]); } for( i = 0; i < 4; i ++ ) { int j; for( j = 0; j < 4; j ++ ) { if( i != j ) { CHAR_setWorkInt( index, CHAR_WORKFIXEARTHAT + j, CHAR_getWorkInt(index, CHAR_WORKFIXEARTHAT + j) - attribaccum[i]); } } } for( i = 0; i < 4; i ++ ) { if( CHAR_getWorkInt( index, CHAR_WORKFIXEARTHAT + i) > CHAR_MAXATTRIB) { CHAR_setWorkInt( index, CHAR_WORKFIXEARTHAT + i, CHAR_MAXATTRIB); } } { int work; work = CHAR_getWorkInt(index,CHAR_WORKFIXSTR)+ itemEffect[0].accumulation; CHAR_setWorkInt( index, CHAR_WORKFIXSTR, max( 0, work ) ); work = CHAR_getWorkInt(index,CHAR_WORKFIXTOUGH) + itemEffect[1].accumulation; CHAR_setWorkInt( index, CHAR_WORKFIXTOUGH, max( -100, work ) ); work = CHAR_getWorkInt( index, CHAR_WORKFIXDEX) + itemEffect[2].accumulation; CHAR_setWorkInt( index, CHAR_WORKFIXDEX, max( -100, work ) ); }}void Other_DefcharWorkInt( int index){#ifdef _SUIT_ITEM int mfix,mtgh,mdex,mods,maxhp; mfix = CHAR_getWorkInt( index, CHAR_WORKFIXSTR); mtgh = CHAR_getWorkInt( index, CHAR_WORKFIXTOUGH); mdex = CHAR_getWorkInt( index, CHAR_WORKFIXDEX); maxhp = CHAR_getWorkInt( index, CHAR_WORKMAXHP); mods = CHAR_getWorkInt( index, CHAR_WORKSUITMODSTR); mfix = mfix+((mfix*mods)/100); CHAR_setWorkInt( index, CHAR_WORKFIXSTR, mfix+CHAR_getWorkInt( index, CHAR_WORKSUITSTR)); CHAR_setWorkInt( index, CHAR_WORKFIXTOUGH, mtgh+CHAR_getWorkInt( index, CHAR_WORKSUITTGH)); CHAR_setWorkInt( index, CHAR_WORKFIXDEX, mdex+CHAR_getWorkInt( index, CHAR_WORKSUITDEX)); CHAR_setWorkInt( index, CHAR_WORKMAXHP, maxhp+ CHAR_getWorkInt( index, CHAR_WORKSUITVIT));#ifdef _SUIT_ADDPART3 if( mfix > 0 ) CHAR_setWorkInt( index, CHAR_WORKFIXSTR, CHAR_getWorkInt( index, CHAR_WORKFIXSTR)+mfix*CHAR_getWorkInt( index, CHAR_WORKSUITSTR_P)/100.0); if( mtgh > 0 ) CHAR_setWorkInt( index, CHAR_WORKFIXTOUGH, CHAR_getWorkInt( index, CHAR_WORKFIXTOUGH)+mtgh*CHAR_getWorkInt( index, CHAR_WORKSUITTGH_P)/100.0); if( mdex > 0) CHAR_setWorkInt( index, CHAR_WORKFIXDEX, CHAR_getWorkInt( index, CHAR_WORKFIXDEX)+mdex*CHAR_getWorkInt( index, CHAR_WORKSUITDEX_P)/100.0);#endif#endif//_SUIT_ITEM#ifdef _PETSKILL_SETDUCK //profession fix //使用回避招式时,会将防值减去30%然後设定成回避值,奇怪的设定,也造成原本设定的回避值跟没设一样,因此我(Change)先把整段拿掉 /*if( CHAR_getWorkInt( index, CHAR_MYSKILLDUCK) > 0 ){ int mtgh = CHAR_getWorkInt( index, CHAR_WORKFIXTOUGH); mtgh -= (mtgh*30)/100; if( mtgh < 0 ) mtgh=0; CHAR_setWorkInt( index, CHAR_MYSKILLDUCKPOWER, mtgh); }*/#endif#ifdef _MAGICPET_SKILL if( CHAR_getWorkInt( index, CHAR_MYSKILLSTR) > 0 ){ int mpower, mdef; mpower = CHAR_getWorkInt( index, CHAR_WORKFIXSTR); mdef = CHAR_getWorkInt( index, CHAR_MYSKILLSTRPOWER); mpower += (mtgh*mdef)/100; if( mtgh < 0 ) mtgh=0; CHAR_setWorkInt( index, CHAR_WORKFIXSTR, mpower); } if( CHAR_getWorkInt( index, CHAR_MYSKILLTGH) > 0 ){ int mpower, mdef; mpower = CHAR_getWorkInt( index, CHAR_WORKFIXTOUGH); mdef = CHAR_getWorkInt( index, CHAR_MYSKILLTGHPOWER); mpower += (mtgh*mdef)/100; if( mtgh < 0 ) mtgh=0; CHAR_setWorkInt( index, CHAR_WORKFIXTOUGH, mpower); } if( CHAR_getWorkInt( index, CHAR_MYSKILLDEX) > 0 ){ int mpower, mdef; mpower = CHAR_getWorkInt( index, CHAR_WORKFIXDEX); mdef = CHAR_getWorkInt( index, CHAR_MYSKILLDEXPOWER); mpower += (mtgh*mdef)/100; if( mtgh < 0 ) mtgh=0; CHAR_setWorkInt( index, CHAR_WORKFIXDEX, mpower); }#endif#ifdef _VARY_WOLF if(CHAR_getInt( index, CHAR_BASEIMAGENUMBER)==101428){ int Rands=0, power; Rands = CHAR_getWorkInt( index, CHAR_SKILLSTRPOWER); power = CHAR_getWorkInt( index, CHAR_WORKFIXSTR); power = power + (power*Rands)/100; CHAR_setWorkInt( index, CHAR_WORKFIXSTR, power); Rands = CHAR_getWorkInt( index, CHAR_SKILLDEXPOWER); power = CHAR_getWorkInt( index, CHAR_WORKFIXDEX); power = power + (power*Rands)/100; CHAR_setWorkInt( index, CHAR_WORKFIXDEX, power); }#endif#ifdef _MAGIC_WEAKEN if(CHAR_getWorkInt(index,CHAR_WORKWEAKEN)>0){ CHAR_setWorkInt( index, CHAR_WORKFIXSTR, CHAR_getWorkInt( index, CHAR_WORKFIXSTR)*0.8); CHAR_setWorkInt( index, CHAR_WORKFIXTOUGH, CHAR_getWorkInt( index, CHAR_WORKFIXTOUGH)*0.8); CHAR_setWorkInt( index, CHAR_WORKFIXDEX, CHAR_getWorkInt( index, CHAR_WORKFIXDEX)*0.8); CHAR_setWorkInt( index, CHAR_WORKWEAKEN, CHAR_getWorkInt( index, CHAR_WORKWEAKEN)-1); }#endif#ifdef _MAGIC_BARRIER// vincent 精灵:魔障 if( CHAR_getWorkInt( index, CHAR_WORKBARRIER) > 0){ CHAR_setWorkInt( index, CHAR_WORKBARRIER, CHAR_getWorkInt( index, CHAR_WORKBARRIER) - 1); }#endif CHAR_setWorkInt(index, CHAR_WORKATTACKPOWER, CHAR_getWorkInt( index, CHAR_WORKFIXSTR ) ); CHAR_setWorkInt(index, CHAR_WORKDEFENCEPOWER, CHAR_getWorkInt( index, CHAR_WORKFIXTOUGH ) ); CHAR_setWorkInt(index, CHAR_WORKQUICK, CHAR_getWorkInt( index, CHAR_WORKFIXDEX ) );}char* ITEM_getAppropriateName(int itemindex){ int nameindex; if( !ITEM_CHECKINDEX(itemindex ) )return "\0"; if( ITEM_getInt(itemindex,ITEM_LEAKLEVEL) <= 0 ) nameindex = ITEM_NAME; else nameindex = ITEM_SECRETNAME; return ITEM_getChar(itemindex,nameindex);}char* ITEM_getEffectString( int itemindex ){ if( !ITEM_CHECKINDEX(itemindex))return "\0"; return ITEM_item[itemindex].itm.string[ITEM_EFFECTSTRING].string;}char *ITEM_getItemInfoFromNumber( int itemid ){ return ITEMTBL_getChar( itemid, ITEM_EFFECTSTRING);}INLINE char* _ITEM_getNameFromNumber( char *file, int line, int itemid ){ if( ITEM_CHECKITEMTABLE(itemid) == FALSE ){ print("Can't Get ItemTable for:%d! - %s:%d\n",itemid, file, line); return "\0"; } return ITEMTBL_getChar( itemid, ITEM_NAME);}int ITEM_getcostFromITEMtabl( int itemid ){ return ITEMTBL_getInt( itemid, ITEM_COST);}int ITEM_getlevelFromITEMtabl( int itemid ){ return ITEMTBL_getInt( itemid, ITEM_LEVEL);}int ITEM_getgraNoFromITEMtabl( int itemid ){ return ITEMTBL_getInt( itemid, ITEM_BASEIMAGENUMBER);}int ITEM_getcanpetmailFromITEMtabl( int itemid ){ return ITEMTBL_getInt( itemid, ITEM_CANPETMAIL);}int ITEM_getvanishatdropFromITEMtabl( int itemid ){ return ITEMTBL_getInt( itemid, ITEM_VANISHATDROP);}int ITEM_getdropatlogoutFromITEMtabl( int itemid ){ return ITEMTBL_getInt( itemid, ITEM_DROPATLOGOUT);}int ITEM_getmergeItemFromFromITEMtabl( int itemid ){ return ITEMTBL_getInt( itemid, ITEM_CANMERGEFROM);}BOOL ITEM_canuseMagic( int itemindex){ if( !ITEM_CHECKINDEX(itemindex))return FALSE; if( MAGIC_getMagicArray( ITEM_item[itemindex].itm.data[ITEM_MAGICID]) != -1 ) { return TRUE; } return FALSE;}INLINE ITEM_Item *ITEM_getItemPointer( int index ){ if(!ITEM_CHECKINDEX(index))return NULL; return &ITEM_item[index].itm;}int ITEM_isTargetValid( int charaindex, int itemindex, int toindex){ int itemtarget; int Myside; itemtarget = ITEM_getInt( itemindex, ITEM_TARGET ); Myside = CHAR_getWorkInt( charaindex, CHAR_WORKBATTLESIDE ); if ((toindex >= 0x0) && (toindex <= 0x13)) return 0; if (toindex == 0x14) {//20 右下全 0 if (itemtarget == ITEM_TARGET_ALLMYSIDE){ if( Myside == 0 )return 0; }else if(itemtarget == ITEM_TARGET_ALLOTHERSIDE ){ if( Myside == 1 )return 0; } }else if (toindex == 0x15) {//21 左上全 1 if (itemtarget == ITEM_TARGET_ALLMYSIDE){ if( Myside == 1 )return 0; }else if( itemtarget == ITEM_TARGET_ALLOTHERSIDE ){ if( Myside == 0 )return 0; } }else if (toindex == 0x16) { if (itemtarget == ITEM_TARGET_ALL) return 0; } return -1;}// Nuke end#ifdef _ITEM_CHECKWARESBOOL CHAR_CheckInItemForWares( int charaindex, int flg){ int itemindex, i; char token[256]; for( i=0; i<24; i++) { itemindex = CHAR_getItemIndex( charaindex, i); if( !ITEM_CHECKINDEX( itemindex) ) continue; if( ITEM_getInt( itemindex, ITEM_TYPE) == ITEM_WARES ) { if( flg == 0 ){ return FALSE; } sprintf(token,"交出%s",ITEM_getChar( itemindex, ITEM_NAME)); CHAR_talkToCli( charaindex, -1, token, CHAR_COLORYELLOW); CHAR_setItemIndex( charaindex, i ,-1); ITEM_endExistItemsOne( itemindex); CHAR_sendItemDataOne( charaindex, i); } } return TRUE;}#endifint ITEMTBL_getInt( int ItemID, ITEM_DATAINT datatype){ if( datatype >= ITEM_DATAINTNUM || datatype < 0 ) return -1; if( ITEM_CHECKITEMTABLE(ItemID) == FALSE )return -1; return ITEM_tbl[ITEM_idx[ItemID].index].itm.data[datatype]; //new}char *ITEMTBL_getChar( int ItemID, ITEM_DATACHAR datatype){ if( datatype >= ITEM_DATACHARNUM || datatype < 0 ) return "\0"; if( ITEM_CHECKITEMTABLE(ItemID) == FALSE )return "\0"; return ITEM_tbl[ITEM_idx[ItemID].index].itm.string[datatype].string; //new}INLINE BOOL ITEM_CHECKITEMTABLE( int number ){ if( number < 0 || number >= ITEM_idxlen ){ //andy_log print("ITEM_CHECKITEMTABLE() number:%d ITEM_tblen:%d !!\n", number, ITEM_idxlen ); return FALSE; } return ITEM_idx[number].use; //new}int ITEM_getItemDamageCrusheED( int itemindex){ int crushe = ITEM_getInt( itemindex, ITEM_DAMAGECRUSHE); int maxcrushe = ITEM_getInt( itemindex, ITEM_MAXDAMAGECRUSHE); if(maxcrushe < 1)return -1; if( maxcrushe > 1000000) maxcrushe = 1000000; if( crushe > 1000000) crushe = 1000000; return ((int) (crushe*100)/maxcrushe);}void ITEM_RsetEquit( int charaindex){ int i, itemindex, ti=-1; for( i=0; i<CHAR_STARTITEMARRAY; i++){ itemindex = CHAR_getItemIndex( charaindex , i ); if( !ITEM_CHECKINDEX( itemindex)) continue; if( i == ITEM_getEquipPlace( charaindex, itemindex ) ) continue; if( (ti = CHAR_findEmptyItemBox( charaindex )) == -1 ) return; CHAR_setItemIndex( charaindex , i, -1); CHAR_setItemIndex( charaindex , ti, itemindex); }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -