KODevelopers 438 #1 Oluşturuldu: Mart 16, 2018 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 ? Mesajı raporla İletiyi paylaş Link to post Sitelerde Paylaş
Maxim 33 #2 Mart 16, 2018 tarihinde gönderildi 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. Mesajı raporla İletiyi paylaş Link to post Sitelerde Paylaş
KODevelopers 438 #3 Konu Sahibi Mart 16, 2018 tarihinde gönderildi Sorunu çözdüm sourcede 2 farklı yerde cd kaydı yapıyor tablo değerleriyle oynayarak hallettim. Teşekkürler Mesajı raporla İletiyi paylaş Link to post Sitelerde Paylaş
byxox 67 #4 Mart 17, 2018 tarihinde gönderildi 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 Mesajı raporla İletiyi paylaş Link to post Sitelerde Paylaş
donz05 30 #5 Mart 20, 2018 tarihinde gönderildi 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... Mesajı raporla İletiyi paylaş Link to post Sitelerde Paylaş
donz05 30 #6 Mart 21, 2018 tarihinde gönderildi @ CENGLYY @ KiraAmora61 @ Mountain help me plz :) Mesajı raporla İletiyi paylaş Link to post Sitelerde Paylaş
KODevelopers 438 #7 Konu Sahibi Mart 21, 2018 tarihinde gönderildi Alıntınasıl halletiğini yazsaydın şuan bizede faydası olurdu... Türkçe okumanda sıkıntı yoksa yukarıda belirtmişim zaten nasıl hallettiğimi okur anlarsın. Mesajı raporla İletiyi paylaş Link to post Sitelerde Paylaş
donz05 30 #8 Mart 21, 2018 tarihinde gönderildi 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... Mesajı raporla İletiyi paylaş Link to post Sitelerde Paylaş
donz05 30 #9 Nisan 12, 2018 tarihinde gönderildi // 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... 2 Mesajı raporla İletiyi paylaş Link to post Sitelerde Paylaş
byxox 67 #10 Mayıs 11, 2018 tarihinde gönderildi 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. Mesajı raporla İletiyi paylaş Link to post Sitelerde Paylaş