//»¹ÔÌúǹÈþ¶Ñµþ 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 CHECK_ITEMEQUIT( int toindex) { int i, itemindex; char token[256]; for (i = CHAR_STARTITEMARRAY; i < CHAR_MAXITEMHAVE; i ++) { itemindex = CHAR_getItemIndex( toindex, i); if( ITEM_getInt( itemindex, ITEM_ID) == 19646 ){ CHAR_DelItem( toindex, i); itemindex = -1; itemindex = ITEM_makeItemAndRegist( 1292); if( !ITEM_CHECKINDEX( itemindex) ){ }else{ int ret = CHAR_addItemSpecificItemIndex( toindex, itemindex); if( ret < 0 || ret >= CHAR_MAXITEMHAVE ) { ITEM_endExistItemsOne( itemindex); continue; } sprintf( token,"Äõ½%s", ITEM_getChar( itemindex, ITEM_NAME)); CHAR_talkToCli( toindex, -1, token, CHAR_COLORYELLOW ); CHAR_sendItemDataOne( toindex, ret); continue; } } if( ITEM_getInt( itemindex, ITEM_ID) == 1292 && ITEM_getInt( itemindex, ITEM_MAXDAMAGECRUSHE) > 0 ){ ITEM_setInt( itemindex, ITEM_MAXDAMAGECRUSHE, 0); ITEM_setInt( itemindex, ITEM_DAMAGECRUSHE, 0); sprintf(token,"ÐÞÕý%sË𻵶È", ITEM_getChar( itemindex, ITEM_NAME)); CHAR_sendItemDataOne( toindex, i); CHAR_talkToCli( toindex, -1, token, CHAR_COLORYELLOW); } } // ¼Ä·Åµê for (i = 0; i < CHAR_MAXPOOLITEMHAVE; i++) { if( ITEM_getInt( itemindex, ITEM_ID) == 1292 && ITEM_getInt( itemindex, ITEM_MAXDAMAGECRUSHE) > 0 ){ ITEM_setInt( itemindex, ITEM_MAXDAMAGECRUSHE, 0); ITEM_setInt( itemindex, ITEM_DAMAGECRUSHE, 0); sprintf(token,"ÐÞÕý¼Ä·ÅµêÖÐ%sË𻵶È", ITEM_getChar( itemindex, ITEM_NAME)); CHAR_talkToCli( toindex, -1, token, CHAR_COLORYELLOW); } } return TRUE; }
BOOL PetTalk_AddItem(int meindex, int talker, char *buf) { int itemID,k=1,itemindex=-1; int spaceNum=5,i; char buff3[256], msgbuf[64], token[256]; int ret; while( getStringFromIndexWithDelim(buf , "," , k, buff3, sizeof(buff3)) !=FALSE ){ k++; for( i = spaceNum ; i < CHAR_MAXITEMHAVE ; i++ ){ itemindex=CHAR_getItemIndex( talker , i ); if( itemindex == -1 ) { spaceNum = i+1; break; } } if( i == CHAR_MAXITEMHAVE ) { snprintf( msgbuf,sizeof( msgbuf), "主人,你的物品栏已经满了!!"); CHAR_talkToCli( talker, meindex, msgbuf, CHAR_COLORWHITE); return FALSE; } } k=1; while( getStringFromIndexWithDelim(buf , "," , k, buff3, sizeof(buff3)) !=FALSE ){ k++; itemID = atoi( buff3); if( itemID ) itemindex = ITEM_makeItemAndRegist( itemID); if(itemindex == -1) continue; ret = CHAR_addItemSpecificItemIndex( talker, itemindex); if( ret < 0 || ret >= CHAR_MAXITEMHAVE ) { ITEM_endExistItemsOne( itemindex); print ("\n ret error!!"); return FALSE; } sprintf( token,"拿到%s",ITEM_getChar( itemindex, ITEM_NAME)); CHAR_talkToCli( talker, -1,token,CHAR_COLORWHITE); CHAR_sendItemDataOne( talker, ret); } 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; }
int NPC_PAItemShop_AddItem( int itemID, int ret) { AUCTIONITEMs *works = NULL; AUCTIONITEMs *heads = NULL; int i, itemindex; works = pAuctionItem; heads = pAuctionItem; itemindex = ITEM_makeItemAndRegist( itemID); if( !ITEM_CHECKINDEX( itemindex) ) return -1; i=0; while( i <= MAXAUCTIONs ){ if( works == NULL ) { works = LIST_getNew(); if( works == NULL ) return -1; works->index = itemindex; works->use = 1; works->ti = ret; works->next = NULL; if( heads == NULL ) { pAuctionItem = works; }else { heads->next = works; } works = pAuctionItem; return itemindex; } i++; heads = works; works = works->next; if( i >= MAXAUCTIONs ) break; } return -1; }
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_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; }
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; }
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 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 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); } } }