public static List<L2Effect> calcCancelStealEffects(L2Character activeChar, L2Character target, L2Skill skill, double power)
{
// Resists.
int cancelMagicLvl = skill.getMagicLevel();
int count = skill.getMaxNegatedEffects();
final double vuln = target.calcStat(Stats.CANCEL_VULN, 0, target, null);
final double prof = activeChar.calcStat(Stats.CANCEL_PROF, 0, target, null);
double resMod = 1 + (((vuln + prof) * -1) / 100);
double rate = power / resMod;
if (activeChar.isDebug() || Config.DEVELOPER)
{
final StringBuilder stat = new StringBuilder(100);
StringUtil.append(stat, skill.getName(), " Base Rate:", String.valueOf((int) power), " Magiclvl:", String.valueOf(cancelMagicLvl), " resMod:", String.format("%1.2f", resMod), "(", String.format("%1.2f", prof), "/", String.format("%1.2f", vuln), ") Rate:", String.valueOf(rate));
final String result = stat.toString();
if (activeChar.isDebug())
{
activeChar.sendDebugMessage(result);
}
if (Config.DEVELOPER)
{
_log.info(result);
}
}
// Cancel for Abnormals.
final L2Effect[] effects = target.getAllEffects();
List<L2Effect> canceled = new ArrayList<>(count);
if (skill.getNegateAbnormals() != null)
{
for (L2Effect eff : effects)
{
if (eff == null)
{
continue;
}
for (String negateAbnormalType : skill.getNegateAbnormals().keySet())
{
if (negateAbnormalType.equalsIgnoreCase(eff.getAbnormalType()) && (skill.getNegateAbnormals().get(negateAbnormalType) >= eff.getAbnormalLvl()))
{
if (calcCancelSuccess(eff, cancelMagicLvl, (int) rate, skill))
{
eff.exit();
}
}
}
}
}
// Common Cancel/Steal.
else
{
// First Pass.
int lastCanceledSkillId = 0;
L2Effect effect;
for (int i = effects.length; --i >= 0;) // reverse order
{
effect = effects[i];
if (effect == null)
{
continue;
}
// remove effect if can't be stolen
if (!effect.canBeStolen())
{
effects[i] = null;
continue;
}
// if effect time is smaller than 5 seconds, will not be stolen, just to save CPU,
// avoid synchronization(?) problems and NPEs
if ((effect.getAbnormalTime() - effect.getTime()) < 5)
{
effects[i] = null;
continue;
}
// Only Dances/Songs.
if (!effect.getSkill().isDance())
{
continue;
}
if (!calcCancelSuccess(effect, cancelMagicLvl, (int) rate, skill))
{
continue;
}
if (effect.getSkill().getId() != lastCanceledSkillId)
{
lastCanceledSkillId = effect.getSkill().getId();
count--;
}
canceled.add(effect);
if (count == 0)
{
break;
}
}
// Second Pass.
if (count > 0)
{
lastCanceledSkillId = 0;
for (int i = effects.length; --i >= 0;)
{
effect = effects[i];
if (effect == null)
{
continue;
}
// All Except Dances/Songs.
if (effect.getSkill().isDance())
{
continue;
}
if (!calcCancelSuccess(effect, cancelMagicLvl, (int) rate, skill))
{
continue;
}
if (effect.getSkill().getId() != lastCanceledSkillId)
{
lastCanceledSkillId = effect.getSkill().getId();
count--;
}
canceled.add(effect);
if (count == 0)
{
break;
}
}
}
}
return canceled;
}
public static boolean calcCancelSuccess(L2Effect eff, int cancelMagicLvl, int rate, L2Skill skill)
{
// Lvl Bonus Modifier.
rate *= (eff.getSkill().getMagicLevel() > 0) ? (cancelMagicLvl / eff.getSkill().getMagicLevel()) : 1;
// Check the Rate Limits.
rate = Math.min(Math.max(rate, skill.getMinChance()), skill.getMaxChance());
return Rnd.get(100) < rate;
}
}
to calculate the amount of stolen debuffs based on the character resists, however it appears that songs and dances are not being removed as first when a steal skill type is used.
You can post now and register later.
If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.
DISCORD :
utchiha_market
telegram :
https://t.me/utchiha_market
SELLIX STORE :
https://utchihamkt.mysellix.io/
Join our server for more products :
https://discord.gg/hood-services
https://campsite.bio/utchihaamkt
Server Rates:
» Xp 500x.
» Sp 500x.
» Aden 500x.
» Drop 1x.
» PartyXp 2x.
» PartySp 2x.
» Starting character level -61.
Enchant rates:
» Safe enchant +4.
» Blessed and simple scrolls max enchant (+16).
» Crystal scrolls max enchant (+20).
» Simple enchant scrolls chance – 65%.
» Blessed enchant scrolls chance – 100%.
» Crystal enchant scrolls chance – 50%
Augmentations:
» Mid life stone skill chance – 5%.
» High life stone skill chance – 10%.
» Top life stone skill chance – 20%.
» Augments 1+1
Unique features:
» Main town – Giran
» Automatic-Manual Potions.
» Working 2 castle sieges. (Giran-Aden)
» SPS cancel lasts 10 seconds and than buffs come back.
» Stackable scrolls, lifestones, book of giants.
» Unique pvp zone
» More then 11 active raid bosses.
» Wedding system.
» Unique farming areas.
» Npc skill enchanter.
» Full npc buffer with auto buff.
» Max count of buffs – 55.
» Max subclasses – 4.
» Free and no quest class change.
» Free and no quest sub class.
» Raid boss drop nobless item.
» No weight limit.
» Unique protection anti-hwy armor for archers/daggers etc.
» Ingame password change.
» Top pvp/pk/online ranks NPC.
» Unique monsters & NPC.
» Interlude retail skills.
» Server up-time [24/7] [99]%.
» Perfect class balance (all class can kill all class depending on players skill and setup knowledge,gear,augmentations).
» Announcements on double kills triple kills etc.
» Announcements on Grand Boss death , with the name of the killer as well as clan name of the player.
» Information Npc in game with all servers infromations.
Custom server gear :
1). Titanium Armor Lv.1
2). Epic Armor Lv.2
3). Epic Weapons-Kamikaze-Black S grade (Same Stats)
4). Demonic-Angelic Wings-Baium Hair-Custom Accessories (SameStats)
5). Custom Fighter/Mage tattoo Lv1-Lv2-Lv3
6). Shirt (STR,CON,INT +1)
7). Custom Shields
Server Commands:
.tvtjoin .tvtleave – Join or leave tvt event.
.ctfjoin .ctfleave – Join or leave ctf event.
.dmjoin .dmleave – Join of leave dm event.
.online – current online players count.
.repair – repairs stuck character in world.
.menu – opens online menu panel.
.exit – PVP zone exit in case you are bullied.
.changepassword - Opens online menu then u can change ur password in game.
.farm - Enable/disable autofarm
Event system:
» TVT event
» CTF event
» DM event
» Tournament Event
» Party Zone
» Unique event shop.
Olympiad game:
» Retail olympiad game.
» Competition period [1] week.
» Olympiad start time [18:00] end [00:00] GMT+2.
» New Heroes every Sunday.
Question
Gries
Hello, i currently have this code:
to calculate the amount of stolen debuffs based on the character resists, however it appears that songs and dances are not being removed as first when a steal skill type is used.
Link to comment
Share on other sites
7 answers to this question
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.