Ich möcht euch mal eine weitere Möglichkeit vorstellen diesen Teleporter zu machen
alles was ihr dazu ändern müsst ist folgendes
ResData.inc
Code:
APP_TELEPORTUSER "WndTile08.tga" "" 1 266 128 0x2410000 26
{
// Title String
IDS_RESDATA_INC_173140
}
{
// Help Key
IDS_RESDATA_INC_173141
}
{
WTYPE_STATIC WIDC_STATIC1 "" 0 6 12 240 28 0x2220000 0 0 0 0 46 112 169
{
// Title String
IDS_RESDATA_INC_174863
}
{
// ToolTip
IDS_RESDATA_INC_174864
}
WTYPE_COMBOBOX WIDC_COMBOBOX1 "WndEditTile00.tga" 0 20 38 150 56 0x220010 0 0 0 0 46 112 169
{
// Title String
""
}
{
// ToolTip
""
}
WTYPE_BUTTON WIDC_BUTTON1 "ButtOk.tga" 0 166 38 238 56 0x220010 0 0 0 0 46 112 169
{
// Title String
""
}
{
// ToolTip
""
}
WTYPE_BUTTON WIDC_CANCEL "ButCancel2.bmp" 0 166 66 238 84 0x220010 0 0 0 0 46 112 169
{
// Title String
""
}
{
// ToolTip
""
}
}
WndField.cpp
Code:
CWndTeleporter::CWndTeleporter( void )
{
}
//-----------------------------------------------------------------------------
CWndTeleporter::~CWndTeleporter( void )
{
DeleteDeviceObjects();
}
//-----------------------------------------------------------------------------
BOOL CWndTeleporter::Initialize( CWndBase* pWndParent, DWORD dwType )
{
return CWndNeuz::InitDialog( g_Neuz.GetSafeHwnd(), APP_TELEPORTUSER, 0, CPoint( 0, 0 ), pWndParent );
}
//-----------------------------------------------------------------------------
BOOL CWndTeleporter::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
{
return CWndNeuz::OnCommand( nID, dwMessage, pWndBase );
}
void CWndTeleporter::OnSize( UINT nType, int cx, int cy )
{
CWndNeuz::OnSize( nType, cx, cy );
}
void CWndTeleporter::OnLButtonUp( UINT nFlags, CPoint point )
{
}
void CWndTeleporter::OnLButtonDown( UINT nFlags, CPoint point )
{
}
void CWndTeleporter::OnDraw( C2DRender* p2DRender )
{
}
HRESULT CWndTeleporter::RestoreDeviceObjects()
{
CWndNeuz::RestoreDeviceObjects();
return S_OK;
}
HRESULT CWndTeleporter::InvalidateDeviceObjects()
{
CWndNeuz::InvalidateDeviceObjects();
return S_OK;
}
HRESULT CWndTeleporter::DeleteDeviceObjects()
{
CWndNeuz::DeleteDeviceObjects();
InvalidateDeviceObjects();
return S_OK;
}
void CWndTeleporter::OnInitialUpdate( void )
{
CWndNeuz::OnInitialUpdate();
RestoreDeviceObjects();
CWndComboBox* pWndTeleporter = (CWndComboBox*)GetDlgItem( WIDC_COMBOBOX1);
CRect rectRoot = m_pWndRoot->GetLayoutRect();
CRect rectWindow = GetWindowRect();
CPoint point( rectRoot.right - rectWindow.Width(), 110 );
pWndTeleporter->AddString("Darkon");
pWndTeleporter->AddString("Saintmorning");
pWndTeleporter->AddString("Darkon1");
pWndTeleporter->AddString("Darkon3");
pWndTeleporter->AddString("Tramnuk Master");
pWndTeleporter->AddString("Tramnuk");
pWndTeleporter->AddString("Flaris");
pWndTeleporter->AddString("Volcano");
pWndTeleporter->AddString("Khaldera");
pWndTeleporter->AddString("Aminus Hero");
pWndTeleporter->AddString("Aminus Master");
pWndTeleporter->AddString("Elliun");
pWndTeleporter->AddString("Behemoth");
pWndTeleporter->AddString("Ruendra Lager");
pWndTeleporter->AddString("Kalgas");
pWndTeleporter->SetCurSel(0);
Move( point );
MoveParentCenter();
}
BOOL CWndTeleporter::OnChildNotify( UINT message, UINT nID, LRESULT* pLResult )
{
if( nID == WIDC_BUTTON1 )
{
CWndComboBox* pWndTeleporter = (CWndComboBox*)GetDlgItem( WIDC_COMBOBOX1);
switch( pWndTeleporter->GetCurSel() )
{
case 0:
{
g_DPlay.SendTeleportPosition( 1 );
Destroy();
break;
}
case 1:
{
g_DPlay.SendTeleportPosition( 2 );
Destroy();
break;
}
case 2:
{
g_DPlay.SendTeleportPosition( 3 );
Destroy();
break;
}
case 3:
{
g_DPlay.SendTeleportPosition( 4 );
Destroy();
break;
}
case 4:
{
g_DPlay.SendTeleportPosition( 5 );
Destroy();
break;
}
case 5:
{
g_DPlay.SendTeleportPosition( 6 );
Destroy();
break;
}
case 6:
{
g_DPlay.SendTeleportPosition( 7 );
Destroy();
break;
}
case 7:
{
g_DPlay.SendTeleportPosition( 8 );
Destroy();
break;
}
case 8:
{
g_DPlay.SendTeleportPosition( 9 );
Destroy();
break;
}
case 9:
{
g_DPlay.SendTeleportPosition( 10 );
Destroy();
break;
}
case 10:
{
g_DPlay.SendTeleportPosition( 11 );
Destroy();
break;
}
case 11:
{
g_DPlay.SendTeleportPosition( 12 );
Destroy();
break;
}
case 12:
{
g_DPlay.SendTeleportPosition( 13 );
Destroy();
break;
}
case 13:
{
g_DPlay.SendTeleportPosition( 14 );
Destroy();
break;
}
case 14:
{
g_DPlay.SendTeleportPosition( 15 );
Destroy();
break;
}
case 15:
{
g_DPlay.SendTeleportPosition( 16 );
Destroy();
break;
}
}
}
else if( nID == WIDC_CANCEL || nID == WTBID_CLOSE )
{
nID = WTBID_CLOSE;
Destroy();
}
return CWndNeuz::OnChildNotify( message, nID, pLResult );
}
in der Reihenfolge in der ihr pWndTeleporter->AddString setzt wird es ingame auch ausgelesen.
g_DPlay.SendTeleportPosition() ist immer um 1 höher wie der case da dieser von 0 weg zählt, hier ist zu beachten ihr braucht für jeden string 1 case.
Ich bitte zu beachten das die Strings nicht mit dem extendet übereinstimmen
wer es benutzen will muss vorher noch sortieren und ggf erweitern.