Changeset 1521

User picture

Author: ATracer

(2010/03/14 20:37) Almost 2 years ago

[Skill engine] Aura effect implemented (Clement Mind Mantra, Protection Mantra, Celerity Mantra, Intensity Mantra, Magic Mantra, Revival Mantra etc). Maximum number of toggle skills is limited to 3 (group with multiple chanters is not restricted yet)

Affected files

Updated trunk/AE-go_GameServer/data/scripts/system/database/mysql5/MySQL5PlayerSettingsDAO.java Download diff

15201521
36
 */
36
 */
37
public class MySQL5PlayerSettingsDAO extends PlayerSettingsDAO
37
public class MySQL5PlayerSettingsDAO extends PlayerSettingsDAO
38
{
38
{
39
39
	@SuppressWarnings("unused")
40
	private static final Logger log = Logger.getLogger(MySQL5PlayerSettingsDAO.class);
40
	private static final Logger log = Logger.getLogger(MySQL5PlayerSettingsDAO.class);
41
41
42
	/**
42
	/**
...
...
56
		final int playerId = player.getObjectId();
56
		final int playerId = player.getObjectId();
57
		final PlayerSettings playerSettings = new PlayerSettings();
57
		final PlayerSettings playerSettings = new PlayerSettings();
58
58
59
		boolean success = DB.select("SELECT * FROM player_settings WHERE player_id = ?", new ParamReadStH() {
59
		DB.select("SELECT * FROM player_settings WHERE player_id = ?", new ParamReadStH() {
60
60
61
			@Override
61
			@Override
62
			public void handleRead(ResultSet resultSet) throws SQLException
62
			public void handleRead(ResultSet resultSet) throws SQLException
...
...
90
		});
90
		});
91
		playerSettings.setPersistentState(PersistentState.UPDATED);
91
		playerSettings.setPersistentState(PersistentState.UPDATED);
92
		player.setPlayerSettings(playerSettings);
92
		player.setPlayerSettings(playerSettings);
93
		log.info("Loaded settings with success: " + success);
94
	}
93
	}
95
94
96
	@Override
95
	@Override
...
...
106
		final byte[] shortcuts = playerSettings.getShortcuts();
105
		final byte[] shortcuts = playerSettings.getShortcuts();
107
		final int display = playerSettings.getDisplay();
106
		final int display = playerSettings.getDisplay();
108
		final int deny = playerSettings.getDeny();
107
		final int deny = playerSettings.getDeny();
109
108
		
110
		log.info("Saving settings");
111
112
		if(uiSettings != null)
109
		if(uiSettings != null)
113
		{
110
		{
114
			DB.insertUpdate("REPLACE INTO player_settings values (?, ?, ?)", new IUStH() {
111
			DB.insertUpdate("REPLACE INTO player_settings values (?, ?, ?)", new IUStH() {

Updated trunk/AE-go_GameServer/data/static_data/skills/skills.xsd Download diff

15201521
165
				minOccurs="0" maxOccurs="1" />
165
				minOccurs="0" maxOccurs="1" />
166
			<xs:element name="switchhpmp" type="SwitchHpMpEffect"
166
			<xs:element name="switchhpmp" type="SwitchHpMpEffect"
167
				minOccurs="0" maxOccurs="1" />
167
				minOccurs="0" maxOccurs="1" />
168
			<xs:element name="summon" type="SummonEffect" maxOccurs="1" minOccurs="0"></xs:element>
168
			<xs:element name="summon" type="SummonEffect" maxOccurs="1" minOccurs="0"></xs:element>
169
169
170
			<xs:element name="aura" type="AuraEffect"
171
				minOccurs="0" maxOccurs="1" />
170
		</xs:sequence>
172
		</xs:sequence>
171
		<xs:attribute name="food" type="xs:boolean"/>
173
		<xs:attribute name="food" type="xs:boolean"/>
172
	</xs:complexType>
174
	</xs:complexType>
...
...
833
			</xs:extension>
835
			</xs:extension>
834
		</xs:complexContent>
836
		</xs:complexContent>
835
	</xs:complexType>
837
	</xs:complexType>
838
	
839
	<xs:complexType name="AuraEffect">
840
		<xs:complexContent>
841
			<xs:extension base="Effect">
842
				<xs:attribute name="distance" type="xs:int" />
843
				<xs:attribute name="skill_id" type="xs:int" />
844
			</xs:extension>
845
		</xs:complexContent>
846
	</xs:complexType>
836
847
837
	<!-- CONDITIONS -->
848
	<!-- CONDITIONS -->
838
849

Updated trunk/AE-go_GameServer/src/com/aionemu/gameserver/controllers/effect/EffectController.java Download diff

15201521
69
	{
69
	{
70
		Map<String, Effect> mapToUpdate = getMapForEffect(effect);
70
		Map<String, Effect> mapToUpdate = getMapForEffect(effect);
71
		
71
		
72
		if(mapToUpdate.containsKey(effect.getStack()))
72
		Effect existingEffect = mapToUpdate.get(effect.getStack());
73
		if(existingEffect != null)
73
		{
74
		{
74
			Effect existingEffect = mapToUpdate.get(effect.getStack());
75
			// check stack level
75
			
76
			//check stack level
77
			if(existingEffect.getSkillStackLvl() > effect.getSkillStackLvl())
76
			if(existingEffect.getSkillStackLvl() > effect.getSkillStackLvl())
78
				return;
77
				return;
79
			//check skill level (when stack level same)
78
			// check skill level (when stack level same)
80
			if(existingEffect.getSkillStackLvl() == effect.getSkillStackLvl() 
79
			if(existingEffect.getSkillStackLvl() == effect.getSkillStackLvl()
81
				&& existingEffect.getSkillLevel() > effect.getSkillLevel())
80
				&& existingEffect.getSkillLevel() > effect.getSkillLevel())
82
				return;
81
				return;
83
			
82
84
			existingEffect.endEffect();
83
			existingEffect.endEffect();
85
		}
84
		}
86
		
85
		
86
		if(effect.isToggle() && mapToUpdate.size() >= 3)
87
		{
88
			Iterator<Effect> iter = mapToUpdate.values().iterator();
89
			Effect nextEffect = iter.next();
90
			nextEffect.endEffect();
91
			iter.remove();			
92
		}
93
87
		mapToUpdate.put(effect.getStack(), effect);
94
		mapToUpdate.put(effect.getStack(), effect);
88
		effect.startEffect();		
95
		effect.startEffect();
89
		
96
90
		if(!effect.isPassive())
97
		if(!effect.isPassive())
91
		{
98
		{
92
			// effect icon updates
99
			// effect icon updates
...
...
170
	{
177
	{
171
		for(Effect effect : abnormalEffectMap.values()){
178
		for(Effect effect : abnormalEffectMap.values()){
172
			if(effect.getSkillId()==skillid){
179
			if(effect.getSkillId()==skillid){
173
				abnormalEffectMap.remove(effect.getStack());
174
				effect.endEffect();
180
				effect.endEffect();
181
				abnormalEffectMap.remove(effect.getStack());				
175
			}
182
			}
176
		}
183
		}
177
		
184
		
...
...
190
	{
197
	{
191
		for(Effect effect : abnormalEffectMap.values()){
198
		for(Effect effect : abnormalEffectMap.values()){
192
			if(effect.containsEffectId(effectId)){
199
			if(effect.containsEffectId(effectId)){
193
				abnormalEffectMap.remove(effect.getStack());
194
				effect.endEffect();
200
				effect.endEffect();
201
				abnormalEffectMap.remove(effect.getStack());				
195
			}
202
			}
196
		}
203
		}
197
		
204
		
...
...
211
	{
218
	{
212
		for(Effect effect : passiveEffectMap.values()){
219
		for(Effect effect : passiveEffectMap.values()){
213
			if(effect.getSkillId()==skillid){
220
			if(effect.getSkillId()==skillid){
214
				passiveEffectMap.remove(effect.getStack());
215
				effect.endEffect();
221
				effect.endEffect();
222
				passiveEffectMap.remove(effect.getStack());				
216
			}
223
			}
217
		}
224
		}
218
	}
225
	}
...
...
225
	{
232
	{
226
		for(Effect effect : noshowEffects.values()){
233
		for(Effect effect : noshowEffects.values()){
227
			if(effect.getSkillId()==skillid){
234
			if(effect.getSkillId()==skillid){
228
				noshowEffects.remove(effect.getStack());
229
				effect.endEffect();
235
				effect.endEffect();
236
				noshowEffects.remove(effect.getStack());				
230
			}
237
			}
231
		}
238
		}
232
	}
239
	}
...
...
241
			effect.endEffect();
248
			effect.endEffect();
242
		}
249
		}
243
		abnormalEffectMap.clear();
250
		abnormalEffectMap.clear();
251
		for(Effect effect : noshowEffects.values())
252
		{
253
			effect.endEffect();
254
		}
255
		noshowEffects.clear();
244
	}
256
	}
245
	
257
	
246
	public void updatePlayerEffectIcons()
258
	public void updatePlayerEffectIcons()

Updated trunk/AE-go_GameServer/src/com/aionemu/gameserver/network/aion/serverpackets/SM_MANTRA_EFFECT.java Download diff

15201521
33
	public SM_MANTRA_EFFECT(Player player, int subEffectId)
33
	public SM_MANTRA_EFFECT(Player player, int subEffectId)
34
	{
34
	{
35
		this.player = player;
35
		this.player = player;
36
		this.subEffectId = subEffectId;
36
	}
37
	}
37
38
38
	/**
39
	/**

Updated trunk/AE-go_GameServer/src/com/aionemu/gameserver/services/PlayerService.java Download diff

15201521
19
import java.sql.Timestamp;
19
import java.sql.Timestamp;
20
import java.util.List;
20
import java.util.List;
21
21
22
import org.apache.log4j.Logger;
23
22
import com.aionemu.commons.database.dao.DAOManager;
24
import com.aionemu.commons.database.dao.DAOManager;
23
import com.aionemu.gameserver.configs.main.CacheConfig;
25
import com.aionemu.gameserver.configs.main.CacheConfig;
24
import com.aionemu.gameserver.configs.main.GSConfig;
26
import com.aionemu.gameserver.configs.main.GSConfig;
...
...
85
 */
87
 */
86
public class PlayerService
88
public class PlayerService
87
{
89
{
90
	private static final Logger			log			= Logger.getLogger(PlayerService.class);
88
	private CacheMap<Integer, Player>	playerCache	= CacheMapFactory.createSoftCacheMap("Player", "player");
91
	private CacheMap<Integer, Player>	playerCache	= CacheMapFactory.createSoftCacheMap("Player", "player");
89
92
90
	private World						world;
93
	private World						world;
...
...
348
	 */
351
	 */
349
	public void playerLoggedIn(Player player)
352
	public void playerLoggedIn(Player player)
350
	{
353
	{
354
		log.info("Player logged in: " + player.getName());
351
		player.getCommonData().setOnline(true);
355
		player.getCommonData().setOnline(true);
352
		DAOManager.getDAO(PlayerDAO.class).onlinePlayer(player, true);
356
		DAOManager.getDAO(PlayerDAO.class).onlinePlayer(player, true);
353
		player.onLoggedIn();
357
		player.onLoggedIn();
...
...
365
	 */
369
	 */
366
	public void playerLoggedOut(final Player player)
370
	public void playerLoggedOut(final Player player)
367
	{
371
	{
372
		log.info("Player logged out: " + player.getName());
373
		
368
		player.onLoggedOut();
374
		player.onLoggedOut();
369
375
		
376
		player.getEffectController().removeAllEffects();
377
		
370
		if(player.getLifeStats().isAlreadyDead())
378
		if(player.getLifeStats().isAlreadyDead())
371
			teleportService.moveToBindLocation(player, false);
379
			teleportService.moveToBindLocation(player, false);
372
380

Added trunk/AE-go_GameServer/src/com/aionemu/gameserver/skillengine/effect/AuraEffect.java

Show contents

Updated trunk/AE-go_GameServer/src/com/aionemu/gameserver/skillengine/effect/Effects.java Download diff

15201521
99
		@XmlElement(name = "alwaysblock", type = AlwaysBlockEffect.class),
99
		@XmlElement(name = "alwaysblock", type = AlwaysBlockEffect.class),
100
		@XmlElement(name = "mpuseovertime", type = MpUseOverTimeEffect.class),
100
		@XmlElement(name = "mpuseovertime", type = MpUseOverTimeEffect.class),
101
		@XmlElement(name = "switchhpmp", type = SwitchHpMpEffect.class),
101
		@XmlElement(name = "switchhpmp", type = SwitchHpMpEffect.class),
102
		@XmlElement(name = "summon", type = SummonEffect.class)
102
		@XmlElement(name = "summon", type = SummonEffect.class),
103
		@XmlElement(name = "aura", type = AuraEffect.class)
103
	})
104
	})
104
	protected List<EffectTemplate> effects;
105
	protected List<EffectTemplate> effects;
105
	
106
	

Updated trunk/AE-go_GameServer/src/com/aionemu/gameserver/skillengine/model/Effect.java Download diff

15201521
86
	private boolean launchSubEffect = true;
86
	private boolean launchSubEffect = true;
87
	private Effect subEffect = null;
87
	private Effect subEffect = null;
88
	
88
	
89
	private boolean isStopped;
90
	
89
	public Effect(Creature effector, Creature effected, SkillTemplate skillTemplate, int skillLevel, int duration)
91
	public Effect(Creature effector, Creature effected, SkillTemplate skillTemplate, int skillLevel, int duration)
90
	{
92
	{
91
		this.effector = effector;
93
		this.effector = effector;
...
...
494
		{
496
		{
495
			@Override
497
			@Override
496
			public void run()
498
			public void run()
497
			{				
499
			{
498
				endEffect();
500
				endEffect();
499
			}
501
			}
500
		}), duration);
502
		}), duration);
...
...
518
	
520
	
519
	/**
521
	/**
520
	 * End effect and all effect actions
522
	 * End effect and all effect actions
523
	 * This method is synchronized and prevented to be called several times
524
	 * which could cause unexpected behavior
521
	 */
525
	 */
522
	public void endEffect()
526
	public synchronized void endEffect()
523
	{
527
	{
528
		if(isStopped)
529
			return;
530
		
524
		for(EffectTemplate template : getEffectTemplates())
531
		for(EffectTemplate template : getEffectTemplates())
525
		{
532
		{
526
			template.endEffect(this);
533
			template.endEffect(this);
...
...
530
		{
537
		{
531
			deactivateToggleSkill();
538
			deactivateToggleSkill();
532
		}
539
		}
533
		
534
		effected.getEffectController().clearEffect(this);
535
		stopTasks();
540
		stopTasks();
541
		effected.getEffectController().clearEffect(this);	
542
		this.isStopped = true;
536
	}
543
	}
537
544
538
	/**
545
	/**
...
...
542
	{
549
	{
543
		if(task != null)
550
		if(task != null)
544
		{
551
		{
545
			task.cancel(false);
552
			task.cancel(true);
546
			task = null;
553
			task = null;
547
		}
554
		}
548
		
555
		
549
		if(checkTask != null)
556
		if(checkTask != null)
550
		{
557
		{
551
			checkTask.cancel(false);
558
			checkTask.cancel(true);
552
			checkTask = null;
559
			checkTask = null;
553
		}
560
		}
554
		
561
		
555
		if(periodicTask != null)
562
		if(periodicTask != null)
556
		{
563
		{
557
			periodicTask.cancel(false);
564
			periodicTask.cancel(true);
558
			periodicTask = null;
565
			periodicTask = null;
559
		}
566
		}
560
		
567
		
561
		if(mpUseTask != null)
568
		if(mpUseTask != null)
562
		{
569
		{
563
			mpUseTask.cancel(false);
570
			mpUseTask.cancel(true);
564
			mpUseTask = null;
571
			mpUseTask = null;
565
		}
572
		}
566
	}
573
	}
...
...
582
			addedToController = true;
589
			addedToController = true;
583
		}
590
		}
584
	}
591
	}
585
}
592
}