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

📄 skill.cpp

📁 网络游戏龙族 完整的登陆器 C++ 源代码
💻 CPP
📖 第 1 页 / 共 5 页
字号:


	//PutCompressImageApart( sx, sy+gy, g, 0,0, 640,480, n->delay );
	if( n->delay > 31 )		PutCompressedImage( x, y, sp );
	else PutCompressedImageFX( x, y, sp, n->delay, 1 );

	PutCompressImageApart( sx, sy+gy, g, 0, 0, ex, SCREEN_HEIGHT, n->delay );

}	



void DeleteSkillGauge( LPSKILLGAUGE tt )
{		
	LPSKILLGAUGE  t = g_SkillGauge;
			
	while( t != NULL )
	{		
		if( t == tt )
		{	
			if( t == g_SkillGauge )
			{	
				t = g_SkillGauge->next;
				MemFree( g_SkillGauge );

				g_SkillGauge = t;
				if( t != NULL )	g_SkillGauge->prev = NULL;
				return;
			}
			else 
			{
				if ( t->prev != NULL )
					t->prev->next = t->next;

				if( t->next != NULL )
					t->next->prev = t->prev;

   				MemFree( t );
				return;
			}
		}
		t = t->next;
	}		
}		



LPSKILLGAUGE FindSkillGauge( int type )
{
	LPSKILLGAUGE t;

	t = g_SkillGauge;
	while( t != NULL )
	{
		if( t->type == type) return t;
		t = t->next;
	}

	return t;
}



//  绢蠢  type俊 措窍咯  贸澜 龋免登搁 Gage甫 弊府霸等促. 
//  弊府绊 促矫 弊 type捞 龋免登搁 

LPSKILLGAUGE AddSkillGauge( int skillno, int x, int y, int min )
{
	LPSKILLGAUGE temp = NULL, t;
	int type;

	switch( skillno )	
	{						
		case 26	://Mining	
		case 32	://Cutting	
		case 36	://Digging		
					type = SKILLGAUGE_RESTTIME;
				break;		
								
		case 24	://Havest		
					type = SKILLGAUGE_HAVEST;
				break;		
							
		case 75 : 	// 炼访档
					type = SKILLGAUGE_TAME;
				break;		
							
		case 21	://Reclaim		
					type = SKILLGAUGE_RECLAIM;
				break;		
							
		case 22	://Sow		
					type = 	SKILLGAUGE_SOWING;
				break;	

				//1018 zhh
		case 28:
		case 30:
				type = SKILLGAUGE_RESTTIME;
			//	type = 	SKILLGAUGE_FISHING;
					break;	

		default : return NULL;
	}						

	t = FindSkillGauge( type );
	if( t )
	{	if( min == 999 )  // 弊成 绝局林技夸...
		{
			t->min = min;
			return NULL;
		}
		else		// 搬苞蔼捞 唱吭栏聪 焊咯林技夸..
		{
			t->delay = 75;
			t->min = min;
//			t->max = min;
			t->toggle = true;
			//1018 zhh
			t->x = x;
			t->y = y;
			return NULL;
		}
	}

	MemAlloc( temp, sizeof( SKILLGAUGE ));

	temp->skillno   = skillno;
	temp->type		= type;
	temp->delay		= 0;
	temp->x			= x;
	temp->y			= y;
	temp->off		= 0;
	temp->min		= min;
	temp->max		= 100;
	temp->toggle    = false;//true;

	temp->prev		= NULL;
	temp->next		= NULL;

	if( g_SkillGauge == NULL )
	{	
		g_SkillGauge		= temp;
	}	
	else
	{	
		t					= g_SkillGauge;
		g_SkillGauge		= temp;
		g_SkillGauge->next	= t;
		t->prev				= g_SkillGauge;
	}		
			
	return g_SkillGauge;
}					
void OutputSkillGauge( void )
{	
	LPSKILLGAUGE t, temp;
	LPORDERTABLE o;
		
	t = g_SkillGauge;
	while( t != NULL )
	{	
		//t->off ++;
		if( t->toggle == false ) // 刘啊....
		{
			t->delay +=3;
			if( t->delay > 400 ) t->delay = 400;
		}
		else t->delay --; 

//		if( t->max > t->min ) t->min ++;
		 
		//  皑家窍芭唱 .. 呈公腹捞 矫埃捞 儒弗巴捞搁..( 措面 400 frame )
		if( t->delay <= 0 || t->min == 999 ) { temp = t->next; DeleteSkillGauge( t ); t = temp; continue; }
		
		if( BoxAndDotCrash( Mapx, Mapy, GAME_SCREEN_XSIZE, GAME_SCREEN_YSIZE, t->x, t->y ) )
		{		
			o = &g_OrderInfo.order[ g_OrderInfo.count ];
					
			o->wType		= SPRITETYPE_SKILLGAUGE;
			o->x			= t->x;
			o->y			= t->y;
			o->height		= t->off;
			o->offset		= t->y;
			o->lpvData		= (LPVOID)t;
			o->show			= 1;
			o->sort			= 1;
			g_OrderInfo.count++;
		}
		t = t->next;
	}	
}		
//   畴啊促 扁贱 备泅吝 付快胶谅钎啊 裹困甫 哈绢唱搁 捞甫 炼沥秦霖促. 
void AdjustSkillMouseCursor( int *x, int *y )
{		
	int sx, sy, ex, ey;


	return;


//	if( SkillMouseDontMoveFlag == true )
	{	
//		sx = SkillDontMoveSx - Mapx;
//		sy = SkillDontMoveSy - Mapy;
//		ex = sx + SkillDontMoveXl - 2;
//		ey = sy + SkillDontMoveYl - 2;
		
		//  A tale that wasn't right -- Hallowin
		if( BoxAndDotCrash( sx, sy, ex-sx, ey-sy, *x, *y ))
		{ 
		}
		else
		{
			if( *x < sx+3 ) *x = sx;
			if( *y < sy+3 ) *y = sy;
			if( *x > ex ) *x = ex;
			if( *y > ey ) *y = ey;
													
		}
	}
}	
void SendSkillGauge( int x, int y, int skillno )
{	
	t_packet p;
		
	p.h.header.type = CMD_SKILL_GAUGE;
	{	
		p.u.client_skill_gauge.skillno = skillno;
		p.u.client_skill_gauge.x = x;
		p.u.client_skill_gauge.y = y;
	}	
	p.h.header.size = sizeof( t_client_skill_gauge );
	
	QueuePacket( &p, 1 );
}	
void RecvSkillGauge( t_server_skill_gauge *p )
{	
	AddSkillGauge( p->skillno, p->x, p->y, p->min);
}


//1024 zhh
//1004 zhh		//绢恫 酒捞袍阑 厘馒窍瘤 臼疽绰瘤 钎矫茄促
int IDontEquitSkillTool(int Skillno)	//void RecvSkillResultFail( t_server_skill_result_fail *p )俊辑 角菩茄 捞蜡甫 弊贰档 汗荤
{
	//1024 zhh
	if(SkillTable[ Skillno].Tool!=0)
		AddCurrentStatusMessage( 255,255 ,0,  lan->OutputMessage(2,SkillTable[Skillno].Tool) );
	return(0);
}

//1004 zhh
int AmIEquitSkillTool(int Skillno)		//selectskill俊辑 瘤陛 扁贱阑 静扁困茄 酒捞袍阑 厘馒窍绊 乐绰瘤 眉农窍绰 风凭.
{
	
	switch(SkillTable[ Skillno].Tool)
	{
	case -1:	break;
	case 0:		break;
	default:
		{//咯扁俊绰 SkillTable[ Skillno].Tool捞 厘馒茄 公扁狼 辆幅客 嘎栏搁
			int tool;
			tool=EquipItemAttr[WT_WEAPON].item_no;
			CItem_Tool *weapon	= (CItem_Tool *)ItemUnit( tool/1000 , tool%1000 );
			int type=0;
			if(weapon!=NULL)
				type=weapon->GetItemKind();
			if(weapon!=NULL && type == SkillTable[ Skillno].Tool )//档备啊 鞘夸窍绊 瘤陛 厘馒窍绊 乐栏搁
			{
				return(2);
			}
			else
			{
				IDontEquitSkillTool(Skillno);		//绢恫 酒捞袍阑 厘馒窍瘤 臼疽绰瘤 钎矫茄促
				return(0);//酒捞袍阑 力措肺 厘馒窍瘤 臼疽促.
			}
		}
		break;
	}
	return(1);
}

//1013 zhh
#define HP_GAUGE_DOT_MAX	40
extern int PutGrowingGauge( int x, int y);

//1013 zhh
int PutGrowingGauge( int x, int y)
{
	int gauge;

	switch(CursorCheckedItem->Anitype)
	{
	case ITEMANIMATION_FARM0: gauge = 4; break;
	case ITEMANIMATION_FARM1: gauge = 8; break;
	case ITEMANIMATION_FARM2: gauge = 12; break;
	case ITEMANIMATION_FARM3: gauge = 16; break;
	case ITEMANIMATION_FARM4: gauge = 20; break;
	case ITEMANIMATION_FARM5: gauge = 24; break;
	case ITEMANIMATION_FARM6: gauge = 28; break;
	case ITEMANIMATION_FARM7: gauge = 32; break;
	default: gauge = 0; break;
	}
	
	WORD rgb;
//	rgb = RGB16( 0, 0, 255 );					// 俊呈瘤啊 菜瞒 乐阑锭,
rgb = RGB16( 267 - (gauge *233) / 30 , 0 ,  (gauge *233) / 30 );	
	if(CursorCheckedItem->Anitype==ITEMANIMATION_FARM7)
		rgb = RGB16( 0 , 255 , 0 );					// 俊呈瘤啊 菜瞒 乐阑锭,

	

	for( int count=0; count<gauge; count+=2 )
		for( int a=0; a<2; a++ )
			for( int b=0; b<2; b++ )
			{
				//1013 zhh
				PutDot( x+a+count-gauge/2-4, y+b, rgb );
			}

	return 1;
}



/* itemjoin 俊辑 

   Item阑 付甸扁 困秦 


  版氰摹 拌魂.. 


  扁贱狼 版氰摹 盎脚 规过........


	skill_exp[ 31]   <- skillmain Table/ 曼炼.. 

	ch->skill_exp[ MotherSkillType ];

	MotherSkillExp;





	弊 扁贱俊 措茄 


	版氰摹狼 辆幅 31登绢 乐绊 捞绰 ( MotherSkillType  ) 曼炼茄促. 
		
	
	
	
	
	if( SkillTbl[    ].
	
	
  				(唱狼 skill Lv - 弥家 鞘夸 Lv)  
	己傍啦 =	------------------------------    
				(弥措 鞘夸 Lv - 弥家 鞘夸 Lv)	
				
	
		(唱狼 skill Lv
				  
	ch->skill_exp[ MotherSkillType ];				
	
	base = skillTbl[skillno].Ability_max - skillTbl[skillno].Ability_min;
	
	ch->skill_exp[ skillTMotherSkillType ];
	if( base )
	{
		hitrate =  skillTbl[skillTbl[skillno].Ability_min
	}
	
	if( 己傍啦 <= 0 ) 角菩.
	
	版氰摹 刘啊啦 ( 扁霖 )
	
	ch->skillexp[ SkillTbl[skillno].MotherSkillType ] 	+=  ( 100 - 己傍伏 )  * SkillTbl[].Ability_Fix;
	
	
	ch->skill[ 
	
	
	
	
	
1. 窜鉴 己傍 角菩 备盒.....

		-> Table俊 狼茄 沥秦柳 版氰摹甫 掘绰促. 
		-> 己傍啦篮 0 - 100 荤捞狼 Lev阑 曼炼等促. 

2. 	Item包访 等 扁贱俊 措茄 版氰摹 魂沥扁霖... 

		
		己傍啦 

				鞘夸扁贱 skill1, skill2, skill3 阿阿捞 0捞 酒囱 荐摹甫 啊瘤绊 乐栏搁 鞘夸扁贱捞促.
					skill2, skill3篮 窜鉴 鞘夸炼扒捞 等促. skill2_min, skill3_min父捞 曼炼等促. 



				( item_join[].skill1_max - item_join[].skill1_min )



				if( item_join[].skill2 && item_join[].skill2_min >= ch->skill[ skillno]  )
				if( item_join[].skill3 && item_join[].skill2_min >= ch->skill[ skillno]  )

		

*/


//010205 lsw
int skill_fail(int skill)
{
	if(skill <= 341 && skill >=321)//1瞒 流诀老 版快 
	{
		switch( rand()%2)
			{
				case 0 :	AddCurrentStatusMessage( 255,255 ,0,  lan->OutputMessage(2,406)); break;
				default: 	AddCurrentStatusMessage( 255,255 ,0,  lan->OutputMessage(2,407)); break;
			}
	}

	else if(skill <= 353 && skill >=343)//2瞒 流诀老 版快 
	{
		switch( rand()%2)
			{
				case 0 :	AddCurrentStatusMessage( 255,255 ,0,  lan->OutputMessage(2,408)); break;
				default: 	AddCurrentStatusMessage( 255,255 ,0,  lan->OutputMessage(2,409)); break;
			}
	}

	else
	{
		AddCurrentStatusMessage( 255,255 ,0,  lan->OutputMessage(2,410));//叼弃飘
	}
	
	return 0;
}

void CheckDeleteSkill()
{
	if( SCharacterData.SkillId[46] )		// 堪祸 胶懦阑 硅奎促搁...
	{
		CallServer( CMD_CHECK_SKILL );
		SCharacterData.SkillId[46] = 0;
	}
}

void CMagic::Explain(const int iX, const int iY, const BOOL bSpell )
{
	SetHangulAlign(TA_LEFT);
	const int iWidth = TXT_BG_SHORT_WIDTH;
	int iCount = 0;
	int iReultLineCount = 0;
	
	int iBlankGab = 0;
	int iReultBlankSize = 0;
	
	const int iLineGab = TxtOut.GetLineGab();
	const int iBlankGabSize = TxtOut.GetBlankGabSize();

	if( GetSysInfo( SI_GAME_MAKE_MODE ) ) Hprint2( iX, iY-15, g_DestBackBuf, "%d", GetMagicNum() );
	
	switch(bSpell)
	{
	case WIZARD_SPELL:
		{	//庆歹弊覆
			TxtOut.Init(COLOR_BLUE,TXT_BG_SHORT_WIDTH);

			TxtOut.PutTextHeaderBGImg(iX,iY+iBlankGab+iLineGab*iCount,iWidth);

			Hcolor( FONT_COLOR_BLIGHT_BLUE );
			iReultLineCount = TxtOut.RcTXTOut(iX,iY+iBlankGab+iLineGab*iCount,iWidth,1,"<%s>", GetName() );
			iCount += iReultLineCount;

			Hcolor( FONT_COLOR_NUMBER );
			iReultLineCount = TxtOut.RcTXTOut(iX,iY+iBlankGab+iLineGab*iCount,iWidth,1,"Mana : %3d", g_lpMT[GetMagicNum()].exhaust_MP);
			Hcolor( FONT_COLOR_SPECIAL );
			Hprint( iX+1,iY+iBlankGab+iLineGab*iCount, g_DestBackBuf, "Mana :");
			iCount += iReultLineCount;
			
			Hcolor( FONT_COLOR_NUMBER );
			iReultLineCount = TxtOut.RcTXTOut(iX,iY+iBlankGab+iLineGab*iCount,iWidth,1,"Mp : %3d", g_lpMT[GetMagicNum()].exhaust_WS);
			Hcolor( FONT_COLOR_SPECIAL );
			Hprint( iX+1,iY+iBlankGab+iLineGab*iCount, g_DestBackBuf, "Mp :");
			iCount += iReultLineCount;
		}break;
	case PRIEST_SPELL:
		{	//庆歹弊覆
			TxtOut.Init(COLOR_GREEN,TXT_BG_SHORT_WIDTH);
			TxtOut.PutTextHeaderBGImg(iX,iY+iBlankGab+iLineGab*iCount,iWidth);

			Hcolor( FONT_COLOR_BLIGHT_GREEN );
			iReultLineCount = TxtOut.RcTXTOut(iX,iY+iBlankGab+iLineGab*iCount,iWidth,1,"<%s>", GetName() );
			iCount += iReultLineCount;

			Hcolor( FONT_COLOR_NUMBER );
			iReultLineCount = TxtOut.RcTXTOut(iX,iY+iBlankGab+iLineGab*iCount,iWidth,1,"Divine : %3d", g_lpMT[GetMagicNum()+150].exhaust_MP);
			Hcolor( FONT_COLOR_SPECIAL );
			Hprint( iX+1,iY+iBlankGab+iLineGab*iCount, g_DestBackBuf, "Divine :");
			iCount += iReultLineCount;
		}break;
	}	
	Hcolor( FONT_COLOR_WHITE );
	iReultLineCount = TxtOut.RcTXTOut(iX,iY+iBlankGab+iLineGab*iCount,iWidth,1,GetExplain());//汲疙巩
	iCount += iReultLineCount;

	//部府弊覆
	TxtOut.PutTextTailBGImg(iX,iY+iBlankGab+iLineGab*iCount,iWidth);
}

void CSkill::Explain(const int iX, const int iY)//020815 lsw
{
	SetHangulAlign(TA_LEFT);
	const int iWidth = TXT_BG_SHORT_WIDTH;
	int iCount = 0;
	int iReultLineCount = 0;
	
	int iBlankGab = 0;
	int iReultBlankSize = 0;
	
	const int iLineGab = TxtOut.GetLineGab();
	const int iBlankGabSize = TxtOut.GetBlankGabSize();
	
	if( GetSysInfo( SI_GAME_MAKE_MODE ) ) Hprint2( iX, iY-20, g_DestBackBuf, "%d, %d, %d", num, inclusive, series );

	//庆歹弊覆
	TxtOut.Init(COLOR_BLACK,TXT_BG_SHORT_WIDTH);
	TxtOut.PutTextHeaderBGImg(iX,iY+iBlankGab+iLineGab*iCount,iWidth);

	Hcolor( FONT_COLOR_SKILL );
	iReultLineCount = TxtOut.RcTXTOut(iX,iY+iBlankGab+iLineGab*iCount,iWidth,0,"<%s>",han_name);
	iCount += iReultLineCount;

	if(	targettype !=SKILLTARGETTYPE_2ND_GM
	&&	targettype !=SKILLTARGETTYPE_SKILL_MASTER)//021122 lsw
	{
		Hcolor( FONT_COLOR_NUMBER );
		iReultLineCount = TxtOut.RcTXTOut(iX,iY+iBlankGab+iLineGab*iCount,iWidth,0,"Ability : %3d  %4d",SCharacterData.nJobSkill[inclusive].skillexp/10000, SCharacterData.nJobSkill[inclusive].skillexp%10000 );//020815 lsw
		iCount+=iReultLineCount;//020815 lsw
		Hcolor( FONT_COLOR_SPECIAL );
		Hprint2( iX, iY+iBlankGab+iLineGab*iCount, g_DestBackBuf, "Ability :

⌨️ 快捷键说明

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