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

📄 citem.cpp

📁 国内著名网络游戏dragon的服务端完整源码 内附完整数据库结构
💻 CPP
📖 第 1 页 / 共 3 页
字号:
// *****************************************************************************************
// *****************************************************************************************
// *****************************************************************************************
//    Item 积己 
//	  Item 积己 
// *****************************************************************************************
// *****************************************************************************************
// *****************************************************************************************
// *****************************************************************************************
// *****************************************************************************************

int ItemGen_successrate( t_connection c[], int cn, int type, int tableno, int itemtype, int itemno )
{
	CHARLIST *ch;

	if( cn >= DRAGON_MAX_CONNECTIONS ) return 0;
	if( cn < DRAGON_CONNECTIONS_START ) return 0;

	ch = &c[cn].chrlst;
	if( ch->bAlive != ALIVE_ ) return 0;
//----------------------------------------------------  Check Variables 裹困...
	return 100;
}

/*
#define IATTR_DURATION			0
#define IATTR_LIMIT				1	
#define IATTR_ATTR				2
#define IATTR_ID				3
#define IATTR_RESERVED0			4
#define IATTR_RESERVED1			5

#define IA2_HIDE			0x00000001
#define IA2_NOTMOVE			0x00000002
#define IA2_POISONED		0x00000004
#define IA2_OPENED			0x00000008
#define IA2_BROKEN			0x00000010
#define IA2_HOUSE			0x00000020
#define IA2_MAGIC			0x00000040
#define IA2_CANNOTUSE		0x00000080
#define IA2_NOIDENTIFIED	0x00000100
#define IA2_DOOR			0x00000200
#define IA2_BOX				0x00000400
#define IA2_CHAIR			0x00000800
#define IA2_TABLE			0x00001000


#define	PLANT			0
#define	MINERAL			1
#define	HERB			2
#define	COOK			3 
#define	POTION			4
#define	TOOL			5
#define	WEAPON			6
#define	DISPOSABLE		7
#define	ARMOR			8
#define	ACCESSORY		9
#define	ETC				10
#define MAP				11	
*/



unsigned int ItemGen_Duration( int type, int no )
{
	return 0;
}

unsigned int ItemGen_Limit( int type, int no )
{
	return 0;
}

unsigned int ItemGen_Attr( int type, int no )
{
	return 0;
}

unsigned int ItemGen_DbId( int type, int no )
{
	return 0;
}




void RecvItemDoorOpenClose( int cn, t_item_door_open_close *p )
{
	LPITEMLIST i;
	int item_id = p->item_id;

	if( item_id < 0 ) return;
	if( item_id >= MAX_ITEM_LIST ) return;

	i = &ItemList[ item_id ];
			
	if( (i->attr[ IATTR_ATTR] & IA2_DOOR) == 0 ) return; // 巩捞 酒聪匙...
			
	if( p->openclose == 0 ) // 凯绢林技夸..
	{		
		if( i->attr[ IATTR_ATTR] & IA2_OPENED ) return; // 凯妨 乐栏搁 府畔.
		//	
		// 咯扁辑 connections[cn].chrslt啊  凯荐 乐绰瘤 八荤茄促.
		//	
		i->attr[ IATTR_ATTR] |= IA2_OPENED;
			
		SetArea( CHANGE_IA2_ATTR_ITEM_AREA, item_id );
	}		
	else // 摧酒林技夸.
	{		
		if( (i->attr[ IATTR_ATTR] & IA2_OPENED) == 0 ) return; // 摧囚 乐栏搁 府畔.
		//
		// 咯扁辑 connections[cn].chrslt啊  摧阑荐 乐绰瘤 八荤茄促.
		//
		i->attr[ IATTR_ATTR] &= (~(IA2_OPENED) );
		
		SetArea( CHANGE_IA2_ATTR_ITEM_AREA, item_id );
	}	
}		
	
	
void SendItemAttrChange( t_connection c[], int cn, int id, int attr )
{	
	t_packet packet;
	
	packet.h.header.type = CMD_ITEM_ATTR_CHANGE;
	{
		packet.u.item_attr_change.item_id = id;	
		packet.u.item_attr_change.array = attr;
		packet.u.item_attr_change.attr  = ItemList[id].attr[ attr];
	}
	packet.h.header.size = sizeof( item_attr_change );
	
	QueuePacket(c, cn, &packet, 1);
}	
	
void SendItemFoot_On_Trap0( t_connection c[], int cn, int item_id ) 
{	
	t_packet packet;

  connections[cn].chrlst.DecLife(ItemList[item_id ].attr[IATTR_DURATION]);

	if (connections[cn].chrlst.IsDead() == true)
	{
		killCharacter( NULL, &connections[cn].chrlst );
		SendCharacterCondition( &connections[cn].chrlst, 0);
	}

	packet.h.header.type = CMD_FOOT_ON_TRAP_0_ITEM;
	packet.h.header.size = sizeof(t_server_foot_on_trap0);
	packet.u.server_foot_on_trap0.idServer = WORD(cn);
	packet.u.server_foot_on_trap0.idItem = WORD(item_id);
	packet.u.server_foot_on_trap0.nLife = connections[cn].chrlst.Hp;
	QueuePacket(c, cn, &packet, 1);
	CastMe2Other( cn, &packet );
}	

void SendItemFoot_On_Trap1( t_connection c[], int cn, int item_id )
{	
	t_packet packet;

  connections[cn].chrlst.DecLife(ItemList[ item_id ].attr[IATTR_DURATION]);

	if (connections[cn].chrlst.IsDead() == true)
	{
		killCharacter( NULL, &connections[cn].chrlst );
		SendCharacterCondition( &connections[cn].chrlst, 0);
	}
	
	packet.h.header.type = CMD_FOOT_ON_TRAP_1_ITEM;
	packet.h.header.size = sizeof(t_server_foot_on_trap1);
	packet.u.server_foot_on_trap1.idServer = WORD(cn);
	packet.u.server_foot_on_trap1.idItem= WORD(item_id);
	packet.u.server_foot_on_trap1.nLife = connections[cn].chrlst.Hp;
	QueuePacket(c, cn, &packet, 1);
	CastMe2Other( cn, &packet );
}	



// 010322 KHS
void CheckItemTimeElapsed( void )
{										
	static int count;								
	int s,e;	
	ITEMLIST *ii;
	DWORD time;

	time = g_curr_time;

	if( count >= MAX_ITEM_LIST ) count = 0;
	s = count;												
	count += ( MAX_ITEM_LIST/ 100 );
	e = count;					
	if( e > MAX_ITEM_LIST ) e = MAX_ITEM_LIST;		// 茄锅俊 MAX_ITEM_LIST/3沥档父 Check茄促. 辑滚 何淬阑 临捞扁 困秦.
								
	for( int m = s ; m < e ; m ++)
	{							
		if( ItemList[m].bAlive == 0 ) continue;

		ii = &ItemList[m];
	
		unsigned int attr2 = ii->attr[ IATTR_ATTR];
		if( GetAttr2( attr2, IA2_BOX ) )
		{
			if( GetAttr2( attr2, IA2_OPENED ) ) 
			{
				if( time > ii->attr[ IATTR_LIMIT] ) // 柄柳第 倔付埃狼 矫埃捞 瘤车促. 
				{
					ii->attr[ IATTR_ATTR] = IA2_NOTMOVE | IA2_BOX;
					SetArea( CHANGE_IA2_ATTR_ITEM_AREA, m );
					continue;
				}
			}
		}
		else if( attr2 & IA2_FARM0 )
		{
			if( ii->attr[IATTR_DURATION] < g_curr_time )
			{
				DWORD time = ReturnHowLongTimeGrow( ii );
				ii->attr[IATTR_ATTR ] &= ~(IA2_FARM0);
				ii->attr[IATTR_ATTR ] |= IA2_FARM1;
				ii->attr[IATTR_DURATION ] = g_curr_time + time;
				SetArea( CHANGE_IA2_ATTR_ITEM_AREA, m );
				SetArea( CHANGE_IA2_DURATION_ITEM_AREA, m );
			}
		}else if( attr2 & IA2_FARM1 )
		{
			if( ii->attr[IATTR_DURATION] < g_curr_time )
			{
				DWORD time = ReturnHowLongTimeGrow( ii );
				ii->attr[IATTR_ATTR ] &= ~(IA2_FARM1);
				ii->attr[IATTR_ATTR ] |= IA2_FARM2;
				ii->attr[IATTR_DURATION ] = g_curr_time + time;
				SetArea( CHANGE_IA2_ATTR_ITEM_AREA, m );
				SetArea( CHANGE_IA2_DURATION_ITEM_AREA, m );
			}
		}else if( attr2 & IA2_FARM2 )
		{
			if( ii->attr[IATTR_DURATION] < g_curr_time )
			{
				DWORD time = ReturnHowLongTimeGrow( ii );
				ii->attr[IATTR_ATTR ] &= ~(IA2_FARM2);
				ii->attr[IATTR_ATTR ] |= IA2_FARM3;
				ii->attr[IATTR_DURATION ] = g_curr_time + time;
				SetArea( CHANGE_IA2_ATTR_ITEM_AREA, m );
				SetArea( CHANGE_IA2_DURATION_ITEM_AREA, m );
			}
		}else if( attr2 & IA2_FARM2 )
		{
			if( ii->attr[IATTR_DURATION] < g_curr_time )
			{
				DWORD time = ReturnHowLongTimeGrow( ii );
				ii->attr[IATTR_ATTR ] &= ~(IA2_FARM2);
				ii->attr[IATTR_ATTR ] |= IA2_FARM3;
				ii->attr[IATTR_DURATION ] = g_curr_time + time;
				SetArea( CHANGE_IA2_ATTR_ITEM_AREA, m );
				SetArea( CHANGE_IA2_DURATION_ITEM_AREA, m );
			}
		}else if( attr2 & IA2_FARM3 )
		{
			if( ii->attr[IATTR_DURATION] < g_curr_time )
			{
				DWORD time = ReturnHowLongTimeGrow( ii );
				ii->attr[IATTR_ATTR ] &= ~(IA2_FARM3);
				ii->attr[IATTR_ATTR ] |= IA2_FARM4;
				ii->attr[IATTR_DURATION ] = g_curr_time + time;
				SetArea( CHANGE_IA2_ATTR_ITEM_AREA, m );
				SetArea( CHANGE_IA2_DURATION_ITEM_AREA, m );
			}
		}else if( attr2 & IA2_FARM4 )
		{
			if( ii->attr[IATTR_DURATION] < g_curr_time )
			{
				DWORD time = ReturnHowLongTimeGrow( ii );
				ii->attr[IATTR_ATTR ] &= ~(IA2_FARM4);
				ii->attr[IATTR_ATTR ] |= IA2_FARM5;
				ii->attr[IATTR_DURATION ] = g_curr_time + time;
				SetArea( CHANGE_IA2_ATTR_ITEM_AREA, m );
				SetArea( CHANGE_IA2_DURATION_ITEM_AREA, m );
			}
		}else if( attr2 & IA2_FARM5 )
		{
			if( ii->attr[IATTR_DURATION] < g_curr_time )
			{
				DWORD time = ReturnHowLongTimeGrow( ii );
				ii->attr[IATTR_ATTR ] &= ~(IA2_FARM5);
				ii->attr[IATTR_ATTR ] |= IA2_FARM6;
				ii->attr[IATTR_DURATION ] = g_curr_time + time;
				SetArea( CHANGE_IA2_ATTR_ITEM_AREA, m );
				SetArea( CHANGE_IA2_DURATION_ITEM_AREA, m );
			}
		}else if( attr2 & IA2_FARM6 )
		{
			if( ii->attr[IATTR_DURATION] < g_curr_time )
			{
				DWORD time = ReturnHowLongTimeGrow( ii );
				time += time;

				ii->attr[IATTR_ATTR ] &= ~(IA2_FARM6);
				ii->attr[IATTR_ATTR ] |= IA2_FARM7;
				ii->attr[IATTR_DURATION ] = g_curr_time + time;
				SetArea( CHANGE_IA2_ATTR_ITEM_AREA, m );
				SetArea( CHANGE_IA2_DURATION_ITEM_AREA, m );
			}
		}else if( attr2 & IA2_FARM7 )	// 荐犬阑 窍瘤 臼绊 矫埃捞 瘤唱搁 荤扼柳促. 
		{
			//001214 zhh		//荐犬窍绰 窜拌父 5窜拌啊 等促.(荐犬窍绰单 矫埃捞 何练窃)
			if( ii->attr[IATTR_DURATION] < g_curr_time )
			{
				RemoveItemList( m );
			}
		}
		else if( attr2 & IA2_FIRE )
		{
			if( ii->attr[IATTR_DURATION] < g_curr_time )
			{
				ii->bAlive = REMOVE_;
				SetArea( REMOVE_ITEM_AREA, m );
			}
		}
		else if( attr2 & IA2_DOOR )
		{
		}
		else if( attr2 & IA2_HOUSE )
		{
		}
		else if( attr2 & IA2_CHAIR )
		{
		}
		else if( attr2 & IA2_TABLE )
		{
		}
		else if( attr2 & IA2_TRAPED0 )
		{
			if( g_curr_time  - ii->birthday > TRAP_DELETE_TIME )//020315 lsw
			{	
				ii->birthday = g_curr_time;

				{
					ii->bAlive = REMOVE_;
					SetArea( REMOVE_ITEM_AREA, m );
				}
			}
		}
		else if( attr2 & IA2_TRAPED1 )
		{		
			if( g_curr_time  - ii->birthday > TRAP_DELETE_TIME )//020215 lsw
			{	
				ii->birthday = g_curr_time;

				{
					ii->bAlive = REMOVE_;
					SetArea( REMOVE_ITEM_AREA, m );
				}
			}
		}
		else if( ( GetAttr2( attr2, IA2_COLOSSUS_STONE ) )
			|| ( GetAttr2( attr2, IA2_SCENARIO_POTAL ) )	)	// 020620 YGI
		{
			// 矫埃捞 瘤唱档 酒公繁 累诀阑 窍瘤 臼绰促.
		}
		else		// 矫埃捞 版苞窍搁 磊悼栏肺 瘤况柳促. 
		{		

			int iLimitTime = 120;
			if(!LocalMgr.IsAbleNation(KOREA))//030102 lsw Local
			{
				iLimitTime = 60;
			}
			if( g_curr_time  - ii->birthday > iLimitTime )
			{	
				ii->birthday = g_curr_time;

				{
					ii->bAlive = REMOVE_;
					SetArea( REMOVE_ITEM_AREA, m );
				}
			}	
		}
	}
}








//-----------------------------------------------------------------------
// 酒捞袍 积己 窃荐 ( 10/24 )
//-----------------------------------------------------------------------
/*
DWORD ItemAttr_Make_First( int type, int itemno, int success_rate )
{
	switch( type )
	{
		case	PLANT			:	return global_time + (21600 * 60);
		case	MINERAL			:
		case	HERB			:	
		case	COOK			:	return global_time + (21600 * 60);
		case	POTION			:
		case	TOOL			:	
		case	WEAPON			:
		case	DISPOSABLE		:
		case	ARMOR			:
		case	ACCESSORY		:
		case	ETC				:
		break;
	}
	return 0L;
}
*/



//////////////////////////////////////////////////////////////////////////
// 某腐磐 牢亥配府俊辑 后镑 茫扁, 绝栏搁 0阑 府畔
bool SearchInv( ItemAttr inv[3][3][8], int &a, int &b, int &c )
{
	for( a=0; a<3; a++)
	for( b=0; b<3; b++)
	for( c=0; c<8; c++)
	{
		if( !inv[a][b][c].item_no ){return true;}
	}

	return false;	
}

int SearchInv_invert( ItemAttr inv[3][3][8], int &a, int &b, int &c )
{
	for( a=2; a >=0; a--)
	for( b=2; a >=0; b--)
	for( c=7; c >=0; c--)
	{
		if( !inv[a][b][c].item_no )
			return 1;
	}

	return 0;	
}


// add money 俊辑 荤侩且 MAX_MONEY焊促 累篮 捣苞 后傍埃阑 茫绰 窃荐		// 001030 YGI
int SearchMoneyItem( ItemAttr inv[3][3][8], int &a, int &b, int &c )		
{
	for( a=0; a<3; a++)
	for( b=0; b<3; b++)
	for( c=0; c<8; c++)
	{
		if( inv[a][b][c].item_no ) 
		{
			CItem *t = ItemUnit( inv[a][b][c] );
			if( !t ) continue;
			
			int iItemKind = IK_NEW_MONEY;
			if(LocalMgr.IsChangeMoney())//030102 lsw
			{
				iItemKind = IK_NEW_MONEY;
			}
			else
			{
				iItemKind = IK_MONEY;
			}

			if( t->GetItemKind() == iItemKind )
			{
				if( inv[a][b][c].attr[IATTR_MUCH] < MAX_MONEY ) 
				{
					return 1;
				}
			}
		}
		else 
		{
			return 1;
		}
	}

	return 0;	
}


///////////////////////////////////////////////////////////////////////////////////

⌨️ 快捷键说明

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