?? item.c
字號:
if( !ITEM_CHECKINDEX(itemindex) ) return NULL; leaklevel = ITEM_getInt(itemindex,ITEM_LEAKLEVEL); //if( leaklevel >= 1 ) // Nuke debug { makeEscapeString( ITEM_getChar(itemindex, ITEM_SECRETNAME), escapename, sizeof(escapename) ); /*if( leaklevel >= 2 ) { static struct Showparamint{ char* name; int intindex; }showparamint[]={ { "ATK" , ITEM_MODIFYATTACK }, { "DEF" , ITEM_MODIFYDEFENCE }, { "HP" , ITEM_MODIFYHP }, { "MP" , ITEM_MODIFYMP }, { "QUICK" , ITEM_MODIFYQUICK }, { "LUCK" , ITEM_MODIFYLUCK }, { "CHARM" , ITEM_MODIFYCHARM }, }; int i; int stringlen=0; paramshow[0] = '\0'; for( i = 0 ; i < arraysizeof( showparamint ); i ++ ){ int value; char sign; char tmpbuf[128]; value = ITEM_getInt(itemindex,showparamint[i].intindex);#ifdef _PROFESSION_SKILL // WON ADD 人物職業技能 #endif if( value == 0 )continue; else if( value > 0 ) sign = '+'; else sign = '-'; snprintf( tmpbuf,sizeof( tmpbuf ), "%s%c%d ", showparamint[i].name,sign,ABS(value) ); strcpysafe( paramshow + stringlen , sizeof(paramshow) - stringlen, tmpbuf ); stringlen +=strlen(tmpbuf); if( stringlen >= arraysizeof( paramshow )) break; } dchop( paramshow , " " ); } else*/ paramshow[0] = '\0'; } /*else{ if(strlen(ITEM_getChar(itemindex,ITEM_SECRETNAME)) > 0){ makeEscapeString(ITEM_getChar(itemindex,ITEM_SECRETNAME),escapename,sizeof(escapename)); } else makeEscapeString( ITEM_getChar(itemindex,ITEM_NAME),escapename,sizeof(escapename)); paramshow[0] = '\0'; }*/ makeEscapeString( ITEM_getChar( itemindex, ITEM_EFFECTSTRING), escapeeffectstring, sizeof(escapeeffectstring)); itemcolor = CHAR_COLORWHITE; if( strlen( ITEM_getChar( itemindex, ITEM_CDKEY)) != 0 ) { itemcolor = CHAR_COLORGREEN; }else { if( ITEM_getInt( itemindex, ITEM_MERGEFLG) ) { itemcolor = CHAR_COLORYELLOW; } } flg = 0; if( ITEM_getInt( itemindex, ITEM_CANPETMAIL)) { flg |= 1 << 0; } if( ITEM_getInt( itemindex, ITEM_CANMERGEFROM)) { flg |= 1 << 1; } if( ITEM_getInt( itemindex, ITEM_TYPE) == ITEM_DISH ) { flg |= 1 << 2; }#ifdef _ITEM_INSLAY if( ITEM_getInt( itemindex, ITEM_TYPE) == ITEM_METAL ) { flg |= 1 << 3; }else if( ITEM_getInt( itemindex, ITEM_TYPE) == ITEM_JEWEL ) { flg |= 1 << 4; }#endif#ifdef _PETSKILL_FIXITEM if( ITEM_getInt( itemindex, ITEM_DAMAGECRUSHE) != ITEM_getInt( itemindex, ITEM_MAXDAMAGECRUSHE) ){ flg |= 1 << 5; }#endif#ifdef _ALCHEMIST strcpy( INGNAME0, ITEM_getChar( itemindex, ITEM_INGNAME0) ); strcpy( INGNAME1, ITEM_getChar( itemindex, ITEM_INGNAME1) ); if( (INGNAME0[0] != NULL && INGNAME1[0] != NULL) || (INGNAME0[0] == NULL) ) { strcpy( INGNAME0, "雜" ); }#endif if( haveitemindex == -1 ) {#ifdef _ADD_SHOW_ITEMDAMAGE // WON ADD 顯示物品耐久度 char buff1[256]; int crushe = ITEM_getInt( itemindex, ITEM_DAMAGECRUSHE); int maxcrushe = ITEM_getInt( itemindex, ITEM_MAXDAMAGECRUSHE); if(crushe < 1) crushe = 1; if(maxcrushe < 1){ sprintf(buff1, "不會損壞"); }else{ maxcrushe = maxcrushe/1000; crushe = crushe/1000; if( maxcrushe <= 0 ) maxcrushe = 1; snprintf(buff1, sizeof(buff1), "%d%%", (int)((crushe*100)/maxcrushe) ); } snprintf(ITEM_itemStatusStringBuffer, sizeof( ITEM_itemStatusStringBuffer),#ifdef _ITEM_PILENUMS#ifdef _ALCHEMIST "%s|%s|%d|%s|%d|%d|%d|%d|%d|%s|%d|%s",#else "%s|%s|%d|%s|%d|%d|%d|%d|%d|%s|%d",#endif#else "%s|%s|%d|%s|%d|%d|%d|%d|%d|%s",#endif escapename, paramshow, itemcolor, escapeeffectstring , ITEM_getInt( itemindex, ITEM_BASEIMAGENUMBER), ITEM_getInt( itemindex, ITEM_ABLEUSEFIELD), ITEM_getInt( itemindex, ITEM_TARGET), ITEM_getInt( itemindex, ITEM_LEVEL), flg, buff1#ifdef _ITEM_PILENUMS ,ITEM_getInt( itemindex, ITEM_USEPILENUMS)#ifdef _ALCHEMIST ,INGNAME0 //,ITEM_getInt( itemindex, ITEM_ALCHEMIST)#endif#endif );#else snprintf(ITEM_itemStatusStringBuffer, sizeof( ITEM_itemStatusStringBuffer), "%s|%s|%d|%s|%d|%d|%d|%d|%d", escapename, paramshow, itemcolor, escapeeffectstring , ITEM_getInt( itemindex, ITEM_BASEIMAGENUMBER), ITEM_getInt( itemindex, ITEM_ABLEUSEFIELD), ITEM_getInt( itemindex, ITEM_TARGET), ITEM_getInt( itemindex, ITEM_LEVEL), flg );#endif }else {#ifdef _ADD_SHOW_ITEMDAMAGE // WON ADD 顯示物品耐久度 char buff1[256]; int crushe = ITEM_getInt( itemindex, ITEM_DAMAGECRUSHE); int maxcrushe = ITEM_getInt( itemindex, ITEM_MAXDAMAGECRUSHE); if(crushe < 1) crushe = 1; if(maxcrushe < 1){ sprintf(buff1, "不會損壞"); }else{ maxcrushe = maxcrushe/1000; crushe = crushe/1000; if( maxcrushe <= 0 ) maxcrushe = 1; snprintf(buff1, sizeof(buff1), "%d%%", (int)((crushe*100)/maxcrushe) ); } snprintf(ITEM_itemStatusStringBuffer, sizeof( ITEM_itemStatusStringBuffer), #ifdef _ITEM_PILENUMS#ifdef _ALCHEMIST "%d|%s|%s|%d|%s|%d|%d|%d|%d|%d|%s|%d|%s",#else "%d|%s|%s|%d|%s|%d|%d|%d|%d|%d|%s|%d",#endif#else "%d|%s|%s|%d|%s|%d|%d|%d|%d|%d|%s",#endif haveitemindex, escapename, paramshow, itemcolor, escapeeffectstring , ITEM_getInt( itemindex, ITEM_BASEIMAGENUMBER), ITEM_getInt( itemindex, ITEM_ABLEUSEFIELD), ITEM_getInt( itemindex, ITEM_TARGET), ITEM_getInt( itemindex, ITEM_LEVEL), flg, buff1#ifdef _ITEM_PILENUMS ,ITEM_getInt( itemindex, ITEM_USEPILENUMS)#ifdef _ALCHEMIST ,INGNAME0 //,ITEM_getInt( itemindex, ITEM_ALCHEMIST)#endif#endif );#else snprintf(ITEM_itemStatusStringBuffer, sizeof( ITEM_itemStatusStringBuffer), "%d|%s|%s|%d|%s|%d|%d|%d|%d|%d", haveitemindex, escapename, paramshow, itemcolor, escapeeffectstring , ITEM_getInt( itemindex, ITEM_BASEIMAGENUMBER), ITEM_getInt( itemindex, ITEM_ABLEUSEFIELD), ITEM_getInt( itemindex, ITEM_TARGET), ITEM_getInt( itemindex, ITEM_LEVEL), flg );#endif } return ITEM_itemStatusStringBuffer;}char* ITEM_makeItemFalseString( void ){#ifdef _ADD_SHOW_ITEMDAMAGE // WON ADD 顯示物品耐久度 strcpysafe( ITEM_itemStatusStringBuffer, sizeof( ITEM_itemStatusStringBuffer),#ifdef _ITEM_PILENUMS#ifdef _ALCHEMIST "|||||||||||"#else "||||||||||"#endif#else "|||||||||"#endif );#else strcpysafe( ITEM_itemStatusStringBuffer, sizeof( ITEM_itemStatusStringBuffer), "||||||||" );#endif return ITEM_itemStatusStringBuffer;}char* ITEM_makeItemFalseStringWithNum( int haveitemindex ){#ifdef _ADD_SHOW_ITEMDAMAGE // WON ADD 顯示物品耐久度 snprintf( ITEM_itemStatusStringBuffer, sizeof( ITEM_itemStatusStringBuffer),#ifdef _ITEM_PILENUMS#ifdef _ALCHEMIST "%d||||||||||||",#else "%d|||||||||||",#endif#else "%d||||||||||",#endif haveitemindex );#else snprintf( ITEM_itemStatusStringBuffer, sizeof( ITEM_itemStatusStringBuffer), "%d|||||||||", haveitemindex);#endif return ITEM_itemStatusStringBuffer;}BOOL ITEM_makeItem( ITEM_Item* itm, int number ){ int i;#ifdef _IMPOROVE_ITEMTABLE int Itemsi;#endif if( ITEM_CHECKITEMTABLE(number) == FALSE ){ print(" Can't makeItem for itemid:%d!!\n", number); return FALSE; }#ifdef _IMPOROVE_ITEMTABLE Itemsi = ITEM_getSIndexFromTransList( number); memcpy( itm, &ITEM_tbl[Itemsi].itm , sizeof( ITEM_Item ) ); //new for( i=0 ; i<ITEM_DATAINTNUM ; i++ ){ int randomvalue; randomvalue = RAND( 0, ITEM_tbl[Itemsi].randomdata[i] ); //new itm->data[i] = ITEM_tbl[Itemsi].itm.data[i] + randomvalue; //new }#else memcpy( itm, &ITEM_tbl[number].itm , sizeof( ITEM_Item ) ); //new for( i=0 ; i<ITEM_DATAINTNUM ; i++ ){ int randomvalue; randomvalue = RAND(0,ITEM_tbl[number].randomdata[i]); //new itm->data[i] = ITEM_tbl[number].itm.data[i] + randomvalue; //new }#endif 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};#ifdef _ANGEL_SUMMON int angelmode, angelequip =0;#endif 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;#ifdef _ANGEL_SUMMON angelmode = CHAR_getWorkInt( index, CHAR_WORKANGELMODE);#endif for( i = 0 ; i < CHAR_EQUIPPLACENUM ; i ++ ){ int id = CHAR_getItemIndex(index,i); if( ITEM_CHECKINDEX(id) ){ int j; int attrib = 0;#ifdef _PROFESSION_SKILL // WON ADD 人物職業技能 if( i == CHAR_ARM ) CHAR_sendStatusString( index , "S");#endif for( j=0; j < arraysizeof( itemEffect ); j ++ ) {#ifdef _PROFESSION_SKILL // WON ADD 人物職業技能 if( i == CHAR_EQSHIELD ){ int item_type = ITEM_FIST; item_type = ITEM_getInt( id, ITEM_TYPE ); // 當左手裝備武器的時候 if( item_type != ITEM_WSHIELD ){ int k; // 勇士職業技能二刀流 for( k=0; k<CHAR_SKILLMAXHAVE; k++ ){ char *skill_name; // 技能ID int skillid = CHAR_getCharSkill( index, k); int Pskillid = PROFESSION_SKILL_getskillArray( skillid); if( Pskillid <= 0 ) continue; // 技能名稱 skill_name = PROFESSION_SKILL_getChar( Pskillid, PROFESSION_SKILL_FUNCNAME); if( skill_name == NULL ) continue; // 二刀流 if( (strcmp( skill_name , "PROFESSION_DUAL_WEAPON" )) == 0 ){ int skill=k, skill_level=0, rate=0, value=0; CHAR_HaveSkill* hskill; // 人物技能等級 hskill = CHAR_getCharHaveSkill( index, skill ); skill_level = SKILL_getInt( &hskill->skill, SKILL_LEVEL); skill_level = PROFESSION_CHANGE_SKILL_LEVEL_A( skill_level ); rate = (skill_level * 3 + 20); value = ITEM_getInt( id, itemEffect[j].itemdataintindex ) * rate / 100; itemEffect[j].accumulation += value; } } }else itemEffect[j].accumulation += ITEM_getInt( id, itemEffect[j].itemdataintindex ); }else #endif 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 _ANGEL_SUMMON //if( !strcmp( ITEM_getChar( id, ITEM_USEFUNC), "ITEM_AngelToken") ) { if( ITEM_getInt( id, ITEM_ID) == ANGELITEM ) { //print(" 使者信物裝備中 "); angelequip = TRUE; }#endif } }#ifdef _ANGEL_SUMMON if( angelmode == TRUE && angelequip == FALSE ) { CHAR_setWorkInt( index, CHAR_WORKANGELMODE, FALSE); CHAR_sendAngelMark( CHAR_getWorkInt( index, CHAR_WORKOBJINDEX), 0); print(" 卸下使者信物 "); } if( angelmode == FALSE && angelequip == TRUE ) { CHAR_setWorkInt( index, CHAR_WORKANGELMODE, TRUE); CHAR_sendAngelMark( CHAR_getWorkInt( index, CHAR_WORKOBJINDEX), 1); CHAR_talkToCli( index, -1, "你受到了精靈保護,不會被敵人攻擊。", CHAR_COLORYELLOW ); print(" 裝備使者信物 "); }#endif#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 ){
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -