📄 char_item.c
字号:
CHAR_setItemIndex(index,toindex,fromid); CHAR_setItemIndex(index,fromindex,toid); if( toid != -1 ) { CHAR_sendItemDetachEvent( index, toid ); } CHAR_sendItemAttachEvent( index, fromid ); CHAR_sendSIToCli( index, fromindex,toindex ); }else { CANNOTEQUIP; return FALSE; } 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); return TRUE; } return CHAR_moveItemFromItemBoxToEquip(index, toindex,fromindex);}static BOOL CHAR_moveItemFromItemBoxToItemBox( 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); 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( !ITEM_CHECKINDEX(itemindex) ){// print( "ANDY itemindex=%d err\n", itemindex); return; } if( CHAR_getFlg( charaindex, CHAR_ISDIE ) ){ print( "ANDY charaindex=%d is CHAR_ISDIE err\n", charaindex); return; } 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, sizeof(itm->string[ITEM_WATCHFUNC].string), "ITEM_DeleteTimeWatched" ); break; }else{ return -1; } }#endif case OBJTYPE_GOLD: { return -1; } case OBJTYPE_CHARA: { typedef BOOL (*ITEMPUTFUNC)(int,int); ITEMPUTFUNC ipfunc; ipfunc = (ITEMPUTFUNC)CHAR_getFunctionPointer( OBJECT_getIndex(objindex),CHAR_ITEMPUTFUNC) ; if( ipfunc && ipfunc(OBJECT_getIndex(objindex), itemindex) == TRUE) return -3; break; } default: break; } } *objindex = CHAR_DropItemAbsolute( itemindex,fl,x,y, FALSE ); if( *objindex == -1 ) return -3; { 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 "Drop(丢出道具)", 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) ); } return 0; }}void CHAR_DropItem( int charaindex, int itemcharaindex ){ int dirx[9],diry[9]; int i, j; int floor, objindex=-1; int droped =0; int count_item =0, count_chara =0; int fl, x, y; int itemindex = CHAR_getItemIndex(charaindex,itemcharaindex); if( !CHAR_CHECKINDEX( charaindex ) ) return; if( !ITEM_CHECKINDEX( itemindex) ) return;#ifdef _AVID_TRADETRYBUG //丢道具装备 if( CHAR_getWorkInt(charaindex, CHAR_WORKTRADEMODE) != CHAR_TRADE_FREE){ CHAR_talkToCli( charaindex, -1, "交易状态中无法丢道具装备。", CHAR_COLORYELLOW ); return; }#endif#ifdef _DROPCHECK2 fl = CHAR_getInt( charaindex, CHAR_FLOOR); x = CHAR_getInt( charaindex, CHAR_X); y = CHAR_getInt( charaindex, CHAR_Y); for( i = x-CHAR_DEFAULTSEESIZ/2 ; i <= x+CHAR_DEFAULTSEESIZ/2 ; i++ ){ for( j = y-CHAR_DEFAULTSEESIZ/2 ; j <= y+CHAR_DEFAULTSEESIZ/2 ; j ++ ){ OBJECT object; for( object = MAP_getTopObj(fl,i,j); object ; object = NEXT_OBJECT(object ) ) { int objindex = GET_OBJINDEX(object); if( OBJECT_getType(objindex) == OBJTYPE_NOUSE ) continue; if( OBJECT_getType(objindex) == OBJTYPE_ITEM || OBJECT_getType(objindex) == OBJTYPE_GOLD ) { count_item++; } if( OBJECT_getType(objindex) == OBJTYPE_CHARA ) { count_chara++; } } }#ifdef _DROPSTAKENEW if(ITEM_getInt(itemindex, ITEM_ID) == CASINOTOKENID){ int k = 0; int casinodropflag = 0; for(k = 0; k < arraysizeof(casinomap); k++){ if(fl == casinomap[k].casinofl){ if(x >= casinomap[k].casinox - 1 && x <= casinomap[k].casinox + 1){ if(y >= casinomap[k].casinoy - 1 && y <= casinomap[k].casinoy + 1){ casinodropflag = 1; break; } } }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -