mirror of
https://github.com/Rogiel/l2jserver2
synced 2025-12-08 08:23:11 +00:00
Several performance improvements, monster template and xml updates and
fixed bug while logging-in Signed-off-by: Rogiel <rogiel@rogiel.com>
This commit is contained in:
@@ -16,6 +16,9 @@
|
||||
*/
|
||||
package com.l2jserver.model.id;
|
||||
|
||||
import java.lang.ref.Reference;
|
||||
import java.lang.ref.SoftReference;
|
||||
|
||||
import com.l2jserver.model.template.Template;
|
||||
|
||||
/**
|
||||
@@ -25,6 +28,8 @@ import com.l2jserver.model.template.Template;
|
||||
* @author <a href="http://www.rogiel.com">Rogiel</a>
|
||||
*/
|
||||
public abstract class TemplateID<T extends Template<?>, I> extends ID<I> {
|
||||
private Reference<T> cached;
|
||||
|
||||
/**
|
||||
* Creates a new instance
|
||||
*
|
||||
@@ -40,5 +45,16 @@ public abstract class TemplateID<T extends Template<?>, I> extends ID<I> {
|
||||
*
|
||||
* @return the {@link Template} if existent, <tt>null</tt> otherwise
|
||||
*/
|
||||
public abstract T getTemplate();
|
||||
public T getTemplate() {
|
||||
if (cached == null || cached.get() == null)
|
||||
cached = new SoftReference<T>(loadTemplate());
|
||||
return cached.get();
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the {@link Template} associated with this {@link ID}
|
||||
*
|
||||
* @return the {@link Template} if existent, <tt>null</tt> otherwise
|
||||
*/
|
||||
protected abstract T loadTemplate();
|
||||
}
|
||||
|
||||
@@ -44,7 +44,7 @@ public class ActorTemplateID<T extends ActorTemplate<?>> extends
|
||||
|
||||
@Override
|
||||
@XmlTransient
|
||||
public T getTemplate() {
|
||||
public T loadTemplate() {
|
||||
return templateService.getTemplate(this);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -44,7 +44,7 @@ public class ItemTemplateID extends TemplateID<ItemTemplate, Integer> {
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemTemplate getTemplate() {
|
||||
public ItemTemplate loadTemplate() {
|
||||
return templateService.getTemplate(this);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -40,7 +40,7 @@ public class SkillTemplateID extends TemplateID<SkillTemplate, Integer> {
|
||||
}
|
||||
|
||||
@Override
|
||||
public SkillTemplate getTemplate() {
|
||||
public SkillTemplate loadTemplate() {
|
||||
return templateService.getTemplate(this);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -47,7 +47,7 @@ public class TeleportationTemplateID extends
|
||||
}
|
||||
|
||||
@Override
|
||||
public TeleportationTemplate getTemplate() {
|
||||
public TeleportationTemplate loadTemplate() {
|
||||
return templateService.getTemplate(this);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -23,6 +23,7 @@ import com.l2jserver.game.net.packet.server.SM_STATUS_UPDATE.Stat;
|
||||
import com.l2jserver.model.world.L2Character;
|
||||
import com.l2jserver.model.world.NPC;
|
||||
import com.l2jserver.service.game.character.CharacterService;
|
||||
import com.l2jserver.service.game.npc.NPCService;
|
||||
import com.l2jserver.util.exception.L2Exception;
|
||||
|
||||
/**
|
||||
@@ -36,13 +37,23 @@ public class MonsterController extends BaseNPCController {
|
||||
*/
|
||||
@Inject
|
||||
protected CharacterService charService;
|
||||
/**
|
||||
* The {@link NPCService}
|
||||
*/
|
||||
@Inject
|
||||
protected NPCService npcService;
|
||||
|
||||
@Override
|
||||
public void action(NPC npc, Lineage2Connection conn, L2Character character,
|
||||
public void action(NPC mob, Lineage2Connection conn, L2Character character,
|
||||
String... args) throws L2Exception {
|
||||
// send hp update
|
||||
conn.write(new SM_STATUS_UPDATE(npc).add(Stat.MAX_HP,
|
||||
(int) npc.getTemplate().getMaximumHP()).add(Stat.HP,
|
||||
(int) npc.getHP()));
|
||||
if (mob.getID().equals(character.getTargetID())) {
|
||||
charService.attack(character, mob);
|
||||
} else {
|
||||
charService.target(character, mob);
|
||||
conn.write(new SM_STATUS_UPDATE(mob).add(Stat.MAX_HP,
|
||||
(int) mob.getTemplate().getMaximumHP()).add(Stat.HP,
|
||||
(int) mob.getHP()));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user