vestside 90 #1 Oluşturuldu: Aralık 28, 2017 Herkese iyi forumlar arkadaşlar; başlıkta belirttiğim gibi ICE magenin 72 STAFF 70 skili ve tekli skillerin çoğusunu karşı ırka vurduğumuz zaman SKILL hem onde hem bizim üzerimizde patlıyor. hepinize şimdiden teşekkürler. 1 Mesajı raporla İletiyi paylaş Link to post Sitelerde Paylaş
BurakGozet 12 #2 Aralık 28, 2017 tarihinde gönderildi aynı sorun bendede var nova atıyorum hem bana hem attığım yere düşüyor bana düşen sadece görüntü işlevi yok ama incelemedim müsat zamanımda bakıcam çözersem yazarım 1 Mesajı raporla İletiyi paylaş Link to post Sitelerde Paylaş
vestside 90 #3 Konu Sahibi Aralık 29, 2017 tarihinde gönderildi Alıntıaynı sorun bendede var nova atıyorum hem bana hem attığım yere düşüyor bana düşen sadece görüntü işlevi yok ama incelemedim müsat zamanımda bakıcam çözersem yazarım dostum ben biraz soruşturdum sorunun " executetype3() " den kaynaklandığı söyleniyor. tam olarak ne yapmak gerektiğini bende bilmiyorum test ediyorum birşeyler ekleyip çözüm bulursam konu altına yazacağım. Mesajı raporla İletiyi paylaş Link to post Sitelerde Paylaş
KODevelopers 442 #4 Aralık 29, 2017 tarihinde gönderildi bool MagicInstance::ExecuteType3() paketini at bakayim.. Mesajı raporla İletiyi paylaş Link to post Sitelerde Paylaş
vestside 90 #5 Konu Sahibi Aralık 29, 2017 tarihinde gönderildi Alıntıbool MagicInstance::ExecuteType3() paketini at bakayim..TXT olarak ekledim, oradan bakabilirsin EMRE ben ne yaptıysam olmadı sorunun kaynağını bir türlü bulamadım. Mesajı raporla İletiyi paylaş Link to post Sitelerde Paylaş
KODevelopers 442 #6 Aralık 29, 2017 tarihinde gönderildi @ vestside Skype ekle efsaneemoo6161 bakması lazım.. Mesajı raporla İletiyi paylaş Link to post Sitelerde Paylaş
vestside 90 #7 Konu Sahibi Aralık 29, 2017 tarihinde gönderildi Alıntı@ vestside Skype ekle efsaneemoo6161 bakması lazım.. bulamıyor seni, vestsidetr benim skype ismim Mesajı raporla İletiyi paylaş Link to post Sitelerde Paylaş
KODevelopers 442 #8 Aralık 29, 2017 tarihinde gönderildi Sen beni küfür etmisi o yüzden engellemiştim ahh hatırladım :p neyse engellemeyi kaldırıyorum..http://prntscr.com/htr7v4 Mesajı raporla İletiyi paylaş Link to post Sitelerde Paylaş
elm412 1 #9 Aralık 29, 2017 tarihinde gönderildi bi bakayım bakalım Mesajı raporla İletiyi paylaş Link to post Sitelerde Paylaş
KODevelopers 442 #10 Aralık 29, 2017 tarihinde gönderildi Soruyu çözüldü. bunu şekilde değiştirebilirsi.// Applied when a magical attack, healing, and mana restoration is done.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 the target's a group of people... if (sTargetID == -1) { std::vector unitList; g_pMain->GetUnitListFromSurroundingRegions(pSkillCaster, &unitList); if(pType->sFirstDamage > 0 || pType->sTimeDamage > 0) casted_member.push_back(pSkillCaster); BOOST_FOREACH (auto itr, unitList) { Unit * pTarget = g_pMain->GetUnitPtr(itr); if(pTarget == nullptr) continue; if (pTarget->isNPC() && pTarget->GetNation() == pSkillCaster->GetNation() && pType->sFirstDamage && !TO_NPC(pTarget)->isMonster()) continue; if(pTarget->GetEventRoom() != pSkillCaster->GetEventRoom()) continue; if (pSkillCaster != pTarget && !pTarget->isDead() && pTarget->isAttackable() && CMagicProcess::UserRegionCheck(pSkillCaster, pTarget, pSkill, pType->bRadius, sData[0], sData[2])) casted_member.push_back(pTarget); } // If you managed to not hit anything with your AoE, you're still gonna have a cooldown (You should l2aim) if (casted_member.empty() || (sTargetID == -1 && casted_member.empty())) { SendSkill(); return true; } } else { // If the target was a single unit. if (pSkillTarget == nullptr || pSkillTarget->isDead() || (pSkillTarget->isPlayer() && (TO_USER(pSkillTarget)->isBlinking() || TO_USER(pSkillTarget)->isInSafetyArea()))) return false; if (pSkill->sRange > 0 && (pSkillCaster->GetDistanceSqrt(pSkillTarget) > float(pSkill->sRange * 2))) return false; casted_member.push_back(pSkillTarget); } // Anger explosion requires the caster be a player // and a full anger gauge (which will be reset after use). if (pType->bDirectType == 18) { // Only players can cast this skill. if (!pSkillCaster->isPlayer() || !TO_USER(pSkillCaster)->hasFullAngerGauge()) return false; // Reset the anger gauge TO_USER(pSkillCaster)->UpdateAngerGauge(0); } sData[1] = 1; BOOST_FOREACH (auto itr, casted_member) { Unit * pTarget = itr; // it's checked above, not much need to check it again if(pTarget == nullptr) continue; if (pSkill->sRange > 0 && (pSkillCaster->GetDistanceSqrt(pTarget) >= (float)pSkill->sRange)) continue; // If you are casting an attack spell. 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; // Allow for complete magic damage blocks. if (damage m_bBlockMagic) continue; if (pSkillCaster->isPlayer()) { if (pSkillCaster->GetZoneID() == ZONE_SNOW_BATTLE && g_pMain->m_byBattleOpen == SNOW_BATTLE) damage = -10; } bool bSendLightningStunSkill = true; if (pType->bDirectType && pType->bAttribute == AttributeLightning || pType->bAttribute == AttributeIce && pTarget->isPlayer()) { // Success rate... if (pSkill->bSuccessRate bSuccessRate bSendLightningStunSkill = false; // Calculate user ressistance... else { uint16 nMaxRessitance = 250; // Monster Lighting Fix uint16 nTargetResistance = pType->bAttribute == AttributeIce ? pTarget->m_sColdR : pTarget->m_sLightningR; if (nTargetResistance > nMaxRessitance) nMaxRessitance = nTargetResistance; if (nTargetResistance >= myrand(0, nMaxRessitance - nTargetResistance) || myrand(0,3)) bSendLightningStunSkill = false; } if (nSkillID == 115810 || nSkillID == 215810) bSendLightningStunSkill = true; } // Non-durational spells. if (pType->bDuration == 0) { switch (pType->bDirectType) { // Affects target's HP case 1: // Disable to heal or minor NPC. if ((pTarget->isNPC() && pType->sTimeDamage > 0) || (pTarget->isNPC() && pType->sFirstDamage > 0)) return false; // "Critical Point" buff gives a chance to double HP from pots or the rogue skill "Minor heal". if (damage > 0 && pSkillCaster->hasBuff(BUFF_TYPE_DAMAGE_DOUBLE) && CheckPercent(500)) damage *= 2; /*if (damage > 0 && pTarget->isDevil()) //Created by Terry damage *= 2; //Kurian HP POT x2*/ 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; // "Magic Hammer" repairs equipped items. case 4: if (pTarget->isPlayer()) { if (damage > 0) { // Power Up Store ( Talia, Armor Destruction ve Tamamını ) if (pSkill->iNum == SPECIAL_MAGIC_HAMMER_SKILL_1 || pSkill->iNum == SPECIAL_MAGIC_HAMMER_SKILL_2 || pSkill->iNum == SPECIAL_MAGIC_HAMMER_SKILL_3) TO_USER(pTarget)->ItemWoreOut(ACID_ALL, damage); else TO_USER(pTarget)->ItemWoreOut(REPAIR_ALL, damage); } else TO_USER(pTarget)->ItemWoreOut(DEFENCE, -damage); } break; // Increases/decreases target's HP by a percentage case 5: if (pType->sFirstDamage damage = (pType->sFirstDamage * pTarget->GetHealth()) / -100; else damage = (pTarget->GetMaxHealth() * (pType->sFirstDamage - 100)) / 100; pTarget->HpChangeMagic(damage, pSkillCaster); break; // Caster absorbs damage based on percentage of target's HP. Players only. 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; // Caster absorbs damage based on percentage of target's max HP 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; // Inflicts true damage (i.e. disregards Ac/resistances/buffs, etc). case 11: pTarget->HpChange(damage, pSkillCaster); break; // Used by "Destination scroll" (whatever that is) case 12: continue; // Chance (how often?) to reduce the opponent's armor and weapon durability by sFirstDamage case 13: if (pTarget->isPlayer() && CheckPercent(500)) // using 50% for now. { TO_USER(pTarget)->ItemWoreOut(ATTACK, damage); TO_USER(pTarget)->ItemWoreOut(DEFENCE, damage); } break; // Drains target's MP, gives half of it to the caster as HP. Players only. // NOTE: Non-durational form (as in 1.8xx). This was made durational later (database configured). 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: // Chaos Dungeon Skills if (pTarget->isPlayer()) { pTarget->HpChangeMagic(damage / 10, pSkillCaster, (AttributeType) pType->bAttribute); if (pTarget != pSkillCaster) ReflectDamage(damage, pTarget); } break; // Stat Scroll - MagicNum = 501011 case 255: if (TO_USER(pSkillCaster)->isPlayer()) { } break; } } // Durational spells! Durational spells only involve HP. else if (pType->bDuration != 0) { if (pType->bDirectType == 18) damage = -(int)(pSkillCaster->GetLevel() * 12.5); if (damage != 0) // In case there was first damage...... pTarget->HpChangeMagic(damage, pSkillCaster); // Initial damage!!! if (pTarget == nullptr) return false; if (pTarget->isAlive()) { CUser *pUser = TO_USER(pSkillCaster); // HP booster (should this actually just be using sFirstDamage as the percent of max HP, i.e. 105 being 5% of max HP each increment?) if (!pTarget->isNPC()) { if (pType->bDirectType == 14) duration_damage = (int)(pSkillCaster->GetLevel() * (10 + pSkillCaster->GetLevel() / 2.6)) + 3; else if (pType->bDirectType == 19) duration_damage = (pType->sTimeDamage / 10); /*else if (pSkillCaster->isPlayer() && pUser->isKurianPortu()) duration_damage = (pType->sTimeDamage * 2);*/ else if (pType->sTimeDamage bAttribute != 4) duration_damage = GetMagicDamage(pTarget, pType->sTimeDamage, pType->bAttribute); else duration_damage = pType->sTimeDamage; // Allow for complete magic damage blocks. if (duration_damage m_bBlockMagic) continue; if (pType->bDirectType == 18) duration_damage = -(int)((pSkillCaster->GetLevel() * 12.5) * (pType->bDuration / 2)); // Setup DOT (damage over time) 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; if (pType->bDirectType == 14) // HP Booster pot basamama sorunu pEffect->m_bHPInterval = 4; // interval of 4s between each damage loss/HP gain else pEffect->m_bHPInterval = 2; // interval of 2s between each damage loss/HP gain // number of ticks required at a rate of 2s per tick over the total duration of the skill float tickCount = (float)pType->bDuration / (float)pEffect->m_bHPInterval; // amount of HP to be given/taken every tick at a rate of 2s per tick 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; pEffect->m_sTo = false; break; } pTarget->m_bType3Flag = true; }else{ if (pType->sTimeDamage bAttribute != 4) duration_damage = GetMagicDamage(pTarget, pType->sTimeDamage, pType->bAttribute); else duration_damage = pType->sTimeDamage; for (int k = 0; k { Unit::MagicType3 * pEffect = &pSkillCaster->m_durationalSkills[k]; if(pEffect == nullptr) continue; if (pEffect->m_byUsed) continue; pEffect->m_byUsed = true; pEffect->m_tHPLastTime = 0; pEffect->m_bHPInterval = 2; // interval of 2s between each damage loss/HP gain // number of ticks required at a rate of 2s per tick over the total duration of the skill float tickCount = (float)pType->bDuration / (float)pEffect->m_bHPInterval; // amount of HP to be given/taken every tick at a rate of 2s per tick pEffect->m_sHPAmount = (int16)(duration_damage / tickCount); pEffect->m_bTickCount = 0; pEffect->m_bTickLimit = (uint8) tickCount; pEffect->m_sSourceID = pTarget->GetID(); pEffect->m_byAttribute = pType->bAttribute; pEffect->m_sTo = true; break; } pSkillCaster->m_bType3Flag = true; } } // Send the status updates (i.e. DOT or position indicators) to the party/user if (pTarget->isPlayer() // Ignore healing spells, not sure if this will break any skills. && pType->sTimeDamage { if (bSendLightningStunSkill) TO_USER(pTarget)->SendUserStatusUpdate(pType->bAttribute == POISON_R ? USER_STATUS_POISON : USER_STATUS_DOT, USER_STATUS_INFLICT); } } if (!bSendLightningStunSkill) { if (pSkillCaster->isNPC()) { sData[1] = 0; BuildAndSendSkillPacket(pSkillCaster, true, sCasterID, pTarget->GetID(), bOpcode, nSkillID, sData); TO_USER(pTarget)->ShowEffect(nSkillID); } else { if (pSkill->bMoral == MORAL_ENEMY) { sData[1] = 0; BuildAndSendSkillPacket(pSkillCaster, true, sCasterID, pTarget->GetID(), bOpcode, nSkillID, sData); TO_USER(pTarget)->ShowEffect(nSkillID); } else if (pSkill->bMoral != MORAL_ENEMY) { sData[1] = 0; BuildAndSendSkillPacket(pSkillCaster, true, sCasterID, pTarget->GetID(), bOpcode, nSkillID, sData); } } } else { if (bSendLightningStunSkill && LightStunSkills() && pTarget->isPlayer() || bSendLightningStunSkill && ColdSkills() && pTarget->isPlayer()) { MagicInstance instance; nSkillID += 80000; instance.nSkillID = nSkillID; if (LightStunSkillsNot() && pTarget->isPlayer()) { TO_USER(pTarget)->SendUserStatusUpdate(USER_STATUS_POISON, USER_STATUS_INFLICT); ExecuteType4(); } if(ColdSkillsNot() && pTarget->isPlayer()) { if (pTarget->isPlayer() && ColdSkillsNot()) { 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 nTargetSpeedAmount = pType2->bSpeed; uint8 bResult = 1; uint16 sDuration = pType2->sDuration; 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 BuildAndSendSkillPacket(pSkillCaster, true, sCasterID, pTarget->GetID(), bOpcode, nSkillID, sData); TO_USER(pTarget)->ShowEffect(nSkillID); } else // Send the skill data in the current context to the caster's region, with the target explicitly set. // In the case of AOEs, this will mean the AOE will show the AOE's effect on the user (not show the AOE itself again). if (pSkill->bType[1] == 0 || pSkill->bType[1] == 3) BuildAndSendSkillPacket(pSkillCaster, true, sCasterID, pTarget->GetID(), bOpcode, nSkillID, sData); } // Tell the AI server we're healing someone (so that they can choose to pick on the healer!) if (pType->bDirectType == 1 && damage > 0 && sCasterID != sTargetID) { Packet result(AG_HEAL_MAGIC); result g_pMain->Send_AIServer(&result); } } // Allow for AOE effects. if (sTargetID == -1 && pSkill->bType[0] == 3) SendSkill(); return true;} 1 Mesajı raporla İletiyi paylaş Link to post Sitelerde Paylaş
vestside 90 #11 Konu Sahibi Aralık 29, 2017 tarihinde gönderildi @ KiraAmora61 teşekkürler sorun çözüldü. executetype3 içeriğini değiştirince sorunsuz calısıyor suan. Mesajı raporla İletiyi paylaş Link to post Sitelerde Paylaş
TheChucky 22 #12 Aralık 29, 2017 tarihinde gönderildi Alıntıbi bakayım bakalım Bakabildin umarım :) 1 Mesajı raporla İletiyi paylaş Link to post Sitelerde Paylaş