root/trunk/AE-go_GameServer/src/com/aionemu/gameserver/controllers/PortalController.java
| 1449 | 1514 | ||
|---|---|---|---|
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 | } |
Download diff