⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 npc_alldoman.c

📁 石器时代2.0完整版源代码.已经加入新功能. 在REDHAT9下GCC3.4编译成功.
💻 C
字号:
#include "version.h"#include <stdio.h>#include <string.h>#include <ctype.h>#include "object.h"#include "char_base.h"#include "char.h"#include "util.h"#include "npcutil.h"#include "item.h"#include "readmap.h"#include "enemy.h"#include "chatmagic.h"#include "log.h"#include "npc_itemchange.h"#include "lssproto_serv.h"#include "saacproto_cli.h"#include "npc_eventaction.h"#include "npc_charm.h"#ifdef _ALLDOMAN#include "npc_alldoman.h"#define MAX_HERO_COLUMN 7#define MAX_HERO_LIST 100char Herolist[MAX_HERO_LIST][MAX_HERO_COLUMN][72];int sort[MAX_HERO_LIST][2];int countnum = -1 ;int showpage = 1 ;int totalpage = 1;static void NPC_Alldoman_selectWindow( int meindex, int talker, int seqno,char *data);void NPC_AlldomanWindowTalked(int meindex, int talkerindex, int seqno, int select,char *data){	char buf2[256];	char buf[256];    int i;    int playernum = CHAR_getPlayerMaxNum();	//andy_log	print( "seqno:%d\n", seqno);	switch(seqno)	{	case NPC_ALLDOMAN_MAIN_WND:		if ( select == WINDOW_BUTTONTYPE_NEXT ) {			showpage ++ ; 			NPC_Alldoman_selectWindow(meindex , talkerindex , 4 ,"");		}		if ( select == WINDOW_BUTTONTYPE_OK ) {			//CHAR_talkToCli(talkerindex,meindex,"看清楚了!",CHAR_COLORRED);			showpage = 1 ; 			NPC_Alldoman_selectWindow(meindex , talkerindex, 5 ,"");		}		break;	case NPC_ALLDOMAN_SELECT_WND:		if(atoi(data)==2) {			//CHAR_talkToCli(talkerindex,meindex,"1!",CHAR_COLORRED);			if ( CHAR_getInt( talkerindex , CHAR_FLOOR ) != 8200 ) {				CHAR_talkToCli(talkerindex,-1,"这里只能给真正的英雄刻写!",CHAR_COLORRED);				break;			}			if ( CHAR_getWorkInt( talkerindex  , CHAR_WORKHEROFLOOR ) > 132 ||				CHAR_getWorkInt( talkerindex  , CHAR_WORKHEROFLOOR ) <= 0 ) {				CHAR_setWorkInt( talkerindex  , CHAR_WORKHEROFLOOR , 0 ) ;				CHAR_talkToCli(talkerindex,-1,"这里只能给真正的英雄刻写!",CHAR_COLORRED);				break;			}			sprintf( buf2 , "你拿出了打败守灵者%3d的证明,试图将自己的姓名刻上石碑!" ,	 CHAR_getWorkInt( talkerindex  , CHAR_WORKHEROFLOOR ) );			CHAR_talkToCli(talkerindex,-1,buf2,CHAR_COLORRED);			if ( CHAR_getWorkInt( talkerindex  , CHAR_WORKHEROFLOOR ) == 132 ) {				sprintf( buf2 , "%s" , "尼斯大陆英雄" ) ; 				//到达顶层对全星系广播				sprintf( buf , "%s征服了英雄战场,由风之精灵将这个消息通知全世界,新的英雄诞生了!!" , CHAR_getChar( talkerindex, CHAR_NAME ) );				for( i = 0 ; i < playernum ; i++) {					if( CHAR_getCharUse(i) != FALSE ) {						CHAR_talkToCli( i, -1, buf, CHAR_COLORBLUE2);					}				}			}			else if ( CHAR_getWorkInt( talkerindex  , CHAR_WORKHEROFLOOR ) >= 130 )				sprintf( buf2 , "%s" , "尼斯大陆战士" ) ; 			else if ( CHAR_getWorkInt( talkerindex  , CHAR_WORKHEROFLOOR ) >= 125 )				sprintf( buf2 , "%s" , "尼斯大陆勇士" ) ; 			else if ( CHAR_getWorkInt( talkerindex  , CHAR_WORKHEROFLOOR ) >= 120 )				sprintf( buf2 , "%s" , "萨伊那斯英雄" ) ; 			else if ( CHAR_getWorkInt( talkerindex  , CHAR_WORKHEROFLOOR ) >= 115 )				sprintf( buf2 , "%s" , "斯巴达战士" ) ; 			else if ( CHAR_getWorkInt( talkerindex  , CHAR_WORKHEROFLOOR ) >= 110 )				sprintf( buf2 , "%s" , "萨姆吉尔战士" ) ; 			else if ( CHAR_getWorkInt( talkerindex  , CHAR_WORKHEROFLOOR ) >= 100 )				sprintf( buf2 , "%s" , "玛丽那丝战士" ) ; 			else if ( CHAR_getWorkInt( talkerindex  , CHAR_WORKHEROFLOOR ) >= 80 )				sprintf( buf2 , "%s" , "卡坦战士" ) ; 			else if ( CHAR_getWorkInt( talkerindex  , CHAR_WORKHEROFLOOR ) >= 60 )				sprintf( buf2 , "%s" , "霍特尔战士" ) ; 			else if ( CHAR_getWorkInt( talkerindex  , CHAR_WORKHEROFLOOR ) >= 40 )				sprintf( buf2 , "%s" , "降魔勇士" ) ; 			else if ( CHAR_getWorkInt( talkerindex  , CHAR_WORKHEROFLOOR ) >= 20 )				sprintf( buf2 , "%s" , "圣灵勇士" ) ; 			else if ( CHAR_getWorkInt( talkerindex  , CHAR_WORKHEROFLOOR ) >= 1 )				sprintf( buf2 , "%s" , "初犊勇士" ) ; 			else				sprintf( buf2 , " " );			saacproto_UpdataStele_send ( 								acfd , 				CHAR_getChar( talkerindex , CHAR_CDKEY ),				CHAR_getChar( talkerindex , CHAR_NAME ) , 				buf2 , 				CHAR_getInt( talkerindex , CHAR_LV ) , 				CHAR_getInt( talkerindex , CHAR_TRANSMIGRATION) , 				10 	, 				CHAR_getWorkInt( talkerindex  , CHAR_WORKHEROFLOOR ) 				) ; 			//清除WorkFloor			CHAR_setWorkInt( talkerindex  , CHAR_WORKHEROFLOOR , 0 ) ;		}		if(atoi(data)==4) {			//CHAR_talkToCli(talkerindex,meindex,"2!",CHAR_COLORRED);			showpage = 1 ; 			NPC_Alldoman_selectWindow(meindex , talkerindex, 6 ,"");		}		if(atoi(data)==6) {			//CHAR_talkToCli(talkerindex,meindex,"3!",CHAR_COLORRED);		}		break;	case NPC_ALLDOMAN_LIST_WND:		if( select == WINDOW_BUTTONTYPE_OK ){			print("\nSyu log FloorWorkint => %d" , CHAR_getWorkInt( talkerindex  , CHAR_WORKHEROFLOOR ));		}		if( select == WINDOW_BUTTONTYPE_PREV && showpage > 1 ) {			showpage -- ; 			NPC_Alldoman_selectWindow(meindex , talkerindex, 6 ,"" );		}		if( select == WINDOW_BUTTONTYPE_NEXT && showpage < totalpage ) {			showpage ++ ; 			NPC_Alldoman_selectWindow(meindex , talkerindex, 6 ,"");		}		break;	}}static void NPC_Alldoman_selectWindow( int meindex, int talker, int num, char *data){	 int buttontype = 0,windowtype = 0,windowno = 0 , i ;     int fd = getfdFromCharaIndex( talker);	 char token[1024];	 char token2[100 * 100];	 //andy_log	 print( "NPC_Alldoman_selectWindow( num:%d)\n", num);     switch(num)	 {	 case 4:		 if ( showpage == 1 ) {			 buttontype = WINDOW_BUTTONTYPE_NEXT;			 sprintf( token, "485447圣饼时,吉鲁出现大批机暴横行,所到之处皆无一幸免,尼斯各村的长老达成共识,调集各村勇士,前往消灭这群发狂的机暴,这群勇士在海底隧道入口跟这群机暴激战,不料,实力相差悬殊,勇士们伤亡惨重,残余的勇士,选择在霍特尔海底通路的入口做最");		 }		 else if ( showpage == 2 ) {			 buttontype = WINDOW_BUTTONTYPE_NEXT;			 sprintf( token, "後的的抵抗,各村长老召集大批人力,封死所有通往吉鲁的海底通道,终於在大批机暴涌入前,将入口封死,此地为485550圣饼时所建造,为纪念485447圣饼时所牺牲的勇士,立此石碑,建此地洞,命名为“英雄战场”,望後世人效法先烈的行径,达到强种强");		 }		 else if ( showpage == 3) {			 buttontype = WINDOW_BUTTONTYPE_OK;			 sprintf( token, "族为目的,让尼斯大陆的人们生生不息,上面的英雄是最近勇闯“英雄战场”所留下来的,特此诏告全尼斯英雄!\n\n                      英雄战场制作委员会");		 }		 windowtype = WINDOW_MESSAGETYPE_MESSAGE;		 windowno = NPC_ALLDOMAN_MAIN_WND;		 lssproto_WN_send(fd, windowtype, buttontype, windowno,			 CHAR_getWorkInt( meindex, CHAR_WORKOBJINDEX), token );		 break;	 case 5:		 buttontype = WINDOW_BUTTONTYPE_NONE;		 windowtype = WINDOW_MESSAGETYPE_SELECT;		 windowno = NPC_ALLDOMAN_SELECT_WND;		 sprintf(token,			"0\n\n              刻写石碑"			 "\n\n             检视其他勇者"			 "\n\n               取消"			 );		 lssproto_WN_send( fd, windowtype, buttontype, windowno,			 CHAR_getWorkInt( meindex, CHAR_WORKOBJINDEX),token);		 break;	 case 6:		 if ( totalpage != 1 && showpage == 1 ) 			 buttontype = WINDOW_BUTTONTYPE_OK | WINDOW_BUTTONTYPE_NEXT;		 else if ( totalpage == 1 )			 buttontype = WINDOW_BUTTONTYPE_OK ; 		 else if ( totalpage != 1 && showpage == totalpage )			 buttontype = WINDOW_BUTTONTYPE_OK | WINDOW_BUTTONTYPE_PREV;		 else if ( totalpage != 1 && showpage != 1 && showpage != totalpage ) 			 buttontype = WINDOW_BUTTONTYPE_OK | WINDOW_BUTTONTYPE_PREV | WINDOW_BUTTONTYPE_NEXT;		 windowtype = WINDOW_MESSAGETYPE_WIDEMESSAGEANDLINEINPUT;		 windowno = NPC_ALLDOMAN_LIST_WND;		 sprintf ( token2 , "            姓名          头衔    楼层    等级    转生\n");		 for ( i=0+(showpage-1 )*15; i<showpage*15; i++) {			 if( atoi ( Herolist[sort[MAX_HERO_LIST - 1 - i ][1]][6] ) == 0 || 				 atoi ( Herolist[sort[MAX_HERO_LIST - 1 - i ][1]][3] ) == 0 )				 continue ; 			sprintf( token , "%16s %13s %7d %7d %7d\n" , 				Herolist[sort[MAX_HERO_LIST - 1 - i ][1]][1] , 				Herolist[sort[MAX_HERO_LIST - 1 - i ][1]][2] , 				atoi ( Herolist[sort[MAX_HERO_LIST - 1 - i ][1]][6] ), 				atoi ( Herolist[sort[MAX_HERO_LIST - 1 - i ][1]][3] ), 				atoi ( Herolist[sort[MAX_HERO_LIST - 1 - i ][1]][4] ) 				); 			strcat ( token2 , token ) ; 			if ( i + 1 == countnum )				break;		 }		 lssproto_WN_send( fd, windowtype, buttontype, windowno,			 CHAR_getWorkInt( meindex, CHAR_WORKOBJINDEX),token2);		 break;    }}static int loadherolist = 0;BOOL NPC_AlldomanInit( int meindex ){	if( loadherolist == 0){		loadherolist = 1;		saacproto_UpdataStele_send ( acfd , "FirstLoad", "LoadHerolist" , "华义" , 0 , 0 , 0 , 999 ) ; 	}    CHAR_setInt( meindex , CHAR_WHICHTYPE , CHAR_TYPEALLDOMAN);    CHAR_setFlg( meindex , CHAR_ISATTACKED , 0 );    return TRUE;}void NPC_AlldomanTalked( int meindex , int talker , char *msg ,int color ){     if( NPC_Util_CharDistance( talker, meindex ) > 1) return;     if( NPC_Util_isFaceToFace( talker, meindex , 1 ) == FALSE ) return;	 showpage = 1 ; 	 NPC_Alldoman_selectWindow(meindex, talker , 4 ,"");}void NPC_AlldomanWriteStele ( char *token ){	int linenum = 0 , i , flag , temp , temp1 , j  ; 	int lens=0;	char *addr;	if( token == NULL || (lens = strlen( token)) <= 0 ) return;	while( linenum < 100 ){		for ( i = 0 ; i < MAX_HERO_COLUMN ; i ++ ) {			if( getStringFromIndexWithDelim( token, "|", i + 1 , Herolist[ linenum ][ i ] , sizeof( Herolist[ linenum ][ i ] ) ) == FALSE ){#ifdef _ALLDOMAN_DEBUG				countnum = 0 ; 	            for ( i = 0 ; i < MAX_HERO_LIST ; i ++ ) {		            sort[i][0] = atoi ( Herolist[i][6] ) ;		            sort[i][1] = i ; 		            if ( sort[i][0] != 0 && sort[i][0] != -1 ) 			            countnum ++ ; 				}	            for ( i = 0 ; i < MAX_HERO_LIST - 1 ; i ++ ) {		            flag = 0 ; 		            for ( j = 0 ; j < MAX_HERO_LIST - 1 ; j ++ ) {			            if ( sort[j][0] > sort[j+1][0] ){				            flag = 1 ; 				            temp = sort[j][0];				            temp1 = sort[j][1];				            sort[j][0] = sort[j + 1][0];				            sort[j][1] = sort[j + 1][1];				            sort[j+1][0] = temp;				            sort[j+1][1] = temp1;						}					}		            if ( flag != 1 ) 			            break;				}                totalpage = countnum / 15 ;	            if ( ( countnum % 15 ) != 0 )		            totalpage ++;#endif				return;			}		}		linenum ++;		if ( (addr = strstr ( token , "\n" )) == NULL ) break;		strcpy ( token , addr + 1 ) ;		if( token == NULL || (lens = strlen( token)) <= 0 ) {#ifdef _ALLDOMAN_DEBUG	    			countnum = 0 ; 	        for ( i = 0 ; i < MAX_HERO_LIST ; i ++ ) {		        sort[i][0] = atoi ( Herolist[i][6] ) ;		        sort[i][1] = i ; 		        if ( sort[i][0] != 0 && sort[i][0] != -1 ) 			        countnum ++ ; 			}	        for ( i = 0 ; i < MAX_HERO_LIST - 1 ; i ++ ) {		        flag = 0 ; 		        for ( j = 0 ; j < MAX_HERO_LIST - 1 ; j ++ ) {			        if ( sort[j][0] > sort[j+1][0] ){				        flag = 1 ; 				        temp = sort[j][0];				        temp1 = sort[j][1];				        sort[j][0] = sort[j + 1][0];				        sort[j][1] = sort[j + 1][1];				        sort[j+1][0] = temp;				        sort[j+1][1] = temp1;					}				}		        if ( flag != 1 ) 			        break;			}	        totalpage = countnum / 15 ;	        if ( ( countnum % 15 ) != 0 )		        totalpage ++;#endif	        return;		}			}	countnum = 0 ; 	for ( i = 0 ; i < MAX_HERO_LIST ; i ++ ) {		sort[i][0] = atoi ( Herolist[i][6] ) ;		sort[i][1] = i ; 		if ( sort[i][0] != 0 && sort[i][0] != -1 ) 			countnum ++ ; 	}	for ( i = 0 ; i < MAX_HERO_LIST - 1 ; i ++ ) {		flag = 0 ; 		for ( j = 0 ; j < MAX_HERO_LIST - 1 ; j ++ ) {			if ( sort[j][0] > sort[j+1][0] ){				flag = 1 ; 				temp = sort[j][0];				temp1 = sort[j][1];				sort[j][0] = sort[j + 1][0];				sort[j][1] = sort[j + 1][1];				sort[j+1][0] = temp;				sort[j+1][1] = temp1;			}		}		if ( flag != 1 ) 			break;	}	totalpage = countnum / 15 ;	if ( ( countnum % 15 ) != 0 )		totalpage ++;//#endif}void NPC_Alldoman_S_WriteStele( char *ocdkey , char *oname , char *ncdkey , 		   char *nname , char *title , int level , int trns , int floor ) {	int i , j , temp , temp1 , flag ; 	for ( i = 0 ; i < MAX_HERO_COLUMN ; i ++ ) {		if ( ( strcmp( Herolist[i][0] , ocdkey ) == 0 ) && ( strcmp( Herolist[i][1] , oname ) == 0 ) ) {			sprintf( Herolist[i][0] , "%s" , ncdkey ) ; 			sprintf( Herolist[i][1] , "%s" , nname ) ; 						sprintf( Herolist[i][2] , "%s" , title ) ; 						sprintf( Herolist[i][3] , "%d" , level ) ; 						sprintf( Herolist[i][4] , "%d" , trns ) ; 						sprintf( Herolist[i][6] , "%d" , floor ) ; 					break;		}	}	countnum = 0 ; 	for ( i = 0 ; i < MAX_HERO_LIST ; i ++ ) {		sort[i][0] = atoi ( Herolist[i][6] ) ;		sort[i][1] = i ; 		if ( sort[i][0] != 0 && sort[i][0] != -1 ) 			countnum ++ ; 	}	for ( i = 0 ; i < MAX_HERO_LIST - 1 ; i ++ ) {		flag = 0 ; 		for ( j = 0 ; j < MAX_HERO_LIST - 1 ; j ++ ) {			if ( sort[j][0] > sort[j+1][0] ){				flag = 1 ; 				temp = sort[j][0];				temp1 = sort[j][1];				sort[j][0] = sort[j + 1][0];				sort[j][1] = sort[j + 1][1];				sort[j+1][0] = temp;				sort[j+1][1] = temp1;			}		}		if ( flag != 1 ) 			break;	}	totalpage = countnum / 15 ;	if ( ( countnum % 15 ) != 0 )		totalpage ++ ; }#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -