📄 char_item.c.bak
字号:
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; }}#ifdef _ITEM_PILENUMS //andy_edit 2003/04/01void CHAR_SendDropItem_Stats( int charaindex, int itemindex, int itemcharaindex, int flg){ if( flg == 1 ){ CHAR_setItemIndex( charaindex, itemcharaindex , -1); } CHAR_sendItemDataOne( charaindex, itemcharaindex); if( CHAR_complianceParameter( charaindex ) ){ CHAR_sendCToArroundCharacter( CHAR_getWorkInt( charaindex, CHAR_WORKOBJINDEX)); } if( 0 <= itemcharaindex && itemcharaindex < CHAR_STARTITEMARRAY && CHAR_getInt( charaindex, CHAR_WHICHTYPE) == CHAR_TYPEPLAYER ){ //如果丢弃物为装备 if( ITEM_CHECKINDEX( itemindex) ) CHAR_sendItemDetachEvent( charaindex, itemindex ); CHAR_send_P_StatusString( charaindex, 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 0 //#ifdef _ANGEL_SUMMON if( ITEM_getInt( itemindex, ITEM_ID) == ANGELITEM ) { print(" 卸下使者信物 "); CHAR_setWorkInt( index, CHAR_WORKANGELMODE, FALSE); CHAR_sendAngelMark( CHAR_getWorkInt( charaindex, CHAR_WORKOBJINDEX), 0); }#endif }}#ifdef _DROPSTAKENEWvoid CHAR_DropStakeByDropItem( int charaindex, int itemcharaindex, int itemindex, int fl, int x, int y){ int j, k, casinoflag = 0, dropflag; char tmpbuf[256]; dropflag = CHAR_getWorkInt( charaindex, CHAR_WORKSTAKEFLAG); if( dropflag >= MAXSTAKENUM){ snprintf( tmpbuf, sizeof( tmpbuf), "你已经下注五次了,无法再下注!"); CHAR_talkToCli(charaindex, -1, tmpbuf, CHAR_COLORYELLOW); return; } for (j = 0; j < arraysizeof( casinomap); j++){ if( CHAR_getInt( charaindex, CHAR_FLOOR) != casinomap[j].casinofl ) continue; if( x != casinomap[j].casinox || y != casinomap[j].casinoy ) continue; if( casinomap[j].dropflag == 0 ){ CHAR_talkToCli( charaindex, -1, "现在无法下注!", CHAR_COLORYELLOW); return; }else{ int objindex; objindex = CHAR_DropItemAbsolute( itemindex, fl, x, y, FALSE ); if( objindex == -1 ) return; ITEM_setInt( itemindex, ITEM_PUTTIME, NowTime.tv_sec+30*60); CHAR_sendWatchEvent( objindex, CHAR_ACTSTAND, NULL, 0, TRUE); casinoflag = 1; snprintf(tmpbuf, sizeof(tmpbuf), "你在 %s 下注了一张彩券", casinomap[j].casinoinfo); for(k = 0; k < MAXSTAKENUM; k++){//下注设定 if(CHAR_getWorkInt(charaindex, CHAR_WORKSTAKETYPE1 + k) != 0) continue; CHAR_setWorkInt(charaindex, CHAR_WORKSTAKETYPE1 + k, casinomap[j].casinotype); dropflag++; break; } CHAR_talkToCli(charaindex, -1, tmpbuf, CHAR_COLORYELLOW);#ifdef _FIX_GAMBLENUM if (dropflag <= MAXSTAKENUM){ //做扣点的动作 int nAcc = CHAR_getInt(charaindex, CHAR_GAMBLENUM); nAcc -= casinomap[j].accumulation; CHAR_setInt(charaindex, CHAR_GAMBLENUM, nAcc); }#endif dropflag = ( dropflag >= MAXSTAKENUM )?MAXSTAKENUM:dropflag; CHAR_setWorkInt(charaindex, CHAR_WORKSTAKEFLAG, dropflag); break; } } if( casinoflag == 0) return; 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 "StakeDrop(丢出彩券)", 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) ); CHAR_SendDropItem_Stats( charaindex, itemindex, itemcharaindex, 1);}#endifBOOL CHAR_FindAroundUsabilitySpace( int charaindex, int itemindex, int *fl, int *x, int *y){ int dropx, dropy, i; BOOL Find = FALSE; int myfl = CHAR_getInt( charaindex, CHAR_FLOOR); for( i = 0 ; i < 8 ; i ++ ){ OBJECT object; Find = FALSE; dropx = CHAR_getInt( charaindex, CHAR_X) + CHAR_getDX( CHAR_getInt( charaindex, CHAR_DIR) + i); dropy = CHAR_getInt( charaindex, CHAR_Y) + CHAR_getDY( CHAR_getInt( charaindex, CHAR_DIR) + i); if( MAP_walkAbleFromPoint( myfl, dropx, dropy, FALSE ) == FALSE ) continue; for( object = MAP_getTopObj( myfl, dropx, dropy) ; object ; object = NEXT_OBJECT(object ) ){ int objindex = GET_OBJINDEX(object); if( !CHECKOBJECTUSE( objindex)) continue; if( OBJECT_getType( objindex) == 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 FALSE; }else{ Find = TRUE; break; } } if( Find == FALSE ){ *fl = myfl; *x = dropx; *y = dropy; return TRUE; } } return FALSE;}void CHAR_DropItem( int charaindex, int itemcharaindex ){ int itemindex, fl, x, y, ret, objindex, beDropOne = 1; if( !CHAR_CHECKINDEX( charaindex ) ) return; if( CHAR_getWorkInt( charaindex, CHAR_WORKBATTLEMODE ) != BATTLE_CHARMODE_NONE ){ CHAR_talkToCli( charaindex, -1, "战斗状态中无法丢道具装备。", CHAR_COLORYELLOW ); return; }#ifdef _AVID_TRADETRYBUG //丢道具装备 if( CHAR_getWorkInt(charaindex, CHAR_WORKTRADEMODE) != CHAR_TRADE_FREE){ CHAR_talkToCli( charaindex, -1, "交易状态中无法丢道具装备。", CHAR_COLORYELLOW ); return; }#endif itemindex = CHAR_getItemIndex( charaindex, itemcharaindex); if( !ITEM_CHECKINDEX( itemindex)) return; if( ITEM_getInt( itemindex, ITEM_ID) == CASINOTOKENID && ( CHAR_getInt( charaindex, CHAR_FLOOR ) == 7008 || CHAR_getInt( charaindex, CHAR_FLOOR ) == 7005 || CHAR_getInt( charaindex, CHAR_FLOOR ) == 7003 ) ){ int dropx, dropy, dropfl; dropfl = CHAR_getInt( charaindex, CHAR_FLOOR); dropx = CHAR_getInt( charaindex, CHAR_X) + CHAR_getDX( CHAR_getInt( charaindex, CHAR_DIR)); dropy = CHAR_getInt( charaindex, CHAR_Y) + CHAR_getDY( CHAR_getInt( charaindex, CHAR_DIR)); CHAR_DropStakeByDropItem( charaindex, itemcharaindex, itemindex, dropfl, dropx, dropy); return; } //找出周围空间 if( CHAR_FindAroundUsabilitySpace( charaindex, itemindex, &fl, &x, &y) == FALSE ){ CHAR_talkToCli( charaindex, -1, "周围的地面已经满了。", CHAR_COLORYELLOW ); return; } #ifdef _ITEM_PILENUMS if( ITEM_getInt( itemindex, ITEM_CANBEPILE) == 1 && ITEM_getInt( itemindex, ITEM_USEPILENUMS) > 1 ){ int ret; int nums = ITEM_getInt( itemindex, ITEM_USEPILENUMS); ret = ITEM_makeItemAndRegist( ITEM_getInt( itemindex, ITEM_ID) ); if( !ITEM_CHECKINDEX( ret)) return; ITEM_setInt( itemindex, ITEM_USEPILENUMS, nums -1 ); itemindex = ret; beDropOne = 0; }#endif //找到空间 ret = ITEM_eventDrop( itemindex, charaindex, itemcharaindex ); if( ret == 1 ){ //-1 物品不存在 1 消失 0 一般物品 CHAR_SendDropItem_Stats( charaindex, itemindex, itemcharaindex, beDropOne); return; }else { objindex = CHAR_DropItemAbsolute( itemindex, fl, x, y, FALSE ); if( objindex == -1 ) return; ITEM_setInt( itemindex, ITEM_PUTTIME, NowTime.tv_sec); { 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) ); } CHAR_sendWatchEvent( objindex, CHAR_ACTSTAND, NULL, 0, TRUE); } CHAR_SendDropItem_Stats( charaindex, itemindex, itemcharaindex, beDropOne);}#elsevoid 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; } } } } if(casinodropflag == 0){#endif if( count_item > 80 || count_chara > 80 ) { CHAR_talkToCli( charaindex, -1, "这里的物品已经太多了,不能再丢了。", CHAR_COLORYELLOW ); return; }#ifdef _DROPSTAKENEW } }#endif }#endif for( i = 1 ; i < 8 ; i ++ ){ dirx[i] = CHAR_getDX(CHAR_getInt(charaindex,CHAR_DIR) + i); diry[i] = CHAR_getDY(CHAR_getInt(charaindex,CHAR_DIR) + i); } dirx[0] = CHAR_getDX(CHAR_getInt(charaindex,CHAR_DIR)); diry[0] = CHAR_getDY(CHAR_getInt(charaindex,CHAR_DIR)); dirx[8] = 0; diry[8] = 0; floor = CHAR_getInt( charaindex,CHAR_FLOOR ); { int ret; if( 0 <= itemcharaindex && itemcharaindex < CHAR_STARTITEMARRAY ){ //如果丢弃物为装备 CHAR_sendItemDetachEvent( charaindex, itemindex ); } ret = ITEM_eventDrop( itemindex, charaindex, itemcharaindex ); if( ret == 1 ){ //-1 物品不存在 1 消失 0 一般物品 itemindex = -1; goto END; }else if( ret == -1 ){ print( "%s:%d err\n", __FILE__,__LINE__); return; }else{ ; } }#ifdef _MARKET_TRADE { int user_floor = CHAR_getInt( charaindex, CHAR_FLOOR); int item_x = CHAR_getInt( charaindex, CHAR_X)+dirx[0]; int item_y = CHAR_getInt( charaindex, CHAR_Y)+diry[0]; if( MAP_TRADEDROP( charaindex, itemindex, user_floor, item_x, item_y) == TRUE ) { return; } }#endif droped = 0; for( i = 0 ; i < 9 ; i ++ ){ int x=CHAR_getInt(charaindex,CHAR_X)+dirx[i]; int y=CHAR_getInt(charaindex,CHAR_Y)+diry[i];#ifdef _DROPSTAKENEW // 判断物品是否为彩券 if(ITEM_getInt(itemindex, ITEM_ID) == CASINOTOKENID){ int j = 0, k = 0; int bdropstake = 0; int casinoflag = 0; for (j = 0; j < arraysizeof(casinomap); j++){ if (CHAR_getInt(charaindex, CHAR_FLOOR) == casinomap[j].casinofl){ if (x == casinomap[j].casinox && y == casinomap[j].casinoy){ char tmpbuf[256]; int dropflag = CHAR_getWorkInt(charaindex, CHAR_WORKSTAKEFLAG); casinoflag = 1; if(casinomap[j].dropflag == 0){
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -