Çok eski bir web tarayıcısı kullanıyorsunuz. Bu veya diğer siteleri görüntülemekte sorunlar yaşayabilirsiniz.. Tarayıcınızı güncellemeli veya alternatif bir tarayıcı kullanmalısınız.
Tam olarak bu fonksiyon, bunun yanında animasyonu vsde farklıdır.
Bunu test ederek geliştirebilrsin. Vuruş animasyonu okun çıkışı vs geliştirilebilir. Ben size başlangıç olarak örnek kod aşağıda bırakayım devamını siz geliştirirsiniz.
Diğer karekterler içinde yukarıda verdiğim attack fonksiyonu içerisinde düzenlemeler yaparak istediğine ulaşabilirsin.
Mesela ;
Burası okçu için geçerli, Shoot(0) olduğu için tek vuruş algılıyor. Bu case de düzenlemeler yaparak 1den fazla vuruşa sahip olabilirsin.
Şu kodları kendine göre düzenleyebilirsin ya da direk kopyala yapıştır.
char_battle.cpp:
case BATTLE_TYPE_RANGE:
FlyTarget(pkVictim->GetVID(), pkVictim->GetX(), pkVictim->GetY(), HEADER_CG_FLY_TARGETING);
iRet = Shoot(0) ? BATTLE_DAMAGE : BATTLE_NONE;
if (iRet == BATTLE_DAMAGE)
{
const int radius = 300; // 300 oyun birimi içinde
const int maxExtraTargets = 2; // hedef harici 2 moba daha
std::vector<LPCHARACTER> extraTargets;
SECTREE_MANAGER::instance().for_each_entity_inside_range(pkVictim->GetX(), pkVictim->GetY(), radius,
[&](LPENTITY ent)
{
if (!ent->IsType(ENTITY_CHARACTER))
return;
LPCHARACTER ch = (LPCHARACTER)ent;
if (ch == this || ch == pkVictim)
return;
if (!ch->IsMonster() || ch->IsDead())
return;
if (IsAttackable(ch) && CanAttack(ch))
extraTargets.push_back(ch);
if (extraTargets.size() >= maxExtraTargets)
return;
});
for (auto ch : extraTargets)
{
// Hasar oranını istersen azaltabilirsin, örneğin:
// int damage = GetDamage(pkVictim) * 0.5;
Damage(ch, pkVictim->GetLastDamage());
}
}
break;
int damage = GetDamage(pkVictim) * 0.5;
Şu satırda zaten yorum satırı var da, eğer 0.5i azaltıp ya da çoğaltırsan yanında vurduğu slotlara hasarıda ona göre azaltıp çoğaltabilirsin.
Not : Dediğim gibi tamamen test amaçlı yazdım. Bununla istediğine ulaşırsın ama animasyon olarak nasıl olur bilmiyorum. Bi dene bakalım.
Merhaba,
Metin2de karakter vuruşları atakları vs. char_battlr.cpp dosyasından gelir.
Tam olarak bu fonksiyon, bunun yanında animasyonu vsde farklıdır.
Bunu test ederek geliştirebilrsin. Vuruş animasyonu okun çıkışı vs geliştirilebilir. Ben size başlangıç olarak örnek kod aşağıda bırakayım devamını siz geliştirirsiniz.
Diğer karekterler içinde yukarıda verdiğim attack fonksiyonu içerisinde düzenlemeler yaparak istediğine ulaşabilirsin.
Mesela ;
Burası okçu için geçerli, Shoot(0) olduğu için tek vuruş algılıyor. Bu case de düzenlemeler yaparak 1den fazla vuruşa sahip olabilirsin.
Şu kodları kendine göre düzenleyebilirsin ya da direk kopyala yapıştır.
char_battle.cpp:
case BATTLE_TYPE_RANGE:
FlyTarget(pkVictim->GetVID(), pkVictim->GetX(), pkVictim->GetY(), HEADER_CG_FLY_TARGETING);
iRet = Shoot(0) ? BATTLE_DAMAGE : BATTLE_NONE;
if (iRet == BATTLE_DAMAGE)
{
const int radius = 300; // 300 oyun birimi içinde
const int maxExtraTargets = 2; // hedef harici 2 moba daha
std::vector<LPCHARACTER> extraTargets;
SECTREE_MANAGER::instance().for_each_entity_inside_range(pkVictim->GetX(), pkVictim->GetY(), radius,
[&](LPENTITY ent)
{
if (!ent->IsType(ENTITY_CHARACTER))
return;
LPCHARACTER ch = (LPCHARACTER)ent;
if (ch == this || ch == pkVictim)
return;
if (!ch->IsMonster() || ch->IsDead())
return;
if (IsAttackable(ch) && CanAttack(ch))
extraTargets.push_back(ch);
if (extraTargets.size() >= maxExtraTargets)
return;
});
for (auto ch : extraTargets)
{
// Hasar oranını istersen azaltabilirsin, örneğin:
// int damage = GetDamage(pkVictim) * 0.5;
Damage(ch, pkVictim->GetLastDamage());
}
}
break;
int damage = GetDamage(pkVictim) * 0.5;
Şu satırda zaten yorum satırı var da, eğer 0.5i azaltıp ya da çoğaltırsan yanında vurduğu slotlara hasarıda ona göre azaltıp çoğaltabilirsin.
Not : Dediğim gibi tamamen test amaçlı yazdım. Bununla istediğine ulaşırsın ama animasyon olarak nasıl olur bilmiyorum. Bi dene bakalım.