📄 npc_warpman.c
字号:
}else if(flg==2){ if(mypoint > point1) { return TRUE; } } return FALSE;}BOOL NPC_GetDuelPointCheck(int meindex,int talker){ int fdid = getFdidFromCharaIndex( talker); char dbkey[256]; if( fdid == -1 ) return FALSE; CHAR_makeDBKey( talker, dbkey, sizeof( dbkey)); saacproto_DBGetEntryRank_send( acfd, DB_DUELPOINT, dbkey, fdid, CHAR_getWorkInt( meindex, CHAR_WORKOBJINDEX)); return TRUE;}void NPC_GetDuelRank(int rank,int fdid,int objindex){ int talker; int meindex; rank++; talker = getCharindexFromFdid( fdid); if( talker == -1 ) return; meindex= OBJECT_getIndex( objindex); if( !CHAR_CHECKINDEX( meindex)) return; CHAR_setWorkInt(talker,CHAR_WORKSHOPRELEVANTSEC,rank); NPC_WarpMan_selectWindow( meindex, talker,0,-1);}BOOL NPC_PARTY_CHAECK(int meindex,int talker){ if(CHAR_getWorkInt(talker,CHAR_WORKPARTYMODE) != CHAR_PARTY_NONE){ return FALSE; } return TRUE;}void NPC_ERR_DiSP(int meindex,int talker,int errNO){ char token[1024]; int i=0; int otherindex; int fd = getfdFromCharaIndex( talker); char npcarg[NPC_UTIL_GETARGSTR_BUFSIZE - 1024 * 20]; if(NPC_Util_GetArgStr( meindex, npcarg, sizeof(npcarg))==NULL){ print("GetArgStrErr"); return ; } if(errNO==1){ if(NPC_Util_GetStrFromStrWithDelim( npcarg, "PartyMsg",token, sizeof( token))==NULL) { sprintf(token,"\n\n 无法加入团队。 " "\n\n 请解散团队 。 "); } if(CHAR_getWorkInt(talker,CHAR_WORKPARTYMODE)==CHAR_PARTY_CLIENT){ }else{ for( i=0 ; i < CHAR_PARTYMAX ;i++){ otherindex=CHAR_getWorkInt(talker,CHAR_WORKPARTYINDEX1+i); if(otherindex != -1){ fd = getfdFromCharaIndex( otherindex); lssproto_WN_send( fd, WINDOW_MESSAGETYPE_MESSAGE, WINDOW_BUTTONTYPE_OK, CHAR_WINDOWTYPE_WINDOWWARPMAN_ERR, CHAR_getWorkInt( meindex, CHAR_WORKOBJINDEX), token); } } return ; } }else if (errNO==2){ if(NPC_Util_GetStrFromStrWithDelim( npcarg, "MoneyMsg", token, sizeof( token))==NULL){ sprintf(token,"\n\n 似乎金钱不足唷。 " "\n\n 请存好钱後,再过来。"); } } lssproto_WN_send( fd, WINDOW_MESSAGETYPE_MESSAGE, WINDOW_BUTTONTYPE_OK, CHAR_WINDOWTYPE_WINDOWWARPMAN_ERR, CHAR_getWorkInt( meindex, CHAR_WORKOBJINDEX), token);}int NPC_FloorUse(int charaindex,int floor){ int i; int players=0; int playernum = CHAR_getPlayerMaxNum(); for( i=0 ; i< playernum ; i++ ){ if( CHAR_getCharUse(i) == FALSE )continue; if(CHAR_getInt(i,CHAR_FLOOR)==floor){ players++; } } return players;}int NPC_FloorUseOtherFloor(int warp, char *buf){ int i,j=1; int players=0; int playernum = CHAR_getPlayerMaxNum(); char buf2[32]; int floor; for( i=0 ; i< playernum ; i++ ){ if( CHAR_getCharUse(i) == FALSE )continue; j=1; while(getStringFromIndexWithDelim(buf,",",j,buf2,sizeof(buf2))!= FALSE){ j++; floor = atoi(buf2); if(CHAR_getInt(i,CHAR_FLOOR) == floor && warp != floor) { players++; } } } return players;}BOOL NPC_WarpMsg(int meindex,int talker,char *arg){ char buf[256]; int fl=0,x=0,y=0; int parent=-1; int pmode; int subindex; int i; if( NPC_Util_GetStrFromStrWithDelim( arg, "WARP", buf, sizeof( buf)) == NULL ) return FALSE; GetRand_WarpPoint( buf, &fl, &x, &y ); if( fl == 0 && x == 0 && y == 0 ) { return TRUE; }else { if( MAP_IsValidCoordinate( fl,x,y )== FALSE ){ print( "Warp NPC:1.Invalid warpman ERR" ); return FALSE; } }#ifdef _TIME_TICKET if( check_TimeTicketMap( fl) ) { int havei, itemi; CHAR_setWorkInt( talker, CHAR_WORKTICKETTIME, 0); CHAR_setWorkInt( talker, CHAR_WORKTICKETTIMESTART, 0); for( havei = CHAR_STARTITEMARRAY ; havei < CHAR_MAXITEMHAVE ; havei++ ){ itemi = CHAR_getItemIndex( talker, havei); if( !ITEM_CHECKINDEX( itemi) ) continue; if( strcmp( ITEM_getChar( itemi, ITEM_USEFUNC), "ITEM_timeticket") ) continue; //if( ITEM_getInt( itemi ,ITEM_ID) != 20646 ) continue; CHAR_talkToCli( talker, -1, "自动使用门票。", CHAR_COLORYELLOW); ITEM_timeticketEx( talker, talker, havei, 1); break; } if( havei == CHAR_MAXITEMHAVE ) { CHAR_talkToCli( talker, -1, "请先准备专用门票才可进入。", CHAR_COLORYELLOW); return FALSE; } }#endif pmode = CHAR_getWorkInt( talker, CHAR_WORKPARTYMODE ); switch( pmode ){ case 1: parent = talker; break; case 2: parent = CHAR_getWorkInt( talker, CHAR_WORKPARTYINDEX1 ); break; default: CHAR_warpToSpecificPoint(talker, fl, x,y); return TRUE; } if( parent < 0 ) return TRUE; for( i = 0; i < CHAR_PARTYMAX; i ++ ){ subindex = CHAR_getWorkInt( parent, CHAR_WORKPARTYINDEX1+i ); if( CHAR_CHECKINDEX( subindex ) == FALSE )continue; if( fl==0 && x==0 && y==0 ) { }else { CHAR_warpToSpecificPoint( subindex, fl, x, y ); } } return TRUE;}#ifdef _NEW_WARPMANstatic void NPC_NewWarpMan_selectWindow( int meindex, int toindex, int num,int select,char *TalkStr){ char npcarg[NPC_UTIL_GETARGSTR_BUFSIZE - 1024 * 20]; char token[1024]; int buttontype = 0, windowtype = 0, windowno = 0; char buf[NPC_UTIL_GETARGSTR_BUFSIZE - 1024 * 20],buf1[256]; int fd = getfdFromCharaIndex( toindex); BOOL tenflg =FALSE; int talkNo=1,RunType=-1; if(NPC_Util_GetArgStr( meindex, npcarg, sizeof(npcarg))==NULL){ print("GetArgStrErr"); return ; } if( NPC_Util_GetStrFromStrWithDelim( npcarg, "NEWTIME", buf1, sizeof( buf1)) != NULL ){ if( CHAR_getWorkInt( meindex, NPC_TIME_MODE) <= 0 ) { if( NPC_Util_GetStrFromStrWithDelim( npcarg, "Time_Msg", token, sizeof( token) ) != NULL) { CHAR_talkToCli( toindex, meindex, token, CHAR_COLORYELLOW); } return; } } windowtype = WINDOW_MESSAGETYPE_MESSAGE; sprintf( buf1,"TALKEVENT"); //寻找多种条件 FREE while(getStringFromIndexWithDelim( npcarg,"OVER",talkNo,buf,sizeof( buf)) != FALSE) { if(strstr(buf, buf1) != NULL) { //检查对话 暗语 RunType = CheckWarpMsg( meindex, toindex, buf , TalkStr); if( RunType > 1 ) { return; }else if( RunType != 0 ) { talkNo++; continue; } if( NPC_Util_GetStrFromStrWithDelim( buf, "FREE", token, sizeof( token) ) == NULL) { print("msgErr"); return; } //检查玩家是否附合条件 if((NPC_ActionPassCheck(meindex,toindex,token)==TRUE) || (strstr( token, "ALLFREE")!=NULL) ) { CHAR_setWorkInt( toindex, CHAR_WORKSHOPRELEVANT, talkNo-1); //若附合条件 取出 FreeMsg 字串 if(NPC_Util_GetStrFromStrWithDelim( buf, "FreeMsg", token, sizeof( token))==NULL) return; CONNECT_set_pass(fd,TRUE); CONNECT_set_first_warp(fd,TRUE); buttontype = WINDOW_BUTTONTYPE_YESNO; windowno = NEW_WARPMAN; tenflg = TRUE; CHAR_setWorkInt( toindex , CHAR_WORKSHOPRELEVANTTRD , -1 ); break; } } talkNo++; } //无任何条件成立 if( tenflg == FALSE ) { if( getStringFromIndexWithDelim( npcarg,"OVER",1,buf,sizeof( buf)) == FALSE ) return; if( strstr( buf, "NOFREE") == NULL ) { return; }else { strcpy( npcarg, buf); } if(NPC_Util_GetStrFromStrWithDelim( npcarg, "NomalMsg", token,sizeof(token)) != NULL) { CHAR_talkToCli( toindex, meindex, token,CHAR_COLORWHITE); return; } } //送讯息给 CLI lssproto_WN_send( fd, windowtype, buttontype, windowno, CHAR_getWorkInt( meindex, CHAR_WORKOBJINDEX), token ); }#endif//ANDY_REint CheckWarpMsg( int meindex, int talkerindex,char *npcarg ,char *TalkStr){ char buf[1024]; if( NPC_Util_GetStrFromStrWithDelim( npcarg, "warp_msg", buf, sizeof( buf) ) == NULL) return 0; if( strcmp( buf, TalkStr) ) return 1; if( NPC_Util_GetStrFromStrWithDelim( npcarg, "CHECKPARTY", buf, sizeof( buf) ) != NULL) { if( strstr( buf, "FALSE") != NULL ) { }else { if( NPC_PARTY_CHAECK( meindex, talkerindex) == FALSE ) { NPC_ERR_DiSP( meindex, talkerindex, 1); return 2; } } } if( NPC_Util_GetStrFromStrWithDelim( npcarg, "FREE", buf, sizeof( buf)) == NULL ) return 2; if( ( NPC_ActionPassCheck( meindex, talkerindex, buf ) == FALSE) ) { if(NPC_Util_GetStrFromStrWithDelim( npcarg, "NomalMsg", buf,sizeof(buf)) != NULL) { CHAR_talkToCli( talkerindex, meindex,buf,CHAR_COLORWHITE); } return 2; }else { if( Action_RunDoEventAction( meindex, talkerindex, npcarg) == FALSE ){ CHAR_setWorkInt( talkerindex, CHAR_WORKSHOPRELEVANT, -1); return 3; } CHAR_complianceParameter( talkerindex ); CHAR_send_P_StatusString( talkerindex , CHAR_P_STRING_ATK|CHAR_P_STRING_DEF| CHAR_P_STRING_CHARM|CHAR_P_STRING_QUICK| CHAR_P_STRING_WATER|CHAR_P_STRING_FIRE| CHAR_P_STRING_WIND|CHAR_P_STRING_EARTH ); if(NPC_Util_GetStrFromStrWithDelim( npcarg, "FreeMsg", buf, sizeof( buf)) != NULL ){ CHAR_talkToCli( talkerindex, meindex, buf, CHAR_COLORWHITE); } NPC_WarpMsg( meindex, talkerindex, npcarg); NPC_NpcWarpMsg( meindex, talkerindex, npcarg); return 4; } return 0;}BOOL NPC_NpcWarpMsg(int meindex,int talker,char *arg){ char buf[256]; int fl=0,x=0,y=0; if( CHAR_CHECKINDEX( meindex ) == FALSE ) return FALSE; if( NPC_Util_GetStrFromStrWithDelim( arg, "NPCPOINT", buf, sizeof( buf)) == NULL ) return FALSE; GetRand_WarpPoint( buf, &fl, &x, &y ); if( MAP_IsValidCoordinate( fl,x,y )== FALSE ){ print( "Warp NPC:2.Invalid warpman ERR" ); return FALSE; } CHAR_warpToSpecificPoint( meindex, fl, x, y ); return TRUE;}void NPC_WarpManLoop( int meindex){ int born, dead; char npcarg[NPC_UTIL_GETARGSTR_BUFSIZE - 1024 * 20]; if( !CHAR_CHECKINDEX( meindex) ) return; if( NPC_Util_GetArgStr( meindex, npcarg, sizeof(npcarg)) == NULL ){ print("WarpMan:GetArgStrErr"); return; } if( !strstr( npcarg,"NEWWARPMAN") ) return; if( NPC_getTimeData( meindex, npcarg, &born, &dead, 200) != FALSE ){ NPC_TimeDefineDo( meindex, born, dead, NPC_TIME_MODE); CHAR_sendCToArroundCharacter( CHAR_getWorkInt( meindex, CHAR_WORKOBJINDEX ) ); }}void NPC_WarpManWatch( int meobjindex, int objindex, CHAR_ACTION act, int x,int y,int dir, int* opt,int optlen ){ int born, dead; int meindex, index; char npcarg[NPC_UTIL_GETARGSTR_BUFSIZE - 1024 * 20]; if( OBJECT_getType( objindex) != OBJTYPE_CHARA) return; index = OBJECT_getIndex( objindex); if( !CHAR_CHECKINDEX( index) ) return; if( CHAR_getInt( index, CHAR_WHICHTYPE) != CHAR_TYPEPLAYER) return; meindex = OBJECT_getIndex( meobjindex); if( !CHAR_CHECKINDEX( meindex) ) return; if( NPC_Util_GetArgStr( meindex, npcarg, sizeof(npcarg)) == NULL ){ print("WarpMan:GetArgStrErr"); return; } if( !strstr( npcarg,"NEWWARPMAN") ) return;#ifdef _TREASURE_BOX if( CHAR_getWorkInt( meindex, NPC_TIME_EVENTMODE) == NPC_EVENTMODE_OPEN ){ if( CHAR_getWorkInt( meindex, NPC_TIME_EVENTTIME) < NowTime.tv_sec ){ //变回宝箱 CHAR_setWorkInt( meindex, NPC_TIME_EVENTMODE, NPC_EVENTMODE_EVENT); //变图 CHAR_setInt( meindex, CHAR_BASEBASEIMAGENUMBER, CHAR_getWorkInt( meindex, NPC_TIME_EVENOFFDBBI)); CHAR_setInt( meindex, CHAR_BASEIMAGENUMBER, CHAR_getWorkInt( meindex, NPC_TIME_EVENOFFDBBI)); NPC_TreasureEventRunMsg( meindex); //是否warp CHAR_sendCToArroundCharacter( CHAR_getWorkInt( meindex, CHAR_WORKOBJINDEX ) ); } }#endif if( NPC_getTimeData( meindex, npcarg, &born, &dead, 200) != FALSE ){ NPC_TimeDefineDo( meindex, born, dead, NPC_TIME_MODE); CHAR_sendCToArroundCharacter( CHAR_getWorkInt( meindex, CHAR_WORKOBJINDEX ) ); }}#ifdef _TREASURE_BOXBOOL NPC_TreasureEventRunMsg( int meindex){ char buf[256]; char npcarg[NPC_UTIL_GETARGSTR_BUFSIZE - 1024 * 20]; int fl,x,y; if( !CHAR_CHECKINDEX( meindex )) return FALSE; if(NPC_Util_GetArgStr( meindex, npcarg, sizeof(npcarg))==NULL){ print("WarpMan:GetArgStrErr"); return FALSE; } if( NPC_Util_GetStrFromStrWithDelim( npcarg, "TREASURE_NUM", buf, sizeof( buf)) == NULL ) return FALSE; if( CHAR_getWorkInt( meindex, NPC_TIME_EVENTNUM) < atoi( buf) ) return FALSE; CHAR_setWorkInt( meindex, NPC_TIME_EVENTNUM, 0); if( NPC_Util_GetStrFromStrWithDelim( npcarg, "TREASURE_POINT", buf, sizeof( buf)) == NULL ) return FALSE; GetRand_WarpPoint( buf, &fl, &x, &y ); if( MAP_IsValidCoordinate( fl,x,y )== FALSE ){ print( "Warp NPC:2.Invalid warpman ERR" ); return FALSE; } CHAR_warpToSpecificPoint( meindex, fl, x, y ); return TRUE;}#endifBOOL NPC_TreasureRandItemGet(int meidex,int talker,int rand_j,char *buf){ char buff2[64]; int randitem; int ret; int itemindex; char token[128]; if(rand_j == 0) { print("Event:由於0的介入,出现错误。"); return FALSE; } randitem = rand()%rand_j; if(randitem == 0) randitem = rand_j; getStringFromIndexWithDelim(buf , "," , randitem, buff2, sizeof(buff2)) ; itemindex = ITEM_makeItemAndRegist( atoi( buff2)); if(itemindex == -1) return FALSE; /*失奶 丞及馨笛( 涛失奶 丞 卞中木化仄引丹 */ ret = CHAR_addItemSpecificItemIndex( talker, itemindex); if( !CHAR_CHECKITEMINDEX( talker, ret) ){ print( "npc_exchangeman.c: additem error itemindex[%d]\n", itemindex); ITEM_endExistItemsOne( itemindex); 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 "EventAddItem(任务需求所得到的道具)", 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;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -