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

📄 char_walk.c

📁 石器时代2.0完整版源代码.已经加入新功能. 在REDHAT9下GCC3.4编译成功.
💻 C
📖 第 1 页 / 共 3 页
字号:
	        CHAR_sendWatchEvent( CHAR_getWorkInt(charaindex,	                                             CHAR_WORKOBJINDEX),	                             CHAR_ACTWALK,opt,2,TRUE );	    }		if( CHAR_getWorkInt( charaindex, CHAR_WORKPARTYMODE) == CHAR_PARTY_CLIENT ) {			CHAR_sendMapAtWalk( charaindex, of,								ox,oy,								CHAR_getInt( charaindex, CHAR_X),								CHAR_getInt( charaindex, CHAR_Y));		}		count = CHAR_getWorkInt( charaindex, CHAR_WORK_TOHELOS_COUNT);		if( count > 0 ) {			CHAR_setWorkInt( charaindex, CHAR_WORK_TOHELOS_COUNT, count -1);			if( count -1 == 0 ) {				CHAR_talkToCli( charaindex, -1, "道具的效力已到。", CHAR_COLORWHITE);			}		}		par = ENCOUNT_getEncountPercentMin( charaindex, of,ox,oy);		if( par != -1 ) {			if( CHAR_getWorkInt( charaindex, CHAR_WORKENCOUNTPROBABILITY_MIN) != par ){				flg = TRUE;				CHAR_setWorkInt( charaindex, CHAR_WORKENCOUNTPROBABILITY_MIN, par);			}		}		par = ENCOUNT_getEncountPercentMax( charaindex, of,ox,oy);		if( par != -1 ) {			if( CHAR_getWorkInt( charaindex, CHAR_WORKENCOUNTPROBABILITY_MAX) != par ){				flg = TRUE;				CHAR_setWorkInt( charaindex, CHAR_WORKENCOUNTPROBABILITY_MAX, par);			}		}		// Arminius 7.12 login announce		/*		{		  int enfd = getfdFromCharaIndex( charaindex );		  if (CONNECT_get_announced(enfd)==0) {		    // Robin 0720		    //AnnounceToPlayer(charaindex);		    AnnounceToPlayerWN( enfd );		    CONNECT_set_announced(enfd,1);		  }		}		*/		// Arminius 6.22 check Encounter		// Nuke 0622: Provide No Enemy function		{		  int enfd = getfdFromCharaIndex( charaindex );		  int eqen = getEqNoenemy( enfd );	// Arminius 7.2: Ra's amulet		  int noen = getNoenemy(enfd);          // Arminius 7.31 cursed stone      if (getStayEncount(enfd)>0) {			  clearStayEncount(enfd);		  }		  //print("\n enfd=%d,eqen=%d,noen=%d", enfd, eqen, noen);		  // Arminius 7.2 Ra's amulet		  if (eqen>=200) {		    noen=1;		  } else if (eqen>=120) {		    if ((ff==100)||(ff==200)||(ff==300)||(ff==400)||(ff==500)) noen=1;		  } else if (eqen>=80) {		    if ((ff==100)||(ff==200)||(ff==300)||(ff==400)) noen=1;		  } else if (eqen>=40) {		    if ((ff==100)||(ff==200)) noen=1;		  }		  //print("\n noen=%d", noen);		  if (noen==0) {				int maxep = CHAR_getWorkInt(charaindex, CHAR_WORKENCOUNTPROBABILITY_MAX);		    int minep = CHAR_getWorkInt(charaindex, CHAR_WORKENCOUNTPROBABILITY_MIN);		    int cep = CONNECT_get_CEP(enfd);		    if (cep<minep) cep=minep;		    if (cep>maxep) cep=maxep;		    if (CHAR_getWorkInt(charaindex,CHAR_WORKBATTLEMODE)==BATTLE_CHARMODE_NONE) {				int entflag=1;				{					int objindex,index;					OBJECT obj;					for ( obj = MAP_getTopObj( ff, fx, fy); obj; obj = NEXT_OBJECT( obj)) {						objindex = GET_OBJINDEX( obj);						if (OBJECT_getType( objindex) == OBJTYPE_CHARA) {							int etype;							index = OBJECT_getIndex( objindex);							if (!CHAR_CHECKINDEX( index)) continue;							if( CHAR_getInt( index, CHAR_WHICHTYPE) == CHAR_TYPENPCENEMY &&								CHAR_getWorkInt( index, CHAR_WORKEVENTTYPE) == CHAR_EVENT_ENEMY )	{								CHAR_setInt( charaindex, CHAR_X, ox);								CHAR_setInt( charaindex, CHAR_Y, oy);								lssproto_XYD_send( getfdFromCharaIndex(charaindex),								CHAR_getInt( charaindex, CHAR_X ),								CHAR_getInt( charaindex, CHAR_Y ),								CHAR_getInt( charaindex, CHAR_DIR ) );								break;							}							etype = CHAR_getWorkInt( index, CHAR_WORKEVENTTYPE);							if (etype!=CHAR_EVENT_NONE) {								if (etype==CHAR_EVENT_WARP) entflag=0;							}						}					}				}#ifdef _ENEMY_ACTION				if( rand()%(120*getEnemyAction()) < cep ){#else		      if (rand()%120<cep){	// Arminius 6.28 lower encounter prob.#endif					if (entflag) {#ifdef _Item_MoonAct						if( getEqRandenemy( enfd) > 0 )	{							int Rnum=0;							int RandEnemy = getEqRandenemy( enfd);							Rnum = RAND(0,100);							if( Rnum > RandEnemy )	{#endif								//encounter!!								cep = minep;								lssproto_EN_recv(enfd,								CHAR_getInt(charaindex,CHAR_X),								CHAR_getInt(charaindex,CHAR_Y));#ifdef _Item_MoonAct							}						}else{								cep = minep;								lssproto_EN_recv(enfd,								CHAR_getInt(charaindex,CHAR_X),								CHAR_getInt(charaindex,CHAR_Y));						}#endif					}		      } else {		        if (cep<maxep) cep++;		      }		    }		    CONNECT_set_CEP(enfd, cep);		  }		}		if( CHAR_getWorkInt( charaindex, CHAR_WORKPARTYMODE )!= CHAR_PARTY_CLIENT ){			CHAR_setFlg( charaindex, CHAR_ISWARP, 0);		}    }    else if( CHAR_getInt( charaindex, CHAR_WHICHTYPE ) == CHAR_TYPEPET ||    		CHAR_getInt( charaindex, CHAR_WHICHTYPE) == CHAR_TYPEBUS	#ifdef _GAMBLE_ROULETTE				|| CHAR_getInt( charaindex, CHAR_WHICHTYPE) == CHAR_GAMBLEROULETTE #endif#ifdef _PETRACE			|| CHAR_getInt(charaindex, CHAR_WHICHTYPE) == CHAR_PETRACEPET#endif	)	{		CHAR_setWorkInt( charaindex, CHAR_WORKACTION, -1 );		if( CHAR_getWorkInt( charaindex, CHAR_WORKBATTLEMODE ) == BATTLE_CHARMODE_NONE ){			CHAR_sendCharaAtWalk( charaindex, of,ox,oy,CHAR_getDX(dir), CHAR_getDY(dir));		}	    {	        int     opt[2] = { ox, oy};	        CHAR_sendWatchEvent( CHAR_getWorkInt(charaindex,	                                             CHAR_WORKOBJINDEX),	                             CHAR_ACTWALK,opt,2,TRUE );	    }    }    if( retvalue == CHAR_WALKSUCCESSED ) {		if( CHAR_getWorkInt( charaindex, CHAR_WORKBATTLEMODE )	== BATTLE_CHARMODE_NONE ){			CHAR_sendCDCharaAtWalk( charaindex, of,ox,oy,									CHAR_getDX(dir), CHAR_getDY(dir));		}	}    return retvalue;}/*------------------------------------------------------------ * 平乓仿互汹仁[ * 娄醒 *  index   int     Char匹及index *  dir     int       轾 *  mode    int     0卅日汹仁[1卅日  轾鳖晶[ * 忒曰袄 *  CHAR_WALKRET ------------------------------------------------------------*/CHAR_WALKRET CHAR_walk( int index, int dir, int mode){    CHAR_WALKRET ret;    BOOL (*prewalk)(int , int* , int* );    void (*postwalk)(int);    if( !CHAR_CHECKINDEX( index ) )return CHAR_WALKSYSTEMERROR;    if( CHAR_getFlg(index,CHAR_ISDIE) ) return CHAR_WALKDIE;    VALIDATEDIR(dir);    prewalk = (BOOL(*)(int,int*,int*))        CHAR_getFunctionPointer(index, CHAR_WALKPREFUNC);    if( prewalk != NULL )        if( prewalk(index,&dir,&mode) == FALSE )	{            return CHAR_WALKPREWALK;		}    if( mode == 0 )        ret = CHAR_walk_move( index, dir );    else        ret = CHAR_walk_turn( index, dir );    postwalk = (void(*)(int))        CHAR_getFunctionPointer(index,CHAR_WALKPOSTFUNC);    if( postwalk != NULL )        postwalk(index);    return ret;}/*------------------------------------------------------------ * 汹井六月蟆赏  [ * 娄醒 *  index       int         平乓仿奶件犯永弁旦 * 忒曰袄 *  卅仄 ------------------------------------------------------------*/void CHAR_walkcall( int index ){    char    tmp[128];    int     dir,mode;	int		ret;	POINT	start,end;    if( !CHAR_CHECKINDEX( index ) ) return;    strcpysafe( tmp ,sizeof(tmp),                CHAR_getWorkChar(index,CHAR_WORKWALKARRAY));    CHAR_ctodirmode( tmp[0], &dir ,&mode );	/* 褪卅日仪蟆卞桦赭毛筏盛仄化云仁	 * 褪及  仁蟆及桦赭毛    卞阂互啖  允月啃	 */	if( CHAR_getInt( index, CHAR_WHICHTYPE) == CHAR_TYPEPLAYER ) {		if( CHAR_getWorkInt( index, CHAR_WORKPARTYMODE ) == CHAR_PARTY_LEADER ) {			end.x = CHAR_getInt( index, CHAR_X);			end.y = CHAR_getInt( index, CHAR_Y);		}	}	/* 汹仁 */    ret = CHAR_walk( index , dir ,mode );	if( mode == 0 && ret == CHAR_WALKSUCCESSED ) {		/* 愤坌互褪卅日醮棉毛汹井六月 */		if( CHAR_getInt( index, CHAR_WHICHTYPE) == CHAR_TYPEPLAYER ) {					if( CHAR_getWorkInt( index, CHAR_WORKPARTYMODE) == CHAR_PARTY_LEADER ) {				int	i;				for( i = 1; i < CHAR_PARTYMAX; i ++ ) {					int toindex = CHAR_getWorkInt( index, i + CHAR_WORKPARTYINDEX1);					if( CHAR_CHECKINDEX(toindex) ) {						int		parent_dir;						/* 阂及匏  午]褪及汹五蟆及匏  井日  轾毛菲户月 */						/* 汹仁 */						start.x = CHAR_getInt( toindex, CHAR_X);						start.y = CHAR_getInt( toindex, CHAR_Y);						parent_dir = NPC_Util_getDirFromTwoPoint( &start,&end );						/* 弘仿犯奴它旦左皿扑亦件汹五毛  蜇允月啃卞]						 * 戚及阂反蟆及阂及  毛馨丹方丹卞允月						 */						end = start;						if( parent_dir != -1 ) {							CHAR_walk( toindex, parent_dir, 0);							#if 1			// Robin 0702 petFollow			if( CHAR_getWorkInt( toindex, CHAR_WORKPETFOLLOW) != -1 ) {					int petindex = CHAR_getWorkInt( toindex, CHAR_WORKPETFOLLOW);					if( CHAR_CHECKINDEX(petindex) ) {						int		parent_dir;						/* 阂及匏  午]褪及汹五蟆及匏  井日  轾毛菲户月 */						/* 汹仁 */						end.x = CHAR_getInt( toindex, CHAR_X);						end.y = CHAR_getInt( toindex, CHAR_Y);												start.x = CHAR_getInt( petindex, CHAR_X);						start.y = CHAR_getInt( petindex, CHAR_Y);						if( end.x > start.x )    end.x --;						else if( end.x < start.x )	end.x ++;						if( end.y > start.y )    end.y --;						else if( end.y < start.y )	end.y ++;																		parent_dir = NPC_Util_getDirFromTwoPoint( &start,&end );						if( parent_dir != -1 ) {							if( CHAR_walk( petindex, parent_dir, 0) == CHAR_WALKSUCCESSED )							{								CHAR_setWorkInt( petindex, CHAR_WORKPETFOLLOWCOUNT,									1 + CHAR_getWorkInt( petindex, CHAR_WORKPETFOLLOWCOUNT) );								if( CHAR_getWorkInt( petindex, CHAR_WORKPETFOLLOWCOUNT) > 1000 ){									CHAR_setWorkInt( petindex, CHAR_WORKPETFOLLOWCOUNT, 0);									CHAR_pickupFollowPet( toindex, petindex );								}															}						}					}else {						CHAR_setWorkInt( toindex, CHAR_WORKPETFOLLOW, -1);					}							}			#endif																				}					}					else {						/* 赓渝祭仄卅云允 */						CHAR_setWorkInt( index, i+CHAR_WORKPARTYINDEX1, -1);					}				}			}#if 1			// Robin 0702 petFollow			if( CHAR_getWorkInt( index, CHAR_WORKPETFOLLOW) != -1 ) {					int petindex = CHAR_getWorkInt( index, CHAR_WORKPETFOLLOW);					if( CHAR_CHECKINDEX(petindex) ) {						int		parent_dir;						/* 阂及匏  午]褪及汹五蟆及匏  井日  轾毛菲户月 */						/* 汹仁 */						end.x = CHAR_getInt( index, CHAR_X);						end.y = CHAR_getInt( index, CHAR_Y);												start.x = CHAR_getInt( petindex, CHAR_X);						start.y = CHAR_getInt( petindex, CHAR_Y);						if( end.x > start.x )    end.x --;						else if( end.x < start.x )	end.x ++;						if( end.y > start.y )    end.y --;						else if( end.y < start.y )	end.y ++;																		parent_dir = NPC_Util_getDirFromTwoPoint( &start,&end );						//if( (end.x == start.x) && (end.x == start.y) )						//	parent_dir = -1;												/* 弘仿犯奴它旦左皿扑亦件汹五毛  蜇允月啃卞]						 * 戚及阂反蟆及阂及  毛馨丹方丹卞允月						 */						//print(" pdir:%d sx:%d sy:%d ex:%d ey:%d ", 						//	parent_dir, start.x, start.y, end.x, end.y ); 						//end = start;						if( parent_dir != -1 ) {							if( CHAR_walk( petindex, parent_dir, 0) == CHAR_WALKSUCCESSED )							{								CHAR_setWorkInt( petindex, CHAR_WORKPETFOLLOWCOUNT,									1 + CHAR_getWorkInt( petindex, CHAR_WORKPETFOLLOWCOUNT) );								if( CHAR_getWorkInt( petindex, CHAR_WORKPETFOLLOWCOUNT) > 1000 )								{									/*									CHAR_setInt( petindex, CHAR_VARIABLEAI,										200 + CHAR_getInt( petindex, CHAR_VARIABLEAI) );									*/									CHAR_setWorkInt( petindex, CHAR_WORKPETFOLLOWCOUNT, 0);									CHAR_pickupFollowPet( index, petindex );								}							}						}					}					else {						/* 赓渝祭仄卅云允 */						CHAR_setWorkInt( index, CHAR_WORKPETFOLLOW, -1);					}							}#endif		}    }    /* 99/03/09 By Kawata */    /* walk及瑛绊}WALKARRAY互弁伉失今木化中月桦宁互丐月及匹     * 潸曰  仄化戊疋月     */    strcpysafe( tmp ,sizeof(tmp),                CHAR_getWorkChar(index,CHAR_WORKWALKARRAY));    if( strlen( tmp) > 0 ) {        CHAR_setWorkChar(index,CHAR_WORKWALKARRAY,&tmp[1]);    }    /*  凛棉毛褡户月    */    CHAR_setWorkInt( index, CHAR_WORKWALKSTARTSEC , NowTime.tv_sec );    CHAR_setWorkInt( index, CHAR_WORKWALKSTARTMSEC , NowTime.tv_usec );}/*------------------------------------------------------------ * 汹五铵户毛瓒  允月[ * 娄醒 *  index           int         平乓仿    匹及奶件犯永弁旦 *  dir             char*         轾  侬   *  id              int         ID * 忒曰袄 *  卅仄 ------------------------------------------------------------*/void CHAR_walk_start(int index, int x, int y, char* dir, BOOL mapsendmode ){    if( !CHAR_CHECKINDEX( index ) )return;        // Nuke 08/27: Stop wap    /*    {       int ox, oy;       const int     seesiz = MAP_CHAR_DEFAULTSEESIZ;       ox = CHAR_getInt(index,CHAR_X);       oy = CHAR_getInt(index,CHAR_Y);       if ( ABS(x - ox) > seesiz || ABS(y - oy) > seesiz ) {          CHAR_talkToCli(index, -1, "因座标错误而断线。", CHAR_COLORYELLOW);          CONNECT_setCloseRequest_debug(getfdFromCharaIndex(index) , 1);          return;       }    }    */

⌨️ 快捷键说明

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