int BATTLE_ItemUseDelete( int charaindex, int haveitemindex ) { int itemindex; itemindex = CHAR_getItemIndex( charaindex, haveitemindex); if( ITEM_CHECKINDEX( itemindex ) == FALSE ) return 0; { 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 "BattleUse(ս����ʹ�õ��ĵ���)", 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_DelItemMess( charaindex, haveitemindex, 0); return 0; }
int BATTLE_ItemUseDelete( int charaindex, int haveitemindex ) { int itemindex; itemindex = CHAR_getItemIndex( charaindex, haveitemindex); if( ITEM_CHECKINDEX( itemindex ) == FALSE ) return 0; { LogItem( CHAR_getChar( charaindex, CHAR_NAME ), CHAR_getChar( charaindex, CHAR_CDKEY ), #ifdef _add_item_log_name // WON ADD ¦bitemªºlog¤¤¼W¥[item¦WºÙ itemindex, #else ITEM_getInt( itemindex, ITEM_ID ), #endif "BattleUse(¾Ô°«¤¤¨Ï¥Î±¼ªº¹D¨ã)", 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_DelItemMess( charaindex, haveitemindex, 0); return 0; }
static BOOL NPC_SimpleShopProcessSellMsg(char *msg, int shopindex, int playerindex ) { int sellwindowindex, itemtableindex,itemind, id; int price, tmpgold; char buf[64]; if(!CHAR_CHECKINDEX(shopindex)||!CHAR_CHECKINDEX(playerindex)) return -1; if( !getStringFromIndexWithDelim( msg,"|",4,buf,sizeof(buf) )){ return -1; } sellwindowindex = atoi(buf); itemtableindex = sellwindowindex + CHAR_STARTITEMARRAY; itemind = CHAR_getItemIndex(playerindex,itemtableindex ); if( ! ITEM_CHECKINDEX(itemind) ) return -1; price = ITEM_getInt( itemind, ITEM_COST ); if( price <= 0 || price > NPC_SIMPLESHOPMAXBUYPRICE ){ return -2; } price *= NPC_Util_sellRate(playerindex); CHAR_AddGold( playerindex, price ); CHAR_sendStatusString( playerindex , "P"); id = ITEM_getInt(itemind,ITEM_ID); { LogItem( CHAR_getChar( playerindex, CHAR_NAME ), /* ƽÅÒ·Â */ CHAR_getChar( playerindex, CHAR_CDKEY ), #ifdef _add_item_log_name // WON ADD ÔÚitemµÄlogÖÐÔö¼ÓitemÃû³Æ itemind, #else ITEM_getInt( itemind, ITEM_ID ), /* ʧÄÌ Ø© į */ #endif "Sell", CHAR_getInt( playerindex,CHAR_FLOOR), CHAR_getInt( playerindex,CHAR_X ), CHAR_getInt( playerindex,CHAR_Y ), ITEM_getChar( itemind, ITEM_UNIQUECODE), ITEM_getChar( itemind, ITEM_NAME), ITEM_getInt( itemind, ITEM_ID) ); } if( ! NPC_Util_moveItemToChar( shopindex,itemind,TRUE ) ){ return -1; } NPC_Util_RemoveItemByID(shopindex,id,FALSE); return 1; }
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; }
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; }
void ITEM_useMagic_Battle( int charaindex, int toNo, int haveitemindex ) { int itemindex,itemmaxuse; char *arg=NULL; itemindex = CHAR_getItemIndex( charaindex, haveitemindex); if(!ITEM_CHECKINDEX(itemindex)) return; arg = ITEM_getChar( itemindex, ITEM_ARGUMENT ); CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM2, toNo ); CHAR_setWorkInt( charaindex, CHAR_WORKBATTLECOM1, BATTLE_COM_JYUJYUTU ); CHAR_SETWORKINT_LOW( charaindex, CHAR_WORKBATTLECOM3, atoi(arg) ); CHAR_SETWORKINT_HIGH( charaindex, CHAR_WORKBATTLECOM3, 0 ); CHAR_setWorkInt( charaindex, CHAR_WORKBATTLEMODE, BATTLE_CHARMODE_C_OK ); MAGIC_DirectUse( charaindex, CHAR_GETWORKINT_LOW( charaindex, CHAR_WORKBATTLECOM3 ), CHAR_getWorkInt( charaindex, CHAR_WORKBATTLECOM2 ), CHAR_GETWORKINT_HIGH( charaindex, CHAR_WORKBATTLECOM3 ) ); itemmaxuse = ITEM_getInt( itemindex, ITEM_DAMAGEBREAK); if( itemmaxuse > 0 ) ITEM_setInt( itemindex, ITEM_DAMAGEBREAK, itemmaxuse-1 ); else{ LogItem( CHAR_getChar( charaindex, CHAR_NAME ), CHAR_getChar( charaindex, CHAR_CDKEY ), #ifdef _add_item_log_name // WON ADD ¦bitemªºlog¤¤¼W¥[item¦WºÙ itemindex, #else ITEM_getInt( itemindex, ITEM_ID ), #endif "BattleUse(¾Ô°«¤¤¨Ï¥Î±¼ªº¹D¨ã)", 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_DelItemMess( charaindex, haveitemindex, 0); } }
static VOID FatalError(char *pszFmt,...) { char szBuffer[512]; va_list ap; va_start(ap, pszFmt); vsprintf(szBuffer, pszFmt, ap); va_end(ap); LogItem(SYSSETUP_SEVERITY_FATAL_ERROR, L"Failed"); strcat(szBuffer, "\nRebooting now!"); MessageBoxA(NULL, szBuffer, "ReactOS Setup", MB_OK); }
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; }
void NPC_DepotItem_CheckRepeat_Del( int charaindex, int ti, int itemindex) { char token[256]; sprintf( token, "倉庫道具%s,編碼重複!(系統清除)", ITEM_getChar( itemindex, ITEM_NAME)); CHAR_talkToCli( charaindex, -1, token, CHAR_COLORYELLOW); LogItem( CHAR_getChar( charaindex, CHAR_NAME ), CHAR_getChar( charaindex, CHAR_CDKEY ), #ifdef _add_item_log_name itemindex, #else ITEM_getInt( itemindex, ITEM_ID), #endif "repeat(倉庫道具重複)", 0, 0, 0, ITEM_getChar( itemindex, ITEM_UNIQUECODE), ITEM_getChar( itemindex, ITEM_NAME), ITEM_getInt( itemindex, ITEM_ID) ); CHAR_setDepotItemIndex( charaindex, ti, -1); ITEM_endExistItemsOne( itemindex); }
int AngelCreate( int angelindex) { int emptyitem1, emptyitem2; int angeltokenindex, herotokenindex; char msgbuf[1024]/*, nameinfo[1024]*/; int mindex, mission; char heroname[64]; if( !CHAR_CHECKINDEX( angelindex)) return FALSE; print(" 天使答应了!! "); mindex = checkIfAngel( angelindex); if( mindex == -1 || missiontable[mindex].flag == MISSION_TIMEOVER ) { //print("\n ANGEL错误!!Table逾时或无资料??:%d ", angelindex ); CHAR_talkToCli( angelindex, -1, "很抱歉,你太晚回答,已经逾时了。", CHAR_COLORYELLOW); sprintf( msgbuf, " 回答逾时或无资料 i:%d 使者:%s %s ", mindex, CHAR_getChar( angelindex, CHAR_CDKEY), CHAR_getChar( angelindex, CHAR_NAME)); print( msgbuf); LogAngel( msgbuf); return FALSE; } if( missiontable[mindex].flag != MISSION_WAIT_ANSWER ) { print(" 旗标不符:%d ", missiontable[mindex].flag); return FALSE; } if( CHAR_findEmptyItemBoxNo( angelindex ) < 2 ){ CHAR_talkToCli( angelindex, -1, "空间栏位不足。至少要有两个空道具栏位。", CHAR_COLORYELLOW); return TRUE; } getStringFromIndexWithDelim( missiontable[mindex].heroinfo, ":", 2, heroname, sizeof(heroname)); angeltokenindex = ITEM_makeItemAndRegist( ANGELITEM ); if( angeltokenindex != -1 ){ /*if( ITEM_getInt( angeltokenindex, ITEM_TYPE) != ITEM_ANGELTOKEN) { print(" 制作使者信物失败 "); ITEM_endExistItemsOne( angeltokenindex); return; }*/ //sprintf( nameinfo, "%s:%s", CHAR_getChar( angelindex, CHAR_CDKEY), CHAR_getChar( angelindex, CHAR_NAME ) ); ITEM_setChar( angeltokenindex, ITEM_ANGELINFO, missiontable[mindex].angelinfo); ITEM_setChar( angeltokenindex, ITEM_HEROINFO, missiontable[mindex].heroinfo); sprintf( msgbuf, "%d", missiontable[mindex].mission); ITEM_setChar( angeltokenindex, ITEM_ANGELMISSION, msgbuf); //sprintf( msgbuf, "%s(%s)", ITEM_getChar( angeltokenindex, ITEM_NAME), CHAR_getChar( angelindex, CHAR_NAME ) ); //ITEM_setChar( angeltokenindex, ITEM_NAME, msgbuf); //ITEM_setChar( angeltokenindex, ITEM_SECRETNAME, msgbuf); //sprintf( msgbuf, "这是使者 %s 与勇者 %s 专属的信物", CHAR_getChar( angelindex, CHAR_NAME), heroname ); sprintf( msgbuf, "精灵使者 %s 的信物,装备後不遇敌。", CHAR_getChar( angelindex, CHAR_NAME) ); ITEM_setChar( angeltokenindex, ITEM_EFFECTSTRING, msgbuf); emptyitem1 = CHAR_addItemSpecificItemIndex( angelindex, angeltokenindex); CHAR_sendItemDataOne( angelindex, emptyitem1); LogItem( CHAR_getChar( angelindex, CHAR_NAME ), CHAR_getChar( angelindex, CHAR_CDKEY ), angeltokenindex, "AddItem(制作道具 使者信物)", CHAR_getInt( angelindex,CHAR_FLOOR), CHAR_getInt( angelindex,CHAR_X ), CHAR_getInt( angelindex,CHAR_Y ), ITEM_getChar( angeltokenindex, ITEM_UNIQUECODE), ITEM_getChar( angeltokenindex, ITEM_NAME), ITEM_getInt( angeltokenindex, ITEM_ID) ); CHAR_talkToCli( angelindex, -1,"得到使者的信物。", CHAR_COLORYELLOW); }else{ print("制作使者的信物失败。" ); return FALSE; } herotokenindex = ITEM_makeItemAndRegist( HEROITEM ); if( herotokenindex != -1 ){ /*if( ITEM_getInt( herotokenindex, ITEM_TYPE) != ITEM_HEROTOKEN) { print(" 制作勇者信物失败 "); ITEM_endExistItemsOne( herotokenindex); ITEM_endExistItemsOne( angeltokenindex); CHAR_sendItemDataOne( angelindex, emptyitem1); return; }*/ //sprintf( nameinfo, "%s:%s", CHAR_getChar( angelindex, CHAR_CDKEY), CHAR_getChar( angelindex, CHAR_NAME ) ); ITEM_setChar( herotokenindex, ITEM_ANGELINFO, missiontable[mindex].angelinfo); ITEM_setChar( herotokenindex, ITEM_HEROINFO, missiontable[mindex].heroinfo); sprintf( msgbuf, "%d", missiontable[mindex].mission); ITEM_setChar( herotokenindex, ITEM_ANGELMISSION, msgbuf); //sprintf( msgbuf, "%s(%s)", ITEM_getChar( herotokenindex, ITEM_NAME), heroname ); //ITEM_setChar( herotokenindex, ITEM_NAME, msgbuf); //ITEM_setChar( herotokenindex, ITEM_SECRETNAME, msgbuf); //sprintf( msgbuf, "这是勇者 %s 与使者 %s 专属的信物", heroname, CHAR_getChar( angelindex, CHAR_NAME) ); sprintf( msgbuf, "勇者 %s 的信物,使者使用可传送至勇者身边。", heroname ); ITEM_setChar( herotokenindex, ITEM_EFFECTSTRING, msgbuf); emptyitem2 = CHAR_addItemSpecificItemIndex( angelindex, herotokenindex); CHAR_sendItemDataOne( angelindex, emptyitem2); LogItem( CHAR_getChar( angelindex, CHAR_NAME ), CHAR_getChar( angelindex, CHAR_CDKEY ), herotokenindex, "AddItem(制作道具 勇者信物)", CHAR_getInt( angelindex,CHAR_FLOOR), CHAR_getInt( angelindex,CHAR_X ), CHAR_getInt( angelindex,CHAR_Y ), ITEM_getChar( herotokenindex, ITEM_UNIQUECODE), ITEM_getChar( herotokenindex, ITEM_NAME), ITEM_getInt( herotokenindex, ITEM_ID) ); CHAR_talkToCli( angelindex, -1,"得到勇者的信物。", CHAR_COLORYELLOW); }else{ print("制作勇者的信物失败。" ); ITEM_endExistItemsOne( angeltokenindex); CHAR_sendItemDataOne( angelindex, emptyitem1); return FALSE; } // 更新至AC Server //sprintf( nameinfo, "%s:%s", CHAR_getChar( angelindex, CHAR_CDKEY), CHAR_getChar( angelindex, CHAR_NAME ) ); sprintf( msgbuf, "%s|%d", missiontable[mindex].angelinfo, missionlist[missiontable[mindex].mission].limittime ); saacproto_ACMissionTable_send( acfd, MISSION_DOING, 4, msgbuf, ""); //CHAR_talkToCli( angelindex, -1, "天之声:非常感谢你答应帮忙,那我就将信物交给你了,请将勇者的信物转交给勇者。", CHAR_COLORYELLOW); lssproto_WN_send( getfdFromCharaIndex(angelindex), WINDOW_MESSAGETYPE_MESSAGE, WINDOW_BUTTONTYPE_YES, -1, -1, "非常感谢你答应帮忙,那我就将信物交给你了,请将勇者的信物转交给勇者。"); sprintf( msgbuf, " 使者答应帮忙了 i:%d 使者:%s 勇者:%s ci=%d ", mindex, missiontable[mindex].angelinfo, missiontable[mindex].heroinfo, angelindex); print( msgbuf); LogAngel( msgbuf); return FALSE; }
BOOL NPC_JankenEntryItemDel(int talker,char *buf) { int i = 1, j = 1,k = 1; char buff3[128]; char buf2[32]; int itemindex; while(getStringFromIndexWithDelim(buf , "," , k, buff3, sizeof(buff3)) !=FALSE ){ k++; if(strstr(buff3, "*") !=NULL){ int itemno; int kosuu; int id; int cnt=0; getStringFromIndexWithDelim(buff3,"*",1,buf2,sizeof(buf2)); itemno = atoi(buf2); getStringFromIndexWithDelim(buff3,"*",2,buf2,sizeof(buf2)); kosuu = atoi(buf2); for( i =0 ; i < CHAR_MAXITEMHAVE ; i++ ){ itemindex = CHAR_getItemIndex( talker , i ); if( ITEM_CHECKINDEX(itemindex) ){ id=ITEM_getInt(itemindex ,ITEM_ID ); if(itemno==id){ cnt++; LogItem( CHAR_getChar( talker, CHAR_NAME ), /* ƽ�ҷ� */ CHAR_getChar( talker, CHAR_CDKEY ), #ifdef _add_item_log_name // WON ADD ��item��log������item���� itemindex, #else ITEM_getInt( itemindex, ITEM_ID), /* ʧ�� ة į */ #endif "QuizDelItem(����->��������)", CHAR_getInt( talker, CHAR_FLOOR), CHAR_getInt( talker, CHAR_X ), CHAR_getInt( talker, CHAR_Y ), ITEM_getChar( itemindex, ITEM_UNIQUECODE), ITEM_getChar( itemindex, ITEM_NAME), ITEM_getInt( itemindex, ITEM_ID) ); CHAR_DelItem( talker, i); if(cnt == kosuu){ break; } } } } }else{ /*--���Ϸ� į��ʧ�� ةë����---*/ for( j = 0 ; j < CHAR_MAXITEMHAVE ; j++){ itemindex = CHAR_getItemIndex( talker ,j); if( ITEM_CHECKINDEX(itemindex) ){ if( atoi( buff3) == ITEM_getInt(itemindex,ITEM_ID)){ LogItem( CHAR_getChar( talker, CHAR_NAME ), /* ƽ�ҷ� */ CHAR_getChar( talker, CHAR_CDKEY ), #ifdef _add_item_log_name // WON ADD ��item��log������item���� itemindex, #else ITEM_getInt( itemindex, ITEM_ID), /* ʧ�� ة į */ #endif "QuizDelItem(����->��������)", CHAR_getInt( talker,CHAR_FLOOR), CHAR_getInt( talker,CHAR_X ), CHAR_getInt( talker,CHAR_Y ), ITEM_getChar( itemindex, ITEM_UNIQUECODE), ITEM_getChar( itemindex, ITEM_NAME), ITEM_getInt( itemindex, ITEM_ID) ); CHAR_DelItem( talker, j); } } } } } return TRUE; }
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))); } } }
void ITEM_useRecovery_Battle( int charaindex, int toNo, int haveitemindex ) { #ifdef _CHANGEITEMUSE // Syu ADD ½Õ¾ã¾Ô°«¤¤¨Ï¥Î®Æ²z³]©w int power1 = 0; #endif int power = 0, per = 0, HealedEffect=0; int battleindex, attackNo,itemindex, kind = BD_KIND_HP; char *p = NULL, *arg; itemindex = CHAR_getItemIndex( charaindex, haveitemindex); if(!ITEM_CHECKINDEX(itemindex)) return; arg = ITEM_getChar(itemindex, ITEM_ARGUMENT ); #ifdef _CHANGEITEMUSE // Syu ADD ½Õ¾ã¾Ô°«¤¤¨Ï¥Î®Æ²z³]©w if( ((p = strstr( arg, "Åé" )) != NULL) && ((p = strstr( arg,"®ð")) != NULL)) { kind = BD_KIND_HP_MP; p = strstr( arg,"®ð"); if( sscanf( p+2, "%d", &power1 ) != 1 ) { power1 = 0; } p = strstr( arg,"Åé"); } else if( (p = strstr( arg, "Åé" )) != NULL ) #else if( (p = strstr( arg, "Åé" )) != NULL ) #endif { kind = BD_KIND_HP; } else if( (p = strstr( arg, "®ð" )) != NULL ) { kind = BD_KIND_MP; } else #ifdef _ITEM_UNBECOMEPIG if( (p = strstr( arg, "¸Ñ½Þ" )) != NULL ){ kind = BD_KIND_UNBECOMEPIG; HealedEffect = 100608; //¯S®Ä½s¸¹ } else #endif #ifdef _ITEM_LVUPUP if( (p = strstr( arg, "LVUPUP" )) != NULL ){ return; } else #endif #ifdef _ITEM_PROPERTY if( (p = strstr( arg, "PROPERTY" )) != NULL ){ kind = BD_KIND_PROPERTY; HealedEffect = 100608; //¯S®Ä½s¸¹ if( strstr( arg, "+" ) ) power = 1; else if( strstr( arg, "-" ) ) power = 2; } else #endif #ifdef _ITEM_ADDPETEXP if( (p = strstr( arg, "GETEXP" )) != NULL ){ return; } else #endif return; #ifdef _ITEM_UNBECOMEPIG if( HealedEffect != 100608 ){ #endif if( sscanf( p+2, "%d", &power ) != 1 ) power = 0; if( power <= 100 ) HealedEffect = SPR_heal;//SPR_hoshi else if( power <= 300 ) HealedEffect = SPR_heal2; else HealedEffect = SPR_heal3; #ifdef _ITEM_UNBECOMEPIG } #endif battleindex = CHAR_getWorkInt( charaindex, CHAR_WORKBATTLEINDEX ); attackNo = BATTLE_Index2No( battleindex, charaindex ); if( attackNo < 0 )return; #ifdef _CHANGEITEMUSE // Syu ADD ½Õ¾ã¾Ô°«¤¤¨Ï¥Î®Æ²z³]©w BATTLE_MultiRecovery( battleindex, attackNo, toNo, kind, power, per, SPR_item3, HealedEffect , power1); #else BATTLE_MultiRecovery( battleindex, attackNo, toNo, kind, power, per, SPR_item3, HealedEffect ); #endif { LogItem( CHAR_getChar( charaindex, CHAR_NAME ), CHAR_getChar( charaindex, CHAR_CDKEY ), #ifdef _add_item_log_name // WON ADD ¦bitemªºlog¤¤¼W¥[item¦WºÙ itemindex, #else ITEM_getInt( itemindex, ITEM_ID ), #endif "BattleUse(¾Ô°«¤¤¨Ï¥Î±¼ªº¹D¨ã)", 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_DelItemMess( charaindex, haveitemindex, 0); }
void ITEM_useMRecovery_Battle( int charaindex, int toNo, int haveitemindex ) { int battleindex, attackNo, itemindex; int turn=0, magicid, marray; char buf1[256]; char *arg=NULL; battleindex = CHAR_getWorkInt( charaindex, CHAR_WORKBATTLEINDEX ); if( BATTLE_CHECKINDEX( battleindex ) == FALSE ) return; if( (attackNo = BATTLE_Index2No( battleindex, charaindex )) == -1 ) return; itemindex = CHAR_getItemIndex( charaindex, haveitemindex); if(!ITEM_CHECKINDEX(itemindex)) return; arg = ITEM_getChar( itemindex, ITEM_ARGUMENT ); if( getStringFromIndexWithDelim( arg, ":", 2, buf1, sizeof(buf1)) ==FALSE ) return; turn = atoi( buf1); if( getStringFromIndexWithDelim( arg, ":", 1, buf1, sizeof(buf1)) ==FALSE ) return; if( strstr( buf1, "¥þ" ) != NULL ){ }else{ } magicid = ITEM_getInt( itemindex, ITEM_MAGICID); marray = MAGIC_getMagicArray( magicid); if( marray == -1 ) return; if( IsBATTLING( charaindex ) == TRUE ){ int i, status=-1; char *magicarg=NULL, *pszP=NULL; #ifdef _PREVENT_TEAMATTACK //¥úÃè¦u..¤£±o¨Ï¥Î¼Ä¤è int battleindex = CHAR_getWorkInt( charaindex, CHAR_WORKBATTLEINDEX ); if( CHAR_getInt( charaindex, CHAR_WHICHTYPE ) == CHAR_TYPEPLAYER //&& BattleArray[battleindex].type != BATTLE_TYPE_P_vs_P ){ if( BATTLE_CheckSameSide( charaindex, toNo) == 0 ){//¤£¦PÃä int battleindex = CHAR_getWorkInt( charaindex, CHAR_WORKBATTLEINDEX ); BATTLE_NoAction( battleindex, BATTLE_Index2No( battleindex, charaindex) ); CHAR_talkToCli( charaindex, -1, "¥úÃè¦u..¤£±o¬I¤©«Dª±®a¼Ä¤è¡C", CHAR_COLORYELLOW); return; } } #endif magicarg = MAGIC_getChar( marray, MAGIC_OPTION ); pszP = magicarg; for( ;status == -1 && pszP[0] != 0; pszP++ ){ for( i = 1; i < BATTLE_MD_END; i ++ ){ if( strncmp( pszP, aszMagicDef[i], 2 ) == 0 ){ status = i; pszP +=2; break; } } } if( status == -1 ) return; BATTLE_MultiMagicDef( battleindex, attackNo, toNo, status, turn, MAGIC_EFFECT_USER, SPR_difence ); LogItem( CHAR_getChar( charaindex, CHAR_NAME ), CHAR_getChar( charaindex, CHAR_CDKEY ), #ifdef _add_item_log_name // WON ADD ¦bitemªºlog¤¤¼W¥[item¦WºÙ itemindex, #else ITEM_getInt( itemindex, ITEM_ID ), #endif "BattleUse(¾Ô°«¤¤¨Ï¥Î±¼ªº¹D¨ã)", 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_DelItemMess( charaindex, haveitemindex, 0); }
void PET_Talkfunc( int meindex, int talkerindex, char *msg, int color) { char buf2[1024], buf3[256]; char TalkType[][16]={"TALKRUN","EVENTRUN","BOTH"}; char AllTalk[PETTALK_MAXID][1024]; int Type=0,j,i; int talkNo=0; BOOL FREEs=FALSE; int buttontype = 0; int windowtype = 0; #ifdef _PET_TALKPRO int tPage=-1; #else int petid=-1; char tempNo[32], buf1[10240]; #endif int fd = getfdFromCharaIndex( talkerindex); #define RAND(x,y) ((x-1)+1+ (int)( (double)(y-(x-1))*rand()/(RAND_MAX+1.0)) ) windowtype = WINDOW_MESSAGETYPE_MESSAGE; buttontype = WINDOW_BUTTONTYPE_OK; if( NPC_Util_isFaceToFace( meindex ,talkerindex , 2) == FALSE) { if( NPC_Util_isFaceToChara( talkerindex, meindex, 1) == FALSE) return; } for( i = 0 ; i < 5 ; i++ ) { strcpy( AllTalk[i], "\0" ); } #ifdef _PET_TALKPRO for( i=0;i<PETTALK_MAXID;i++) { if( pettalktext[i].ID >=0 && pettalktext[i].ID == CHAR_getInt(meindex, CHAR_PETID) ) { if( strcmp( pettalktext[i].DATA, "\0") && strlen( pettalktext[i].DATA) > 0 ) { //snprintf( buf1, sizeof(buf1), pettalktext[i].DATA); tPage=i; break; } } } if( i == PETTALK_MAXID ) return; #else sprintf(tempNo,"%d", CHAR_getInt(meindex, CHAR_PETID)); petid = CHAR_getInt(meindex, CHAR_PETID); if( Pet_TalkGetFunStr( tempNo , buf1 , sizeof( buf1) ) == NULL ) { return; } #endif if( CHAR_getInt( meindex, CHAR_LV ) >= CHAR_getInt( meindex, CHAR_LIMITLEVEL) ) { Type = 1; } //设定为非主人不得与PET互动 if( strcmp( CHAR_getChar( meindex, CHAR_OWNERCDKEY), CHAR_getChar( talkerindex, CHAR_CDKEY) ) || strcmp( CHAR_getChar( meindex, CHAR_OWNERCHARANAME), CHAR_getChar( talkerindex, CHAR_NAME) )){ #ifdef _PET_TALKPRO if( NPC_Util_GetStrFromStrWithDelim( pettalktext[tPage].DATA, "NoPlayerMsg", buf3, sizeof( buf3)) != NULL ) { #else if( NPC_Util_GetStrFromStrWithDelim( buf1, "NoPlayerMsg", buf3, sizeof( buf3)) != NULL ) { #endif }else { sprintf(buf3,"陌生人?我不认识你呀!你是坏人!"); } CHAR_talkToCli( talkerindex, meindex, buf3, color); return; } j=0; #ifdef _PET_TALKPRO while( getStringFromIndexWithDelim( pettalktext[tPage].DATA,"OVER",talkNo, buf2, sizeof( buf2) ) != FALSE){ #else while( getStringFromIndexWithDelim( buf1,"OVER",talkNo, buf2, sizeof( buf2) ) != FALSE){ #endif talkNo++; if( ( strstr( buf2, TalkType[Type]) == NULL ) && ( strstr( buf2, TalkType[2]) == NULL ) )continue; if( NPC_Util_GetStrFromStrWithDelim( buf2, "FLOOR", buf3, sizeof( buf3)) != NULL ) {//判断房间号 if( PetTalk_CheckMyFloor( meindex, talkerindex, buf3, 0) == FALSE )continue; } if( NPC_Util_GetStrFromStrWithDelim( buf2, "PET", buf3, sizeof( buf3)) != NULL ) {//判断宠物FREE条件 if( PetTalk_CheckFree( meindex, meindex, buf3) != TRUE ) continue; } if( NPC_Util_GetStrFromStrWithDelim( buf2, "FREE", buf3, sizeof( buf3) ) == NULL)continue; if( NPC_ActionPassCheck( meindex, talkerindex, buf3) == FALSE ) continue;//判断玩家FREE条件 // if( ActionNpc_CheckFree( meindex, talkerindex, buf2, 0) == FALSE ) continue; if( PetTalk_CheckPetEvent( meindex, talkerindex, buf2) == FALSE )continue; FREEs = TRUE; //条件成立 strcpy( AllTalk[j++], buf2 ); if( j > PETTALK_MAXID-1 ) break; } talkNo = 0; if( FREEs == FALSE) { //如果全部条件都不成立 j=0; #ifdef _PET_TALKPRO while( getStringFromIndexWithDelim( pettalktext[tPage].DATA,"OVER",talkNo, buf2, sizeof( buf2) ) != FALSE ){ #else while( getStringFromIndexWithDelim( buf1,"OVER",talkNo, buf2, sizeof( buf2) ) != FALSE ){ #endif talkNo ++; if( strstr( buf2, "OTHER") == NULL ) continue; if( NPC_Util_GetStrFromStrWithDelim( buf2, "TalkMsg", buf3, sizeof( buf3)) == NULL) continue; while( getStringFromIndexWithDelim( buf3,",",j+1, AllTalk[j], sizeof( AllTalk[j]) ) != FALSE ){ j++; } break; } } if( j > 0 ) { strcpy( buf2, AllTalk[ RAND( 0, (j-1) ) ] ); if( PetTalk_RunEvent( meindex, talkerindex, buf2) == FALSE ) { sprintf( buf3,"....!"); CHAR_talkToCli( talkerindex, meindex, buf3, color); return; } if( NPC_Util_GetStrFromStrWithDelim( buf2, "TalkMsg", buf3, sizeof( buf3)) == NULL) { //sprintf( buf3,"主人,我们去逛逛吧!"); strcpy( buf3, buf2); } lssproto_WN_send( fd, windowtype, buttontype, 0, CHAR_getWorkInt( meindex, CHAR_WORKOBJINDEX), buf3 ); } } BOOL PetTalk_CheckMyFloor( int meindex, int talker, char *buf, int flg) { char buf1[16]; int Myfloor=-1; Myfloor = CHAR_getInt( talker, CHAR_FLOOR); if( strstr( buf, "!") != NULL ) { getStringFromIndexWithDelim( buf,"!", 2, buf1, sizeof( buf1) ); if( Myfloor == atoi( buf1) ) { return FALSE; } }else { if( Myfloor != atoi( buf) ) { return FALSE; } } return TRUE; } BOOL PetTalk_RunEvent( int meindex, int talker, char *buf) { char buf1[256]; int LimitLevel = -1; if( Action_RunDoEventAction( meindex, talker, buf) == FALSE ) return FALSE; if( NPC_Util_GetStrFromStrWithDelim( buf, "RandItem", buf1, sizeof( buf1)) != NULL ){ if( RAND( 0, 10) > 9 ) { PetTalk_AddItem( meindex, talker, buf1); }else { return FALSE; } } if( NPC_Util_GetStrFromStrWithDelim( buf, "LimitLevel", buf1, sizeof( buf1)) != NULL ){ LimitLevel = atoi( buf1); CHAR_setInt( meindex, CHAR_LIMITLEVEL, LimitLevel); } return TRUE; } BOOL PetTalk_DelItem(int meindex,int talker,char *buf) { int i = 1, j = 1,k = 1; char buff3[128]; char buf2[32]; int itemindex; while( getStringFromIndexWithDelim(buf , "," , k, buff3, sizeof(buff3)) !=FALSE ) { k++; if(strstr(buff3,"*")!=NULL){ int itemno; int kosuu; int id; int cnt=0; getStringFromIndexWithDelim(buff3,"*",1,buf2,sizeof(buf2)); itemno = atoi(buf2); getStringFromIndexWithDelim(buff3,"*",2,buf2,sizeof(buf2)); kosuu = atoi(buf2); for( i =0 ; i < CHAR_MAXITEMHAVE ; i++ ){ itemindex=CHAR_getItemIndex( talker , i ); if( ITEM_CHECKINDEX(itemindex) ){ id=ITEM_getInt(itemindex ,ITEM_ID ); if(itemno==id){ cnt++; LogItem( CHAR_getChar( talker, CHAR_NAME ), /* 平乓仿 */ CHAR_getChar( talker, CHAR_CDKEY ), #ifdef _add_item_log_name // WON ADD 在item的log中增加item名称 itemindex, #else ITEM_getInt( itemindex, ITEM_ID), /* 失奶 丞 寞 */ #endif "WarpManDelItem(NPC收道具後传至某点)", CHAR_getInt( talker, CHAR_FLOOR), CHAR_getInt( talker, CHAR_X ), CHAR_getInt( talker, CHAR_Y ), ITEM_getChar( itemindex, ITEM_UNIQUECODE), ITEM_getChar( itemindex, ITEM_NAME), ITEM_getInt( itemindex, ITEM_ID) ); CHAR_DelItem( talker, i); if(cnt == kosuu){ break; } } } } }else{ /*--蓟氏分 寞及失奶 丞毛蓟请---*/ for( j = 0 ; j < CHAR_MAXITEMHAVE ; j++){ itemindex = CHAR_getItemIndex( talker ,j); if( ITEM_CHECKINDEX(itemindex) ){ if( atoi( buff3) == ITEM_getInt(itemindex,ITEM_ID)){ LogItem( CHAR_getChar( talker, CHAR_NAME ), /* 平乓仿 */ CHAR_getChar( talker, CHAR_CDKEY ), #ifdef _add_item_log_name // WON ADD 在item的log中增加item名称 itemindex, #else ITEM_getInt( itemindex, ITEM_ID), /* 失奶 丞 寞 */ #endif "WarpManDelItem(NPC收道具後传至某点)", CHAR_getInt( talker,CHAR_FLOOR), CHAR_getInt( talker,CHAR_X ), CHAR_getInt( talker,CHAR_Y ), ITEM_getChar( itemindex, ITEM_UNIQUECODE), ITEM_getChar( itemindex, ITEM_NAME), ITEM_getInt( itemindex, ITEM_ID) ); CHAR_DelItem( talker, j); } } } } } return TRUE; }
BOOL NPC_QuizAddItem(int talker,char *buf) { int i=1; int ret; char buf2[16]; int itemindex; char token[512]; while(getStringFromIndexWithDelim(buf , "." , i, buf2, sizeof(buf2)) != FALSE ) { i++; } i--; if(i == 1) { getStringFromIndexWithDelim(buf , "." , i, buf2, sizeof(buf2)); } else { /*--·Â¼þĸة--*/ i = (rand() % i)+1; getStringFromIndexWithDelim(buf , "." , i, buf2, sizeof(buf2)); } itemindex = ITEM_makeItemAndRegist(atoi(buf2)); if(itemindex == -1) return FALSE; ret = CHAR_addItemSpecificItemIndex( talker, itemindex); if( !CHAR_CHECKITEMINDEX( talker, ret) ) { print( "npc_quiz.c: additem error itemindex[%d]\n", itemindex); ITEM_endExistItemsOne( itemindex); CHAR_talkToCli( talker, -1, "µÀ¾ßÀ¸ÒÑÂú", CHAR_COLORWHITE); return FALSE; } if(itemindex != -1) { LogItem( CHAR_getChar( talker, CHAR_NAME ), /* ƽÅÒ·Â */ CHAR_getChar( talker, CHAR_CDKEY ), #ifdef _add_item_log_name // WON ADD ÔÚitemµÄlogÖÐÔö¼ÓitemÃû³Æ itemindex, #else ITEM_getInt( itemindex, ITEM_ID), /* ʧÄÌ Ø© į */ #endif "QuizAddItem(²ÂÃÕ->Áìµ½µÄµÀ¾ß)", CHAR_getInt( talker, CHAR_FLOOR), CHAR_getInt( talker, CHAR_X ), CHAR_getInt( talker, CHAR_Y ), ITEM_getChar( itemindex, ITEM_UNIQUECODE), ITEM_getChar( itemindex, ITEM_NAME), ITEM_getInt( itemindex, ITEM_ID) ); } sprintf(token,"Äõ½%s¡£", ITEM_getChar( itemindex, ITEM_NAME)); CHAR_talkToCli( talker, -1, token, CHAR_COLORWHITE); CHAR_sendItemDataOne( talker, ret); return TRUE; }
BOOL NPC_EntryItemDel(int talker,char *buf) { int i = 1, j = 1,k = 1; char buff3[128]; char buf2[32]; int itemindex; while(getStringFromIndexWithDelim(buf , "," , k, buff3, sizeof(buff3)) !=FALSE ) { k++; if(strstr(buff3, "*") !=NULL) { int itemno; int kosuu; int id; int cnt=0; getStringFromIndexWithDelim(buff3,"*",1,buf2,sizeof(buf2)); itemno = atoi(buf2); getStringFromIndexWithDelim(buff3,"*",2,buf2,sizeof(buf2)); kosuu = atoi(buf2); for( i =0 ; i < CHAR_MAXITEMHAVE ; i++ ) { itemindex = CHAR_getItemIndex( talker , i ); if( ITEM_CHECKINDEX(itemindex) ) { id=ITEM_getInt(itemindex ,ITEM_ID ); if(itemno==id) { cnt++; LogItem( CHAR_getChar( talker, CHAR_NAME ), /* ƽÅÒ·Â’o */ CHAR_getChar( talker, CHAR_CDKEY ), #ifdef _add_item_log_name // WON ADD ÔÚitemµÄlogÖÐÔö¼ÓitemÃû³Æ itemindex, #else ITEM_getInt( itemindex, ITEM_ID), /* ʧÄÌ·ºØ©?į */ #endif "QuizDelItem(²ÂÃÕ->½»³öµÄµÀ¾ß)", CHAR_getInt( talker, CHAR_FLOOR), CHAR_getInt( talker, CHAR_X ), CHAR_getInt( talker, CHAR_Y ), ITEM_getChar( itemindex, ITEM_UNIQUECODE), ITEM_getChar( itemindex, ITEM_NAME), ITEM_getInt( itemindex, ITEM_ID) ); CHAR_DelItem( talker, i); if(cnt == kosuu) { break; } } } } } else { for( j = 0 ; j < CHAR_MAXITEMHAVE ; j++) { itemindex = CHAR_getItemIndex( talker ,j); if( ITEM_CHECKINDEX(itemindex) ) { if( atoi( buff3) == ITEM_getInt(itemindex,ITEM_ID)) { LogItem( CHAR_getChar( talker, CHAR_NAME ), /* ƽÅÒ·Â’o */ CHAR_getChar( talker, CHAR_CDKEY ), #ifdef _add_item_log_name // WON ADD ÔÚitemµÄlogÖÐÔö¼ÓitemÃû³Æ itemindex, #else ITEM_getInt( itemindex, ITEM_ID), /* ʧÄÌ·ºØ©?į */ #endif "QuizDelItem(²ÂÃÕ->Áìµ½µÄµÀ¾ß)", CHAR_getInt( talker,CHAR_FLOOR), CHAR_getInt( talker,CHAR_X ), CHAR_getInt( talker,CHAR_Y ), ITEM_getChar( itemindex, ITEM_UNIQUECODE), ITEM_getChar( itemindex, ITEM_NAME), ITEM_getInt( itemindex, ITEM_ID) ); CHAR_DelItem( talker, j); } } } } } return TRUE; }
/* *еведе╞ердЄ║я╜№д╣ды */ BOOL NPC_EntryItemDel(int talker,char *buf) { int i = 1, j = 1,k = 1; char buff3[128]; char buf2[32]; int itemindex; while(getStringFromIndexWithDelim(buf , "," , k, buff3, sizeof(buff3)) !=FALSE ){ k++; if(strstr(buff3, "*") !=NULL){ int itemno; int kosuu; int id; int cnt=0; getStringFromIndexWithDelim(buff3,"*",1,buf2,sizeof(buf2)); itemno = atoi(buf2); getStringFromIndexWithDelim(buff3,"*",2,buf2,sizeof(buf2)); kosuu = atoi(buf2); for( i =0 ; i < CHAR_MAXITEMHAVE ; i++ ){ itemindex = CHAR_getItemIndex( talker , i ); if( ITEM_CHECKINDEX(itemindex) ){ id=ITEM_getInt(itemindex ,ITEM_ID ); if(itemno==id){ cnt++; LogItem( CHAR_getChar( talker, CHAR_NAME ), /* енеуещ╠╛ */ CHAR_getChar( talker, CHAR_CDKEY ), #ifdef _add_item_log_name // WON ADD жbitemк║logдд╝Wе[itemжW║┘ itemindex, #else ITEM_getInt( itemindex, ITEM_ID), /* еведе╞ер╚╓╣ц */ #endif "QuizDelItem(▓q┴╝->ецеXк║╣Dиу)", CHAR_getInt( talker, CHAR_FLOOR), CHAR_getInt( talker, CHAR_X ), CHAR_getInt( talker, CHAR_Y ), ITEM_getChar( itemindex, ITEM_UNIQUECODE), ITEM_getChar( itemindex, ITEM_NAME), ITEM_getInt( itemindex, ITEM_ID) ); CHAR_DelItem( talker, i); if(cnt == kosuu){ break; } } } } }else{ /*--┴кдєд└╚╓╣цд╬еведе╞ердЄ┴к╜╨---*/ for( j = 0 ; j < CHAR_MAXITEMHAVE ; j++){ itemindex = CHAR_getItemIndex( talker ,j); if( ITEM_CHECKINDEX(itemindex) ){ if( atoi( buff3) == ITEM_getInt(itemindex,ITEM_ID)){ LogItem( CHAR_getChar( talker, CHAR_NAME ), /* енеуещ╠╛ */ CHAR_getChar( talker, CHAR_CDKEY ), #ifdef _add_item_log_name // WON ADD жbitemк║logдд╝Wе[itemжW║┘ itemindex, #else ITEM_getInt( itemindex, ITEM_ID), /* еведе╞ер╚╓╣ц */ #endif "QuizDelItem(▓q┴╝->╗тиьк║╣Dиу)", CHAR_getInt( talker,CHAR_FLOOR), CHAR_getInt( talker,CHAR_X ), CHAR_getInt( talker,CHAR_Y ), ITEM_getChar( itemindex, ITEM_UNIQUECODE), ITEM_getChar( itemindex, ITEM_NAME), ITEM_getInt( itemindex, ITEM_ID) ); CHAR_DelItem( talker, j); } } } } } return TRUE; }
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; }
DWORD WINAPI InstallReactOS(HINSTANCE hInstance) { TCHAR szBuffer[MAX_PATH]; HANDLE token; TOKEN_PRIVILEGES privs; HKEY hKey; HINF hShortcutsInf; InitializeSetupActionLog(FALSE); LogItem(SYSSETUP_SEVERITY_INFORMATION, L"Installing ReactOS"); if (!InitializeProfiles()) { FatalError("InitializeProfiles() failed"); return 0; } CreateTempDir(L"TEMP"); CreateTempDir(L"TMP"); if (GetWindowsDirectory(szBuffer, sizeof(szBuffer) / sizeof(TCHAR))) { if (RegOpenKeyExW(HKEY_LOCAL_MACHINE, L"SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion", 0, KEY_WRITE, &hKey) == ERROR_SUCCESS) { RegSetValueExW(hKey, L"PathName", 0, REG_SZ, (LPBYTE)szBuffer, (wcslen(szBuffer) + 1) * sizeof(WCHAR)); RegSetValueExW(hKey, L"SystemRoot", 0, REG_SZ, (LPBYTE)szBuffer, (wcslen(szBuffer) + 1) * sizeof(WCHAR)); RegCloseKey(hKey); } PathAddBackslash(szBuffer); _tcscat(szBuffer, _T("system")); CreateDirectory(szBuffer, NULL); } if (!CommonInstall()) return 0; InstallWizard(); InstallSecurity(); SetAutoAdminLogon(); hShortcutsInf = SetupOpenInfFileW(L"shortcuts.inf", NULL, INF_STYLE_WIN4, NULL); if (hShortcutsInf == INVALID_HANDLE_VALUE) { FatalError("Failed to open shortcuts.inf"); return 0; } if (!CreateShortcuts(hShortcutsInf, L"ShortcutFolders")) { FatalError("CreateShortcuts() failed"); return 0; } SetupCloseInfFile(hShortcutsInf); /* ROS HACK, as long as NtUnloadKey is not implemented */ { NTSTATUS Status = NtUnloadKey(NULL); if (Status == STATUS_NOT_IMPLEMENTED) { /* Create the Administrator profile */ PROFILEINFOW ProfileInfo; HANDLE hToken; BOOL ret; ret = LogonUserW(AdminInfo.Name, AdminInfo.Domain, AdminInfo.Password, LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT, &hToken); if (!ret) { FatalError("LogonUserW() failed!"); return 0; } ZeroMemory(&ProfileInfo, sizeof(PROFILEINFOW)); ProfileInfo.dwSize = sizeof(PROFILEINFOW); ProfileInfo.lpUserName = L"Administrator"; ProfileInfo.dwFlags = PI_NOUI; LoadUserProfileW(hToken, &ProfileInfo); CloseHandle(hToken); } else { DPRINT1("ROS HACK not needed anymore. Please remove it\n"); } } /* END OF ROS HACK */ SetupCloseInfFile(hSysSetupInf); SetSetupType(0); LogItem(SYSSETUP_SEVERITY_INFORMATION, L"Installing ReactOS done"); TerminateSetupActionLog(); if (AdminInfo.Name != NULL) RtlFreeHeap(RtlGetProcessHeap(), 0, AdminInfo.Name); if (AdminInfo.Domain != NULL) RtlFreeHeap(RtlGetProcessHeap(), 0, AdminInfo.Domain); if (AdminInfo.Password != NULL) RtlFreeHeap(RtlGetProcessHeap(), 0, AdminInfo.Password); /* Get shutdown privilege */ if (!OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES, &token)) { FatalError("OpenProcessToken() failed!"); return 0; } if (!LookupPrivilegeValue( NULL, SE_SHUTDOWN_NAME, &privs.Privileges[0].Luid)) { FatalError("LookupPrivilegeValue() failed!"); return 0; } privs.PrivilegeCount = 1; privs.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED; if (AdjustTokenPrivileges( token, FALSE, &privs, 0, (PTOKEN_PRIVILEGES)NULL, NULL) == 0) { FatalError("AdjustTokenPrivileges() failed!"); return 0; } ExitWindowsEx(EWX_REBOOT, 0); return 0; }
static BOOL NPC_LimitBuyInShopProcessSellMsg(char *msg, int shopindex, int playerindex ) { int sellwindowindex, itemtableindex,itemind, id,i,buyokflag, setid; int price, tmpgold; char buf[BUFSIZ]; char npcarg[NPC_UTIL_GETARGSTR_BUFSIZE], token[NPC_UTIL_GETARGSTR_LINEMAX]; if(!CHAR_CHECKINDEX(shopindex)||!CHAR_CHECKINDEX(playerindex)) return -1; if( !getStringFromIndexWithDelim( msg,"|",4,buf,sizeof(buf) )){ return -1; } sellwindowindex = atoi(buf); itemtableindex = sellwindowindex + CHAR_STARTITEMARRAY; itemind = CHAR_getItemIndex(playerindex,itemtableindex ); if( ! ITEM_CHECKINDEX(itemind) ) return -1; id = ITEM_getInt(itemind,ITEM_ID); NPC_Util_GetArgStr( shopindex, npcarg, sizeof(npcarg)); getStringFromIndexWithDelim( npcarg, "|", BUYINITEMLISTTOKEN, token, sizeof( token) ); buyokflag = FALSE; for( i=1;getStringFromIndexWithDelim(token,",",i,buf,sizeof(buf)); i++){ char *tok1 = NULL; char *tok2 = NULL; int no1=0, no2=0; tok1 = strtok( buf, "-" ); tok2 = strtok( NULL, "-" ); setid = atoi(buf); if( tok1 == NULL || tok2 == NULL ){ if( setid == 0 ) return -2; if( setid == id ) buyokflag = TRUE; } else { no1 = atoi( tok1 ); no2 = atoi( tok2 ); if( no1 <= id && id <= no2 ){ buyokflag = TRUE; } } } if( buyokflag == FALSE ) return -2; price = ITEM_getInt( itemind, ITEM_COST ); price *= NPC_Util_sellRate(playerindex); CHAR_AddGold( playerindex, price ); CHAR_sendStatusString( playerindex , "P"); if( ! NPC_Util_moveItemToChar( shopindex,itemind,TRUE ) ){ return -1; } { LogItem( CHAR_getChar( playerindex, CHAR_NAME ), /* ƽÅÒ·Â */ CHAR_getChar( playerindex, CHAR_CDKEY ), #ifdef _add_item_log_name // WON ADD ÔÚitemµÄlogÖÐÔö¼ÓitemÃû³Æ itemind, #else ITEM_getInt( itemind, ITEM_ID ), /* ʧÄÌ Ø© į */ #endif "Sell", CHAR_getInt( playerindex,CHAR_FLOOR), CHAR_getInt( playerindex,CHAR_X ), CHAR_getInt( playerindex,CHAR_Y ), ITEM_getChar( itemind, ITEM_UNIQUECODE), ITEM_getChar( itemind, ITEM_NAME), ITEM_getInt( itemind, ITEM_ID) ); } NPC_Util_RemoveItemByID(shopindex,id,FALSE); return 1; }
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))); } } }
EXPORT_C void doublelinebox::LogVisibleItems(TInt currentItemIndex) { CALLSTACKITEM_N(_CL("doublelinebox"), _CL("LogVisibleItems")); if (! iLog) return; TBuf<800> buf; if (this->View()->ItemIsVisible(currentItemIndex-2)) { buf.Append(iPresenceModel->ItemTextArray()->MdcaPoint(currentItemIndex-2)); } if (this->View()->ItemIsVisible(currentItemIndex-1)) { buf.Append(iPresenceModel->ItemTextArray()->MdcaPoint(currentItemIndex-1)); } if (this->View()->ItemIsVisible(currentItemIndex)) { buf.Append(iPresenceModel->ItemTextArray()->MdcaPoint(currentItemIndex)); } if (this->View()->ItemIsVisible(currentItemIndex+1)) { buf.Append(iPresenceModel->ItemTextArray()->MdcaPoint(currentItemIndex+1)); } if (this->View()->ItemIsVisible(currentItemIndex+2)) { buf.Append(iPresenceModel->ItemTextArray()->MdcaPoint(currentItemIndex+2)); } if (currentItemIndex == iLastCurrentItemIndex && buf.Compare(iBuf) == 0) { return; } //----------------------------------- iLog->write_time(); iLog->write_to_output(_L("Items:")); if (this->View()->ItemIsVisible(currentItemIndex-2)) { LogItem(iPresenceModel->ItemTextArray()->MdcaPoint(currentItemIndex-2)); //if (iLog) iLog->write_to_output(this->Model()->ItemTextArray()->MdcaPoint(currentItemIndex-2)); if (iLog) iLog->write_to_output(_L("/")); } if (this->View()->ItemIsVisible(currentItemIndex-1)) { LogItem(iPresenceModel->ItemTextArray()->MdcaPoint(currentItemIndex-1)); //if (iLog) iLog->write_to_output(this->Model()->ItemTextArray()->MdcaPoint(currentItemIndex-1)); if (iLog) iLog->write_to_output(_L("/")); } iLog->write_to_output(_L("[")); LogItem(iPresenceModel->ItemTextArray()->MdcaPoint(currentItemIndex)); iLog->write_to_output(_L("]")); if (this->View()->ItemIsVisible(currentItemIndex+1)) { if (iLog) iLog->write_to_output(_L("/")); LogItem(iPresenceModel->ItemTextArray()->MdcaPoint(currentItemIndex+1)); //if (iLog) iLog->write_to_output(this->Model()->ItemTextArray()->MdcaPoint(currentItemIndex+1)); } if (this->View()->ItemIsVisible(currentItemIndex+2)) { if (iLog) iLog->write_to_output(_L("/")); //if (iLog) iLog->write_to_output(this->Model()->ItemTextArray()->MdcaPoint(currentItemIndex+2)); LogItem(iPresenceModel->ItemTextArray()->MdcaPoint(currentItemIndex+2)); } iLog->write_nl(); iBuf=buf; iLastCurrentItemIndex = currentItemIndex; }
/* *--еведе╞ердЄ─╔▓├д╡д╗ды */ BOOL NPC_QuizAddItem(int talker,char *buf) { int i=1; int ret; char buf2[16]; int itemindex; char token[512]; /*--╩г┐Ї╛▐╔╩д╚д╖д╞еведе╞ердм└▀─ъд╡дьд╞ддды╛ь╣чд╧ещеєе└ерд╟┴кд╓--*/ while(getStringFromIndexWithDelim(buf , "." , i, buf2, sizeof(buf2)) != FALSE ) { i++; } i--; if(i == 1){ getStringFromIndexWithDelim(buf , "." , i, buf2, sizeof(buf2)); }else{ /*--ещеєе└ер--*/ i = (rand() % i)+1; getStringFromIndexWithDelim(buf , "." , i, buf2, sizeof(buf2)); } itemindex = ITEM_makeItemAndRegist(atoi(buf2)); if(itemindex == -1) return FALSE; /*еведе╞ерд╬─╔▓├(─╛└▄еведе╞ер═єд╦дддьд╞д╖д▐джб╦*/ ret = CHAR_addItemSpecificItemIndex( talker, itemindex); if( !CHAR_CHECKITEMINDEX( talker, ret) ){ print( "npc_quiz.c: additem error itemindex[%d]\n", itemindex); ITEM_endExistItemsOne( itemindex); CHAR_talkToCli( talker, -1, "╣Dиу─цдw║б", CHAR_COLORWHITE); return FALSE; } if(itemindex != -1) { LogItem( CHAR_getChar( talker, CHAR_NAME ), /* енеуещ╠╛ */ CHAR_getChar( talker, CHAR_CDKEY ), #ifdef _add_item_log_name // WON ADD жbitemк║logдд╝Wе[itemжW║┘ itemindex, #else ITEM_getInt( itemindex, ITEM_ID), /* еведе╞ер╚╓╣ц */ #endif "QuizAddItem(▓q┴╝->╗тиьк║╣Dиу)", CHAR_getInt( talker, CHAR_FLOOR), CHAR_getInt( talker, CHAR_X ), CHAR_getInt( talker, CHAR_Y ), ITEM_getChar( itemindex, ITEM_UNIQUECODE), ITEM_getChar( itemindex, ITEM_NAME), ITEM_getInt( itemindex, ITEM_ID) ); } sprintf(token,"о│иь%sбC", ITEM_getChar( itemindex, ITEM_NAME)); CHAR_talkToCli( talker, -1, token, CHAR_COLORWHITE); CHAR_sendItemDataOne( talker, ret); return TRUE; }