Не игровой AI вообще, а его реализация в частности.
Интересно, есть сейчас хоть кто-то в L2JRU, кто был при создании того, что выступает в качестве AI сейчас?
Потому что испытываю непреодолимое желание
этот блок переписать с нуля.
Меня задрали уже бесконечно возникающие зацикленности внутри этих блоков. Вот типичный свежи пример:
code text
at net.sf.l2j.gameserver.model.L2Character.stopMove(L2Character.java:885)
at net.sf.l2j.gameserver.model.L2Character$AIAccessor.stopMove(L2Character.java:106)
at net.sf.l2j.gameserver.ai.AbstractAI.clientStopMoving(AbstractAI.java:347)
at net.sf.l2j.gameserver.ai.L2CharacterAI.onIntentionIdle(L2CharacterAI.java:61)
at net.sf.l2j.gameserver.ai.AbstractAI.setIntention(AbstractAI.java:151)
at net.sf.l2j.gameserver.ai.AbstractAI.setIntention(AbstractAI.java:136)
at net.sf.l2j.gameserver.model.L2GuardInstance.addKnownObject(L2GuardInstance.java:73)
at net.sf.l2j.gameserver.model.L2Character.findCloseObjects(L2Character.java:1662)
at net.sf.l2j.gameserver.model.L2Character.updateKnownObjects(L2Character.java:1624)
at net.sf.l2j.gameserver.model.L2Character.stopMove(L2Character.java:885)
at net.sf.l2j.gameserver.model.L2Character$AIAccessor.stopMove(L2Character.java:106)
at net.sf.l2j.gameserver.ai.AbstractAI.clientStopMoving(AbstractAI.java:347)
at net.sf.l2j.gameserver.ai.L2CharacterAI.onIntentionIdle(L2CharacterAI.java:61)
at net.sf.l2j.gameserver.ai.AbstractAI.setIntention(AbstractAI.java:151)
at net.sf.l2j.gameserver.ai.AbstractAI.setIntention(AbstractAI.java:136)
at net.sf.l2j.gameserver.model.L2GuardInstance.addKnownObject(L2GuardInstance.java:73)
at net.sf.l2j.gameserver.model.L2Character.findCloseObjects(L2Character.java:1662)
at net.sf.l2j.gameserver.model.L2Character.updateKnownObjects(L2Character.java:1624)
at net.sf.l2j.gameserver.model.L2Character.stopMove(L2Character.java:885)
at net.sf.l2j.gameserver.model.L2Character$AIAccessor.stopMove(L2Character.java:106)
at net.sf.l2j.gameserver.ai.AbstractAI.clientStopMoving(AbstractAI.java:347)
at net.sf.l2j.gameserver.ai.L2CharacterAI.onIntentionIdle(L2CharacterAI.java:61)
at net.sf.l2j.gameserver.ai.AbstractAI.setIntention(AbstractAI.java:151)
at net.sf.l2j.gameserver.ai.AbstractAI.setIntention(AbstractAI.java:136)
at net.sf.l2j.gameserver.model.L2GuardInstance.addKnownObject(L2GuardInstance.java:73)
at net.sf.l2j.gameserver.model.L2Character.findCloseObjects(L2Character.java:1662)
at net.sf.l2j.gameserver.model.L2Character.updateKnownObjects(L2Character.java:1624)
at net.sf.l2j.gameserver.model.L2Character.stopMove(L2Character.java:885)
и так до исчерпания памяти...
Воистину, блин, чтобы понять рекурсию, нужно сперва понять рекурсию.
В общем, думаю, что нужно снова оживлять L2J Balancer, отрабатывать принципиально новый и изначально продуманный AI и, если будет работать - переносить его на L2JRU.
Правда, проблема тут ещё с l2j.sf... Ибо самому связываться с ними - языковых навыков не хватает, а ни одна из доработок последнего времени в L2JRU туда что-то не переносилась...