Jump to content

Recommended Posts

Posted (edited)

Hello, since i'm disappointed with the forum and i'm bored i made a code. I haven't test it but if there is any problem you can write bellow.

What it does it basically you set how many hours you want your player to be hero and you set him hero. He can log out and login he is still hero

until time is over and hero removed automatically. It use database to store.

 

Index: com/l2jserver/gameserver/model/actor/instance/L2PcInstance.java
======================================================================

	private long _heroTime;
	
	public void setHeroTime(int hour) //Add hero time here
	{
		_heroTime = System.currentTimeMillis() + hour * 1000 * 3600;
		HeroTask.updateHero(this, _heroTime);
                scheduleHeroTime();
	}
	
	private ScheduledFuture<?> _heroTask;
	
	public void scheduleHeroTime()
	{
		setHero(true);
		broadcastUserInfo();
		
		for (L2Skill sk : HeroSkillTable.getHeroSkills())
			addSkill(sk, false);
		
		_heroTask = ThreadPoolManager.getInstance().scheduleGeneral(new Runnable()
		{
			@Override
			public void run()
			{
				if (L2PcInstance.this !=null)
				{
					setHero(false);
					broadcastUserInfo();
					
					for (L2Skill sk : HeroSkillTable.getHeroSkills())
						removeSkill(sk);
				}
			}
			
		}, HeroTask.getRemainedHero(this) - System.currentTimeMillis());
	}
	
	public boolean isHeroTimeTask()
	{
		if (System.currentTimeMillis() > HeroTask.getRemainedHero(this) + 5000)
			return false;
		return true;
	}
	
Index: com/l2jserver/gameserver/GameServer.java
======================================================================
HeroTask.loadData();

Index: com/l2jserver/gameserver/datatables/HeroTask.java
======================================================================

package com.l2jserver.gameserver.custom;

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

import com.l2jserver.L2DatabaseFactory;
import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;

/**
 * @author AccessDenied
 */
public class HeroTask
{
	private static Connection _con;
	private static final String SELECT_HERO = "SELECT * FROM heroTask";
	private static final String INSERT_HERO = "INSERT INTO heroTask(charId, heroTime) values (?,?)";
	private static final Map<Integer, Long> _hero = new HashMap<Integer, Long>();
	
	public static void storeHeroTime()
	{
		try
		{
			final PreparedStatement st = getConnection().prepareStatement(INSERT_HERO);

			for (Entry<Integer, Long> next : _hero.entrySet())
			{
				int objectId = next.getKey();
				Long time = next.getValue();

				st.setInt(1, objectId);
				st.setLong(2, time);
			}

			st.execute();
			st.close();

		} 
		catch (final Exception e)
		{
			e.printStackTrace();
		} 
		finally
		{
			L2DatabaseFactory.close(_con);
		}
	}

	public static void loadData()
	{
		try
		{
			final PreparedStatement st = getConnection().prepareStatement(SELECT_HERO);
			final ResultSet rset = st.executeQuery();

			while (rset.next())
			{
				final int playerId = rset.getInt(1);
				final long heroTime = rset.getLong(2);

				_hero.put(playerId, heroTime);
			}

			st.close();
		} 
		catch (final Exception e)
		{
			e.printStackTrace();
		} 
		finally
		{
			L2DatabaseFactory.close(_con);
		}
	}
	
	public static void updateHero(L2PcInstance p, long time)
	{
		_hero.put(p.getObjectId(), time);
	}
	
	public static long getRemainedHero(L2PcInstance p)
	{
		if (_hero.containsKey(p))
			return _hero.get(p);
		return 0;
	}

	private static Connection getConnection()
	{
		try
		{
			if (_con == null || _con.isClosed())
				_con = L2DatabaseFactory.getInstance().getConnection();
		} catch (final Exception e)
		{
			e.printStackTrace();
		}
		return _con;
	}
}

Index: com/l2jserver/gameserverg/gameserver/network/clientpackets/RequestRestart.java
======================================================================

if (player._heroTask !=null)
	_heroTask.cancel(true);
	
Index: com/l2jserver/gameserverg/gameserver/network/clientpackets/RequestLogout.java
======================================================================

if (player._heroTask !=null)
	_heroTask.cancel(true);


Index: com/l2jserver/gameserver/Shutdown.java
======================================================================

HeroTask.storeHeroTime();


Index: com/l2jserver/gameserver/network/clientpackets/Enterworld.java
======================================================================

	if (activeChar.isHeroTimeTask())
		activeChar.scheduleHeroTime();

 

Sql file:

/*
MySQL Data Transfer
Source Host: localhost
Source Database: none
Target Host: localhost
Target Database: L2j
Date: 6/1/2017 5:52:35 μμ
*/

SET FOREIGN_KEY_CHECKS=0;
-- ----------------------------
-- Table structure for herotask
-- ----------------------------
DROP TABLE IF EXISTS `herotask`;
CREATE TABLE `herotask` (
  `charId` int(15),
  `heroTime` bigint(15) DEFAULT '0'
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records 
-- ----------------------------

Edited by AccessDenied

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.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...