- Discord
- pvpers.gg
Metin2 Demirci Alnını Silerken Artı Basma Şansını Yükselt
Metin2 oyuncuları arasında yıllardır konuşulan ve bir nevi uğur haline gelen bir totem vardır: "Demirci alnını silerken + basarsan geçer!"Kimileri bu anı şansın dönüm noktası saydı, kimileri ise sadece eğlenceli bir efsane olarak gördü. Ama artık bu gelenek kodlara işlendi! Yeni sistem sayesinde demircinin alnını sildiği o kısa zaman dilimi gerçekten de geliştirme ihtimalinizi artırıyor.
Şimdi gelin, bu totemin nasıl gerçeğe dönüştüğüne ve oyuna nasıl entegre edildiğine birlikte bakalım...
game/src/packet.hArat:
Kod:
} TPacketCGRefine;
Üzerine ekle:
Kod:
bool extra_luck;
game/src/input_main.cppArat:
Kod:
ch->DoRefine(item);
Değiştir:
Kod:
ch->DoRefine(item, false, p->extra_luck);
game/src/char.hArat:
Kod:
bool DoRefine(LPITEM item, bool bMoneyOnly = false);
Değiştir:
Kod:
bool DoRefine(LPITEM item, bool bMoneyOnly = false, bool bExtraLuck = false);
game/src/char_item.cppArat:
Kod:
bool CHARACTER::DoRefine(LPITEM item, bool bMoneyOnly)
Değiştir:
Kod:
bool CHARACTER::DoRefine(LPITEM item, bool bMoneyOnly, bool bExtraLuck)
Arat:
Kod:
if (IsRefineThroughGuild() || bMoneyOnly)
prob -= 10;
Altına ekle:
Kod:
if (bExtraLuck)
prob -= 10;
client/UserInterface/PythonNetworkStreamModule.cppclient/gamelib/ActorInstanceMotion.cppArat:
Kod:
DWORD CActorInstance::__GetCurrentMotionKey()
{
return m_kCurMotNode.dwMotionKey;
}
Altına ekle:
Kod:
bool CActorInstance::IsMotionInMidFrame() const
{
if (!m_pkCurRaceMotionData)
return false;
static constexpr size_t FRAME_GAP = 20;
if (m_kCurMotNode.dwcurFrame > FRAME_GAP &&
m_kCurMotNode.dwcurFrame < m_kCurMotNode.dwFrameCount &&
(m_kCurMotNode.dwFrameCount - m_kCurMotNode.dwcurFrame) > FRAME_GAP)
{
return true;
}
return false;
}
std::string CActorInstance::GetCurrentMotionFilename() const
{
if (!m_pkCurRaceMotionData)
return {};
return m_pkCurRaceMotionData->GetMotionFileName();
}
client/gamelib/ActorInstance.hclient/UserInterface/InstanceBaseMotion.cppArat:
Kod:
void CInstanceBase::SetLoopMotion(WORD wMotion, float fBlendTime/* =0.1f */, float fSpeedRatio)
{
m_GraphicThingInstance.SetLoopMotion(wMotion, fBlendTime, fSpeedRatio);
}
Altına ekle:
Kod:
bool CInstanceBase::IsMotionInMidFrame() const
{
return m_GraphicThingInstance.IsMotionInMidFrame();
}
std::string CInstanceBase::GetCurrentMotionName() const
{
return m_GraphicThingInstance.GetCurrentMotionFilename();
}
client/UserInterface/InstanceBase.hArat:
Kod:
void SetEndStopMotion();
Altına ekle:
Kod:
bool IsMotionInMidFrame() const;
std::string GetCurrentMotionName() const;
client/UserInterface/PythonNetworkStreamPhaseGame.cppArat:
Kod:
bool CPythonNetworkStream::SendRefinePacket(BYTE byPos, BYTE byType)
Değiştir:
Kod:
bool CPythonNetworkStream::SendRefinePacket(BYTE byPos, BYTE byType, bool bExtraLuck)
Arat:
Kod:
kRefinePacket.type = byType;
Altına ekle:
Kod:
kRefinePacket.extra_luck = bExtraLuck;
client/UserInterface/Packet.hYıllardır oyuncuların sezgileriyle yönettiği bir alışkanlık artık somut bir oyun mekaniğine dönüştü.
Demircinin alnını sildiği o anı yakalayarak + basmak, sadece nostaljik bir refleks değil; başarı oranınızı doğrudan etkileyen stratejik bir hamle haline geldi.
Şimdi tek yapmanız gereken gözlerinizi dört açmak ve o kısa “an”ı kaçırmamak. Unutmayın, bazen bir yükseltme, yalnızca doğru zamanda basılan bir tuşla olur!
