Beispiel #1
0
VOID CObject_PlayerOther::UpdateFaceMesh(VOID)
{
	if(m_pRenderInterface != NULL)
	{
		INT nFaceMeshID = GetCharacterData()->Get_FaceMesh();
		if(nFaceMeshID == INVALID_ID)
		{
			nFaceMeshID = m_pCharRace->nDefHeadGeo;
		}
		if(nFaceMeshID != INVALID_ID)
		{
			//-----------------------------------------------------------
			//角色头部模型数据库
			DBC_DEFINEHANDLE(s_pCharHeadGeo, DBC_CHARACTER_HEAD_GEO);
			//查找相应记录
			const _DBC_CHAR_HEAD_GEO* pFaceGeo = (const _DBC_CHAR_HEAD_GEO* )s_pCharHeadGeo->Search_Index_EQU(nFaceMeshID);
			if(pFaceGeo != NULL)
			{
				m_pRenderInterface->Actor_SetObjectProperty(szIDSTRING_FACE_MESH, pFaceGeo->pMeshFile);
			}
			else
			{
				m_pRenderInterface->Actor_SetObjectProperty(szIDSTRING_FACE_MESH, "");
			}

			//如果是UI物体,重新设置VisibleFlag
			if(GetFakeObjectFlag())
			{
				m_pRenderInterface->Actor_SetUIVisibleFlag();
			}
		}
	}
}
Beispiel #2
0
INT CHelperSystem::Lua_GotoHelper(LuaPlus::LuaState* state)
{
    LuaPlus::LuaStack args(state);
    if(!args[2].IsString()) return 0;
    std::string  str = args[2].GetString();
    STRING::size_type nRight = str.find( "*" );
    if( nRight == std::string::npos )
        GotoAnchorHelp(args[2].GetString());
    else
    {
        str.erase( nRight, 1);
        DBC_DEFINEHANDLE( pUIDBC, DBC_UI_LAYOUTDEFINE);
        INT nNum = (INT)pUIDBC->GetRecordsNum();
        for(INT i=0; i<nNum; i++)
        {
            const _DBC_UI_LAYOUTDEFINE* pWindow= (const _DBC_UI_LAYOUTDEFINE*)pUIDBC->Search_LineNum_EQU(i);
            if( pWindow->szName == str )
            {
                GotoAnchorHelp( pWindow->szHelp );
                return 0;
            }
        }
    }


    return 0;
}
VOID CGamePro_CharCreate::SetGender( INT nGender )
{
	m_eGender = (ENUM_GENDER)nGender;

	m_pAvatar[nGender]->GetCharacterData()->Set_MenPai( CLIENT_GAOMO_MENPAI );


	DBC_DEFINEHANDLE( s_pCharacterRace, DBC_CHARACTER_RACE );		// char_race.tab
	const _DBC_CHAR_RACE* pCharRace = ( const _DBC_CHAR_RACE* )( s_pCharacterRace->Search_Index_EQU( nGender +2) );
	if( !pCharRace )
		return ;


	m_nDefHeadGeo	= pCharRace->nDefHairGeo;
	m_nDefShoulder	= pCharRace->nDefShoulder;
	m_nDefBody		= pCharRace->nDefBody;
	m_nDefArm		= pCharRace->nDefArm;
	m_nDefFoot		= pCharRace->nDefFoot;

	m_pAvatar[(INT)m_eGender]->EquipItem_BodyPart( HEQUIP_HEAD, m_nDefHeadGeo );		// 头		item_char.tab
	m_pAvatar[(INT)m_eGender]->EquipItem_BodyPart( HEQUIP_SHOULDER, m_nDefShoulder );	// 肩
	m_pAvatar[(INT)m_eGender]->EquipItem_BodyPart( HEQUIP_BACK, m_nDefBody );			// 躯干
	m_pAvatar[(INT)m_eGender]->EquipItem_BodyPart( HEQUIP_HAND, m_nDefArm );			// 手
	m_pAvatar[(INT)m_eGender]->EquipItem_BodyPart( HEQUIP_FEET, m_nDefFoot );			// 脚
}
	//获得宠物当前的经验 和 升级所需要的经验
	INT	Pet::GetExp(LuaPlus::LuaState* state)
	{
		LuaStack args(state);

		if (!(args[2].IsInteger()) ) 
		{
			KLThrow("LUA:Pet GetExp parameter error");
			return 0;
		}
		INT nPetNum = args[2].GetInteger();		
		
		SDATA_PET* My_Pet= CDataPool::GetMe()->Pet_GetPet(nPetNum);
		if( (!My_Pet) || ( !My_Pet->m_pModelData ) ) 
		{
			KLThrow("LUA:Pet GetExp parameter error");
			return 0;
		}

		DBC_DEFINEHANDLE(s_pPetLevelup, DBC_PET_LEVELUP);
		const _DBC_PET_LEVELUP* pPetExp = (const _DBC_PET_LEVELUP*)s_pPetLevelup->Search_Index_EQU(My_Pet->m_nLevel);

		state->PushNumber( My_Pet->m_nExp);

		if(pPetExp)
		{
			state->PushInteger(pPetExp->nExp);
		}
		else
		{
			state->PushInteger(INVALID_ID);
		}
		return 2;
	}
	/* ------------------------------------------------
	// 是否可繁殖
	参数1	MountIndex
	------------------------------------------------ */
	INT	Mount::CanMating(LuaPlus::LuaState* state)
	{
		LuaStack args(state);
		if (!(args[2].IsInteger()))
		{
			KLThrow("Mount::CanMating[2] param parameter error");
		}
		INT nMountIndex = args[2].GetInteger();

		SDATA_PET* pPet = CDataPool::GetMe()->Pet_GetPet(nMountIndex);
		if (pPet && FALSE == pPet->m_GUID.IsNull())
		{
			DBC_DEFINEHANDLE(s_MountBaseDBC, DBC_MOUNT_BASE_DATA);
			const _DBC_MOUNT_BASE_DATA* pMountBaseData = 
							(const _DBC_MOUNT_BASE_DATA*)s_MountBaseDBC->Search_Index_EQU(pPet->m_nBaseID);
			if (pMountBaseData)
			{
				state->PushInteger(pMountBaseData->bMating);
				return 1;
			}			
		}

		state->PushInteger(0);

		return 1;
	}
VOID CGamePro_CharCreate::SetProfession( INT nProfession )
{
	m_nUIViewProfession = nProfession;

	m_pAvatar[m_eGender]->GetCharacterData()->Set_MenPai( m_nUIViewProfession );


	DBC_DEFINEHANDLE( s_pCharacterRace, DBC_CHARACTER_RACE );		// char_race.tab
	const _DBC_CHAR_RACE* pCharRace = ( const _DBC_CHAR_RACE* )( s_pCharacterRace->Search_Index_EQU( (INT)m_eGender ) );
	if( !pCharRace )
		return ;


	m_nDefHeadGeo	= pCharRace->nDefHairGeo;
	m_nDefShoulder	= pCharRace->nDefShoulder;
	m_nDefBody		= pCharRace->nDefBody;
	m_nDefArm		= pCharRace->nDefArm;
	m_nDefFoot		= pCharRace->nDefFoot;

	m_pAvatar[(INT)m_eGender]->EquipItem_BodyPart( HEQUIP_HEAD, m_nDefHeadGeo );		// 头		item_char.tab
	m_pAvatar[(INT)m_eGender]->EquipItem_BodyPart( HEQUIP_SHOULDER, m_nDefShoulder );	// 肩
	m_pAvatar[(INT)m_eGender]->EquipItem_BodyPart( HEQUIP_BACK, m_nDefBody );			// 躯干
	m_pAvatar[(INT)m_eGender]->EquipItem_BodyPart( HEQUIP_HAND, m_nDefArm );			// 手
	m_pAvatar[(INT)m_eGender]->EquipItem_BodyPart( HEQUIP_FEET, m_nDefFoot );			// 脚

}
Beispiel #7
0
VOID CObject_PlayerOther::UpdateHairMesh(VOID)
{
	if(m_pRenderInterface != NULL)
	{
		INT nHairMesh = GetCharacterData()->Get_HairMesh();
		if(nHairMesh == INVALID_ID)
		{
			nHairMesh = m_pCharRace->nDefHairGeo;
		}
		if(nHairMesh != INVALID_ID)
		{
			//-----------------------------------------------------------
			//角色头发模型数据库
			DBC_DEFINEHANDLE(s_pCharHairMesh, DBC_CHARACTER_HAIR_GEO);
			//查找相应记录
			const _DBC_CHAR_HAIR_GEO* pHairMesh = (const _DBC_CHAR_HAIR_GEO*)s_pCharHairMesh->Search_Index_EQU(nHairMesh);
			if(pHairMesh != NULL)
			{
				m_pRenderInterface->Actor_SetObjectProperty(szIDSTRING_HAIR_MESH, pHairMesh->pMeshFile);
			}
			else
			{
				m_pRenderInterface->Actor_SetObjectProperty(szIDSTRING_HAIR_MESH, "");
			}
			//如果是UI物体,重新设置VisibleFlag
			if(GetFakeObjectFlag())
			{
				m_pRenderInterface->Actor_SetUIVisibleFlag();
			}
		}
	}
}
	// 20100421 AddCodeBegin
	// 得到技能名称
	INT SkillStudy::GetSkillName(LuaPlus::LuaState* state)
	{
		LuaStack args(state);

		if (!(args[2].IsInteger()))
		{
			KLThrow("PlayerShop::EnumItem[2] param parameter error");
		}

		INT nSkillID = args[2].GetInteger();

		DBC_DEFINEHANDLE(s_pSkillDBC, DBC_SKILL_DATA);
		const _DBC_SKILL_DATA* pSkillData = (const _DBC_SKILL_DATA*)s_pSkillDBC->Search_Index_EQU(nSkillID);
		if (pSkillData)
		{
			if ( pSkillData->m_lpszName != NULL )
			{
				state->PushString( pSkillData->m_lpszName );
				return 1;
			}		
		}

		state->PushString("");
		return 1;
	}
Beispiel #9
0
VOID CObject_PlayerOther::UpdateCharRace(VOID)
{
	m_pCharRace = NULL;

	CCharacterData *pCharacterData = GetCharacterData();
	if(pCharacterData != NULL && pCharacterData->Get_RaceID() != INVALID_ID)
	{
		DBC_DEFINEHANDLE(s_pCharacterRace, DBC_CHARACTER_RACE);
		m_pCharRace = (const _DBC_CHAR_RACE*)(s_pCharacterRace->Search_Index_EQU(pCharacterData->Get_RaceID()));
	}
}
	/* ------------------------------------------------
	// 学习一个新技能
	参数1	INT		技能ID
	返回 0 -- 不成功, 1 -- 成功
	------------------------------------------------ */
	INT SkillStudy::StudySkill( LuaPlus::LuaState* state )
	{
		if (0 == GetStudyState( state ))
		{
			state->PushInteger(0);
			return 1;
		}

		LuaStack args(state);
		if (!(args[2].IsInteger()))
		{
			KLThrow("PlayerShop::EnumItem[2] param parameter error");
		}

		INT nSkillID	= args[2].GetInteger();

		// 要学习的技能级别
		INT nSkillLevel = 0;
		const SCLIENT_SKILL* pSkill = CObjectManager::GetMe()->GetMySelf()->GetCharacterData()->Get_Skill(nSkillID);
		if (pSkill)
		{
			nSkillLevel = pSkill->m_nLevel;
		}
		++nSkillLevel;


		// 是否已经是最大级别
		DBC_DEFINEHANDLE(s_pSkillDBC, DBC_SKILL_DATA);
		const _DBC_SKILL_DATA* pSkillData = (const _DBC_SKILL_DATA*)s_pSkillDBC->Search_Index_EQU(nSkillID);
		if (pSkillData && nSkillLevel > pSkillData->m_nMaxLevel)
		{
			state->PushInteger(0);
			return 1;
		}

		
		// 判断学习条件,爬技能树。
		if (ClimbStudyTree( nSkillID, nSkillLevel ))
		{
			CGSkillUpgrade msg;

			msg.SetSkillID(nSkillID);
			msg.SetLevel(nSkillLevel);

			CNetManager::GetMe()->SendPacket( &msg );

			state->PushInteger(1);
			return 1;
		}

		state->PushInteger(0);
		return 1;
	}
Beispiel #11
0
VOID CObject_Item_Mount::AsMount(const _DBC_ITEM_MOUNT_ATT* pStoreMapDefine)
{
	KLAssert(pStoreMapDefine);
	m_theBaseDef = const_cast<_DBC_ITEM_MOUNT_ATT*>(pStoreMapDefine);

	DBC_DEFINEHANDLE(s_pCharMountDBC, DBC_CHARACTER_MOUNT)
	m_characterData = (const _DBC_CHARACTER_MOUNT*)(s_pCharMountDBC->Search_Index_EQU(m_theBaseDef->nCharMountID));

	//m_theBaseDef->szIcon = "xinshouzhuangnan";
	//m_theBaseDef->nClass = ICLASS_MOUNT; 
	//m_nParticularID = ( ( ICLASS_MOUNT * 100  + m_theBaseDef->nType ) * 10000 ) + m_theBaseDef->nIndex;

}
Beispiel #12
0
LPCTSTR TransTitleStr(LPCTSTR szTitle)
{
	if(szTitle[0] == '#')
	{//这个字符串是id需要读表转换
		STRINGTOID(szTitle, TBIndex);
		if(TBIndex>0)
		{
			DBC_DEFINEHANDLE(pTitleDBC, DBC_TITLE_NAME);
			const _DBC_TITLE_NAME* pTitle = (const _DBC_TITLE_NAME*)pTitleDBC->Search_LineNum_EQU(TBIndex);
			return pTitle->szTitle;
		}
		return "";
	}
	return szTitle;	
}
Beispiel #13
0
VOID CObject_Bus::UpdateData(VOID)
{
	if(m_pBusData != NULL && m_pBusData->m_nDataID == m_nDataID)
		return;

	ReleaseRenderInterface();

	m_pBusData = NULL;
	if(m_nDataID != INVALID_ID)
	{
		DBC_DEFINEHANDLE(s_pBusDataDBC, DBC_BUS_DATA);
		m_pBusData = (const _BUS_INFO*)s_pBusDataDBC->Search_Index_EQU(m_nDataID);
	}

	CreateRenderInterface();
}
Beispiel #14
0
// 得到角色头像信息
int CCharacterFaceMng::GetCharacterFaceIfo()
{
	// 清空数据
	ClearData();

	DBC_DEFINEHANDLE(s_CharacterFaceInfo, DBC_CHARACTER_FACE);
	if(NULL == s_CharacterFaceInfo)
	{
		return 1;
	}

	int iItemCount = s_CharacterFaceInfo->GetRecordsNum();

	for(int i = 0; i < iItemCount; i++)
	{
		//搜索纪录
		const _DBC_CHAR_FACE* pFaceInfo = (const _DBC_CHAR_FACE*)s_CharacterFaceInfo->Search_LineNum_EQU((UINT)i);
		if(pFaceInfo)
		{
			switch(pFaceInfo->nRace)			
			{
			case 0:
				{
					// 女主角头像个数
					m_iWomanFaceCount++;
					m_WomanFaceInfoVector.push_back(*pFaceInfo);
					break;
				}
			case 1:
				{
					// 男主角头像个数
					m_iManFaceCount++;
					m_ManFaceInfoVector.push_back(*pFaceInfo);
					break;
				}
			default:
				{
					break;
				}
			}
		}
	}//

	return 0;
}
Beispiel #15
0
VOID CObject_PlayerOther::CreateRenderInterface(VOID)
{
	if(m_pCharRace != NULL)
	{
		//模型定义
		DBC_DEFINEHANDLE(s_pCharModelDBC, DBC_CHARACTER_MODEL)

		LPCSTR lpszModelFileName = NULL;
		INT nModelID = GetCharModelID();
		const _DBC_CHARACTER_MODEL *pCharModel = (const _DBC_CHARACTER_MODEL*)(s_pCharModelDBC->Search_Index_EQU(nModelID));
		if(pCharModel != NULL)
		{
			lpszModelFileName = pCharModel->m_pszModelName;
		}

		if(lpszModelFileName != NULL)
		{
			m_pRenderInterface = CGameProcedure::s_pGfxSystem->New_EntityObject(tEntityNode::ETYPE_ACTOR);
			m_pRenderInterface->SetData(GetID());

			//设置ActorFile
			m_pRenderInterface->Actor_SetFile( lpszModelFileName );

			if (GetConstCharacterData()->Get_ModelID() == -1)
			{
				UpdateFaceMesh();
				UpdateHairMesh();
				UpdateHairColor();

				//重新刷新装备
				UpdateEquip( HEQUIP_WEAPON );
				UpdateEquip( HEQUIP_CAP );
				UpdateEquip( HEQUIP_ARMOR );
				UpdateEquip( HEQUIP_CUFF );
				UpdateEquip( HEQUIP_BOOT );
				UpdateEquip( HEQUIP_SASH );
			}

			SendEuipRequest();
		}
	}
	CObject_Character::CreateRenderInterface();
}
	/* ------------------------------------------------
	// 得到 父技能ID
	参数1	INT		技能ID
	------------------------------------------------ */
	INT SkillStudy::GetFatherSkillID( LuaPlus::LuaState* state )
	{
		LuaStack args(state);
		if (!(args[2].IsInteger()))
		{
			KLThrow("PlayerShop::EnumItem[2] param parameter error");
		}
		INT nSkillID = args[2].GetInteger();

		DBC_DEFINEHANDLE(s_pStudyDBC, DBC_SKILL_STUDY_DATA);
		const _DBC_SKILL_STUDY_DATA* pStudyData = (const _DBC_SKILL_STUDY_DATA*)s_pStudyDBC->Search_Index_EQU(nSkillID);
		if (pStudyData)
		{
			state->PushInteger(pStudyData->m_nFatherSkillIDQua);
			return 1;
		}

		state->PushInteger(-1);
		return 1;
	}
Beispiel #17
0
VOID CObject_Bus::CreateRenderInterface(VOID)
{
	if(m_pBusData != NULL && m_pBusData->m_nModelID != INVALID_ID)
	{
		DBC_DEFINEHANDLE(s_pCharModelDBC, DBC_CHARACTER_MODEL)
		LPCSTR lpszModelFileName = NULL;
		const _DBC_CHARACTER_MODEL *pCharModel = (const _DBC_CHARACTER_MODEL*)(s_pCharModelDBC->Search_Index_EQU(m_pBusData->m_nModelID));
		if (pCharModel != NULL)
		{
			lpszModelFileName = pCharModel->m_pszModelName;
		}

		if (lpszModelFileName != NULL)
		{
			m_pRenderInterface = CGameProcedure::s_pGfxSystem->New_EntityObject(tEntityNode::ETYPE_ACTOR);
			m_pRenderInterface->SetData(GetID());

			m_pRenderInterface->Actor_SetFile(lpszModelFileName);

			setVisible(isVisible());

			m_pRenderInterface->SetRayQuery(FALSE);

			BOOL bEnable = (isVisible() && CGameProcedure::s_pVariableSystem->GetAs_Int("View_HumanLightmap") == 1);
			if(bEnable)
			{
				m_pRenderInterface->Attach_ProjTexture(tEntityNode::SHADOW_BLOB, GetShadowRange());
			}

			m_pRenderInterface->SetAnimationEndEvent( (FUNC_ONANIMATIONENDEX)(CObject_Bus::_OnAnimationEnd), (DWORD)GetID() ,0);

			UpdatePassengerAttached();

			UpdateCharActionSetFile();

			SetPosition(GetPosition());
			SetFaceDir( GetFaceDir() );
			setVisible(isVisible());
		}
	}
}
	// 20100421 AddCodeBegin
	// 得到技能主/被动标记
	INT SkillStudy::GetSkillPassiveFlag(LuaPlus::LuaState* state)
	{
		LuaStack args(state);

		if (!(args[2].IsInteger()))
		{
			KLThrow("PlayerShop::EnumItem[2] param parameter error");
		}

		INT nSkillID = args[2].GetInteger();

		DBC_DEFINEHANDLE(s_pSkillDBC, DBC_SKILL_DATA);
		const _DBC_SKILL_DATA* pSkillData = (const _DBC_SKILL_DATA*)s_pSkillDBC->Search_Index_EQU(nSkillID);
		if (pSkillData)
		{
			state->PushNumber( pSkillData->m_nPassiveFlag );
			return 1;
		}

		state->PushNumber( 1 );
		return 1;	
	}
	/* ------------------------------------------------
	// 递归技能树算法, 找到根节点位置
	------------------------------------------------ */
	BOOL SkillStudy::ClimbStudyTree(INT nSkillID, INT nSkillLevel)
	{
		DBC_DEFINEHANDLE(s_pStudyDBC, DBC_SKILL_STUDY_DATA);
		const _DBC_SKILL_STUDY_DATA* pStudyData = (const _DBC_SKILL_STUDY_DATA*)s_pStudyDBC->Search_Index_EQU(nSkillID);
		if (NULL == pStudyData)
		{
			return 0;
		}

		// 是否是根技能 (nFatherSkillIDQua小于0时为根技能)
		if (0 <= pStudyData->m_nFatherSkillIDQua)
		{			
			const SCLIENT_SKILL* pFatherSkill = CObjectManager::GetMe()->GetMySelf()->GetCharacterData()->Get_Skill( pStudyData->m_nFatherSkillIDQua );
			
			// 角色拥有该父技能
			if (pFatherSkill)
			{
				// 父技能级别 条件
				INT nFatherSkillLevelQua = GetSkillData( pStudyData->m_szFatherSkillLevelQua, nSkillLevel);
				if (pFatherSkill->m_nLevel >= nFatherSkillLevelQua)
				{
					return ClimbStudyTree(pStudyData->m_nFatherSkillIDQua, nFatherSkillLevelQua);
				}
				else
				{
					return 0;
				}
			}
			else
			{
				return 0;
			}
		}

		return 1;
	}
Beispiel #20
0
//g_DemandKill={{id=66,num=1},{id=56,num=1}}
void parseDemandKill(CHAR** pDest,CHAR* pSrc,INT j)
{
	CHAR* pCur = strchr(pSrc,'=');
	if(!pCur)
		TDThrow("策划写错了这个脚本:%s", pSrc);
	strcpy(*pDest,tokens[j]);
	CHAR* pNow = *pDest + strlen(tokens[j]);
	
	int count = 0;
	int digit = 1;

	int npcId = 0;
	int npcCount = 0;
	while(pCur++)
	{
		if(*pCur == '{')
		{
			digit = 1;
			count++;
		}
		else if(*pCur == '}')
		{
			digit = 1;
			count--;
			if(count == 0)
				break;
		}

		if(digit == 1 && isdigit(*pCur))
		{	
			digit = 2;
			npcId = atoi(pCur);

			*pNow++=*pCur;			
		}
		else if(digit == 3 && isdigit(*pCur))
		{
			digit = 4;
			npcCount = atoi(pCur);

			DBC_DEFINEHANDLE(s_pCreatureDBC, DBC_CREATURE_ATT);
	
			//从DBC中查找定义
			const _DBC_CREATURE_ATT* pMissionNpc = (const _DBC_CREATURE_ATT*)s_pCreatureDBC->Search_Index_EQU(npcId);
			_MISSION_INFO::QuestDemandKill newDemandKill;
			newDemandKill.pDemandKill = new SMissionDemandKill;
			newDemandKill.pDemandKill->m_uNPCID = npcId;
			newDemandKill.pDemandKill->m_yCount = npcCount;
			if(!pMissionNpc)
				newDemandKill.szNPCName = "???";
			else
				newDemandKill.szNPCName = (STRING)pMissionNpc->pName;
			misInfo->m_vecQuestDemandKill.push_back(newDemandKill);

			*pNow++=*pCur;
			
		}
		else if(digit && (*pCur == ','))
		{
			digit = 3;
			*pNow++=',';			
		}
	}
}
Beispiel #21
0
VOID CObject_PlayerOther::EquipItem_BodyLocator(HUMAN_EQUIP nPart, INT nID)
{
	//-----------------------------------------------------------
	//渲染层设置
	if(!m_pRenderInterface)
	{
		return;
	}

	//-----------------------------------------------------------
	//角色挂接类数据库
	DBC_DEFINEHANDLE(s_pWeaponItem, DBC_ITEM_VISUAL_LOCATOR);
	const _DBC_ITEM_VISUAL_LOCATOR* pEquipVisual = (const _DBC_ITEM_VISUAL_LOCATOR*)s_pWeaponItem->Search_Index_EQU(nID);
	if(!pEquipVisual)
	{
		return;
	}

	//右手
	if(pEquipVisual->pObjFile_Right && pEquipVisual->pObjFile_Right[0] != '\0')
	{
		m_pRenderInterface->Actor_SetObjectProperty(szIDSTRING_CURRENT_RIGHTWEAPON, pEquipVisual->pObjFile_Right);
		m_pRenderInterface->SetRightWeaponMat(szIDSTRING_WEAPON_MAT, pEquipVisual->pMatName_Right);
		/*		
		tObject_Item* MyWeapon = CDataPool::GetMe()->UserEquip_GetItem(HEQUIP_WEAPON);

		CObject_Item_Equip::EXTRA_DEFINE* Extra = (CObject_Item_Equip::EXTRA_DEFINE*)((CObject_Item_Equip*)(CObject_Item*)MyWeapon)->GetExtraInfo();

		CObject_Item_Equip::EQUIP_ATTACH_GEM Gems = Extra->m_vEquipAttachGem;

		INT Gem_MaxLevel = 0;
		LPCTSTR szColor;

		for(INT GemIndex = 0; GemIndex < Gems.size(); GemIndex++)
		{
		UINT uGemType = Gems[GemIndex].m_GemType;

		// 从数据库中查找到这个Gem的信息
		DBC_DEFINEHANDLE(s_pItem_Gem, DBC_ITEM_GEM);
		//搜索纪录
		const _DBC_ITEM_GEM* pGem = (const _DBC_ITEM_GEM*)s_pItem_Gem->Search_Index_EQU(uGemType);
		if(!pGem) continue;

		if(pGem->nQuality > Gem_MaxLevel)
		{
		Gem_MaxLevel = pGem->nQuality;
		szColor = pGem->szColor;
		}
		}
		*/
		/////////////// code//////////////////
		UINT uGemType = GetCharacterData()->Get_EquipGem(HEQUIP_WEAPON);
		if(INVALID_ID != uGemType)
		{
			DBC_DEFINEHANDLE(s_pItem_Gem, DBC_ITEM_GEM);
			//搜索纪录
			const _DBC_ITEM_GEM* pGem = (const _DBC_ITEM_GEM*)s_pItem_Gem->Search_Index_EQU(uGemType);
			UINT nColor = 0;
			LPCTSTR szColor;
			szColor = pGem->szColor;

			INT eff_index = pGem->nEffectIndex;
			eff_index--;//表编号从1开始,对应列从0开始

			//如果策划在这列填了-1,表示不显示颜色。
			if(szColor[0] != '-' && szColor[1] != '1' && (eff_index >= 0) ) 
			{
				sscanf(szColor,"%8X",&nColor);

				if( pEquipVisual->pEffectName[eff_index] )//&& pEquipVisual->pEffectName[0] != '\0')
				{
					m_pRenderInterface->SetRightWeaponEffect(pEquipVisual->pEffectName[eff_index],nColor);
				}
			}
			else
			{
				m_pRenderInterface->SetRightWeaponEffect('\0',0);
			}
		}
		else
		{
//			if(pEquipVisual->pEffectName[eff_index] && pEquipVisual->pEffectName[0] != '\0')
//			{
				m_pRenderInterface->SetRightWeaponEffect('\0',0);
//			}
		}
	}
	else
		m_pRenderInterface->Actor_SetObjectProperty(szIDSTRING_CURRENT_RIGHTWEAPON, "");

	//左手
	if(pEquipVisual->pObjFile_Left && pEquipVisual->pObjFile_Left[0] != '\0' )
	{
		m_pRenderInterface->Actor_SetObjectProperty(szIDSTRING_CURRENT_LEFTWEAPON, pEquipVisual->pObjFile_Left);
		m_pRenderInterface->SetLeftWeaponMat(szIDSTRING_WEAPON_MAT, pEquipVisual->pMatName_Left);


		UINT uGemType = GetCharacterData()->Get_EquipGem(HEQUIP_WEAPON);
		if(INVALID_ID != uGemType)
		{
			DBC_DEFINEHANDLE(s_pItem_Gem, DBC_ITEM_GEM);
			//搜索纪录
			const _DBC_ITEM_GEM* pGem = (const _DBC_ITEM_GEM*)s_pItem_Gem->Search_Index_EQU(uGemType);
			UINT nColor = 0;
			LPCTSTR szColor;
			szColor = pGem->szColor;
			INT eff_index = pGem->nEffectIndex;
			eff_index--;//表编号从1开始,对应列从0开始

			//如果策划在这列填了-1,表示不显示颜色。
			if(szColor[0] != '-' && szColor[1] != '1' && (eff_index >= 0)) 
			{
				sscanf(szColor,"%8X",&nColor);


				if( pEquipVisual->pEffectName[eff_index] )//&& pEquipVisual->pEffectName[0] != '\0')
				{
					m_pRenderInterface->SetLeftWeaponEffect(pEquipVisual->pEffectName[eff_index],nColor);
				}
			}
			else
			{
				m_pRenderInterface->SetLeftWeaponEffect('\0',0);
			}
		}
		else
		{
//			if(pEquipVisual->pEffectName && pEquipVisual->pEffectName[0] != '\0')
//			{
				m_pRenderInterface->SetLeftWeaponEffect('\0',0);
//			}
		}
	}
	else
		m_pRenderInterface->Actor_SetObjectProperty(szIDSTRING_CURRENT_LEFTWEAPON, "");
}
Beispiel #22
0
VOID CObject_PlayerOther::EquipItem_BodyPart(HUMAN_EQUIP nPart, INT nID)
{
	//-----------------------------------------------------------
	//渲染层设置
	if(!m_pRenderInterface)
	{
		return;
	}

	//-----------------------------------------------------------
	//角色装备类数据库
	DBC_DEFINEHANDLE(s_pEquipItem, DBC_ITEM_VISUAL_CHAR);
	const _DBC_ITEM_VISUAL_CHAR* pEquipVisual = (const _DBC_ITEM_VISUAL_CHAR*)s_pEquipItem->Search_Index_EQU(nID);
	if(!pEquipVisual)
	{
		return;
	}

	//种族(男,女)
	INT nRaceID = GetCharacterData()->Get_RaceID();
	TDAssert(nRaceID >= 0 && nRaceID<CHAR_RACE_NUM);
	if(nRaceID < 0 || nRaceID >= CHAR_RACE_NUM)
	{
		return ;
	}

	switch(nPart)
	{
	case HEQUIP_CAP:				//帽子
		{
			m_pRenderInterface->Actor_SetObjectProperty(
				szIDSTRING_CAP_MESH, pEquipVisual->pVisualEntity[nRaceID*2+0]);

			m_pRenderInterface->Actor_SetObjectProperty(
				szIDSTRING_CAP_MAT, pEquipVisual->pVisualEntity[nRaceID*2+1]);
		}
		break;
	case HEQUIP_ARMOR:				//身体
		{
			m_pRenderInterface->Actor_SetObjectProperty(
				szIDSTRING_MAINBODY_MESH, pEquipVisual->pVisualEntity[nRaceID*2+0]);

			m_pRenderInterface->Actor_SetObjectProperty(
				szIDSTRING_MAINBODY_MAT, pEquipVisual->pVisualEntity[nRaceID*2+1]);
		}
		break;
	case HEQUIP_CUFF:				//手臂
		{
			m_pRenderInterface->Actor_SetObjectProperty(
				szIDSTRING_ARM_MESH, pEquipVisual->pVisualEntity[nRaceID*2+0]);

			m_pRenderInterface->Actor_SetObjectProperty(
				szIDSTRING_ARM_MAT, pEquipVisual->pVisualEntity[nRaceID*2+1]);
		}
		break;
	case HEQUIP_BOOT:				//鞋
		{
			m_pRenderInterface->Actor_SetObjectProperty(
				szIDSTRING_FOOT_MESH, pEquipVisual->pVisualEntity[nRaceID*2+0]);

			m_pRenderInterface->Actor_SetObjectProperty(
				szIDSTRING_FOOT_MAT, pEquipVisual->pVisualEntity[nRaceID*2+1]);
		}
		break;
	}
}
	/* ------------------------------------------------
	// 得到 该技能的可学习状态
	参数1	INT		技能ID	
	返回 0 -- 不可学, 1 -- 可学
	------------------------------------------------ */
	INT SkillStudy::GetStudyState( LuaPlus::LuaState* state )
	{
		LuaStack args(state);
		if (!(args[2].IsInteger()))
		{
			KLThrow("PlayerShop::EnumItem[2] param parameter error");
		}
		INT nSkillID = args[2].GetInteger();

		DBC_DEFINEHANDLE(s_pStudyDBC, DBC_SKILL_STUDY_DATA);
		const _DBC_SKILL_STUDY_DATA* pStudyData = (const _DBC_SKILL_STUDY_DATA*)s_pStudyDBC->Search_Index_EQU(nSkillID);

		if (NULL == pStudyData)
		{
			state->PushInteger(0);
			return 1;
		}
		

		DBC_DEFINEHANDLE(s_pSkillDBC, DBC_SKILL_DATA);
		const _DBC_SKILL_DATA* pSkillData = (const _DBC_SKILL_DATA*)s_pSkillDBC->Search_Index_EQU(nSkillID);

		// 要学习的技能级别
		INT nSkillLevel = 0;
		const SCLIENT_SKILL* pSkill = CObjectManager::GetMe()->GetMySelf()->GetCharacterData()->Get_Skill(nSkillID);
		if (pSkill)
		{
			// 拥有该技能
			nSkillLevel = pSkill->m_nLevel;
		}
		++nSkillLevel;
		


		// 职业 条件
		{
			INT nMenPai = CObjectManager::GetMe()->GetMySelf()->GetCharacterData()->Get_MenPai();
			if (-1 != pSkillData->m_nMenPai)
			{
				if (nMenPai != pStudyData->m_nVocationQua)
				{
					state->PushInteger(0);
					return 1;
				}
			}
			
		}

		// 技能已经到达最大级别
		/*{
			if (nSkillLevel >= pSkillData->m_nMaxLevel)
			{
				state->PushInteger(0);
				return 1;
			}
		}*/

		
		// 拥有的技能点数 条件
		{
			INT skillPoint  = CObjectManager::GetMe()->GetMySelf()->GetCharacterData()->Get_CurrentSkillPoint();	// 玩家当前拥有的技能点数	
			INT	nPointQua   = GetSkillData( pStudyData->m_szSkillPointQua, nSkillLevel);	// 解析表中的技能需求点数
			if (skillPoint < nPointQua)
			{
				state->PushInteger(0);
				return 1;
			}
		}
		

		// 该系别点数 条件
		{
			 // 从表中获取该技能的系别
			INT nSeriesPoint = CObjectManager::GetMe()->GetMySelf()->GetCharacterData()->Get_SeriesPoint(pSkillData->m_nMenPai);
			INT	nSeriesPointQua   = GetSkillData( pStudyData->m_szSeriesSkillPointQua, nSkillLevel);	// 解析表中的技能需求点数
			if (nSeriesPoint < nSeriesPointQua)
			{
				state->PushInteger(0);
				return 1;
			}
		}
		

		// 金钱 条件
		{
			INT nMoney = CObjectManager::GetMe()->GetMySelf()->GetCharacterData()->Get_Money();

			INT	nMoneyQua = GetSkillData( pStudyData->m_szMoneyQua, nSkillLevel );
			if (nMoney < nMoneyQua)
			{
				state->PushInteger(0);
				return 1;
			}
		}
		

		// 经验 条件
		{
			//if (1)
			//{
			//}
		}
		

		// 父技能 条件
		{
			const SCLIENT_SKILL* pFatherSkill = CObjectManager::GetMe()->GetMySelf()->GetCharacterData()->Get_Skill( pStudyData->m_nFatherSkillIDQua );
			// 父技能拥有
			if (pFatherSkill)
			{
				// 父技能级别 条件
				INT nFatherSkillLevelQua = GetSkillData( pStudyData->m_szFatherSkillLevelQua, nSkillLevel );
				if (pFatherSkill->m_nLevel < nFatherSkillLevelQua)
				{
					state->PushInteger(0);
					return 1;
				}
			}
		}

		state->PushInteger(1);
		return 1;
	}
	//公用接口
	//------------------------------------------------------------------------------------------------------------------------------
	VOID PetInviteFriend::PET_DETAIL_ATTRIB2SDATA_PAT(const _PET_DETAIL_ATTRIB* pIn, SDATA_PET* pOut)
	{
		if(NULL == pIn || NULL == pOut)
			return;

		//清除旧数据
		pOut->CleanUp();
		pOut->m_nIsPresent = 2;

		//基本数据转换
		pOut->m_GUID			= pIn->m_GUID;				// ID
		pOut->m_idServer		= pIn->m_ObjID;				// 所有Obj类型的ObjID
		pOut->m_nDataID			= pIn->m_nDataID;			// Data ID,宠物类型
		pOut->m_szName			= pIn->m_szName;			// 名称
		pOut->m_nAIType			= pIn->m_nAIType;			// 性格
		pOut->m_SpouseGUID		= pIn->m_SpouseGUID;		// 配偶的GUID
		pOut->m_nLevel			= pIn->m_nLevel;			// 等级
		pOut->m_nExp			= pIn->m_nExp;				// 经验
		pOut->m_nHP				= pIn->m_nHP;				// 血当前值
		pOut->m_nHPMax			= pIn->m_nHPMax;			// 血最大值

		pOut->m_nAge			= pIn->m_nLife;				// 当前寿命
		pOut->m_nEraCount		= pIn->m_byGeneration;		// 几代宠
		pOut->m_nHappiness		= pIn->m_byHappiness;		// 快乐度

		pOut->m_nAttPhysics		= pIn->m_nAtt_Physics;		// 物理攻击力
		pOut->m_nAttMagic		= pIn->m_nAtt_Magic;		// 魔法攻击力
		pOut->m_nDefPhysics		= pIn->m_nDef_Physics;		// 物理防御力
		pOut->m_nDefMagic		= pIn->m_nDef_Magic;		// 魔法防御力

		pOut->m_nHit			= pIn->m_nHit;				// 命中率
		pOut->m_nMiss			= pIn->m_nMiss;				// 闪避率
		pOut->m_nCritical		= pIn->m_nCritical;			// 会心率

		pOut->m_nModelID		= pIn->m_nModelID;			// 外形
		pOut->m_nMountID		= pIn->m_nMountID;			// 座骑ID

		pOut->m_nAttrStrApt		= pIn->m_StrPerception;		// 力量资质
		pOut->m_nAttrConApt		= pIn->m_ConPerception;		// 体力资质
		pOut->m_nAttrDexApt		= pIn->m_DexPerception;		// 身法资质
		pOut->m_nAttrSprApt		= pIn->m_SprPerception;		// 灵气资质
		pOut->m_nAttrIntApt		= pIn->m_IntPerception;		// 定力资质

		pOut->m_nAttrStr		= pIn->m_Str;				// 力量
		pOut->m_nAttrCon		= pIn->m_Con;				// 体力
		pOut->m_nAttrDex		= pIn->m_Dex;				// 身法
		pOut->m_nAttrSpr		= pIn->m_Spr;				// 灵气
		pOut->m_nAttrInt		= pIn->m_Int;				// 定力
		pOut->m_nBasic			= pIn->m_GenGu;				// 根骨

		pOut->m_nPot			= pIn->m_nRemainPoint;		// 潜能点

		//技能转换
		INT minSkill = (PET_MAX_SKILL_COUNT > MAX_PET_SKILL_COUNT)?MAX_PET_SKILL_COUNT:PET_MAX_SKILL_COUNT;
		for(INT i=0; i< minSkill; ++i)
		{
			PET_SKILL* theSkill = pOut->m_aSkill[i];

			DBC_DEFINEHANDLE(s_pSkillDBC, DBC_SKILL_DATA);
			const _DBC_SKILL_DATA* pDefine = (const _DBC_SKILL_DATA*)s_pSkillDBC->Search_Index_EQU(pIn->m_aSkill[i].m_nSkillID);

			if(!theSkill)
			{
				PET_SKILL* newSkill = new PET_SKILL;

				newSkill->m_pDefine = pDefine;
				newSkill->m_nPetNum = MENPAI_PETSKILLSTUDY_PETNUM-(i+1);	//no need to set if only shown.
				newSkill->m_nPosIndex = i;
				newSkill->m_bCanUse = TRUE;

				pOut->m_aSkill[i] = newSkill;
			}
			else
			{
				theSkill->m_pDefine = pDefine;
				theSkill->m_nPetNum = MENPAI_PETSKILLSTUDY_PETNUM-(i+1);	//no need to set if only shown.
				theSkill->m_bCanUse = TRUE;
				theSkill->m_nPosIndex = i;
			}
		}
	}