Jump to content
Araştır
  • Diğer seçenekler ...
Sonuçları bul ...
Sonuçları bul ...
KODevelopers

Yere vurma Skilleri Hk.

Önerilen Mesajlar

Merhaba arkadaşlar ;

Warrior yere vurma skillerini seri şekilde yere vurabiliyorum. DB taraflı kontroller yaptım bi problem gözükmüyor. Sourcelere baktıgımda
pType->bDuration == 0 koşulunun altına girip skilli vuruyor cooldown skill barda gözüküyor fakat aynı skille tekrar bastıgımızda cooldown pasif olup skilli tekrar atıyor ve tekrar cooldown süresi full hale geliyor.

Sorunun kaynaklandığı bölge neresi olabilir ?

İletiyi paylaş


Link to post
Sitelerde Paylaş

Cooldown varsa islemi iptal gibisinden bir komut ekleyebilirsin.Anladigim kadariyla cd ye giriyor ama cd aktif iken ne islem yapilacagi ya belli degil.
Tabi ki sorun baska birsey dende kaynakli olabilir, Kodu buraya atarsan bilgisi olan birisi hatayi daha rahat gorebilir.

İletiyi paylaş


Link to post
Sitelerde Paylaş
Alıntı
Sorunu çözdüm sourcede 2 farklı yerde cd kaydı yapıyor tablo değerleriyle oynayarak hallettim. Teşekkürler


selam dostum skıll executetype3 e kadar gelıyo breakpoınt ıle kontrol ettım

bool MagicInstance::ExecuteType3()

{
if (pSkill == nullptr)
return false;

_MAGIC_TYPE3* pType = g_pMain->m_Magictype3Array.GetData(nSkillID);
if (pType == nullptr)
return false;

int damage = 0, duration_damage = 0;
vector casted_member;

if (sTargetID == -1)
{
std::vector unitList;
g_pMain->GetUnitListFromSurroundingRegions(pSkillCaster, &unitList);
if(pType->sFirstDamage > 0 || pType->sTimeDamage > 0)
casted_member.push_back(pSkillCaster);
foreach (itr, unitList)
{
Unit * pTarget = g_pMain->GetUnitPtr(*itr);

if(pTarget == nullptr)
continue;

if (pTarget->isPlayer() && TO_USER(pTarget)->isGM())
continue;

if (pSkillCaster != pTarget
&& !pTarget->isDead() && !pTarget->isBlinking() && pTarget->isAttackable()
&& CMagicProcess::UserRegionCheck(pSkillCaster, pTarget, pSkill, pType->bRadius, sData[0], sData[2]))
casted_member.push_back(pTarget);
}

if (casted_member.empty() || (sTargetID == -1 && casted_member.empty()))
{
SendSkill();
return true;
}
}
else
{
if (pSkillTarget == nullptr
|| pSkillTarget->isDead()
|| (pSkillTarget->isPlayer()
&& TO_USER(pSkillTarget)->isBlinking()))
return false;

casted_member.push_back(pSkillTarget);
}

if (pType->bDirectType == 18)
{
if (!pSkillCaster->isPlayer()
|| !TO_USER(pSkillCaster)->hasFullAngerGauge())
return false;

TO_USER(pSkillCaster)->UpdateAngerGauge(0);
}

sData[1] = 1;
foreach (itr, casted_member)
{
Unit * pTarget = *itr;

if(pTarget == nullptr)
continue;

if (pSkill->sRange > 0
&& (pSkillCaster->GetDistanceSqrt(pTarget) >= (float)pSkill->sRange))
continue;

if ((pType->sFirstDamage bDirectType == 1 || pType->bDirectType == 8)
&& (nSkillID && (pType->bDirectType != 11 && pType->bDirectType != 13))
damage = GetMagicDamage(pTarget, pType->sFirstDamage, pType->bAttribute);
else
damage = pType->sFirstDamage;

if (damage m_bBlockMagic)
continue;

if (pSkillCaster->isPlayer())
{
if (pSkillCaster->GetZoneID() == ZONE_SNOW_BATTLE && g_pMain->m_byBattleOpen == SNOW_BATTLE)
damage = -10;
}

bool mSendStunCold = true;
if (pType->bDirectType == 1 && nSkillID && (pType->bAttribute == AttributeLightning || pType->bAttribute == AttributeIce)
&& pTarget->isPlayer())
{
if (pSkill->bSuccessRate bSuccessRate mSendStunCold = false;
else
{
uint16 nMaxRessitance = 250;
uint16 nTargetResistance = pType->bAttribute == AttributeIce ? pTarget->m_sColdR : pTarget->m_sLightningR;

if (nTargetResistance > nMaxRessitance)
nMaxRessitance = nTargetResistance;

if (nTargetResistance >= myrand(0, nMaxRessitance - nTargetResistance))
mSendStunCold = false;
}
}
if (pType->bDuration == 0)
{
switch (pType->bDirectType)
{
case 1:
if ((pTarget->isNPC() && pType->sTimeDamage > 0) || (pTarget->isNPC() && pType->sFirstDamage > 0))
return false;


if (damage > 0 && pSkillCaster->hasBuff(BUFF_TYPE_DAMAGE_DOUBLE)
&& CheckPercent(500))
damage *= 2;
/*
if (damage > 0 && pTarget->isDevil()) //Created by Anderson
{
if (pTarget->haveSkill()) //Edited by Obede
{
damage = 250 * damage / 100;;
}
else if (pTarget->haveSkill2())
{
damage = 280 * damage / 100;
}
else
damage *= 2;
}*/

pTarget->HpChangeMagic(damage, pSkillCaster, (AttributeType) pType->bAttribute);

if (pTarget->m_bReflectArmorType != 0 && pTarget != pSkillCaster && damage ReflectDamage(damage, pTarget);

break;
case 2:
if (!pTarget->isDead() && pTarget->isPlayer())
pTarget->MSpChange(pType->sFirstDamage);
else if (!pTarget->isDead())
pTarget->HpChange(pType->sFirstDamage,pSkillCaster);
break;
case 3:
pTarget->MSpChange(damage);
break;

case 4:
if (pTarget->isPlayer())
{
if (damage > 0)
TO_USER(pTarget)->ItemWoreOut(REPAIR_ALL, damage);
else
TO_USER(pTarget)->ItemWoreOut(ACID_ALL, -damage);
}
break;

case 5:
if (pType->sFirstDamage damage = (pType->sFirstDamage * pTarget->GetHealth()) / -100;
else
damage = (pTarget->GetMaxHealth() * (pType->sFirstDamage - 100)) / 100;

pTarget->HpChangeMagic(damage, pSkillCaster);
break;

case 8:
if (pType->sFirstDamage > 0)
{
if (pType->sFirstDamage damage = (pTarget->GetHealth() * 100) / pType->sFirstDamage;
else
damage = (pTarget->GetMaxHealth() - 100 * 100) / pType->sFirstDamage;
}

if (!pTarget->isDead() && pTarget->isPlayer())
{
pTarget->HpChangeMagic(damage, pSkillCaster);
pSkillCaster->HpChangeMagic(-(damage));
}
else
pTarget->HpChange(damage,pSkillCaster);

break;

case 9:
if (pType->sFirstDamage damage = (pType->sFirstDamage * pTarget->GetHealth()) / -100;
else
damage = (pTarget->GetMaxHealth() * (pType->sFirstDamage - 100)) / 100;

pTarget->HpChangeMagic(damage, pSkillCaster);
if (pTarget->isPlayer())
pSkillCaster->HpChangeMagic(-(damage));
break;

case 11:
pTarget->HpChange(damage, pSkillCaster);
break;

case 12:
continue;

case 13:
if (pTarget->isPlayer() && CheckPercent(500))
{
TO_USER(pTarget)->ItemWoreOut(ATTACK, damage);
TO_USER(pTarget)->ItemWoreOut(DEFENCE, damage);
}
break;

case 16:
if (pTarget->isPlayer())
{
pTarget->MSpChange(pType->sFirstDamage);
pSkillCaster->HpChangeMagic(-(pType->sFirstDamage) / 2);
}
break;
case 17:
if (!pTarget->isNPC() && !pTarget->isDead() && pSkillCaster->GetZoneID() == ZONE_DELOS && !pSkillCaster->isDead())
{
pTarget->HpChangeMagic(pType->sFirstDamage,pSkillCaster, (AttributeType) pType->bAttribute);
}
break;
case 19:
if (pTarget->isPlayer())
{
pTarget->HpChangeMagic(damage / 10, pSkillCaster, (AttributeType) pType->bAttribute);

if (pTarget != pSkillCaster)
ReflectDamage(damage, pTarget);
}
break;
case 255:
if (TO_USER(pSkillCaster)->isPlayer())
{

}
break;
}
}
else if (pType->bDuration != 0)
{
if (pType->bDirectType == 18)
damage = -(int)(pSkillCaster->GetLevel() * 12.5);

if (damage != 0)
pTarget->HpChangeMagic(damage, pSkillCaster);

if (pTarget->isAlive())
{
CUser *pUser = TO_USER(pSkillCaster);

if (pType->bDirectType == 14)
duration_damage = (int)(pSkillCaster->GetLevel() * (1 + pSkillCaster->GetLevel() / 30.0)) + 3;
else if (pType->bDirectType == 19)
duration_damage = (pType->sTimeDamage / 10);
else if (pSkillCaster->isPlayer() && pUser->isKurPor())
duration_damage = (pType->sTimeDamage * 2);
else if (pType->sTimeDamage bAttribute != 4)
duration_damage = GetMagicDamage(pTarget, pType->sTimeDamage, pType->bAttribute);
else
duration_damage = pType->sTimeDamage;

if (duration_damage m_bBlockMagic)
continue;

if (pType->bDirectType == 18)
duration_damage = -(int)((pSkillCaster->GetLevel() * 12.5) * (pType->bDuration / 2));

for (int k = 0; k {
Unit::MagicType3 * pEffect = &pTarget->m_durationalSkills[k];

if(pEffect == nullptr)
continue;

if (pEffect->m_byUsed)
continue;

pEffect->m_byUsed = true;
pEffect->m_tHPLastTime = 0;
pEffect->m_bHPInterval = 2;

float tickCount = (float)pType->bDuration / (float)pEffect->m_bHPInterval;

if (pSkillCaster->GetZoneID() == ZONE_CHAOS_DUNGEON)
tickCount *=2;
else
tickCount = float(tickCount /1.5);

pEffect->m_sHPAmount = (int16)(duration_damage / tickCount);

pEffect->m_bTickCount = 0;
pEffect->m_bTickLimit = (uint8) tickCount;
pEffect->m_sSourceID = sCasterID;
pEffect->m_byAttribute = pType->bAttribute;
break;
}

pTarget->m_bType3Flag = true;
}

if (pTarget->isPlayer()
&& pType->sTimeDamage {
if (mSendStunCold)
TO_USER(pTarget)->SendUserStatusUpdate(pType->bAttribute == POISON_R ? USER_STATUS_POISON : USER_STATUS_DOT, USER_STATUS_INFLICT);
}
}

if (!mSendStunCold)
sData[1] = 0;

if (mSendStunCold && (LightStunSkills() && pTarget->isPlayer() || ColdSkills() && pTarget->isPlayer()))
{
MagicInstance instance;
nSkillID += 80000;
instance.nSkillID = nSkillID;
if (LightStunSkillsNot() || ColdSkillsNot() && pTarget->isPlayer())
{
if (LightStunSkillsNot())
TO_USER(pTarget)->SendUserStatusUpdate(USER_STATUS_POISON, USER_STATUS_INFLICT);
else
TO_USER(pTarget)->SendUserStatusUpdate(USER_STATUS_SPEED, USER_STATUS_INFLICT);

ExecuteType4();

_MAGIC_TYPE4 * pType2 = g_pMain->m_Magictype4Array.GetData(nSkillID);
if (pType2 == nullptr)
return false;

uint8 bResult = 1;
uint16 sDuration = pType2->sDuration;
uint8 nTargetSpeedAmount = pType2->bSpeed;

Unit * pTmp = (pSkillCaster->isPlayer() ? pSkillCaster : pTarget);
int16 sDataCopy[] =
{
sData[0], bResult, sData[2], sDuration,
sData[4], pType2->bSpeed, sData[6]
};

sDataCopy[5] = nTargetSpeedAmount;
BuildAndSendSkillPacket(pTmp, true, sCasterID, pTarget->GetID(), bOpcode, nSkillID, sDataCopy);
}
}
else if (pSkill->bType[1] == 0 || pSkill->bType[1] == 3)
BuildAndSendSkillPacket(pSkillCaster, true, sCasterID, pTarget->GetID(), bOpcode, nSkillID, sData);

if (pType->bDirectType == 1 && damage > 0 && sCasterID != sTargetID)
{
Packet result(AG_HEAL_MAGIC);
result g_pMain->Send_AIServer(&result);
}
}

if (sTargetID == -1 && pSkill->bType[0] == 3)
SendSkill();

return true;
}


kırmızı ıle boyagıdım yere gelıyor tam olarak nereye kontrol koyabılırım

tesekkurler

İletiyi paylaş


Link to post
Sitelerde Paylaş
Alıntı
Sorunu çözdüm sourcede 2 farklı yerde cd kaydı yapıyor tablo değerleriyle oynayarak hallettim. Teşekkürler


nasıl halletiğini yazsaydın şuan bizede faydası olurdu...

İletiyi paylaş


Link to post
Sitelerde Paylaş

o cooldown satirini bulsak sana tatava yapmayiz burda senin nasil yaptigini yazman soyle olmus senin sorunun database kardesim yada source kaynakli diyip gitmen biz satiri yapistirip noktasina kadar tarif ederiz oda olmadi tw ile baglaniriz tabi arkadasin hazirci olmadigini biliyosak...

İletiyi paylaş


Link to post
Sitelerde Paylaş

// Skill Cooldown Checks...
if (bOpcode != MAGIC_TYPE4_EXTEND && pCaster->m_CoolDownList.find(nSkillID) != pCaster->m_CoolDownList.end())
{
SkillCooldownList::iterator itr = pCaster->m_CoolDownList.find(nSkillID);

int64 DiffrentMilliseconds = (int64(UNIXTIME) 1000) - (int64(itr->second) 1000);

if (DiffrentMilliseconds > 0 && DiffrentMilliseconds sReCastTime * 100) && pSkill->bType[0] != 9 && !bIsRecastingSavedMagic)
return SkillUseFail;
else
pCaster->m_CoolDownList.erase(nSkillID);

aynı sorunu yaşayan arkadaşlar için... magicInstance.cpp bu satır yok ise ekleyin varsada düzenleyin...

İletiyi paylaş


Link to post
Sitelerde Paylaş
Alıntı
// Skill Cooldown Checks...
if (bOpcode != MAGIC_TYPE4_EXTEND && pCaster->m_CoolDownList.find(nSkillID) != pCaster->m_CoolDownList.end())
{
SkillCooldownList::iterator itr = pCaster->m_CoolDownList.find(nSkillID);

int64 DiffrentMilliseconds = (int64(UNIXTIME) 1000) - (int64(itr->second) 1000);

if (DiffrentMilliseconds > 0 && DiffrentMilliseconds sReCastTime * 100) && pSkill->bType[0] != 9 && !bIsRecastingSavedMagic)
return SkillUseFail;
else
pCaster->m_CoolDownList.erase(nSkillID);

aynı sorunu yaşayan arkadaşlar için... magicInstance.cpp bu satır yok ise ekleyin varsada düzenleyin...


Dostum selam

// Skill Cooldown Checks...

if (bOpcode != MAGIC_TYPE4_EXTEND && pCaster->m_CoolDownList.find(nSkillID) != pCaster->m_CoolDownList.end())
{
SkillCooldownList::iterator itr = pCaster->m_CoolDownList.find(nSkillID);

int64 DiffrentMilliseconds = (int64(UNIXTIME) * 1000) - (int64(itr->second) * 1000);

if (DiffrentMilliseconds > 0 && DiffrentMilliseconds sReCastTime * 100) && pSkill->bType[0] != 9 && !bIsRecastingSavedMagic)
return SkillUseFail;
else
pCaster->m_CoolDownList.erase(nSkillID);


Dostum selam

Dedıgın sekılde ekledım ama sorunum devam edıyor başka nereye bakabılırım yardımcı olabılırsen sevınırım.

İletiyi paylaş


Link to post
Sitelerde Paylaş

×
×
  • Yeni Oluştur...