//090708 pdy 기획팀 요청에따라 가구 상태에따른 정렬기능 추가 
void cHousingWarehouseDlg::RefreshIcon(stFurniture* pFurniture)
{
	if( pFurniture == NULL )
		return;

	WORD wTapNum = pFurniture->wCategory -1 ;

	cScrollIconGridDialog* pGridDlg = (cScrollIconGridDialog*)GetTabSheet(wTapNum);
	if( ! pGridDlg)
		return; 

	//정렬기능때문에 가구의 실제 슬롯위치와 아이콘UI상의 슬롯위치는 같지 않다. 
	//때문에 아이콘 해시에서 가구 Obj인덱스로 아이콘을 가져오자  

	cHousingStoredIcon* pResultIcon = m_StoredIconHash.GetData( pFurniture->dwObjectIndex );

	if( pResultIcon == NULL )
		return;

	//가구의 상태가 바뀌면 아이콘UI상의 해당탭의 배치정렬을 다시 해주어야 한다. 
	SortIconByTapNum(wTapNum) ;

	pResultIcon->Refresh();

	WORD wPosition = 0; pGridDlg->GetPositionForCell( pResultIcon->GetCellX() ,pResultIcon->GetCellY() );

	if( IsDoor( pFurniture->dwFurnitureIndex ) )
	{
		for(int i = 0; i < MAX_HOUSING_SLOT_NUM ; i++ )
		{
			cHousingStoredIcon* pDoorIcon = (cHousingStoredIcon*)pGridDlg->GetIconForIdx( i );

			if( pDoorIcon == NULL || IsDoor( pDoorIcon->GetLinkFurniture()->dwFurnitureIndex ) == FALSE )
				continue;

			if( pDoorIcon->GetLinkFurniture()->wState == eHOUSEFURNITURE_STATE_INSTALL )
			{
				wPosition = pGridDlg->GetPositionForCell( pDoorIcon->GetCellX() ,pDoorIcon->GetCellY() );
				break;
			}
		}
	}
	else 
	{
		wPosition = pGridDlg->GetPositionForCell( pResultIcon->GetCellX() ,pResultIcon->GetCellY() );
	}
	
	//아이콘 정렬이 된후 선택된 셀위치를 다시 맞추어 준다.
	pGridDlg->SetCurSelCellPos( wPosition );
}
示例#2
0
void BattleGround::OpenDoorEvent(uint8 event1, uint8 event2 /*=0*/)
{
    if (!IsDoor(event1, event2))
    {
        sLog.outError("BattleGround:OpenDoorEvent this is no door event1:%u event2:%u", event1, event2);
        return;
    }
    if (!IsActiveEvent(event1, event2))                 // maybe already despawned (eye)
    {
        sLog.outError("BattleGround:OpenDoorEvent this event isn't active event1:%u event2:%u", event1, event2);
        return;
    }
    GuidVector::const_iterator itr = m_EventObjects[MAKE_PAIR32(event1, event2)].gameobjects.begin();
    for (; itr != m_EventObjects[MAKE_PAIR32(event1, event2)].gameobjects.end(); ++itr)
        DoorOpen(*itr);
}
示例#3
0
void BattleGround::OnObjectDBLoad(GameObject* obj)
{
    const BattleGroundEventIdx eventId = sBattleGroundMgr.GetGameObjectEventIndex(obj->GetGUIDLow());
    if (eventId.event1 == BG_EVENT_NONE)
        return;
    m_EventObjects[MAKE_PAIR32(eventId.event1, eventId.event2)].gameobjects.push_back(obj->GetObjectGuid());
    if (!IsActiveEvent(eventId.event1, eventId.event2))
    {
        SpawnBGObject(obj->GetObjectGuid(), RESPAWN_ONE_DAY);
    }
    else
    {
        // it's possible, that doors aren't spawned anymore (wsg)
        if (GetStatus() >= STATUS_IN_PROGRESS && IsDoor(eventId.event1, eventId.event2))
            DoorOpen(obj->GetObjectGuid());
    }
}
void cHousingWarehouseDlg::UseIcon(cIcon* pIcon)
{
	if(!pIcon || pIcon->GetType() != WT_HOUSING_STORED_ICON)
		return;

	cHousingStoredIcon* pStoredIcon = (cHousingStoredIcon*)pIcon;
	stFurniture* pstFuniture = pStoredIcon->GetLinkFurniture();

	if(! pstFuniture)
		return;

	if(HOUSINGMGR->IsDoDecoration() &&
		(pstFuniture->wState == eHOUSEFURNITURE_STATE_UNINSTALL ||
		pstFuniture->wState == eHOUSEFURNITURE_STATE_KEEP))
	{
		HOUSINGMGR->CancelDecoration();
	}
	else if(pstFuniture->wState == eHOUSEFURNITURE_STATE_INSTALL)
	{
		return;
	}

	//091224 NYJ eObjectState_None가 아니면 리턴.
	if( (pstFuniture->wState == eHOUSEFURNITURE_STATE_UNINSTALL ||
		pstFuniture->wState == eHOUSEFURNITURE_STATE_KEEP) &&
		(HERO->GetState() != eObjectState_None &&
		HERO->GetState() != eObjectState_Housing))
	{
		CHATMGR->AddMsg(CTC_SYSMSG,  CHATMGR->GetChatMsg(2010) /*“가구를 설치할 수 없는 상태입니다.”*/ );
		return;
	}

	//090527 pdy 하우징 시스템메세지 꾸미기 모드가 아닐시 제한사항 [머터리얼교체]
	if( (pstFuniture->wState == eHOUSEFURNITURE_STATE_UNINSTALL ||
		pstFuniture->wState == eHOUSEFURNITURE_STATE_KEEP) &&
		HERO->GetState() != eObjectState_Housing )
	{
		//CHATMGR->AddMsg(CTC_SYSMSG,  CHATMGR->GetChatMsg(1878) );	//1878	"꾸미기 모드일때만 사용하실 수 있습니다."
		//return;

		//091224 NYJ 꾸미기모드가 아니면 꾸미기 모드로 변환
		HOUSINGMGR->RequestDecoRationMode();
		HOUSINGMGR->SetDecorationModeTemp();
	}

//	pStoredIcon->SetLock(TRUE) ;								// 사용할 아이템을 잠근다.

	if( pstFuniture->bNotDelete )								//기본설치 품목일경우 아이템사용 없음 
	if(! IsDoor( pstFuniture->dwFurnitureIndex)  )				//기본설치문은 아이템사용가능 
	if(! IsStart( pstFuniture->dwFurnitureIndex) )				//기본설치 스타트도 아이템사용가능 
		return;

	/*
	if( pstFuniture->wState == eHOUSEFURNITURE_STATE_INSTALL )
	{
		//기본설치 품목이나 문류는 설치 불가 
		if( pstFuniture->bNotDelete	|| IsDoor( pstFuniture->dwFurnitureIndex ) )
		{
			//090527 pdy 하우징 시스템메세지 기본제공가구 [설치해제]
			CHATMGR->AddMsg(CTC_SYSMSG, CHATMGR->GetChatMsg( 1888 ) );	//1888	"기본 물품은 설치해제 할 수 없습니다."
		}
		////091223 NYJ - 내집창고에서 더블클릭으로 가구회수기능 제거.
		//else
		//{
		//	HOUSINGMGR->RequestUninstallDecoFromUseIcon(pstFuniture);
		//}
		return;
	}
	*/

	//설치중이아니면 가구꾸미기 시작
	HOUSINGMGR->StartDecoration(pstFuniture);
}