Exemplo n.º 1
0
VOID CGymnasium::GetGymnasiumInfo(DT_GYMNASIUM_CLI_INFO& stGymnasiumInfo)
{
	CFaction* poFaction = GetFaction();
	UINT32 dwFactionID = GetFactionID();
	if (NULL == poFaction)
	{
		return ;
	}
	if (0 == dwFactionID)
	{
		return ;
	}
	stGymnasiumInfo.byGymnasiumLevel = static_cast<UINT8>(CFactionMgr::Instance()->GetFactionBuildLevel(dwFactionID, EFB_Gymnasium));

	DT_FACTION_PLAYER_CLI stDT_FACTION_PLAYER_CLI = {0};
	if ( NULL == poFaction)
	{
		return ;
	}

	poFaction->GetDT_FACTION_PLAYER_CLI_SELF(stDT_FACTION_PLAYER_CLI, m_poOwner->GetID());
	stGymnasiumInfo.dwDoorsTribute = stDT_FACTION_PLAYER_CLI.dwDoorsTributeValues;
	//权限
	em_Faction_Job emTmp = static_cast<em_Faction_Job>(stDT_FACTION_PLAYER_CLI.byJobType);

	BOOL bRet = CFactorAuthorityPropMgr::Instance()->CkJobAuthority(emTmp, EFA_Build);

	stGymnasiumInfo.byUpgradeLimit = bRet ? ESM_YES : ESM_NO;  
}
//Called every time this StaticMap is targeted.
void StaticMap::OnTargeted(Player *player)
{
    player->BlankVerbs();

    float docking_range = DOCKING_RANGE;

    if (player->ShipIndex()->GetIsIncapacitated())
    {
        docking_range = -1.0f;
    }

    switch (ObjectType())
    {
    case OT_STATION:
		player->AddVerb(VERBID_DOCK, docking_range);
        player->AddVerb(VERBID_REGISTER, DOCKING_RANGE);
        break;

    case OT_STARGATE:
        if (Destination() > 0)
        {
			//check for faction.
			long faction_id = GetFactionID();
			bool class_specific = GetClassSpecific();

			if (player->GetOverrideFaction()) //allow devs and testers to override faction/class restrictions
			{
				player->AddVerb(VERBID_GATE, docking_range);
			}
			else if (class_specific)
			{
				if (faction_id == player->GetFactionID() || faction_id < 1)
				{
					player->AddVerb(VERBID_GATE, docking_range);
				}
			}
			else if (faction_id > 0)
			{
				if (player->GetFactionStanding(this) >= 0.0f) //allow gate travel if faction is greater than zero
				{
					player->AddVerb(VERBID_GATE, docking_range);
				}
			}
			else
			{
				player->AddVerb(VERBID_GATE, docking_range);
			}
        }
		break;

    case OT_PLANET:
        if (Destination() > 0)
        {
            player->AddVerb(VERBID_LAND, docking_range);
        }
        break;
        
    default:
        break;
    };
}