Jump to content
  • 0

[Request] Rebirth System


Question

Posted

In frozen is rebirth system but you can't select skills

bypass -h custom_rebirth_requestrebirth

don't working. I need rebirth like in l2gold you can choose skills to rebirth.

I think you understand me, because my english is not very good, so please help me, THANKS!

4 answers to this question

Recommended Posts

  • 0
Posted

write down what U HAVE DONE ALREADY and in which part u have got a problem. Lines of code would be awesome

  • 0
Posted

/*
* 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 com.l2jfrozen.gameserver.model.entity;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.HashMap;

import com.l2jfrozen.Config;
import com.l2jfrozen.gameserver.datatables.SkillTable;
import com.l2jfrozen.gameserver.datatables.sql.ItemTable;
import com.l2jfrozen.gameserver.datatables.xml.ExperienceData;
import com.l2jfrozen.gameserver.model.L2Skill;
import com.l2jfrozen.gameserver.model.actor.instance.L2ItemInstance;
import com.l2jfrozen.gameserver.model.actor.instance.L2PcInstance;
import com.l2jfrozen.gameserver.network.serverpackets.CreatureSay;
import com.l2jfrozen.gameserver.network.serverpackets.SocialAction;
import com.l2jfrozen.util.CloseUtil;
import com.l2jfrozen.util.database.L2DatabaseFactory;

/**
* <strong>This 'Custom Engine' was developed for L2J Forum Member 'sauron3256' on November 1st, 2008.</strong><br>
* <br>
* <strong>Quick Summary:</strong><br>
* This engine will grant the player special bonus skills at the cost of reseting him to level 1.<br>
* The -USER- can set up to X Rebirths, the skills received and their respective levels, and the item and price of each
* rebirth.<br>
* PLAYER's information is stored in an SQL Db under the table name: REBIRTH_MANAGER.<br>
* 
* @author <strong>Beetle and Shyla</strong>
*/
public class L2Rebirth
{

/** The current instance - static repeller. */
private static L2Rebirth _instance = null;

/** Basically, this will act as a cache so it doesnt have to read DB information on relog. */
private HashMap<Integer, Integer> _playersRebirthInfo = new HashMap<Integer, Integer>();

/**
 * Creates a new NON-STATIC instance.
 */
private L2Rebirth()
{
//Do Nothing ^_-
}

/**
 * Receives the non-static instance of the RebirthManager.
 *
 * @return single instance of L2Rebirth
 */
public static L2Rebirth getInstance()
{
	if(_instance == null)
	{
		_instance = new L2Rebirth();
	}
	return _instance;
}

/**
 * This is what it called from the Bypass Handler. (I think that's all thats needed here).
 *
 * @param player the player
 * @param command the command
 */
public void handleCommand(L2PcInstance player, String command)
{
	if(command.startsWith("custom_rebirth_requestrebirth"))
	{
		displayRebirthWindow(player);
	}
	else if(command.startsWith("custom_rebirth_confirmrequest"))
	{
		requestRebirth(player);
	}
}

/**
 * Display's an HTML window with the Rebirth Options.
 *
 * @param player the player
 */
public void displayRebirthWindow(L2PcInstance player)
{
	try
	{
		int currBirth = getRebirthLevel(player); //Returns the player's current birth level

		//Don't send html if player is already at max rebirth count.
		if(currBirth >= Config.REBIRTH_MAX)
		{
			player.sendMessage("You are currently at your maximum rebirth count!");
			return;
		}

		//Returns true if BASE CLASS is a mage.
		boolean isMage = player.getBaseTemplate().classId.isMage();
		//Returns the skill based on next Birth and if isMage.
		L2Skill skill = getRebirthSkill((currBirth + 1), isMage);

		String icon = "" + skill.getId();//Returns the skill's id.

		//Incase the skill is only 3 digits.
		if(icon.length() < 4)
		{
			icon = "0" + icon;
		}

		skill = null;
		icon = null;

	}
	catch(Exception e)
	{
		e.printStackTrace();
	}
}

/**
 * Checks to see if the player is eligible for a Rebirth, if so it grants it and stores information.
 *
 * @param player the player
 */
public void requestRebirth(L2PcInstance player)
{
	//Check the player's level.
	if(player.getLevel() < Config.REBIRTH_MIN_LEVEL)
	{
		player.sendMessage("You do not meet the level requirement for a Rebirth!");
		return;
	}

	else if(player.isSubClassActive())
	{
		player.sendMessage("Please switch to your Main Class before attempting a Rebirth.");
		return;
	}

	int currBirth = getRebirthLevel(player);
	int itemNeeded = 0;
	int itemAmount = 0;

	if(currBirth >= Config.REBIRTH_MAX)
	{
		player.sendMessage("You are currently at your maximum rebirth count!");
		return;
	}

	//Get the requirements
	int loopBirth = 0;
	for(String readItems : Config.REBIRTH_ITEM_PRICE) {
		String[] currItem = readItems.split(",");
		if (loopBirth == currBirth) {
			itemNeeded = Integer.parseInt(currItem[0]);
			itemAmount = Integer.parseInt(currItem[1]);
			break;
		}
		loopBirth++;
	}

	//Their is an item required
	if(itemNeeded != 0)
	{
		//Checks to see if player has required items, and takes them if so.
		if(!playerIsEligible(player, itemNeeded, itemAmount))
			return;
	}

	//Check and see if its the player's first Rebirth calling.
	boolean firstBirth = currBirth == 0;
	//Player meets requirements and starts Rebirth Process.
	grantRebirth(player, (currBirth + 1), firstBirth);
}

/**
 * Physically rewards player and resets status to nothing.
 *
 * @param player the player
 * @param newBirthCount the new birth count
 * @param firstBirth the first birth
 */
public void grantRebirth(L2PcInstance player, int newBirthCount, boolean firstBirth)
{
	try
	{
		double actual_hp = player.getCurrentHp();
		double actual_cp = player.getCurrentCp();

		int max_level = ExperienceData.getInstance().getMaxLevel();

		if(player.isSubClassActive())
		{
			max_level = Config.MAX_SUBCLASS_LEVEL;
		}

		//Protections
		Integer returnToLevel = Config.REBIRTH_RETURN_TO_LEVEL;
		if (returnToLevel < 1) 
			returnToLevel = 1; 
		if (returnToLevel > max_level) 
			returnToLevel = max_level;

		//Resets character to first class.
		player.setClassId(player.getBaseClass());

		player.broadcastUserInfo();

		final byte lvl = Byte.parseByte(returnToLevel+"");

		final long pXp = player.getStat().getExp();
		final long tXp = ExperienceData.getInstance().getExpForLevel(lvl);

		if(pXp > tXp)
		{
			player.getStat().removeExpAndSp(pXp - tXp, 0);
		}
		else if(pXp < tXp)
		{
			player.getStat().addExpAndSp(tXp - pXp, 0);
		}

		//Remove the player's current skills.
		for(L2Skill skill : player.getAllSkills())
		{
			player.removeSkill(skill);
		}
		//Give players their eligible skills.
		player.giveAvailableSkills();

		//restore Hp-Mp-Cp
		player.setCurrentCpDirect(actual_cp);
		player.setCurrentMpDirect(player.getMaxMp());
		player.setCurrentHpDirect(actual_hp);
		player.broadcastStatusUpdate();

		//Updates the player's information in the Character Database.
		player.store();

		if(firstBirth)
		{
			storePlayerBirth(player);
		}
		else
		{
			updatePlayerBirth(player, newBirthCount);
		}

		//Give the player his new Skills.
		grantRebirthSkills(player);


		//Displays a congratulation message to the player.
		displayCongrats(player);
		returnToLevel = null;
	}
	catch(Exception e)
	{
		e.printStackTrace();
	}
}

/**
 * Special effects when the player levels.
 *
 * @param player the player
 */
public void displayCongrats(L2PcInstance player)
{
	//Victory Social Action.
	player.setTarget(player);
	player.broadcastPacket(new SocialAction(player.getObjectId(), 3));
	player.sendMessage("Congratulations " + player.getName() + ". You have been REBORN!");
	player.sendMessage("You got the passive skill!");
}

/**
 * Check and verify the player DOES have the item required for a request. Also, remove the item if he has.
 *
 * @param player the player
 * @param itemId the item id
 * @param itemAmount the item amount
 * @return true, if successful
 */
public boolean playerIsEligible(L2PcInstance player, int itemId, int itemAmount)
{
	String itemName = ItemTable.getInstance().getTemplate(itemId).getName();
	L2ItemInstance itemNeeded = player.getInventory().getItemByItemId(itemId);

	if(itemNeeded == null || itemNeeded.getCount() < itemAmount)
	{
		player.sendMessage("You need atleast " + itemAmount + "  [ " + itemName + " ] to request a Rebirth!");
		return false;
	}

	//Player has the required items, so we're going to take them!
	player.getInventory().destroyItemByItemId("Rebirth Engine", itemId, itemAmount, player, null);
	player.sendMessage("Removed " + itemAmount + " " + itemName + " from your inventory!");

	itemName = null;
	itemNeeded = null;

	return true;
}

/**
 * Gives the available Bonus Skills to the player.
 *
 * @param player the player
 */
public void grantRebirthSkills(L2PcInstance player)
{
	//returns the current Rebirth Level
	int rebirthLevel = getRebirthLevel(player);
	//Returns true if BASE CLASS is a mage.
	boolean isMage = player.getBaseTemplate().classId.isMage();

	//Simply return since no bonus skills are granted.
	if(rebirthLevel == 0)
		return;

	  //Load the bonus skills unto the player.
	  CreatureSay rebirthText = null;
	  for(int i = 0; i < rebirthLevel; i++)
	  {
	   L2Skill bonusSkill = getRebirthSkill((i + 1), isMage);
	   player.addSkill(bonusSkill, false);
	  }
}
/**
 * Return the player's current Rebirth Level.
 *
 * @param player the player
 * @return the rebirth level
 */
public int getRebirthLevel(L2PcInstance player)
{
	int playerId = player.getObjectId();

	if(_playersRebirthInfo.get(playerId) == null)
	{
		loadRebirthInfo(player);
	}

	return _playersRebirthInfo.get(playerId);
}

/**
 * Return the L2Skill the player is going to be rewarded.
 *
 * @param rebirthLevel the rebirth level
 * @param mage the mage
 * @return the rebirth skill
 */
public L2Skill getRebirthSkill(int rebirthLevel, boolean mage)
{
	L2Skill skill = null;

	//Player is a Mage.
	if(mage)
	{	
		int loopBirth = 0;
		for(String readSkill : Config.REBIRTH_MAGE_SKILL) {
			String[] currSkill = readSkill.split(",");
			if (loopBirth == (rebirthLevel-1)) {
				skill = SkillTable.getInstance().getInfo(Integer.parseInt(currSkill[0]), Integer.parseInt(currSkill[1]));
				break;
			}
			loopBirth++;
		}
	}
	//Player is a Fighter.
	else
	{
		int loopBirth = 0;
		for(String readSkill : Config.REBIRTH_FIGHTER_SKILL) {
			String[] currSkill = readSkill.split(",");
			if (loopBirth == (rebirthLevel-1)) {
				skill = SkillTable.getInstance().getInfo(Integer.parseInt(currSkill[0]), Integer.parseInt(currSkill[1]));
				break;
			}
			loopBirth++;
		}
	}
	return skill;
}

/**
 * Database caller to retrieve player's current Rebirth Level.
 *
 * @param player the player
 */
public void loadRebirthInfo(L2PcInstance player)
{
	int playerId = player.getObjectId();
	int rebirthCount = 0;

	Connection con = null;
	try
	{
		ResultSet rset;
		con = L2DatabaseFactory.getInstance().getConnection(false);
		PreparedStatement statement = con.prepareStatement("SELECT * FROM `rebirth_manager` WHERE playerId = ?");
		statement.setInt(1, playerId);
		rset = statement.executeQuery();

		while(rset.next())
		{
			rebirthCount = rset.getInt("rebirthCount");
		}

		rset.close();
		statement.close();
		statement = null;
		rset = null;

	}
	catch(Exception e)
	{
		e.printStackTrace();
	}
	finally
	{
		CloseUtil.close(con);
		con = null;
	}
	_playersRebirthInfo.put(playerId, rebirthCount);
}

/**
 * Stores the player's information in the DB.
 *
 * @param player the player
 */
public void storePlayerBirth(L2PcInstance player)
{
	Connection con = null;
	try
	{
		con = L2DatabaseFactory.getInstance().getConnection(false);
		PreparedStatement statement = con.prepareStatement("INSERT INTO `rebirth_manager` (playerId,rebirthCount) VALUES (?,1)");
		statement.setInt(1, player.getObjectId());
		statement.execute();
		statement = null;

		_playersRebirthInfo.put(player.getObjectId(), 1);

	}
	catch(Exception e)
	{
		e.printStackTrace();
	}
	finally
	{
		CloseUtil.close(con);
		con = null;
	}
}

/**
 * Updates the player's information in the DB.
 *
 * @param player the player
 * @param newRebirthCount the new rebirth count
 */
public void updatePlayerBirth(L2PcInstance player, int newRebirthCount)
{
	Connection con = null;
	try
	{
		int playerId = player.getObjectId();

		con = L2DatabaseFactory.getInstance().getConnection(false);
		PreparedStatement statement = con.prepareStatement("UPDATE `rebirth_manager` SET rebirthCount = ? WHERE playerId = ?");
		statement.setInt(1, newRebirthCount);
		statement.setInt(2, playerId);
		statement.execute();
		statement = null;

		_playersRebirthInfo.put(playerId, newRebirthCount);
	}
	catch(Exception e)
	{
		e.printStackTrace();
	}
	finally
	{
		CloseUtil.close(con);
		con = null;
	}
}
}

 

as i understand in npc need put this custom_rebirth_requestrebirth to popout window with skill choose, but this don't working, working only custom_rebirth_confirmrequest

Guest
This topic is now closed to further replies.


×
×
  • Create New...

AdBlock Extension Detected!

Our website is made possible by displaying online advertisements to our members.

Please disable AdBlock browser extension first, to be able to use our community.

I've Disabled AdBlock