Есть проблема, при перетаскивании с окна умений в строку макроса, то внутри макроса название скила изменяется автоматически на англ, что не дает заюзать его.
Проблема именно с командой /useskill
То есть при /useskillforce итд, такой проблемы нет.
может кто нибудь сталкивался с этим?
нужный мне баг кд с скилом в макросе
обычная работа скила в макросе
Проблема именно с командой /useskill
То есть при /useskillforce итд, такой проблемы нет.
может кто нибудь сталкивался с этим?
нужный мне баг кд с скилом в макросе
Код:
package core.gameserver.network.l2.c2s;
import core.gameserver.Config;
import core.gameserver.model.actor.instances.player.Macro;
import core.gameserver.model.actor.instances.player.Macro.L2MacroCmd;
import core.gameserver.model.Player;
import core.gameserver.model.Skill;
import core.gameserver.network.l2.components.SystemMsg;
import core.gameserver.tables.SkillTable;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* packet type id 0xcd
*
* sample
*
* cd
* d // id
* S // macro name
* S // unknown desc
* S // unknown acronym
* c // icon
* c // count
*
* c // entry
* c // type
* d // skill id
* c // shortcut id
* S // command name
*
* format: cdSSScc (ccdcS)
*/
public class RequestMakeMacro extends L2GameClientPacket
{
private static final Logger _log = LoggerFactory.getLogger(RequestMakeMacro.class);
private Macro _macro;
@Override
protected void readImpl()
{
int _id = readD();
String _name = readS(32);
String _desc = readS(64);
String _acronym = readS(4);
int _icon = readC();
int _count = readC();
if(_count > 12)
_count = 12;
L2MacroCmd[] commands = new L2MacroCmd[_count];
for(int i = 0; i < _count; i++)
{
int entry = readC();
int type = readC(); // 1 = skill, 3 = action, 4 = shortcut
int d1 = readD(); // skill or page number for shortcuts
int d2 = readC();
String command = readS().replace(";", "").replace(",", "");
if(command.startsWith("/useskillforce") && Config.ALLOW_SKILL_REUSE_DELAY_BUG)
{
String _skillName = command.substring(15);
command = "/useskillforce " + _skillName;
}
else if(command.startsWith("/useskillstand") && Config.ALLOW_SKILL_REUSE_DELAY_BUG)
{
String _skillName = command.substring(15);
command = "/useskillstand " + _skillName;
}
if(type == 1 && Config.ALLOW_SKILL_REUSE_DELAY_BUG)
{
Skill _skill = SkillTable.getInstance().getInfo(d1, 1);
type = 3;
command = "/useskill " + _skill.getName();
}
commands[i] = new L2MacroCmd(entry, type, d1, d2, command);
}
_macro = new Macro(_id, _icon, _name, _desc, _acronym, commands);
}
@Override
protected void runImpl()
{
Player activeChar = getClient().getActiveChar();
if(activeChar == null)
return;
if(activeChar.getMacroses().getAllMacroses().length > 48)
{
activeChar.sendPacket(SystemMsg.YOU_MAY_CREATE_UP_TO_48_MACROS);
return;
}
if(_macro.name.length() == 0)
{
activeChar.sendPacket(SystemMsg.ENTER_THE_NAME_OF_THE_MACRO);
return;
}
if(_macro.descr.length() > 32)
{
activeChar.sendPacket(SystemMsg.MACRO_DESCRIPTIONS_MAY_CONTAIN_UP_TO_32_CHARACTERS);
return;
}
activeChar.registerMacro(_macro);
}
}
обычная работа скила в макросе
Код:
package core.gameserver.handler.voicecommands.impl;
import core.gameserver.handler.voicecommands.IVoicedCommandHandler;
import core.gameserver.model.Creature;
import core.gameserver.model.Player;
import core.gameserver.model.Skill;
import core.gameserver.scripts.Functions;
/**
* @author Kekess
*/
public class MacroUseSkill extends Functions implements IVoicedCommandHandler{
private String[] _commandList = new String[] { "useskill", "useskillforce", "useskillstand" };
@Override
public boolean useVoicedCommand(String command, Player activeChar, String args)
{
command = command.intern();
if(command.equalsIgnoreCase("useskill"))
{
for(Skill _skill: activeChar.getAllSkills())
if(_skill.getName().equalsIgnoreCase(args))
{
activeChar.setUseMacro(true);
_skill.setIsUseMacro(true);
activeChar.getAI().Cast(_skill, (Creature)activeChar.getTarget(), false, false);
}
}
else if(command.equalsIgnoreCase("useskillforce"))
{
for(Skill _skill: activeChar.getAllSkills())
if(_skill.getName().equalsIgnoreCase(args))
{
activeChar.setUseMacro(true);
_skill.setIsUseMacro(true);
activeChar.getAI().Cast(_skill, (Creature)activeChar.getTarget(), true, false);
}
}
else if(command.equalsIgnoreCase("useskillstand"))
{
for(Skill _skill: activeChar.getAllSkills())
if(_skill.getName().equalsIgnoreCase(args))
{
activeChar.setUseMacro(true);
_skill.setIsUseMacro(true);
activeChar.getAI().Cast(_skill, (Creature)activeChar.getTarget(), true, true);
}
}
return true;
}
@Override
public String[] getVoicedCommandList()
{
return _commandList;
}
}
Последнее редактирование: