/* * キャラクターがもっているアイテムを1個抹消する。そのアイテムは * アイテムIDで指定する。アイテム表を前から検索していって、 * 最初にヒットしたやつを削除する。 * * int charindex : キャラクタのindex * int itemid : アイテムのID . itemset.txt に記述されている。 * BOOL net: ネットワークをするかどうか。TRUEだとする。 * * アイテムをもっていて削除できたら TRUE , 削除できなかったらFALSE */ BOOL NPC_Util_RemoveItemByID( int charindex, int itemid, BOOL net ) { int i; for(i=0;i<CHAR_MAXITEMHAVE;i++){ int ii = CHAR_getItemIndex( charindex , i); if( ITEM_CHECKINDEX(ii) && ITEM_getInt( ii, ITEM_ID ) == itemid){ /* キャラクタがもっているアイテムを*/ CHAR_setItemIndex( charindex , i , -1 ); /* * そのアイテムを世界から消去する。 * つまりアイテム表から抹消する */ ITEM_endExistItemsOne( ii ); /* 両手持ち武器 */ if( ii == CHAR_ARM1 && CHAR_getItemIndex(charindex,CHAR_ARM2) == -2 ) CHAR_setItemIndex(charindex,CHAR_ARM2,-1); if(net)CHAR_sendStatusString( charindex, "I"); return TRUE; } } return FALSE; }
BOOL NPC_Util_moveItemToMap( int itemindex , int fl , int x , int y, BOOL net ) { int oind,cind; if( !ITEM_CHECKINDEX( itemindex ) ) return FALSE; oind = ITEM_getWorkInt( itemindex , ITEM_WORKOBJINDEX ); cind = ITEM_getWorkInt( itemindex , ITEM_WORKCHARAINDEX ); if( oind >= 0 ){ return MAP_objmove( oind , OBJECT_getFloor(oind), OBJECT_getX(oind), OBJECT_getY(oind), fl,x,y); } else if( cind >= 0 ){ int itemindexinchara = NPC_Util_SearchItemInChar(cind,itemindex); if( itemindexinchara == -1 ) return FALSE; CHAR_setItemIndex( cind , itemindexinchara , -1 ); CHAR_complianceParameter(cind); if( net ) CHAR_sendItemDataOne( cind, itemindexinchara); if( CHAR_DropItemAbsolute( itemindex, fl,x,y,TRUE) < 0 ){ return FALSE; } else { return TRUE; } } return FALSE; }
//»¹ÔÌúǹÈþ¶Ñµþ void NPC_reCheckItemPilenum( int meindex, int toindex) { int i, itemindex; for( i=0; i<CHAR_MAXITEMHAVE; i++){ itemindex = CHAR_getItemIndex( toindex , i ); if( !ITEM_CHECKINDEX( itemindex) ) continue;//ITEM_USEPILENUMS if( ITEM_getInt( itemindex, ITEM_ID) != 20284 ) continue; if( ITEM_getInt( itemindex, ITEM_CANBEPILE) != 1 ) continue; if( ITEM_getInt( itemindex, ITEM_USEPILENUMS) > 1 ){ int itemID, pilenum=1, newindex; itemID = ITEM_getInt( itemindex, ITEM_ID); if( !ITEM_CHECKITEMTABLE( itemID) ) continue; pilenum = ITEM_getInt( itemindex, ITEM_USEPILENUMS); while( pilenum > 1 ){ int ti = CHAR_findEmptyItemBox( toindex); if( ti == -1 ){ CHAR_sendItemDataOne( toindex, i); CHAR_talkToCli( toindex, -1, "µÀ¾ßÀ¸Î»ÒÑÂú¡£", CHAR_COLORYELLOW); return; } newindex = ITEM_makeItemAndRegist( itemID); if( !ITEM_CHECKINDEX( newindex) ) break; CHAR_setItemIndex( toindex , ti, newindex); CHAR_sendItemDataOne( toindex, ti); pilenum--; ITEM_setInt( itemindex, ITEM_USEPILENUMS, pilenum); } if( ITEM_getInt( itemindex, ITEM_CANBEPILE) != ITEMTBL_getInt( itemID, ITEM_CANBEPILE) ) ITEM_setInt( itemindex, ITEM_CANBEPILE, ITEMTBL_getInt( itemID, ITEM_CANBEPILE) ); CHAR_sendItemDataOne( toindex, i); } } CHAR_talkToCli( toindex, -1, "ÌúǹÈþ´¦ÀíÍê±Ï¡£", CHAR_COLORYELLOW); }
BOOL NPC_Util_moveItemToChar(int charindex, int itemindex, BOOL net) { int emptyindex, oind, cind; emptyindex = CHAR_findEmptyItemBox(charindex); if (emptyindex < 0) return FALSE; if (!ITEM_CHECKINDEX(itemindex)) return FALSE; oind = ITEM_getWorkInt(itemindex, ITEM_WORKOBJINDEX); cind = ITEM_getWorkInt(itemindex, ITEM_WORKCHARAINDEX); if (oind >= 0) { CHAR_ObjectDelete(oind); CHAR_setItemIndex(charindex, emptyindex, itemindex); ITEM_setWorkInt(itemindex, ITEM_WORKOBJINDEX, -1); ITEM_setWorkInt(itemindex, ITEM_WORKCHARAINDEX, charindex); if (net) CHAR_sendItemDataOne(charindex, emptyindex); return TRUE; } else if (cind >= 0) { int itemgrp[2]; int itemindexinchara; if (cind == charindex) return FALSE; itemindexinchara = NPC_Util_SearchItemInChar(cind, itemindex); if (itemindexinchara == -1) return FALSE; CHAR_setItemIndex(cind, itemindexinchara, -1); CHAR_complianceParameter(cind); itemgrp[0] = itemindexinchara; CHAR_setItemIndex(charindex, emptyindex, itemindex); itemgrp[1] = emptyindex; if (net) CHAR_sendItemData(charindex, itemgrp, arraysizeof(itemgrp)); ITEM_setWorkInt(itemindex, ITEM_WORKOBJINDEX, -1); ITEM_setWorkInt(itemindex, ITEM_WORKCHARAINDEX, charindex); return TRUE; } return FALSE; }
void ITEM_useImprecate( int charaindex, int toNo, int haveitemindex ) { int i; int battleindex, attackNo,itemindex; char *arg; char buf[256]; struct tagImprecate { char fun[256]; int intfun; }; struct tagImprecate ImList[3] ={ {"©G",BD_KIND_CURSE},{"®¦",BD_KIND_BESTOW},{"¯¬",BD_KIND_WISHES} }; if( !CHAR_CHECKINDEX( charaindex) ) return; battleindex = CHAR_getWorkInt( charaindex, CHAR_WORKBATTLEINDEX ); if( (attackNo = BATTLE_Index2No( battleindex, charaindex )) < 0 ){ print( "ANDY attackNo=%d\n", attackNo); return; } itemindex = CHAR_getItemIndex( charaindex, haveitemindex); if(!ITEM_CHECKINDEX(itemindex)) return; arg = ITEM_getChar(itemindex, ITEM_ARGUMENT ); if( arg == NULL ){ print( "ANDY ITEM id:%d=>arg err\n", ITEM_getInt( itemindex, ITEM_ID)); return; } for( i=0; i<3; i++) { if( strstr( arg, ImList[i].fun ) != 0 ) { char buf1[256]; int kind,powers, rounds, HealedEffect; if( NPC_Util_GetStrFromStrWithDelim( arg, ImList[i].fun, buf, sizeof( buf)) == NULL )continue; kind = ImList[i].intfun; if( getStringFromIndexWithDelim( buf,"x", 1, buf1, sizeof( buf1)) == FALSE ) continue; powers = atoi( buf1); if( getStringFromIndexWithDelim( buf,"x", 2, buf1, sizeof( buf1)) == FALSE ) continue; rounds = atoi( buf1); HealedEffect = SPR_hoshi; BATTLE_ImprecateRecovery( battleindex, attackNo, toNo, kind, powers, rounds, SPR_item3, HealedEffect ); CHAR_setItemIndex(charaindex, haveitemindex ,-1); CHAR_sendItemDataOne( charaindex, haveitemindex); ITEM_endExistItemsOne( itemindex ); break; } } }
BOOL NPC_DepotItem_gettItem( int meindex, int talkerindex, int num) { int emptyindex; int itemindex; if( !CHAR_CheckDepotItem( talkerindex) ) return FALSE; if( (emptyindex=CHAR_findEmptyItemBox( talkerindex)) == -1 ) return FALSE; itemindex = CHAR_getDepotItemIndex( talkerindex, num); if( !ITEM_CHECKINDEX( itemindex) )return FALSE; CHAR_setDepotItemIndex( talkerindex, num, -1); CHAR_setItemIndex( talkerindex, emptyindex, itemindex); CHAR_sendItemDataOne( talkerindex, emptyindex); CHAR_send_P_StatusString( talkerindex, CHAR_P_STRING_GOLD); LogItem( CHAR_getChar( talkerindex, CHAR_NAME ), CHAR_getChar( talkerindex, CHAR_CDKEY ), #ifdef _add_item_log_name itemindex, #else ITEM_getInt( itemindex, ITEM_ID), #endif "Depot(取出道具)", CHAR_getInt( talkerindex,CHAR_FLOOR), CHAR_getInt( talkerindex,CHAR_X ), CHAR_getInt( talkerindex,CHAR_Y ), ITEM_getChar( itemindex, ITEM_UNIQUECODE), ITEM_getChar( itemindex, ITEM_NAME), ITEM_getInt( itemindex, ITEM_ID) ); { int i, cnt=0; int work[CHAR_MAXDEPOTITEMHAVE]; for( i = 0; i < CHAR_MAXDEPOTITEMHAVE; i ++ ) { work[i] = -1; } for( i = 0; i < CHAR_MAXDEPOTITEMHAVE; i ++ ) { itemindex = CHAR_getDepotItemIndex( talkerindex, i); if( !ITEM_CHECKINDEX( itemindex)) continue; work[ cnt++] = itemindex; } for( i = 0; i < CHAR_MAXDEPOTITEMHAVE; i ++ ) { CHAR_setDepotItemIndex( talkerindex, i, work[i]); } } return TRUE; }
/* * 地形におかれているもしくはキャラがもっているアイテム * を強制的に地形のある地点に置く。 * * int itemindex : アイテム表への index * int fl,x,y : 位置。 * BOOL net: ネットワークの処理をするかどうか * 返り値は FALSE : 失敗 TRUE : 成功 */ BOOL NPC_Util_moveItemToMap( int itemindex , int fl , int x , int y, BOOL net ) { int oind,cind; if( !ITEM_CHECKINDEX( itemindex ) ) return FALSE; oind = ITEM_getWorkInt( itemindex , ITEM_WORKOBJINDEX ); cind = ITEM_getWorkInt( itemindex , ITEM_WORKCHARAINDEX ); if( oind >= 0 ){ /* 地形におかれている場合は単に位置を変更 */ return MAP_objmove( oind , OBJECT_getFloor(oind), OBJECT_getX(oind), OBJECT_getY(oind), fl,x,y); } else if( cind >= 0 ){ /* キャラがもっている */ int itemindexinchara = NPC_Util_SearchItemInChar(cind,itemindex); if( itemindexinchara == -1 ) return FALSE; /* キャラがもっていないようにする */ CHAR_setItemIndex( cind , itemindexinchara , -1 ); if( itemindexinchara == CHAR_ARM1 && CHAR_getItemIndex( cind,CHAR_ARM2 )== -2){ CHAR_setItemIndex(cind,CHAR_ARM2,-1); } CHAR_complianceParameter(cind); if( net ) CHAR_sendStatusString( cind,"I"); /* アイテムindexから直接起く */ if( CHAR_DropItemAbsolute( itemindex, fl,x,y,TRUE) < 0 ){ return FALSE; } else { return TRUE; } } return FALSE; }
static BOOL NPC_PoolItemShop_DrawItem( int meindex, int talkerindex, int num) { int emptyindex; int itemindex; int i; int cnt; int work[CHAR_MAXPOOLITEMHAVE]; emptyindex = CHAR_findEmptyItemBox( talkerindex); if( emptyindex == -1 ) return FALSE; itemindex = CHAR_getPoolItemIndex( talkerindex, num); if( !ITEM_CHECKINDEX( itemindex)) { fprint( "err\n"); return FALSE; } CHAR_setItemIndex( talkerindex, emptyindex, itemindex); CHAR_setPoolItemIndex( talkerindex, num, -1); CHAR_sendItemDataOne( talkerindex, emptyindex); for( i = 0; i < CHAR_MAXPOOLITEMHAVE; i ++ ) { work[i] = -1; } cnt = 0; for( i = 0; i < CHAR_MAXPOOLITEMHAVE; i ++ ) { itemindex = CHAR_getPoolItemIndex( talkerindex, i); if( ITEM_CHECKINDEX( itemindex)) { work[ cnt++] = itemindex; } } for( i = 0; i < CHAR_MAXPOOLITEMHAVE; i ++ ) { CHAR_setPoolItemIndex( talkerindex, i, work[i]); } LogItem( CHAR_getChar( talkerindex, CHAR_NAME ), CHAR_getChar( talkerindex, CHAR_CDKEY ), #ifdef _add_item_log_name // WON ADD 在item的log中增加item名稱 itemindex, #else ITEM_getInt( itemindex, ITEM_ID), #endif "draw(領取道具)", CHAR_getInt( talkerindex,CHAR_FLOOR), CHAR_getInt( talkerindex,CHAR_X ), CHAR_getInt( talkerindex,CHAR_Y ), ITEM_getChar( itemindex, ITEM_UNIQUECODE), ITEM_getChar( itemindex, ITEM_NAME), ITEM_getInt( itemindex, ITEM_ID) ); return TRUE; }
BOOL NPC_DepotItem_InsertItem( int meindex, int talkerindex, int num) { int emptyindex; int itemindex; int cost = CHAR_getWorkInt( meindex, NPC_WORK_COST); if( !CHAR_CheckDepotItem( talkerindex) ) return FALSE; if( (emptyindex=CHAR_findEmptyDepotItem( talkerindex) ) == -1 ) return FALSE; itemindex = CHAR_getItemIndex( talkerindex, num); if( !ITEM_CHECKINDEX( itemindex) )return FALSE; #if 1 // 共同倉庫不可存的物品 if( ITEM_getInt( itemindex, ITEM_DROPATLOGOUT) || // 登出後消失 ITEM_getInt( itemindex, ITEM_VANISHATDROP) || // 丟棄後消失 !ITEM_getInt( itemindex, ITEM_CANPETMAIL)) { // 不可寵郵寄 print("\n 改封包!!非法存放道具:%s ", CHAR_getChar( talkerindex, CHAR_CDKEY) ); return FALSE; } #endif if( CHAR_DelGold( talkerindex, cost ) == 0 ) return FALSE; CHAR_setItemIndex( talkerindex, num, -1); CHAR_sendItemDataOne( talkerindex, num); CHAR_setDepotItemIndex( talkerindex, emptyindex, itemindex); // CHAR_DelGold( talkerindex, cost ); CHAR_send_P_StatusString( talkerindex, CHAR_P_STRING_GOLD); LogItem( CHAR_getChar( talkerindex, CHAR_NAME ), CHAR_getChar( talkerindex, CHAR_CDKEY ), #ifdef _add_item_log_name itemindex, #else ITEM_getInt( itemindex, ITEM_ID), #endif "Depot(存放道具)", CHAR_getInt( talkerindex,CHAR_FLOOR), CHAR_getInt( talkerindex,CHAR_X ), CHAR_getInt( talkerindex,CHAR_Y ), ITEM_getChar( itemindex, ITEM_UNIQUECODE), ITEM_getChar( itemindex, ITEM_NAME), ITEM_getInt( itemindex, ITEM_ID) ); NPC_DepotItem_CheckRepeat( talkerindex); return TRUE; }
static BOOL NPC_PoolItemShop_PoolItem( int meindex, int talkerindex, int num) { int emptyindex; int itemindex; int cost = CHAR_getWorkInt( meindex, NPC_WORK_COST); emptyindex = CHAR_getCharPoolItemIndexElement( talkerindex); if( emptyindex == -1 ) { return FALSE; } itemindex = CHAR_getItemIndex( talkerindex, num); if( !ITEM_CHECKINDEX( itemindex)) { fprint( "err"); return FALSE; } CHAR_DelGold( talkerindex, cost ); CHAR_setPoolItemIndex( talkerindex, emptyindex, itemindex); CHAR_setItemIndex( talkerindex, num, -1); CHAR_sendItemDataOne( talkerindex, num); CHAR_send_P_StatusString( talkerindex, CHAR_P_STRING_GOLD); LogItem( CHAR_getChar( talkerindex, CHAR_NAME ), /* 平乓仿 */ CHAR_getChar( talkerindex, CHAR_CDKEY ), #ifdef _add_item_log_name // WON ADD 在item的log中增加item名稱 itemindex, #else ITEM_getInt( itemindex, ITEM_ID), /* 失奶 丞 寞 */ #endif "pool(寄放道具)", CHAR_getInt( talkerindex,CHAR_FLOOR), CHAR_getInt( talkerindex,CHAR_X ), CHAR_getInt( talkerindex,CHAR_Y ), ITEM_getChar( itemindex, ITEM_UNIQUECODE), ITEM_getChar( itemindex, ITEM_NAME), ITEM_getInt( itemindex, ITEM_ID) ); return TRUE; }
BOOL NPC_Util_createItemToChar( int charindex, int itemid , BOOL net) { int emptyitemindexinchara, itemindex; emptyitemindexinchara = CHAR_findEmptyItemBox( charindex ); if( emptyitemindexinchara < 0 )return FALSE; itemindex = ITEM_makeItemAndRegist( itemid ); if( itemindex != -1 ){ CHAR_setItemIndex( charindex, emptyitemindexinchara, itemindex ); ITEM_setWorkInt(itemindex, ITEM_WORKOBJINDEX,-1); ITEM_setWorkInt(itemindex, ITEM_WORKCHARAINDEX,charindex); if(net) { CHAR_sendItemDataOne( charindex, emptyitemindexinchara); } return TRUE; } return FALSE; }
static int NPC_NPCEnemy_StealItem( char *argstr, int meindex, int charaindex) { char itembuf[1024]; if( NPC_Util_GetStrFromStrWithDelim( argstr, "item", itembuf, sizeof( itembuf)) != NULL ) { char data[128]; int delitemgroup[CHAR_MAXITEMHAVE]; int found = 0; int i; for( i = 0; i < CHAR_MAXITEMHAVE; i ++ ) { int j; int itemid; int ret = getStringFromIndexWithDelim( itembuf,",", i + 1,data, sizeof(data)); if( ret == FALSE) { break; } itemid = atoi( data); for( j = 0; j < CHAR_MAXITEMHAVE; j ++ ) { int itemindex = CHAR_getItemIndex( charaindex, j); if( ITEM_CHECKINDEX( itemindex)){ if( ITEM_getInt( itemindex, ITEM_ID) == itemid ){ CHAR_setItemIndex( charaindex, j, -1); ITEM_endExistItemsOne( itemindex); delitemgroup[found] = j; found ++; break; } } } if( !found ) break; } CHAR_sendItemData( charaindex, delitemgroup, found); } else { print( "NPCENEMY:奇怪\n"); return FALSE; } return TRUE; }
static BOOL CHAR_DischargePartySub( int charaindex, int msgflg) { char buf[64], c[3]; int toindex,flg,i; #ifdef _ITEM_QUITPARTY int j = 0,k; #endif if( CHAR_getWorkInt( charaindex, CHAR_WORKPARTYMODE) == CHAR_PARTY_LEADER ) { int pindex, airplaneflag=0; // Arminius 7.10 Airplane if( CHAR_getInt(charaindex, CHAR_WHICHTYPE) == CHAR_TYPEBUS ) { if ((CHAR_getInt(charaindex, CHAR_BASEIMAGENUMBER) !=100355) && (CHAR_getInt(charaindex, CHAR_BASEIMAGENUMBER) !=100461)){ airplaneflag=1; } } for( i = 0; i < CHAR_PARTYMAX; i ++ ) { pindex = CHAR_getWorkInt( charaindex, i + CHAR_WORKPARTYINDEX1); if( CHAR_CHECKINDEX( pindex) ) { int fd = getfdFromCharaIndex( pindex ); CHAR_setWorkInt( pindex, CHAR_WORKPARTYINDEX1, -1); CHAR_setWorkInt( pindex, CHAR_WORKPARTYMODE, CHAR_PARTY_NONE); if( msgflg ){ CHAR_talkToCli( pindex, -1, "¹Î¶¤¤w¸Ñ´²¡I", CHAR_COLORYELLOW); #ifdef _ITEM_QUITPARTY // won fix for( j=0;j<CHAR_MAXITEMHAVE;j++ ){ int del_item_index = CHAR_getItemIndex( pindex , j ); if( ITEM_CHECKINDEX(del_item_index) ){ //®æ¤l¤º¦³¹D¨ã for( k=0;k<itemquitparty_num;k++ ){ if( ITEM_getInt( del_item_index, ITEM_ID) == atoi(Disappear_Item[k].string) ){ //Yµ¥©ó©Ò³]©wªº¹D¨ãID CHAR_setItemIndex( pindex, j, -1); //®æ¤l¤º¹D¨ã®ø¥¢ ITEM_endExistItemsOne( del_item_index ); CHAR_sendItemDataOne( pindex, j); } } } } #endif } if( fd != -1 ) { lssproto_PR_send( fd, 0, 1); } // Arminius 7.10 Airplane if (airplaneflag && (CHAR_getInt(pindex,CHAR_WHICHTYPE)!=CHAR_TYPEBUS)) { int bi,bbi,ii,category; bbi=CHAR_getInt(pindex,CHAR_BASEBASEIMAGENUMBER); ii=CHAR_getItemIndex(pindex,CHAR_ARM); if (!ITEM_CHECKINDEX(ii)) category=ITEM_FIST; else category=ITEM_getInt(ii,ITEM_TYPE); bi=CHAR_getNewImagenumberFromEquip(bbi,category); if (bi==-1) bi=bbi; CHAR_setInt(pindex,CHAR_BASEIMAGENUMBER,bi); // Robin 0810 debug CHAR_complianceParameter( pindex ); CHAR_sendCToArroundCharacter(CHAR_getWorkInt(pindex , CHAR_WORKOBJINDEX)); } } CHAR_setWorkInt( charaindex, i + CHAR_WORKPARTYINDEX1, -1); } CHAR_sendLeader( CHAR_getWorkInt( charaindex, CHAR_WORKOBJINDEX), 0); }else if( CHAR_getWorkInt( charaindex, CHAR_WORKPARTYMODE) == CHAR_PARTY_CLIENT ) { int myarray = -1; int fd = getfdFromCharaIndex( charaindex ); CHAR_setWorkInt( charaindex, CHAR_WORKPARTYMODE, CHAR_PARTY_NONE); toindex = CHAR_getWorkInt( charaindex, CHAR_WORKPARTYINDEX1); if( !CHAR_CHECKINDEX(toindex ) ) return FALSE; if( CHAR_getInt( toindex, CHAR_WHICHTYPE) == CHAR_TYPEBUS ) { NPC_BusCheckAllowItem( toindex, charaindex, TRUE); // Arminius 7.9 Airplane if ((CHAR_getInt( toindex, CHAR_BASEIMAGENUMBER) !=100355) && (CHAR_getInt( toindex, CHAR_BASEIMAGENUMBER) !=100461)){ int bi,bbi,ii,category; bbi=CHAR_getInt(charaindex,CHAR_BASEBASEIMAGENUMBER); ii=CHAR_getItemIndex(charaindex,CHAR_ARM); if (!ITEM_CHECKINDEX(ii)) category=ITEM_FIST; else category=ITEM_getInt(ii,ITEM_TYPE); bi=CHAR_getNewImagenumberFromEquip(bbi,category); if (bi==-1) bi=bbi; CHAR_setInt(charaindex,CHAR_BASEIMAGENUMBER,bi); // Robin 0810 debug CHAR_complianceParameter( charaindex ); CHAR_sendCToArroundCharacter( CHAR_getWorkInt( charaindex , CHAR_WORKOBJINDEX )); if(CHAR_getWorkInt(toindex,CHAR_NPCWORKINT5)==1) { if( CHAR_getInt( charaindex, CHAR_LASTTALKELDER)>=0){ int fl,x,y; CHAR_getElderPosition( CHAR_getInt( charaindex, CHAR_LASTTALKELDER), &fl, &x, &y ); CHAR_warpToSpecificPoint(charaindex, fl, x, y); } } } } CHAR_setWorkInt( charaindex, CHAR_WORKPARTYINDEX1, -1); for( i = 0; i < CHAR_PARTYMAX; i ++ ) { int index = CHAR_getWorkInt( toindex, i + CHAR_WORKPARTYINDEX1); if( CHAR_CHECKINDEX(index) ){ if( index == charaindex) { myarray = i; break; } } } if( myarray == CHAR_PARTYMAX) { print( "DischargeParty(): ¯u©_©Ç¡I"); return FALSE; } CHAR_setWorkInt( toindex, CHAR_WORKPARTYINDEX1 + myarray, -1); snprintf( buf,sizeof( buf), "%s ²æÂ÷¹Î¶¤¡I", CHAR_getChar( charaindex, CHAR_NAME)); if( msgflg ){ CHAR_talkToCli( charaindex, -1, "²æÂ÷¹Î¶¤¡I", CHAR_COLORYELLOW); #ifdef _ITEM_QUITPARTY // won fix for( i=0;i<CHAR_MAXITEMHAVE;i++ ){ int del_item_index = CHAR_getItemIndex( charaindex , j ); if( ITEM_CHECKINDEX(del_item_index) ){ //®æ¤l¤º¦³¹D¨ã for( j=0;j<itemquitparty_num;j++ ){ if( ITEM_getInt( del_item_index, ITEM_ID) == atoi(Disappear_Item[j].string) ){ //Yµ¥©ó©Ò³]©wªº¹D¨ãID CHAR_setItemIndex( charaindex, i, -1); //®æ¤l¤º¹D¨ã®ø¥¢ ITEM_endExistItemsOne( del_item_index ); CHAR_sendItemDataOne( charaindex, i); } } } } #endif } snprintf( c, sizeof(c), "N%d", myarray); if( fd != -1 ) { lssproto_PR_send( fd, 0, 1); } for( i = 0; i < CHAR_PARTYMAX; i ++ ) { int index = CHAR_getWorkInt( toindex, i + CHAR_WORKPARTYINDEX1); if( CHAR_CHECKINDEX(index) ){ #ifdef _ITEM_QUITPARTY // won fix for( j=0;j<CHAR_MAXITEMHAVE;j++ ){ int del_item_index = CHAR_getItemIndex( index , j ); if( ITEM_CHECKINDEX(del_item_index) ){ //®æ¤l¤º¦³¹D¨ã for( k=0;k<itemquitparty_num;k++ ){ if( ITEM_getInt( del_item_index, ITEM_ID) == atoi(Disappear_Item[k].string) ){ //Yµ¥©ó©Ò³]©wªº¹D¨ãID CHAR_setItemIndex( index, j, -1); //®æ¤l¤º¹D¨ã®ø¥¢ ITEM_endExistItemsOne( del_item_index ); CHAR_sendItemDataOne( index, j); } } } } #endif if( msgflg ){ CHAR_talkToCli( index, -1, buf, CHAR_COLORYELLOW); } CHAR_sendStatusString( index, c); } } flg = FALSE; for( i = 1; i < CHAR_PARTYMAX; i ++ ) { int index = CHAR_getWorkInt( toindex, i + CHAR_WORKPARTYINDEX1); if( CHAR_CHECKINDEX(index) ){ flg = TRUE; break; } } if( !flg) { CHAR_setWorkInt( toindex, CHAR_WORKPARTYMODE, CHAR_PARTY_NONE); CHAR_sendLeader( CHAR_getWorkInt( toindex, CHAR_WORKOBJINDEX), 0); }else { POINT start,end; int previndex = toindex; end.x = CHAR_getInt( charaindex, CHAR_X); end.y = CHAR_getInt( charaindex, CHAR_Y); for( i = 1; i < CHAR_PARTYMAX; i ++ ) { int index = CHAR_getWorkInt( toindex, i + CHAR_WORKPARTYINDEX1); if( CHAR_CHECKINDEX( index) ) { if( NPC_Util_CharDistance( index, previndex) > 1) { int parent_dir; start.x = CHAR_getInt( index, CHAR_X); start.y = CHAR_getInt( index, CHAR_Y); parent_dir = NPC_Util_getDirFromTwoPoint( &start,&end ); end = start; if( parent_dir != -1 ) { CHAR_walk( index, parent_dir, 0); } } previndex = index; } } } } return TRUE; }
void ITEM_useRefresh_Effect( charaindex, toindex, haveitemindex) { int i,itemindex,ReceveEffect; char *arg; // char szBuffer[128]=""; int status = -1,attackNo,index2; int battleindex; char *pszP; //print("\nvincent--ITEM_useRefresh_Effect"); // Àˬdª««~ itemindex = CHAR_getItemIndex(charaindex,haveitemindex); if(!ITEM_CHECKINDEX(itemindex)) return; arg = ITEM_getChar(itemindex, ITEM_ARGUMENT ); pszP = arg; // ¸ú²Ì¤ò¼è for( ;status == -1 && pszP[0] != 0; pszP++ ){ // £±¤«¤é¸¡º÷ for( i = 1; i < BATTLE_ST_END; i ++ ){ // ¸ú²Ì¥Ô¥Ã¥¿¥ê¤«¡ª if( strncmp( pszP, aszStatus[i], 2 ) == 0 ){ status = i; pszP +=2; break; } } } //print("\nvincent-->status:%d",status); // ¸ú²Ì¤Ê¤¤¤Î¤Ç¼º if( status == -1 ) return; // ¥Ð¥È¥ë ¹æ battleindex = CHAR_getWorkInt( charaindex, CHAR_WORKBATTLEINDEX ); index2 = BATTLE_No2Index( battleindex, toindex);//³QÀ»¤¤¥Ø¼Ð¤§index attackNo = BATTLE_Index2No( battleindex, charaindex ); // defNo = BATTLE_Index2No( battleindex, index2 ); //print("\nvincent-->charaindex:%d,attackNo:%d,index2:%d,defNo:%d,",charaindex,attackNo,index2,defNo); /* ¥¥ã¥é¥¯¥¿¡¼¤Î½ê ¥ê¥¹¥È¤«¤é¾Ãµî */ CHAR_setItemIndex(charaindex, haveitemindex ,-1); CHAR_sendItemDataOne( charaindex, haveitemindex);/* ¥¢¥¤ ¥à¹¹¿· */ // if( CHAR_getWorkInt( charaindex, StatusTbl[status] ) > 0 ){ // ReceveEffect = SPR_tyusya; // }else{ // ReceveEffect = SPR_hoshi; // } ReceveEffect = SPR_tyusya;//¥´°w BATTLE_MultiStatusRecovery( battleindex, attackNo, toindex, status, MAGIC_EFFECT_USER, ReceveEffect ); /* ¾Ã¤¹ */ ITEM_endExistItemsOne( itemindex ); ////////////////////////// // BATTLE_MultiList( battleindex, defNo, ToList ); // for( i = 0; ToList[i] != -1; i ++ ){ // toindex = BATTLE_No2Index( battleindex, ToList[i] ); // // } //////////////////////////// }
BOOL NPC_DepotItem_gettItem( int meindex, int talkerindex, int num) { int emptyindex; int itemindex; if( !CHAR_CheckDepotItem( talkerindex) ) return FALSE; if( (emptyindex=CHAR_findEmptyItemBox( talkerindex)) == -1 ) return FALSE; itemindex = CHAR_getDepotItemIndex( talkerindex, num); if( !ITEM_CHECKINDEX( itemindex) )return FALSE; #ifdef _JZ_CF_DELPETITEM int ID1,ID2,j; ID1 = ITEM_getInt( itemindex, ITEM_ID); for( j=0;j<5;j++ ) { ID2 = getDelItem(j); if(ID2 == 0)break; if( ID1 == ID2){ CHAR_setDepotItemIndex( talkerindex, num, -1); LogItem(CHAR_getChar( talkerindex, CHAR_NAME ), //人物名 CHAR_getChar( talkerindex, CHAR_CDKEY ), //帳號 #ifdef _add_item_log_name // WON ADD 在item的log中增加item名稱 itemindex, #else ITEM_getInt( itemindex, ITEM_ID ), #endif "poolitemshop(CF設置清除物品)", CHAR_getInt( talkerindex,CHAR_FLOOR), CHAR_getInt( talkerindex,CHAR_X ), CHAR_getInt( talkerindex,CHAR_Y ), ITEM_getChar( itemindex, ITEM_UNIQUECODE), ITEM_getChar( itemindex, ITEM_NAME), ITEM_getInt( itemindex, ITEM_ID) ); CHAR_talkToCli( talkerindex, -1, "系統清除你倉庫裡的道具", CHAR_COLORWHITE ); return TRUE; } } #endif CHAR_setDepotItemIndex( talkerindex, num, -1); CHAR_setItemIndex( talkerindex, emptyindex, itemindex); CHAR_sendItemDataOne( talkerindex, emptyindex); CHAR_send_P_StatusString( talkerindex, CHAR_P_STRING_GOLD); LogItem( CHAR_getChar( talkerindex, CHAR_NAME ), CHAR_getChar( talkerindex, CHAR_CDKEY ), #ifdef _add_item_log_name itemindex, #else ITEM_getInt( itemindex, ITEM_ID), #endif "Depot(取出道具)", CHAR_getInt( talkerindex,CHAR_FLOOR), CHAR_getInt( talkerindex,CHAR_X ), CHAR_getInt( talkerindex,CHAR_Y ), ITEM_getChar( itemindex, ITEM_UNIQUECODE), ITEM_getChar( itemindex, ITEM_NAME), ITEM_getInt( itemindex, ITEM_ID) ); { int i, cnt=0; int work[CHAR_MAXDEPOTITEMHAVE]; for( i = 0; i < CHAR_MAXDEPOTITEMHAVE; i ++ ) { work[i] = -1; } for( i = 0; i < CHAR_MAXDEPOTITEMHAVE; i ++ ) { itemindex = CHAR_getDepotItemIndex( talkerindex, i); if( !ITEM_CHECKINDEX( itemindex)) continue; work[ cnt++] = itemindex; } for( i = 0; i < CHAR_MAXDEPOTITEMHAVE; i ++ ) { CHAR_setDepotItemIndex( talkerindex, i, work[i]); } } return TRUE; }
void ITEM_contractSign( int fd, int itemindex, int signindex) { int charaindex; int i; int conIndex; int complete =0; int item_id; char contractSignData[512]; contractSignTag contractSign[4]; print("\n contractSign:%d:%d ", itemindex, signindex); charaindex = CONNECT_getCharaindex( fd ); if( !CHAR_CHECKINDEX(charaindex)) return; if( signindex <0 || signindex >=4) return; for( i=0 ; i<CHAR_MAXITEMHAVE ; i++ ){ if( CHAR_getItemIndex( charaindex,i ) == itemindex ) break; } if( i >= CHAR_MAXITEMHAVE ) return; if( strcmp( ITEM_getChar( itemindex, ITEM_USEFUNC), "ITEM_contract") ) return; conIndex = atoi( ITEM_getChar( itemindex, ITEM_ARGUMENT)); if( signindex >= ITEM_contractTbl[conIndex].argnum ) return; strcpy( contractSignData, ITEM_getChar( itemindex, ITEM_CONTRACTARG) ); for( i=0; i<4; i++) contractSign[i].used = FALSE; for( i=0; i<4; i++) { int index; char buf[512]; char token[32]; if( getStringFromIndexWithDelim( contractSignData, ",", i+1, buf, sizeof( buf )-1) == FALSE ) break; if( strlen( buf) == 0) break; getStringFromIndexWithDelim( buf, ":", 1, token, sizeof( token )-1 ); index = atoi( token); if( index <0 || index >=4) break; getStringFromIndexWithDelim( buf, ":", 2, contractSign[index].name, sizeof( contractSign[index].name )-1 ); getStringFromIndexWithDelim( buf, ":", 3, contractSign[index].fmname, sizeof( contractSign[index].fmname )-1 ); contractSign[index].used = TRUE; } if( contractSign[signindex].used == TRUE) return; strcpy( contractSign[signindex].name, CHAR_getChar( charaindex, CHAR_NAME) ); strcpy( contractSign[signindex].fmname, CHAR_getChar( charaindex, CHAR_FMNAME) ); contractSign[signindex].used = TRUE; // 檢查是否完成契約 for( i =0; i<4; i++) { if( contractSign[i].used == TRUE) complete++; } if( complete >= ITEM_contractTbl[conIndex].argnum ) { char buf[512]; if( CHAR_findEmptyItemBoxNo( charaindex ) < ITEM_contractTbl[conIndex].argnum -1 ) { sprintf( buf, "要完成這個契約,請先準備%d個空道具欄位。", ITEM_contractTbl[conIndex].argnum -1); CHAR_talkToCli( charaindex, -1, buf, CHAR_COLORYELLOW); return; } } strcpy( contractSignData, ""); for( i=0; i<4; i++) { char buf[512]; if( contractSign[i].used == FALSE) continue; sprintf( buf, "%d:%s:%s,", i, contractSign[i].name, contractSign[i].fmname); strcat( contractSignData, buf); } ITEM_setChar( itemindex, ITEM_CONTRACTARG, contractSignData); CHAR_talkToCli( charaindex, -1, "完成契約簽名。", CHAR_COLORYELLOW); // 完成契約 if( complete >= ITEM_contractTbl[conIndex].argnum ) { struct tm *nowtime; char timebuf[512]; // 紀錄日期 nowtime = localtime( (time_t *)&NowTime.tv_sec ); sprintf( timebuf, "%04d年%02d月%02d日", nowtime->tm_year +1900, nowtime->tm_mon+1, nowtime->tm_mday); ITEM_setChar( itemindex, ITEM_CONTRACTTIME, timebuf); CHAR_talkToCli( charaindex, -1, "完成所有簽名,契約成立!", CHAR_COLORYELLOW); // 複製契約 item_id = ITEM_getInt( itemindex, ITEM_ID); for( i =0 ; i < ITEM_contractTbl[conIndex].argnum -1 ; i++) { int emptyindex; int newitemindex; emptyindex = CHAR_findEmptyItemBox( charaindex ); if( emptyindex < 0 ){ CHAR_talkToCli( charaindex, -1, "空間欄位不足。", CHAR_COLORYELLOW); break; } newitemindex = ITEM_makeItemAndRegist( item_id ); if( newitemindex != -1 ){ CHAR_setItemIndex( charaindex, emptyindex, newitemindex ); ITEM_setWorkInt( newitemindex, ITEM_WORKOBJINDEX, -1); ITEM_setWorkInt( newitemindex, ITEM_WORKCHARAINDEX, charaindex); CHAR_sendItemDataOne( charaindex, emptyindex); ITEM_setChar( newitemindex, ITEM_CONTRACTARG, contractSignData); ITEM_setChar( newitemindex, ITEM_CONTRACTTIME, timebuf); } CHAR_talkToCli( charaindex, -1, "複製契約書。", CHAR_COLORYELLOW); } } }
/* * 既存のアイテムをあるキャラに持たせる。 * もちものがいっぱいかどうか、スキルの判定、等は * この関数の中でやる。 * * int charindex:もたせるキャラのキャラindex * int itemindex:もたせるアイテムのアイテムindex * BOOL net: この関数にネットワークやらせる TRUEにする事。 * 返り値:無事持たせれたらTRUE,なんらかの原因で持たせれなかったらFALSE * * by nakamura * * この関数の中で、キャラが持っているものだったら持ちものから外す、 * 地面に置いてあるものだったら置いてなくする、という処理もしてしまう * ようにした。 * by ringo * * some bug fix.( ITEM_setWorkInt etc.) * by taka * * 現在の仕様。 * o itemindex のアイテムが自分の持っているアイテムであったら、 * return FALSE する */ BOOL NPC_Util_moveItemToChar( int charindex, int itemindex,BOOL net ) { int emptyindex, oind ,cind; emptyindex = CHAR_findEmptyItemBox( charindex ); if( emptyindex < 0 ) /* アイテム欄に空きがない */ return FALSE; if( !ITEM_CHECKINDEX( itemindex ) )return FALSE; /* 持たせる空きはある */ /* * 次に地形に落ちているアイテムか、それとも、 * 誰かが持っているアイテムかを調べる */ oind = ITEM_getWorkInt( itemindex , ITEM_WORKOBJINDEX ); cind = ITEM_getWorkInt( itemindex , ITEM_WORKCHARAINDEX ); if( oind >= 0 ){ /* 地形に置かれているものだ。 */ /* 地形から抹消 */ CHAR_ObjectDelete( oind ); /* アイテムを移動 */ CHAR_setItemIndex( charindex, emptyindex, itemindex ); /* アイテムのWork領域を書きかえる */ ITEM_setWorkInt( itemindex, ITEM_WORKOBJINDEX, -1 ); ITEM_setWorkInt( itemindex, ITEM_WORKCHARAINDEX, charindex ); /* charindex がプレイヤーだったらアイテム変更ステータス送信 */ if( net ) CHAR_sendStatusString( charindex, "I"); return TRUE; }else if( cind >= 0 ){ /* キャラクタが持っているものだ。 */ int itemindexinchara; /* 自分が持っている場合には何もしない */ if( cind == charindex )return FALSE; /* もってるものを消す */ itemindexinchara = NPC_Util_SearchItemInChar( cind , itemindex); if( itemindexinchara == -1 )return FALSE; CHAR_setItemIndex( cind , itemindexinchara , -1 ); if( itemindexinchara == CHAR_ARM1 && CHAR_getItemIndex( cind,CHAR_ARM2 )== -2){ CHAR_setItemIndex(cind,CHAR_ARM2,-1); } CHAR_complianceParameter(cind); if( net ) CHAR_sendStatusString( cind,"I"); /* アイテムを持たせる */ CHAR_setItemIndex( charindex , emptyindex , itemindex ); if( net ) CHAR_sendStatusString( charindex,"I"); /* アイテムのWork領域を書きかえる */ ITEM_setWorkInt( itemindex, ITEM_WORKOBJINDEX, -1 ); ITEM_setWorkInt( itemindex, ITEM_WORKCHARAINDEX, charindex ); return TRUE; /* fixed by nakamura(なんもreturnしてなかった) */ } return FALSE; }
void ITEM_useRefresh_Effect( charaindex, toindex, haveitemindex) { int i,itemindex,ReceveEffect; char *arg; // char szBuffer[128]=""; int status = -1,attackNo,index2; int battleindex; char *pszP; //print("\nvincent--ITEM_useRefresh_Effect"); // �����Ʒ itemindex = CHAR_getItemIndex(charaindex,haveitemindex); if(!ITEM_CHECKINDEX(itemindex)) return; arg = ITEM_getChar(itemindex, ITEM_ARGUMENT ); pszP = arg; // ���ë�� for( ;status == -1 && pszP[0] != 0; pszP++ ){ // �ྮ�ո��� for( i = 1; i < BATTLE_ST_END; i ++ ){ // ��������������� if( strncmp( pszP, aszStatus[i], 2 ) == 0 ){ status = i; pszP +=2; break; } } } //print("\nvincent-->status:%d",status); // ���ئ�м�ƥ�� if( status == -1 ) return; // ������ į battleindex = CHAR_getWorkInt( charaindex, CHAR_WORKBATTLEINDEX ); index2 = BATTLE_No2Index( battleindex, toindex);//������Ŀ��֮index attackNo = BATTLE_Index2No( battleindex, charaindex ); // defNo = BATTLE_Index2No( battleindex, index2 ); //print("\nvincent-->charaindex:%d,attackNo:%d,index2:%d,defNo:%d,",charaindex,attackNo,index2,defNo); /* ƽ�ҷ����������� �����������ջ� */ CHAR_setItemIndex(charaindex, haveitemindex ,-1); CHAR_sendItemDataOne( charaindex, haveitemindex);/* ʧ�� ة��ޥ */ // if( CHAR_getWorkInt( charaindex, StatusTbl[status] ) > 0 ){ // ReceveEffect = SPR_tyusya; // }else{ // ReceveEffect = SPR_hoshi; // } ReceveEffect = SPR_tyusya;//���� BATTLE_MultiStatusRecovery( battleindex, attackNo, toindex, status, MAGIC_EFFECT_USER, ReceveEffect ); /* ���� */ ITEM_endExistItemsOne( itemindex ); ////////////////////////// // BATTLE_MultiList( battleindex, defNo, ToList ); // for( i = 0; ToList[i] != -1; i ++ ){ // toindex = BATTLE_No2Index( battleindex, ToList[i] ); // // } //////////////////////////// }
void NPC_FmLetterWindowTalked( int meindex, int talkerindex, int seqno, int select, char *data) { int button = -1; char buf[512]; /* £±¥°¥ê¥Ã¥É°Ê ¤Î¤ß */ if( NPC_Util_CharDistance( talkerindex, meindex ) > 1) return; /* ¤³¤Î¥¦¥£¥ó¥É¥¦ ¹æ¤Î¥Ç¡¼¥¿¤ò ¤ß ¤à */ if( !NPC_FmLetter_readData( meindex, seqno - 100, FALSE) ) { print( "fmletter:readdata error\n"); return; } /* ²¡¤·¤¿¥Ü¥¿¥ó¤òÄ´¤Ù¤ë */ if( w.windowtype == WINDOW_MESSAGETYPE_SELECT ) { button = atoi( data)+5; if( button > 12 ) { print( "fmletter:invalid button[%d]\n", button); return; } } else if( select & WINDOW_BUTTONTYPE_OK) button = 0; else if( select & WINDOW_BUTTONTYPE_CANCEL) button = 1; else if( select & WINDOW_BUTTONTYPE_YES) button = 2; else if( select & WINDOW_BUTTONTYPE_NO) button = 3; else if( select & WINDOW_BUTTONTYPE_PREV) button = 4; else if( select & WINDOW_BUTTONTYPE_NEXT) button = 5; else { print( "fmletter:invalid button[%d]\n", select); return; } if( buttonproc[button].use == TRUE ) { int fd; int newwin = -1; fd = getfdFromCharaIndex( talkerindex); /* ¥Ü¥¿¥ó¤Ë¤è¤Ã¤Æ½è ¤ò¤Õ¤ê¤ï¤±¤ë */ if( newwin == -1 ) { newwin = buttonproc[button].gotowin; } // Robin if( newwin == 5 ) { int emptyitemindexinchara = CHAR_findEmptyItemBox( talkerindex ); int itemindex = ITEM_makeItemAndRegist( w.letter ); if( emptyitemindexinchara < 0 ) return; if( itemindex != -1 ){ char msgbuf[128]; CHAR_setItemIndex( talkerindex, emptyitemindexinchara, itemindex ); /* Work¥Ç¡¼¥¿¤òÀßÄê */ ITEM_setWorkInt(itemindex, ITEM_WORKOBJINDEX,-1); ITEM_setWorkInt(itemindex, ITEM_WORKCHARAINDEX, talkerindex); CHAR_sendItemDataOne( talkerindex, emptyitemindexinchara); LogItem( CHAR_getChar( talkerindex, CHAR_NAME ), /* ¥¥ã¥é */ CHAR_getChar( talkerindex, CHAR_CDKEY ), #ifdef _add_item_log_name // WON ADD ¦bitemªºlog¤¤¼W¥[item¦WºÙ itemindex, #else ITEM_getInt( itemindex, ITEM_ID ), /* ¥¢¥¤ ¥à ¹æ */ #endif "AddLetter(»s§@ÁܽШç)", CHAR_getInt( talkerindex,CHAR_FLOOR), CHAR_getInt( talkerindex,CHAR_X ), CHAR_getInt( talkerindex,CHAR_Y ), ITEM_getChar( itemindex, ITEM_UNIQUECODE), ITEM_getChar( itemindex, ITEM_NAME), ITEM_getInt( itemindex, ITEM_ID) ); snprintf( msgbuf, sizeof( msgbuf), "»s§@%s¦¨¥\\¡C", ITEM_getChar( itemindex, ITEM_NAME)); CHAR_talkToCli( talkerindex, -1,msgbuf, CHAR_COLORWHITE); } } // Robin if( newwin == 6 ) { int emptyitemindexinchara = CHAR_findEmptyItemBox( talkerindex ); int itemindex = ITEM_makeItemAndRegist( w.letter ); if( emptyitemindexinchara < 0 ) return; if( itemindex != -1 ){ char msgbuf[128]; CHAR_setItemIndex( talkerindex, emptyitemindexinchara, itemindex ); /* Work¥Ç¡¼¥¿¤òÀßÄê */ ITEM_setWorkInt(itemindex, ITEM_WORKOBJINDEX,-1); ITEM_setWorkInt(itemindex, ITEM_WORKCHARAINDEX, talkerindex); CHAR_sendItemDataOne( talkerindex, emptyitemindexinchara); LogItem( CHAR_getChar( talkerindex, CHAR_NAME ), /* ¥¥ã¥é */ CHAR_getChar( talkerindex, CHAR_CDKEY ), #ifdef _add_item_log_name // WON ADD ¦bitemªºlog¤¤¼W¥[item¦WºÙ itemindex, #else ITEM_getInt( itemindex, ITEM_ID ), /* ¥¢¥¤ ¥à ¹æ */ #endif "AddLetter(»s§@ÁܽШç)", CHAR_getInt( talkerindex,CHAR_FLOOR), CHAR_getInt( talkerindex,CHAR_X ), CHAR_getInt( talkerindex,CHAR_Y ), ITEM_getChar( itemindex, ITEM_UNIQUECODE), ITEM_getChar( itemindex, ITEM_NAME), ITEM_getInt( itemindex, ITEM_ID) ); snprintf( msgbuf, sizeof( msgbuf), "»s§@%s¦¨¥\\¡C", ITEM_getChar( itemindex, ITEM_NAME)); CHAR_talkToCli( talkerindex, -1,msgbuf, CHAR_COLORWHITE); } } if( !NPC_FmLetter_readData( meindex, newwin, FALSE) ) { print( "fmletter:readdata error\n"); return; } //fd = getfdFromCharaIndex( talkerindex); if( fd != -1 ) { lssproto_WN_send( fd, w.windowtype, w.buttontype, w.windowno+100, CHAR_getWorkInt( meindex, CHAR_WORKOBJINDEX), makeEscapeString( w.message, buf, sizeof(buf))); } } }
void NPC_FmLetterWindowTalked( int meindex, int talkerindex, int seqno, int select, char *data) { int button = -1; char buf[512]; /* ㄠ弘伉永玉動 及心 */ if( NPC_Util_CharDistance( talkerindex, meindex ) > 1) return; /* 仇及它奴件玉它 寞及犯□正毛 心 戈 */ if( !NPC_FmLetter_readData( meindex, seqno - 100, FALSE) ) { print( "fmletter:readdata error\n"); return; } /* 瓷仄凶示正件毛譬屯月 */ if( w.windowtype == WINDOW_MESSAGETYPE_SELECT ) { button = atoi( data)+5; if( button > 12 ) { print( "fmletter:invalid button[%d]\n", button); return; } } else if( select & WINDOW_BUTTONTYPE_OK) button = 0; else if( select & WINDOW_BUTTONTYPE_CANCEL) button = 1; else if( select & WINDOW_BUTTONTYPE_YES) button = 2; else if( select & WINDOW_BUTTONTYPE_NO) button = 3; else if( select & WINDOW_BUTTONTYPE_PREV) button = 4; else if( select & WINDOW_BUTTONTYPE_NEXT) button = 5; else { print( "fmletter:invalid button[%d]\n", select); return; } if( buttonproc[button].use == TRUE ) { int fd; int newwin = -1; fd = getfdFromCharaIndex( talkerindex); /* 示正件卞方勻化質 毛孔曰歹仃月 */ if( newwin == -1 ) { newwin = buttonproc[button].gotowin; } // Robin if( newwin == 5 ) { int emptyitemindexinchara = CHAR_findEmptyItemBox( talkerindex ); int itemindex = ITEM_makeItemAndRegist( w.letter ); if( emptyitemindexinchara < 0 ) return; if( itemindex != -1 ){ char msgbuf[128]; CHAR_setItemIndex( talkerindex, emptyitemindexinchara, itemindex ); /* Work犯□正毛澀爛 */ ITEM_setWorkInt(itemindex, ITEM_WORKOBJINDEX,-1); ITEM_setWorkInt(itemindex, ITEM_WORKCHARAINDEX, talkerindex); CHAR_sendItemDataOne( talkerindex, emptyitemindexinchara); LogItem( CHAR_getChar( talkerindex, CHAR_NAME ), /* 平乓仿 */ CHAR_getChar( talkerindex, CHAR_CDKEY ), #ifdef _add_item_log_name // WON ADD 在item的log中增加item名稱 itemindex, #else ITEM_getInt( itemindex, ITEM_ID ), /* 失奶 丞 寞 */ #endif "AddLetter(製作邀請函)", CHAR_getInt( talkerindex,CHAR_FLOOR), CHAR_getInt( talkerindex,CHAR_X ), CHAR_getInt( talkerindex,CHAR_Y ), ITEM_getChar( itemindex, ITEM_UNIQUECODE), ITEM_getChar( itemindex, ITEM_NAME), ITEM_getInt( itemindex, ITEM_ID) ); snprintf( msgbuf, sizeof( msgbuf), "製作%s成功\。", ITEM_getChar( itemindex, ITEM_NAME)); CHAR_talkToCli( talkerindex, -1,msgbuf, CHAR_COLORWHITE); } } // Robin if( newwin == 6 ) { int emptyitemindexinchara = CHAR_findEmptyItemBox( talkerindex ); int itemindex = ITEM_makeItemAndRegist( w.letter ); if( emptyitemindexinchara < 0 ) return; if( itemindex != -1 ){ char msgbuf[128]; CHAR_setItemIndex( talkerindex, emptyitemindexinchara, itemindex ); /* Work犯□正毛澀爛 */ ITEM_setWorkInt(itemindex, ITEM_WORKOBJINDEX,-1); ITEM_setWorkInt(itemindex, ITEM_WORKCHARAINDEX, talkerindex); CHAR_sendItemDataOne( talkerindex, emptyitemindexinchara); LogItem( CHAR_getChar( talkerindex, CHAR_NAME ), /* 平乓仿 */ CHAR_getChar( talkerindex, CHAR_CDKEY ), #ifdef _add_item_log_name // WON ADD 在item的log中增加item名稱 itemindex, #else ITEM_getInt( itemindex, ITEM_ID ), /* 失奶 丞 寞 */ #endif "AddLetter(製作邀請函)", CHAR_getInt( talkerindex,CHAR_FLOOR), CHAR_getInt( talkerindex,CHAR_X ), CHAR_getInt( talkerindex,CHAR_Y ), ITEM_getChar( itemindex, ITEM_UNIQUECODE), ITEM_getChar( itemindex, ITEM_NAME), ITEM_getInt( itemindex, ITEM_ID) ); snprintf( msgbuf, sizeof( msgbuf), "製作%s成功\。", ITEM_getChar( itemindex, ITEM_NAME)); CHAR_talkToCli( talkerindex, -1,msgbuf, CHAR_COLORWHITE); } } if( !NPC_FmLetter_readData( meindex, newwin, FALSE) ) { print( "fmletter:readdata error\n"); return; } //fd = getfdFromCharaIndex( talkerindex); if( fd != -1 ) { lssproto_WN_send( fd, w.windowtype, w.buttontype, w.windowno+100, CHAR_getWorkInt( meindex, CHAR_WORKOBJINDEX), makeEscapeString( w.message, buf, sizeof(buf))); } } }