viele benutzen ja die GoH Source und da gibt es das Problem das man beim Model Change zum Beispiel das Model von einem Sword auf ein Yoyo machen kann, hopt man dann crasht der Client des gehopten und der drumherum stehenden Spieler. Um dies zu verhindern müsst ihr in eurem Source folgende Änderungen vor nehmen :
WndField.cpp
Ändert diesen Abschnitt :
PHP Code:
CItemElem* pTempElem;
pTempElem = (CItemElem*) g_pPlayer->GetItemId( pShortcut->m_dwId );
ItemProp* pItemProp = pTempElem->GetProp();
if(i == 0 && pTempElem->m_dwnewID != NULL )
{
g_WndMng.PutString("Only Items with unchanged Models", 0,0xff0000);
return FALSE;
}
if(pItemElem[0] && i == 1)
{
if(pItemElem[0]->GetProp()->dwID == pTempElem->GetProp()->dwID)
{
g_WndMng.PutString("You cant change the Model to the same Model", 0, 0xff0000);
return FALSE;
}
if(pItemElem[0]->GetProp()->dwParts != pTempElem->GetProp()->dwParts)
{
g_WndMng.PutString("The Item is not the same Part as the Primary Item", 0,0xff0000);
return FALSE;
}
if(pItemElem[0]->GetProp()->dwItemKind3 != pTempElem->GetProp()->dwItemKind3)
{
g_WndMng.PutString("The Items must have the Same ItemKind",0,0xff0000);
return FALSE;
}
if(pItemElem[0]->GetProp()->dwHanded != pTempElem->GetProp()->dwHanded)
{
g_WndMng.PutString("Du kannst keine Mehrhand in Einhand oder Einhand in MehrHand Model ändern!");
return FALSE;
}
}
if(pTempElem->GetProp()->dwParts != PARTS_RWEAPON &&
pTempElem->GetProp()->dwParts != PARTS_LWEAPON &&
pTempElem->GetProp()->dwParts != PARTS_MASK &&
pTempElem->GetProp()->dwParts != PARTS_CLOAK &&
pTempElem->GetProp()->dwParts != PARTS_SHIELD &&
pTempElem->GetProp()->dwParts !=PARTS_HAND &&
pTempElem->GetProp()->dwParts !=PARTS_FOOT &&
pTempElem->GetProp()->dwParts !=PARTS_CAP &&
pTempElem->GetProp()->dwParts !=PARTS_ROBE &&
pTempElem->GetProp()->dwParts !=PARTS_CLOAK &&
pTempElem->GetProp()->dwParts !=PARTS_HAT &&
pTempElem->GetProp()->dwParts !=PARTS_CLOTH &&
pTempElem->GetProp()->dwParts !=PARTS_GLOVE &&
pTempElem->GetProp()->dwParts !=PARTS_UPPER_BODY &&
pTempElem->GetProp()->dwParts !=PARTS_BOOTS
)
{
Zu :
PHP Code:
CItemElem* pTempElem;
pTempElem = (CItemElem*) g_pPlayer->GetItemId( pShortcut->m_dwId );
ItemProp* pItemProp = pTempElem->GetProp();
if(i == 0 && pTempElem->m_dwnewID != NULL )
{
g_WndMng.PutString("Nur Items ohne Model!", 0,0xff0000);
return FALSE;
}
if(pTempElem->GetProp()->dwParts != PARTS_RWEAPON &&
pTempElem->GetProp()->dwParts != PARTS_LWEAPON &&
pTempElem->GetProp()->dwParts != PARTS_MASK &&
pTempElem->GetProp()->dwParts != PARTS_CLOAK &&
pTempElem->GetProp()->dwParts != PARTS_SHIELD &&
pTempElem->GetProp()->dwParts !=PARTS_HAND &&
pTempElem->GetProp()->dwParts !=PARTS_FOOT &&
pTempElem->GetProp()->dwParts !=PARTS_CAP &&
pTempElem->GetProp()->dwParts !=PARTS_ROBE &&
pTempElem->GetProp()->dwParts !=PARTS_CLOAK &&
pTempElem->GetProp()->dwParts !=PARTS_HAT &&
pTempElem->GetProp()->dwParts !=PARTS_CLOTH &&
pTempElem->GetProp()->dwParts !=PARTS_GLOVE &&
pTempElem->GetProp()->dwParts !=PARTS_UPPER_BODY &&
pTempElem->GetProp()->dwParts !=PARTS_BOOTS
)
{
DPSrvr.cpp
Ändert dies :
PHP Code:
#ifdef __MODEL_CHANGE
void CDPSrvr::OnSendModelChange( CAr & ar, DPID dpidCache, DPID dpidUser, LPBYTE lpBuf, u_long uBufSize )
{
CUser* pUser = g_UserMng.GetUser( dpidCache, dpidUser );
DWORD pItem1, pItem2;
ar >> pItem1 >> pItem2;
if( pUser )
{
CItemElem * pItemElem = pUser->m_Inventory.GetAtId( pItem1 );
CItemElem * pItemElem2 = pUser->m_Inventory.GetAtId( pItem2 );
if(pItemElem && pItemElem2)
{
CString Str;
Str.Format("Das Model wurde erfolgreich geändert zu: %s", pItemElem2->GetProp()->szName);
pUser->UpdateItem( (BYTE)pItemElem->m_dwObjId, UI_MODEL, pItemElem2->GetProp()->dwID );
pUser->UpdateItem( (BYTE)pItemElem2->m_dwObjId, UI_NUM, 0);
pUser->AddText(Str);
}
}
}
#endif //__MODEL_CHANGE
zu dem :
PHP Code:
#ifdef __MODEL_CHANGE
void CDPSrvr::OnSendModelChange( CAr & ar, DPID dpidCache, DPID dpidUser, LPBYTE lpBuf, u_long uBufSize )
{
CUser* pUser = g_UserMng.GetUser( dpidCache, dpidUser );
DWORD pItem1, pItem2;
ar >> pItem1 >> pItem2;
if( pUser )
{
CItemElem * pItemElem = pUser->m_Inventory.GetAtId( pItem1 );
CItemElem * pItemElem2 = pUser->m_Inventory.GetAtId( pItem2 );
if(pItemElem->GetProp()->dwParts != pItemElem2->GetProp()->dwParts)
{
pUser->AddText("Die Items sind nicht vom selben Typ!");
return;
}
if(pItemElem->GetProp()->dwItemKind3 != pItemElem2->GetProp()->dwItemKind3)
{
pUser->AddText("Die Items müssen die gleiche Klasse haben!");
return;
}
if(pItemElem->GetProp()->dwHanded != pItemElem2->GetProp()->dwHanded)
{
pUser->AddText("Du kannst keine Mehrhand in Einhand oder Einhand in Mehrhand Model ändern!");
return;
}
if(pItemElem->GetProp()->dwID == pItemElem2->GetProp()->dwID)
{
pUser->AddText("Du kannst nicht das gleiche Model verwenden!");
return;
}
if(pItemElem->GetProp()->dwItemSex != pItemElem2->GetProp()->dwItemSex)
{
pUser->AddText("Die Items müssen das gleiche Geschlecht haben!");
return;
}
if(pItemElem->GetProp()->dwItemJob != pItemElem2->GetProp()->dwItemJob)
{
pUser->AddText("Die Items müssen von der gleichen Job Klasse sein!");
return;
}
else if(pItemElem && pItemElem2)
{
CString Str;
Str.Format("Das Model wurde erfolgreich geändert zu: %s", pItemElem2->GetProp()->szName);
pUser->UpdateItem( (BYTE)pItemElem->m_dwObjId, UI_MODEL, pItemElem2->GetProp()->dwID );
pUser->UpdateItem( (BYTE)pItemElem2->m_dwObjId, UI_NUM, 0);
pUser->AddText(Str);
}
}
}
#endif //__MODEL_CHANGE
Nun sollte der Bug nicht mehr funktionieren.
Mit freundlichen Grüßen
Exrib0.






