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

📄 maingame.cpp

📁 混乱竞技场的全套代码,客户端资源可以网上搜
💻 CPP
📖 第 1 页 / 共 3 页
字号:
			if(!pUnit->is_death())
				pUnit->PlyFidget();
		}
		else
		{
			if(!pUnit->is_death())
				pUnit->PlyWalkTo(p->pos.dest_x, p->pos.dest_y);
		}
//		add_game_msg(RGBA_MAKE(0,205,255,230), "角色:(%s)移动向点(%d, %d)", pUnit->GetName(), (int)p->dest_x, (int)p->dest_y);
	}
}
void MainGame::on_handle_unit(void* pData)
{
	if(pData==NULL)
		return;
	STRUCT_HANDLE_UNIT* p	= (STRUCT_HANDLE_UNIT*)pData;
	Game_Unit*	pUnit	= (Game_Unit*)m_world.GetObject(p->uid);
	Game_Unit*	pUnit_obj	= (Game_Unit*)m_world.GetObject(p->uid_obj);
	if(pUnit)
	{
		if(pUnit->IsPlayer() && pUnit->m_aim_unit==0 && pUnit_obj)
		{
			pUnit->m_aim_unit	= pUnit_obj->GetID();
		}
		switch(p->action) 
		{
		case GSACT_AIM_OBJECT:
			{
				if(p->uid_obj == m_id_player)
				{
					pUnit->SetControl(TRUE);
					pUnit->add_effect_ani("magic\\confusion.txg");//magic\\martyr_client.txg");
					pUnit->m_aim_unit	= p->uid_obj;
					add_game_msg(RGBA_MAKE(50,200,0,200), "角色:(%s) 锁定 角色(%s) 为目标", pUnit->GetName(), pUnit_obj->GetName());
				}
				else
				{
					pUnit->SetControl(FALSE);
				}

				if(pUnit->is_death() || (pUnit_obj && pUnit_obj->is_death()))
				{
					pUnit->SetControl(FALSE);
				}
				
				
			}
			break;
		case GSACT_ATTACK:
			{
				if(pUnit_obj==NULL)
					break;
				//STRUCT_EFFECT_SPECIFIC	uae	= p->effect_specific;
				pUnit->add_effect_specific(p->effect_specific);
				if(pUnit->is_death())
				{
					pUnit->CaleDamage(FALSE);
				}
				else
				{
					if(p->effect_specific.uid_action_type>=100 && !pUnit->is_ranged())
					{
						pUnit->PlyRanged(pUnit_obj->m_FlatX, pUnit_obj->m_FlatY);
					}
					else if(!pUnit->is_melee())
					{
						pUnit->PlyMeleeTo(pUnit_obj->m_FlatX, pUnit_obj->m_FlatY);
					}

				}
			}
			break;
		case GSACT_SPELL:
			{
				if(pUnit_obj==NULL)
					break;
				//STRUCT_EFFECT_SPECIFIC	uae	= p->effect_specific;
				pUnit->add_effect_specific(p->effect_specific);
				if(pUnit->is_death())
				{
					pUnit->CaleDamage(FALSE);
				}
				else
				{
					if(!pUnit->is_spell() && !pUnit->is_melee())
						pUnit->PlySpell(pUnit_obj->m_FlatX, pUnit_obj->m_FlatY, NULL);
				}
			}
			break;
		case GSACT_REVIVE:
			{
				if(pUnit_obj==NULL)
					break;
				if(abs(pUnit->m_FlatX-p->pos.src_x)>50)
					pUnit->m_FlatX = p->pos.src_x;
				if(abs(pUnit->m_FlatY-p->pos.src_y)>50)
					pUnit->m_FlatY = p->pos.src_y;
				if(abs(pUnit_obj->m_FlatX-p->pos.dest_x)>50)
					pUnit_obj->m_FlatX = p->pos.dest_x;
				if(abs(pUnit_obj->m_FlatY-p->pos.dest_y)>50)
					pUnit_obj->m_FlatY = p->pos.dest_y;
				pUnit_obj->life	= pUnit_obj->base_life;
				pUnit_obj->mana	= pUnit_obj->base_mana;
				pUnit_obj->update_status();
				pUnit_obj->PlyFidget();
				pUnit_obj->add_effect_ani("magic\\divine_intervention.txg");
				pUnit->add_effect_sound("sound\\fight.wav");

			}
			break;
		default:
			break;
		}
	}
}

void MainGame::on_login(void *pData)
{
	StartGame();
}

void MainGame::on_add_unit(void *pData)
{
	STRUCT_ADD_UNIT* p = (STRUCT_ADD_UNIT*)pData;
	std::string str_res = g_get_unit_res(p->unit_type);
	
//	switch(p->unit_type)
//	{
//	case 1:
//		str_res = "npc\\behemoth.ini";
//		break;
//	case 2:
//		str_res = "npc\\arch_angel.ini";//"npc\\chaos_magic_female.ini";
//		break;
//	case 3:
//		str_res = "npc\\evil_sorceress.ini";//"npc\\life_magic_female.ini";
//		break;
//	case 4:
//		str_res = "npc\\bandit.ini";//"npc\\chaos_archer_male.ini";
//		break;
//	case 5:
//		str_res = "npc\\black_dragon.ini";
//		break;
//	case 6:
//		str_res = "npc\\titan.ini";
//		break;
//	case 7:
//		str_res = "npc\\wolf.ini";//"npc\\dark_blademaster.ini";
//		break;
//	case 8:
//		str_res = "npc\\gargantuan.ini";
//		break;
//	case 9:
//		str_res = "npc\\berserker.ini";
//		break;
//	case 10:
//		str_res = "npc\\dwarf.ini";
//		break;
//	case 11:
//		str_res = "npc\\imp.ini";
//		break;
//	case 12:
//		str_res = "npc\\dark_blademaster.ini";
//		break;
//	case 13:
//		str_res = "npc\\dark_knight.ini";
//		break;
//	case 14:
//		str_res = "npc\\beholder.ini";
//		break;
//	case 15:
//		str_res = "npc\\champion.ini";
//		break;
//	case 16:
//		str_res = "npc\\crusader.ini";
//		break;
//	case 17:
//		str_res = "npc\\mermaid.ini";
//		break;
//	case 18:
//		str_res = "npc\\minotaur.ini";
//		break;
//	case 19:
//		str_res = "npc\\naga.ini";
//		break;
//	case 20:
//		str_res = "npc\\orge_mage.ini";
//		break;
//	case 21:
//		str_res = "npc\\skeleton.ini";
//		break;
//	case 22:
//		str_res = "npc\\sprite.ini";
//		break;
//	case 23:
//		str_res = "npc\\thunderbird.ini";
//		break;
//	case 24:
//		str_res = "npc\\Troglodyte.ini";
//		break;
//	case 25:
//		str_res = "npc\\troll.ini";
//		break;
//	case 26:
//		str_res = "npc\\unicorn.ini";
//		break;
//	case 27:
//		str_res = "npc\\vampire.ini";
//		break;
//	case 28:
//		str_res = "npc\\white_tiger.ini";
//		break;
//	default:
//		return;
//	}
//	if(m_id_player == 0)
//	{
//		str_res = "npc\\dark_knight.ini";//"npc\\evil_sorceress.ini";
//	}
	Game_Unit*	pUnit	= (Game_Unit*)m_world.GetObject(p->uid);
	if(pUnit==NULL)
	{
		pUnit = new Game_Unit(this);
		pUnit->Create(p->uid, str_res.c_str(), p->pos_x,p->pos_y,0);
		if(FALSE==m_world.AddObject(pUnit))
		{
			delete pUnit;
			return ;
		}
	}
	Game_Unit* pPlayer	= GetControlUnit();
	if(pPlayer)
	{
		if(pPlayer->m_aim_unit==pUnit->m_id)
		{
			pPlayer->m_aim_unit = 0;
		}
	}
	pUnit->base_life	= p->base_life;
	pUnit->base_mana	= p->base_mana;
	pUnit->base_level	= p->base_level;
	pUnit->base_damage	= p->base_damage;
	pUnit->base_strength	= p->base_strength;
	pUnit->base_agility	= p->base_agility;
	pUnit->base_magic	= p->base_magic;
	pUnit->life			= p->life;
	pUnit->mana			= p->mana;
	pUnit->count_pk			= p->count_pk;
	pUnit->count_hunter		= p->count_hunter;
	pUnit->count_die		= p->count_die;
	if(p->exp_level==pUnit->exp_level_up 
		&& p->exp_level_up>0 
		&& p->exp_level_up!=p->exp_level
		&& pUnit->base_level>1)
	{//升级
		pUnit->add_effect_ani("magic\\fire_resistance_potion.txg");
		pUnit->add_effect_tip("Level Up!", RGBA_MAKE(205,255,0,255), 4.0f, UNIT_EFFECT_FLAG_DAMAGE);
		pUnit->add_effect_sound("sound\\laugh.wav");
	}
	else
	{
		pUnit->base_experience	= p->base_experience;
	}
	pUnit->exp_level	= p->exp_level;
	pUnit->exp_level_up	= p->exp_level_up;
	if(abs(pUnit->m_FlatX-p->pos_x)>10)
		pUnit->m_FlatX = p->pos_x;
	if(abs(pUnit->m_FlatY-p->pos_y)>10)
		pUnit->m_FlatY = p->pos_y;
	if(m_id_player == 0 || m_id_player==pUnit->m_id)
	{
		m_id_player	= p->uid;
		//pUnit->m_is_locate_control	= TRUE;
		m_world.SetFocusObject(pUnit);
		pUnit->SetName(p->str_name);
		pUnit->update_status();
		//pUnit->SetControl(TRUE);
	}
	else
	{
		pUnit->m_aim_unit	= 0;
		pUnit->m_is_locate_control	= FALSE;
		pUnit->m_is_auto_attack		= FALSE;
		//strcpy(p->str_name, "比蒙巨兽");
//		D3DCOLOR color;
//		Game_Unit* pPlayer = GetControlUnit();
//		if(pPlayer)
//		{
//			int lv	= p->base_level - pPlayer->base_level;
//			if(lv>5)
//			{
//				color = RGBA_MAKE(255,0,205,255);
//			}
//			else if(lv>2)
//			{
//				color = RGBA_MAKE(255,0,100,255);
//			}
//			else
//			{
//				color = RGBA_MAKE(200,0,10,255);
//			}
//			pUnit->SetName(p->str_name, color);
//		}
		pUnit->SetName(p->str_name);
		pUnit->update_status();
	}
	pUnit->PlyWait();
	if(p->life<=0)
	{//死尸
		pUnit->PlyDeath();
		pUnit->GetAnimation()->SetCurrentFrame(-1);
	}
	pUnit->SetFaceToAngle(p->face_to);
	add_game_msg(RGBA_MAKE(0,0,255,230), "新加入角色:(%s)", pUnit->GetName());
}
void MainGame::on_del_unit(void *pData)
{
	STRUCT_DEL_UNIT* p = (STRUCT_DEL_UNIT*)pData;
	Game_Unit* pUnit = (Game_Unit*)m_world.GetObject(p->uid);
	if(pUnit)
		add_game_msg(RGBA_MAKE(0,0,255,230), "删除角色:(%s)", pUnit->GetName());
	m_world.DeleteObject(p->uid);
}


FLAG MainGame::Update(DWORD dwPassTime)
{
	Game_Client::DoUpdate();
	if(m_select_magic<0 && m_is_handling_place && m_pEngine->TestMouseState(MK_LBUTTON))
	{
		Game_Unit*	pUnit	= GetControlUnit();
		if(pUnit)
		{
			LONG x,y;
			m_world.GetOriginal(x, y);
			x+=m_pEngine->m_Pos.x;
			y+=m_pEngine->m_Pos.y;
			if(x!=LONG(pUnit->m_FlatX)||y!=LONG(pUnit->m_FlatY))
				pUnit->query_goto(x, y);
		}
	}
	if(Game_Client::IsReady())
	{
		m_ani_dreamland.Update();
		m_world.Update();
		if(!m_bk_music.IsPlaying())
		{
			char strMusic[100];
			sprintf(strMusic, "music\\battle_%d.mp3", (int)(rnd()*5.0f));
			m_bk_music.SetStreamSource(strMusic);
			m_bk_music.Play();
		}
	}
	return 0;
}

HRESULT MainGame::Render()
{
	HRESULT hr = S_OK;
	m_pEngine->PreparePaint();
	if(Game_Client::IsReady())
	{
//		m_pEngine->DarkenScene(0.2f);
		m_pEngine->DarkenScene(0.0f);
		m_pEngine->PreparePaint();
		//幻境 
		LONG ox,oy;
		m_world.GetOriginal(ox, oy);
		CGsTexture*	pTexture	= m_ani_dreamland.GetCurrentFrame();
		//if(pTexture==NULL)
		//	goto exit;
		int w	= pTexture->GetWidth();
		int h	= pTexture->GetHeight();

		float scale = 0.7f;
		float left		= ox/scale/w;
		//if(left>1.0f)goto exit;
		float top		= oy/scale/h;
		//if(top>1.0f)goto exit;
		float right		= (ox+m_world.GetViewWidthPix())/scale/w;
//		if(right>1.0f)
//		{
//			m_aVertex[1].sx	= w*scale - ox;
//			m_aVertex[3].sx	= m_aVertex[1].sx;
//			right=1.0f;
//		}
//		else
//		{
			m_aVertex[1].sx	= m_world.GetViewWidthPix();
			m_aVertex[3].sx	= m_world.GetViewWidthPix();
//		}

		float bottom	= (oy+m_world.GetViewHeightPix())/scale/h;
//		if(bottom>1.0f)
//		{
//			m_aVertex[2].sy	= h*scale - oy;
//			m_aVertex[3].sy	= m_aVertex[2].sy;
//			bottom=1.0f;
//		}
//		else
//		{
			m_aVertex[2].sy	= m_world.GetViewHeightPix();
			m_aVertex[3].sy	= m_world.GetViewHeightPix();

⌨️ 快捷键说明

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