|
You last visited: Today at 09:38
Advertisement
Pet's Donaten lassen?
Discussion on Pet's Donaten lassen? within the Flyff Private Server forum part of the Flyff category.
03/03/2014, 16:02
|
#16
|
elite*gold: 353
Join Date: Jan 2013
Posts: 924
Received Thanks: 617
|
Quote:
Originally Posted by ©ross
//edid @Arctic: Und was bringt den Spieler an einem Rechtsklick um???? Ungleiche Mausabnutzung oder was? xDD
|
ich denke mal das es die Switcher im Gw sehr nerven würde wenn man das so macht
|
|
|
03/03/2014, 16:30
|
#17
|
elite*gold: 142
Join Date: Apr 2010
Posts: 859
Received Thanks: 428
|
Dann müssen die Switcher damit leben :P Wenn man es von anfang an in einen Server bauen würde kämen die damit auch klar^^
@Native: Einfach mal gucken - würde den Befehl, wie bereits gesagt, kopieren sodass du ihn 2x in der FuncText hast.
Dann einfach Probieren, mehr als Kaputtmachen kannst du nix
|
|
|
03/03/2014, 17:27
|
#18
|
elite*gold: 0
Join Date: Mar 2013
Posts: 157
Received Thanks: 15
|
wie denn ich verstehe kaum / gar nichts vom source ...
Code:
BOOL TextCmd_Pet1( CScanner & s )
{
// /pet 1 100
#ifdef __WORLDSERVER
CUser* pUser = (CUser*)s.dwValue;
s.GetToken();
if( s.tok == FINISHED )
return TRUE;
#if __VER >= 11 // __SYS_PLAYER_DATA
DWORD idPlayer = CPlayerDataCenter::GetInstance()->GetPlayerId( s.token );
#else // __SYS_PLAYER_DATA
DWORD idPlayer = prj.GetPlayerID( s.token );
#endif // __SYS_PLAYER_DATA
if( idPlayer == 0 ) //
return TRUE;
CUser* pTarget = (CUser*)prj.GetUserByID( idPlayer );
if( IsValidObj( pTarget ) == FALSE )
return TRUE;
CPet* pPet = pTarget->GetPet();
if( pPet == NULL ) //
return TRUE;
// kind
s.GetToken();
if( s.tok == FINISHED )
return TRUE;
BYTE nKind = atoi( s.token );
if( nKind >= PK_MAX )
return TRUE;
// exp
s.GetToken();
if( s.tok == FINISHED )
return TRUE;
BYTE nExpRate = atoi( s.token );
s.GetToken();
if( s.tok == FINISHED )
return TRUE;
BYTE nLevel = s.Token.GetLength();
if( nLevel > PL_S )
return TRUE;
BYTE anAvail[PL_MAX - 1] = { 0,};
char sAvail[2] = { 0,};
for( int i = 0; i < nLevel; i++ )
{
sAvail[0] = s.Token.GetAt( i );
sAvail[1] = '\0';
anAvail[i] = atoi( sAvail );
if( anAvail[i] < 1 || anAvail[i] > 9 )
return TRUE;
}
s.GetToken();
if( s.tok == FINISHED )
return TRUE;
BYTE nLife = atoi( s.token );
if( nLife > 99 )
nLife = 99;
CItemElem* pItemElem = pTarget->GetPetItem();
pPet->SetKind( nKind );
pPet->SetLevel( nLevel );
if( nLevel == PL_EGG )
pPet->SetKind( 0 ); // initialize
pItemElem->m_dwItemId = pPet->GetItemId();
pPet->SetEnergy( pPet->GetMaxEnergy() );
DWORD dwExp = pPet->GetMaxExp() * nExpRate / 100;
pPet->SetExp( dwExp );
for( i = PL_D; i <= nLevel; i++ )
pPet->SetAvailLevel( i, anAvail[i-1] );
for( i = nLevel + 1; i <= PL_S; i++ )
pPet->SetAvailLevel( i, 0 );
pPet->SetLife( nLife );
if( pTarget->HasPet() )
pTarget->RemovePet();
g_dpDBClient.CalluspPetLog( pTarget->m_idPlayer, pItemElem->GetSerialNumber(), 0, PETLOGTYPE_LEVELUP, pPet );
pTarget->AddPet( pPet, PF_PET_GET_AVAIL ); // í»
g_UserMng.AddPetLevelup( pTarget, MAKELONG( (WORD)pPet->GetIndex(), (WORD)pPet->GetLevel() ) ); // öâ
#endif // __WORLDSERVER
return TRUE;
kann da keiner schnell schreiben was man da ausklammern muss?
|
|
|
03/11/2014, 13:49
|
#19
|
elite*gold: 0
Join Date: Dec 2010
Posts: 164
Received Thanks: 54
|
Ich hab versucht die TextCmd_Pet() Funktion als Beispiel zu nehmen und habe daraus eine App gemacht, die ein perfektes (13579) Pet erstellt. Allerdings wird die Scroll nicht gelöscht. (Vllt hat jemand eine Idee wie man die löschen kann.) Da ich mich erst seit kurzem mit C++ und der FlyFF Source näher beschäftige, sieht das wahrscheinlich noch nicht so gut aus. Daher wenn njemand das anders machen würde und einen Verbesserungsvorschlag hat, dann her damit.
ResData.inc / .h / .txt.txt
ResData.inc
v15
Code:
APP_FENNEK_PET "WndTile00.tga" 1 304 256 0x2410000 26
{
// Title String
IDS_RESDATA_INC_FEN_000000
}
{
// Help Key
IDS_RESDATA_INC_FEN_000001
}
{
WTYPE_BUTTON WIDC_BUTTON1 "ButtNormal01.tga" 0 30 176 134 200 0x220010 0 0 0 0
{
// Title String
IDS_RESDATA_INC_FEN_000002
}
{
// ToolTip
IDS_RESDATA_INC_FEN_000003
}
WTYPE_BUTTON WIDC_BUTTON2 "ButtNormal01.tga" 0 170 176 274 200 0x220010 0 0 0 0
{
// Title String
IDS_RESDATA_INC_FEN_000004
}
{
// ToolTip
IDS_RESDATA_INC_FEN_000005
}
WTYPE_STATIC WIDC_STATIC1 "" 0 80 20 220 36 0x2220000 0 0 0 0
{
// Title String
IDS_RESDATA_INC_FEN_000006
}
{
// ToolTip
IDS_RESDATA_INC_FEN_000007
}
WTYPE_CUSTOM WIDC_CUSTOM1 "WndEditTile200.tga" 1 30 94 62 251 0x2220002 0 0 0 0
{
// Title String
IDS_RESDATA_INC_FEN_000008
}
{
// ToolTip
IDS_RESDATA_INC_FEN_000009
}
WTYPE_LISTBOX WIDC_LISTBOX1 "WndEditTile00.tga" 1 90 60 280 160 0x20020000 0 0 0 0
{
// Title String
IDS_RESDATA_INC_FEN_000010
}
{
// ToolTip
IDS_RESDATA_INC_FEN_000011
}
}
v16 (!?)
Code:
APP_FENNEK_PET "WndTile00.tga" "" 1 304 256 0x2410000 26
{
// Title String
IDS_RESDATA_INC_FEN_000000
}
{
// Help Key
IDS_RESDATA_INC_FEN_000001
}
{
WTYPE_BUTTON WIDC_BUTTON1 "ButtNormal01.tga" 0 30 176 134 200 0x220010 0 0 0 0 0 0 0
{
// Title String
IDS_RESDATA_INC_FEN_000002
}
{
// ToolTip
IDS_RESDATA_INC_FEN_000003
}
WTYPE_BUTTON WIDC_BUTTON2 "ButtNormal01.tga" 0 170 176 274 200 0x220010 0 0 0 0 0 0 0
{
// Title String
IDS_RESDATA_INC_FEN_000004
}
{
// ToolTip
IDS_RESDATA_INC_FEN_000005
}
WTYPE_STATIC WIDC_STATIC1 "" 0 80 20 220 36 0x2220000 0 0 0 0 46 112 169
{
// Title String
IDS_RESDATA_INC_FEN_000006
}
{
// ToolTip
IDS_RESDATA_INC_FEN_000007
}
WTYPE_CUSTOM WIDC_CUSTOM1 "WndEditTile200.tga" 1 30 94 62 251 0x2220002 0 0 0 0 46 112 169
{
// Title String
IDS_RESDATA_INC_FEN_000008
}
{
// ToolTip
IDS_RESDATA_INC_FEN_000009
}
WTYPE_LISTBOX WIDC_LISTBOX1 "WndEditTile00.tga" 1 90 60 280 160 0x20020000 0 0 0 0 46 112 169
{
// Title String
IDS_RESDATA_INC_FEN_000010
}
{
// ToolTip
IDS_RESDATA_INC_FEN_000011
}
}
ResData.h
(ID anpassen)
Code:
#define APP_FENNEK_PET 2100
ResData.txt.txt
Code:
IDS_RESDATA_INC_FEN_000000 Pet
IDS_RESDATA_INC_FEN_000001
IDS_RESDATA_INC_FEN_000002 OK
IDS_RESDATA_INC_FEN_000003
IDS_RESDATA_INC_FEN_000004 Abbruch
IDS_RESDATA_INC_FEN_000005
IDS_RESDATA_INC_FEN_000006 Bitte waehle ein Pet
IDS_RESDATA_INC_FEN_000007
IDS_RESDATA_INC_FEN_000008
IDS_RESDATA_INC_FEN_000009
IDS_RESDATA_INC_FEN_000010
IDS_RESDATA_INC_FEN_000011
Spec_Item.txt / propItem.txt.txt / MdlDyna.inc / defineItem.h
Spec_Item.txt
(Icon von der Namechange Scroll)
(ID's anpassen)
Code:
14 II_SYS_SYS_SCR_FENNEK_PET IDS_PROPITEM_TXT_016977 1 1 IK1_CHARGED IK2_SYSTEM IK3_SCROLL = 0 1 = 0 = = = = = = = 0 = = 1 = = 1 1 = = = = _NONE 0 = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = XI_SYS_EXCHAN01 = = = = = = WUI_NOW = = = = = = = = = 0 0 0 0 0 1 = = = = = = = = = = = = 1 = = = """Itm_SysSysScrChanam.dds""" 0 """""" IDS_PROPITEM_TXT_016978 1 300 0 0 1 0 0 0 0 0 2 = = = = = = = = = = 1 1 1 1 1 0 ITEM_GRADE_NORMAL 1 TYPE1_CONSUME TYPE2_CONSUME_SCROLL 1 0 0 0
propItem.txt.txt
Code:
IDS_PROPITEM_TXT_016977 Scroll of Pet
IDS_PROPITEM_TXT_016978 Mit dieser Schriftrolle kannst du ein perfektes S-Klasse Pet deiner Wahl erstellen! Dazu benötigst du ein aktiviertes Pet (0.00%).
MdlDyna.inc
Code:
"SysSysScrBxCom" II_SYS_SYS_SCR_FENNEK_PET MODELTYPE_MESH "" 0 MD_NEAR 0 1.0f 0 1 ATEX_NONE 1
defineItem.h
(ID anpassen)
Code:
#define II_SYS_SYS_SCR_FENNEK_PET 36100
versionCommon.h (beide)
MsgHdr.h
Code:
#ifdef __FENNEK_PET
#define PACKETTYPE_FENNEK_PET (DWORD)0x88100310 //Zahl sollte nicht vergeben sein.
#endif
DPClient.cpp / .h (Neuz)
DPClient.cpp
unter der Namechange Scroll (suche nach: II_SYS_SYS_SCR_CHANAM ) nach
das
Code:
#ifdef __FENNEK_PET
if( pItemProp->dwID == II_SYS_SYS_SCR_FENNEK_PET ) // Name bzw. ID für die Scroll angeben
{
CWndFennekPet* m_pWndFennekPet = (CWndFennekPet*)g_WndMng.GetWndBase( APP_FENNEK_PET ); // Name der Applet angeben
if( !g_WndMng.m_pWndFennekPet )
{
g_WndMng.m_pWndFennekPet = new CWndFennekPet;
g_WndMng.m_pWndFennekPet->Initialize( &g_WndMng );
}
return;
}
#endif //__FENNEK_PET
Dann unter
Code:
#ifdef __TRANSFER_AWAKE
void CDPClient::SendTransferAwake( DWORD pItemElemMain, DWORD pItemElemDestroy, DWORD pItemMat )
{
BEFORESENDSOLE( ar, PACKETTYPE_TRANSFERAWAKE, DPID_UNKNOWN );
ar << pItemElemMain << pItemElemDestroy << pItemMat;
SEND( ar, this, DPID_SERVERPLAYER );
}
#endif
das
Code:
#ifdef __FENNEK_PET
void CDPClient::SendFennekPet( BYTE nKind )
{
BEFORESENDSOLE( ar, PACKETTYPE_FENNEK_PET, DPID_UNKNOWN );
ar << nKind;
SEND( ar, this, DPID_SERVERPLAYER );
}
#endif //__FENNEK_PET
DPClient.h
Unter
Code:
#ifdef __TRANSFER_AWAKE
void SendTransferAwake( DWORD pItemElemMain, DWORD pItemElemDestroy, DWORD pItemMat );
#endif
das
Code:
#ifdef __FENNEK_PET
void SendFennekPet( BYTE nKind );
#endif //__FENNEK_PET
DPSrvr.cpp / .h (Worldserver)
DPSrvr.cpp
Unter
Code:
#ifdef __TRANSFER_AWAKE
ON_MSG( PACKETTYPE_TRANSFERAWAKE, OnSendTransferAwake);
#endif
das
Code:
#ifdef __FENNEK_PET
ON_MSG( PACKETTYPE_FENNEK_PET, OnSendFennekPet );
#endif //__FENNEK_PET
und unter
Code:
#ifdef __TRANSFER_AWAKE
void CDPSrvr::OnSendTransferAwake( CAr & ar, DPID dpidCache, DPID dpidUser, LPBYTE, u_long )//TransferAwake Funktion
{
CUser *pUser = g_UserMng.GetUser(dpidCache,dpidUser);
if(IsInvalidObj(pUser))
return;
DWORD dwDest,dwSource,dwMat;
ar >> dwDest >> dwSource >> dwMat;
int Cost;
Cost = 1;
CItemElem *pDest = NULL, *pSource = NULL, *pMat = NULL;
if(pUser->GetGold() < Cost)
return;
pMat = pUser->m_Inventory.GetAtId(dwMat);
if(!pMat)
return;
if(pMat->GetProp()->dwID != II_TRANS_MAT)
return;
pDest = pUser->m_Inventory.GetAtId(dwDest);
if(!pDest)
return;
pSource = pUser->m_Inventory.GetAtId(dwSource);
if(!pSource)
return;
if(pSource->GetProp()->dwParts != pDest->GetProp()->dwParts )
return;
if(g_xRandomOptionProperty->GetRandomOptionKind(pDest) != g_xRandomOptionProperty->GetRandomOptionKind(pSource))
{
pUser->AddText("Diese Gegenstände ähneln sich bereits.");
return;
}
if(pSource->GetRandomOptItemId() <= 0 || pDest->GetRandomOptItemId() > 0)
return;
pDest->SetRandomOptItemId(pSource->GetRandomOptItemId());
g_xRandomOptionProperty->InitializeRandomOption(pSource->GetRandomOptItemIdPtr());
pUser->UpdateItem( (BYTE)( pMat->m_dwObjId ), UI_NUM, pMat->m_nItemNum - 1 );
pUser->UpdateItemEx( (BYTE)( pDest->m_dwObjId ), UI_RANDOMOPTITEMID, pDest->GetRandomOptItemId() );
pUser->UpdateItemEx( (BYTE)( pSource->m_dwObjId ), UI_RANDOMOPTITEMID, pSource->GetRandomOptItemId() );
pUser->AddGold(-Cost);
}
#endif
das
Code:
#ifdef __FENNEK_PET
void CDPSrvr::OnSendFennekPet( CAr & ar, DPID dpidCache, DPID dpidUser, LPBYTE, u_long )
{
CUser* pUser = g_UserMng.GetUser( dpidCache, dpidUser );
if( IsValidObj( pUser ) )
{
BYTE nKind; // Kind of Pet
BYTE nLevel = PL_S; // Pet Class S (PL_S = 5)
BYTE nLife = 99; // Pet Life 99
ar >> nKind;
CPet* pPet = pUser->GetPet();
CItemElem* pItemElem = pUser->GetPetItem();
if( pPet != NULL )
{
if( pPet->GetLevel() == PL_EGG )
{
pPet->SetKind( nKind );
pPet->SetLevel( nLevel );
if( nLevel == PL_EGG )
{
pPet->SetKind( 0 );
}
pItemElem->m_dwItemId = pPet->GetItemId();
pPet->SetEnergy( pPet->GetMaxEnergy() );
pPet->SetExp( 0 );
pPet->SetLife( nLife );
for( int i = PL_D; i <= nLevel; i++ )
{
if( i == PL_D )
pPet->SetAvailLevel( i, 1 ); // D Level = 1
if( i == PL_C )
pPet->SetAvailLevel( i, 3 ); // C Level = 3
if( i == PL_B )
pPet->SetAvailLevel( i, 5 ); // B Level = 5
if( i == PL_A )
pPet->SetAvailLevel( i, 7 ); // A Level = 7
if( i == PL_S )
pPet->SetAvailLevel( i, 9 ); // S Level = 9
}
if( pUser->HasPet() )
{
pUser->RemovePet();
}
g_dpDBClient.CalluspPetLog( pUser->m_idPlayer, pItemElem->GetSerialNumber(), 0, PETLOGTYPE_LEVELUP, pPet );
pUser->AddPet( pPet, PF_PET_GET_AVAIL );
g_UserMng.AddPetLevelup( pUser, MAKELONG( (WORD)pPet->GetIndex(), (WORD)pPet->GetLevel() ) );
}
else
{
pUser->AddText("Du musst ein Egg aktiviert haben!");
}
}
else
{
pUser->AddText("Um diese Scroll nutzen zu können, brauchst du ein aktiviertes Egg!");
}
}
else
{
pUser->AddText("InvalidObj( pUser )");
}
}
#endif //__FENNEK_PET
Die for - Schleife ist sicherlich nicht das Beste. Allerdings habe ich keine andere Möglichkeit gesehen, ein Pet mit 13579 zu erstellen.
DPSrvr.h
Unter
Code:
#ifdef __TRANSFER_AWAKE
void OnSendTransferAwake( CAr & ar, DPID dpidCache, DPID dpidUser, LPBYTE, u_long );
#endif
das
Code:
#ifdef __FENNEK_PET
void OnSendFennekPet( CAr & ar, DPID dpidCache, DPID dpidUser, LPBYTE, u_long );
#endif //__FENNEK_PET
WndManager.cpp / .h / WndField.cpp / .h
WndManager.cpp
Unter
Code:
#ifdef __TRANSFER_AWAKE
m_pWndTrans = NULL;
#endif //__TRANSFER_AWAKE
das
Code:
#ifdef __FENNEK_PET
m_pWndFennekPet = NULL;
#endif //__FENNEK_PET
Unter
Code:
#ifdef __TRANSFER_AWAKE
SAFE_DELETE( m_pWndTrans );
#endif //__TRANSFER_AWAKE
das
Code:
#ifdef __FENNEK_PET
SAFE_DELETE( m_pWndFennekPet );
#endif //__FENNEK_PET
Unter
Code:
#ifdef __TRANSFER_AWAKE
if( m_pWndTrans == pWndChild )
{
SAFE_DELETE( m_pWndTrans );
pWndChild = NULL;
}
das
Code:
#ifdef __FENNEK_PET
if( m_pWndFennekPet == pWndChild )
{
SAFE_DELETE( m_pWndFennekPet );
pWndChild = NULL;
}
#endif //__FENNEK_PET
Unter dem und über SetFocus();
Code:
#ifdef __TRANSFER_AWAKE
CWndTransfer* pWndTrans = (CWndTransfer*)g_WndMng.GetWndBase( APP_TRANSFER );
if(pWndTrans!= NULL)
pWndTrans->SetVisible(FALSE);
#endif //__TRANSFER_AWAKE
das
Code:
#ifdef __FENNEK_PET
CWndFennekPet* pWndFennekPet = (CWndFennekPet*)g_WndMng.GetWndBase( APP_FENNEK_PET ); // Name der APP ggfs. anpassen
if( pWndFennekPet != NULL )
pWndFennekPet->SetVisible( FALSE );
#endif //__FENNEK_PET
Unter
Code:
#ifdef __TRANSFER_AWAKE
CWndTransfer* pWndTrans = (CWndTransfer*)g_WndMng.GetWndBase( APP_TRANSFER );
if(pWndTrans!= NULL)
pWndTrans->SetVisible(TRUE);
#endif //__TRANSFER_AWAKE
das
Code:
#ifdef __FENNEK_PET
CWndFennekPet* pWndFennekPet = (CWndFennekPet*)g_WndMng.GetWndBase( APP_FENNEK_PET ); // Name der APP ggfs. anpassen
if( pWndFennekPet != NULL )
pWndFennekPet->SetVisible( TRUE );
#endif //__FENNEK_PET
WndManager.h
Unter
Code:
#ifdef __TRANSFER_AWAKE
CWndTransfer* m_pWndTrans;
#endif //__TRANSFER_AWAKE
das
Code:
#ifdef __FENNEK_PET
CWndFennekPet* m_pWndFennekPet;
#endif //__FENNEK_PET
WndField.cpp
Unter
Code:
#ifdef __TRANSFER_AWAKE
CWndTransfer::CWndTransfer()
{
for( int i = 0; i < 4; i++ )
{
m_pItemElem[i] = NULL;
m_pTexture[i] = NULL;
}
}
CWndTransfer::~CWndTransfer()
{
for( int i = 0; i < 4; i++ )
{
if( m_pItemElem[i] != NULL )
{
if( !g_pPlayer->m_vtInfo.IsTrading( m_pItemElem[i] ))
m_pItemElem[i]->SetExtra(0);
}
}
for( int i = 0; i < 4; i++ )
{
m_pItemElem[i] = NULL;
m_pTexture[i] = NULL;
}
}
BOOL CWndTransfer::Initialize( CWndBase* pWndParent, DWORD dwType )
{
return CWndNeuz::InitDialog( g_Neuz.GetSafeHwnd(), APP_TRANSFER, 0, CPoint( 0, 0 ), pWndParent );
}
BOOL CWndTransfer::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
{
return CWndNeuz::OnCommand( nID, dwMessage, pWndBase );
}
void CWndTransfer::OnSize( UINT nType, int cx, int cy )
{
CWndNeuz::OnSize( nType, cx, cy );
}
void CWndTransfer::OnLButtonUp( UINT nFlags, CPoint point )
{
}
void CWndTransfer::OnLButtonDown( UINT nFlags, CPoint point )
{
}
void CWndTransfer::OnDraw( C2DRender* p2DRender )
{
LPWNDCTRL wndCtrl[4];
wndCtrl[0] = GetWndCtrl( WIDC_CUSTOM1 );
wndCtrl[1] = GetWndCtrl( WIDC_CUSTOM2 );
wndCtrl[2] = GetWndCtrl( WIDC_CUSTOM3 );
wndCtrl[3] = GetWndCtrl( WIDC_CUSTOM4 );
for( int i = 0; i < 4; i++ )
{
if( m_pItemElem[i] != NULL && m_pTexture[i] != NULL )
{
m_pTexture[i]->Render( p2DRender, CPoint( wndCtrl[i]->rect.left, wndCtrl[i]->rect.top));
}
if (m_pItemElem[0] != NULL && m_pItemElem[1] != NULL && m_pItemElem[3] != NULL )
{
m_pTexture[2] = CWndBase::m_textureMng.AddTexture( D3DDEVICE, MakePath( DIR_ITEM, m_pItemElem[1]->GetProp()->szIcon ), 0xffff00ff );
m_pTexture[2]->Render( p2DRender, CPoint( wndCtrl[2]->rect.left, wndCtrl[2]->rect.top));
}
}
}
HRESULT CWndTransfer::RestoreDeviceObjects()
{
CWndNeuz::RestoreDeviceObjects();
return S_OK;
}
HRESULT CWndTransfer::InvalidateDeviceObjects()
{
CWndNeuz::InvalidateDeviceObjects();
return S_OK;
}
HRESULT CWndTransfer::DeleteDeviceObjects()
{
CWndNeuz::DeleteDeviceObjects();
InvalidateDeviceObjects();
return S_OK;
}
void CWndTransfer::OnInitialUpdate( void )
{
CWndNeuz::OnInitialUpdate();
MoveParentCenter();
}
BOOL CWndTransfer::OnDropIcon( LPSHORTCUT pShortcut, CPoint point )
{
LPWNDCTRL pCtrl = GetWndCtrl(WIDC_CUSTOM1);
CItemElem *pItem = (CItemElem*)g_pPlayer->GetItemId(pShortcut->m_dwId);
if(!pItem)
return FALSE;
if(pCtrl && pCtrl->rect.PtInRect(point))
{
if(pItem->GetRandomOptItemId() > 0)
{
m_pItemElem[0] = pItem;
pItem->SetExtra(1);
m_pTexture[0] = CWndBase::m_textureMng.AddTexture(D3DDEVICE,MakePath(DIR_ITEM,m_pItemElem[0]->GetProp()->szIcon),0xffff00ff);
return TRUE;
}
else
{
g_WndMng.PutString("Der Gegenstand muss erweckt werden!");
return FALSE;
}
}
pCtrl = GetWndCtrl(WIDC_CUSTOM2);
if(pCtrl && pCtrl->rect.PtInRect(point))
{
if(pItem->GetRandomOptItemId() <= 0)
{
m_pItemElem[1] = pItem;
pItem->SetExtra(1);
m_pTexture[1] = CWndBase::m_textureMng.AddTexture(D3DDEVICE,MakePath(DIR_ITEM,m_pItemElem[1]->GetProp()->szIcon),0xffff00ff);
return TRUE;
}
else
{
g_WndMng.PutString("Der Gegenstand ist nicht erweckt!");
return FALSE;
}
}
pCtrl = GetWndCtrl(WIDC_CUSTOM4);
if(pCtrl && pCtrl->rect.PtInRect(point))
{
if(pItem->GetProp()->dwID == II_TRANS_MAT)
{
m_pItemElem[3] = pItem;
pItem->SetExtra(1);
m_pTexture[3] = CWndBase::m_textureMng.AddTexture(D3DDEVICE,MakePath(DIR_ITEM,m_pItemElem[3]->GetProp()->szIcon),0xffff00ff);
return TRUE;
}
else
{
g_WndMng.PutString("Falsches Material!");
return FALSE;
}
}
return FALSE;
}
BOOL CWndTransfer::OnChildNotify( UINT message, UINT nID, LRESULT* pLResult )
{
switch (nID)
{
case WIDC_BUTTON1:// Start Transfer
{
if(g_pPlayer->GetGold() < 1)
return FALSE;
if (m_pItemElem[0] != NULL && m_pItemElem[1] != NULL && m_pItemElem[3] != NULL )
{
g_DPlay.SendTransferAwake( m_pItemElem[1]->m_dwObjId, m_pItemElem[0]->m_dwObjId, m_pItemElem[3]->m_dwObjId);
Destroy();
}
else
{
g_WndMng.PutString("Kein Gegenstand vorhanden.");
}
break;
}
case WIDC_BUTTON2:// Cancel Window
{
Destroy();
break;
}
}
return CWndNeuz::OnChildNotify( message, nID, pLResult );
}
#endif
das
Code:
#ifdef __FENNEK_PET
CWndFennekPet::CWndFennekPet()
{
m_pTexture = NULL;
}
CWndFennekPet::~CWndFennekPet()
{
DeleteDeviceObjects();
}
BOOL CWndFennekPet::Initialize( CWndBase* pWndParent, DWORD dwType )
{
return CWndNeuz::InitDialog( g_Neuz.GetSafeHwnd(), APP_FENNEK_PET, 0, CPoint( 0, 0 ), pWndParent ); // Name der APP ggfs. anpassen
}
BOOL CWndFennekPet::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
{
return CWndNeuz::OnCommand( nID, dwMessage, pWndBase );
}
void CWndFennekPet::OnSize( UINT nType, int cx, int cy )
{
CWndNeuz::OnSize( nType, cx, cy );
}
void CWndFennekPet::OnLButtonUp( UINT nFlags, CPoint point )
{
}
void CWndFennekPet::OnLButtonDown( UINT nFlags, CPoint point )
{
}
void CWndFennekPet::OnDraw( C2DRender* p2DRender )
{
LPWNDCTRL wndCtrl = GetWndCtrl( WIDC_CUSTOM1 );
CString petIconFile; // Icon (Item\Itm_Pet..)
switch( m_nSelected )
{
case 0:
petIconFile = "Itm_PetWhiteTiger01_00.dds"; // Normal D Class Pet (Inventar) Icon
nKind = PK_TIGER;
break;
case 1:
petIconFile = "Itm_PetBarbaryLion01_00.dds"; // Normal D Class Pet (Inventar) Icon
nKind = PK_LION;
break;
case 2:
petIconFile = "Itm_PetRabbit02_00.dds"; // Normal D Class Pet (Inventar) Icon
nKind = PK_RABBIT;
break;
case 3:
petIconFile = "Itm_PetNineFox01_00.dds"; // Normal D Class Pet (Inventar) Icon
nKind = PK_FOX;
break;
case 4:
petIconFile = "Itm_PetDragon01_00.dds"; // Normal D Class Pet (Inventar) Icon
nKind = PK_DRAGON;
break;
case 5:
petIconFile = "Itm_PetEagle01_00.dds"; // Normal D Class Pet (Inventar) Icon
nKind = PK_GRIFFIN;
break;
case 6:
petIconFile = "Itm_PetUnicorn01_00.dds"; // Normal D Class Pet (Inventar) Icon
nKind = PK_UNICORN;
break;
}
m_pTexture = m_textureMng.AddTexture( D3DDEVICE, MakePath( DIR_ITEM, petIconFile ), 0xffff00ff );
if( m_pTexture != NULL )
{
if( g_Option.m_nWindowAlpha > 200 )
{
m_pTexture->Render( p2DRender, wndCtrl->rect.TopLeft(), g_Option.m_nWindowAlpha - 55 );
}
else
{
m_pTexture->Render( p2DRender, wndCtrl->rect.TopLeft(), g_Option.m_nWindowAlpha );
}
}
}
HRESULT CWndFennekPet::RestoreDeviceObjects()
{
CWndNeuz::RestoreDeviceObjects();
return S_OK;
}
HRESULT CWndFennekPet::InvalidateDeviceObjects()
{
CWndNeuz::InvalidateDeviceObjects();
return S_OK;
}
HRESULT CWndFennekPet::DeleteDeviceObjects()
{
CWndNeuz::DeleteDeviceObjects();
InvalidateDeviceObjects();
return S_OK;
}
void CWndFennekPet::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("Behemoth: +75 STR");
pListBox->AddString("Lion: +75 STA");
pListBox->AddString("Jackalope: +75 DEX");
pListBox->AddString("Reinecke: +75 INT");
pListBox->AddString("Bahamuth: +375 ATK");
pListBox->AddString("Hippogryph: +300 DEF");
pListBox->AddString("Nightmare: +6825 HP");
}
BOOL CWndFennekPet::OnChildNotify( UINT message, UINT nID, LRESULT* pLResult )
{
switch (nID)
{
case WIDC_LISTBOX1:
{
CWndListBox* pWndListBox = (CWndListBox*)GetDlgItem( WIDC_LISTBOX1 );
if( pWndListBox->GetCurSel() != -1 || pWndListBox->GetCurSel() > 6 )
{
m_nSelected = pWndListBox->GetCurSel();
}
break;
}
case WIDC_BUTTON1: // OK
{
CPet* pPet = g_pPlayer->GetPet();
if( pPet && pPet->GetLevel() == PL_EGG )
{
if( nKind >= PK_TIGER && nKind < PK_MAX )
{
g_DPlay.SendFennekPet( nKind );
Destroy();
}
else
{
g_WndMng.PutString("Um diese Scroll nutzen zu können, brauchst du ein aktiviertes Egg!");
}
}
else
{
g_WndMng.PutString("Du musst ein Egg aktiviert haben!");
}
break;
}
case WIDC_BUTTON2: // Cancel
{
Destroy();
break;
}
}
return CWndNeuz::OnChildNotify( message, nID, pLResult );
}
#endif //__FENNEK_PET
WndField.h
Unter
Code:
#ifdef __TRANSFER_AWAKE
class CWndTransfer : public CWndNeuz
{
public:
CItemElem* m_pItemElem[4];
CTexture* m_pTexture[4];
CWndTransfer( void );
~CWndTransfer( void );
virtual HRESULT RestoreDeviceObjects();
virtual HRESULT InvalidateDeviceObjects();
virtual HRESULT DeleteDeviceObjects();
public:
CRect m_Rect[3];
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 BOOL OnDropIcon( LPSHORTCUT pShortcut, CPoint point );
virtual void OnSize( UINT nType, int cx, int cy );
virtual void OnLButtonUp( UINT nFlags, CPoint point );
virtual void OnLButtonDown( UINT nFlags, CPoint point );
};
#endif
das
Code:
#ifdef __FENNEK_PET
class CWndFennekPet : public CWndNeuz
{
public:
int m_nSelected;
CTexture* m_pTexture;
BYTE nKind;
CWndFennekPet( void );
~CWndFennekPet( 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 //__FENNEK_PET
Hier noch zwei Screens:
Wenn jemand das gebrauchen möchte, soll er/sie das tun. Wenn Fehler auftreten, meldet sie bitte.
|
|
|
03/11/2014, 15:04
|
#20
|
elite*gold: 0
Join Date: Oct 2012
Posts: 948
Received Thanks: 157
|
That system from jopsi is only bugging cause you need to add an extra code.
So it works like it should be. I also have released this based on Jopsi's source snippets.
[spoiler]
DEFINEITEM.H
PHP Code:
#define II_SYS_LION 224931 #define II_SYS_RABBIT 224932 #define II_SYS_TIGER 224933 #define II_SYS_FOX 224934 #define II_SYS_DRAGON 224935 #define II_SYS_HIPPOGRIPH 224936 #define II_SYS_HORSE 224937
DPSrvr.cpp
Beneath
PHP Code:
case II_SYS_SYS_SCR_LEVELDOWN01: case II_SYS_SYS_SCR_LEVELDOWN02: b = DoUseItemTarget_ItemLevelDown( pUser, pMaterial, pTarget ); break;
ADD
PHP Code:
#ifdef __SUPER_PETS case II_SYS_LION: case II_SYS_RABBIT: case II_SYS_TIGER: case II_SYS_FOX: case II_SYS_DRAGON: case II_SYS_HIPPOGRIPH: case II_SYS_HORSE: b = DoUseItemTarget_PerfectPet(pUser, pMaterial, pTarget); break; #endif
At the end of DPSrvr.cpp
Put this
PHP Code:
#ifdef __SUPER_PETS BOOL CDPSrvr::DoUseItemTarget_PerfectPet( CUser* pUser, CItemElem* pMaterial, CItemElem* pTarget ) { BOOL bPet; BYTE nKind; BYTE nExpRate = 99; //EXP RATE BYTE nLevel = 5;// S KLASSE BYTE nLife = 25;//Life is 25
CPet* pPet = pUser->GetPet();
if( pTarget->GetProp()->dwItemKind1 == IK1_GENERAL && pTarget->GetProp()->dwItemKind3 == IK3_EGG ) { if( pPet == NULL ) { pUser->AddText( "You dont have an summoned Egg!" ); return FALSE; } else if( pPet && pUser->GetPet()->GetLevel() != PL_EGG ) { pUser->AddText( "You can only use an scroll of Perfect pets on Eggs!" ); return FALSE; } else { switch( pMaterial->m_dwItemId ) { case II_SYS_LION: nKind = 1; bPet = TRUE; break; case II_SYS_RABBIT: nKind = 2; bPet = TRUE; break; case II_SYS_TIGER: nKind = 0; bPet = TRUE; break; case II_SYS_HORSE: nKind = 6; bPet = TRUE; break; case II_SYS_DRAGON: nKind = 4; bPet = TRUE; break; case II_SYS_HIPPOGRIPH: nKind = 5; bPet = TRUE; break; case II_SYS_FOX: nKind = 3; bPet = TRUE; break; default: break; }
if( bPet == TRUE ) { if( nLevel > PL_S ) return TRUE;
if( IsValidObj( pUser ) == FALSE )//FEHLER ABGFRAGE return TRUE; if( pPet == NULL ) //FEHLER ABFRAGE return TRUE;
// kind if( nKind >= PK_MAX ) //FEHLER ABFRAGE return TRUE; CItemElem* pItemElem2 = pUser->GetPetItem(); pPet->SetKind( nKind ); pPet->SetLevel( nLevel ); pItemElem2->m_dwItemId = pPet->GetItemId(); pPet->SetEnergy( pPet->GetMaxEnergy() ); DWORD dwExp = pPet->GetMaxExp() * nExpRate / 100; pPet->SetExp( dwExp );
for( int i = 0; i < 6; i++ ) pPet->SetAvailLevel(i, 9 ); //Here it will generate the Perfect pets with stats 9/9/9/9/9
pPet->SetLife( nLife ); if( pUser->HasPet() ) pUser->RemovePet();
g_dpDBClient.CalluspPetLog( pUser->m_idPlayer, pItemElem2->GetSerialNumber(), 0, PETLOGTYPE_LEVELUP, pPet ); //Log the change into database pUser->AddPet( pPet, PF_PET_GET_AVAIL ); // PET EINFÜGEN g_UserMng.AddPetLevelup( pUser, MAKELONG( (WORD)pPet->GetIndex(), (WORD)pPet->GetLevel() ) ); pUser->UpdateItem( (BYTE)pMaterial->m_dwObjId, UI_NUM, 0 );//Remove the scroll //return TRUE; } } } return FALSE; } #endif
VersionCommon.h Worldserver
#define __SUPER_PETS
|
|
|
05/22/2014, 17:40
|
#21
|
elite*gold: 0
Join Date: Feb 2012
Posts: 13
Received Thanks: 0
|
Quote:
[SPOILER]That system from jopsi is only bugging cause you need to add an extra code.
So it works like it should be. I also have released this based on Jopsi's source snippets.
DEFINEITEM.H
PHP Code:
#define II_SYS_LION 224931
#define II_SYS_RABBIT 224932
#define II_SYS_TIGER 224933
#define II_SYS_FOX 224934
#define II_SYS_DRAGON 224935
#define II_SYS_HIPPOGRIPH 224936
#define II_SYS_HORSE 224937
DPSrvr.cpp
Beneath
PHP Code:
case II_SYS_SYS_SCR_LEVELDOWN01:
case II_SYS_SYS_SCR_LEVELDOWN02:
b = DoUseItemTarget_ItemLevelDown( pUser, pMaterial, pTarget );
break;
ADD
PHP Code:
#ifdef __SUPER_PETS
case II_SYS_LION:
case II_SYS_RABBIT:
case II_SYS_TIGER:
case II_SYS_FOX:
case II_SYS_DRAGON:
case II_SYS_HIPPOGRIPH:
case II_SYS_HORSE:
b = DoUseItemTarget_PerfectPet(pUser, pMaterial, pTarget);
break;
#endif
At the end of DPSrvr.cpp
Put this
PHP Code:
#ifdef __SUPER_PETS
BOOL CDPSrvr:  oUseItemTarget_PerfectPet( CUser* pUser, CItemElem* pMaterial, CItemElem* pTarget )
{
BOOL bPet;
BYTE nKind;
BYTE nExpRate = 99; //EXP RATE
BYTE nLevel = 5;// S KLASSE
BYTE nLife = 25;//Life is 25
CPet* pPet = pUser->GetPet();
if( pTarget->GetProp()->dwItemKind1 == IK1_GENERAL && pTarget->GetProp()->dwItemKind3 == IK3_EGG )
{
if( pPet == NULL )
{
pUser->AddText( "You dont have an summoned Egg!" );
return FALSE;
}
else if( pPet && pUser->GetPet()->GetLevel() != PL_EGG )
{
pUser->AddText( "You can only use an scroll of Perfect pets on Eggs!" );
return FALSE;
}
else
{
switch( pMaterial->m_dwItemId )
{
case II_SYS_LION:
nKind = 1;
bPet = TRUE;
break;
case II_SYS_RABBIT:
nKind = 2;
bPet = TRUE;
break;
case II_SYS_TIGER:
nKind = 0;
bPet = TRUE;
break;
case II_SYS_HORSE:
nKind = 6;
bPet = TRUE;
break;
case II_SYS_DRAGON:
nKind = 4;
bPet = TRUE;
break;
case II_SYS_HIPPOGRIPH:
nKind = 5;
bPet = TRUE;
break;
case II_SYS_FOX:
nKind = 3;
bPet = TRUE;
break;
default:
break;
}
if( bPet == TRUE )
{
if( nLevel > PL_S )
return TRUE;
if( IsValidObj( pUser ) == FALSE )//FEHLER ABGFRAGE
return TRUE;
if( pPet == NULL ) //FEHLER ABFRAGE
return TRUE;
// kind
if( nKind >= PK_MAX ) //FEHLER ABFRAGE
return TRUE;
CItemElem* pItemElem2 = pUser->GetPetItem();
pPet->SetKind( nKind );
pPet->SetLevel( nLevel );
pItemElem2->m_dwItemId = pPet->GetItemId();
pPet->SetEnergy( pPet->GetMaxEnergy() );
DWORD dwExp = pPet->GetMaxExp() * nExpRate / 100;
pPet->SetExp( dwExp );
for( int i = 0; i < 6; i++ )
pPet->SetAvailLevel(i, 9 ); //Here it will generate the Perfect pets with stats 9/9/9/9/9
pPet->SetLife( nLife );
if( pUser->HasPet() )
pUser->RemovePet();
g_dpDBClient.CalluspPetLog( pUser->m_idPlayer, pItemElem2->GetSerialNumber(), 0, PETLOGTYPE_LEVELUP, pPet ); //Log the change into database
pUser->AddPet( pPet, PF_PET_GET_AVAIL ); // PET EINFÜGEN
g_UserMng.AddPetLevelup( pUser, MAKELONG( (WORD)pPet->GetIndex(), (WORD)pPet->GetLevel() ) );
pUser->UpdateItem( (BYTE)pMaterial->m_dwObjId, UI_NUM, 0 );//Remove the scroll
//return TRUE;
}
}
}
return FALSE;
}
#endif
VersionCommon.h Worldserver
#define __SUPER_PETS
|
defined in DPSrvr.h
defined in defineitem.h
error
DPSrvr.cpp(5632) : error C2065: 'II_SYS_LION' : undeclared identifier
DPSrvr.cpp(5632) : error C2051: case expression not constant
DPSrvr.cpp(5633) : error C2065: 'II_SYS_RABBIT' : undeclared identifier
DPSrvr.cpp(5633) : error C2051: case expression not constant
DPSrvr.cpp(5634) : error C2065: 'II_SYS_TIGER' : undeclared identifier
DPSrvr.cpp(5634) : error C2051: case expression not constant
DPSrvr.cpp(5635) : error C2065: 'II_SYS_FOX' : undeclared identifier
DPSrvr.cpp(5635) : error C2051: case expression not constant
DPSrvr.cpp(5636) : error C2065: 'II_SYS_DRAGON' : undeclared identifier
DPSrvr.cpp(5636) : error C2051: case expression not constant
DPSrvr.cpp(5637) : error C2065: 'II_SYS_HIPPOGRIPH' : undeclared identifier
DPSrvr.cpp(5637) : error C2051: case expression not constant
DPSrvr.cpp(5638) : error C2065: 'II_SYS_HORSE' : undeclared identifier
DPSrvr.cpp(5638) : error C2051: case expression not constant
DPSrvr.cpp(13000) : error C3861: 'II_SYS_LION': identifier not found, even with argument-dependent lookup
DPSrvr.cpp(13000) : error C2051: case expression not constant
DPSrvr.cpp(13004) : error C3861: 'II_SYS_RABBIT': identifier not found, even with argument-dependent lookup
DPSrvr.cpp(13004) : error C2051: case expression not constant
DPSrvr.cpp(13008) : error C3861: 'II_SYS_TIGER': identifier not found, even with argument-dependent lookup
DPSrvr.cpp(13008) : error C2051: case expression not constant
DPSrvr.cpp(13012) : error C3861: 'II_SYS_HORSE': identifier not found, even with argument-dependent lookup
DPSrvr.cpp(13012) : error C2051: case expression not constant
DPSrvr.cpp(13016) : error C3861: 'II_SYS_DRAGON': identifier not found, even with argument-dependent lookup
DPSrvr.cpp(13016) : error C2051: case expression not constant
DPSrvr.cpp(13020) : error C3861: 'II_SYS_HIPPOGRIPH': identifier not found, even with argument-dependent lookup
DPSrvr.cpp(13020) : error C2051: case expression not constant
DPSrvr.cpp(13024) : error C3861: 'II_SYS_FOX': identifier not found, even with argument-dependent lookup
DPSrvr.cpp(13024) : error C2051: case expression not constant
im using blessed source
|
|
|
 |
|
Similar Threads
|
PC So lassen ?
02/07/2014 - Hardware Discussions / Questions - 8 Replies
https://www.mindfactory.de/shopping_cart.php/baske t_action/load_basket_extern/id/ae04a722053843576e2 911944a63d11c66145e3e945cab89a77
kann ich das so lassen ? (Ich brauche keine Festplatte)
|
Root Server mit ALLEN Sachen in NPC's OHNE Donaten ??
12/15/2010 - Flyff Private Server - 5 Replies
Hey Leute,
Ich hätte gerne einen Pserver bei dem ALLE Greens in den NPC's sind und bei dem man nicht Spenden muss um an irgendwelche Sachen dranzukommen ;).
Ich hoffe ihr könnt mir einen empfehlen. :))
Peace, Streuselkuchen.
|
Sachen fallen lassen ohne auf fallen lassen zuklicken?
06/26/2010 - Metin2 - 4 Replies
hi
also ich will mal gerne wissen ob es möglich ist und wie man Sachen schnell fallen lassen kann(clientmodding)
also das zb. rechtsklick auf einem gegenstand der den sofort fallen lässt
oder wenigstens dieses doofe fenster "Möchtest du Item fallen lassen?"
aus dem text löschen? wo finde ich das?
es müsste gehen es gibt ja auch hack im clienten, pickup bot und so...
pls^^
|
kann mir einer 8.5 fg leihen^^/donaten
03/03/2009 - Diablo 2 Trading - 9 Replies
topic..
soll jez kein bettel versuch sein gebe es hunder pro zurück hab jez nur das prob das mein acc gebanned wurde und ich jez halt hamma pala aufbaue und mir dieser betrag fehlt.
|
All times are GMT +1. The time now is 09:41.
|
|