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

📄 dragonserver.cpp

📁 国内著名网络游戏dragon的服务端完整源码 内附完整数据库结构
💻 CPP
📖 第 1 页 / 共 4 页
字号:
				break;
			}
		case CMD_PLEASE_GIVE_LIFE:
			{
				Recv_CMD_PLEASE_GIVE_LIFE( cn,0, packet->u.kein.default_char );
				break;		// 010502 YGI
			}
		case CMD_PLEASE_GIVE_LIFE1:
			{
				Recv_CMD_PLEASE_GIVE_LIFE( cn,1, 0 );
				break;	// 010502 YGI
			}
		case CMD_QUEST_JOB_FINISH:	
			{	// lhs 0810 涅胶飘 棱 乔聪浆 流诀牢狼 辑距
				Recv_CMD_QUEST_JOB_FINISH( cn,1 );
				break;
			}	
		case CMD_SMILE_FACE:
			{
				RecvSmileFace( cn, packet->u.client_smile_face.smileno );
				break;
			}
		// -----------------款康磊侩 疙飞 packet-> //acer7
		case CMD_BLOCK_ATTACK_START:
			{
				RecvBlockAttack( cn, 1 );
				break;
			}
		case CMD_BLOCK_ATTACK_END:
			{
				RecvBlockAttack( cn, 0 );
				break;
			}
		case CMD_BLOCK_MOVE_START:
			{
				RecvBlockMove( cn, 1 );
				break;
			}
		case CMD_BLOCK_MOVE_END:
			{
				RecvBlockMove( cn, 0 );
				break;
			}
		case CMD_BLOCK_MAGIC_START:
			{
				RecvBlockMagic ( cn, 1 );
				break;
			}
		case CMD_BLOCK_MAGIC_END:
			{
				RecvBlockMagic ( cn, 0 );
				break;
			}
		case CMD_BLOCK_GIVE_LIFE_START:
			{
				RecvBlockGiveLife( cn, 1 );
				break;
			}
		case CMD_BLOCK_GIVE_LIFE_END:
			{
				RecvBlockGiveLife( cn, 0 ); 
				break;
			}
		case CMD_BLOCK_SKILL_START:
			{
				RecvBlockSkill ( cn, 1 );
				break;//020821 lsw
			}
		case CMD_BLOCK_SKILL_END:
			{
				RecvBlockSkill ( cn, 0 );
				break;//020821 lsw
			}
		case CMD_ABSOLUTE_LOGOUT:
			{
				RecvAbsoluteLogOut( cn, packet->u.absolute_logout.id );
				break;
			}
		case CMD_MAKE_GHOST:
			{
				RecvMakeGhost( cn, packet->u.make_ghost.id );
				break;
			}
		case CMD_GIVE_LIFE:
			{
				Recv_CMD_PLEASE_GIVE_LIFE( packet->u.give_life.id, 1 );
				break;
			}
		case CMD_ABSOLUTE_MOVE_DUNGEON_KEEPER:
			{
				Recv_CMD_ABSOLUTE_MOVE_DUNGEON_KEEPER( packet );
				break;
			}
		case CMD_BBS:
			{
				BroadCastBBS_Sub( packet->u.server_bbs.bbs, packet->h.header.size );
				break;
			}
		case CMD_NPC_CHAT_DATA:
			{
				SendNPCChatArea(packet->u.npc_chat_data.id -10000, packet->u.npc_chat_data.data);
				break;
			}
		case CMD_NPC_MODIFY_POS:
			{
				RecvNPCModifyPos( cn, packet->u.npc_modify_pos.id, packet->u.npc_modify_pos.mx,packet->u.npc_modify_pos.my );
				break;
			}
		case CMD_SEND_NPC_PARAMETER:
			{
				RecvNPC_Parameter(packet->u.send_npc_parameter.id, 
								  packet->u.send_npc_parameter.type, 
								  packet->u.send_npc_parameter.data);
				break;
			}								
		case CMD_SEND_NPC_STRING_PARAMETER:
			{
				RecvNPC_StringParameter(packet->u.send_npc_string_parameter.id, 
										packet->u.send_npc_string_parameter.type, 
										packet->u.send_npc_string_parameter.data );
				break;
			}
			// Agent->MapServer
		case CMD_LOGIN_BBS:
			{
				BroadCastBBS_Sub( packet->u.login_bbs.bbs, packet->h.header.size);
				break;
			}
		case CMD_CLOSE_LOGIN_ID:
			{
				RecvAbsLogOut2GameServer( packet->u.login_close_login_id.id );
				break;
			}
		case   CMD_SERVER_ITEMTABLE_RELOAD:
			{
				initItem();
				LoadItemJoinTable();
				break;
			}
		case CMD_DEBUG_CHANGE_SKILL_EXP:
			{
				RecvDebugChangeSkillExp( &packet->u.debug_change_skill_exp );
				break;
			}
		case CMD_SERVER_NPC_ACCESS_TABLE_RELOAD:
			{
				Recv_CMD_SERVER_NPC_ACCESS_TABLE_RELOAD( cn, packet );
				break;							
			}
		case CMD_SERVER_FIGHT_STONE:
			{
				Recv_fight_stone(cn, *packet);
				break;
			}
		case CMD_SEALSTONE_STATUS:
			{
				Recv_CMD_SEALSTONE_STATUS(&packet->u.sealstone_status);
				break;
			}
		case CMD_SEALSTONE_WAR_START:
			{
				Recv_CMD_SEALSTONE_WAR_START(packet->u.sealstone_war_start.nation);
				break;
			}
		case CMD_SEALSTONE_RESULT:
			{
				Recv_CMD_SEALSTONE_RESULT(&packet->u.sealstone_result);
				break;
			}
		case CMD_SEALSTONE_WAR_LEFTTIME:
			{
				Recv_CMD_SEALSTONE_WAR_LEFTTIME(packet->u.sealstone_warlefttime.nation,
					packet->u.sealstone_warlefttime.lefttime);
				break;
			}								
		case CMD_STEALSTONE_BREAKABLE:
			{	//< CSD-CN-031213
				g_pUserManager->SendPacket(packet);
				SealStoneBreakable = CMD_STEALSTONE_BREAKABLE;
				g_LocalWarBegin=packet->u.LocalWar.CommonDataC.Data; // 011215 LTS
				break;
			}	//> CSD-CN-031213
		case CMD_STEALSTONE_NON_BREAKABLE_PEACE:
			{	//< CSD-CN-031213
				g_pUserManager->SendPacket(packet);
				SealStoneBreakable = CMD_STEALSTONE_NON_BREAKABLE_PEACE;
				g_LocalWarBegin=packet->u.LocalWar.CommonDataC.Data;  // 011215 LTS
				break;
			}	//> CSD-CN-031213
			
		case CMD_STEALSTONE_NON_BREAKABLE:
			{	//< CSD-CN-031213
				g_pUserManager->SendPacket(packet);
				SealStoneBreakable = CMD_STEALSTONE_NON_BREAKABLE;	
				g_LocalWarBegin=packet->u.LocalWar.CommonDataC.Data;	// 011215 LTS													
				break;									
			}	//> CSD-CN-031213
		case CMD_NATION2NATION_RELATION_RESULT:
			{
				RecvNation2NationRelationResult(packet);
				break;
			}
		case CMD_NATION2NATION_RELATION:
			{
				RecvNation2NationRelation(cn, &(packet->u.nation2nation_relation));
				break;
			}
		case CMD_JUST_ANI:
			{
				Recv_JustAni(packet);
				break;
			}
		case CMD_FACE_DIRECTIONS:
			{
				CastMe2Other(cn, packet);
				break;
			}
		case CMD_INSTALL_TYPE:
			{
				connections[ cn].chrlst.installType = packet->u.client_install_type.type;
				break;
			}
		case CMD_CHECK_ACCEL:
			{
				CrackMgr.ComformAccelator(cn, packet);
				break;
			}
		case CMD_SEND_ACCEL_TYPE:
			{	//< CSD-030808
				CrackMgr.RecvAccelType(cn,packet);
				break;
			}	//> CSD-030808
		case CMD_SKILL_RARE_UPGRADE:
			{
				RecvCMD_SKILL_RARE_UPGRADE(cn,packet);
				break;
			}
		case CMD_DUAL_ENABLE:
			{ //< CSD-021003
				g_pDualManager->RecvDualEnable(cn, &packet->u.dual.client_dual_enable);
				break;
			} //> CSD-021003
		case CMD_DUAL_CHANGE:
			{
				g_pDualManager->RecvDualChange(cn, &packet->u.dual.client_dual_change);
				break;
			}
		case CMD_DUAL_DIVIDE:
			{
				g_pDualManager->RecvDualDivide(cn, &packet->u.dual.client_dual_divide);
				break;
			}
		case CMD_RESET_ABILITY:
			{
				g_pDualManager->RecvResetAbility(cn);
				break;
			}
		case CMD_RARE_UPGRADE_BBS_MAP_TO_MAP:
			{	//< CSD-CN-031213
				packet->h.header.type = CMD_RARE_UPGRADE_BBS;
				g_pUserManager->SendPacket(packet);
				break;
			}	//> CSD-CN-031213
		case CMD_LOTTERY_BROADCAST:
			{	//< CSD-CN-031213	
				g_pUserManager->SendPacket(packet);
				break;
			}	//> CSD-CN-031213
//<soto-Lotto眠啊.
		case CMD_LOTTO_SEEK:
			{
				if(cn == DB_DEMON)
				{
					int nCn = ::ExistHe(packet->u.Lotto_Seek.strChrName);
					
					QueuePacket(connections,nCn,packet,1);
				}
				else
				{
					char*	pName = connections[cn].name;
					if(pName)
					{
						strcpy(packet->u.Lotto_Seek.strChrName,pName);
						packet->u.Lotto_Seek.nLottoID = LottoSystem()->GetLottoID();

						QueuePacket(connections,DB_DEMON,packet,1);
					}
				}
			}
			break;
//>soto-Lotto眠啊.
		default:
			{
				if (1 == CheckHandleByKein(packet, connections, cn))
				{
					break;
				}

				if (HandleCommand2(packet, connections, cn))
				{
					break;
				}

				if (HandleCommand3(packet, connections, cn))
				{
					break;
				}

				if (1 == CheckHandleByNationWar(packet,connections,cn))
				{
					break;
				}
				else
				{
					::MyLog( LOG_NORMAL, "Illegal Packet (type:%d)(size:%d)(cn:%d)", packet->h.header.type, packet->h.header.size, cn );
					return 0;
				}

				break;
			}
	}

	return 1;
}

extern bool DungeonEventTileProc( int event_no, short int cn );

void RecvEvent( t_client_event *pEvent, short int cn )
{	//< CSD-030506
	if (!CheckServerId(cn))
	{
		return;
	}
	
	if (sRECALL_SCRP_NO) 
	{
		SendPutMenuString( KM_FAIL, 216, cn );	// 031110 YGI // 侩坷客 惑狼
		return; // 泅犁 胶农赋飘啊 柳青吝捞促. 
	}
	
	EventPC = cn;
	
	switch (pEvent->type)
	{
	case EVENT_TYPE_NPC:
		{
			int ttt = pEvent->event_no - 10000;
			if (ttt < NPC_LIST_START || ttt >= MAX_NPC_LIST) break;
			if (NPCList[ ttt].Race == SEALSTONE)  break;
			if (NPCList[ ttt].IsTamedNpc())  break;
			if (g_EventMgr.CheckScriptNo(ttt, cn)) break;		// 捞亥飘俊辑 刚历 利侩凳
			
			EventNPC[EventPC] = ttt;
			const int eventno = NPCList[EventNPC[EventPC]].eventno;
			
			if (0 <= eventno && eventno < EVENT_NPC_FUNCTION_TOTAL)
			{
				Script(eventno + EVENT_NPC_FUCTION_START);
			}
			
			break;
		}
	case EVENT_TYPE_MAPTILE:
		{
			const int eventno = pEvent->event_no;
			
			if (0 > eventno) 
			{
				break;
			}
			
			if (DungeonEventTileProc(eventno, cn))
			{
				break;
			}
			
			Script(eventno + EVENT_MAPTILE_FUCTION_START);
			break;
		}
	default : break;
	}
}	//> CSD-030506

void RecvNewDay( t_packet *packet )
{
	WORD wDay =	packet->u.send_map_change_date.wDay;
	WORD wMonth = packet->u.send_map_change_date.wMonth;
	//朝(Day)啊 函版登菌栏搁 1, 崔(Month)啊 函版登菌栏搁 2, 笛促 函版登菌栏搁 3
	BYTE bChanged = packet->u.send_map_change_date.bChanged;

	static save_day = 0;
	static save_month = 0;

	if( wDay == save_day && wMonth == save_month ) return;

	save_day = wDay;
	save_month = wMonth;
	
	InitDataFromNewDay( wDay, wMonth );
	//SendAllProtocal( packet );
	
	RefreshTodayItem();
	LoadNationItem( g_wday );
	
	MyLog(0, "Start New Day ^^ : by kein " );
}

WORD g_wCurDay;			//泅犁 朝楼甫 历厘 窍绰 傈开函荐 
WORD g_wCurMonth;		//泅犁 崔(month)阑  历厘 窍绰 傈开函荐 

void SetCurrentDate()
{
	SYSTEMTIME time;
	GetLocalTime(&time);

	g_wCurMonth = time.wMonth;
	g_wCurDay = time.wDay;
}
void CheckDay()
{
	static first;
	if( !first ) 
	{
		SetCurrentDate();
		first = 1;
	}
	
	static curr_time = g_curr_time;
	if( g_curr_time - curr_time < 300 ) return;		// 5盒

	curr_time = g_curr_time;

	SYSTEMTIME time;
	GetLocalTime(&time);
	BYTE	bChanged = 1;		//朝(day)父 函版登菌栏搁 1, 朝苞 崔(month) 笛促 函版 登菌栏搁 2

	//崔捞 官差菌阑锭
	if(time.wMonth != g_wCurMonth)
	{
		g_wCurMonth = time.wMonth;		//崔(month) 盎脚 
		bChanged++;
	}

	// 030929 kyo <<
	static bool IsKickoffLimitedUser = false;
	if( LocalMgr.IsAbleNation(THAI) )
	{
		if( g_nLimitedStartTime == time.wHour && false == IsKickoffLimitedUser)
		{
			CheckLimitedAge();	
			IsKickoffLimitedUser = true;
		}
		else
			IsKickoffLimitedUser = false;
	}
	// 030929 kyo >>

	//朝楼啊 官差菌阑锭 
	if(time.wDay != g_wCurDay)
	{
		t_packet packet;
		g_wCurDay = time.wDay;

		packet.u.send_map_change_date.wDay = time.wDay;
		packet.u.send_map_change_date.wMonth = time.wMonth;
		RecvNewDay( &packet );		// 朝磊 府敲饭矫
	}
}
void KickOffLimitedUser( const int cn)	// 030929 kyo
{//皋矫瘤甫 巢扁绊 蜡历 立加阑 辆丰茄促.
	//leave log // add plz......
	g_QuestInMap.ShowStateMsg( cn, g_szLimitedUser_Message, 255, 255, 0 ); //yellow
	::closeconnection( connections, cn, 100 );
}

void CheckLimitedAge()	// 030929 kyo
{	//< CSD-CN-031213 : 葛电 蜡历狼 立加阑 犬牢秦辑 力茄唱捞 固父捞搁 立加阑 辆丰矫挪促.
	CUserManager::HASH_USER mpUser = g_pUserManager->GetUserSet();

	for (CUserManager::ITOR_USER i = mpUser.begin(); i != mpUser.end(); ++i)
	{
		CHARLIST* pUser = CheckServerId(i->second);

		if (pUser != NULL && pUser->IsLimitedAge(g_nLimitedAge))
		{
			KickOffLimitedUser(pUser->GetServerID());
		}
	}
}	//> CSD-CN-031213

void InitLimitedTimeAndAge() // 030929 kyo
{// 力茄唱捞客 矫埃, 免仿矫懦 皋矫瘤甫 啊廉柯促.
	char	NetworkDir[MAX_PATH];
	char	MapServerConfigFileName[MAX_PATH];

	if (GetPrivateProfileString("Network","path","",NetworkDir,MAX_PATH,MAP_SERVER_INI_)<=0)
	{
		MyLog(0,"Error!! Check Mapserver.ini's Path Set.");
		return ;
	}

	sprintf(MapServerConfigFileName,"%s/data/MapServerConfig.ini",NetworkDir);

	g_nLimitedStartTime	=::GetPrivateProfileInt("Thai Limited","StartTime",22,MapServerConfigFileName);	
	g_nLimitedEndTime	=::GetPrivateProfileInt("Thai Limited","EndTime",6,MapServerConfigFileName);	
	g_nLimitedAge		=::GetPrivateProfileInt("Thai Limited","Age",18,MapServerConfigFileName);			
	::GetPrivateProfileString( "Thai Limited", "Message", "", g_szLimitedUser_Message, sizeof( g_szLimitedUser_Message ), MapServerConfigFileName );
}

⌨️ 快捷键说明

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