Перейти к содержанию
Авторизация  
bura

Delevel для L2Jmobius - Lineage2

Рекомендуемые сообщения

Всем кто читает здоровья и счастье желаю,

К вопросу, я отредактировал код от банковой системы в L2Jmobius удачно до места уничтожения предметаИД(57), при попытки выполнить код дальше выводит ошибки =(

Отредактированный код.
 

Спойлер



/*
 * This file is part of the L2J Mobius project.
 * 
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 * 
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
 * General Public License for more details.
 * 
 * You should have received a copy of the GNU General Public License
 * along with this program. If not, see <http://www.gnu.org/licenses/>.
 */
package handlers.voicedcommandhandlers;

import com.l2jmobius.Config;
import com.l2jmobius.gameserver.handler.IVoicedCommandHandler;
import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance;
import com.l2jmobius.gameserver.network.SystemMessageId;
import com.l2jmobius.gameserver.util.BuilderUtil;
import com.l2jmobius.gameserver.data.xml.impl.ExperienceData;
import com.l2jmobius.gameserver.model.L2Object;
import com.l2jmobius.gameserver.model.actor.L2Playable;

/**
 * This class trades Gold Bars for Adena and vice versa.
 * @author ЫыЫ
 */
public class Banking implements IVoicedCommandHandler
{
	private static final String[] _voicedCommands =
	{
		"bank",
		"withdraw",
		"deposit",
		"delevel"
	};
	
	@Override
	public boolean useVoicedCommand(String command, L2PcInstance activeChar, String params)
	{
		if (command.equals("bank"))
		{
			activeChar.sendMessage(".deposit (" + Config.BANKING_SYSTEM_ADENA + " Adena = " + Config.BANKING_SYSTEM_GOLDBARS + " Goldbar) / .withdraw (" + Config.BANKING_SYSTEM_GOLDBARS + " Goldbar = " + Config.BANKING_SYSTEM_ADENA + " Adena)");
		}

		Убрал лишнию часть кода    для вставки в форум

		else if (command.equals("delevel"))
		{
			if (activeChar.getInventory().getInventoryItemCount(57, 0) >= 500)
			{
				if (!activeChar.reduceAdena("Adena", 500, activeChar, false))
				{
					return false;
				}
				activeChar.getInventory().updateDatabase();
				activeChar.sendMessage("Thank you, you have reduced your to " + 1 + " level, and " + 500 + " less Adena.");
				final L2Object targetChar = activeChar.getTarget();
				final L2PcInstance targetPlayer = (L2PcInstance) targetChar;
				int blvl = activeChar.getLevel();
        		int dlvl = 1; /*comm delevel to 1*/
        		int clvl = blvl - dlvl;

				byte lvl = (byte)clvl;

				targetPlayer.getStat().setLevel(lvl);
			}
			else
			{
				activeChar.sendMessage("You do not have enough Adena to delevel, you need " + 500 + " Adena.");
			}
		}


		return true;
	}
	
	@Override
	public String[] getVoicedCommandList()
	{
		return _voicedCommands;
	}
}


 

 

Лог выполнения GameServer

Спойлер

19/11 17:18:19] GameServer: Started, using 623 of 3993 MB total memory.
[19/11 17:18:19] GameServer: Geodata use 241 MB of memory.
[19/11 17:18:19] GameServer: Maximum number of connected players is 2000.
[19/11 17:18:19] GameServer: Server loaded in 66 seconds.
[19/11 17:18:20] ClientNetworkManager: Listening on 192.168.1.8:7778
[19/11 17:18:20] LoginServerThread: Connecting to login on 192.168.1.8:9014
[19/11 17:18:20] LoginServerThread: Registered on login as Server 5: Erica

Exception for: [Character: Avatar[268462926] - Account: qasw - IP: 192.168.1.8] on packet.run: Say2
java.lang.NullPointerException
    at handlers.voicedcommandhandlers.Banking.useVoicedCommand(Banking.java:101)
    at handlers.chathandlers.ChatGeneral.handleChat(ChatGeneral.java:67)
    at com.l2jmobius.gameserver.network.clientpackets.Say2.run(Say2.java:223)
    at com.l2jmobius.gameserver.network.clientpackets.Say2.run(Say2.java:44)
    at com.l2jmobius.gameserver.network.L2GameClient.channelRead0(L2GameClient.java:136)
    at com.l2jmobius.gameserver.network.L2GameClient.channelRead0(L2GameClient.java:63)
    at io.netty.channel.SimpleChannelInboundHandler.channelRead(SimpleChannelInboundHandler.java:105)
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:362)
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:348)
    at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:340)
    at io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:310)
    at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:284)
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:362)
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:348)
    at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:340)
    at io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:310)
    at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:284)
    at io.netty.handler.codec.ByteToMessageCodec.channelRead(ByteToMessageCodec.java:103)
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:362)
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:348)
    at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:340)
    at io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:310)
    at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:284)
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:362)
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:348)
    at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:340)
    at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1342)
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:362)
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:348)
    at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:934)
    at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:134)
    at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:645)
    at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:580)
    at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:497)
    at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:459)
    at io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:858)
    at io.netty.util.concurrent.DefaultThreadFactory$DefaultRunnableDecorator.run(DefaultThreadFactory.java:138)
    at java.lang.Thread.run(Unknown Source)

Ссылка на сборку click ME!

P.S. Думаю не правильно написан данный кусок кода

final L2Object targetChar = activeChar.getTarget();
				final L2PcInstance targetPlayer = (L2PcInstance) targetChar;
				int blvl = activeChar.getLevel();
        		int dlvl = 1; /*comm delevel to 1*/
        		int clvl = blvl - dlvl;

				byte lvl = (byte)clvl;

				targetPlayer.getStat().setLevel(lvl);

Без данной части кода работает , гы сдерает 500 аден

Также под рукой нет самих исходников, для полного разбора что-да как, другие сборки не предлагать ПЖЛ

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ошибка скорее всего возникает при попытке получить таргет игрока (вероятно не удачный копипаст, ибо не логично что делевел идёт не на используемого игрока)

А вообще, ответ на 101 строке скрипта

Изменено пользователем CalypsoToolz

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
2 часа назад, CalypsoToolz сказал:

Ошибка скорее всего возникает при попытке получить таргет игрока (вероятно не удачный копипаст, ибо не логично что делевел идёт не на используемого игрока)

А вообще, ответ на 101 строке скрипта

Дак, я тоже понял это позже и фикснул =)

activeChar.getStat().setLevel(lvl);

Обнаружено, что лвл падает , но опыт который был накоплен в течении периода развития персонажа не уменьшается.

Нужно как-то подстроить 

activeChar.getStat().removeExpAndSp((activeChar.getExp() - Experience.LEVEL[activeChar.getStat().getLevel() - 1]), 0);

Есть у кого желание помочь ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Дак еще разработал делевел на принципе команды setLevel(lvl) 

Спойлер

/*
 * This file is part of the L2J Mobius project.
 * 
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 * 
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
 * General Public License for more details.
 * 
 * You should have received a copy of the GNU General Public License
 * along with this program. If not, see <http://www.gnu.org/licenses/>.
 */
package handlers.voicedcommandhandlers;
import java.util.StringTokenizer;

import com.l2jmobius.Config;
import com.l2jmobius.gameserver.handler.IVoicedCommandHandler;
import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance;
import com.l2jmobius.gameserver.network.SystemMessageId;
import com.l2jmobius.gameserver.util.BuilderUtil;
import com.l2jmobius.gameserver.data.xml.impl.ExperienceData;
import com.l2jmobius.gameserver.model.L2Object;
import com.l2jmobius.gameserver.model.actor.L2Playable;

/**
 * This class trades Gold Bars for Adena and vice versa.
 * @author Ahmed
 */
public class Banking implements IVoicedCommandHandler
{
	private static final String[] _voicedCommands =
	{
		"delevel40",
		"delevel45",
		"delevel50",
		"delevel55",
		"delevel60",
		"delevel65"
	};
	
	@Override
	public boolean useVoicedCommand(String command, L2PcInstance activeChar, String params)
	{
		if (command.equals("delevel40"))
		{
		final StringTokenizer st = new StringTokenizer(command, " ");
		final String actualCommand = st.nextToken(); // Get actual command
			if (activeChar.getInventory().getInventoryItemCount(57, 0) >= 500)
			{
				if (!activeChar.reduceAdena("Adena", 500, activeChar, false))
				{
					return false;
				}
				activeChar.getInventory().updateDatabase();
				activeChar.sendMessage("Thank you, you have reduced your to " + 1 + " level, and " + 500 + " less Adena.");
				String val = "40";
				final byte lvl = Byte.parseByte(val);
				activeChar.getStat().setLevel(lvl);
			}
			else
			{
				activeChar.sendMessage("You do not have enough Adena to delevel, you need " + 500 + " Adena.");
			}
		}


		return true;
	}
	
	@Override
	public String[] getVoicedCommandList()
	{
		return _voicedCommands;
	}
}

 

На этом принципе можно как-то долго сделать дешманский "delevel" с кучами предусмотренных условий от багов setLevel() -а, но легче будет если подстроить под себя:

activeChar.getStat().removeExpAndSp((activeChar.getExp() - Experience.LEVEL[activeChar.getStat().getLevel() - 1]), 0);
Изменено пользователем bura
"targetPlayer.getStat().setLevel(lvl);" - замена на "activeChar.getStat().setLevel(lvl);"

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Дак 

3 минуты назад, bura сказал:

Дак еще разработал делевел на принципе команды setLevel(lvl) 

  Длинный код (Показать контент)


/*
 * This file is part of the L2J Mobius project.
 * 
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 * 
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
 * General Public License for more details.
 * 
 * You should have received a copy of the GNU General Public License
 * along with this program. If not, see <http://www.gnu.org/licenses/>.
 */
package handlers.voicedcommandhandlers;
import java.util.StringTokenizer;

import com.l2jmobius.Config;
import com.l2jmobius.gameserver.handler.IVoicedCommandHandler;
import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance;
import com.l2jmobius.gameserver.network.SystemMessageId;
import com.l2jmobius.gameserver.util.BuilderUtil;
import com.l2jmobius.gameserver.data.xml.impl.ExperienceData;
import com.l2jmobius.gameserver.model.L2Object;
import com.l2jmobius.gameserver.model.actor.L2Playable;

/**
 * This class trades Gold Bars for Adena and vice versa.
 * @author Ahmed
 */
public class Banking implements IVoicedCommandHandler
{
	private static final String[] _voicedCommands =
	{
		"delevel40",
		"delevel45",
		"delevel50",
		"delevel55",
		"delevel60",
		"delevel65"
	};
	
	@Override
	public boolean useVoicedCommand(String command, L2PcInstance activeChar, String params)
	{
		if (command.equals("delevel40"))
		{
		final StringTokenizer st = new StringTokenizer(command, " ");
		final String actualCommand = st.nextToken(); // Get actual command
			if (activeChar.getInventory().getInventoryItemCount(57, 0) >= 500)
			{
				if (!activeChar.reduceAdena("Adena", 500, activeChar, false))
				{
					return false;
				}
				activeChar.getInventory().updateDatabase();
				activeChar.sendMessage("Thank you, you have reduced your to " + 1 + " level, and " + 500 + " less Adena.");
				String val = "40";
				final byte lvl = Byte.parseByte(val);
				activeChar.getStat().setLevel(lvl);
			}
			else
			{
				activeChar.sendMessage("You do not have enough Adena to delevel, you need " + 500 + " Adena.");
			}
		}


		return true;
	}
	
	@Override
	public String[] getVoicedCommandList()
	{
		return _voicedCommands;
	}
}

 

На этом принципе можно как-то долго сделать дешманский "delevel" с кучами предусмотренных условий от багов setLevel() -а, но легче будет если подстроить под себя:


activeChar.getStat().removeExpAndSp((activeChar.getExp() - Experience.LEVEL[activeChar.getStat().getLevel() - 1]), 0);
Спойлер

ERROR: C:\Users\NoName\Desktop\L2J_Mobius_Classic_2.2_Antharas\game — копия\data\scripts\handlers\voicedcommandhandlers\Banking.java, Line 61, Column 46
        code: 33554515
        message: Experience cannot be resolved to a variable

    at com.l2jmobius.gameserver.scripting.java.JavaExecutionContext.executeScripts(JavaExecutionContext.java:176)
    at com.l2jmobius.gameserver.scripting.java.JavaExecutionContext.executeScript(JavaExecutionContext.java:248)
    at com.l2jmobius.gameserver.scripting.ScriptEngineManager.executeScript(ScriptEngineManager.java:363)
    at com.l2jmobius.gameserver.scripting.ScriptEngineManager.executeMasterHandler(ScriptEngineManager.java:240)
    at com.l2jmobius.gameserver.GameServer.<init>(GameServer.java:360)
    at com.l2jmobius.gameserver.GameServer.main(GameServer.java:481)

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
/*
* This file is part of the L2J Mobius project.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package handlers.voicedcommandhandlers;
 
import com.l2jmobius.Config;
import com.l2jmobius.gameserver.handler.IVoicedCommandHandler;
import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance;
 
/**
* This class trades Gold Bars for Adena and vice versa.
* @author Ahmed
*/
public class Banking implements IVoicedCommandHandler
{
    private static final String[] _voicedCommands =
    {
        "delevel"
    };
    
    @Override
    public boolean useVoicedCommand(String command, L2PcInstance activeChar, String params)
    {
        if (command.equals("delevel"))
        {
            if (activeChar.getInventory().getInventoryItemCount(57, 0) >= 1000000)
            {
                if (!activeChar.reduceAdena("Adena", 1000000, activeChar, false))
                {
                    return false;
                }
                activeChar.getInventory().updateDatabase();
                activeChar.sendMessage("Thank you, you have reduced your to " + 1 + " level, and " + 1000000 + " less Adena.");
                int blvl = activeChar.getLevel();
                int dlvl = 1;
                int clvl = blvl - dlvl;
                byte lvl = (byte)clvl;
                activeChar.getStat().setLevel(lvl);
                activeChar.setExp(ExperienceData.getInstance().getExpForLevel(lvl));
                activeChar.broadcastUserInfo();
                
            }
            else
            {
                activeChar.sendMessage("You do not have enough Adena to delevel, you need " + 1000000 + " Adena.");
            }
        }
        return true;
    }
    
    @Override
    public String[] getVoicedCommandList()
    {
        return _voicedCommands;
    }
}
Изменено пользователем bura

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Команда работает , слив есть , надо доработать для не получения бан чата

Спойлер
import com.l2jmobius.gameserver.handler.IVoicedCommandHandler;
import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance;
import com.l2jmobius.gameserver.network.SystemMessageId;
import com.l2jmobius.gameserver.util.BuilderUtil;
import com.l2jmobius.gameserver.data.xml.impl.ExperienceData;
import com.l2jmobius.gameserver.model.L2Object;
import com.l2jmobius.gameserver.model.actor.L2Playable;

 

Изменено пользователем bura

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
Авторизация  

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×
×
  • Создать...