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

📄 dragonserver.cpp

📁 国内著名网络游戏dragon的服务端完整源码 内附完整数据库结构
💻 CPP
📖 第 1 页 / 共 4 页
字号:
		case CMD_MOVE:
			{
				RecvCMD_MOVE(cn,packet);
				break;
			}
		case CMD_ITEM_DROP:
			{		
				CHARLIST *ch = CheckServerId( cn );
				if( !ch ) break;
				// Item捞 沥富肺 啊瘤绊 乐绰 Item牢瘤 犬牢秦具 茄促. 
				t_client_item_drop *pi = &packet->u.client_item_drop;
				ItemAttr *item = &(pi->item);
				*item = ch->handheld;
				CItem *ii = ItemUnit( item->item_no );	// 弊繁 Item捞 Table俊 乐绰啊?
				if( ii == NULL ) break;//021030 lsw
				const int item_id = AddItemList( item->item_no, ch->handheld.attr, 0, pi->x, pi->y, 0, 0 );
				if(item_id < 0) break;
				//	颊俊 甸篮 酒捞袍阑 瘤况滚赴促.
				memset( &ch->handheld, 0, sizeof( ItemAttr ) );
				ch->Money = GetMoneyByItem( ch );		// 0430 YGI
				//CheckMoveItem( ch->Name, HAND, GROUND, pi->item, ch->Money);
				SendItemEventLog( item, cn, SN_NOT_USER, SILT_PUT_GROUND, 1 ); //YGI acer
				break;
			}
		case CMD_ITEM_TAKE:
			{
				CHARLIST *ch = ::CheckServerId( cn );
				if( !ch ) break;
				
				if(VIEWTYPE_OBSERVE_  == ch->viewtype)//包傈葛靛 捞搁 酒捞袍 救 笼绢咙
				{
					break;
				}
				
				const int item_id = packet->u.client_item_take.item_id;
				
				if( item_id < 0 || item_id >= MAX_ITEM_LIST ) break;
				if( ItemList[item_id].bAlive != ALIVE_ )	break;
				if( ItemList[item_id].attr[IATTR_ATTR] & IA2_NOTMOVE ) break;
				//<soto-030711 焊拱惑磊 眠啊 内靛.(哭率 滚瓢阑 酒捞袍俊 措绊 促款矫俊 惯积.)
				//窜鉴洒 焊拱 惑磊牢啊甫 眉农.
				CItem *pCItem = ItemUnit(ItemList[item_id].item_no);
				if(TreasureBoxMgr()->IsTreasureBox(pCItem->GetItemKind()))//焊拱 惑磊 嘎备夸~
				{
					TreasureBoxMgr()->CreatTreasure(item_id, cn);		
					break; // 焊阂惑磊 何盒阑 贸府 沁栏骨肺.促弗 巴篮 贸府 窍瘤 臼酒档 等促.
				}
				//焊拱惑磊 酒聪搁 柳青.
				//>soto-030711
				//acer5
				int gab_x = abs( ch->X-ItemList[item_id].x );
				int gab_y = abs( ch->Y-ItemList[item_id].y );
				int total_gab = gab_x/16+1 + gab_y/16+1;
				if( total_gab > 8 ) break;		// 窃捞 9鸥老 捞惑捞搁 呈公 钢府 冻绢廉 乐促.
				// 眠啊等 何盒	//1214
				if( ch->handheld.item_no ) MoveEmptyInv( &ch->handheld, ch );
				// 酒酒袍阑 颊栏肺 悸泼	
				ch->handheld.item_no = ItemList[item_id].item_no ;
				memcpy(ch->handheld.attr, ItemList[item_id].attr, 6 * sizeof( DWORD )) ;
				ch->Money = GetMoneyByItem( ch );		// 0430 YGI
				//CheckMoveItem( ch->Name, GROUND, HAND, ch->handheld, ch->Money);
				SendItemEventLog( &ch->handheld, cn, SN_NOT_USER, SILT_GET_GROUND, 1 ); //YGI acer
				
				packet->h.header.type = CMD_YOU_GOT_ITEM;
				packet->u.server_you_got_item.item_id = item_id;
				packet->h.header.size = sizeof(t_server_you_got_item);
				QueuePacket(connections, cn, packet, 1);
				
				ItemList[item_id].bAlive = REMOVE_;
				SetArea(REMOVE_ITEM_AREA, item_id);
				
				break;
			}
		case CMD_REQ_LEARN_MAGIC:
			{
				g_pBattleManager->RecvMagicLearn(cn, &packet->u.kein.client_learn_magic);
				break;
			}
		case CMD_NPC_MAGIC:
			{
				g_pBattleManager->RecvNpcMagic(&packet->u.magic.client_npc_magic);
				break;
			}
		case CMD_MAGIC_SELECT:
			{	//< CSD-TW-030606
				g_pBattleManager->RecvMagicSelect(cn, &packet->u.magic.client_magic_select);
				break;
			}	//> CSD-TW-030606
		case CMD_MAGIC_CASTING:
			{	//< CSD-TW-030606
				g_pBattleManager->RecvMagicCasting(cn, &packet->u.magic.client_magic_casting);
				break;
			}	//> CSD-TW-030606
		case CMD_MAGIC_EXECUTE:		
			{	//< CSD-TW-030606
				g_pBattleManager->RecvMagicExecute(cn, &packet->u.magic.client_magic_execute);
				break;
			}	//> CSD-TW-030606
		case CMD_MAGIC_RESULT:
			{
				g_pBattleManager->RecvMagicResult(cn, &packet->u.magic.client_magic_result);
				break;
			}
		case CMD_MAGIC_RESULT_D:
			{ 
				g_pBattleManager->RecvMagicResult(&packet->u.magic.magic_result_d);
				break;
			}
		case CMD_COMBAT_CLEAR:
			{	//< CSD-TW-030606
				g_pBattleManager->RecvCombatClear(cn, &packet->u.combat.client_combat_clear);
				break;
			}	//> CSD-TW-030606
		case CMD_COMBAT_OBTAIN:
			{
				g_pBattleManager->RecvCombatObtain(cn, &packet->u.combat.client_combat_obtain);
				break;
			}
		case CMD_COMBAT_RESET:
			{
				g_pBattleManager->RecvCombatReset(cn);
				break;
			}
		case CMD_COMBAT_REQUEST:
			{
				g_pBattleManager->RecvCombatRequest(cn, &packet->u.combat.client_combat_request);
				break;
			}
		case CMD_COMBAT_LEARN:
			{
				g_pBattleManager->RecvCombatLearn(cn, &packet->u.combat.client_combat_learn);
				break;
			}
		case CMD_COMBAT_SELECT:
			{
				g_pBattleManager->RecvCombatSelect(cn, &packet->u.combat.client_combat_select);
				break;
			}
		case CMD_COMBAT_ATTACK:
			{
				g_pBattleManager->RecvCombatAttack(cn, &packet->u.combat.client_combat_attack);
				break;
			}
		case CMD_COMBAT_RESULT:
			{
				g_pBattleManager->RecvCombatResult(cn, &packet->u.combat.client_combat_result);
				break;
			}
		case CMD_CLIENT_CHARACTER_DEMAND :	RecvCMD_CLIENT_CHARACTER_DEMAND( cn, &packet->u.angra.client_character_demand);
			break;
			
		case CMD_CHANGE_EQUIP:
			{
				
				break; // 0713 YKI
				
				unsigned char equip[4] = {0, } ;							// 0623 YGI
				SetShape( equip, cn );										// 0623 YGI		// 辑滚俊辑 努扼捞攫飘 厘馒拳搁阑 焊郴霖促.
				
				//					memcpy(equip, packet->u.client_change_equip.equip, 4);
				memcpy(connections[cn].chrlst.accessory, equip, 4);
				
				packet->h.header.type = CMD_CHANGE_EQUIP;
				packet->h.header.size = sizeof(t_server_change_equip);
				packet->u.server_change_equip.server_id= cn;
				memcpy(packet->u.server_change_equip.equip, equip, 4);
				CastMe2Other( cn, packet);
				break ;
			}
		case CMD_ATTACK:
			{
				g_pBattleManager->RecvStrikeAttack(cn, &packet->u.strike.player_attack);
				break;
			}        
		case CMD_NPC_ATTACK:	
			{
				g_pBattleManager->RecvNpcAttack(&packet->u.strike.npc_attack);
				break;
			}
		case CMD_THROW_ATTACK:
			{
				g_pBattleManager->RecvThrowAttack(cn, &packet->u.strike.client_throw_attack);
				break;
			}
		case CMD_THROW_RESULT:
			{
				g_pBattleManager->RecvThrowResult(cn, &packet->u.strike.client_throw_result);
				break;
			}
		case CMD_EFFECT_RESULT:
			{	//< CSD-031007
				g_pBattleManager->RecvEffectResult(cn, &packet->u.strike.client_effect_result);
				break;
			}	//> CSD-031007
		case CMD_CHAT_DATA :
			{//021126 lsw
				CHARLIST *ch = CheckServerId(cn);
				
				if (!ch)
				{
					break;
				}
				
				::CheckChatingData( ch->Name, packet->u.client_chat_data.text);
				::ConvString( packet->u.client_chat_data.text );
				ch->attackedblock = 0;
				
				switch (packet->u.client_chat_data.type)
				{
				case CHATTYPE_WHISPER:
				case CHATTYPE_PARTY:		
					{
						::SendChatParty(connections, cn, packet);
						break;
					}
				case CHATTYPE_GUILD:
					{
						::SendWhisper(connections,cn, packet);
						break;
					}
				case CHATTYPE_NORMAL:
				case CHATTYPE_MERCHANT_BBS:
					{
						::SendChatArea(cn , packet);
						break;
					}
				case CHATTYPE_COLOSSUS_GLOBAL:
					{
						::SendFightMapChat(cn, packet);
						break;
					}
				case CHATTYPE_COLOSSUS:
					{
						::SendFightMapChatMyTeam( cn, packet );
						break;
					}
				}

				break;	
			}
		case CMD_EVENT:
			{
				RecvEvent(&packet->u.client_event, cn);
				break;
			}				
		case CMD_ITEM_EXCHANGE:		
			{
				CHARLIST *ch = CheckServerId( cn );
				if( !ch ) break;
				if( connections[cn].state < CONNECT_JOIN ) break;
				
				if( exist(packet->u.item_ex_info.itemno, cn, packet->u.item_ex_info.pos_s) ) 
				{ // if item exists
					if(exchangePOS_of_Item(cn, &packet->u.chr_status_info, packet->u.item_ex_info.pos_s, packet->u.item_ex_info.pos_t) ) 
					{
						ch->Money = GetMoneyByItem( ch );		// 0111
						CheckAndSendChangeEquip( ch );// 0713 YGI
						break;
					} 
				}		
				// 角菩
				packet->h.header.type= CMD_ITEM_EXCHANGE_REFUSE ;
				packet->h.header.size = sizeof(t_header) ;
				QueuePacket(connections, cn, packet, 1) ;
				break;
			}
		case CMD_INTERFACE_BATTLE:
			{
				connections[ cn].chrlst.Peacests= 1 ;
				packet->h.header.type = CMD_INTERFACE_BATTLE;
				packet->u.server_interface_battle.client_id = cn; 
				packet->h.header.size = sizeof( t_server_interface_battle);
				CastMe2Other( cn, packet );
				break ;
			}
		case CMD_INTERFACE_PEACE:
			{
				connections[ cn].chrlst.Peacests = 0;
				packet->h.header.type = CMD_INTERFACE_PEACE;
				packet->u.server_interface_peace.client_id = cn; 
				packet->h.header.size = sizeof( t_server_interface_peace);
				CastMe2Other( cn, packet );
				break ;
			}
		case CMD_LEVELUP_POINT:
			{
				RecvLevelUpPoint(cn, &packet->u.client_levelup_point);
				break;
			}
		case CMD_CALL_SMALLMENU:
			{
				CallSmallMenu(cn, packet->u.server_call_smallmenu.storelistindex, packet->u.server_call_smallmenu.menu);
				break;
			}
		case CMD_DUAL_MAGIC_LEARN_BOOK: 
			{	//<soto-030421
				SendCallDualMagicLearnMenu(cn);
				break;
			}	//>soto-030421
		case CMD_OPEN_LUCKY_MENU:
			{
				RecvCallLuckyMenuOpen(cn); //soto-030429
				break;
			}
		case CMD_OPEN_WINNER_MENU:
			{
				if (LottoSystem()) 
				{
					LottoSystem()->RecvOpenWinnerMenu(cn);//soto-030502
				}

				break;
			}
		case CMD_CHECK_WINNER_MENU:
			{
				if (LottoSystem())
				{
					LottoSystem()->RecvCheckOpenWinnerMenu(&packet->u.Lotto_Winner_Menu);
				}

				break;
			}
			//<soto-030504
		case CMD_NEW_EVENT:
			{
				if (LottoSystem())
				{
					LottoSystem()->RecvDBNewEvent(&packet->u.Lotto_Info);
				}

				break;
			}
		case CMD_LOTTO_BUY:
			{
				if(LottoSystem())
				{
					LottoSystem()->RecvBuyLotto(&packet->u.Lotto_Buy);//C
				}

				break;
			}
		case CMD_CAN_BUY:
			{
				if(LottoSystem())
				{
					LottoSystem()->RecvCanBuyLotto(&packet->u.Lotto_Buy);//DB
				}

				break;
			}
		case CMD_WINNER_CHECK:
			{
				if(LottoSystem())
				{
					LottoSystem()->RecvCheckWinner(cn);
				}

				break;
			}
		case CMD_CHECK_OK:
			{
				if(LottoSystem())
				{
					LottoSystem()->RecvCheckOKWinner(&packet->u.Check_Winner);
				}

				break;
			}
		//<! BBD 040127		肺肚犬牢 例瞒狼 付瘤阜 橇肺技胶	
		case CMD_DEL_LOTTO_USER_OK:
			{
				if(LottoSystem())
				{
					LottoSystem()->CheckIsDelOk(&packet->u.Lotto_Del_Ok.bIsDelOK);
				}

				break;
			}
		//> BBD 040127		肺肚犬牢 例瞒狼 付瘤阜 橇肺技胶	
		case CMD_LOTTERY_INFO:
			{
				if(LottoSystem())
				{
					LottoSystem()->RecvLottoInfo(&packet->u.Lotto_Info);
				}

				break;		
			}
			//>soto-030504
		case CMD_OPEN_LOTTOMENU://soto-030520
			{
				if(LottoSystem())
				{
					LottoSystem()->RecvOpenLottoMenu(cn);
				}
			}
			break;
		case CMD_ITEM_BUY_REQ:
			{
				RecvItemBuy(cn, &packet->u.client_item_buy);
				break;
			}
		case CMD_ITEM_SELL_REQ:
			{
				RecvItemSell(cn, &packet->u.client_item_sell);
				break;
			}
		case CMD_SKILL_INFO:
			{
				RecvSkillInfo( cn, &packet->u.client_skill_info );
				break;
			}
		case CMD_SKILL_CURSOR_VIEW:
			{
				RecvSkillCursorView( cn, &packet->u.client_skill_cursor_view );
				break;
			}
		case CMD_SKILL_GAUGE:
			{
				RecvSkillGauge( cn, &packet->u.client_skill_gauge );
				break;
			}
		case CMD_FOOT_ON_TRAP_0_ITEM:
			{
				RecvCMD_FOOT_ON_TRAP_0_ITEM( cn, &packet->u.client_foot_on_trap0 );
				break;
			}
		case CMD_FOOT_ON_TRAP_1_ITEM:
			{
				RecvCMD_FOOT_ON_TRAP_1_ITEM(  cn, &packet->u.client_foot_on_trap1 );
				break;
			}
		case CMD_MODIFY_POSITION:
			{
				if( cn < DRAGON_CONNECTIONS_START || cn >= DRAGON_MAX_CONNECTIONS  ) 
				{
				}
				else
				{
					if( connections[cn].state < CONNECT_JOIN ) break;
					RecvCMD_MODIFY_POSITION( cn, &packet->u.client_modify_position );
				}

				break;
			}
		case CMD_ITEM_DOOR_OPEN_CLOSE:
			{
				RecvItemDoorOpenClose(cn, &packet->u.item_door_open_close);
				break;
			}
		case CMD_ITEM_BOX_BREAK:
			{
				RecvCMD_ITEM_BOX_BREAK( cn, &packet->u.client_item_box_break );
				break;
			}
		case CMD_JUST_ATTACK_ANIMATION:
			{
				RecvCMD_JUST_ATTACK_ANIMATION( cn, &packet->u.client_just_attack_animation );
				break;
			}
		case CMD_ITEM_BOX_BREAK_RESULT:
			{
				RecvCMD_ITEM_BOX_BREAK_RESULT( cn, &packet->u.client_item_box_break_result );
				break;
			}
		case CMD_ITEM_BOX_MAGIC_BREAK:
			{
				RecvCMD_ITEM_BOX_MAGIC_BREAK(cn, &packet->u.client_item_box_magic_break);
				break;
			}
		case CMD_ROOF_OPEN:
			{
				RecvRoofOpen( cn, packet->u.roof_open.roofno );
				break;
			}
		case CMD_ROOF_CLOSE:
			{
				RecvRoofClose(cn, packet->u.roof_close.roofno);
				break;
			}
		case CMD_CHAT_SET:
			{
				RecvChatSet(cn, &packet->u.chat_set);
				break;
			}
		case CMD_TOTAL_MAP_CONNECTIONS:
			{
				RecvTotalMapConnections( cn );
				break;
			}
		case CMD_TOTAL_CONNECTIONS:
			{
				RecvTotalConnections( cn );
				break;
			}
		case CMD_ISTHERE_CHARNAME:
			{
				SendCheckName(cn, packet->u.client_isthere_charname.name);
				break;		// 1004 YGI
			}
		case CMD_TAME_COMMAND:
			{
				RecvTameCommand(cn, &packet->u.tame_command);
				break;
			}
		case CMD_DEBUG_REQ_CHAR_INFO:
			{
				RecvDebugReqCharInfo( cn, packet->u.debug_client_req_char_info.id );

⌨️ 快捷键说明

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