root/trunk/AE-go_GameServer/src/com/aionemu/gameserver/controllers/PortalController.java

14491514
24
import com.aionemu.gameserver.model.gameobjects.Creature;
24
import com.aionemu.gameserver.model.gameobjects.Creature;
25
import com.aionemu.gameserver.model.gameobjects.player.Player;
25
import com.aionemu.gameserver.model.gameobjects.player.Player;
26
import com.aionemu.gameserver.model.group.PlayerGroup;
26
import com.aionemu.gameserver.model.group.PlayerGroup;
27
import com.aionemu.gameserver.model.templates.portal.ExitPoint;
27
import com.aionemu.gameserver.model.templates.portal.PortalTemplate;
28
import com.aionemu.gameserver.model.templates.portal.PortalTemplate;
28
import com.aionemu.gameserver.network.aion.serverpackets.SM_EMOTION;
29
import com.aionemu.gameserver.network.aion.serverpackets.SM_EMOTION;
29
import com.aionemu.gameserver.network.aion.serverpackets.SM_USE_OBJECT;
30
import com.aionemu.gameserver.network.aion.serverpackets.SM_USE_OBJECT;
31
import com.aionemu.gameserver.services.InstanceService;
30
import com.aionemu.gameserver.utils.PacketSendUtility;
32
import com.aionemu.gameserver.utils.PacketSendUtility;
31
import com.aionemu.gameserver.utils.ThreadPoolManager;
33
import com.aionemu.gameserver.utils.ThreadPoolManager;
32
import com.aionemu.gameserver.world.WorldMapInstance;
34
import com.aionemu.gameserver.world.WorldMapInstance;
...
...
34
36
35
/**
37
/**
36
 * @author ATracer
38
 * @author ATracer
37
 *
39
 * 
38
 */
40
 */
39
public class PortalController extends NpcController
41
public class PortalController extends NpcController
40
{
42
{
41
	@Inject
43
	@Inject
42
	private PortalData portalData;
44
	private PortalData		portalData;
43
	
45
	@Inject
44
	private PortalTemplate portalTemplate;
46
	private InstanceService	instanceService;
45
	
47
48
	private PortalTemplate	portalTemplate;
49
46
	@Override
50
	@Override
47
	public void setOwner(Creature owner)
51
	public void setOwner(Creature owner)
48
	{
52
	{
...
...
50
		portalTemplate = portalData.getPortalTemplate(owner.getObjectTemplate().getTemplateId());
54
		portalTemplate = portalData.getPortalTemplate(owner.getObjectTemplate().getTemplateId());
51
	}
55
	}
52
56
53
54
55
	@Override
57
	@Override
56
	public void onDialogRequest(Player player)
58
	public void onDialogRequest(final Player player)
57
	{
59
	{
58
		if(portalTemplate == null)
60
		if(portalTemplate == null)
59
			return;
61
			return;
60
		
61
		if(portalTemplate.isInstance() && CustomConfig.ENABLE_INSTANCES)
62
			portGroup(player);
63
		else
64
			port(player);
65
	}
66
62
63
		if(!CustomConfig.ENABLE_INSTANCES)
64
			return;
67
65
66
		final int defaultUseTime = 3000;
67
		PacketSendUtility.sendPacket(player, new SM_USE_OBJECT(player.getObjectId(), getOwner().getObjectId(),
68
			defaultUseTime, 1));
69
		PacketSendUtility.broadcastPacket(player, new SM_EMOTION(player, 37, 0, getOwner().getObjectId()), true);
68
70
71
		ThreadPoolManager.getInstance().schedule(new Runnable(){
72
			@Override
73
			public void run()
74
			{
75
				PacketSendUtility.sendPacket(player, new SM_USE_OBJECT(player.getObjectId(), getOwner().getObjectId(),
76
					defaultUseTime, 0));
77
				
78
				analyzePortation(player);
79
			}
80
			
81
			/**
82
			 * @param player
83
			 */
84
			private void analyzePortation(final Player player)
85
			{
86
				PlayerGroup group = player.getPlayerGroup();
87
88
				if(portalTemplate.isGroup() && group != null)
89
				{
90
					WorldMapInstance instance = instanceService.getRegisteredInstance(portalTemplate.getExitPoint()
91
						.getMapId(), group.getGroupId());
92
					// if already registered - just teleport
93
					if(instance != null)
94
					{
95
						transfer(player, instance);
96
						return;
97
					}
98
99
					portGroup(player);
100
				}
101
				else if(!portalTemplate.isGroup())
102
				{
103
					WorldMapInstance instance = instanceService.getRegisteredInstance(portalTemplate.getExitPoint()
104
						.getMapId(), player.getObjectId());
105
					// if already registered - just teleport
106
					if(instance != null)
107
					{
108
						transfer(player, instance);
109
						return;
110
					}
111
					port(player);
112
				}
113
			}
114
		}, defaultUseTime);
115
116
	}
117
69
	/**
118
	/**
70
	 * @param player
119
	 * @param player
71
	 */
120
	 */
72
	private void port(Player player)
121
	private void port(Player requester)
73
	{
122
	{
74
		Collection<Player> players = Collections.singletonList(player);
123
		Collection<Player> players = Collections.singletonList(requester);
75
		if(!checkPlayersLevel(players))
124
		if(!checkPlayersLevel(players))
76
			return;
125
			return;
77
		
126
78
		transfer(player, players);
127
		WorldMapInstance instance = instanceService.getNextAvailableInstance(portalTemplate.getExitPoint().getMapId());
128
		instanceService.registerPlayerWithInstance(instance, requester);
129
		transfer(requester, instance);
79
	}
130
	}
80
131
81
82
	/**
132
	/**
83
	 * @param player
133
	 * @param player
84
	 */
134
	 */
85
	private void portGroup(Player player)
135
	private void portGroup(Player requester)
86
	{
136
	{
87
		PlayerGroup group = player.getPlayerGroup();
137
		PlayerGroup group = requester.getPlayerGroup();
88
		if(group == null || group.getGroupLeader().getObjectId() != player.getObjectId())
138
		if(group == null || group.getGroupLeader().getObjectId() != requester.getObjectId())
139
		{
140
			PacketSendUtility.sendMessage(requester, "You are not group leader");
89
			return;
141
			return;
90
		
142
		}		
143
91
		Collection<Player> players = group.getMembers();
144
		Collection<Player> players = group.getMembers();
92
		if(!checkPlayersLevel(players))
145
		if(!checkPlayersLevel(players))
93
			return;
146
			return;
94
		
147
95
		transfer(player, players);		
148
		WorldMapInstance instance = instanceService.getNextAvailableInstance(portalTemplate.getExitPoint().getMapId());
149
		instanceService.registerGroupWithInstance(instance, group);
150
		for(Player player : players)
151
		{
152
			transfer(player, instance);
153
		}
96
	}
154
	}
97
155
98
	/**
156
	/**
99
	 * @param players
157
	 * @param players
100
	 */
158
	 */
101
	private void transfer(final Player leader, final Collection<Player> players)
159
	private void transfer(Player player, WorldMapInstance instance)
102
	{
160
	{
103
		final int defaultUseTime = 3000;
161
		ExitPoint exitPoint = portalTemplate.getExitPoint();
104
		PacketSendUtility.sendPacket(leader, new SM_USE_OBJECT(leader.getObjectId(), 
162
		sp.getTeleportService().teleportTo(player, exitPoint.getMapId(), instance.getInstanceId(),
105
			getOwner().getObjectId(), defaultUseTime, 1));
163
			exitPoint.getX(), exitPoint.getY(), exitPoint.getZ(), 0);
106
		PacketSendUtility.broadcastPacket(leader, new SM_EMOTION(leader, 37, 0, getOwner().getObjectId()), true);
107
		
108
		ThreadPoolManager.getInstance().schedule(new Runnable(){
109
			@Override
110
			public void run()
111
			{
112
				PacketSendUtility.sendPacket(leader, new SM_USE_OBJECT(leader.getObjectId(), 
113
					getOwner().getObjectId(), defaultUseTime, 0));
114
				
115
				WorldMapInstance newInstance = sp.getWorld().getNextAvailableInstance(portalTemplate.getMapId());
116
				newInstance.setDestroyTime(60 * 30);
117
				
118
				for(Player player : players)
119
				{
120
					sp.getTeleportService().teleportTo(player, portalTemplate.getMapId(), newInstance.getInstanceId(),
121
						portalTemplate.getX(), portalTemplate.getY(), portalTemplate.getZ(), 0);
122
				}
123
			}
124
		}, defaultUseTime);
125
	}
164
	}
126
165
127
	
128
	/**
166
	/**
129
	 * 
167
	 * 
130
	 * @param players
168
	 * @param players
...
...
134
	{
172
	{
135
		int minLevel = portalTemplate.getMinLevel();
173
		int minLevel = portalTemplate.getMinLevel();
136
		int maxLevel = portalTemplate.getMaxLevel();
174
		int maxLevel = portalTemplate.getMaxLevel();
137
		
175
138
		for(Player player : players)
176
		for(Player player : players)
139
		{
177
		{
140
			int playerLevel = player.getLevel();
178
			int playerLevel = player.getLevel();
...
...
143
		}
181
		}
144
		return true;
182
		return true;
145
	}
183
	}
146
	
184
147
	
148
}
185
}