HERAKLES Otomatik Avlı kalıcı sunucu. 19 Haziran'da açılıyor. Atius & Wizard güvencesiyle hemen kayıt ol, ön kayıt ödülleri aktif. HEMEN TIKLA!
Oyunda ışınlanırken, pazarları görüntülerken ve metinden düşen itemler menzilden çıkıp girildiğinde silinirken ki bir hatayı düzeltir, ayrıca c- dilinden c++ dönüştürülmüş bir betiktir güvenlik açıklarını ve sistem performans düzeltmelerini içerir (10-100-1000 karakter/item varsa yazılar üst üste binerek fps düşüşü yaptığı bir hatayı düzeltir)
İşlemi yapmadan önce yedek almayı unutmayın
[CODE lang="cpp" title="PythonTextTail.cpp"]
//
//
#include "stdafx.h"
#include "InstanceBase.h"
#in#includeesource.h"
##include"PythonTextTail.h"#includee "PythonChara##includeer.h"
#include "Pyt#include.h"
#include "Locale.h"
#inc#includerkManager.h"
#ifd#includeE_NEW_SHOP_I#include
#include "Python#ifdefation.h"
#endif
const D3DX#includeTextTail_Player_Color =#endifOLOR(1.0f, 1.0f, 1.0f, 1.0f);
const D3DXCOLOR c_TextTail_Monster_Color = D3DXCOLOR(1.0f, 0.0f, 0.0f, 1.0f);
const D3DXCOLOR c_TextTail_Item_Color = D3DXCOLOR(1.0f, 1.0f, 1.0f, 1.0f);
const D3DXCOLOR c_TextTail_Chat_Color = D3DXCOLOR(1.0f, 1.0f, 1.0f, 1.0f);
const D3DXCOLOR c_TextTail_Info_Color = D3DXCOLOR(1.0f, 0.785f, 0.785f, 1.0f);
const D3DXCOLOR c_TextTail_Guild_Name_Color = 0xFFEFD3FF;
const float c_TextTail_Name_Position = -10.0f;
const float c_fxMarkPosition = 1.5f;
#ifdef TITLE_SYSTEM
const float c_fyGuildNamePosi#ifdef 25.0f;
const float c_fyMarkPosition = 25.0f + 11.0f;
const float c_fysTitlePosition = 16.0f;
const float c_fyGuildNamePositionOld = 15.0f;
const float c_fyMarkPositionOld = 15.0f + 11.0f;
#else
const float c_fyGuildNamePosition = 15.0f;
#else float c_fyMarkPosition = 15.0f + 11.0f;
#en#elseOOL bPKTitleEnable = TRUE;
// TEXTTAIL_L#endifIME_CONTROL
long gs_TextTail_LivingTime = 5000;
long TextTail_GetLivingTime()
{
assert(gs_TextTail_LivingTime>1000);
return gs_TextTail_LivingTime;
}
void TextTail_SetLivingTime(long livingTime)
{
gs_TextTail_LivingTime = livingTime;
}
// END_OF_TEXTTAIL_LIVINGTIME_CONTROL
CGraphicText * ms_pFont = NULL;
void CPythonTextTail::GetInfo(std::string* pstInfo)
{
char szInfo[256];
sprintf(szInfo, "TextTail: ChatTail %d, ChrTail (Map %d, List %d), ItemTail (Map %d, List %d), Pool %d",
m_ChatTailMap.size(),
m_CharacterTextTailMap.size(), m_CharacterTextTailList.size(),
m_ItemTextTailMap.size(), m_ItemTextTailList.size(),
m_TextTailPool.GetCapacity());
pstInfo->append(szInfo);
}
void CPythonTextTail::UpdateAllTextTail()
{
CInstanceBase * pInstance = CPythonCharacterManager::Instance().GetMainInstancePtr();
if (pInstance)
{
TPixelPosition pixelPos;
pInstance->NEW_GetPixelPosition(&pixelPos);
TTextTailMap::iterator itorMap;
for (itorMap = m_CharacterTextTailMap.begin(); itorMap != m_CharacterTextTailMap.end(); ++itorMap)
{
UpdateDistance(pixelPos, itorMap->second);
}
for (itorMap = m_ItemTextTailMap.begin(); itorMap != m_ItemTextTailMap.end(); ++itorMap)
{
UpdateDistance(pixelPos, itorMap->second);
}
#ifdef ENABLE_NEW_SHOP_IN_CITIES
for (ito#ifdef m_ShopTextTailMap.begin(); itorMap != m_ShopTextTailMap.end(); ++itorMap)
UpdateDistance(pixelPos, itorMap->second);
#endif
for (TChatTailMap::iterator itorC#endifChatTailMap.begin(); itorChat!=m_ChatTailMap.end(); ++itorChat)
{
UpdateDistance(pixelPos, itorChat->second);
if (itorChat->second->bNameFlag)
{
DWORD dwVID = itorChat->first;
ShowCharacterTextTail(dwVID);
}
}
}
}
void CPythonTextTail::UpdateShowingTextTail()
{
TTextTailList::iterator itor;
for (itor = m_ItemTextTailList.begin(); itor != m_ItemTextTailList.end(); ++itor)
{
UpdateTextTail(*itor);
}
for (TChatTailMap::iterator itorChat=m_ChatTailMap.begin(); itorChat!=m_ChatTailMap.end(); ++itorChat)
{
UpdateTextTail(itorChat->second);
}
#ifdef ENABLE_NEW_SHOP_IN_CITIES
for (auto it#ifdef= m_ShopTextTailMap.begin(); itorMap != m_ShopTextTailMap.end(); ++itorMap)
if (itorMap->second->bRender)
UpdateTextTail(itorMap->second);
#endif
for (itor = m_CharacterTextTailList.be#endif itor != m_CharacterTextTailList.end(); ++itor)
{
TTextTail * pTextTail = *itor;
UpdateTextTail(pTextTail);
TChatTailMap::iterator itor = m_ChatTailMap.find(pTextTail->dwVirtualID);
if (m_ChatTailMap.end() != itor)
{
TTextTail * pChatTail = itor->second;
if (pChatTail->bNameFlag)
{
pTextTail->y = pChatTail->y - 17.0f;
}
}
}
}
void CPythonTextTail::UpdateTextTail(TTextTail * pTextTail)
{
if (!pTextTail->pOwner)
return;
/////
CPythonGraphic & rpyGraphic = CPythonGraphic::Instance();
rpyGraphic.Identity();
const D3DXVECTOR3 & c_rv3Position = pTextTail->pOwner->GetPosition();
rpyGraphic.ProjectPosition(c_rv3Position.x,
c_rv3Position.y,
c_rv3Position.z + pTextTail->fHeight,
&pTextTail->x,
&pTextTail->y,
&pTextTail->z);
pTextTail->x = floorf(pTextTail->x);
pTextTail->y = floorf(pTextTail->y);
if (pTextTail->fDistanceFromPlayer < 1300.0f)
{
pTextTail->z = 0.0f;
}
else
{
pTextTail->z = pTextTail->z * CPythonGraphic::Instance().GetOrthoDepth() * -1.0f;
pTextTail->z += 10.0f;
}
}
void CPythonTextTail::ArrangeTextTail()
{
TTextTailList::iterator itor;
TTextTailList::iterator itorCompare;
DWORD dwTime = CTimer::Instance().GetCurrentMillisecond();
for (itor = m_ItemTextTailList.begin(); itor != m_ItemTextTailList.end(); ++itor)
{
TTextTail * pInsertTextTail = *itor;
int yTemp = 5;
int LimitCount = 0;
for (itorCompare = m_ItemTextTailList.begin(); itorCompare != m_ItemTextTailList.end()
{
TTextTail * pCompareTextTail = *itorCompare;
if (*itorCompare == *itor)
{
++itorCompare;
continue;
}
if (LimitCount >= 20)
break;
if (isIn(pInsertTextTail, pCompareTextTail))
{
pInsertTextTail->y = (pCompareTextTail->y + pCompareTextTail->yEnd + yTemp);
itorCompare = m_ItemTextTailList.begin();
++LimitCount;
continue;
}
++itorCompare;
}
if (pInsertTextTail->pOwnerTextInstance)
{
pInsertTextTail->pOwnerTextInstance->SetPosition(pInsertTextTail->x, pInsertTextTail->y, pInsertTextTail->z);
pInsertTextTail->pOwnerTextInstance->Update();
pInsertTextTail->pTextInstance->SetColor(pInsertTextTail->Color.r, pInsertTextTail->Color.g, pInsertTextTail->Color.b);
pInsertTextTail->pTextInstance->SetPosition(pInsertTextTail->x, pInsertTextTail->y + 15.0f, pInsertTextTail->z);
pInsertTextTail->pTextInstance->Update();
}
else
{
pInsertTextTail->pTextInstance->SetColor(pInsertTextTail->Color.r, pInsertTextTail->Color.g, pInsertTextTail->Color.b);
pInsertTextTail->pTextInstance->SetPosition(pInsertTextTail->x, pInsertTextTail->y, pInsertTextTail->z);
pInsertTextTail->pTextInstance->Update();
}
}
#ifdef ENABLE_NEW_SHOP_IN_CITIES
for (auto it#ifdef= m_ShopTextTailMap.begin(); itorMap != m_ShopTextTailMap.end(); ++itorMap)
{
if (!itorMap->second->bRender)
continue;
TTextTail* pInsertTextTail = itorMap->second;
if (pInsertTextTail->pOwnerTextInstance)
{
pInsertTextTail->pOwnerTextInstance->SetPosition(pInsertTextTail->x, pInsertTextTail->y, pInsertTextTail->z);
pInsertTextTail->pOwnerTextInstance->Update();
pInsertTextTail->pTextInstance->SetColor(pInsertTextTail->Color.r, pInsertTextTail->Color.g, pInsertTextTail->Color.b);
pInsertTextTail->pTextInstance->SetPosition(pInsertTextTail->x, pInsertTextTail->y + 15.0f, pInsertTextTail->z);
pInsertTextTail->pTextInstance->Update();
}
else
{
pInsertTextTail->pTextInstance->SetColor(pInsertTextTail->Color.r, pInsertTextTail->Color.g, pInsertTextTail->Color.b);
pInsertTextTail->pTextInstance->SetPosition(pInsertTextTail->x, pInsertTextTail->y, pInsertTextTail->z);
pInsertTextTail->pTextInstance->Update();
}
}
#endif
for (itor = m_CharacterTextTailList.b#endif; itor != m_CharacterTextTailList.end(); ++itor)
{
TTextTail * pTextTail = *itor;
float fxAdd = 0.0f;
#ifdef TITLE_SYSTEM
CGraphicTextInstance*#ifdefleNameInstance = pTextTail->psTitleNameTextInstance;
if (psTitleNameInstance)
{
int iWidth, iHeight;
psTitleNameInstance->GetTextSize(&iWidth, &iHeight);
psTitleNameInstance->SetPosition(pTextTail->x, pTextTail->y - c_fysTitlePosition, pTextTail->z);
psTitleNameInstance->Update();
}
#endif
CGraphicMarkInstance * pMarkInsta#endifpTextTail->pMarkInstance;
CGraphicTextInstance * pGuildNameInstance = pTextTail->pGuildNameTextInstance;
#ifdef ENABLE_PLAYTIME_ICON
CGraphicImage#ifdefce * pPlayTime = pTextTail->pPlayTimeInstance, pGuildNameTextInstance;
#endif
if (pMarkInstance && pGuildNameIns#endif
{
int iWidth, iHeight;
int iImageHalfSize = pMarkInstance->GetWidth()/2 + c_fxMarkPosition;
pGuildNameInstance->GetTextSize(&iWidth, &iHeight);
#ifdef TITLE_SYSTEM
if (!psTitleNameI#ifdefe)
{
pMarkInstance->SetPosition(pTextTail->x - iWidth / 2 - iImageHalfSize, pTextTail->y - c_fyMarkPositionOld);
pGuildNameInstance->SetPosition(pTextTail->x + iImageHalfSize, pTextTail->y - c_fyGuildNamePositionOld, pTextTail->z);
}
else
{
pMarkInstance->SetPosition(pTextTail->x - iWidth / 2 - iImageHalfSize, pTextTail->y - c_fyMarkPosition);
pGuildNameInstance->SetPosition(pTextTail->x + iImageHalfSize, pTextTail->y - c_fyGuildNamePosition, pTextTail->z);
}
#else
pMarkInstance->SetPosition(pTex#else->x - iWidth / 2 - iImageHalfSize, pTextTail->y - c_fyMarkPosition);
pGuildNameInstance->SetPosition(pTextTail->x + iImageHalfSize, pTextTail->y - c_fyGuildNamePosition, pTextTail->z);
#endif
pGuildNameInstance->Update();
#endif }
int iNameWidth, iNameHeight;
#endif pTextTail->pTextInstance->GetTextSize(&iNameWidth, &iNameHeight);
CGraphicTextInstance * pTitle = pTextTail->pTitleTextInstance;
if (pTitle)
{
int iTitleWidth, iTitleHeight;
pTitle->GetTextSize(&iTitleWidth, &iTitleHeight);
fxAdd = 8.0f;
if (LocaleService_IsEUROPE())
{
if( GetDefaultCodePage() == CP_ARABIC )
{
pTitle->SetPosition(pTextTail->x - (iNameWidth / 2) - iTitleWidth - 4.0f, pTextTail->y, pTextTail->z);
}
else
{
pTitle->SetPosition(pTextTail->x - (iNameWidth / 2), pTextTail->y, pTextTail->z);
}
}
else
{
pTitle->SetPosition(pTextTail->x - (iNameWidth / 2) - fxAdd, pTextTail->y, pTextTail->z);
}
pTitle->Update();
CGraphicTextInstance * pLevel = pTextTail->pLevelTextInstance;
if (pLevel)
{
int iLevelWidth, iLevelHeight;
pLevel->GetTextSize(&iLevelWidth, &iLevelHeight);
if (LocaleService_IsEUROPE())
{
if( GetDefaultCodePage() == CP_ARABIC )
{
pLevel->SetPosition(pTextTail->x - (iNameWidth / 2) - iLevelWidth - iTitleWidth - 8.0f, pTextTail->y, pTextTail->z);
}
else
{
pLevel->SetPosition(pTextTail->x - (iNameWidth / 2) - iTitleWidth, pTextTail->y, pTextTail->z);
}
}
else
{
pLevel->SetPosition(pTextTail->x - (iNameWidth / 2) - fxAdd - iTitleWidth, pTextTail->y, pTextTail->z);
}
pLevel->Update();
}
}
else
{
fxAdd = 4.0f;
CGraphicTextInstance * pLevel = pTextTail->pLevelTextInstance;
if (pLevel)
{
int iLevelWidth, iLevelHeight;
pLevel->GetTextSize(&iLevelWidth, &iLevelHeight);
if (LocaleService_IsEUROPE())
{
if( GetDefaultCodePage() == CP_ARABIC )
{
pLevel->SetPosition(pTextTail->x - (iNameWidth / 2) - iLevelWidth - 4.0f, pTextTail->y, pTextTail->z);
}
else
{
pLevel->SetPosition(pTextTail->x - (iNameWidth / 2), pTextTail->y, pTextTail->z);
}
}
else
{
pLevel->SetPosition(pTextTail->x - (iNameWidth / 2) - fxAdd, pTextTail->y, pTextTail->z);
}
pLevel->Update();
}
}
#ifdef ENABLE_PLAYTIME_ICON
if (pPlayTime#ifdef {
CGraphicTextInstance* pLevel = pTextTail->pLevelTextInstance;
if (pLevel)
{
int iLevelWidth, iLevelHeight, iTitleWidth, iTitleHeight;
pLevel->GetTextSize(&iLevelWidth, &iLevelHeight);
if (pTitle)
{
pTitle->GetTextSize(&iTitleWidth, &iTitleHeight);
pPlayTime->SetPosition(pTextTail->x - (iNameWidth / 2) - 4.0f - iTitleWidth - iLevelWidth - 17.0f - pPlayTime->GetWidth() / 2 + 8.5f, pTextTail->y - 14);
}
if (!pTitle)
pPlayTime->SetPosition(pTextTail->x - (iNameWidth / 2) - 4.0f - iLevelWidth - 17.0f - pPlayTime->GetWidth() / 2 + 8.5f, pTextTail->y - 14);
}
}
#endif
pTextTail->pTextInstance->SetColo#endiftTail->Color.r, pTextTail->Color.g, pTextTail->Color.b);
pTextTail->pTextInstance->SetPosition(pTextTail->x + fxAdd, pTextTail->y, pTextTail->z);
pTextTail->pTextInstance->Update();
}
for (TChatTailMap::iterator itorChat=m_ChatTailMap.begin(); itorChat!=m_ChatTailMap.end()
{
TTextTail * pTextTail = itorChat->second;
if (pTextTail->LivingTime < dwTime)
{
DeleteTextTail(pTextTail);
itorChat = m_ChatTailMap.erase(itorChat);
continue;
}
else
++itorChat;
pTextTail->pTextInstance->SetColor(pTextTail->Color);
pTextTail->pTextInstance->SetPosition(pTextTail->x, pTextTail->y, pTextTail->z);
pTextTail->pTextInstance->Update();
}
}
void CPythonTextTail::Render()
{
TTextTailList::iterator itor;
for (itor = m_CharacterTextTailList.begin(); itor != m_CharacterTextTailList.end(); ++itor)
{
TTextTail * pTextTail = *itor;
pTextTail->pTextInstance->Render();
if (pTextTail->pMarkInstance && pTextTail->pGuildNameTextInstance)
{
pTextTail->pMarkInstance->Render();
pTextTail->pGuildNameTextInstance->Render();
}
if (pTextTail->pTitleTextInstance)
{
pTextTail->pTitleTextInstance->Render();
}
if (pTextTail->pLevelTextInstance)
{
pTextTail->pLevelTextInstance->Render();
}
#ifdef TITLE_SYSTEM
if (pTextTail->psTitl#ifdefextInstance)
{
pTextTail->psTitleNameTextInstance->Render();
}
#endif
#ifdef ENABLE_PLAYTIME_ICON
if (pT#endifl#ifdefyTimeInstance)
{
pTextTail->pPlayTimeInstance->Render();
}
#endif
}
for (itor = m_ItemTextTailList.#endif); itor != m_ItemTextTailList.end(); ++itor)
{
TTextTail * pTextTail = *itor;
RenderTextTailBox(pTextTail);
pTextTail->pTextInstance->Render();
if (pTextTail->pOwnerTextInstance)
pTextTail->pOwnerTextInstance->Render();
}
#ifdef ENABLE_NEW_SHOP_IN_CITIES
for (auto it#ifdef= m_ShopTextTailMap.begin(); itorMap != m_ShopTextTailMap.end(); ++itorMap)
{
if (!itorMap->second->bRender)
continue;
TTextTail* pTextTail = itorMap->second;
RenderTextTailBox(pTextTail);
pTextTail->pTextInstance->Render();
if (pTextTail->pOwnerTextInstance)
pTextTail->pOwnerTextInstance->Render();
}
#endif
for (TChatTailMap::iterator itorChat #endifatTailMap.begin(); itorChat!=m_ChatTailMap.#endifatTailMap.begin( {
TTextTail * pTextTail = itorChat->second;
if (pTextTail->pOwner->isShow())
RenderTextTailName(pTextTail);
}
}
void CPythonTextTail::RenderTextTailBox(TTextTail * pTextTail)
{
#ifdef __ENABLE_NEW_OFFLINESHOP__
# ifdef ENAB#ifdef_SHOP_IN_CITIES
if (pTextTail->bIsShop)
{
CPythonGraphic::Instance().SetDiffuseColor(0.0f, 0.0f, 0.0f, 1.0f);
CPythonGraphic::Instance().RenderBox2d(pTextTail->x + pTextTail->xStart - 10.f,
pTextTail->y + pTextTail->yStart - 10.f,
pTextTail->x + pTextTail->xEnd + 10.f,
pTextTail->y + pTextTail->yEnd + 10.f,
pTextTail->z);
CPythonGraphic::Instance().SetDiffuseColor(0.0f, 0.0f, 0.0f, 0.3f);
CPythonGraphic::Instance().RenderBar2d(pTextTail->x + pTextTail->xStart - 10.f,
pTextTail->y + pTextTail->yStart - 10.f,
pTextTail->x + pTextTail->xEnd + 10.f,
pTextTail->y + pTextTail->yEnd + 10.f,
pTextTail->z);
return;
}
# endif
#endif
CPythonGraphic::Instance().SetDiffuseC#endif.0f, 0.0f, 0.0f, 1.0f);
CPythonGraphic::Instance().RenderBox2d(pTextTail->x + pTextTail->xStart,
pTextTail->y + pTextTail->yStart,
pTextTail->x + pTextTail->xEnd,
pTextTail->y + pTextTail->yEnd,
pTextTail->z);
CPythonGraphic::Instance().SetDiffuseColor(0.0f, 0.0f, 0.0f, 0.3f);
CPythonGraphic::Instance().RenderBar2d(pTextTail->x + pTextTail->xStart,
pTextTail->y + pTextTail->yStart,
pTextTail->x + pTextTail->xEnd,
pTextTail->y + pTextTail->yEnd,
pTextTail->z);
}
void CPythonTextTail::RenderTextTailName(TTextTail * pTextTail)
{
pTextTail->pTextInstance->Render();
}
void CPythonTextTail::HideAllTextTail()
{
m_CharacterTextTailList.clear();
m_ItemTextTailList.clear();
#ifdef ENABLE_NEW_SHOP_IN_CITIES
for (aut#ifdefr : m_ShopTextTailMap)
iter.second->bRender = false;
#endif
}
void CPythonTextTail::UpdateDistance(co#endifixelPosition & c_rCenterPosition, TTextTail * pTextTail)
{
const D3DXVECTOR3 & c_rv3Position = pTextTail->pOwner->GetPosition();
D3DXVECTOR2 v2Distance(c_rv3Position.x - c_rCenterPosition.x, -c_rv3Position.y - c_rCenterPosition.y);
pTextTail->fDistanceFromPlayer = D3DXVec2Length(&v2Distance);
}
void CPythonTextTail::ShowAllTextTail()
{
TTextTailMap::iterator itor;
for (itor = m_CharacterTextTailMap.begin(); itor != m_CharacterTextTailMap.end(); ++itor)
{
TTextTail * pTextTail = itor->second;
if (pTextTail->fDistanceFromPlayer < 3500.0f)
ShowCharacterTextTail(itor->first);
}
for (itor = m_ItemTextTailMap.begin(); itor != m_ItemTextTailMap.end(); ++itor)
{
TTextTail * pTextTail = itor->second;
if (pTextTail->fDistanceFromPlayer < 3500.0f)
ShowItemTextTail(itor->first);
}
#ifdef ENABLE_NEW_SHOP_IN_CITIES
//OFFSHOP_DE#ifdefhopTextTailMap size %u ",m_ShopTextTailMap.size());
for (itor = m_ShopTextTailMap.begin(); itor != m_ShopTextTailMap.end(); ++itor)
{
TTextTail* pTextTail = itor->second;
pTextTail->bRender = pTextTail->fDistanceFromPlayer < 3500.f;
}
#endif
}
void CPythonTextTail::ShowCharacterText#endifWORD VirtualID)
{
TTextTailMap::iterator itor = m_CharacterTextTailMap.find(VirtualID);
if (m_CharacterTextTailMap.end() == itor)
return;
TTextTail * pTextTail = itor->second;
if (m_CharacterTextTailList.end() != std::find(m_CharacterTextTailList.begin(), m_CharacterTextTailList.end(), pTextTail))
{
return;
}
if (!pTextTail->pOwner->isShow())
return;
CInstanceBase * pInstance = CPythonCharacterManager::Instance().GetInstancePtr(pTextTail->dwVirtualID);
if (!pInstance)
return;
if (pInstance->IsGuildWall())
return;
if (pInstance->CanPickInstance())
m_CharacterTextTailList.push_back(pTextTail);
}
void CPythonTextTail::ShowItemTextTail(DWORD VirtualID)
{
TTextTailMap::iterator itor = m_ItemTextTailMap.find(VirtualID);
if (m_ItemTextTailMap.end() == itor)
return;
TTextTail * pTextTail = itor->second;
if (m_ItemTextTailList.end() != std::find(m_ItemTextTailList.begin(), m_ItemTextTailList.end(), pTextTail))
{
return;
}
m_ItemTextTailList.push_back(pTextTail);
}
bool CPythonTextTail::isIn(CPythonTextTail::TTextTail * pSource, CPythonTextTail::TTextTail * pTarget)
{
float x1Source = pSource->x + pSource->xStart;
float y1Source = pSource->y + pSource->yStart;
float x2Source = pSource->x + pSource->xEnd;
float y2Source = pSource->y + pSource->yEnd;
float x1Target = pTarget->x + pTarget->xStart;
float y1Target = pTarget->y + pTarget->yStart;
float x2Target = pTarget->x + pTarget->xEnd;
float y2Target = pTarget->y + pTarget->yEnd;
if (x1Source <= x2Target && x2Source >= x1Target &&
y1Source <= y2Target && y2Source >= y1Target)
{
return true;
}
return false;
}
void CPythonTextTail::RegisterCharacterTextTail(DWORD dwGuildID, DWORD dwVirtualID, const D3DXCOLOR & c_rColor, float fAddHeight)
{
CInstanceBase * pCharacterInstance = CPythonCharacterManager::Instance().GetInstancePtr(dwVirtualID);
if (!pCharacterInstance)
return;
TTextTail * pTextTail = RegisterTextTail(dwVirtualID,
pCharacterInstance->GetNameString(),
pCharacterInstance->GetGraphicThingInstancePtr(),
pCharacterInstance->GetGraphicThingInstanceRef().GetHeight() + fAddHeight,
c_rColor);
CGraphicTextInstance * pTextInstance = pTextTail->pTextInstance;
pTextInstance->SetOutline(true);
pTextInstance->SetVerticalAlign(CGraphicTextInstance::VERTICAL_ALIGN_BOTTOM);
#ifdef TITLE_SYSTEM
pTextTail->psTitleNameTex#ifdefnce = NULL;
#endif
pTextTail->pMarkInstance=NULL;
pTe#endif->pGuildNameTextInstance=NULL;
pTextTail->pTitleTextInstance=NULL;
pTextTail->pLevelTextInstance=NULL;
#ifdef ENABLE_PLAYTIME_ICON
pTextTail->pPlayT#ifdeftance=NULL;
#endif
#ifdef GAMEMASTER_OUTLINE_COLOR
if (pC#endife#ifdefnce->IsGameMaster())
pTextInstance->SetOutLineColor(0.5f, 0.0f, 0.7f, 1.0f);
#endif
if (0 != dwGuildID)
{
pTex#endif>pMarkInstance = CGraphicMarkInstance::New();
DWORD dwMarkID = CGuildMarkManager::Instance().GetMarkID(dwGuildID);
if (dwMarkID != CGuildMarkManager::INVALID_MARK_ID)
{
std::string markImagePath;
if (CGuildMarkManager::Instance().GetMarkImageFilename(dwMarkID / CGuildMarkImage::MARK_TOTAL_COUNT, markImagePath))
{
pTextTail->pMarkInstance->SetImageFileName(markImagePath.c_str());
pTextTail->pMarkInstance->Load();
pTextTail->pMarkInstance->SetIndex(dwMarkID % CGuildMarkImage::MARK_TOTAL_COUNT);
}
}
std::string strGuildName;
if (!CPythonGuild::Instance().GetGuildName(dwGuildID, &strGuildName))
strGuildName = "Noname";
CGraphicTextInstance *& prGuildNameInstance = pTextTail->pGuildNameTextInstance;
prGuildNameInstance = CGraphicTextInstance::New();
prGuildNameInstance->SetTextPointer(ms_pFont);
prGuildNameInstance->SetOutline(true);
prGuildNameInstance->SetHorizonalAlign(CGraphicTextInstance::HORIZONTAL_ALIGN_CENTER);
prGuildNameInstance->SetVerticalAlign(CGraphicTextInstance::VERTICAL_ALIGN_BOTTOM);
prGuildNameInstance->SetValue(strGuildName.c_str());
prGuildNameInstance->SetColor(c_TextTail_Guild_Name_Color.r, c_TextTail_Guild_Name_Color.g, c_TextTail_Guild_Name_Color.b);
prGuildNameInstance->Update();
}
#ifdef ENABLE_PLAYTIME_ICON
if (pCharacterIns#ifdef>IsPC())
{
char szRutbe[MAX_PATH];
sprintf(szRutbe, pCharacterInstance->GetMyTimeIcon());
pTextTail->pPlayTimeInstance = CGraphicImageInstance::New();
pTextTail->pPlayTimeInstance->SetImagePointer((CGraphicImage*)CResourceManager::Instance().GetResourcePointer(szRutbe));
}
#endif
m_CharacterTextTailMap.insert(TTextTa#endif:value_type(dwVirtualID, pTextTail));
}
void CPythonTextTail::RegisterItemTextTail(DWORD VirtualID, const char * c_szText, CGraphicObjectInstance * pOwner)
{
#ifdef __DEBUG
char szName[256];
spritnf(#ifdef, "%s[%d]", c_szText, VirtualID);
TTextTail * pTextTail = RegisterTextTail(VirtualID, c_szText, pOwner, c_TextTail_Name_Position, c_TextTail_Item_Color);
m_ItemTextTailMap.insert(TTextTailMap::value_type(VirtualID, pTextTail));
#else
TTextTail * pTextTail = RegisterTextTai#elsetualID, c_szText, pOwner, c_TextTail_Name_Position, c_TextTail_Item_Color);
m_ItemTextTailMap.insert(TTextTailMap::value_type(VirtualID, pTextTail));
#endif
}
#ifdef ENABLE_NEW_SHOP_IN_CITIES
void C#endifText#ifdefRegisterShopInstanceTextTail(DWORD dwVirtualID, const char* c_szName, CGraphicObjectInstance* pOwner)
{
TTextTail* pTextTail = RegisterShopTextTail(dwVirtualID, c_szName, pOwner);
m_ShopTextTailMap.insert(TTextTailMap::value_type(dwVirtualID, pTextTail));
}
#endif
void CPythonTextTail::RegisterChatTail(DW#endifrtualID, const char * c_szChat)
{
CInstanceBase * pCharacterInstance = CPythonCharacterManager::Instance().GetInstancePtr(VirtualID);
if (!pCharacterInstance)
return;
TChatTailMap::iterator itor = m_ChatTailMap.find(VirtualID);
if (m_ChatTailMap.end() != itor)
{
TTextTail * pTextTail = itor->second;
pTextTail->pTextInstance->SetValue(c_szChat);
pTextTail->pTextInstance->Update();
pTextTail->Color = c_TextTail_Chat_Color;
pTextTail->pTextInstance->SetColor(c_TextTail_Chat_Color);
// TEXTTAIL_LIVINGTIME_CONTROL
pTextTail->LivingTime = CTimer::Instance().GetCurrentMillisecond() + TextTail_GetLivingTime();
// END_OF_TEXTTAIL_LIVINGTIME_CONTROL
pTextTail->bNameFlag = TRUE;
return;
}
TTextTail * pTextTail = RegisterTextTail(VirtualID,
c_szChat,
pCharacterInstance->GetGraphicThingInstancePtr(),
pCharacterInstance->GetGraphicThingInstanceRef().GetHeight() + 10.0f,
c_TextTail_Chat_Color);
// TEXTTAIL_LIVINGTIME_CONTROL
pTextTail->LivingTime = CTimer::Instance().GetCurrentMillisecond() + TextTail_GetLivingTime();
// END_OF_TEXTTAIL_LIVINGTIME_CONTROL
pTextTail->bNameFlag = TRUE;
pTextTail->pTextInstance->SetOutline(true);
pTextTail->pTextInstance->SetVerticalAlign(CGraphicTextInstance::VERTICAL_ALIGN_BOTTOM);
m_ChatTailMap.insert(TTextTailMap::value_type(VirtualID, pTextTail));
}
void CPythonTextTail::RegisterInfoTail(DWORD VirtualID, const char * c_szChat)
{
CInstanceBase * pCharacterInstance = CPythonCharacterManager::Instance().GetInstancePtr(VirtualID);
if (!pCharacterInstance)
return;
TChatTailMap::iterator itor = m_ChatTailMap.find(VirtualID);
if (m_ChatTailMap.end() != itor)
{
TTextTail * pTextTail = itor->second;
pTextTail->pTextInstance->SetValue(c_szChat);
pTextTail->pTextInstance->Update();
pTextTail->Color = c_TextTail_Info_Color;
pTextTail->pTextInstance->SetColor(c_TextTail_Info_Color);
// TEXTTAIL_LIVINGTIME_CONTROL
pTextTail->LivingTime = CTimer::Instance().GetCurrentMillisecond() + TextTail_GetLivingTime();
// END_OF_TEXTTAIL_LIVINGTIME_CONTROL
pTextTail->bNameFlag = FALSE;
return;
}
TTextTail * pTextTail = RegisterTextTail(VirtualID,
c_szChat,
pCharacterInstance->GetGraphicThingInstancePtr(),
pCharacterInstance->GetGraphicThingInstanceRef().GetHeight() + 10.0f,
c_TextTail_Info_Color);
// TEXTTAIL_LIVINGTIME_CONTROL
pTextTail->LivingTime = CTimer::Instance().GetCurrentMillisecond() + TextTail_GetLivingTime();
// END_OF_TEXTTAIL_LIVINGTIME_CONTROL
pTextTail->bNameFlag = FALSE;
pTextTail->pTextInstance->SetOutline(true);
pTextTail->pTextInstance->SetVerticalAlign(CGraphicTextInstance::VERTICAL_ALIGN_BOTTOM);
m_ChatTailMap.insert(TTextTailMap::value_type(VirtualID, pTextTail));
}
bool CPythonTextTail::GetTextTailPosition(DWORD dwVID, float* px, float* py, float* pz)
{
TTextTailMap::iterator itorCharacter = m_CharacterTextTailMap.find(dwVID);
if (m_CharacterTextTailMap.end() == itorCharacter)
{
return false;
}
TTextTail * pTextTail = itorCharacter->second;
*px=pTextTail->x;
*py=pTextTail->y;
*pz=pTextTail->z;
return true;
}
bool CPythonTextTail::IsChatTextTail(DWORD dwVID)
{
TChatTailMap::iterator itorChat = m_ChatTailMap.find(dwVID);
if (m_ChatTailMap.end() == itorChat)
return false;
return true;
}
void CPythonTextTail::SetCharacterTextTailColor(DWORD VirtualID, const D3DXCOLOR & c_rColor)
{
TTextTailMap::iterator itorCharacter = m_CharacterTextTailMap.find(VirtualID);
if (m_CharacterTextTailMap.end() == itorCharacter)
return;
TTextTail * pTextTail = itorCharacter->second;
pTextTail->pTextInstance->SetColor(c_rColor);
pTextTail->Color = c_rColor;
}
void CPythonTextTail::SetItemTextTailOwner(DWORD dwVID, const char * c_szName)
{
TTextTailMap::iterator itor = m_ItemTextTailMap.find(dwVID);
if (m_ItemTextTailMap.end() == itor)
return;
TTextTail * pTextTail = itor->second;
if (strlen(c_szName) > 0)
{
if (!pTextTail->pOwnerTextInstance)
{
pTextTail->pOwnerTextInstance = CGraphicTextInstance::New();
}
std::string strName = c_szName;
static const string & strOwnership = ApplicationStringTable_GetString(IDS_POSSESSIVE_MORPHENE) == "" ? "'s" : ApplicationStringTable_GetString(IDS_POSSESSIVE_MORPHENE);
strName += strOwnership;
pTextTail->pOwnerTextInstance->SetTextPointer(ms_pFont);
pTextTail->pOwnerTextInstance->SetHorizonalAlign(CGraphicTextInstance::HORIZONTAL_ALIGN_CENTER);
pTextTail->pOwnerTextInstance->SetValue(strName.c_str());
pTextTail->pOwnerTextInstance->SetColor(1.0f, 1.0f, 0.0f);
pTextTail->pOwnerTextInstance->Update();
int xOwnerSize, yOwnerSize;
pTextTail->pOwnerTextInstance->GetTextSize(&xOwnerSize, &yOwnerSize);
pTextTail->yStart = -2.0f;
pTextTail->yEnd += float(yOwnerSize + 4);
pTextTail->xStart = fMIN(pTextTail->xStart, float(-xOwnerSize / 2 - 1));
pTextTail->xEnd = fMAX(pTextTail->xEnd, float(xOwnerSize / 2 + 1));
}
else
{
if (pTextTail->pOwnerTextInstance)
{
CGraphicTextInstance:
elete(pTextTail->pOwnerTextInstance);
pTextTail->pOwnerTextInstance = NULL;
}
#ifdef TITLE_SYSTEM
if (pTextTail->psTitleNam#ifdefnstance)
{
CGraphicTextInstance:
elete(pTextTail->psTitleNameTextInstance);
pTextTail->psTitleNameTextInstance = NULL;
}
#endif
int xSize, ySize;
pTextTai#endifxtInstance->GetTextSize(&xSize, &ySize);
pTextTail->xStart = (float) (-xSize / 2 - 2);
pTextTail->yStart = -2.0f;
pTextTail->xEnd = (float) (xSize / 2 + 2);
pTextTail->yEnd = (float) ySize;
}
}
void CPythonTextTail:
eleteCharacterTextTail(DWORD VirtualID)
{
TTextTailMap::iterator itorCharacter = m_CharacterTextTailMap.find(VirtualID);
TTextTailMap::iterator itorChat = m_ChatTailMap.find(VirtualID);
if (m_CharacterTextTailMap.end() != itorCharacter)
{
DeleteTextTail(itorCharacter->second);
m_CharacterTextTailMap.erase(itorCharacter);
}
else
{
Tracenf("CPythonTextTail:
eleteCharacterTextTail - Find VID[%d] Error", VirtualID);
}
if (m_ChatTailMap.end() != itorChat)
{
DeleteTextTail(itorChat->second);
m_ChatTailMap.erase(itorChat);
}
}
#ifdef ENABLE_NEW_SHOP_IN_CITIES
void CPythonText#ifdefDeleteShopTextTail(DWORD VirtualID)
{
TTextTailMap::iterator itor = m_ShopTextTailMap.find(VirtualID);
if (m_ShopTextTailMap.end() == itor)
{
Tracef(" CPythonTextTail:
eleteShopTextTail - None Item Text Tail\n");
return;
}
DeleteTextTail(itor->second);
m_ShopTextTailMap.erase(itor);
}
#endif
void CPythonTextTail:
eleteItemTextTail(#endifVirtualID)
{
TTextTailMap::iterator itor = m_ItemTextTailMap.find(VirtualID);
if (m_ItemTextTailMap.end() == itor)
{
Tracef(" CPythonTextTail:
eleteItemTextTail - None Item Text Tail\n");
return;
}
DeleteTextTail(itor->second);
m_ItemTextTailMap.erase(itor);
}
CPythonTextTail::TTextTail * CPythonTextTail::RegisterTextTail(DWORD dwVirtualID, const char * c_szText, CGraphicObjectInstance * pOwner, float fHeight, const D3DXCOLOR & c_rColor)
{
TTextTail * pTextTail = m_TextTailPool.Alloc();
#ifdef __ENABLE_NEW_OFFLINESHOP__
# ifdef ENAB#ifdef_SHOP_IN_CITIES
pTextTail->bIsShop = false;
pTextTail->bRender = false;
# endif
#endif
pTextTail->dwVirtualID = dwVirtualID;
#endifextTail->pOwner = pOwner;
pTextTail->pT#endifextTail CGraphicTextInstance::New();
pTextTail->pOwnerTextInstance = NULL;
pTextTail->fHeight = fHeight;
pTextTail->pTextInstance->SetTextPointer(ms_pFont);
pTextTail->pTextInstance->SetHorizonalAlign(CGraphicTextInstance::HORIZONTAL_ALIGN_CENTER);
pTextTail->pTextInstance->SetValue(c_szText);
pTextTail->pTextInstance->SetColor(c_rColor.r, c_rColor.g, c_rColor.b);
pTextTail->pTextInstance->Update();
int xSize, ySize;
pTextTail->pTextInstance->GetTextSize(&xSize, &ySize);
pTextTail->xStart = (float) (-xSize / 2 - 2);
pTextTail->yStart = -2.0f;
pTextTail->xEnd = (float) (xSize / 2 + 2);
pTextTail->yEnd = (float) ySize;
pTextTail->Color = c_rColor;
pTextTail->fDistanceFromPlayer = 0.0f;
pTextTail->x = -100.0f;
pTextTail->y = -100.0f;
pTextTail->z = 0.0f;
#ifdef TITLE_SYSTEM
pTextTail->psTitleNameTex#ifdefnce = NULL;
#endif
pTextTail->pMarkInstance = NULL;
p#endifil->pGuildNameTextInstance = NULL;
pTextTail->pTitleTextInstance = NULL;
pTextTail->pLevelTextInstance = NULL;
#ifdef ENABLE_PLAYTIME_ICON
pTextTail->pPlayT#ifdeftance=NULL;
#endif
return pTextTail;
}
#ifdef ENABLE_NEW#endifIN_CITIES
CPythonTextTail:#ifdefTail* CPythonTextTail::RegisterShopTextTail(DWORD dwVirtualID, const char* c_szText, CGraphicObjectInstance* pOwner)
{
const D3DXCOLOR& c_rColor = D3DXCOLOR(1.0, 1.0, 0.5, 1.0);
TTextTail* pTextTail = m_TextTailPool.Alloc();
pTextTail->bIsShop = true;
pTextTail->dwVirtualID = dwVirtualID;
pTextTail->pOwner = pOwner;
pTextTail->pTextInstance = CGraphicTextInstance::New();
pTextTail->pOwnerTextInstance = NULL;
pTextTail->fHeight = 180.f;
pTextTail->pTextInstance->SetTextPointer(ms_pFont);
pTextTail->pTextInstance->SetHorizonalAlign(CGraphicTextInstance::HORIZONTAL_ALIGN_CENTER);
pTextTail->pTextInstance->SetValue(c_szText);
pTextTail->pTextInstance->SetColor(c_rColor.r, c_rColor.g, c_rColor.b);
pTextTail->pTextInstance->Update();
int xSize, ySize;
pTextTail->pTextInstance->GetTextSize(&xSize, &ySize);
pTextTail->xStart = (float)(-xSize / 2 - 2);
pTextTail->yStart = -2.0f;
pTextTail->xEnd = (float)(xSize / 2 + 2);
pTextTail->yEnd = (float)ySize;
pTextTail->Color = c_rColor;
pTextTail->fDistanceFromPlayer = 0.0f;
pTextTail->x = -100.0f;
pTextTail->y = -100.0f;
pTextTail->z = 0.0f;
#ifdef TITLE_SYSTEM
pTextTail->psTitleNameTex#ifdefnce = NULL;
#endif
pTextTail->pMarkInstance = NULL;
p#endifil->pGuildNameTextInstance = NULL;
pTextTail->pTitleTextInstance = NULL;
pTextTail->pLevelTextInstance = NULL;
//#if defined(WJ_SHOW_MOB_INFO)
// pTextTail->pAIFlagTextInstance = NULL;
//#endif
#ifdef ENABLE_PLAYTIME_ICON
pTextTail->pPlayT#ifdeftance=NULL;
#endif
return pTextTail;
}
bool CPythonText#endifGetPickedNewShop(DWORD* pdwVID)
{
*pdwVID = 0;
/*if(!CPythonSystem::instance().IsAlwaysShowName())
return false;*/
long ixMouse = 0, iyMouse = 0;
POINT p;
CPythonApplication::Instance().GetMousePosition(&p);
ixMouse = p.x;
iyMouse = p.y;
for (auto itor = m_ShopTextTailMap.begin(); itor != m_ShopTextTailMap.end(); ++itor)
{
TTextTail* pTextTail = itor->second;
if (ixMouse >= pTextTail->x + (pTextTail->xStart - 10) && ixMouse <= pTextTail->x + (pTextTail->xEnd + 10) &&
iyMouse >= pTextTail->y + (pTextTail->yStart - 10) && iyMouse <= pTextTail->y + (pTextTail->yEnd + 10))
{
*pdwVID = itor->first;
return true;
}
}
return false;
}
#endif
void CPythonTextTail:
eleteTextTail(TTe#endif * pTextTail)
{
if (pTextTail->pTextInstance)
{
CGraphicTextInstance:
elete(pTextTail->pTextInstance);
pTextTail->pTextInstance = NULL;
}
if (pTextTail->pOwnerTextInstance)
{
CGraphicTextInstance:
elete(pTextTail->pOwnerTextInstance);
pTextTail->pOwnerTextInstance = NULL;
}
if (pTextTail->pMarkInstance)
{
CGraphicMarkInstance:
elete(pTextTail->pMarkInstance);
pTextTail->pMarkInstance = NULL;
}
if (pTextTail->pGuildNameTextInstance)
{
CGraphicTextInstance:
elete(pTextTail->pGuildNameTextInstance);
pTextTail->pGuildNameTextInstance = NULL;
}
if (pTextTail->pTitleTextInstance)
{
CGraphicTextInstance:
elete(pTextTail->pTitleTextInstance);
pTextTail->pTitleTextInstance = NULL;
}
if (pTextTail->pLevelTextInstance)
{
CGraphicTextInstance:
elete(pTextTail->pLevelTextInstance);
pTextTail->pLevelTextInstance = NULL;
}
#ifdef ENABLE_PLAYTIME_ICON
if (pTextTail->pP#ifdefeInstance)
{
CGraphicImageInstance:
elete(pTextTail->pPlayTimeInstance);
pTextTail->pPlayTimeInstance = NULL;
}
#endif
m_TextTailPool.Free(pTextTail);
}
in#endifhonTextTail:
ick(int ixMouse, int iyMouse)
{
for (TTextTailMap::iterator itor = m_ItemTextTailMap.begin(); itor != m_ItemTextTailMap.end(); ++itor)
{
TTextTail * pTextTail = itor->second;
if (ixMouse >= pTextTail->x + pTextTail->xStart && ixMouse <= pTextTail->x + pTextTail->xEnd &&
iyMouse >= pTextTail->y + pTextTail->yStart && iyMouse <= pTextTail->y + pTextTail->yEnd)
{
SelectItemName(itor->first);
return (itor->first);
}
}
return -1;
}
void CPythonTextTail::SelectItemName(DWORD dwVirtualID)
{
TTextTailMap::iterator itor = m_ItemTextTailMap.find(dwVirtualID);
if (m_ItemTextTailMap.end() == itor)
return;
TTextTail * pTextTail = itor->second;
pTextTail->pTextInstance->SetColor(0.1f, 0.9f, 0.1f);
}
#ifdef TITLE_SYSTEM
void CPythonTextTail::AttachN#ifdefe(DWORD dwVID, const char* c_szName, const D3DXCOLOR& c_rColor)
{
if (!bPKTitleEnable)
return;
TTextTailMap::iterator itor = m_CharacterTextTailMap.find(dwVID);
if (m_CharacterTextTailMap.end() == itor)
return;
TTextTail* pTextTail = itor->second;
CGraphicTextInstance*& prTitleNameInstance = pTextTail->psTitleNameTextInstance;
if (!prTitleNameInstance)
{
prTitleNameInstance = CGraphicTextInstance::New();
prTitleNameInstance->SetTextPointer(ms_pFont);
prTitleNameInstance->SetOutline(true);
prTitleNameInstance->SetHorizonalAlign(CGraphicTextInstance::HORIZONTAL_ALIGN_CENTER);
prTitleNameInstance->SetVerticalAlign(CGraphicTextInstance::VERTICAL_ALIGN_BOTTOM);
}
prTitleNameInstance->SetValue(c_szName);
prTitleNameInstance->SetColor(c_rColor.r, c_rColor.g, c_rColor.b);
prTitleNameInstance->Update();
}
void CPythonTextTail:
etachNewTitle(DWORD dwVID)
{
if (!bPKTitleEnable)
return;
TTextTailMap::iterator itor = m_CharacterTextTailMap.find(dwVID);
if (m_CharacterTextTailMap.end() == itor)
return;
TTextTail* pTextTail = itor->second;
if (pTextTail->psTitleNameTextInstance)
{
CGraphicTextInstance:
elete(pTextTail->psTitleNameTextInstance);
pTextTail->psTitleNameTextInstance = NULL;
}
}
#endif
void CPythonTextTail::AttachTitle(DWORD d#endifconst char * c_szName, const D3DXCOLOR & c_rColor)
{
if (!bPKTitleEnable)
return;
TTextTailMap::iterator itor = m_CharacterTextTailMap.find(dwVID);
if (m_CharacterTextTailMap.end() == itor)
return;
TTextTail * pTextTail = itor->second;
CGraphicTextInstance *& prTitle = pTextTail->pTitleTextInstance;
if (!prTitle)
{
prTitle = CGraphicTextInstance::New();
prTitle->SetTextPointer(ms_pFont);
prTitle->SetOutline(true);
if (LocaleService_IsEUROPE())
prTitle->SetHorizonalAlign(CGraphicTextInstance::HORIZONTAL_ALIGN_RIGHT);
else
prTitle->SetHorizonalAlign(CGraphicTextInstance::HORIZONTAL_ALIGN_CENTER);
prTitle->SetVerticalAlign(CGraphicTextInstance::VERTICAL_ALIGN_BOTTOM);
}
prTitle->SetValue(c_szName);
prTitle->SetColor(c_rColor.r, c_rColor.g, c_rColor.b);
prTitle->Update();
}
void CPythonTextTail:
etachTitle(DWORD dwVID)
{
if (!bPKTitleEnable)
return;
TTextTailMap::iterator itor = m_CharacterTextTailMap.find(dwVID);
if (m_CharacterTextTailMap.end() == itor)
return;
TTextTail * pTextTail = itor->second;
if (pTextTail->pTitleTextInstance)
{
CGraphicTextInstance:
elete(pTextTail->pTitleTextInstance);
pTextTail->pTitleTextInstance = NULL;
}
}
void CPythonTextTail::EnablePKTitle(BOOL bFlag)
{
bPKTitleEnable = bFlag;
}
void CPythonTextTail::AttachLevel(DWORD dwVID, const char * c_szText, const D3DXCOLOR & c_rColor)
{
if (!bPKTitleEnable)
return;
TTextTailMap::iterator itor = m_CharacterTextTailMap.find(dwVID);
if (m_CharacterTextTailMap.end() == itor)
return;
TTextTail * pTextTail = itor->second;
CGraphicTextInstance *& prLevel = pTextTail->pLevelTextInstance;
if (!prLevel)
{
prLevel = CGraphicTextInstance::New();
prLevel->SetTextPointer(ms_pFont);
prLevel->SetOutline(true);
prLevel->SetHorizonalAlign(CGraphicTextInstance::HORIZONTAL_ALIGN_RIGHT);
prLevel->SetVerticalAlign(CGraphicTextInstance::VERTICAL_ALIGN_BOTTOM);
}
prLevel->SetValue(c_szText);
prLevel->SetColor(c_rColor.r, c_rColor.g, c_rColor.b);
prLevel->Update();
}
void CPythonTextTail:
etachLevel(DWORD dwVID)
{
if (!bPKTitleEnable)
return;
TTextTailMap::iterator itor = m_CharacterTextTailMap.find(dwVID);
if (m_CharacterTextTailMap.end() == itor)
return;
TTextTail * pTextTail = itor->second;
if (pTextTail->pLevelTextInstance)
{
CGraphicTextInstance:
elete(pTextTail->pLevelTextInstance);
pTextTail->pLevelTextInstance = NULL;
}
}
void CPythonTextTail::Initialize()
{
// DEFAULT_FONT
//ms_pFont = (CGraphicText *)CResourceManager::Instance().GetTypeResourcePointer(g_strDefaultFontName.c_str());
CGraphicText* pkDefaultFont = static_cast<CGraphicText*>(DefaultFont_GetResource());
if (!pkDefaultFont)
{
TraceError("CPythonTextTail::Initialize - CANNOT_FIND_DEFAULT_FONT");
return;
}
ms_pFont = pkDefaultFont;
// END_OF_DEFAULT_FONT
}
void CPythonTextTail:
estroy()
{
m_TextTailPool.Clear();
}
void CPythonTextTail::Clear()
{
m_CharacterTextTailMap.clear();
m_CharacterTextTailList.clear();
m_ItemTextTailMap.clear();
m_ItemTextTailList.clear();
#ifdef ENABLE_NEW_SHOP_IN_CITIES
m_ShopTextTa#ifdefclear();
#endif
m_ChatTailMap.clear();
m_TextTail#endiflear();
}
CPythonTextTail::CPythonTextTail()
{
Clear();
}
CPythonTextTail::~CPythonTextTail()
{
Destroy();
}
[/CODE]
İşlemi yapmadan önce yedek almayı unutmayın
[CODE lang="cpp" title="PythonTextTail.cpp"]
//
//
#include "stdafx.h"
#include "InstanceBase.h"
#in#includeesource.h"
##include"PythonTextTail.h"#includee "PythonChara##includeer.h"
#include "Pyt#include.h"
#include "Locale.h"
#inc#includerkManager.h"
#ifd#includeE_NEW_SHOP_I#include
#include "Python#ifdefation.h"
#endif
const D3DX#includeTextTail_Player_Color =#endifOLOR(1.0f, 1.0f, 1.0f, 1.0f);
const D3DXCOLOR c_TextTail_Monster_Color = D3DXCOLOR(1.0f, 0.0f, 0.0f, 1.0f);
const D3DXCOLOR c_TextTail_Item_Color = D3DXCOLOR(1.0f, 1.0f, 1.0f, 1.0f);
const D3DXCOLOR c_TextTail_Chat_Color = D3DXCOLOR(1.0f, 1.0f, 1.0f, 1.0f);
const D3DXCOLOR c_TextTail_Info_Color = D3DXCOLOR(1.0f, 0.785f, 0.785f, 1.0f);
const D3DXCOLOR c_TextTail_Guild_Name_Color = 0xFFEFD3FF;
const float c_TextTail_Name_Position = -10.0f;
const float c_fxMarkPosition = 1.5f;
#ifdef TITLE_SYSTEM
const float c_fyGuildNamePosi#ifdef 25.0f;
const float c_fyMarkPosition = 25.0f + 11.0f;
const float c_fysTitlePosition = 16.0f;
const float c_fyGuildNamePositionOld = 15.0f;
const float c_fyMarkPositionOld = 15.0f + 11.0f;
#else
const float c_fyGuildNamePosition = 15.0f;
#else float c_fyMarkPosition = 15.0f + 11.0f;
#en#elseOOL bPKTitleEnable = TRUE;
// TEXTTAIL_L#endifIME_CONTROL
long gs_TextTail_LivingTime = 5000;
long TextTail_GetLivingTime()
{
assert(gs_TextTail_LivingTime>1000);
return gs_TextTail_LivingTime;
}
void TextTail_SetLivingTime(long livingTime)
{
gs_TextTail_LivingTime = livingTime;
}
// END_OF_TEXTTAIL_LIVINGTIME_CONTROL
CGraphicText * ms_pFont = NULL;
void CPythonTextTail::GetInfo(std::string* pstInfo)
{
char szInfo[256];
sprintf(szInfo, "TextTail: ChatTail %d, ChrTail (Map %d, List %d), ItemTail (Map %d, List %d), Pool %d",
m_ChatTailMap.size(),
m_CharacterTextTailMap.size(), m_CharacterTextTailList.size(),
m_ItemTextTailMap.size(), m_ItemTextTailList.size(),
m_TextTailPool.GetCapacity());
pstInfo->append(szInfo);
}
void CPythonTextTail::UpdateAllTextTail()
{
CInstanceBase * pInstance = CPythonCharacterManager::Instance().GetMainInstancePtr();
if (pInstance)
{
TPixelPosition pixelPos;
pInstance->NEW_GetPixelPosition(&pixelPos);
TTextTailMap::iterator itorMap;
for (itorMap = m_CharacterTextTailMap.begin(); itorMap != m_CharacterTextTailMap.end(); ++itorMap)
{
UpdateDistance(pixelPos, itorMap->second);
}
for (itorMap = m_ItemTextTailMap.begin(); itorMap != m_ItemTextTailMap.end(); ++itorMap)
{
UpdateDistance(pixelPos, itorMap->second);
}
#ifdef ENABLE_NEW_SHOP_IN_CITIES
for (ito#ifdef m_ShopTextTailMap.begin(); itorMap != m_ShopTextTailMap.end(); ++itorMap)
UpdateDistance(pixelPos, itorMap->second);
#endif
for (TChatTailMap::iterator itorC#endifChatTailMap.begin(); itorChat!=m_ChatTailMap.end(); ++itorChat)
{
UpdateDistance(pixelPos, itorChat->second);
if (itorChat->second->bNameFlag)
{
DWORD dwVID = itorChat->first;
ShowCharacterTextTail(dwVID);
}
}
}
}
void CPythonTextTail::UpdateShowingTextTail()
{
TTextTailList::iterator itor;
for (itor = m_ItemTextTailList.begin(); itor != m_ItemTextTailList.end(); ++itor)
{
UpdateTextTail(*itor);
}
for (TChatTailMap::iterator itorChat=m_ChatTailMap.begin(); itorChat!=m_ChatTailMap.end(); ++itorChat)
{
UpdateTextTail(itorChat->second);
}
#ifdef ENABLE_NEW_SHOP_IN_CITIES
for (auto it#ifdef= m_ShopTextTailMap.begin(); itorMap != m_ShopTextTailMap.end(); ++itorMap)
if (itorMap->second->bRender)
UpdateTextTail(itorMap->second);
#endif
for (itor = m_CharacterTextTailList.be#endif itor != m_CharacterTextTailList.end(); ++itor)
{
TTextTail * pTextTail = *itor;
UpdateTextTail(pTextTail);
TChatTailMap::iterator itor = m_ChatTailMap.find(pTextTail->dwVirtualID);
if (m_ChatTailMap.end() != itor)
{
TTextTail * pChatTail = itor->second;
if (pChatTail->bNameFlag)
{
pTextTail->y = pChatTail->y - 17.0f;
}
}
}
}
void CPythonTextTail::UpdateTextTail(TTextTail * pTextTail)
{
if (!pTextTail->pOwner)
return;
/////
CPythonGraphic & rpyGraphic = CPythonGraphic::Instance();
rpyGraphic.Identity();
const D3DXVECTOR3 & c_rv3Position = pTextTail->pOwner->GetPosition();
rpyGraphic.ProjectPosition(c_rv3Position.x,
c_rv3Position.y,
c_rv3Position.z + pTextTail->fHeight,
&pTextTail->x,
&pTextTail->y,
&pTextTail->z);
pTextTail->x = floorf(pTextTail->x);
pTextTail->y = floorf(pTextTail->y);
if (pTextTail->fDistanceFromPlayer < 1300.0f)
{
pTextTail->z = 0.0f;
}
else
{
pTextTail->z = pTextTail->z * CPythonGraphic::Instance().GetOrthoDepth() * -1.0f;
pTextTail->z += 10.0f;
}
}
void CPythonTextTail::ArrangeTextTail()
{
TTextTailList::iterator itor;
TTextTailList::iterator itorCompare;
DWORD dwTime = CTimer::Instance().GetCurrentMillisecond();
for (itor = m_ItemTextTailList.begin(); itor != m_ItemTextTailList.end(); ++itor)
{
TTextTail * pInsertTextTail = *itor;
int yTemp = 5;
int LimitCount = 0;
for (itorCompare = m_ItemTextTailList.begin(); itorCompare != m_ItemTextTailList.end()

{
TTextTail * pCompareTextTail = *itorCompare;
if (*itorCompare == *itor)
{
++itorCompare;
continue;
}
if (LimitCount >= 20)
break;
if (isIn(pInsertTextTail, pCompareTextTail))
{
pInsertTextTail->y = (pCompareTextTail->y + pCompareTextTail->yEnd + yTemp);
itorCompare = m_ItemTextTailList.begin();
++LimitCount;
continue;
}
++itorCompare;
}
if (pInsertTextTail->pOwnerTextInstance)
{
pInsertTextTail->pOwnerTextInstance->SetPosition(pInsertTextTail->x, pInsertTextTail->y, pInsertTextTail->z);
pInsertTextTail->pOwnerTextInstance->Update();
pInsertTextTail->pTextInstance->SetColor(pInsertTextTail->Color.r, pInsertTextTail->Color.g, pInsertTextTail->Color.b);
pInsertTextTail->pTextInstance->SetPosition(pInsertTextTail->x, pInsertTextTail->y + 15.0f, pInsertTextTail->z);
pInsertTextTail->pTextInstance->Update();
}
else
{
pInsertTextTail->pTextInstance->SetColor(pInsertTextTail->Color.r, pInsertTextTail->Color.g, pInsertTextTail->Color.b);
pInsertTextTail->pTextInstance->SetPosition(pInsertTextTail->x, pInsertTextTail->y, pInsertTextTail->z);
pInsertTextTail->pTextInstance->Update();
}
}
#ifdef ENABLE_NEW_SHOP_IN_CITIES
for (auto it#ifdef= m_ShopTextTailMap.begin(); itorMap != m_ShopTextTailMap.end(); ++itorMap)
{
if (!itorMap->second->bRender)
continue;
TTextTail* pInsertTextTail = itorMap->second;
if (pInsertTextTail->pOwnerTextInstance)
{
pInsertTextTail->pOwnerTextInstance->SetPosition(pInsertTextTail->x, pInsertTextTail->y, pInsertTextTail->z);
pInsertTextTail->pOwnerTextInstance->Update();
pInsertTextTail->pTextInstance->SetColor(pInsertTextTail->Color.r, pInsertTextTail->Color.g, pInsertTextTail->Color.b);
pInsertTextTail->pTextInstance->SetPosition(pInsertTextTail->x, pInsertTextTail->y + 15.0f, pInsertTextTail->z);
pInsertTextTail->pTextInstance->Update();
}
else
{
pInsertTextTail->pTextInstance->SetColor(pInsertTextTail->Color.r, pInsertTextTail->Color.g, pInsertTextTail->Color.b);
pInsertTextTail->pTextInstance->SetPosition(pInsertTextTail->x, pInsertTextTail->y, pInsertTextTail->z);
pInsertTextTail->pTextInstance->Update();
}
}
#endif
for (itor = m_CharacterTextTailList.b#endif; itor != m_CharacterTextTailList.end(); ++itor)
{
TTextTail * pTextTail = *itor;
float fxAdd = 0.0f;
#ifdef TITLE_SYSTEM
CGraphicTextInstance*#ifdefleNameInstance = pTextTail->psTitleNameTextInstance;
if (psTitleNameInstance)
{
int iWidth, iHeight;
psTitleNameInstance->GetTextSize(&iWidth, &iHeight);
psTitleNameInstance->SetPosition(pTextTail->x, pTextTail->y - c_fysTitlePosition, pTextTail->z);
psTitleNameInstance->Update();
}
#endif
CGraphicMarkInstance * pMarkInsta#endifpTextTail->pMarkInstance;
CGraphicTextInstance * pGuildNameInstance = pTextTail->pGuildNameTextInstance;
#ifdef ENABLE_PLAYTIME_ICON
CGraphicImage#ifdefce * pPlayTime = pTextTail->pPlayTimeInstance, pGuildNameTextInstance;
#endif
if (pMarkInstance && pGuildNameIns#endif
{
int iWidth, iHeight;
int iImageHalfSize = pMarkInstance->GetWidth()/2 + c_fxMarkPosition;
pGuildNameInstance->GetTextSize(&iWidth, &iHeight);
#ifdef TITLE_SYSTEM
if (!psTitleNameI#ifdefe)
{
pMarkInstance->SetPosition(pTextTail->x - iWidth / 2 - iImageHalfSize, pTextTail->y - c_fyMarkPositionOld);
pGuildNameInstance->SetPosition(pTextTail->x + iImageHalfSize, pTextTail->y - c_fyGuildNamePositionOld, pTextTail->z);
}
else
{
pMarkInstance->SetPosition(pTextTail->x - iWidth / 2 - iImageHalfSize, pTextTail->y - c_fyMarkPosition);
pGuildNameInstance->SetPosition(pTextTail->x + iImageHalfSize, pTextTail->y - c_fyGuildNamePosition, pTextTail->z);
}
#else
pMarkInstance->SetPosition(pTex#else->x - iWidth / 2 - iImageHalfSize, pTextTail->y - c_fyMarkPosition);
pGuildNameInstance->SetPosition(pTextTail->x + iImageHalfSize, pTextTail->y - c_fyGuildNamePosition, pTextTail->z);
#endif
pGuildNameInstance->Update();
#endif }
int iNameWidth, iNameHeight;
#endif pTextTail->pTextInstance->GetTextSize(&iNameWidth, &iNameHeight);
CGraphicTextInstance * pTitle = pTextTail->pTitleTextInstance;
if (pTitle)
{
int iTitleWidth, iTitleHeight;
pTitle->GetTextSize(&iTitleWidth, &iTitleHeight);
fxAdd = 8.0f;
if (LocaleService_IsEUROPE())
{
if( GetDefaultCodePage() == CP_ARABIC )
{
pTitle->SetPosition(pTextTail->x - (iNameWidth / 2) - iTitleWidth - 4.0f, pTextTail->y, pTextTail->z);
}
else
{
pTitle->SetPosition(pTextTail->x - (iNameWidth / 2), pTextTail->y, pTextTail->z);
}
}
else
{
pTitle->SetPosition(pTextTail->x - (iNameWidth / 2) - fxAdd, pTextTail->y, pTextTail->z);
}
pTitle->Update();
CGraphicTextInstance * pLevel = pTextTail->pLevelTextInstance;
if (pLevel)
{
int iLevelWidth, iLevelHeight;
pLevel->GetTextSize(&iLevelWidth, &iLevelHeight);
if (LocaleService_IsEUROPE())
{
if( GetDefaultCodePage() == CP_ARABIC )
{
pLevel->SetPosition(pTextTail->x - (iNameWidth / 2) - iLevelWidth - iTitleWidth - 8.0f, pTextTail->y, pTextTail->z);
}
else
{
pLevel->SetPosition(pTextTail->x - (iNameWidth / 2) - iTitleWidth, pTextTail->y, pTextTail->z);
}
}
else
{
pLevel->SetPosition(pTextTail->x - (iNameWidth / 2) - fxAdd - iTitleWidth, pTextTail->y, pTextTail->z);
}
pLevel->Update();
}
}
else
{
fxAdd = 4.0f;
CGraphicTextInstance * pLevel = pTextTail->pLevelTextInstance;
if (pLevel)
{
int iLevelWidth, iLevelHeight;
pLevel->GetTextSize(&iLevelWidth, &iLevelHeight);
if (LocaleService_IsEUROPE())
{
if( GetDefaultCodePage() == CP_ARABIC )
{
pLevel->SetPosition(pTextTail->x - (iNameWidth / 2) - iLevelWidth - 4.0f, pTextTail->y, pTextTail->z);
}
else
{
pLevel->SetPosition(pTextTail->x - (iNameWidth / 2), pTextTail->y, pTextTail->z);
}
}
else
{
pLevel->SetPosition(pTextTail->x - (iNameWidth / 2) - fxAdd, pTextTail->y, pTextTail->z);
}
pLevel->Update();
}
}
#ifdef ENABLE_PLAYTIME_ICON
if (pPlayTime#ifdef {
CGraphicTextInstance* pLevel = pTextTail->pLevelTextInstance;
if (pLevel)
{
int iLevelWidth, iLevelHeight, iTitleWidth, iTitleHeight;
pLevel->GetTextSize(&iLevelWidth, &iLevelHeight);
if (pTitle)
{
pTitle->GetTextSize(&iTitleWidth, &iTitleHeight);
pPlayTime->SetPosition(pTextTail->x - (iNameWidth / 2) - 4.0f - iTitleWidth - iLevelWidth - 17.0f - pPlayTime->GetWidth() / 2 + 8.5f, pTextTail->y - 14);
}
if (!pTitle)
pPlayTime->SetPosition(pTextTail->x - (iNameWidth / 2) - 4.0f - iLevelWidth - 17.0f - pPlayTime->GetWidth() / 2 + 8.5f, pTextTail->y - 14);
}
}
#endif
pTextTail->pTextInstance->SetColo#endiftTail->Color.r, pTextTail->Color.g, pTextTail->Color.b);
pTextTail->pTextInstance->SetPosition(pTextTail->x + fxAdd, pTextTail->y, pTextTail->z);
pTextTail->pTextInstance->Update();
}
for (TChatTailMap::iterator itorChat=m_ChatTailMap.begin(); itorChat!=m_ChatTailMap.end()

{
TTextTail * pTextTail = itorChat->second;
if (pTextTail->LivingTime < dwTime)
{
DeleteTextTail(pTextTail);
itorChat = m_ChatTailMap.erase(itorChat);
continue;
}
else
++itorChat;
pTextTail->pTextInstance->SetColor(pTextTail->Color);
pTextTail->pTextInstance->SetPosition(pTextTail->x, pTextTail->y, pTextTail->z);
pTextTail->pTextInstance->Update();
}
}
void CPythonTextTail::Render()
{
TTextTailList::iterator itor;
for (itor = m_CharacterTextTailList.begin(); itor != m_CharacterTextTailList.end(); ++itor)
{
TTextTail * pTextTail = *itor;
pTextTail->pTextInstance->Render();
if (pTextTail->pMarkInstance && pTextTail->pGuildNameTextInstance)
{
pTextTail->pMarkInstance->Render();
pTextTail->pGuildNameTextInstance->Render();
}
if (pTextTail->pTitleTextInstance)
{
pTextTail->pTitleTextInstance->Render();
}
if (pTextTail->pLevelTextInstance)
{
pTextTail->pLevelTextInstance->Render();
}
#ifdef TITLE_SYSTEM
if (pTextTail->psTitl#ifdefextInstance)
{
pTextTail->psTitleNameTextInstance->Render();
}
#endif
#ifdef ENABLE_PLAYTIME_ICON
if (pT#endifl#ifdefyTimeInstance)
{
pTextTail->pPlayTimeInstance->Render();
}
#endif
}
for (itor = m_ItemTextTailList.#endif); itor != m_ItemTextTailList.end(); ++itor)
{
TTextTail * pTextTail = *itor;
RenderTextTailBox(pTextTail);
pTextTail->pTextInstance->Render();
if (pTextTail->pOwnerTextInstance)
pTextTail->pOwnerTextInstance->Render();
}
#ifdef ENABLE_NEW_SHOP_IN_CITIES
for (auto it#ifdef= m_ShopTextTailMap.begin(); itorMap != m_ShopTextTailMap.end(); ++itorMap)
{
if (!itorMap->second->bRender)
continue;
TTextTail* pTextTail = itorMap->second;
RenderTextTailBox(pTextTail);
pTextTail->pTextInstance->Render();
if (pTextTail->pOwnerTextInstance)
pTextTail->pOwnerTextInstance->Render();
}
#endif
for (TChatTailMap::iterator itorChat #endifatTailMap.begin(); itorChat!=m_ChatTailMap.#endifatTailMap.begin( {
TTextTail * pTextTail = itorChat->second;
if (pTextTail->pOwner->isShow())
RenderTextTailName(pTextTail);
}
}
void CPythonTextTail::RenderTextTailBox(TTextTail * pTextTail)
{
#ifdef __ENABLE_NEW_OFFLINESHOP__
# ifdef ENAB#ifdef_SHOP_IN_CITIES
if (pTextTail->bIsShop)
{
CPythonGraphic::Instance().SetDiffuseColor(0.0f, 0.0f, 0.0f, 1.0f);
CPythonGraphic::Instance().RenderBox2d(pTextTail->x + pTextTail->xStart - 10.f,
pTextTail->y + pTextTail->yStart - 10.f,
pTextTail->x + pTextTail->xEnd + 10.f,
pTextTail->y + pTextTail->yEnd + 10.f,
pTextTail->z);
CPythonGraphic::Instance().SetDiffuseColor(0.0f, 0.0f, 0.0f, 0.3f);
CPythonGraphic::Instance().RenderBar2d(pTextTail->x + pTextTail->xStart - 10.f,
pTextTail->y + pTextTail->yStart - 10.f,
pTextTail->x + pTextTail->xEnd + 10.f,
pTextTail->y + pTextTail->yEnd + 10.f,
pTextTail->z);
return;
}
# endif
#endif
CPythonGraphic::Instance().SetDiffuseC#endif.0f, 0.0f, 0.0f, 1.0f);
CPythonGraphic::Instance().RenderBox2d(pTextTail->x + pTextTail->xStart,
pTextTail->y + pTextTail->yStart,
pTextTail->x + pTextTail->xEnd,
pTextTail->y + pTextTail->yEnd,
pTextTail->z);
CPythonGraphic::Instance().SetDiffuseColor(0.0f, 0.0f, 0.0f, 0.3f);
CPythonGraphic::Instance().RenderBar2d(pTextTail->x + pTextTail->xStart,
pTextTail->y + pTextTail->yStart,
pTextTail->x + pTextTail->xEnd,
pTextTail->y + pTextTail->yEnd,
pTextTail->z);
}
void CPythonTextTail::RenderTextTailName(TTextTail * pTextTail)
{
pTextTail->pTextInstance->Render();
}
void CPythonTextTail::HideAllTextTail()
{
m_CharacterTextTailList.clear();
m_ItemTextTailList.clear();
#ifdef ENABLE_NEW_SHOP_IN_CITIES
for (aut#ifdefr : m_ShopTextTailMap)
iter.second->bRender = false;
#endif
}
void CPythonTextTail::UpdateDistance(co#endifixelPosition & c_rCenterPosition, TTextTail * pTextTail)
{
const D3DXVECTOR3 & c_rv3Position = pTextTail->pOwner->GetPosition();
D3DXVECTOR2 v2Distance(c_rv3Position.x - c_rCenterPosition.x, -c_rv3Position.y - c_rCenterPosition.y);
pTextTail->fDistanceFromPlayer = D3DXVec2Length(&v2Distance);
}
void CPythonTextTail::ShowAllTextTail()
{
TTextTailMap::iterator itor;
for (itor = m_CharacterTextTailMap.begin(); itor != m_CharacterTextTailMap.end(); ++itor)
{
TTextTail * pTextTail = itor->second;
if (pTextTail->fDistanceFromPlayer < 3500.0f)
ShowCharacterTextTail(itor->first);
}
for (itor = m_ItemTextTailMap.begin(); itor != m_ItemTextTailMap.end(); ++itor)
{
TTextTail * pTextTail = itor->second;
if (pTextTail->fDistanceFromPlayer < 3500.0f)
ShowItemTextTail(itor->first);
}
#ifdef ENABLE_NEW_SHOP_IN_CITIES
//OFFSHOP_DE#ifdefhopTextTailMap size %u ",m_ShopTextTailMap.size());
for (itor = m_ShopTextTailMap.begin(); itor != m_ShopTextTailMap.end(); ++itor)
{
TTextTail* pTextTail = itor->second;
pTextTail->bRender = pTextTail->fDistanceFromPlayer < 3500.f;
}
#endif
}
void CPythonTextTail::ShowCharacterText#endifWORD VirtualID)
{
TTextTailMap::iterator itor = m_CharacterTextTailMap.find(VirtualID);
if (m_CharacterTextTailMap.end() == itor)
return;
TTextTail * pTextTail = itor->second;
if (m_CharacterTextTailList.end() != std::find(m_CharacterTextTailList.begin(), m_CharacterTextTailList.end(), pTextTail))
{
return;
}
if (!pTextTail->pOwner->isShow())
return;
CInstanceBase * pInstance = CPythonCharacterManager::Instance().GetInstancePtr(pTextTail->dwVirtualID);
if (!pInstance)
return;
if (pInstance->IsGuildWall())
return;
if (pInstance->CanPickInstance())
m_CharacterTextTailList.push_back(pTextTail);
}
void CPythonTextTail::ShowItemTextTail(DWORD VirtualID)
{
TTextTailMap::iterator itor = m_ItemTextTailMap.find(VirtualID);
if (m_ItemTextTailMap.end() == itor)
return;
TTextTail * pTextTail = itor->second;
if (m_ItemTextTailList.end() != std::find(m_ItemTextTailList.begin(), m_ItemTextTailList.end(), pTextTail))
{
return;
}
m_ItemTextTailList.push_back(pTextTail);
}
bool CPythonTextTail::isIn(CPythonTextTail::TTextTail * pSource, CPythonTextTail::TTextTail * pTarget)
{
float x1Source = pSource->x + pSource->xStart;
float y1Source = pSource->y + pSource->yStart;
float x2Source = pSource->x + pSource->xEnd;
float y2Source = pSource->y + pSource->yEnd;
float x1Target = pTarget->x + pTarget->xStart;
float y1Target = pTarget->y + pTarget->yStart;
float x2Target = pTarget->x + pTarget->xEnd;
float y2Target = pTarget->y + pTarget->yEnd;
if (x1Source <= x2Target && x2Source >= x1Target &&
y1Source <= y2Target && y2Source >= y1Target)
{
return true;
}
return false;
}
void CPythonTextTail::RegisterCharacterTextTail(DWORD dwGuildID, DWORD dwVirtualID, const D3DXCOLOR & c_rColor, float fAddHeight)
{
CInstanceBase * pCharacterInstance = CPythonCharacterManager::Instance().GetInstancePtr(dwVirtualID);
if (!pCharacterInstance)
return;
TTextTail * pTextTail = RegisterTextTail(dwVirtualID,
pCharacterInstance->GetNameString(),
pCharacterInstance->GetGraphicThingInstancePtr(),
pCharacterInstance->GetGraphicThingInstanceRef().GetHeight() + fAddHeight,
c_rColor);
CGraphicTextInstance * pTextInstance = pTextTail->pTextInstance;
pTextInstance->SetOutline(true);
pTextInstance->SetVerticalAlign(CGraphicTextInstance::VERTICAL_ALIGN_BOTTOM);
#ifdef TITLE_SYSTEM
pTextTail->psTitleNameTex#ifdefnce = NULL;
#endif
pTextTail->pMarkInstance=NULL;
pTe#endif->pGuildNameTextInstance=NULL;
pTextTail->pTitleTextInstance=NULL;
pTextTail->pLevelTextInstance=NULL;
#ifdef ENABLE_PLAYTIME_ICON
pTextTail->pPlayT#ifdeftance=NULL;
#endif
#ifdef GAMEMASTER_OUTLINE_COLOR
if (pC#endife#ifdefnce->IsGameMaster())
pTextInstance->SetOutLineColor(0.5f, 0.0f, 0.7f, 1.0f);
#endif
if (0 != dwGuildID)
{
pTex#endif>pMarkInstance = CGraphicMarkInstance::New();
DWORD dwMarkID = CGuildMarkManager::Instance().GetMarkID(dwGuildID);
if (dwMarkID != CGuildMarkManager::INVALID_MARK_ID)
{
std::string markImagePath;
if (CGuildMarkManager::Instance().GetMarkImageFilename(dwMarkID / CGuildMarkImage::MARK_TOTAL_COUNT, markImagePath))
{
pTextTail->pMarkInstance->SetImageFileName(markImagePath.c_str());
pTextTail->pMarkInstance->Load();
pTextTail->pMarkInstance->SetIndex(dwMarkID % CGuildMarkImage::MARK_TOTAL_COUNT);
}
}
std::string strGuildName;
if (!CPythonGuild::Instance().GetGuildName(dwGuildID, &strGuildName))
strGuildName = "Noname";
CGraphicTextInstance *& prGuildNameInstance = pTextTail->pGuildNameTextInstance;
prGuildNameInstance = CGraphicTextInstance::New();
prGuildNameInstance->SetTextPointer(ms_pFont);
prGuildNameInstance->SetOutline(true);
prGuildNameInstance->SetHorizonalAlign(CGraphicTextInstance::HORIZONTAL_ALIGN_CENTER);
prGuildNameInstance->SetVerticalAlign(CGraphicTextInstance::VERTICAL_ALIGN_BOTTOM);
prGuildNameInstance->SetValue(strGuildName.c_str());
prGuildNameInstance->SetColor(c_TextTail_Guild_Name_Color.r, c_TextTail_Guild_Name_Color.g, c_TextTail_Guild_Name_Color.b);
prGuildNameInstance->Update();
}
#ifdef ENABLE_PLAYTIME_ICON
if (pCharacterIns#ifdef>IsPC())
{
char szRutbe[MAX_PATH];
sprintf(szRutbe, pCharacterInstance->GetMyTimeIcon());
pTextTail->pPlayTimeInstance = CGraphicImageInstance::New();
pTextTail->pPlayTimeInstance->SetImagePointer((CGraphicImage*)CResourceManager::Instance().GetResourcePointer(szRutbe));
}
#endif
m_CharacterTextTailMap.insert(TTextTa#endif:value_type(dwVirtualID, pTextTail));
}
void CPythonTextTail::RegisterItemTextTail(DWORD VirtualID, const char * c_szText, CGraphicObjectInstance * pOwner)
{
#ifdef __DEBUG
char szName[256];
spritnf(#ifdef, "%s[%d]", c_szText, VirtualID);
TTextTail * pTextTail = RegisterTextTail(VirtualID, c_szText, pOwner, c_TextTail_Name_Position, c_TextTail_Item_Color);
m_ItemTextTailMap.insert(TTextTailMap::value_type(VirtualID, pTextTail));
#else
TTextTail * pTextTail = RegisterTextTai#elsetualID, c_szText, pOwner, c_TextTail_Name_Position, c_TextTail_Item_Color);
m_ItemTextTailMap.insert(TTextTailMap::value_type(VirtualID, pTextTail));
#endif
}
#ifdef ENABLE_NEW_SHOP_IN_CITIES
void C#endifText#ifdefRegisterShopInstanceTextTail(DWORD dwVirtualID, const char* c_szName, CGraphicObjectInstance* pOwner)
{
TTextTail* pTextTail = RegisterShopTextTail(dwVirtualID, c_szName, pOwner);
m_ShopTextTailMap.insert(TTextTailMap::value_type(dwVirtualID, pTextTail));
}
#endif
void CPythonTextTail::RegisterChatTail(DW#endifrtualID, const char * c_szChat)
{
CInstanceBase * pCharacterInstance = CPythonCharacterManager::Instance().GetInstancePtr(VirtualID);
if (!pCharacterInstance)
return;
TChatTailMap::iterator itor = m_ChatTailMap.find(VirtualID);
if (m_ChatTailMap.end() != itor)
{
TTextTail * pTextTail = itor->second;
pTextTail->pTextInstance->SetValue(c_szChat);
pTextTail->pTextInstance->Update();
pTextTail->Color = c_TextTail_Chat_Color;
pTextTail->pTextInstance->SetColor(c_TextTail_Chat_Color);
// TEXTTAIL_LIVINGTIME_CONTROL
pTextTail->LivingTime = CTimer::Instance().GetCurrentMillisecond() + TextTail_GetLivingTime();
// END_OF_TEXTTAIL_LIVINGTIME_CONTROL
pTextTail->bNameFlag = TRUE;
return;
}
TTextTail * pTextTail = RegisterTextTail(VirtualID,
c_szChat,
pCharacterInstance->GetGraphicThingInstancePtr(),
pCharacterInstance->GetGraphicThingInstanceRef().GetHeight() + 10.0f,
c_TextTail_Chat_Color);
// TEXTTAIL_LIVINGTIME_CONTROL
pTextTail->LivingTime = CTimer::Instance().GetCurrentMillisecond() + TextTail_GetLivingTime();
// END_OF_TEXTTAIL_LIVINGTIME_CONTROL
pTextTail->bNameFlag = TRUE;
pTextTail->pTextInstance->SetOutline(true);
pTextTail->pTextInstance->SetVerticalAlign(CGraphicTextInstance::VERTICAL_ALIGN_BOTTOM);
m_ChatTailMap.insert(TTextTailMap::value_type(VirtualID, pTextTail));
}
void CPythonTextTail::RegisterInfoTail(DWORD VirtualID, const char * c_szChat)
{
CInstanceBase * pCharacterInstance = CPythonCharacterManager::Instance().GetInstancePtr(VirtualID);
if (!pCharacterInstance)
return;
TChatTailMap::iterator itor = m_ChatTailMap.find(VirtualID);
if (m_ChatTailMap.end() != itor)
{
TTextTail * pTextTail = itor->second;
pTextTail->pTextInstance->SetValue(c_szChat);
pTextTail->pTextInstance->Update();
pTextTail->Color = c_TextTail_Info_Color;
pTextTail->pTextInstance->SetColor(c_TextTail_Info_Color);
// TEXTTAIL_LIVINGTIME_CONTROL
pTextTail->LivingTime = CTimer::Instance().GetCurrentMillisecond() + TextTail_GetLivingTime();
// END_OF_TEXTTAIL_LIVINGTIME_CONTROL
pTextTail->bNameFlag = FALSE;
return;
}
TTextTail * pTextTail = RegisterTextTail(VirtualID,
c_szChat,
pCharacterInstance->GetGraphicThingInstancePtr(),
pCharacterInstance->GetGraphicThingInstanceRef().GetHeight() + 10.0f,
c_TextTail_Info_Color);
// TEXTTAIL_LIVINGTIME_CONTROL
pTextTail->LivingTime = CTimer::Instance().GetCurrentMillisecond() + TextTail_GetLivingTime();
// END_OF_TEXTTAIL_LIVINGTIME_CONTROL
pTextTail->bNameFlag = FALSE;
pTextTail->pTextInstance->SetOutline(true);
pTextTail->pTextInstance->SetVerticalAlign(CGraphicTextInstance::VERTICAL_ALIGN_BOTTOM);
m_ChatTailMap.insert(TTextTailMap::value_type(VirtualID, pTextTail));
}
bool CPythonTextTail::GetTextTailPosition(DWORD dwVID, float* px, float* py, float* pz)
{
TTextTailMap::iterator itorCharacter = m_CharacterTextTailMap.find(dwVID);
if (m_CharacterTextTailMap.end() == itorCharacter)
{
return false;
}
TTextTail * pTextTail = itorCharacter->second;
*px=pTextTail->x;
*py=pTextTail->y;
*pz=pTextTail->z;
return true;
}
bool CPythonTextTail::IsChatTextTail(DWORD dwVID)
{
TChatTailMap::iterator itorChat = m_ChatTailMap.find(dwVID);
if (m_ChatTailMap.end() == itorChat)
return false;
return true;
}
void CPythonTextTail::SetCharacterTextTailColor(DWORD VirtualID, const D3DXCOLOR & c_rColor)
{
TTextTailMap::iterator itorCharacter = m_CharacterTextTailMap.find(VirtualID);
if (m_CharacterTextTailMap.end() == itorCharacter)
return;
TTextTail * pTextTail = itorCharacter->second;
pTextTail->pTextInstance->SetColor(c_rColor);
pTextTail->Color = c_rColor;
}
void CPythonTextTail::SetItemTextTailOwner(DWORD dwVID, const char * c_szName)
{
TTextTailMap::iterator itor = m_ItemTextTailMap.find(dwVID);
if (m_ItemTextTailMap.end() == itor)
return;
TTextTail * pTextTail = itor->second;
if (strlen(c_szName) > 0)
{
if (!pTextTail->pOwnerTextInstance)
{
pTextTail->pOwnerTextInstance = CGraphicTextInstance::New();
}
std::string strName = c_szName;
static const string & strOwnership = ApplicationStringTable_GetString(IDS_POSSESSIVE_MORPHENE) == "" ? "'s" : ApplicationStringTable_GetString(IDS_POSSESSIVE_MORPHENE);
strName += strOwnership;
pTextTail->pOwnerTextInstance->SetTextPointer(ms_pFont);
pTextTail->pOwnerTextInstance->SetHorizonalAlign(CGraphicTextInstance::HORIZONTAL_ALIGN_CENTER);
pTextTail->pOwnerTextInstance->SetValue(strName.c_str());
pTextTail->pOwnerTextInstance->SetColor(1.0f, 1.0f, 0.0f);
pTextTail->pOwnerTextInstance->Update();
int xOwnerSize, yOwnerSize;
pTextTail->pOwnerTextInstance->GetTextSize(&xOwnerSize, &yOwnerSize);
pTextTail->yStart = -2.0f;
pTextTail->yEnd += float(yOwnerSize + 4);
pTextTail->xStart = fMIN(pTextTail->xStart, float(-xOwnerSize / 2 - 1));
pTextTail->xEnd = fMAX(pTextTail->xEnd, float(xOwnerSize / 2 + 1));
}
else
{
if (pTextTail->pOwnerTextInstance)
{
CGraphicTextInstance:
elete(pTextTail->pOwnerTextInstance);pTextTail->pOwnerTextInstance = NULL;
}
#ifdef TITLE_SYSTEM
if (pTextTail->psTitleNam#ifdefnstance)
{
CGraphicTextInstance:
elete(pTextTail->psTitleNameTextInstance);pTextTail->psTitleNameTextInstance = NULL;
}
#endif
int xSize, ySize;
pTextTai#endifxtInstance->GetTextSize(&xSize, &ySize);
pTextTail->xStart = (float) (-xSize / 2 - 2);
pTextTail->yStart = -2.0f;
pTextTail->xEnd = (float) (xSize / 2 + 2);
pTextTail->yEnd = (float) ySize;
}
}
void CPythonTextTail:
eleteCharacterTextTail(DWORD VirtualID){
TTextTailMap::iterator itorCharacter = m_CharacterTextTailMap.find(VirtualID);
TTextTailMap::iterator itorChat = m_ChatTailMap.find(VirtualID);
if (m_CharacterTextTailMap.end() != itorCharacter)
{
DeleteTextTail(itorCharacter->second);
m_CharacterTextTailMap.erase(itorCharacter);
}
else
{
Tracenf("CPythonTextTail:
eleteCharacterTextTail - Find VID[%d] Error", VirtualID);}
if (m_ChatTailMap.end() != itorChat)
{
DeleteTextTail(itorChat->second);
m_ChatTailMap.erase(itorChat);
}
}
#ifdef ENABLE_NEW_SHOP_IN_CITIES
void CPythonText#ifdefDeleteShopTextTail(DWORD VirtualID)
{
TTextTailMap::iterator itor = m_ShopTextTailMap.find(VirtualID);
if (m_ShopTextTailMap.end() == itor)
{
Tracef(" CPythonTextTail:
eleteShopTextTail - None Item Text Tail\n");return;
}
DeleteTextTail(itor->second);
m_ShopTextTailMap.erase(itor);
}
#endif
void CPythonTextTail:
eleteItemTextTail(#endifVirtualID){
TTextTailMap::iterator itor = m_ItemTextTailMap.find(VirtualID);
if (m_ItemTextTailMap.end() == itor)
{
Tracef(" CPythonTextTail:
eleteItemTextTail - None Item Text Tail\n");return;
}
DeleteTextTail(itor->second);
m_ItemTextTailMap.erase(itor);
}
CPythonTextTail::TTextTail * CPythonTextTail::RegisterTextTail(DWORD dwVirtualID, const char * c_szText, CGraphicObjectInstance * pOwner, float fHeight, const D3DXCOLOR & c_rColor)
{
TTextTail * pTextTail = m_TextTailPool.Alloc();
#ifdef __ENABLE_NEW_OFFLINESHOP__
# ifdef ENAB#ifdef_SHOP_IN_CITIES
pTextTail->bIsShop = false;
pTextTail->bRender = false;
# endif
#endif
pTextTail->dwVirtualID = dwVirtualID;
#endifextTail->pOwner = pOwner;
pTextTail->pT#endifextTail CGraphicTextInstance::New();
pTextTail->pOwnerTextInstance = NULL;
pTextTail->fHeight = fHeight;
pTextTail->pTextInstance->SetTextPointer(ms_pFont);
pTextTail->pTextInstance->SetHorizonalAlign(CGraphicTextInstance::HORIZONTAL_ALIGN_CENTER);
pTextTail->pTextInstance->SetValue(c_szText);
pTextTail->pTextInstance->SetColor(c_rColor.r, c_rColor.g, c_rColor.b);
pTextTail->pTextInstance->Update();
int xSize, ySize;
pTextTail->pTextInstance->GetTextSize(&xSize, &ySize);
pTextTail->xStart = (float) (-xSize / 2 - 2);
pTextTail->yStart = -2.0f;
pTextTail->xEnd = (float) (xSize / 2 + 2);
pTextTail->yEnd = (float) ySize;
pTextTail->Color = c_rColor;
pTextTail->fDistanceFromPlayer = 0.0f;
pTextTail->x = -100.0f;
pTextTail->y = -100.0f;
pTextTail->z = 0.0f;
#ifdef TITLE_SYSTEM
pTextTail->psTitleNameTex#ifdefnce = NULL;
#endif
pTextTail->pMarkInstance = NULL;
p#endifil->pGuildNameTextInstance = NULL;
pTextTail->pTitleTextInstance = NULL;
pTextTail->pLevelTextInstance = NULL;
#ifdef ENABLE_PLAYTIME_ICON
pTextTail->pPlayT#ifdeftance=NULL;
#endif
return pTextTail;
}
#ifdef ENABLE_NEW#endifIN_CITIES
CPythonTextTail:#ifdefTail* CPythonTextTail::RegisterShopTextTail(DWORD dwVirtualID, const char* c_szText, CGraphicObjectInstance* pOwner)
{
const D3DXCOLOR& c_rColor = D3DXCOLOR(1.0, 1.0, 0.5, 1.0);
TTextTail* pTextTail = m_TextTailPool.Alloc();
pTextTail->bIsShop = true;
pTextTail->dwVirtualID = dwVirtualID;
pTextTail->pOwner = pOwner;
pTextTail->pTextInstance = CGraphicTextInstance::New();
pTextTail->pOwnerTextInstance = NULL;
pTextTail->fHeight = 180.f;
pTextTail->pTextInstance->SetTextPointer(ms_pFont);
pTextTail->pTextInstance->SetHorizonalAlign(CGraphicTextInstance::HORIZONTAL_ALIGN_CENTER);
pTextTail->pTextInstance->SetValue(c_szText);
pTextTail->pTextInstance->SetColor(c_rColor.r, c_rColor.g, c_rColor.b);
pTextTail->pTextInstance->Update();
int xSize, ySize;
pTextTail->pTextInstance->GetTextSize(&xSize, &ySize);
pTextTail->xStart = (float)(-xSize / 2 - 2);
pTextTail->yStart = -2.0f;
pTextTail->xEnd = (float)(xSize / 2 + 2);
pTextTail->yEnd = (float)ySize;
pTextTail->Color = c_rColor;
pTextTail->fDistanceFromPlayer = 0.0f;
pTextTail->x = -100.0f;
pTextTail->y = -100.0f;
pTextTail->z = 0.0f;
#ifdef TITLE_SYSTEM
pTextTail->psTitleNameTex#ifdefnce = NULL;
#endif
pTextTail->pMarkInstance = NULL;
p#endifil->pGuildNameTextInstance = NULL;
pTextTail->pTitleTextInstance = NULL;
pTextTail->pLevelTextInstance = NULL;
//#if defined(WJ_SHOW_MOB_INFO)
// pTextTail->pAIFlagTextInstance = NULL;
//#endif
#ifdef ENABLE_PLAYTIME_ICON
pTextTail->pPlayT#ifdeftance=NULL;
#endif
return pTextTail;
}
bool CPythonText#endifGetPickedNewShop(DWORD* pdwVID)
{
*pdwVID = 0;
/*if(!CPythonSystem::instance().IsAlwaysShowName())
return false;*/
long ixMouse = 0, iyMouse = 0;
POINT p;
CPythonApplication::Instance().GetMousePosition(&p);
ixMouse = p.x;
iyMouse = p.y;
for (auto itor = m_ShopTextTailMap.begin(); itor != m_ShopTextTailMap.end(); ++itor)
{
TTextTail* pTextTail = itor->second;
if (ixMouse >= pTextTail->x + (pTextTail->xStart - 10) && ixMouse <= pTextTail->x + (pTextTail->xEnd + 10) &&
iyMouse >= pTextTail->y + (pTextTail->yStart - 10) && iyMouse <= pTextTail->y + (pTextTail->yEnd + 10))
{
*pdwVID = itor->first;
return true;
}
}
return false;
}
#endif
void CPythonTextTail:
eleteTextTail(TTe#endif * pTextTail){
if (pTextTail->pTextInstance)
{
CGraphicTextInstance:
elete(pTextTail->pTextInstance);pTextTail->pTextInstance = NULL;
}
if (pTextTail->pOwnerTextInstance)
{
CGraphicTextInstance:
elete(pTextTail->pOwnerTextInstance);pTextTail->pOwnerTextInstance = NULL;
}
if (pTextTail->pMarkInstance)
{
CGraphicMarkInstance:
elete(pTextTail->pMarkInstance);pTextTail->pMarkInstance = NULL;
}
if (pTextTail->pGuildNameTextInstance)
{
CGraphicTextInstance:
elete(pTextTail->pGuildNameTextInstance);pTextTail->pGuildNameTextInstance = NULL;
}
if (pTextTail->pTitleTextInstance)
{
CGraphicTextInstance:
elete(pTextTail->pTitleTextInstance);pTextTail->pTitleTextInstance = NULL;
}
if (pTextTail->pLevelTextInstance)
{
CGraphicTextInstance:
elete(pTextTail->pLevelTextInstance);pTextTail->pLevelTextInstance = NULL;
}
#ifdef ENABLE_PLAYTIME_ICON
if (pTextTail->pP#ifdefeInstance)
{
CGraphicImageInstance:
elete(pTextTail->pPlayTimeInstance);pTextTail->pPlayTimeInstance = NULL;
}
#endif
m_TextTailPool.Free(pTextTail);
}
in#endifhonTextTail:
ick(int ixMouse, int iyMouse){
for (TTextTailMap::iterator itor = m_ItemTextTailMap.begin(); itor != m_ItemTextTailMap.end(); ++itor)
{
TTextTail * pTextTail = itor->second;
if (ixMouse >= pTextTail->x + pTextTail->xStart && ixMouse <= pTextTail->x + pTextTail->xEnd &&
iyMouse >= pTextTail->y + pTextTail->yStart && iyMouse <= pTextTail->y + pTextTail->yEnd)
{
SelectItemName(itor->first);
return (itor->first);
}
}
return -1;
}
void CPythonTextTail::SelectItemName(DWORD dwVirtualID)
{
TTextTailMap::iterator itor = m_ItemTextTailMap.find(dwVirtualID);
if (m_ItemTextTailMap.end() == itor)
return;
TTextTail * pTextTail = itor->second;
pTextTail->pTextInstance->SetColor(0.1f, 0.9f, 0.1f);
}
#ifdef TITLE_SYSTEM
void CPythonTextTail::AttachN#ifdefe(DWORD dwVID, const char* c_szName, const D3DXCOLOR& c_rColor)
{
if (!bPKTitleEnable)
return;
TTextTailMap::iterator itor = m_CharacterTextTailMap.find(dwVID);
if (m_CharacterTextTailMap.end() == itor)
return;
TTextTail* pTextTail = itor->second;
CGraphicTextInstance*& prTitleNameInstance = pTextTail->psTitleNameTextInstance;
if (!prTitleNameInstance)
{
prTitleNameInstance = CGraphicTextInstance::New();
prTitleNameInstance->SetTextPointer(ms_pFont);
prTitleNameInstance->SetOutline(true);
prTitleNameInstance->SetHorizonalAlign(CGraphicTextInstance::HORIZONTAL_ALIGN_CENTER);
prTitleNameInstance->SetVerticalAlign(CGraphicTextInstance::VERTICAL_ALIGN_BOTTOM);
}
prTitleNameInstance->SetValue(c_szName);
prTitleNameInstance->SetColor(c_rColor.r, c_rColor.g, c_rColor.b);
prTitleNameInstance->Update();
}
void CPythonTextTail:
etachNewTitle(DWORD dwVID){
if (!bPKTitleEnable)
return;
TTextTailMap::iterator itor = m_CharacterTextTailMap.find(dwVID);
if (m_CharacterTextTailMap.end() == itor)
return;
TTextTail* pTextTail = itor->second;
if (pTextTail->psTitleNameTextInstance)
{
CGraphicTextInstance:
elete(pTextTail->psTitleNameTextInstance);pTextTail->psTitleNameTextInstance = NULL;
}
}
#endif
void CPythonTextTail::AttachTitle(DWORD d#endifconst char * c_szName, const D3DXCOLOR & c_rColor)
{
if (!bPKTitleEnable)
return;
TTextTailMap::iterator itor = m_CharacterTextTailMap.find(dwVID);
if (m_CharacterTextTailMap.end() == itor)
return;
TTextTail * pTextTail = itor->second;
CGraphicTextInstance *& prTitle = pTextTail->pTitleTextInstance;
if (!prTitle)
{
prTitle = CGraphicTextInstance::New();
prTitle->SetTextPointer(ms_pFont);
prTitle->SetOutline(true);
if (LocaleService_IsEUROPE())
prTitle->SetHorizonalAlign(CGraphicTextInstance::HORIZONTAL_ALIGN_RIGHT);
else
prTitle->SetHorizonalAlign(CGraphicTextInstance::HORIZONTAL_ALIGN_CENTER);
prTitle->SetVerticalAlign(CGraphicTextInstance::VERTICAL_ALIGN_BOTTOM);
}
prTitle->SetValue(c_szName);
prTitle->SetColor(c_rColor.r, c_rColor.g, c_rColor.b);
prTitle->Update();
}
void CPythonTextTail:
etachTitle(DWORD dwVID){
if (!bPKTitleEnable)
return;
TTextTailMap::iterator itor = m_CharacterTextTailMap.find(dwVID);
if (m_CharacterTextTailMap.end() == itor)
return;
TTextTail * pTextTail = itor->second;
if (pTextTail->pTitleTextInstance)
{
CGraphicTextInstance:
elete(pTextTail->pTitleTextInstance);pTextTail->pTitleTextInstance = NULL;
}
}
void CPythonTextTail::EnablePKTitle(BOOL bFlag)
{
bPKTitleEnable = bFlag;
}
void CPythonTextTail::AttachLevel(DWORD dwVID, const char * c_szText, const D3DXCOLOR & c_rColor)
{
if (!bPKTitleEnable)
return;
TTextTailMap::iterator itor = m_CharacterTextTailMap.find(dwVID);
if (m_CharacterTextTailMap.end() == itor)
return;
TTextTail * pTextTail = itor->second;
CGraphicTextInstance *& prLevel = pTextTail->pLevelTextInstance;
if (!prLevel)
{
prLevel = CGraphicTextInstance::New();
prLevel->SetTextPointer(ms_pFont);
prLevel->SetOutline(true);
prLevel->SetHorizonalAlign(CGraphicTextInstance::HORIZONTAL_ALIGN_RIGHT);
prLevel->SetVerticalAlign(CGraphicTextInstance::VERTICAL_ALIGN_BOTTOM);
}
prLevel->SetValue(c_szText);
prLevel->SetColor(c_rColor.r, c_rColor.g, c_rColor.b);
prLevel->Update();
}
void CPythonTextTail:
etachLevel(DWORD dwVID){
if (!bPKTitleEnable)
return;
TTextTailMap::iterator itor = m_CharacterTextTailMap.find(dwVID);
if (m_CharacterTextTailMap.end() == itor)
return;
TTextTail * pTextTail = itor->second;
if (pTextTail->pLevelTextInstance)
{
CGraphicTextInstance:
elete(pTextTail->pLevelTextInstance);pTextTail->pLevelTextInstance = NULL;
}
}
void CPythonTextTail::Initialize()
{
// DEFAULT_FONT
//ms_pFont = (CGraphicText *)CResourceManager::Instance().GetTypeResourcePointer(g_strDefaultFontName.c_str());
CGraphicText* pkDefaultFont = static_cast<CGraphicText*>(DefaultFont_GetResource());
if (!pkDefaultFont)
{
TraceError("CPythonTextTail::Initialize - CANNOT_FIND_DEFAULT_FONT");
return;
}
ms_pFont = pkDefaultFont;
// END_OF_DEFAULT_FONT
}
void CPythonTextTail:
estroy(){
m_TextTailPool.Clear();
}
void CPythonTextTail::Clear()
{
m_CharacterTextTailMap.clear();
m_CharacterTextTailList.clear();
m_ItemTextTailMap.clear();
m_ItemTextTailList.clear();
#ifdef ENABLE_NEW_SHOP_IN_CITIES
m_ShopTextTa#ifdefclear();
#endif
m_ChatTailMap.clear();
m_TextTail#endiflear();
}
CPythonTextTail::CPythonTextTail()
{
Clear();
}
CPythonTextTail::~CPythonTextTail()
{
Destroy();
}
[/CODE]
Son düzenleme:
bu verdigin fix hatalı : build almıyorOyunda ışınlanırken, pazarları görüntülerken ve metinden düşen itemler menzilden çıkıp girildiğinde silinirken ki bir hatayı düzeltir, ayrıca c- dilinden c++ dönüştürülmüş bir betiktir güvenlik açıklarını ve sistem performans düzeltmelerini içerir (10-100-1000 karakter/item varsa yazılar üst üste binerek fps düşüşü yaptığı bir hatayı düzeltir)
İşlemi yapmadan önce yedek almayı unutmayın
[CODE lang="cpp" title="PythonTextTail.cpp"]//
//
#include "stdafx.h"
#include "InstanceBase.h"
#in#includeesource.h"
##include"PythonTextTail.h"#includee "PythonChara#includeger.h"
#include "Pyt#include.h"
#include "Locale.h"
#inc#includerkManager.h"
#ifd#includeE_NEW_SHOP_I#include
#include "Python#ifdefation.h"
#endif
// --- IYI#include: Kod okunabilirliğini #endifak için "Magic Number"lar sabitlere dönüştürüldü.
const D3DXCOLOR c_TextTail_Player_Color = D3DXCOLOR(1.0f, 1.0f, 1.0f, 1.0f);
const D3DXCOLOR c_TextTail_Monster_Color = D3DXCOLOR(1.0f, 0.0f, 0.0f, 1.0f);
const D3DXCOLOR c_TextTail_Item_Color = D3DXCOLOR(1.0f, 1.0f, 1.0f, 1.0f);
const D3DXCOLOR c_TextTail_Chat_Color = D3DXCOLOR(1.0f, 1.0f, 1.0f, 1.0f);
const D3DXCOLOR c_TextTail_Info_Color = D3DXCOLOR(1.0f, 0.785f, 0.785f, 1.0f);
const D3DXCOLOR c_TextTail_Guild_Name_Color = 0xFFEFD3FF;
const float c_TextTail_Name_Position = -10.0f;
const float c_fxMarkPosition = 1.5f;
const float c_fTitleInstanceOffset = 8.0f;
const float c_fLevelInstanceOffset = 4.0f;
const float c_fItemOwnerNameYOffset = 15.0f;
const float c_fItemNameBoxYStart = -2.0f;
const float c_fShopBoxPadding = 10.0f;
const float c_fChatBubbleNameOffset = 17.0f;
#ifdef TITLE_SYSTEM
const float c_fyGuildNamePosition = 25#ifdefonst float c_fyMarkPosition = 25.0f + 11.0f;
const float c_fysTitlePosition = 16.0f;
const float c_fyGuildNamePositionOld = 15.0f;
const float c_fyMarkPositionOld = 15.0f + 11.0f;
#else
const float c_fyGuildNamePosition = 15.0f;
const flo#elsefyMarkPosition = 15.0f + 11.0f;
#endif
BOOL bPKTitleEnable = TRUE;
// TEXTTAIL_LIVINGTIME#endifOL
long gs_TextTail_LivingTime = 5000;
long TextTail_GetLivingTime()
{
assert(gs_TextTail_LivingTime > 1000);
return gs_TextTail_LivingTime;
}
void TextTail_SetLivingTime(long livingTime)
{
gs_TextTail_LivingTime = livingTime;
}
// END_OF_TEXTTAIL_LIVINGTIME_CONTROL
CGraphicText* ms_pFont = nullptr;
// --- IYILESTIRME (GÜVENLİK NOTU):
// Bu yapıya CGraphic...::New() ile oluşturulan yeni bir pointer eklerseniz,
// aşağıdaki 3 işlemi yapmayı UNUTMAYIN:
// 1. RegisterTextTail fonksiyonunda bu pointer'ı nullptr olarak başlatın.
// 2. DeleteTextTail fonksiyonunda bu pointer'ı CGraphic...:elete() ile silin ve nullptr yapın.
// 3. İlgili Attach/Detach fonksiyonlarını yazın.
// Bu adımları atlamak, bellek sızıntılarına (memory leak) yol açacaktır!
struct CPythonTextTail::TTextTail
{
// ... (diğer struct elemanları buraya gelecek, eğer struct ayrı bir dosyada değilse)
// --- IYILESTIRME (PERFORMANS):
// Bu TextTail'in render listesinde olup olmadığını O(1) hızında kontrol etmek için kullanılır.
// std::find ile liste tarama (O(n)) işlemine göre çok daha performanslıdır.
bool bIsOnRenderList;
};
void CPythonTextTail::GetInfo(std::string* pstInfo)
{
// GÜVENLİK DÜZELTMESİ: Bellek taşması riski taşıyan sprintf yerine std::string ve std::to_string kullanıldı.
std::string szInfo = "TextTail: ChatTail " + std::to_string(m_ChatTailMap.size()) +
", ChrTail (Map " + std::to_string(m_CharacterTextTailMap.size()) + ", List " + std::to_string(m_CharacterTextTailList.size()) + ")" +
", ItemTail (Map " + std::to_string(m_ItemTextTailMap.size()) + ", List " + std::to_string(m_ItemTextTailList.size()) + ")" +
", Pool " + std::to_string(m_TextTailPool.GetCapacity());
pstInfo->append(szInfo);
}
void CPythonTextTail::UpdateAllTextTail()
{
CInstanceBase* pInstance = CPythonCharacterManager::Instance().GetMainInstancePtr();
if (!pInstance)
return;
TPixelPosition pixelPos;
pInstance->NEW_GetPixelPosition(&pixelPos);
for (auto const& [key, val] : m_CharacterTextTailMap)
{
if (val && val->pOwner) UpdateDistance(pixelPos, val);
}
for (auto const& [key, val] : m_ItemTextTailMap)
{
if (val && val->pOwner) UpdateDistance(pixelPos, val);
}
#ifdef ENABLE_NEW_SHOP_IN_CITIES
for (auto const& [key, val] : m_ShopTextTailMap)
{
if (val && va#ifdefner) UpdateDistance(pixelPos, val);
}
#endif
for (auto const& [key, val] : m_ChatTailMap)
{
if (val && val->pOwner)
{
#endifdateDistance(pixelPos, val);
if (val->bNameFlag)
{
ShowCharacterTextTail(key);
}
}
}
}
void CPythonTextTail::UpdateShowingTextTail()
{
for (TTextTail* pTextTail : m_ItemTextTailList)
{
UpdateTextTail(pTextTail);
}
for (auto const& [key, pChatTail] : m_ChatTailMap)
{
UpdateTextTail(pChatTail);
}
#ifdef ENABLE_NEW_SHOP_IN_CITIES
for (auto const& [key, pShopTail] : m_ShopTextTailMap)
{
if (pSh#ifdef->bRender)
UpdateTextTail(pShopTail);
}
#endif
for (TTextTail* pTextTail : m_CharacterTextTailList)
{
UpdateTextTail(pTextTail);
#endif itor = m_ChatTailMap.find(pTextTail->dwVirtualID);
if (m_ChatTailMap.end() != itor)
{
TTextTail* pChatTail = itor->second;
if (pChatTail && pChatTail->bNameFlag)
{
pTextTail->y = pChatTail->y - c_fChatBubbleNameOffset;
}
}
}
}
void CPythonTextTail::UpdateTextTail(TTextTail* pTextTail)
{
if (!pTextTail || !pTextTail->pOwner)
return;
CPythonGraphic& rpyGraphic = CPythonGraphic::Instance();
rpyGraphic.Identity();
const D3DXVECTOR3& c_rv3Position = pTextTail->pOwner->GetPosition();
rpyGraphic.ProjectPosition(c_rv3Position.x,
c_rv3Position.y,
c_rv3Position.z + pTextTail->fHeight,
&pTextTail->x,
&pTextTail->y,
&pTextTail->z);
pTextTail->x = floorf(pTextTail->x);
pTextTail->y = floorf(pTextTail->y);
if (pTextTail->fDistanceFromPlayer < 1300.0f)
{
pTextTail->z = 0.0f;
}
else
{
pTextTail->z = pTextTail->z * CPythonGraphic::Instance().GetOrthoDepth() * -1.0f;
pTextTail->z += 10.0f;
}
}
void CPythonTextTail::ArrangeTextTail()
{
// PERFORMANS İYİLEŞTİRMESİ:
// Yerde çok fazla item olduğunda oyunda kasmaya neden olan eski O(n^2) algoritma yerine,
// O(n log n) karmaşıklığında çalışan verimli bir sıralama ve tek geçişli düzenleme algoritması kullanıldı.
if (!m_ItemTextTailList.empty())
{
m_ItemTextTailList.sort([](const TTextTail* a, const TTextTail* b) {
if (!a || !b) return false;
return a->y < b->y;
});
float yTemp = 5.0f;
TTextTail* pPrevTextTail = nullptr;
for (TTextTail* pCurrentTextTail : m_ItemTextTailList)
{
if (!pCurrentTextTail) continue;
if (pPrevTextTail && isIn(pCurrentTextTail, pPrevTextTail))
{
pCurrentTextTail->y = pPrevTextTail->y + pPrevTextTail->yEnd + yTemp;
}
if (pCurrentTextTail->pOwnerTextInstance)
{
pCurrentTextTail->pOwnerTextInstance->SetPosition(pCurrentTextTail->x, pCurrentTextTail->y, pCurrentTextTail->z);
pCurrentTextTail->pOwnerTextInstance->Update();
}
if (pCurrentTextTail->pTextInstance)
{
pCurrentTextTail->pTextInstance->SetColor(pCurrentTextTail->Color.r, pCurrentTextTail->Color.g, pCurrentTextTail->Color.b);
float yPos = pCurrentTextTail->y + (pCurrentTextTail->pOwnerTextInstance ? c_fItemOwnerNameYOffset : 0.0f);
pCurrentTextTail->pTextInstance->SetPosition(pCurrentTextTail->x, yPos, pCurrentTextTail->z);
pCurrentTextTail->pTextInstance->Update();
}
pPrevTextTail = pCurrentTextTail;
}
}
#ifdef ENABLE_NEW_SHOP_IN_CITIES
for (auto const& [key, pInsertTextTail] : m_ShopTextTailMap)
{
if (!pInsertTextTail ||#ifdefertTextTail->bRender) continue;
if (pInsertTextTail->pOwnerTextInstance)
{
pInsertTextTail->pOwnerTextInstance->SetPosition(pInsertTextTail->x, pInsertTextTail->y, pInsertTextTail->z);
pInsertTextTail->pOwnerTextInstance->Update();
}
if (pInsertTextTail->pTextInstance)
{
pInsertTextTail->pTextInstance->SetColor(pInsertTextTail->Color.r, pInsertTextTail->Color.g, pInsertTextTail->Color.b);
float yPos = pInsertTextTail->y + (pInsertTextTail->pOwnerTextInstance ? c_fItemOwnerNameYOffset : 0.0f);
pInsertTextTail->pTextInstance->SetPosition(pInsertTextTail->x, yPos, pInsertTextTail->z);
pInsertTextTail->pTextInstance->Update();
}
}
#endif
for (TTextTail* pTextTail : m_CharacterTextTailList)
{
if (!pTextTail) continue;
float fxAdd = 0.0f;
#endif TITLE_SYSTEM
if (pTextTail->psTitleNameTextInstance)
{
pTextTail->psTitleNameTextInstance->SetPositi#ifdefxtTail->x, pTextTail->y - c_fysTitlePosition, pTextTail->z);
pTextTail->psTitleNameTextInstance->Update();
}
#endif
CGraphicMarkInstance* pMarkInstance = pTextTail->pMarkInstance;
CGraphicTextInstance* pGuildNameInstance = pTex#endif>pGuildNameTextInstance;
if (pMarkInstance && pGuildNameInstance)
{
int iWidth, iHeight;
pGuildNameInstance->GetTextSize(&iWidth, &iHeight);
int iImageHalfSize = pMarkInstance->GetWidth() / 2 + c_fxMarkPosition;
#ifdef TITLE_SYSTEM
float fyMarkPos = pTextTail->psTitleNameTextInstance ? c_fyMarkPosition : c_fyMarkPositionOld;
#ifdefoat fyGuildNamePos = pTextTail->psTitleNameTextInstance ? c_fyGuildNamePosition : c_fyGuildNamePositionOld;
#else
float fyMarkPos = c_fyMarkPosition;
float fyGuildNamePos = c_fyGuildNamePosition;
#endif
pMar#elseance->SetPosition(pTextTail->x - iWidth / 2 - iImageHalfSize, pTextTail->y - fyMarkPos);
pGuild#endifstance->SetPosition(pTextTail->x + iImageHalfSize, pTextTail->y - fyGuildNamePos, pTextTail->z);
pGuildNameInstance->Update();
}
int iNameWidth, iNameHeight;
pTextTail->pTextInstance->GetTextSize(&iNameWidth, &iNameHeight);
CGraphicTextInstance* pTitle = pTextTail->pTitleTextInstance;
CGraphicTextInstance* pLevel = pTextTail->pLevelTextInstance;
if (pTitle)
{
int iTitleWidth, iTitleHeight;
pTitle->GetTextSize(&iTitleWidth, &iTitleHeight);
fxAdd = c_fTitleInstanceOffset;
float titleXPos = pTextTail->x - (iNameWidth / 2) - fxAdd;
if (LocaleService_IsEUROPE()) {
titleXPos = pTextTail->x - (iNameWidth / 2);
if (GetDefaultCodePage() == CP_ARABIC) {
titleXPos = pTextTail->x - (iNameWidth / 2) - iTitleWidth - 4.0f;
}
}
pTitle->SetPosition(titleXPos, pTextTail->y, pTextTail->z);
pTitle->Update();
if (pLevel)
{
float levelXPos = titleXPos - iTitleWidth;
if (LocaleService_IsEUROPE() && GetDefaultCodePage() == CP_ARABIC) {
int iLevelWidth, iLevelHeight;
pLevel->GetTextSize(&iLevelWidth, &iLevelHeight);
levelXPos = titleXPos - iLevelWidth - 4.0f;
}
pLevel->SetPosition(levelXPos, pTextTail->y, pTextTail->z);
pLevel->Update();
}
}
else if (pLevel)
{
fxAdd = c_fLevelInstanceOffset;
float levelXPos = pTextTail->x - (iNameWidth / 2) - fxAdd;
if (LocaleService_IsEUROPE()) {
levelXPos = pTextTail->x - (iNameWidth / 2);
if (GetDefaultCodePage() == CP_ARABIC) {
int iLevelWidth, iLevelHeight;
pLevel->GetTextSize(&iLevelWidth, &iLevelHeight);
levelXPos = pTextTail->x - (iNameWidth / 2) - iLevelWidth - 4.0f;
}
}
pLevel->SetPosition(levelXPos, pTextTail->y, pTextTail->z);
pLevel->Update();
}
#ifdef ENABLE_PLAYTIME_ICON
if (pTextTail->pPlayTimeInstance)
{
float offset = 0.0f;
if (pTitle#ifdef int iTitleWidth, iTitleHeight;
pTitle->GetTextSize(&iTitleWidth, &iTitleHeight);
offset += iTitleWidth;
}
if (pLevel) {
int iLevelWidth, iLevelHeight;
pLevel->GetTextSize(&iLevelWidth, &iLevelHeight);
offset += iLevelWidth;
}
float playTimeX = pTextTail->x - (iNameWidth / 2) - offset - 25.0f;
pTextTail->pPlayTimeInstance->SetPosition(playTimeX, pTextTail->y - 14);
}
#endif
pTextTail->pTextInstance->SetColor(pTextTail->Color.r, pTextTail->Color.g, pTextTail->Color.b);
pTextTail->pTex#endifnce->SetPosition(pTextTail->x + fxAdd, pTextTail->y, pTextTail->z);
pTextTail->pTextInstance->Update();
}
DWORD dwTime = CTimer::Instance().GetCurrentMillisecond();
for (TChatTailMap::iterator itorChat = m_ChatTailMap.begin(); itorChat != m_ChatTailMap.end()
{
TTextTail* pTextTail = itorChat->second;
if (!pTextTail || pTextTail->LivingTime < dwTime)
{
if (pTextTail) DeleteTextTail(pTextTail);
itorChat = m_ChatTailMap.erase(itorChat);
}
else
{
pTextTail->pTextInstance->SetColor(pTextTail->Color);
pTextTail->pTextInstance->SetPosition(pTextTail->x, pTextTail->y, pTextTail->z);
pTextTail->pTextInstance->Update();
++itorChat;
}
}
}
void CPythonTextTail::Render()
{
for (TTextTail* pTextTail : m_CharacterTextTailList)
{
if (!pTextTail) continue;
if (pTextTail->pTextInstance) pTextTail->pTextInstance->Render();
if (pTextTail->pMarkInstance) pTextTail->pMarkInstance->Render();
if (pTextTail->pGuildNameTextInstance) pTextTail->pGuildNameTextInstance->Render();
if (pTextTail->pTitleTextInstance) pTextTail->pTitleTextInstance->Render();
if (pTextTail->pLevelTextInstance) pTextTail->pLevelTextInstance->Render();
#ifdef TITLE_SYSTEM
if (pTextTail->psTitleNameTextInstance) pTextTail->psTitleNameTextInstance->Render();
#endif
#ifdef ENABLE_#ifdefME_ICON
if (pTextTail->pPlayTimeInstance) pTextTail->pPlayTimeInstance->Render();
#endif
}
#endifT#ifdefl* pTextTail : m_ItemTextTailList)
{
if (!pTextTail) continue;
RenderTextTailBox(pTe#endif);
if (pTextTail->pTextInstance) pTextTail->pTextInstance->Render();
if (pTextTail->pOwnerTextInstance) pTextTail->pOwnerTextInstance->Render();
}
#ifdef ENABLE_NEW_SHOP_IN_CITIES
for (auto const& [key, pTextTail] : m_ShopTextTailMap)
{
if (!pTextTail || !pTextTail-#ifdefer) continue;
RenderTextTailBox(pTextTail);
if (pTextTail->pTextInstance) pTextTail->pTextInstance->Render();
if (pTextTail->pOwnerTextInstance) pTextTail->pOwnerTextInstance->Render();
}
#endif
for (auto const& [key, pTextTail] : m_ChatTailMap)
{
if (pTextTail && pTextTail->pOwner && pTextTail->pOwner->i#endif))
RenderTextTailName(pTextTail);
}
}
void CPythonTextTail::RenderTextTailBox(TTextTail* pTextTail)
{
if (!pTextTail) return;
#if defined(__ENABLE_NEW_OFFLINESHOP__) && defined(ENABLE_NEW_SHOP_IN_CITIES)
if (pTextTail->bIsShop)
{
float startX = #ifxtTail->x + pTextTail->xStart - c_fShopBoxPadding;
float startY = pTextTail->y + pTextTail->yStart - c_fShopBoxPadding;
float endX = pTextTail->x + pTextTail->xEnd + c_fShopBoxPadding;
float endY = pTextTail->y + pTextTail->yEnd + c_fShopBoxPadding;
CPythonGraphic::Instance().SetDiffuseColor(0.0f, 0.0f, 0.0f, 1.0f);
CPythonGraphic::Instance().RenderBox2d(startX, startY, endX, endY, pTextTail->z);
CPythonGraphic::Instance().SetDiffuseColor(0.0f, 0.0f, 0.0f, 0.3f);
CPythonGraphic::Instance().RenderBar2d(startX, startY, endX, endY, pTextTail->z);
return;
}
#endif
CPythonGraphic::Instance().SetDiffuseColor(0.0f, 0.0f, 0.0f, 1.0f);
CPythonGraphic::Instance().RenderBox2d(pTextTail->x #endiftTail->xStart, pTextTail->y + pTextTail->yStart, pTextTail->x + pTextTail->xEnd, pTextTail->y + pTextTail->yEnd, pTextTail->z);
CPythonGraphic::Instance().SetDiffuseColor(0.0f, 0.0f, 0.0f, 0.3f);
CPythonGraphic::Instance().RenderBar2d(pTextTail->x + pTextTail->xStart, pTextTail->y + pTextTail->yStart, pTextTail->x + pTextTail->xEnd, pTextTail->y + pTextTail->yEnd, pTextTail->z);
}
void CPythonTextTail::RenderTextTailName(TTextTail* pTextTail)
{
if (pTextTail && pTextTail->pTextInstance)
pTextTail->pTextInstance->Render();
}
void CPythonTextTail::HideAllTextTail()
{
// --- IYILESTIRME (PERFORMANS):
// Render listesi temizlenmeden önce, listedeki tüm elemanların bayrakları 'false' olarak ayarlanır.
// Bu, aynı nesnelerin tekrar gösterilmek istendiğinde listeye sorunsuzca eklenebilmesini sağlar.
for (TTextTail* pTextTail : m_CharacterTextTailList)
if (pTextTail) pTextTail->bIsOnRenderList = false;
m_CharacterTextTailList.clear();
for (TTextTail* pTextTail : m_ItemTextTailList)
if (pTextTail) pTextTail->bIsOnRenderList = false;
m_ItemTextTailList.clear();
#ifdef ENABLE_NEW_SHOP_IN_CITIES
for (auto& iter : m_ShopTextTailMap)
if (iter.second) iter.second->bRender = false;
#endif
}
void #ifdefnTextTail::UpdateDistance(const TPixelPosition& c_rCenterPosition, TTextTail* pTextTail)
{
if (!pTextTail || !pTextTail#endifer) return;
const D3DXVECTOR3& c_rv3Position = pTextTail->pOwner->GetPosition();
D3DXVECTOR2 v2Distance(c_rv3Position.x - c_rCenterPosition.x, -c_rv3Position.y - c_rCenterPosition.y);
pTextTail->fDistanceFromPlayer = D3DXVec2Length(&v2Distance);
}
void CPythonTextTail::ShowAllTextTail()
{
const float c_fTextTailShowDistance = 3500.0f;
for (auto const& [key, pTextTail] : m_CharacterTextTailMap)
{
if (pTextTail && pTextTail->fDistanceFromPlayer < c_fTextTailShowDistance)
ShowCharacterTextTail(key);
}
for (auto const& [key, pTextTail] : m_ItemTextTailMap)
{
if (pTextTail && pTextTail->fDistanceFromPlayer < c_fTextTailShowDistance)
ShowItemTextTail(key);
}
#ifdef ENABLE_NEW_SHOP_IN_CITIES
for (auto const& [key, pTextTail] : m_ShopTextTailMap)
{
if (pTextTail)
pTextTail->#ifdefr = pTextTail->fDistanceFromPlayer < c_fTextTailShowDistance;
}
#endif
}
void CPythonTextTail::ShowCharacterTextTail(DWORD VirtualID)
{
auto itor = m_CharacterTextTailMap.find(VirtualID);
if (m_Chara#endifxtTailMap.end() == itor) return;
TTextTail* pTextTail = itor->second;
if (!pTextTail) return;
// --- IYILESTIRME (PERFORMANS): O(n) olan std::find yerine O(1) olan boolean flag kontrolü yapılıyor.
if (pTextTail->bIsOnRenderList) return;
if (!pTextTail->pOwner || !pTextTail->pOwner->isShow()) return;
CInstanceBase* pInstance = CPythonCharacterManager::Instance().GetInstancePtr(pTextTail->dwVirtualID);
if (!pInstance || pInstance->IsGuildWall() || !pInstance->CanPickInstance()) return;
pTextTail->bIsOnRenderList = true; // Listeye eklendi olarak işaretle
m_CharacterTextTailList.push_back(pTextTail);
}
void CPythonTextTail::ShowItemTextTail(DWORD VirtualID)
{
auto itor = m_ItemTextTailMap.find(VirtualID);
if (m_ItemTextTailMap.end() == itor) return;
TTextTail* pTextTail = itor->second;
if (!pTextTail) return;
// --- IYILESTIRME (PERFORMANS): O(n) olan std::find yerine O(1) olan boolean flag kontrolü yapılıyor.
if (pTextTail->bIsOnRenderList) return;
pTextTail->bIsOnRenderList = true; // Listeye eklendi olarak işaretle
m_ItemTextTailList.push_back(pTextTail);
}
bool CPythonTextTail::isIn(CPythonTextTail::TTextTail* pSource, CPythonTextTail::TTextTail* pTarget)
{
if (!pSource || !pTarget) return false;
float x1Source = pSource->x + pSource->xStart;
float y1Source = pSource->y + pSource->yStart;
float x2Source = pSource->x + pSource->xEnd;
float y2Source = pSource->y + pSource->yEnd;
float x1Target = pTarget->x + pTarget->xStart;
float y1Target = pTarget->y + pTarget->yStart;
float x2Target = pTarget->x + pTarget->xEnd;
float y2Target = pTarget->y + pTarget->yEnd;
return (x1Source <= x2Target && x2Source >= x1Target && y1Source <= y2Target && y2Source >= y1Target);
}
void CPythonTextTail::RegisterCharacterTextTail(DWORD dwGuildID, DWORD dwVirtualID, const D3DXCOLOR& c_rColor, float fAddHeight)
{
CInstanceBase* pCharacterInstance = CPythonCharacterManager::Instance().GetInstancePtr(dwVirtualID);
if (!pCharacterInstance) return;
TTextTail* pTextTail = RegisterTextTail(dwVirtualID, pCharacterInstance->GetNameString(), pCharacterInstance->GetGraphicThingInstancePtr(), pCharacterInstance->GetGraphicThingInstanceRef().GetHeight() + fAddHeight, c_rColor);
if (!pTextTail) return;
pTextTail->pTextInstance->SetOutline(true);
pTextTail->pTextInstance->SetVerticalAlign(CGraphicTextInstance::VERTICAL_ALIGN_BOTTOM);
#ifdef GAMEMASTER_OUTLINE_COLOR
if (pCharacterInstance->IsGameMaster())
pTextTail->pTextInstance->SetOutLineColor(0.5f, 0.0f, 0.7f, 1.0f);
##ifdef
if (0 != dwGuildID)
{
std::string strGuildName;
if (CPythonGuild::Instance().GetGuildName(dwGuildID, &strGuildName))
#endif
pTextTail->pMarkInstance = CGraphicMarkInstance::New();
DWORD dwMarkID = CGuildMarkManager::Instance().GetMarkID(dwGuildID);
if (dwMarkID != CGuildMarkManager::INVALID_MARK_ID)
{
std::string markImagePath;
if (CGuildMarkManager::Instance().GetMarkImageFilename(dwMarkID / CGuildMarkImage::MARK_TOTAL_COUNT, markImagePath))
{
pTextTail->pMarkInstance->SetImageFileName(markImagePath.c_str());
pTextTail->pMarkInstance->Load();
pTextTail->pMarkInstance->SetIndex(dwMarkID % CGuildMarkImage::MARK_TOTAL_COUNT);
}
}
pTextTail->pGuildNameTextInstance = CGraphicTextInstance::New();
pTextTail->pGuildNameTextInstance->SetTextPointer(ms_pFont);
pTextTail->pGuildNameTextInstance->SetOutline(true);
pTextTail->pGuildNameTextInstance->SetHorizonalAlign(CGraphicTextInstance::HORIZONTAL_ALIGN_CENTER);
pTextTail->pGuildNameTextInstance->SetVerticalAlign(CGraphicTextInstance::VERTICAL_ALIGN_BOTTOM);
pTextTail->pGuildNameTextInstance->SetValue(strGuildName.c_str());
pTextTail->pGuildNameTextInstance->SetColor(c_TextTail_Guild_Name_Color.r, c_TextTail_Guild_Name_Color.g, c_TextTail_Guild_Name_Color.b);
pTextTail->pGuildNameTextInstance->Update();
}
}
#ifdef ENABLE_PLAYTIME_ICON
if (pCharacterInstance->IsPC())
{
char szRutbe[MAX_PATH];
snprintf(szRutbe, sizeof(szRutbe), "%s", p#ifdefterInstance->GetMyTimeIcon());
pTextTail->pPlayTimeInstance = CGraphicImageInstance::New();
pTextTail->pPlayTimeInstance->SetImagePointer(static_cast<CGraphicImage*>(CResourceManager::Instance().GetResourcePointer(szRutbe)));
}
#endif
m_CharacterTextTailMap.insert({dwVirtualID, pTextTail});
}
void CPythonTextTail::RegisterItemTextTail(DWORD VirtualID, const char* c_szText,#endifhicObjectInstance* pOwner)
{
TTextTail* pTextTail = RegisterTextTail(VirtualID, c_szText, pOwner, c_TextTail_Name_Position, c_TextTail_Item_Color);
if (pTextTail)
m_ItemTextTailMap.insert({VirtualID, pTextTail});
}
#ifdef ENABLE_NEW_SHOP_IN_CITIES
void CPythonTextTail::RegisterShopInstanceTextTail(DWORD dwVirtualID, const char* c_szName, CGraphicObjectInstance* pOw#ifdef
TTextTail* pTextTail = RegisterShopTextTail(dwVirtualID, c_szName, pOwner);
if (pTextTail)
m_ShopTextTailMap.insert({dwVirtualID, pTextTail});
}
#endif
// ... (Diğer fonksiyonlar) ...
void CPythonTextTail::SetItemTextTailOwner(DWORD dwVID, const char* c_szName)
{
auto itor = m_ItemTextTailM#endifd(dwVID);
if (m_ItemTextTailMap.end() == itor) return;
TTextTail* pTextTail = itor->second;
if (!pTextTail) return;
if (c_szName && c_szName[0] != '\0')
{
if (!pTextTail->pOwnerTextInstance)
{
pTextTail->pOwnerTextInstance = CGraphicTextInstance::New();
}
std::string strName = c_szName;
static const std::string& strOwnership = ApplicationStringTable_GetString(IDS_POSSESSIVE_MORPHENE).empty() ? "'s" : ApplicationStringTable_GetString(IDS_POSSESSIVE_MORPHENE);
strName += strOwnership;
pTextTail->pOwnerTextInstance->SetTextPointer(ms_pFont);
pTextTail->pOwnerTextInstance->SetHorizonalAlign(CGraphicTextInstance::HORIZONTAL_ALIGN_CENTER);
pTextTail->pOwnerTextInstance->SetValue(strName.c_str());
pTextTail->pOwnerTextInstance->SetColor(1.0f, 1.0f, 0.0f);
pTextTail->pOwnerTextInstance->Update();
int xOwnerSize, yOwnerSize;
pTextTail->pOwnerTextInstance->GetTextSize(&xOwnerSize, &yOwnerSize);
pTextTail->yStart = c_fItemNameBoxYStart;
pTextTail->yEnd += float(yOwnerSize + 4);
pTextTail->xStart = fMIN(pTextTail->xStart, float(-xOwnerSize / 2 - 1));
pTextTail->xEnd = fMAX(pTextTail->xEnd, float(xOwnerSize / 2 + 1));
}
else
{
if (pTextTail->pOwnerTextInstance)
{
CGraphicTextInstance:elete(pTextTail->pOwnerTextInstance);
pTextTail->pOwnerTextInstance = nullptr;
}
int xSize, ySize;
pTextTail->pTextInstance->GetTextSize(&xSize, &ySize);
pTextTail->xStart = (float)(-xSize / 2 - 2);
pTextTail->yStart = c_fItemNameBoxYStart;
pTextTail->xEnd = (float)(xSize / 2 + 2);
pTextTail->yEnd = (float)ySize;
}
}
void CPythonTextTail:eleteCharacterTextTail(DWORD VirtualID)
{
auto itorCharacter = m_CharacterTextTailMap.find(VirtualID);
if (m_CharacterTextTailMap.end() != itorCharacter)
{
if (itorCharacter->second)
{
itorCharacter->second->bIsOnRenderList = false; // --- IYILESTIRME: Bayrağı sıfırla
m_CharacterTextTailList.remove(itorCharacter->second);
DeleteTextTail(itorCharacter->second);
}
m_CharacterTextTailMap.erase(itorCharacter);
}
auto itorChat = m_ChatTailMap.find(VirtualID);
if (m_ChatTailMap.end() != itorChat)
{
if (itorChat->second) DeleteTextTail(itorChat->second);
m_ChatTailMap.erase(itorChat);
}
}
void CPythonTextTail:eleteItemTextTail(DWORD VirtualID)
{
auto itor = m_ItemTextTailMap.find(VirtualID);
if (m_ItemTextTailMap.end() != itor)
{
if (itor->second)
{
itor->second->bIsOnRenderList = false; // --- IYILESTIRME: Bayrağı sıfırla
m_ItemTextTailList.remove(itor->second);
DeleteTextTail(itor->second);
}
m_ItemTextTailMap.erase(itor);
}
}
CPythonTextTail::TTextTail* CPythonTextTail::RegisterTextTail(DWORD dwVirtualID, const char* c_szText, CGraphicObjectInstance* pOwner, float fHeight, const D3DXCOLOR& c_rColor)
{
TTextTail* pTextTail = m_TextTailPool.Alloc();
if (!pTextTail) return nullptr;
// --- IYILESTIRME: Tüm pointer'lar ve bayraklar burada başlatılır
pTextTail->bIsOnRenderList = false;
pTextTail->dwVirtualID = dwVirtualID;
pTextTail->pOwner = pOwner;
pTextTail->fHeight = fHeight;
pTextTail->Color = c_rColor;
pTextTail->fDistanceFromPlayer = 0.0f;
pTextTail->x = -100.0f;
pTextTail->y = -100.0f;
pTextTail->z = 0.0f;
pTextTail->pTextInstance = CGraphicTextInstance::New();
if (pTextTail->pTextInstance)
{
pTextTail->pTextInstance->SetTextPointer(ms_pFont);
pTextTail->pTextInstance->SetHorizonalAlign(CGraphicTextInstance::HORIZONTAL_ALIGN_CENTER);
pTextTail->pTextInstance->SetValue(c_szText);
pTextTail->pTextInstance->SetColor(c_rColor.r, c_rColor.g, c_rColor.b);
pTextTail->pTextInstance->Update();
int xSize, ySize;
pTextTail->pTextInstance->GetTextSize(&xSize, &ySize);
pTextTail->xStart = (float)(-xSize / 2 - 2);
pTextTail->yStart = c_fItemNameBoxYStart;
pTextTail->xEnd = (float)(xSize / 2 + 2);
pTextTail->yEnd = (float)ySize;
}
#ifdef __ENABLE_NEW_OFFLINESHOP__
#ifdef ENABLE_NEW_SHOP_IN_CITIES
pTextTail->bIsShop = false;
pTextTail->bRender = false;
#endif
#endif
pTextTail->pOwne#ifdefnstance = nullptr;
pText#ifdefpMarkInstance = nullptr;
pTextTail->pGuildNameTextInstance = nullptr;
pTextTail->pT#endifx#endifnce = nullptr;
pTextTail->pLevelTextInstance = nullptr;
#ifdef TITLE_SYSTEM
pTextTail->psTitleNameTextInstance = nullptr;
#endif
#ifdef ENABLE_PLAYTIME_ICON
pTextTail->pPlayTimeInstance = nullptr;
#endif
retu#ifdefxtTail;
}
// ... (Diğer fonksiyonlar) ...
#ifdef ENABLE_NEW_SH#endifC#ifdefbool CPythonTextTail::GetPickedNewShop(DWORD* pdwVID)
{
*pdwVI#endif
POINT p;
if (!CPythonApplication::Instance().GetMous#ifdefion(&p))
return false;
for (auto const& [key, pTextTail] : m_ShopTextTailMap)
{
if (pTextTail &&
p.x >= pTextTail->x + (pTextTail->xStart - c_fShopBoxPadding) && p.x <= pTextTail->x + (pTextTail->xEnd + c_fShopBoxPadding) &&
p.y >= pTextTail->y + (pTextTail->yStart - c_fShopBoxPadding) && p.y <= pTextTail->y + (pTextTail->yEnd + c_fShopBoxPadding))
{
*pdwVID = key;
return true;
}
}
return false;
}
#endif
// --- IYILESTIRME (GÜVENLİK NOTU):
// TTextTail yapısına yeni bir pointer eklendiğinde, bellek sızıntısı
// olmaması için bu fonksiyonda CGraphic...:elete(#endifsilinmeli
// ve ardından nullptr'a ayarlanmalıdır.
void CPythonTextTail:eleteTextTail(TTextTail* pTextTail)
{
if (!pTextTail) return;
if (pTextTail->pTextInstance) CGraphicTextInstance:elete(pTextTail->pTextInstance);
if (pTextTail->pOwnerTextInstance) CGraphicTextInstance:elete(pTextTail->pOwnerTextInstance);
if (pTextTail->pMarkInstance) CGraphicMarkInstance:elete(pTextTail->pMarkInstance);
if (pTextTail->pGuildNameTextInstance) CGraphicTextInstance:elete(pTextTail->pGuildNameTextInstance);
if (pTextTail->pTitleTextInstance) CGraphicTextInstance:elete(pTextTail->pTitleTextInstance);
if (pTextTail->pLevelTextInstance) CGraphicTextInstance:elete(pTextTail->pLevelTextInstance);
#ifdef TITLE_SYSTEM
if (pTextTail->psTitleNameTextInstance) CGraphicTextInstance:elete(pTextTail->psTitleNameTextInstance);
#endif
#ifdef ENABLE_PLAYTIME_ICON
if (pTextTa#ifdeflayTimeInstance) CGraphicImageInstance:elete(pTextTail->pPlayTimeInstance);
#endif
pTextTail->pTextInstance = nullptr#endifp#ifdefil->pOwnerTextInstance = nullptr;
pTextTail->pMarkInstance = nullptr;
pTextTail->pGuildNameTextInstance = nullptr#endifpTextTail->pTitleTextInstance = nullptr;
pTextTail->pLevelTextInstance = nullptr;
#ifdef TITLE_SYSTEM
pTextTail->psTitleNameTextInstance = nullptr;
#endif
#ifdef ENABLE_PLAYTIME_ICON
pTextTail->pPlayTimeInstance = nullptr;
#endif
m_TextTailPool.Free#ifdefTail);
}
// ... (Diğer tüm fonksiyonlar aynı kalacak, buraya e#endifo#ifdef..
void CPythonTextTail::Clear()
{
for (auto const& [key, va#endif_CharacterTextTailMap) DeleteTextTail(val);
m_CharacterTextTailMap.clear();
m_CharacterTextTailList.clear();
for (auto const& [key, val] : m_ItemTextTailMap) DeleteTextTail(val);
m_ItemTextTailMap.clear();
m_ItemTextTailList.clear();
#ifdef ENABLE_NEW_SHOP_IN_CITIES
for (auto const& [key, val] : m_ShopTextTailMap) DeleteTextTail(val);
m_ShopTextTailMap.clear();
#endif
for (auto const& [key, val] : m_C#ifdeflMap) DeleteTextTail(val);
m_ChatTailMap.clear();
m_TextTailPool.Clear();
}
// ... (Constructor, Destructor ve Initialize #endifalan fonksiyonlar)
[/CODE]
Ne gibi bir hata veriyor clienti derlerken?bu verdigin fix hatalı : build almıyor
dostum egik cizgi hatası veriyor build alamadım orjinde build oluyor senin verdiginle olmuyorNe gibi bir hata veriyor clienti derlerken?
Eğik çizgi ne dostum özelden bi foto atar mısın bana?dostum egik cizgi hatası veriyor build alamadım orjinde build oluyor senin verdiginle olmuyor
Şu an konuyu görüntüleyenler (Toplam : 0, Üye: 0, Misafir: 0)
Benzer konular
- Cevaplar
- 259
- Görüntüleme
- 35K
- Cevaplar
- 201
- Görüntüleme
- 34K
- Cevaplar
- 1
- Görüntüleme
- 354
- Cevaplar
- 84
- Görüntüleme
- 9K
- Cevaplar
- 2
- Görüntüleme
- 259
