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

📄 menuserver2.cpp

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

int C2JinSearch::Load( char *filename )
{
	Remove();

	FILE *fp = fopen( filename, "rt" );
	if( !fp ) return 0;	

	char temp[256];
	int count = 0;
	while( fgets( temp, 256, fp ) )
	{
		if( temp[0] == ' ' || temp[0] == ';' || temp[0] == '\n' ) continue;
		if( !atoi( temp ) ) continue;
		count++;
	}
	fseek( fp, 0, SEEK_SET );
	max = count;
	item = new int[max];
	count = 0;
	while( fgets( temp, 256, fp ) )
	{
		if( temp[0] == ' ' || temp[0] == ';' || temp[0] == '\n' ) continue;
		int value = atoi( temp );
		if( !value ) continue;
		item[count] = value;
		count++;
	}
	Sort();
	fclose( fp );
	return 1;
}

int C2JinSearch::Sort()
{
	if( !max ) return 0;
	for( int i=0; i<max-1; i++ )
	{
		for( int j=i+1; j<max; j++ )
		{
			if( item[i] > item[j] )
			{
				int temp = item[i];
				item[i] = item[j];
				item[j] = temp;
			}
		}
	}
	return 1;
}

int C2JinSearch::Search( int no )
{
	if( !max ) return 0;
	int low=0, high = max-1;
	int mid = 0;
	while( low <= high )
	{
		mid = (low+high)/2;
		if( item[mid] == no ) return 1;
		if( item[mid] < no ) low = mid+1;
		else high = mid-1;
	}

	return 0;
}

int RecvSaveItemLogByEvent( t_packet *p )
{	//< CSD-030806
	if( g_MapPort == GetManagementMapPort( MM_SAVE_LOG_FILE_MAP ) ) 
	{
		k_item_log *pData = &p->u.kein.item_log;
		if( g_item_log.GetSaveLv() )
		{
			//罐绰单俊辑绰 促 历厘窍磊.
			//if( pData->lv > g_item_log.GetSaveLv()  ) return 0;
		}
		return SaveItemLog( pData );
	}
	return 0;
}	//> CSD-030806

void SendItemEventLog( ItemAttr *item, short int hero_cn, short int target, int event_type, int lv )
{
	if( !g_item_log.IsSave( item, event_type, lv ) ) return;		// 历厘 殿鞭捞 救登搁 府畔窍磊.. // 030506 YGI

	CHARLIST *hero = CheckServerId( hero_cn );
	if( !hero ) return;

	t_packet packet;
	k_item_log *pData = &packet.u.kein.item_log;
	packet.h.header.type = CMD_SAVE_ITEM_LOG;
	packet.h.header.size = sizeof( k_item_log );

	if( lv == 0 ) lv = 1;
	pData->item = *item;
	pData->lv = g_item_log.GetTypeLv(event_type)?g_item_log.GetTypeLv(event_type):1;	// 030506 YGI
	pData->port = GetOwnPort();	
	pData->type = event_type;
	strcpy( pData->name1, hero->Name );
	if( target > 0 )
	{
		CHARLIST *target_ch;
		if( target > 10000 )	target_ch = CheckNpcId( target-10000 );
		else					target_ch = CheckServerId( target );

		if( target_ch )	
		{
			if( target_ch->IsNpc() )
			{
				strcpy( pData->name2, "<_NPC_>");
			}
			else
			{
				memcpy( pData->name2, target_ch->Name, 20 );//020510 lsw //趣矫 葛甫 Garbage Value
			}
		}
		else
		{
			strcpy( pData->name2, "<_NULL_>" );
		}
	}
	else
	{
		switch( event_type )
		{
			default :	//acer7
			case SILT_GET_STOLEN					:
			case SILT_PUT_STOLEN					:
			case SILT_GET_OTHER_CH_INVEN	:	
			case SILT_PUT_OTHER_CH				:
			case SILT_GET_OTHER_CH				:
				strcpy( pData->name2, "<_NULL_>" );
				break;
			case SILT_PUT_GROUND					:
			case SILT_GET_GROUND					:
				strcpy( pData->name2, "<_GROUND_>" );
				break;
			case SILT_PUT_BANK						:
			case SILT_GET_BANK						:
				strcpy( pData->name2, "<_BANK_>" );
				break;

			case SILT_MAKE_BY_DB					:	
			case SILT_MAKE_BY_SCRIPT			:	
			case SILT_MAKE_BY_SKILL				:
			case SILT_RESOURCE_BY_SKILL		:
				strcpy( pData->name2, "<_MAKE_>" );
				break;
			case SILT_PUT_STORE						:
			case SILT_GET_STORE						:
				strcpy( pData->name2, "<_STORE_>" );
				break;

			case SILT_GET_GAMBLE_ITEM			:
			case SILT_GET_TODAY_ITEM			:	
			case SILT_GET_GUILD_WAR				:
			case SILT_USE									:
			case SILT_DELETE_BY_DURATION	:
			case SILT_DELETE_BY_ATTR			:
			case SILT_DELETE_BY_RARE_ATTR	:
				strcpy( pData->name2, "<_SERVER_>" );
				break;
			//<! BBD 040226	苛记 芭贰矫 肺弊扼绰吧 舅荐 乐档废 眠啊
			case SILT_REGISTER_AUCTION_ITEM		:	// 苛记 殿废矫
			case SILT_CANCEL_AUCTION_SELL_ITEM	:	// 殿废 秒家矫
			case SILT_TAKE_AUCTION_RESULT_ITEM	:	// 备涝茄 拱扒 茫阑矫
				strcpy( pData->name2, "<_AUCTION_>" );
				break;
			//> BBD 040226	苛记 芭贰矫 肺弊扼绰吧 舅荐 乐档废 眠啊

		}
	}
	SendDirectMap( &packet, GetManagementMapPort( MM_SAVE_LOG_FILE_MAP ) );
}

int GetServerSetNum()
{
	return g_pServerTable->GetServerSetNum();
}

// GM 扁瓷, 甘 碍力 捞悼
//acer7
void RecvDirectMapMove( t_packet *p, short int cn )
{
	if( !CheckServerId( cn ) ) return;

	int index = p->u.kein.direct_map_move.map_number;
	int x = p->u.kein.direct_map_move.x;
	int y = p->u.kein.direct_map_move.y;
	char *name = p->u.kein.direct_map_move.name;
	int target_id = cn;

	if( name[0] )
	{
		int temp = ExistHe( name );		// cn 蔼捞 乐促搁...
		if( temp == -1 ) 
		{
			SendPutMenuString( KM_FAIL, 181, cn );		// 鞍篮 甘俊 绝绰 某腐磐 涝聪促.
			return;		// 惑措祈 捞抚捞 肋 给灯促.
		}
		target_id = temp;
	}
	CrackMgr.SendHackingUser( cn, USE_GM_TOOL, " Map Move " );
	GotoUser( MapInfo[index].mapfile, x, y, target_id );			// 020705 YGI
}


// acer4
void RecvSearchChar( t_packet *p, short int cn )
{
	CHARLIST *ch = CheckServerId( cn );
	if( !ch ) return;

	t_packet packet;
	char *name = p->u.kein.default_name;
	int he = ExistHe( name );
	if( he > 0 )
	{
		CHARLIST *him = CheckServerId( he );
		if( !him ) return;

		PutHimInfo( him, &packet.u.kein.char_info );
		packet.h.header.type = CMD_SEARCH_OTHER_CHAR;
		packet.h.header.size = sizeof( k_char_info );
		QueuePacket( connections, cn, &packet, 1 );
		return;
	}
	else		// 促弗 甘栏肺 夸没茄促.
	{
		packet.h.header.type = CMD_SEARCH_OTHER_CHAR_MAP;
		packet.u.kein.char_info_map.port = GetOwnPort(); 
		packet.u.kein.char_info_map.cn = cn;
		strcpy( packet.u.kein.char_info_map.name, name );
		packet.h.header.size = sizeof( k_char_info_map );
		SendPacket2Maps( &packet );
	}
}

// acer4
int PutHimInfo( CHARLIST *him, k_char_info *him_info )
{	//< CSD-030324
	him_info->map_number = MapNumber;
	him_info->curr_tactic_kind = him->GetTacticsKind();
	him_info->curr_tactic_lv = him->GetWeaponSkill();
	memcpy( &him_info->name_status, &him->name_status, sizeof( DWORD ) );
	him_info->btLevel = him->GetLevel(); // CSD-030806
	him_info->nk = him->GetNK( him->name_status.nation );
	him_info->x = him->MoveSx;
	him_info->y = him->MoveSy;
	him_info->guild_code = him->GetGuildCode();
	return 1;
}	//> CSD-030324

void RecvSearchCharMap( t_packet *p )
{
	int server_id = p->u.kein.char_info_map.cn;
	int port = p->u.kein.char_info_map.port;
	char *name = p->u.kein.char_info_map.name;

	int he = ExistHe( name );
	if( he > 0 )
	{
		CHARLIST *him = CheckServerId( he );
		if( !him ) return;

		k_char_info data;
		PutHimInfo( him, &data );
		SendDirectClientOtherMap( CMD_SEARCH_OTHER_CHAR, server_id, port, &data, sizeof( k_char_info ) );
	}
}

//acer7
void RecvUseGmTool_SaveLog( t_packet *p, short int cn )
{
	CHARLIST *ch = CheckServerId( cn );
	if( !ch ) return;

	char *type = p->u.kein.default_msg;
	CrackMgr.SendHackingUser( cn, USE_GM_TOOL, type );
}

void RecvEventNumber( t_packet *p, short int cn )
{
	CHARLIST *ch = CheckServerId( cn );
	if( !ch ) return;

	int event_no = p->u.kein.default_int;
}

void MapServerFree_kein()
{
	SAFE_DELETE(g_pDungeonMap);
	SAFE_DELETE(g_pDungeonMgr);
	
}

void SaveChangeLadder(CHARLIST* pTarget, int old_ladder, int new_ladder, int type)
{	//< CSD-040224
	string strPath;

	if (!g_pLogManager->GetLogPath(LT_CHANGE, strPath))
	{
		return;
	}
	
	FILE* fp = fopen(VA("%s/%s.txt", strPath.c_str(), pTarget->Name), "at+");

	if (fp == NULL)
	{
		fp = fopen(VA("%s/%s.txt", strPath.c_str(), connections[pTarget->GetServerID()].id), "at+");

		if (fp == NULL)
		{
			return;
		}
	}
	
	char why[MAX_PATH];

	switch (type)
	{
		case CLT_CHANGE_DUAL: 
			{
				strcpy(why, "upgrade dual");
				break;
			}
		case CLT_WIN_COLOSSUS:
			{
				strcpy(why, "win colossus");
				break;
			}
		case CLT_LOSE_COLOSSUS:
			{
				strcpy(why, "loss colossus");
				break;
			}
		default:
			{
				strcpy(why, "default");
				break;
			}
	}

	fprintf(fp,
		    "@ChangeLadderScore	%02d/%02d/%02d/%02d/%02d/%02d	(old ladder)%d(==>)	(new ladder)%d	(why)%s",
			g_year - 2000, g_mon + 1, g_day, g_hour, g_min, g_sec,
			old_ladder, new_ladder, why);
	fprintf(fp, "\n");
	fclose(fp);
}	//> CSD-040224

void SaveObtainCombat(CHARLIST* pTarget, int nOld, int nNew)
{	//< CSD-040224
	string strPath;

	if (!g_pLogManager->GetLogPath(LT_CHANGE, strPath))
	{
		return;
	}
	
	FILE* fp = fopen(VA("%s/%s.txt", strPath.c_str(), pTarget->Name), "at+");

	if (fp == NULL)
	{
		fp = fopen(VA("%s/%s.txt", strPath.c_str(), connections[pTarget->GetServerID()].id), "at+");

		if (fp == NULL)
		{
			return;
		}
	}
	
	fprintf(fp ,
		    "@ObtainCombatPoint	%02d/%02d/%02d/%02d/%02d/%02d	(old point)%d(==>)	(new point)%d\n",
		    g_year - 2000, g_mon + 1, g_day, g_hour, g_min, g_sec, nOld, nNew);
	fprintf(fp, ";Lightning Boom    %3d  Thunder Blow      %3d\n", pTarget->GetCombatLevel(LIGHTNING_BOOM), pTarget->GetCombatLevel(THUNDER_BLOW));
	fprintf(fp, ";Lightning Shock   %3d  Thunder Strike    %3d\n", pTarget->GetCombatLevel(LIGHTNING_SHOCK), pTarget->GetCombatLevel(THUNDER_STRIKE));
	fprintf(fp, ";Lightning Shield  %3d  Lightning Extreme %3d\n", pTarget->GetCombatLevel(LIGHTNING_SHIELD), pTarget->GetCombatLevel(LIGHTNING_EXTREME));
	fprintf(fp, ";Blood Earth       %3d  Ground Attack     %3d\n", pTarget->GetCombatLevel(BLOOD_EARTH), pTarget->GetCombatLevel(GROUND_ATTACK));
	fprintf(fp, ";Blood Will        %3d  Stone Armor       %3d\n", pTarget->GetCombatLevel(BLOOD_WILL), pTarget->GetCombatLevel(STONE_ARMOR));
	fprintf(fp, ";Simunian Bosom    %3d  Earth Extreme     %3d\n", pTarget->GetCombatLevel(SIMUNIAN_BOSOM), pTarget->GetCombatLevel(EARTH_EXTREME));
	fprintf(fp, ";Sword N'Roses     %3d  Multiple Fire     %3d\n", pTarget->GetCombatLevel(SWORD_N_ROSES), pTarget->GetCombatLevel(MULTIPLE_FIRE));
	fprintf(fp, ";Fleet Missile     %3d  Converting Armor  %3d\n", pTarget->GetCombatLevel(FLEET_MISSILE), pTarget->GetCombatLevel(CONVERTING_ARMOR));
	fprintf(fp, ";Burning Bloody	%3d  Fire Extreme      %3d\n", pTarget->GetCombatLevel(BURNING_BLOODY), pTarget->GetCombatLevel(FIRE_EXTREME)); // 030415 kyo 
	fprintf(fp, ";Poisoning Nova    %3d  Cherroy Shade     %3d\n", pTarget->GetCombatLevel(POISONING_NOVA), pTarget->GetCombatLevel(CHERROY_SHADE));
	fprintf(fp, ";Dark Blade        %3d  Tybern Gift       %3d\n", pTarget->GetCombatLevel(DARK_BLADE), pTarget->GetCombatLevel(TYBERN_GIFT));
	fprintf(fp, ";AcuquireDark      %3d  Dark Extreme      %3d\n", pTarget->GetCombatLevel(ACUQUIRE_DARK), pTarget->GetCombatLevel(DARK_EXTREME));// 030415 kyo 
	fprintf(fp, ";Icing Blast       %3d  Critical Hiding   %3d\n", pTarget->GetCombatLevel(ICING_BLAST), pTarget->GetCombatLevel(CRITICAL_HIDING));
	fprintf(fp, ";Shark Missile     %3d  Horn Of Iceberg   %3d\n", pTarget->GetCombatLevel(SHARK_MISSILE), pTarget->GetCombatLevel(HORN_OF_ICEBERG));
	fprintf(fp, ";Ice Shield        %3d  Ice Extreme       %3d\n", pTarget->GetCombatLevel(ICE_SHIELD), pTarget->GetCombatLevel(ICE_EXTREME));
	fprintf(fp, ";Charging          %3d  Double Attack     %3d\n", pTarget->GetCombatLevel(CHARGING), pTarget->GetCombatLevel(DOUBLE_ATTACK));
	fprintf(fp, ";Whilwind          %3d  Twister           %3d\n", pTarget->GetCombatLevel(WHILWIND), pTarget->GetCombatLevel(TWISTER));
	fprintf(fp, ";Gust              %3d  Wind Extreme      %3d\n", pTarget->GetCombatLevel(GUST), pTarget->GetCombatLevel(WIND_EXTREME));
	fprintf(fp, ";Reserved Combat Skill Point %3d \n", pTarget->GetCombatPoint());
	
	fclose(fp);
}	//> CSD-040224

void SaveChangeCombat(CHARLIST* pTarget, int nCombat, int nOld, int nNew)
{	//< CSD-040224
	string strPath;
	
	if (!g_pLogManager->GetLogPath(LT_CHANGE, strPath))
	{
		return;
	}
	
	FILE* fp = fopen(VA("%s/%s.txt", strPath.c_str(), pTarget->Name), "at+");

	if (fp == NULL)
	{
		fp = fopen(VA("%s/%s.txt", strPath.c_str(), connections[pTarget->GetServerID()].id), "at+");

		if (fp == NULL)
		{
			return;
		}
	}
	
	fprintf(fp,
		    "@ChangeCombatPoint	%02d/%02d/%02d/%02d/%02d/%02d	(old level)%d(==>)	(new level)%d	(combat skill)%d\n",
		    g_year - 2000, g_mon + 1, g_day, g_hour, g_min, g_sec, nOld, nNew, nCombat);
	fprintf(fp, ";Lightning Boom    %3d  Thunder Blow      %3d\n", pTarget->GetCombatLevel(LIGHTNING_BOOM), pTarget->GetCombatLevel(THUNDER_BLOW));
	fprintf(fp, ";Lightning Shock   %3d  Thunder Strike    %3d\n", pTarget->GetCombatLevel(LIGHTNING_SHOCK), pTarget->GetCombatLevel(THUNDER_STRIKE));
	fprintf(fp, ";Lightning Shield  %3d  Lightning Extreme %3d\n", pTarget->GetCombatLevel(LIGHTNING_SHIELD), pTarget->GetCombatLevel(LIGHTNING_EXTREME));
	fprintf(fp, ";Blood Earth       %3d  Ground Attack     %3d\n", pTarget->GetCombatLevel(BLOOD_EARTH), pTarget->GetCombatLevel(GROUND_ATTACK));
	fprintf(fp, ";Blood Will        %3d  Stone Armor       %3d\n", pTarget->GetCombatLevel(BLOOD_WILL), pTarget->GetCombatLevel(STONE_ARMOR));
	fprintf(fp, ";Simunian Bosom    %3d  Earth Extreme     %3d\n", pTarget->GetCombatLevel(SIMUNIAN_BOSOM), pTarget->GetCombatLevel(EARTH_EXTREME));
	fprintf(fp, ";Sword N'Roses     %3d  Multiple Fire     %3d\n", pTarget->GetCombatLevel(SWORD_N_ROSES), pTarget->GetCombatLevel(MULTIPLE_FIRE));
	fprintf(fp, ";Fleet Missile     %3d  Converting Armor  %3d\n", pTarget->GetCombatLevel(FLEET_MISSILE), pTarget->GetCombatLevel(CONVERTING_ARMOR));
	fprintf(fp, ";Burning Bloody	  %3d  Fire Extreme      %3d\n", pTarget->GetCombatLevel(BURNING_BLOODY), pTarget->GetCombatLevel(FIRE_EXTREME)); // 030415 kyo 
	fprintf(fp, ";Poisoning Nova    %3d  Cherroy Shade     %3d\n", pTarget->GetCombatLevel(POISONING_NOVA), pTarget->GetCombatLevel(CHERROY_SHADE));
	fprintf(fp, ";Dark Blade        %3d  Tybern Gift       %3d\n", pTarget->GetCombatLevel(DARK_BLADE), pTarget->GetCombatLevel(TYBERN_GIFT));
	fprintf(fp, ";AcuquireDark      %3d  Dark Extreme      %3d\n", pTarget->GetCombatLevel(ACUQUIRE_DARK), pTarget->GetCombatLevel(DARK_EXTREME)); // 030415 kyo 
	fprintf(fp, ";Icing Blast       %3d  Critical Hiding   %3d\n", pTarget->GetCombatLevel(ICING_BLAST), pTarget->GetCombatLevel(CRITICAL_HIDING));
	fprintf(fp, ";Shark Missile     %3d  Horn Of Iceberg   %3d\n", pTarget->GetCombatLevel(SHARK_MISSILE), pTarget->GetCombatLevel(HORN_OF_ICEBERG));
	fprintf(fp, ";Ice Shield        %3d  Ice Extreme       %3d\n", pTarget->GetCombatLevel(ICE_SHIELD), pTarget->GetCombatLevel(ICE_EXTREME));
	fprintf(fp, ";Charging          %3d  Double Attack     %3d\n", pTarget->GetCombatLevel(CHARGING), pTarget->GetCombatLevel(DOUBLE_ATTACK));
	fprintf(fp, ";Whilwind          %3d  Twister           %3d\n", pTarget->GetCombatLevel(WHILWIND), pTarget->GetCombatLevel(TWISTER));
	fprintf(fp, ";Gust              %3d  Wind Extreme      %3d\n", pTarget->GetCombatLevel(GUST), pTarget->GetCombatLevel(WIND_EXTREME));
	fprintf(fp, ";Reserved Combat Skill Point %3d \n", pTarget->GetCombatPoint());
	
	fclose(fp);
}	//> CSD-040224

// 021117 YGI
void RecvSetInstallVersion ( t_packet *p, short int cn )
{
	CHARLIST *ch = CheckServerId( cn );
	if( !ch ) return;
	ch->installType = IT_LIGHT_VERSION;
}

//021030 YGI
void RecvResendItem( short int cn )
{
	if( !CheckServerIndex( cn ) ) return;
	SendItemInventory( 0, connections, cn );
	SendItemInventory( 1, connections, cn );
	SendItemInventory( 2, connections, cn );
	SendItemInventory( 3, connections, cn );
	SendItemInventory( 4, connections, cn );
	SendItemInventory( 5, connections, cn );
	SendItemInventory( 6, connections, cn );
	SendItemInventory( 7, connections, cn );
	SendItemInventory( 8, connections, cn );
}

void RecvScriptItem( t_packet *p, short int cn )
{
	k_event_script_item	*pData = (k_event_script_item *)p->u.data;

	CEventNpcScript *pEvent = g_EventMgr.GetEventNpcScriptByEventNo( pData->event_no);
	if( !pEvent ) return;

	CHARLIST *ch = CheckServerId( pData->server_id );
	if( !ch ) return;

	if( strcmp( ch->Name, pData->name ) != 0 ) return ;
	
	if( pData->result )
	{
		SendEventNpcScriptItem( pData->server_id, pData->npc_index, pEvent->m_nEventNpcItemBag, 
			pEvent->m_lpszMessage, pEvent->m_nMessageSize );

⌨️ 快捷键说明

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