Da ja nicht alle Leecher es schaffen es aus meinem Source zu holen release ich es nun.
WndField am Ende der Datei:
#ifdef __APP_TELEPORTER
CWndTeleporter::CWndTeleporter( void )
{
m_nSelected = NULL;
m_pPicTexture = NULL;
}
CWndTeleporter::~CWndTeleporter( void )
{
DeleteDeviceObjects();
}
BOOL CWndTeleporter::Initialize( CWndBase* pWndParent, DWORD dwType )
{
return CWndNeuz::InitDialog( g_Neuz.GetSafeHwnd(), APP_TELEPORTER, 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 )
{
CWndStatic* pStatic = (CWndStatic*)GetDlgItem( WIDC_STATIC2 );
CWndText* pText = (CWndText*)GetDlgItem( WIDC_TEXT1 );
CString strFile, strLandName, strDes;
switch( m_nSelected )
{
case 0:
strFile = "flaris.tga";
strLandName ="Flaris";
strDes= "";
break;
case 1:
strFile = "SM.tga";
strLandName ="Saint Morning";
strDes="";
break;
case 2:
strFile = "darkon.tga";
strLandName ="Darkon";
strDes= "";
break;
case 3:
strFile = "darkon1.tga";
strLandName ="Darkon 1";
strDes= "";
break;
case 4:
strFile = "darkon3.tga";
strLandName ="Darkon 3";
strDes= "";
break;
case 5:
strFile = "vulcano.tga";
strLandName ="Vulcano";
strDes= "";
break;
case 6:
strFile = "behemoth.tga";
strLandName ="Behemoth Dungeon";
strDes= "";
break;
case 7:
strFile = "animush.tga";
strLandName ="Animus - Hero Dungeon";
strDes= "";
break;
case 8:
strFile = "animusm.tga";
strLandName ="Animus - Master Dungeon";
strDes= "";
break;
case 9:
strFile = "tramnukm.tga";
strLandName ="Tramnuk - Master Dungeon";
strDes= "";
break;
case 10:
strFile = "tramnuk.tga";
strLandName ="Tramnuk Dungeon";
strDes= "";
break;
case 11:
strFile = "khaldera.tga";
strLandName ="Khaldera";
strDes= "";
break;
case 12:
strFile = "Bahara.tga";
strLandName ="Bahara";
strDes= "";
break;
case 13:
strFile = "Sanpres.tga";
strLandName ="Sanpres 1 Dungeon";
strDes= "";
break;
case 14:
strFile = "Sanpres.tga";
strLandName ="Sanpres 2 Dungeon";
strDes= "";
break;
case 15:
strFile = "Upresia.tga";
strLandName ="Upresia 1 Dungeon";
strDes= ".";
break;
case 16:
strFile = "Upresia.tga";
strLandName ="Upresia 2 Dungeon";
strDes= "";
break;
case 17:
strFile = "Herneos.tga";
strLandName ="Herneos 1 Dungeon";
strDes= "";
break;
case 18:
strFile = "Herneos.tga";
strLandName ="Herneos 2 Dungeon";
strDes= "";
break;
case 19:
strFile = "Knochenpfad.tga";
strLandName ="Knochenpfad";
strDes= "";
break;
case 20:
strFile = "Crystal.tga";
strLandName ="Crystal Dungeon";
strDes= "";
break;
case 21:
strFile = "Kalgas.tga";
strLandName ="Kalgas Dungeon";
strDes= "";
break;
case 22:
strFile = "Eillun.tga";
strLandName ="Eillun";
strDes= "";
break;
default: strFile = "flaris.tga"; strLandName ="Error"; strDes= "Error"; break;
}
pStatic->SetTitle( strLandName );
pText->SetString( strDes, 0xFF1e90ff );
m_pPicTexture = m_textureMng.AddTexture( m_pApp->m_pd3dDevice, MakePath( "Theme\\Default\\LoadMap\\", strFile ), 0xff000000 );
if( m_pPicTexture != NULL )
{
LPWNDCTRL lpWndCtrl = GetWndCtrl( WIDC_STATIC1 );
if( g_Option.m_nWindowAlpha > 200 )
m_pPicTexture->Render( p2DRender, lpWndCtrl->rect.TopLeft(), g_Option.m_nWindowAlpha - 55 );
else
m_pPicTexture->Render( p2DRender, lpWndCtrl->rect.TopLeft(), g_Option.m_nWindowAlpha );
}
}
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();
CRect rectRoot = m_pWndRoot->GetLayoutRect();
CRect rectWindow = GetWindowRect();
CPoint point( rectRoot.right - rectWindow.Width(), 110 );
Move( point );
MoveParentCenter();
CWndListBox* pListBox = (CWndListBox*)GetDlgItem( WIDC_LISTBOX1 );
pListBox->AddString("Flaris");
pListBox->AddString("Saint Morning");
pListBox->AddString("Darkon");
pListBox->AddString("Darkon 1");
pListBox->AddString("Darkon 3");
pListBox->AddString("Vulcano");
//pListBox->AddString("Behemoth D.");
pListBox->AddString("Amnius Hero");
pListBox->AddString("Amnius Master");
//pListBox->AddString("Master Tramnuk");
//pListBox->AddString("Tramnuk");
pListBox->AddString("Khaldera");
//pListBox->AddString("Bahara Desert");
//pListBox->AddString("Sanpres 1");
//pListBox->AddString("Sanpres 2");
//pListBox->AddString("Upresia 1");
//pListBox->AddString("Upresia 2");
//pListBox->AddString("Herneos 1");
//pListBox->AddString("Herneos 2");
//pListBox->AddString("Knochenpfad");
//pListBox->AddString("Crystal Dungeon");
//pListBox->AddString("Kalgas Cave");
//pListBox->AddString("Eillun");
}
BOOL CWndTeleporter::OnChildNotify( UINT message, UINT nID, LRESULT* pLResult )
{
if( nID == WIDC_LISTBOX1 )
{
CWndListBox* pWndListBox = (CWndListBox*)GetDlgItem( WIDC_LISTBOX1 );
if( pWndListBox->GetCurSel() != -1 || pWndListBox->GetCurSel() > 22 )
m_nSelected= pWndListBox->GetCurSel();
}
else if( nID == WIDC_BUTTON1 )
{
g_DPlay.SendTeleport( m_nSelected );
Destroy();
}
return CWndNeuz::OnChildNotify( message, nID, pLResult );
}
#endif
Alles anzeigen
WndField.h:
Am Ende vor dem letzten "#endif"
#ifdef __APP_TELEPORTER
class CWndTeleporter : public CWndNeuz
{
public:
int m_nSelected;
CTexture* m_pPicTexture;
CWndTeleporter( void );
~CWndTeleporter( void );
virtual HRESULT RestoreDeviceObjects();
virtual HRESULT InvalidateDeviceObjects();
virtual HRESULT DeleteDeviceObjects();
public:
virtual BOOL Initialize( CWndBase* pWndParent = NULL, DWORD nType = MB_OK );
virtual BOOL OnChildNotify( UINT message, UINT nID, LRESULT* pLResult );
virtual void OnDraw( C2DRender* p2DRender );
virtual void OnInitialUpdate();
virtual BOOL OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase );
virtual void OnSize( UINT nType, int cx, int cy );
virtual void OnLButtonUp( UINT nFlags, CPoint point );
virtual void OnLButtonDown( UINT nFlags, CPoint point );
};
#endif //__APP_TELEPORTER
Alles anzeigen
DPClient.cpp ( Client )
Am Ende, VOR
kommt das hier hin:
#ifdef __APP_TELEPORTER
void CDPClient::SendTeleport( int nCurSel )
{
BEFORESENDSOLE( ar, PACKETTYPE_APP_TELEPORT, DPID_UNKNOWN );
ar << nCurSel;
SEND( ar, this, DPID_SERVERPLAYER );
}
#endif
MsgHdr.h
Über die Snapshots:
#ifdef __APP_TELEPORTER
#define PACKETTYPE_APP_TELEPORT (DWORD)0xDDD00026
#endif
DPSrvr.cpp ( WorldServer )
Unter
Das hier:
#ifdef __APP_TELEPORTER
ON_MSG( PACKETTYPE_APP_TELEPORT, OnTeleportByAPP );
#endif // __APP_TELEPORTER
Dann noch am Ende der Datei das hier einfügen:
#ifdef __APP_TELEPORTER
void CDPSrvr::OnTeleportByAPP( CAr & ar, DPID dpidCache, DPID dpidUser, LPBYTE, u_long )
{
#ifdef __NEW_DEBUG
g_Guard.LogDebug("CDPSrvr::OnTeleportByAPP");
#endif
CUser* pUser = g_UserMng.GetUser( dpidCache, dpidUser );
int nCurSel;
if( IsValidObj( pUser ) )
{
ar >> nCurSel;
DWORD dwWorldID;
D3DXVECTOR3 vPos;
switch( nCurSel )
{
case 0: vPos = D3DXVECTOR3(6973.0F, 100.0F, 3328.0F); dwWorldID = 1; break;
case 1: vPos = D3DXVECTOR3(8321.0F, 100.0F, 3720.0F); dwWorldID = 1; break;
case 2: vPos = D3DXVECTOR3(3900.250732F, 59.0F, 4377.806641F); dwWorldID = 1; break;
case 3: vPos = D3DXVECTOR3(5574.530273F, 75.001129F, 3900.282227F); dwWorldID = 1; break;
case 4: vPos = D3DXVECTOR3(3240.482910F, 11.316653F, 3409.634766F); dwWorldID = 1; break;
case 5: vPos = D3DXVECTOR3(881.142883F, 183.273331F, 1008.118652F); dwWorldID = 206; break;
case 6: vPos = D3DXVECTOR3(6642.931152F, 58.000000F, 6454.676758F); dwWorldID = 1; break;
case 7: vPos = D3DXVECTOR3(6785.000000F, 100.699989F, 6062.000000F); dwWorldID = 1; break;
case 8: vPos = D3DXVECTOR3(5986.8989f, 100.0f, 5414.0f); dwWorldID = 1; break;
/* case 9: vPos = D3DXVECTOR3(4908.647F, 100.000F, 3457.677F); dwWorldID = 1; break;
case 10: vPos = D3DXVECTOR3(5267.235F, 100.000F, 4719.388F); dwWorldID = 1; break;
case 11: vPos = D3DXVECTOR3(5946.719F, 100.392F, 5406.160F); dwWorldID = 1; break;
case 12: vPos = D3DXVECTOR3(6501.000F, 66.000F, 9095.00F); dwWorldID = 1; break;
case 13: vPos = D3DXVECTOR3(6593.000F, 100.000F, 5076.000F); dwWorldID = 1; break;
case 14: vPos = D3DXVECTOR3(5159.000F, 100.000F, 5273.000F); dwWorldID = 1; break;
case 15: vPos = D3DXVECTOR3(2762.000F, 150.000F, 5242.000F); dwWorldID = 1; break;
case 16: vPos = D3DXVECTOR3(2734.000F, 150.000F, 5239.000F); dwWorldID = 1; break;
case 17: vPos = D3DXVECTOR3(1826.000F, 96.600F, 2756.000F); dwWorldID = 1; break;
case 18: vPos = D3DXVECTOR3(2011.000F, 96.900F, 2307.000F); dwWorldID = 1; break;
case 19: vPos = D3DXVECTOR3(7065.011F, 90.962F, 6457.552F); dwWorldID = 1; break;
case 20: vPos = D3DXVECTOR3(6366.140F, 100.000F, 8050.609F); dwWorldID = 1; break;
case 21: vPos = D3DXVECTOR3(5730.762F, 87.762F, 8141.579F); dwWorldID = 1; break;
case 22: vPos = D3DXVECTOR3(7956.923F, 70.000F, 8822.327F); dwWorldID = 1; break;*/
default: Error("CDPSrvr::OnTeleportByAPP - %s", pUser->GetName() ); return;
}
pUser->REPLACE( g_uIdofMulti, dwWorldID, vPos, REPLACE_NORMAL, nDefaultLayer );
}
}
#endif
Alles anzeigen
Das Gelbe ist alles auskommentiert, ob es alles wieder funktioniert wenn ihr es wieder aktiviert weiß ich nicht. Müsst ihr schauen welche Koordinaten zu was gehören.
Resdata.inc:
APP_TELEPORTER "WndTile08.tga" "" 1 640 464 0x2410000 26
{
// Title String
IDS_RESDATA_INC_006762
}
{
// Help Key
IDS_RESDATA_INC_006763
}
{
WTYPE_LISTBOX WIDC_LISTBOX1 "WndEditTile00.tga" 1 40 22 194 346 0x20020000 0 0 0 0 0 0 0
{
// Title String
IDS_RESDATA_INC_006764
}
{
// ToolTip
IDS_RESDATA_INC_006765
}
WTYPE_BUTTON WIDC_BUTTON1 "ButtApply.tga" 0 72 374 144 394 0x220010 0 0 0 0 0 0 0
{
// Title String
IDS_RESDATA_INC_006766
}
{
// ToolTip
IDS_RESDATA_INC_006767
}
WTYPE_STATIC WIDC_STATIC1 "" 0 284 56 534 306 0x2220002 0 0 0 0 0 0 0
{
// Title String
IDS_RESDATA_INC_006768
}
{
// ToolTip
IDS_RESDATA_INC_006769
}
WTYPE_TEXT WIDC_TEXT1 "WndEditTile00.tga" 1 268 328 568 404 0x20020000 0 0 0 0 0 0 0
{
// Title String
IDS_RESDATA_INC_006770
}
{
// ToolTip
IDS_RESDATA_INC_006771
}
WTYPE_STATIC WIDC_STATIC2 "WndEditTile200.tga" 1 365 20 498 36 0x2222481 0 0 0 0 0 0 0
{
// Title String
IDS_RESDATA_INC_006772
}
{
// ToolTip
IDS_RESDATA_INC_006773
}
}
Alles anzeigen
Resdata.h
#define APP_TELEPORTER 2024
Die Bilder: Klick
Müsst ihr in Theme/Default/LoadMap reinklatschen.
Das wars schon, aber ihr müsst natürlich die Weise wie ihr den Teleporter aufrufen wollt noch bestimmen.
Screen:
