- Mesaj
- 741
- Çözümler
- 22
- Beğeni
- 814
- Puan
- 829
- Ticaret Puanı
- 0
konuya daha önce bunu yazdım mı bilmiyorum ama oyuna sms sistemi eklemiş adamlar, bildiğin arkadaş listende ki adamın telefonuna sms atabiliyormuşsun oyun içi
Projedeki dosya sayısı arttıkça modülerlik zorlaşıyor. Kafada tasarlamak o anki ruh haline göre yetersiz kalabiliyor. Yeni bir class, birkaç fonksiyon yazmaya kalkışırsın, yazarken de istemsizce önceden yazdığı kodu okursun ve bunların gereksiz olduğunu farkedebilirsin. Bunun yerine kabaca yorum satırı ile pseudo code gibi konuşma diliyle yazarsın. Mantıksız bir şey gözükmüyorsa yazmaya başlarsın. Tahminimce o arkadaş da böyle bir düşüncedeydi.Ymir'den ders niteliğinde muhteşem faydalı ve açıklayıcı bir yorum satırı kullanımı örneği
27048 eklentisini görüntüle


Bunu düzeltilmiş fix şeklinde paylaşma şansın var mı? Daha önce fix diye paylaşıldı ama işe yaramıyorduaz önceki foto çok dandikti güneşi aşağı çektim bunu da açtım daha güzel duruyo sanki27931 eklentisini görüntüle
nerde paylaşıldı görmedim de forumda paylaştım nasıl yapılacağınuBunu düzeltilmiş fix şeklinde paylaşma şansın var mı? Daha önce fix diye paylaşıldı ama işe yaramıyordu
BYTE abLevelRange[2];
// Level 결정 범위: [0] ~ [1]
Level belirleme aralığı
void CNonPlayerCharacterInfo::GetLevelRangeByVID(...)
{
*pbyLowLevelLimit = p->abLevelRange[0];
*pbyHighLevelLimit = p->abLevelRange[1];
}
void CNonPlayerCharacterInfo::GetLevelRangeByMapIndex(...)
{
*pbyLowLevelLimit = p->abLevelRange[0];
*pbyHighLevelLimit = p->abLevelRange[1];
}
"%d:%s(%02d~%02d):%d"
2:Wild Dog(01~04):101
BYTE abLevelRange[2];
BYTE bLevel;
Yabani Köpek
Level 1~4
Yabani Köpek (1~4)
Ork (15~20)
bool CGraphicImageTexture::CreateFromMemoryFile(UINT bufSize, const void* c_pvBuf, D3DFORMAT d3dFmt, DWORD dwFilter)
{
assert(ms_lpd3dDevice != NULL);
assert(m_lpd3dTexture == NULL);
static CDXTCImage image;
if (image.LoadHeaderFromMemory((const BYTE*) c_pvBuf)) // DDSÀΰ¡ È®ÀÎ
{
return (CreateDDSTexture(image, (const BYTE*) c_pvBuf));
}
else
{
D3DXIMAGE_INFO imageInfo;
if (FAILED(D3DXCreateTextureFromFileInMemoryEx(
ms_lpd3dDevice,
c_pvBuf,
bufSize,
D3DX_DEFAULT,
D3DX_DEFAULT,
D3DX_DEFAULT,
0,
d3dFmt,
D3DPOOL_MANAGED,
dwFilter,
dwFilter,
0xffff00ff,
&imageInfo,
NULL,
&m_lpd3dTexture)))
{
TraceError("CreateFromMemoryFile: Cannot create texture");
return false;
}
m_width = imageInfo.Width;
m_height = imageInfo.Height;
D3DFORMAT format = imageInfo.Format;
switch (imageInfo.Format)
{
case D3DFMT_A8R8G8B8:
format = D3DFMT_A4R4G4B4;
break;
case D3DFMT_X8R8G8B8:
case D3DFMT_R8G8B8:
format = D3DFMT_A1R5G5B5;
break;
}
}
m_bEmpty = false;
return true;
}
D3DFORMAT format = imageInfo.Format;
switch (imageInfo.Format)
{
case D3DFMT_A8R8G8B8:
format = D3DFMT_A4R4G4B4;
break;
case D3DFMT_X8R8G8B8:
case D3DFMT_R8G8B8:
format = D3DFMT_A1R5G5B5;
break;
}
D3DXCreateTextureFromFileInMemoryEx(..., &m_lpd3dTexture)
void CHARACTER::ComputeBattlePoints()
int iShowDef = GetLevel() + GetPoint(POINT_HT); // For Ymir(õ¸¶)
int iDef = GetLevel() + (int)(GetPoint(POINT_HT) / 1.25); // For Other
...
if (LC_IsYMIR())
{
PointChange(POINT_DEF_GRADE, iShowDef + iArmor);
}
else
{
PointChange(POINT_DEF_GRADE, iDef + iArmor);
PointChange(POINT_CLIENT_DEF_GRADE, (iShowDef + iArmor) - GetPoint(POINT_DEF_GRADE));
}
sys_log(0, "DEF=%d SHOW=%d CLIENT=%d",
GetPoint(POINT_DEF_GRADE),
iShowDef + iArmor,
GetPoint(POINT_CLIENT_DEF_GRADE));
if (pAttacker->IsPC())
{
int iEmpire = pAttacker->GetEmpire();
long lMapIndex = pAttacker->GetMapIndex();
int iMapEmpire = SECTREE_MANAGER::instance().GetEmpireFromMapIndex(lMapIndex);
if (iEmpire && iMapEmpire && iEmpire != iMapEmpire)
{
dam = dam * 9 / 10; // Hasarı %10 oranında azaltır (%90'a düşürür)
}
}
Bu da YMIR localesinin kodu, sadece kore serverinde aktifOyuncular farklı bayrak köylere gidince -%10'luk bir hasar dezavantajı alıyormuş. Geçen gün ilk defa tesadüfen gördüm.
C++ Kodu:if (pAttacker->IsPC()) { int iEmpire = pAttacker->GetEmpire(); long lMapIndex = pAttacker->GetMapIndex(); int iMapEmpire = SECTREE_MANAGER::instance().GetEmpireFromMapIndex(lMapIndex); if (iEmpire && iMapEmpire && iEmpire != iMapEmpire) { dam = dam * 9 / 10; // Hasarı %10 oranında azaltır (%90'a düşürür) } }
Benim eskiden almış olduğum mainline bir altyapıda aktif. Muhtemelen bence bir çok fileste aktiftir.Bu da YMIR localesinin kodu, sadece kore serverinde aktif
Hadi def i POINT_CLIENT_DEF_GRADE ile çekebiliyon Str hiç yok bu yüzden levelli petlerin verdiği def ve str bonusu hep yanlış. Şöyle bir çözüm bulmuştum ;Bugün locale_Ymir kodlarına bakarken farkettim. Server, aslında clientte gözüken Defans değerini kullanmıyor. Oyuncuya göstermeden azaltıyor.
C++:void CHARACTER::ComputeBattlePoints()
fonksiyonunda böyle bir kod bloğu var:
C++:int iShowDef = GetLevel() + GetPoint(POINT_HT); // For Ymir(õ¸¶) int iDef = GetLevel() + (int)(GetPoint(POINT_HT) / 1.25); // For Other ... if (LC_IsYMIR()) { PointChange(POINT_DEF_GRADE, iShowDef + iArmor); } else { PointChange(POINT_DEF_GRADE, iDef + iArmor); PointChange(POINT_CLIENT_DEF_GRADE, (iShowDef + iArmor) - GetPoint(POINT_DEF_GRADE)); }
YMIR branchi doğrudan defansı referans alırken genelde bizim kullandığımız branch başka bir hesap yapıyor.
Ben de basit bir sys_log ekledim test için:
C++:sys_log(0, "DEF=%d SHOW=%d CLIENT=%d", GetPoint(POINT_DEF_GRADE), iShowDef + iArmor, GetPoint(POINT_CLIENT_DEF_GRADE));
Ve test için oyuns girdiğimde gördüm ki gerçekten de Clientte gözüken değerden daha düşük defans işliyor Server.
31098 eklentisini görüntüle
Serverdeki log:
DEF=877 SHOW=888 CLIENT=888
Yani 888 gözüken defansı server 877 olarak işliyor. Neden böyle bir şey yapılmış bilemedim. Ben bu mantığı kaldırdım.
void CNewPet::GiveBuff()
{
if (!m_pkChar || !m_petItem)
return;
// Buff uygulanacak temel değerler
int baseValues[3] =
{
m_pkOwner->GetMaxHP(), // Maksimum HP
m_pkOwner->GetPoint(POINT_DEF_GRADE), // Savunma değeri
m_pkOwner->GetPoint(POINT_ATT_GRADE) // Saldırı...
Bu her sunucuda aktif değiştirmedilerse ben ve çevremdeki bir çok oyuncu bunu biliyor bence çok da saçma bir durum değil gibi geldi bana.Bu da YMIR localesinin kodu, sadece kore serverinde aktif