📄 char_item.c.bak
字号:
otheritemindex = CHAR_getItemIndex( index, checkplace); if( ITEM_CHECKINDEX( otheritemindex )) { int otheritemtype = ITEM_getInt( otheritemindex, ITEM_TYPE); int myitemtype = ITEM_getInt( CHAR_getItemIndex( index, fromindex) , ITEM_TYPE); if( otheritemtype == myitemtype) { if( toid < 0 ) { CANNOTEQUIP2; }else { CANNOTEXCHANGE; } return FALSE; } } flg = TRUE; } }else { if( toindex == fromeqplace) flg = TRUE; } if( flg ){ CHAR_setItemIndex(index,toindex,fromid); CHAR_setItemIndex(index,fromindex,toid); if( toid != -1 ) { CHAR_sendItemDetachEvent( index, toid ); }#ifdef _CHECK_ITEM_MODIFY ITEM_checkItemModify( index, fromid);#endif CHAR_sendItemAttachEvent( index, fromid ); CHAR_sendSIToCli( index, fromindex,toindex ); }else { CANNOTEQUIP; return FALSE; }#if 0 //#ifdef _ANGEL_SUMMON //if( !strcmp( ITEM_getChar( fromid, ITEM_USEFUNC), "ITEM_AngelToken") ) { if( ITEM_getInt( fromid, ITEM_ID) == ANGELITEM ) { print(" 装备使者信物 "); CHAR_talkToCli( index, -1, "你受到了精灵保护,不会被敌人攻击。", CHAR_COLORYELLOW ); //CHAR_setWorkInt( index, CHAR_WORKANGELMODE, TRUE); CHAR_sendAngelMark( CHAR_getWorkInt( index, CHAR_WORKOBJINDEX), 1); }#endif return TRUE;}static BOOL CHAR_moveItemFromEquipToItemBox(int index, int fromindex, int toindex){ int fromid,toid; if( !CHAR_CHECKINDEX( index )) return FALSE; fromid = CHAR_getItemIndex(index,fromindex); toid = CHAR_getItemIndex(index,toindex); if( fromid < 0 ) return FALSE; else if( toid < 0 ){ CHAR_setItemIndex(index,toindex,fromid); CHAR_setItemIndex(index,fromindex,-1); CHAR_sendItemDetachEvent( index,fromid ); CHAR_sendSIToCli( index,fromindex,toindex);#if 0 //#ifdef _ANGEL_SUMMON //if( !strcmp( ITEM_getChar( fromid, ITEM_USEFUNC), "ITEM_AngelToken") ) { if( ITEM_getInt( fromid, ITEM_ID) == ANGELITEM ) { print(" 卸下使者信物 "); CHAR_setWorkInt( index, CHAR_WORKANGELMODE, FALSE); CHAR_sendAngelMark( CHAR_getWorkInt( index, CHAR_WORKOBJINDEX), 0); }#endif return TRUE; } return CHAR_moveItemFromItemBoxToEquip(index, toindex,fromindex);}#ifdef _ITEM_PILENUMSint CHAR_getMyMaxPilenum( int charaindex){ int maxpile; maxpile = CHAR_getInt( charaindex, CHAR_TRANSMIGRATION) + (CHAR_getInt( charaindex, CHAR_TRANSMIGRATION)/5) * 2 + 3;/*#ifdef _PROFESSION_SKILL // WON ADD 人物职业技能 maxpile += CHAR_getInt( charaindex, ATTACHPILE );#endif*/#ifdef _EQUIT_ADDPILE maxpile += CHAR_getWorkInt( charaindex, CHAR_WORKATTACHPILE); maxpile = (maxpile<0)?0:maxpile;#endif return maxpile;}BOOL CHAR_PileItemFromItemBoxToItemBox( int charaindex, int fromindex, int toindex){ int maxpile, fromid, toid; if( !CHAR_CHECKINDEX( charaindex) ) return FALSE; fromid = CHAR_getItemIndex( charaindex, fromindex); toid = CHAR_getItemIndex( charaindex, toindex); maxpile = CHAR_getMyMaxPilenum( charaindex); if( ITEM_CHECKINDEX( toid) && ITEM_CHECKINDEX( fromid) && (ITEM_getInt( toid, ITEM_ID) == ITEM_getInt( fromid, ITEM_ID)) && (ITEM_getInt( toid, ITEM_CANBEPILE) == 1) && (ITEM_getInt( toid, ITEM_USEPILENUMS) < maxpile) && (ITEM_getInt( fromid, ITEM_USEPILENUMS) < maxpile) ){ int formpilenum , pilenum, defpilenum; pilenum = ITEM_getInt( toid, ITEM_USEPILENUMS); formpilenum = ITEM_getInt( fromid, ITEM_USEPILENUMS); defpilenum = ((maxpile-pilenum)>formpilenum)? formpilenum:(maxpile-pilenum); formpilenum = formpilenum - defpilenum; pilenum = pilenum + defpilenum; ITEM_setInt( toid, ITEM_USEPILENUMS, pilenum); ITEM_setInt( fromid, ITEM_USEPILENUMS, formpilenum); if( formpilenum <= 0 ){ CHAR_setItemIndex( charaindex, fromindex ,-1); ITEM_endExistItemsOne( fromid); } return TRUE; } return FALSE;}#endifstatic BOOL CHAR_moveItemFromItemBoxToItemBox( int index, int fromindex, int toindex){ int fromid, toid; if( !CHAR_CHECKINDEX( index ) ) return FALSE;#ifdef _ITEM_PILENUMS if( CHAR_PileItemFromItemBoxToItemBox( index, fromindex, toindex) == TRUE ){ CHAR_sendItemDataOne( index, toindex); CHAR_sendItemDataOne( index, fromindex); return TRUE; }#endif fromid = CHAR_getItemIndex( index, fromindex); toid = CHAR_getItemIndex( index, toindex); CHAR_setItemIndex(index,toindex, CHAR_setItemIndex( index, fromindex, toid)); CHAR_sendSIToCli( index,fromindex,toindex); return TRUE;}void CHAR_moveEquipItem( int index, int fromindex, int toindex ){#define MOVEITEM_NONE 0#define MOVEITEM_EQUIPTOITEM 1 << 0#define MOVEITEM_ITEMTOEQUIP 1 << 1#define MOVEITEM_ITEMTOITEM 1 << 2 int fromid; /* item 匹及奶件犯永弁旦 */ unsigned int moved_any = 0; while( 1) { if( !CHAR_CHECKINDEX( index ) )break; if( CHAR_getFlg( index,CHAR_ISDIE ) )break; if( fromindex < 0 || fromindex >= CHAR_MAXITEMHAVE || toindex < 0 || toindex >= CHAR_MAXITEMHAVE ) break; fromid = CHAR_getItemIndex(index,fromindex); if( fromid == -1 || fromid == -2 )break; if( fromindex == toindex )break; if( fromindex < CHAR_EQUIPPLACENUM ){ if( toindex < CHAR_EQUIPPLACENUM ){ if( CHAR_getItemIndex(index,toindex) < 0 ){ CANNOTMOVE; }else{ CANNOTEXCHANGE; } }else { moved_any |= CHAR_moveItemFromEquipToItemBox( index, fromindex, toindex ) ? MOVEITEM_EQUIPTOITEM : MOVEITEM_NONE; if( moved_any & MOVEITEM_EQUIPTOITEM) { char category[3]; snprintf( category,sizeof( category),"J%d", fromindex); CHAR_sendStatusString( index , category); } } }else{ if( toindex < CHAR_EQUIPPLACENUM ) { moved_any |= CHAR_moveItemFromItemBoxToEquip( index, fromindex , toindex ) ? MOVEITEM_ITEMTOEQUIP : MOVEITEM_NONE; if( moved_any & MOVEITEM_ITEMTOEQUIP) { char category[3]; snprintf( category,sizeof( category),"J%d", toindex); CHAR_sendStatusString( index , category); } }else { moved_any |= CHAR_moveItemFromItemBoxToItemBox( index,fromindex,toindex ) ? MOVEITEM_ITEMTOITEM : MOVEITEM_NONE; } } CHAR_complianceParameter( index ); CHAR_sendCToArroundCharacter(CHAR_getWorkInt(index, CHAR_WORKOBJINDEX)); break; } if( (moved_any & MOVEITEM_EQUIPTOITEM) || (moved_any & MOVEITEM_ITEMTOEQUIP)){ int i; CHAR_send_P_StatusString( index, CHAR_P_STRING_HP|CHAR_P_STRING_MAXHP| CHAR_P_STRING_MP|CHAR_P_STRING_MAXMP| CHAR_P_STRING_ATK|CHAR_P_STRING_DEF| CHAR_P_STRING_QUICK|CHAR_P_STRING_CHARM| CHAR_P_STRING_LUCK|CHAR_P_STRING_EARTH| CHAR_P_STRING_WATER|CHAR_P_STRING_FIRE| CHAR_P_STRING_WIND ); if( CHAR_getWorkInt( index,CHAR_WORKBATTLEMODE ) == BATTLE_CHARMODE_NONE ){ for( i = 0; i < CHAR_MAXPETHAVE; i ++ ) { int petindex = CHAR_getCharPet( index, i); if( CHAR_CHECKINDEX( petindex) ) { char category[3]; CHAR_complianceParameter( petindex ); snprintf( category, sizeof( category), "K%d",i); CHAR_sendStatusString( index, category ); } } } } if( !moved_any ) { CHAR_sendSIToCli( index,-1,-1); }}int CHAR_addItemToChar( Char* ch, int itemid ){ int itembox; itembox = CHAR_findEmptyItemBoxFromChar( ch ); if( itembox == -1 )return -1; return ch->indexOfExistItems[itembox]=ITEM_makeItemAndRegist(itemid);}int CHAR_addItem( int charaindex, int itemid ){ Char* ch; ch = CHAR_getCharPointer(charaindex); if( ch != NULL ){ int ret = CHAR_addItemToChar( ch,itemid ); if( ret == -1 )return ret; ITEM_setWorkInt(ret,ITEM_WORKCHARAINDEX,charaindex); ITEM_setWorkInt(ret,ITEM_WORKOBJINDEX,-1); return ret; }else return -1;}void CHAR_ItemUse( int charaindex, int to_charaindex, int haveitemindex ){ void (*usefunc)(int,int,int)=NULL; int itemindex; if( !CHAR_CHECKINDEX( charaindex ) ){ print( "ANDY charaindex=%d err\n", charaindex); return; } if( CHAR_CHECKITEMINDEX( charaindex, haveitemindex) == FALSE ){ print( "ANDY haveitemindex=%d err\n", haveitemindex); return; } itemindex = CHAR_getItemIndex( charaindex, haveitemindex); if( CHAR_getFlg( charaindex, CHAR_ISDIE ) ){ print( "ANDY charaindex=%d is CHAR_ISDIE err\n", charaindex); return; }#ifdef _STREET_VENDOR // 摆摊中不可使用道具 if(CHAR_getWorkInt(charaindex,CHAR_WORKSTREETVENDOR) > -1){ print("StreetVendor use item charaindex=%d,name=%s\n",charaindex,CHAR_getChar(charaindex,CHAR_NAME)); return; }#endif if( CHAR_getWorkInt( charaindex, CHAR_WORKBATTLEMODE) == BATTLE_CHARMODE_NONE ) { if( CHAR_getInt( to_charaindex, CHAR_WHICHTYPE) == CHAR_TYPEPLAYER) { int action = ITEM_getInt( itemindex, ITEM_USEACTION); if( action != -1 ) { CHAR_sendAction( to_charaindex, action, TRUE); } } } //不等於料理 和 其他 if( ITEM_getInt( itemindex,ITEM_TYPE) != ITEM_OTHER && ITEM_getInt( itemindex,ITEM_TYPE) != ITEM_DISH ) { CHAR_EquipPlace ep; ep = ITEM_getEquipPlace( charaindex, itemindex ); if( ep == -1 )return; if( ep == CHAR_DECORATION1 ) { int flg = FALSE; int toitemindex1 = CHAR_getItemIndex( charaindex, ep); int toitemindex2 = CHAR_getItemIndex( charaindex, CHAR_DECORATION2); int searchindex = -1; int fromitemtype = ITEM_getInt( itemindex, ITEM_TYPE); if( !ITEM_CHECKINDEX( toitemindex1)) searchindex = toitemindex2; else if(!ITEM_CHECKINDEX( toitemindex2)) searchindex = toitemindex1; if( searchindex != -1 ) { if( fromitemtype != ITEM_getInt( searchindex, ITEM_TYPE)) { flg = TRUE; ep = ( searchindex == toitemindex1) ? CHAR_DECORATION2:CHAR_DECORATION1; } } if( !flg) { if( fromitemtype != ITEM_getInt( toitemindex2, ITEM_TYPE)) { ep = CHAR_DECORATION1; }else if( fromitemtype != ITEM_getInt( toitemindex1, ITEM_TYPE)) { ep = CHAR_DECORATION2; }else { ep = CHAR_DECORATION1; } } } CHAR_moveEquipItem( charaindex, haveitemindex,ep ); return; } usefunc = (void(*)(int,int,int)) ITEM_getFunctionPointer( itemindex,ITEM_USEFUNC ); if( usefunc ){ { LogItem( CHAR_getChar( charaindex, CHAR_NAME ), /* 平乓仿 */ CHAR_getChar( charaindex, CHAR_CDKEY ),#ifdef _add_item_log_name // WON ADD 在item的log中增加item名称 itemindex,#else ITEM_getInt( itemindex, ITEM_ID ), /* 失奶 丞 寞 */#endif "Use(使用道具)", CHAR_getInt( charaindex,CHAR_FLOOR), CHAR_getInt( charaindex,CHAR_X ), CHAR_getInt( charaindex,CHAR_Y ), ITEM_getChar( itemindex, ITEM_UNIQUECODE), ITEM_getChar( itemindex, ITEM_NAME), ITEM_getInt( itemindex, ITEM_ID) ); } usefunc(charaindex, to_charaindex, haveitemindex); }else{ char ansmsg[256]; strcpysafe( ansmsg, sizeof(ansmsg), "什麽也没有发生。"); CHAR_talkToCli( charaindex, -1, ansmsg, CHAR_COLORWHITE ); }}BOOL CHAR_DropItemFXY( int charaindex, int itemcharaindex, int fl, int x, int y, int* objindex ){ int itemindex; itemindex = CHAR_getItemIndex(charaindex,itemcharaindex); if( ITEM_CHECKINDEX(itemindex) == FALSE )return -3; if( MAP_walkAbleFromPoint( fl,x,y, FALSE ) == FALSE ){ return -2; } { OBJECT object; for( object=MAP_getTopObj(fl,x,y) ; object; object = NEXT_OBJECT(object ) ){ int objindex = GET_OBJINDEX(object); switch( OBJECT_getType(objindex) ){ case OBJTYPE_NOUSE: break; case OBJTYPE_ITEM:#ifdef _DROPSTAKENEW if(ITEM_getInt(itemindex, ITEM_ID) == CASINOTOKENID) { int i = 0; int dropflag = 0; ITEM_Item *itm; for(i = 0; i < arraysizeof(casinomap); i++){ if(CHAR_getInt(charaindex, CHAR_FLOOR) == casinomap[i].casinofl){ if(x == casinomap[i].casinox && y == casinomap[i].casinoy){ dropflag = 1; break; } } } if(dropflag == 1){ if( (itm = ITEM_getItemPointer( itemindex)) == NULL ) return -1; strcpysafe( itm->string[ITEM_WATCHFUNC].string,
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -