Что за команды?
Конечно может многим мой вопрос покажется и идиотским и каждый захочет меня потролить, однако обращаюсь к Вам за помощью.
В одном из java файлов датапака нашел список команд и пропись их работы. Так вот что это за команды "sweep", "pflag", "cflag", "exp" которые были в списке наряду с "help", "whoami", "whoiam", "whoapet", "heading". И как они работают. Т.к. как бы я их не юзал и на кого либо, эффекта 0 что с персонажами что с чатом. :Olen': И второй маленький вопросик тоже о командах. Есть такая как "stats". Так вот что за дикость выдает сервер при юзе на себя этой команды и выборе любого пункта. http://s005.radikal.ru/i209/1212/61/892e002da6fa.jpg http://s48.radikal.ru/i120/1212/95/afe3cd952ff0.jpg Почему все показатели [10], [20], [30], [40] и тд. И что они значат? :confused: Всем заранее спасибо за помощь! |
Re: Что за команды?
"Экстрасенсы ZG, я призываю Вас..." - нужно было начинать с такой фразы. Больше конкретики. Что за сборка хотя бы?!
|
Re: Что за команды?
Цитата:
Та же команда whoami существует уже миллион лет и прошла дюжину хроник. Как впрочем и остальные. Чтобы не вставал этот вопрос боле скажу специально для Вас хроники Эпилог, сборка ворона. Только один маленький вопрос: что это дало? Или если я не прав исправьте на разных сборках и хрониках команды кардинально меняются? |
Re: Что за команды?
Цитата:
Цитата:
Ну и в-третьих, Вы прежде чем "пафосничать" выложили бы код и оформили нормально тему, а то "гадание на скринах" сейчас не в моде. |
Re: Что за команды?
Теперь можешь сказать что за 4ре команды и почему так отображается статус?
package commands.voiced; import l2p.extensions.scripts.Functions; import l2p.extensions.scripts.ScriptFile; import l2p.gameserver.handler.IVoicedCommandHandler; import l2p.gameserver.handler.VoicedCommandHandler; import l2p.gameserver.model.L2Character; import l2p.gameserver.model.L2Player; import l2p.gameserver.model.instances.L2MonsterInstance; import l2p.gameserver.model.items.L2ItemInstance; import l2p.gameserver.serverpackets.RadarControl; import l2p.gameserver.skills.Calculator; import l2p.gameserver.skills.Formulas; import l2p.gameserver.skills.Stats; import l2p.gameserver.skills.funcs.Func; import l2p.gameserver.tables.FakePlayersTable; import l2p.gameserver.templates.L2Weapon.WeaponType; import l2p.util.Files; import java.text.NumberFormat; import java.util.Locale; /** * @Author: Abaddon */ public class Help extends Functions implements IVoicedCommandHandler, ScriptFile { private String[] _commandList = new String[] { "help", "whoami", "whoiam", "whoapet", "heading", "whofake", "sweep", "pflag", "cflag", "exp", "stats" }; @Override public void onLoad() { VoicedCommandHandler.getInstance().registerVoicedCommandHandler(this); } @Override public void onReload() { } @Override public void onShutdown() { } @Override public boolean useVoicedCommand(String command, L2Player activeChar, String args) { command = command.intern(); if(command.equalsIgnoreCase("help")) { return help(command, activeChar, args); } if(command.equalsIgnoreCase("whoami") || command.equalsIgnoreCase("whoiam")) { return whoami(command, activeChar, args); } if(command.equalsIgnoreCase("whoapet")) { return whoapet(command, activeChar, args); } if(command.equalsIgnoreCase("stats")) { return stats(activeChar); } if(command.equalsIgnoreCase("heading")) { activeChar.sendMessage(String.valueOf(activeChar.getHeading())); return true; } if(command.equalsIgnoreCase("whofake")) { return whofake(command, activeChar, args); } if(command.equalsIgnoreCase("sweep")) { return sweep(command, activeChar, args); } if(command.equalsIgnoreCase("pflag")) { return pflag(command, activeChar, args); } if(command.equalsIgnoreCase("cflag")) { return cflag(command, activeChar, args); } return false; } private static NumberFormat df = NumberFormat.getNumberInstance(); static { df.setMaximumFractionDigits(2); } private boolean pflag(String command, L2Player activeChar, String args) { if(!activeChar.isInParty()) { return false; } RadarControl rc = new RadarControl(0, 1, activeChar.getLoc()); for(L2Player p : activeChar.getParty().getPartyMembers()) { if(p != activeChar) { p.sendPacket(rc); } } return true; } private boolean cflag(String command, L2Player activeChar, String args) { if(activeChar.getClan() == null) { return false; } RadarControl rc = new RadarControl(0, 1, activeChar.getLoc()); for(L2Player p : activeChar.getClan().getOnlineMembers(activeChar.getObjectId())) { p.sendPacket(rc); } return true; } private boolean help(String command, L2Player activeChar, String args) { String dialog = Files.read("data/scripts/commands/voiced/help.htm", activeChar); show(dialog, activeChar); return true; } private boolean whoapet(String command, L2Player activeChar, String args) { if(activeChar == null) { return false; } showInfo(activeChar, activeChar.getPet()); return true; } private boolean whoami(String command, L2Player activeChar, String args) { showInfo(activeChar, activeChar); return true; } private boolean whofake(String command, L2Player activeChar, String args) { if(!activeChar.isGM()) { return false; } StringBuilder sb = new StringBuilder(""); for(String p : FakePlayersTable.getActiveFakePlayers()) { sb.append(p).append(" "); } show(sb.toString(), activeChar); return true; } private boolean sweep(String command, L2Player activeChar, String args) { if(activeChar.getSkillLevel(42) > 0) { for(L2Character target : activeChar.getAroundCharacters(300, 200)) { if(target.isMonster() && target.isDead() && ((L2MonsterInstance) target).isSweepActive()) { activeChar.getAI().Cast(activeChar.getKnownSkill(42), target); return true; } } } return false; } public static void showInfo(L2Player caller, L2Character cha) { if(caller == null || cha == null) { return; } StringBuilder dialog = new StringBuilder("<html><body>"); NumberFormat df = NumberFormat.getNumberInstance(Locale.ENGLISH); df.setMaximumFractionDigits(2); df.setMinimumFractionDigits(0); /* dialog.append("<center><font color=\"LEVEL\">Basic info</font></center><br><table width=\"100%\"><tr>"); dialog.append("<td>Name</td><td>").append(cha.getName()).append("</td>"); dialog.append("<td>Login</td><td>").append(cha.getAccountName()).append("</td>"); dialog.append("</tr><tr>"); dialog.append("<td>Class</td><td>").append(cha.getClassId().name()).append("</td>"); dialog.append("<td>IP</td><td>").append(cha.getNetConnection().getIpAddr()).append("</td>"); dialog.append("</tr><tr>"); dialog.append("<td>Level</td><td>").append(cha.getLevel()).append("</td>"); dialog.append("<td>ObjId</td><td>").append(cha.getObjectId()).append("</td>"); dialog.append("</tr></table><br>"); */ dialog.append("<center><font color=\"LEVEL\">Stats</font></center><br><table width=\"100%\"><tr>"); dialog.append("<td>HP regen</td><td>").append(df.format(Formulas.calcHpRegen(cha))).append("</td>"); dialog.append("<td>CP regen</td><td>").append(df.format(Formulas.calcCpRegen(cha))).append("</td>"); dialog.append("</tr><tr>"); dialog.append("<td>MP regen</td><td>").append(df.format(Formulas.calcMpRegen(cha))).append("</td>"); dialog.append("<td>HP drain</td><td>").append(df.format(cha.calcStat(Stats.ABSORB_DAMAGE_PERCENT, 0, null, null))).append("%</td>"); dialog.append("</tr><tr>"); dialog.append("<td>HP gain</td><td>").append(df.format(cha.calcStat(Stats.HEAL_EFFECTIVNESS, 100, null, null))).append("%</td>"); dialog.append("<td>MP gain</td><td>").append(df.format(cha.calcStat(Stats.MANAHEAL_EFFECTIVNESS, 100, null, null))).append("%</td>"); dialog.append("</tr><tr>"); dialog.append("<td>Crit damage</td><td>").append(df.format(2 * cha.calcStat(Stats.CRITICAL_DAMAGE, null, null))).append("% + ").append((int) cha.calcStat(Stats.CRITICAL_DAMAGE_STATIC, null, null)).append("</td>"); dialog.append("<td>Magic crit</td><td>").append(df.format(cha.getMagicCriticalRate(null, null))).append("%</td>"); dialog.append("</tr><tr>"); dialog.append("<td>Blow rate</td><td>x").append(df.format(cha.calcStat(Stats.FATALBLOW_RATE, null, null))).append("</td>"); dialog.append("<td>DPS</td><td>").append((int) calcDPS(cha)).append("</td>"); L2ItemInstance shld = cha.getSecondaryWeaponInstance(); if(shld != null && shld.getItemType() == WeaponType.NONE) { dialog.append("</tr><tr>"); dialog.append("<td>Shield def</td><td>").append(cha.getShldDef()).append("</td>"); dialog.append("<td>Shield rate</td><td>").append(df.format(cha.calcStat(Stats.SHIELD_RATE, null, null))).append("</td>"); } dialog.append("</tr><tr>"); dialog.append("<td>Luck</td><td>").append(caller.getBonus().RATE_XP == caller.getRateExp() ? "full" : "limited").append("</td>"); dialog.append("</tr></table><br><center><font color=\"LEVEL\">Resists</font></center><br><table width=\"70%\">"); int FIRE_RECEPTIVE = (int) cha.calcStat(Stats.FIRE_RECEPTIVE, 0, null, null); if(FIRE_RECEPTIVE != 0) { dialog.append("<tr><td>Fire</td><td>").append(-FIRE_RECEPTIVE).append("</td></tr>"); } int WIND_RECEPTIVE = (int) cha.calcStat(Stats.WIND_RECEPTIVE, 0, null, null); if(WIND_RECEPTIVE != 0) { dialog.append("<tr><td>Wind</td><td>").append(-WIND_RECEPTIVE).append("</td></tr>"); } int WATER_RECEPTIVE = (int) cha.calcStat(Stats.WATER_RECEPTIVE, 0, null, null); if(WATER_RECEPTIVE != 0) { dialog.append("<tr><td>Water</td><td>").append(-WATER_RECEPTIVE).append("</td></tr>"); } int EARTH_RECEPTIVE = (int) cha.calcStat(Stats.EARTH_RECEPTIVE, 0, null, null); if(EARTH_RECEPTIVE != 0) { dialog.append("<tr><td>Earth</td><td>").append(-EARTH_RECEPTIVE).append("</td></tr>"); } int SACRED_RECEPTIVE = (int) cha.calcStat(Stats.SACRED_RECEPTIVE, 0, null, null); if(SACRED_RECEPTIVE != 0) { dialog.append("<tr><td>Light</td><td>").append(-SACRED_RECEPTIVE).append("</td></tr>"); } int UNHOLY_RECEPTIVE = (int) cha.calcStat(Stats.UNHOLY_RECEPTIVE, 0, null, null); if(UNHOLY_RECEPTIVE != 0) { dialog.append("<tr><td>Darkness</td><td>").append(-UNHOLY_RECEPTIVE).append("</td></tr>"); } int BLEED_RECEPTIVE = (int) cha.calcStat(Stats.BLEED_RECEPTIVE, null, null); if(BLEED_RECEPTIVE != 0) { dialog.append("<tr><td>Bleed</td><td>").append(BLEED_RECEPTIVE).append("</td></tr>"); } int POISON_RECEPTIVE = (int) cha.calcStat(Stats.POISON_RECEPTIVE, null, null); if(POISON_RECEPTIVE != 0) { dialog.append("<tr><td>Poison</td><td>").append(POISON_RECEPTIVE).append("</td></tr>"); } int STUN_RECEPTIVE = (int) cha.calcStat(Stats.STUN_RECEPTIVE, null, null); if(STUN_RECEPTIVE != 0) { dialog.append("<tr><td>Stun</td><td>").append(STUN_RECEPTIVE).append("</td></tr>"); } int ROOT_RECEPTIVE = (int) cha.calcStat(Stats.ROOT_RECEPTIVE, null, null); if(ROOT_RECEPTIVE != 0) { dialog.append("<tr><td>Root</td><td>").append(ROOT_RECEPTIVE).append("</td></tr>"); } int SLEEP_RECEPTIVE = (int) cha.calcStat(Stats.SLEEP_RECEPTIVE, null, null); if(SLEEP_RECEPTIVE != 0) { dialog.append("<tr><td>Sleep</td><td>").append(SLEEP_RECEPTIVE).append("</td></tr>"); } int PARALYZE_RECEPTIVE = (int) cha.calcStat(Stats.PARALYZE_RECEPTIVE, null, null); if(PARALYZE_RECEPTIVE != 0) { dialog.append("<tr><td>Paralyze</td><td>").append(PARALYZE_RECEPTIVE).append("</td></tr>"); } int MENTAL_RECEPTIVE = (int) cha.calcStat(Stats.MENTAL_RECEPTIVE, null, null); if(MENTAL_RECEPTIVE != 0) { dialog.append("<tr><td>Mental</td><td>").append(MENTAL_RECEPTIVE).append("</td></tr>"); } int DEBUFF_RECEPTIVE = (int) cha.calcStat(Stats.DEBUFF_RECEPTIVE, null, null); if(DEBUFF_RECEPTIVE != 0) { dialog.append("<tr><td>Debuff</td><td>").append(DEBUFF_RECEPTIVE).append("</td></tr>"); } int CANCEL_RECEPTIVE = (int) cha.calcStat(Stats.CANCEL_RECEPTIVE, null, null); if(CANCEL_RECEPTIVE != 0) { dialog.append("<tr><td>Cancel</td><td>").append(CANCEL_RECEPTIVE).append("</td></tr>"); } int SWORD_WPN_RECEPTIVE = 100 - (int) cha.calcStat(Stats.SWORD_WPN_RECEPTIVE, null, null); if(SWORD_WPN_RECEPTIVE != 0) { dialog.append("<tr><td>Sword</td><td>").append(SWORD_WPN_RECEPTIVE).append("%</td></tr>"); } int DUAL_WPN_RECEPTIVE = 100 - (int) cha.calcStat(Stats.DUAL_WPN_RECEPTIVE, null, null); if(DUAL_WPN_RECEPTIVE != 0) { dialog.append("<tr><td>Dual Sword</td><td>").append(DUAL_WPN_RECEPTIVE).append("%</td></tr>"); } int BLUNT_WPN_RECEPTIVE = 100 - (int) cha.calcStat(Stats.BLUNT_WPN_RECEPTIVE, null, null); if(BLUNT_WPN_RECEPTIVE != 0) { dialog.append("<tr><td>Blunt</td><td>").append(BLUNT_WPN_RECEPTIVE).append("%</td></tr>"); } int DAGGER_WPN_RECEPTIVE = 100 - (int) cha.calcStat(Stats.DAGGER_WPN_RECEPTIVE, null, null); if(DAGGER_WPN_RECEPTIVE != 0) { dialog.append("<tr><td>Dagger/Rapier</td><td>").append(DAGGER_WPN_RECEPTIVE).append("%</td></tr>"); } int BOW_WPN_RECEPTIVE = 100 - (int) cha.calcStat(Stats.BOW_WPN_RECEPTIVE, null, null); if(BOW_WPN_RECEPTIVE != 0) { dialog.append("<tr><td>Bow</td><td>").append(BOW_WPN_RECEPTIVE).append("%</td></tr>"); } int XBOW_WPN_RECEPTIVE = 100 - (int) cha.calcStat(Stats.CROSSBOW_WPN_RECEPTIVE, null, null); if(XBOW_WPN_RECEPTIVE != 0) { dialog.append("<tr><td>Crossbow</td><td>").append(XBOW_WPN_RECEPTIVE).append("%</td></tr>"); } int POLE_WPN_RECEPTIVE = 100 - (int) cha.calcStat(Stats.POLE_WPN_RECEPTIVE, null, null); if(POLE_WPN_RECEPTIVE != 0) { dialog.append("<tr><td>Polearm</td><td>").append(POLE_WPN_RECEPTIVE).append("%</td></tr>"); } int FIST_WPN_RECEPTIVE = 100 - (int) cha.calcStat(Stats.FIST_WPN_RECEPTIVE, null, null); if(FIST_WPN_RECEPTIVE != 0) { dialog.append("<tr><td>Fist weapons</td><td>").append(FIST_WPN_RECEPTIVE).append("%</td></tr>"); } int CRIT_CHANCE_RECEPTIVE = 100 - (int) cha.calcStat(Stats.CRIT_CHANCE_RECEPTIVE, null, null); if(CRIT_CHANCE_RECEPTIVE != 0) { dialog.append("<tr><td>Crit get chance</td><td>").append(CRIT_CHANCE_RECEPTIVE).append("%</td></tr>"); } int CRIT_DAMAGE_RECEPTIVE = 100 - (int) cha.calcStat(Stats.CRIT_DAMAGE_RECEPTIVE, null, null); if(CRIT_DAMAGE_RECEPTIVE != 0) { dialog.append("<tr><td>Crit get damage</td><td>").append(CRIT_DAMAGE_RECEPTIVE).append("%</td></tr>"); } if(FIRE_RECEPTIVE == 0 && WIND_RECEPTIVE == 0 && WATER_RECEPTIVE == 0 && EARTH_RECEPTIVE == 0 && UNHOLY_RECEPTIVE == 0 && SACRED_RECEPTIVE // primary elements == 0 && BLEED_RECEPTIVE == 0 && STUN_RECEPTIVE // phys debuff == 0 && POISON_RECEPTIVE == 0 && ROOT_RECEPTIVE == 0 && SLEEP_RECEPTIVE == 0 && PARALYZE_RECEPTIVE == 0 && MENTAL_RECEPTIVE == 0 && DEBUFF_RECEPTIVE == 0 && CANCEL_RECEPTIVE // mag debuff == 0 && SWORD_WPN_RECEPTIVE == 0 && DUAL_WPN_RECEPTIVE == 0 && BLUNT_WPN_RECEPTIVE == 0 && DAGGER_WPN_RECEPTIVE == 0 && BOW_WPN_RECEPTIVE == 0 && POLE_WPN_RECEPTIVE == 0 && FIST_WPN_RECEPTIVE // weapons == 0 && CRIT_CHANCE_RECEPTIVE == 0 && CRIT_DAMAGE_RECEPTIVE == 0 // other ) { dialog.append("</table>No resists</body></html>"); } else { dialog.append("</table></body></html>"); } show(dialog.toString(), caller, null); } private static double calcDPS(L2Character self) { L2Character target = null;//self.getTarget() != null && self.getTarget().isCharacter() ? (L2Character) self.getTarget() : null; double def = /*target != null ? target.getPDef(self) :*/ 500; double critRate = /*target != null ? Formulas.calcCrit(self, target, null) / 100. :*/ self.getCriticalHit(target, null) / 1000.; double critPower = 2 * self.calcStat(Stats.CRITICAL_DAMAGE, target, null) / 100.; double critStatic = self.calcStat(Stats.CRITICAL_DAMAGE_STATIC, target, null); double aSpd = self.getPAtkSpd(); double reuseDelay = self.getActiveWeaponItem() != null && self.getActiveWeaponItem().getAttackReuseDelay() > 0 ? 1 / (self.getActiveWeaponItem().getAttackReuseDelay() * self.getReuseModifier(target) * 666 * self.calcStat(Stats.ATK_BASE, 0, null, null) / 293. / aSpd) : 0; double attackDelay = aSpd / 500.; double pAtk = self.getPAtk(target); double damageNorm = pAtk * 70. / def; double damageCrit = (pAtk * critPower + critStatic) * 70. / def; double avgDam = critRate * damageCrit + (1. - critRate) * damageNorm; return (int) (Math.max(attackDelay, reuseDelay) * avgDam); } private static boolean stats(L2Player player) { if(player == null) { return false; } StringBuilder dialog = new StringBuilder("<html><body>"); dialog.append("<center><font color=\"LEVEL\">All Stats</font></center><br><br>"); Calculator[] calculators = player.getCalculators(); if(calculators == null || calculators.length == 0) { dialog.append("None"); } else { for(Calculator c : calculators) { dialog.append("[scripts_commands.voiced.Help:showfuncs ").append(c._stat.getValue()).append("|").append(c._stat.getValue()).append("]<br1>"); } } dialog.append("</body></html>"); show(dialog.toString(), player, null); return true; } public void showstats() { stats((L2Player) getSelf()); } public void showfuncs(String[] var) { L2Player player = (L2Player) getSelf(); if(var.length != 1) { show("Некорректные данные", player); return; } String value = var[0]; Stats stat = Stats.valueOfXml(value); StringBuilder dialog = new StringBuilder("<html><body>"); dialog.append("<table><tr>"); dialog.append("<td><button value=\"Back\" action=\"bypass -h scripts_commands.voiced.Help:showstats\" width=40 height=15 back=\"L2UI_CT1.Button_DF_Down\" fore=\"L2UI_CT1.Button_DF\"></td>"); dialog.append("<td><button value=\"Refresh\" action=\"bypass -h scripts_commands.voiced.Help:showfuncs ").append(value).append("\" width=60 height=15 back=\"L2UI_CT1.Button_DF_Down\" fore=\"L2UI_CT1.Button_DF\"></td>"); dialog.append("</tr></table>"); dialog.append("<br><center><font color=\"LEVEL\">Stat: ").append(stat).append("</font></center><br><br>"); Calculator[] calculators = player.getCalculators(); if(calculators == null || calculators.length == 0 || stat == null) { dialog.append("None"); } else { Calculator c = calculators[stat.ordinal()]; Func[] funcs = c.getFunctions(); for(int i = 0; i < funcs.length; i++) { if(funcs[i]._funcOwner != null) { dialog.append(funcs[i]._funcOwner.toString()).append(" [").append(Integer.toHexString(funcs[i]._order)).append("]<br1>"); } else { dialog.append(funcs[i].getClass().getSimpleName()).append(" [").append(Integer.toHexString(funcs[i]._order)).append("]<br1>"); } } } dialog.append("</body></html>"); show(dialog.toString(), player); } @Override public String[] getVoicedCommandList() { return _commandList; } } |
Re: Что за команды?
/** * Order of functions calculation. * Functions with lower order are executed first. * Functions with the same order are executed in unspecified order. * Usually add/substruct functions has lowest order, * then bonus/penalty functions (multiplay/divide) are * applied, then functions that do more complex calculations * (non-linear functions). */ public final int _order;Информация такого рода выводится в скобках, то есть это числа, которые определяют порядок исчисления функций. Такие операции, как сложение/вычитание "статов" ( например +100 HP), то есть линейные функции, которые имеют больший приоритет и выполняются в первую очередь, а затем операции умножения / деления. P.S. Чем меньше число в скобках, тем выше приоритет. |
Re: Что за команды?
А что про "sweep", "pflag", "cflag", "exp"
|
Re: Что за команды?
Я одного не понимаю. У Вас есть исходный код, Вы сами не можете сказать, зачем он написан?..
"cflag": сокращенно от Clan Flag - отсылает всем членам клана пакет RadarControl с местоположением, где находится персонаж. Причем отсылает его вообще всему клану, кто есть в онлайне вне зависимости от местоположения. "pflag": сокращенно от PartyFlag - делает то же самое, что и cflag но для всей группы, а не для клана. "sweep": делает авто-свип (Skill ID 42), т.е. находит любого заспойленного мертвого монстра и применяет к нему умение "Sweep". Ничего более идиотского в жизни не видел. "exp": вообще реализации команды не вижу - видимо на очередной бред была заготовка :redlol: |
Re: Что за команды?
Еще во время шары фениксов командой .exp можно было загрузить память сервера, своего рода бэкдор. Тут тело команды вырезано.
|
Re: Что за команды?
Цитата:
"pflag" - покажет члена пати на карте; "cflag" - покажет члена клана на карте; "exp" - нет реализации. |
Текущее время: 23:45. Часовой пояс GMT +3. |
Powered by vBulletin® Version 3.8.6
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot