[COLOR="Red"]//Search this code[/COLOR]
BOOL GLLandManClient::DropItem ( SDROP_CLIENT_ITEM *pItemDrop )
{
// Note : ¶³¾îÁú À§Ä¡ ³ëµå¸¦ ã´Â´Ù.
//
CLIENTQUADNODE* pLandNode = m_LandTree.FindNode ( (int)pItemDrop->vPos.x, (int)pItemDrop->vPos.z );
if ( !pLandNode ) return FALSE;
SITEM* pITEM = GLItemMan::GetInstance().GetItem( pItemDrop->sItemClient.sNativeID );
if ( !pITEM ) return FALSE;
// Note : ¸Þ¸ð¸®¸¦ ÇÒ´ç.
//
CItemClientDrop *pNewItem = new CItemClientDrop;
// Note : ÁöÇüÀÇ ³ôÀ̶û ¸ÂÃß¾î¼ ¶³¾îÁö´Â ÁöÁ¡À» ¼±ÅÃÇÑ´Ù.
// ( ³»ºñ°ÔÀ̼ÇÀ̶û ¿ÀÂ÷°¡ ¾à°£ ÀÖ´Â°É °¨¾È. )
D3DXVECTOR3 vPoint1 = pItemDrop->vPos + D3DXVECTOR3(0,8,0);
D3DXVECTOR3 vPoint2 = pItemDrop->vPos + D3DXVECTOR3(0,-5,0);
D3DXVECTOR3 vCollision(FLT_MAX,FLT_MAX,FLT_MAX);
BOOL bCollision = FALSE;
LPDXFRAME pDxFrame = NULL;
m_LandMan.IsCollision ( vPoint1, vPoint2, vCollision, bCollision, pDxFrame, FALSE );
D3DXVECTOR3 vDropPos = pItemDrop->vPos;
if ( bCollision ) vDropPos = vCollision;
vDropPos.y += 1.0f;
// Note : ¾ÆÀÌÅÛ Á¤º¸ ( Á¾·ù, À§Ä¡ ).
//
pNewItem->sItemClient = pItemDrop->sItemClient;
pNewItem->vPos = vDropPos;
D3DXMatrixTranslation ( &pNewItem->matWld, pNewItem->vPos.x, pNewItem->vPos.y, pNewItem->vPos.z );
// Note : °ü¸® ID ºÎ¿©.
//
pNewItem->sMapID = m_sMapID;
pNewItem->dwGlobID = pItemDrop->dwGlobID;
pNewItem->dwCeID = pLandNode->dwCID;
// Note : °ü¸® ³ëµå Æ÷ÀÎÅÍ.
//
m_ItemArray[pNewItem->dwGlobID] = pNewItem; // - Àü¿ª.
pNewItem->pGlobList = m_GlobItemList.ADDHEAD ( pNewItem ); // - Àü¿ª.
pNewItem->pQuadNode = pLandNode; // - Æ®¸® ³ëµå.
pNewItem->pCellList = pLandNode->pData->m_ItemList.ADDHEAD ( pNewItem ); // - Æ®¸® ³ëµå.
std::string strFieldFile = pITEM->sBasicOp.strFieldFile;
std::transform ( strFieldFile.begin(), strFieldFile.end(), strFieldFile.begin(), tolower );
bool bSIMMESH = false;
bool bEFFECT = false;
std::string::size_type idx;
idx = strFieldFile.find ( ".x" );
if ( idx!=string::npos ) bSIMMESH = true;
idx = strFieldFile.find ( ".egp" );
if ( idx!=string::npos ) bEFFECT = true;
pNewItem->vMax = D3DXVECTOR3(10,10,10);
pNewItem->vMin = D3DXVECTOR3(-10,-10,-10);
if ( bSIMMESH )
{
DxSimMesh* pSimMesh = GLItemMan::GetInstance().GetFieldMesh ( pNewItem->sItemClient.sNativeID );
if ( !pSimMesh )
{
CDebugSet::ToLogFile ( "ERROR : item field mesh null %s", pITEM->GetName() );
}
else
{
pSimMesh->GetBoundBox ( pNewItem->vMax, pNewItem->vMin );
}
pNewItem->pSimMesh = pSimMesh;
}
else if ( bEFFECT )
{
EFF_PROPGROUP* pPropGroup = DxEffSinglePropGMan::GetInstance().FindEffGProp ( strFieldFile.c_str() );
if ( pPropGroup )
{
pNewItem->vMax = pPropGroup->m_vMax;
pNewItem->vMin = pPropGroup->m_vMin;
}
STARGETID sTARID ( CROW_ITEM, pNewItem->dwGlobID, pNewItem->vPos );
DxEffGroupPlayer::GetInstance().PassiveEffect ( strFieldFile.c_str(), pNewItem->matWld, sTARID );
}
COLLISION::MINDETECTAABB ( pNewItem->vMax, pNewItem->vMin, 1.1f, 4.0f );
COLLISION::TransformAABB ( pNewItem->vMax, pNewItem->vMin, pNewItem->matWld );
if ( pItemDrop->fAge < 0.01f )
{
std::string strSOUND = "ITEMDROP_COIN";
switch ( pITEM->sBasicOp.emItemType )
{
case ITEM_ANTI_DISAPPEAR:
case ITEM_REVIVE:
case ITEM_SUIT:
case ITEM_VEHICLE:
{
switch ( pITEM->sSuitOp.emSuit )
{
case SUIT_HEADGEAR:
case SUIT_UPPER:
case SUIT_LOWER:
case SUIT_HAND:
case SUIT_VEHICLE:
strSOUND = "ITEMDROP_SUIT";
break;
case SUIT_FOOT:
strSOUND = "ITEMDROP_SHOES";
break;
case SUIT_HANDHELD:
strSOUND = "ITEMDROP_WAPON";
break;
case SUIT_NECK:
case SUIT_WRIST:
case SUIT_FINGER:
strSOUND = "ITEMDROP_RING";
break;
};
}
break;
case ITEM_SKILL:
strSOUND = "ITEMDROP_SCROLL";
break;
case ITEM_CURE:
strSOUND = "ITEMDROP_DRUGS";
break;
case ITEM_ARROW:
case ITEM_RECALL:
case ITEM_KEY:
case ITEM_GRINDING:
case ITEM_CHARM:
case ITEM_TICKET:
case ITEM_SKP_RESET:
case ITEM_STAT_RESET:
case ITEM_SKP_STAT_RESET:
case ITEM_BOX:
case ITEM_CLEANSER:
case ITEM_LOUDSPEAKER:
case ITEM_FIRECRACKER:
case ITEM_CHARACTER_CARD:
case ITEM_INVEN_CARD:
case ITEM_STORAGE_CARD:
case ITEM_STORAGE_CONNECT:
case ITEM_PREMIUMSET:
case ITEM_PRIVATEMARKET:
case ITEM_RANDOMITEM:
case ITEM_DISJUNCTION:
case ITEM_REMODEL:
case ITEM_GARBAGE_CARD:
case ITEM_TELEPORT_CARD:
strSOUND = "ITEMDROP_SUIT";
break;
case ITEM_QITEM:
strSOUND = "ITEMDROP_?BOX";
break;
};
DxSoundLib::GetInstance()->PlaySound ( strSOUND );
}
[COLOR="Red"]//add some function in here[/COLOR]
STARGETID sTARID ( CROW_ITEM, pNewItem->dwGlobID, pNewItem->vPos ); [COLOR="Red"]<--declare what things that will have our new effect.
[/COLOR]
DxEffGroupPlayer::GetInstance().PassiveEffect ( GLCONST_CHAR::strMINE_EFFECT.c_str(), pNewItem->matWld, sTARID );[COLOR="Red"]//call effect function[/COLOR]
return TRUE;
}
BOOL GLLandManClient::DropMoney ( LONGLONG lnAmount, D3DXVECTOR3 vPos, DWORD dwGlobID, float fAge )
{
// Note : ¶³¾îÁú À§Ä¡ ³ëµå¸¦ ã´Â´Ù.
//
CLIENTQUADNODE* pLandNode = m_LandTree.FindNode ( (int)vPos.x, (int)vPos.z );
if ( !pLandNode ) return FALSE;
// Note : ¸Þ¸ð¸®¸¦ ÇÒ´ç.
//
CMoneyClientDrop *pNewMoney = new CMoneyClientDrop;
// Note : ÁöÇüÀÇ ³ôÀ̶û ¸ÂÃß¾î¼ ¶³¾îÁö´Â ÁöÁ¡À» ¼±ÅÃÇÑ´Ù.
// ( ³»ºñ°ÔÀ̼ÇÀ̶û ¿ÀÂ÷°¡ ¾à°£ ÀÖ´Â°É °¨¾È. )
D3DXVECTOR3 vPoint1 = vPos + D3DXVECTOR3(0,8,0);
D3DXVECTOR3 vPoint2 = vPos + D3DXVECTOR3(0,-5,0);
D3DXVECTOR3 vCollision(FLT_MAX,FLT_MAX,FLT_MAX);
BOOL bCollision = FALSE;
LPDXFRAME pDxFrame = NULL;
m_LandMan.IsCollision ( vPoint1, vPoint2, vCollision, bCollision, pDxFrame, FALSE );
D3DXVECTOR3 vDropPos = vPos;
if ( bCollision ) vDropPos = vCollision;
vDropPos.y += 1.0f;
// Note : ¾ÆÀÌÅÛ Á¤º¸ ( Á¾·ù, À§Ä¡ ).
//
pNewMoney->fAge = fAge;
pNewMoney->lnAmount = lnAmount;
pNewMoney->vPos = vDropPos;
D3DXMatrixTranslation ( &pNewMoney->matWld, pNewMoney->vPos.x, pNewMoney->vPos.y, pNewMoney->vPos.z );
// Note : °ü¸® ID ºÎ¿©.
//
pNewMoney->sMapID = m_sMapID;
pNewMoney->dwGlobID = dwGlobID;
pNewMoney->dwCeID = pLandNode->dwCID;
// Note : °ü¸® ³ëµå Æ÷ÀÎÅÍ.
//
m_MoneyArray[dwGlobID] = pNewMoney; // - Àü¿ª.
pNewMoney->pGlobList = m_GlobMoneyList.ADDHEAD ( pNewMoney ); // - Àü¿ª.
pNewMoney->pQuadNode = pLandNode; // - Æ®¸® ³ëµå.
pNewMoney->pCellList = pLandNode->pData->m_MoneyList.ADDHEAD ( pNewMoney ); // - Æ®¸® ³ëµå.
DxSimMesh* pMoneyMesh = NULL;
if ( lnAmount>200 ) pMoneyMesh = GLItemMan::GetInstance().GetMoneyMesh ( 2 );
else if ( lnAmount>60 ) pMoneyMesh = GLItemMan::GetInstance().GetMoneyMesh ( 1 );
else pMoneyMesh = GLItemMan::GetInstance().GetMoneyMesh ( 0 );
if ( !pMoneyMesh )
{
CDebugSet::ToLogFile ( "ERROR : money field mesh null ( amount %I64d )", lnAmount );
}
pNewMoney->pMoneyMesh = pMoneyMesh;
if ( fAge < 0.01f )
{
DxSoundLib::GetInstance()->PlaySound ( "ITEMDROP_COIN" );
}
STARGETID sTARID ( CROW_MONEY, pNewMoney->dwGlobID, pNewMoney->vPos ); [COLOR="Red"]<--declare what things that will have our new effect.
[/COLOR]
DxEffGroupPlayer::GetInstance().PassiveEffect ( GLCONST_CHAR::strMINE_EFFECT.c_str(), pNewMoney->matWld, sTARID );[COLOR="Red"]//call effect function[/COLOR]
return TRUE;
}
[COLOR="Red"]//now we already add function to show our new effect.
//Remember if you add function to show some effect of create some effect you must add function to delete that effect after doing something.
//e.g. in this code that we are trying to add, the effect will show when mob drop some item and some money.
//But how to make the effect disappeare when we lot the item and money??
//The answer is we must add delete function for that effect.
//Add delete effect function like this.
//Search this code first.[/COLOR]
BOOL GLLandManClient::DropOutItem ( DWORD dwGlobID )
{
GASSERT ( dwGlobID<MAXITEM );
if ( m_ItemArray[dwGlobID] == NULL ) return FALSE;
PITEMCLIENTDROP pItemDrop = m_ItemArray[dwGlobID];
m_ItemArray[dwGlobID] = NULL;
// Note : Global-List ÇØÁö.
//
if ( pItemDrop->pGlobList )
m_GlobItemList.DELNODE ( pItemDrop->pGlobList );
// Note : QuadNode-List ÇØÁö.
//
CLIENTQUADNODE* pLandNode = pItemDrop->pQuadNode;
if ( pItemDrop->pCellList )
pLandNode->pData->m_ItemList.DELNODE ( pItemDrop->pCellList );
[COLOR="Red"]//Look at this code. This is for item and its already have delete function so we can leave it.
//But how about money drop??
//Just copy below code and paste it in Money Drop code[/COLOR]
STARGETID sTARID ( CROW_ITEM, pItemDrop->dwGlobID, pItemDrop->vPos );
DxEffGroupPlayer::GetInstance().DeletePassiveEffect ( sTARID );
// Note : ¸Þ¸ð¸® ÇØÁö.
//
SAFE_DELETE(pItemDrop);
return TRUE;
}
BOOL GLLandManClient::DropOutMoney ( DWORD dwGlobID )
{
//GASSERT ( dwGlobID<MAXMONEY );
if ( dwGlobID >= MAXMONEY )
{
CDebugSet::ToLogFile( "GLLandManClient::DropOutMoney() -- dwGlobID >= MAXMONEY" );
return FALSE;
}
if ( m_MoneyArray[dwGlobID] == NULL ) return FALSE;
PMONEYCLIENTDROP pMoneyDrop = m_MoneyArray[dwGlobID];
m_MoneyArray[dwGlobID] = NULL;
// Note : Global-List ÇØÁö.
//
if ( pMoneyDrop->pGlobList )
m_GlobMoneyList.DELNODE ( pMoneyDrop->pGlobList );
// Note : QuadNode-List ÇØÁö.
//
CLIENTQUADNODE* pLandNode = pMoneyDrop->pQuadNode;
if ( pMoneyDrop->pCellList )
pLandNode->pData->m_MoneyList.DELNODE ( pMoneyDrop->pCellList );
[COLOR="Red"]//This where you must paste that code. and one more things..
//we must edit it from item drop to money drop like this.[/COLOR]
STARGETID sTARID ( [COLOR="Red"]CROW_MONEY[/COLOR], [COLOR="Red"]pMoneyDrop[/COLOR]->dwGlobID, [COLOR="Red"]pMoneyDrop[/COLOR]->vPos );
DxEffGroupPlayer::GetInstance().DeletePassiveEffect ( sTARID );
// Note : ¸Þ¸ð¸® ÇØÁö.
//
SAFE_DELETE(pMoneyDrop);
return TRUE;
}