Changeset 274
AI system part I..., pet inventory, Fear effect, miscIt is not yet the paradise, but I tried to cut the complexity, reuse existing stuff, and prepare AI data for future templates rework.
I still search ideas for new AI system (using inheritance, either for AI type and/or template type).
General AI behaviors changes
- checks concerning friendly/enemy clans verify confusion state (in case of enemy clan, it replaces).
- mages/priests AI handle following cases from now :
- will always launch skills.
- in case they're muted, they 100% flee.
- in case they're rooted, and can't launch skills (oom/muted), they will attack the nearest (if not possible to attack the current target) target using melee.
- switch automatically from high to short range skills if you approach (priority to short range, as retail), and vice-versa.
- mobs won't (re)buff if they're already buffed when you initiate a fight (as they can buff themselves random-walking).
- drop of the random forget time.
Mobs ARE SUPPOSED TO act as following :
- target checks :
- mob hasn't target/got dead target/got timeout ; replace target in case mob is aggro type and continue execution or break the whole processus.
- mob is chaosTime type, switch target if possible.
- mob successes to launch a skill (10% default, 100% for healer/mages AIs) :
- mob suicide below 15% HPs.
- mob heal allies who got the lowest HPs amount (activation at 75% HPs, priority to healer && mages AI).
- mob use a random spell - debuff (10%) - otherwise, by priority : short range && long range skills.
- mob is immobilized : if physical range is ok, attack, if not, pickup the nearest target and attack it.
- mob flee from player melee range if it is a mage/healer/archer AI.
- mob approaches the player if out of physical range.
- mob physically attacks the player.
L2SiegeGuardAI
- reorganized entirely the file, inheritating from L2AttackableAI.
- correct an issue introduced 10~ revs ago, where siege guards weren't attacking at all.
- drop TargetAnalysis && SelfAnalysis (was creating a huge amount of pointless lists for every siege guard).
L2NpcTemplate
- drop 13/19 skills lists and associated getters (here are the survivors : long range, short range, heal, buff, debuff, and suicide.
- addSkill() method avoid to use "add" getters, allowing to drop them all.
- drop of FIGHTER and BALANCED AITypes. Those 2 AIs are now refered as DEFAULT (as basically FIGHTER types got and will use skills).
AbstractAI
- _castTarget and _attackTarget are dropped. All is uniformed around getTarget().
L2AttackableAI
- drop of _lastBuffTick.
- reorganized entirely the file, and rework many methods.
- avoid to generate internal skills lists for AIs. It uses templates skills arrays.
- the attack timeout is back to 30s, rather than 2min (/4). It now handles differently aggro mobs from passive mobs. Passive mobs will stop to attack if you don't attack them, when aggro mobs will continue to follow you until you're out of their "aggro range * 2".
L2NpcAIData
- drop many variables with their getters/setters/uses, in prevision of future NPC templates rework. The list concerns :
- _primaryAttack
- _minSkillChance
- _maxSkillChance
- _isChaos
- _longRangeSkill
- _shortRangeSkill
- _longRangeChance
- _shortRangeChance
- _switchRangeChance
- _enemyClan
- _enemyRange
- SQL is not cleaned cause it will soon disappear. As the useless data isn't loaded, it's not a problem.
- drop of %ai_enemy_clan% in shift+click panel on NPCs.
NpcWalkers (L2NpcWalkerInstance, L2NpcWalkerAI)
- L2NpcWalkerInstance internal broadcastChat() -> L2Npc broadcastNpcSay().
- avoid multiple .get() operations updating a single L2NpcWalkerNode when the NPC goes to it (as we have, anyway, to retrieve the node, better make it automatically).
- drop _homeX, _homeY, _homeZ variables + getters/setters and uses on onSpawn() - unused.
- _walkingToNextPoint getters/setters are dropped - unused.
Pet inventory
- fix a concurrent issue, ty Hasha.
- fix the inventory update when you transfer non stackable items.
- add player && pet inventory weight refresh. Pet can now be overweight (was working before, but only in few circumstances).
- items are cleaned from pet inventory list / from the world even if the owner doesn't exist.
- checkItemManipulation for pet inventory (make checks on count). The string parameter is dropped for both inventory types. The count check is made on < 1, not on < 0 anymore.
Fear effects
- glitch is fixed, ty xblx.
- slight edit in order if you trigger startFear() it works in any case, and avoid pointless actions triggered by onActionTime().
- remove the visual effect when effect ends.
Misc
- modifier for L2Attackable concerning cast break has been removed. I still believe it should be reworked for monsters (75% or 50% of the final value ?).
- drop of Rnd.nextInt(int) method, which was calling Rnd.get(int) method.
- fix a ConcurrentException on CellPathFinding geodata module.
- fix lethal strikes messages. calcLethalHit() method doesn't return a boolean anymore (no use).
- fix a couple of skills values (lethal2 100% chance issue && few cancel resist/vuln chances setted to 40 instead of 30).
- drop of mAtkRange Stats. The only factor which entered in that Stats calculation was skillRange, so I simplified it.
- fix gameserver shutdown issue (ty Kenrix for reminder). I don't use L2J forum / Silentium fix.
- fix RequestHennaEquip adena amount message (cleaner method used than Silentium).
- fix a minor issue on /unstuck command - missing isSitting() check (ty Silentium).
- fix jail issue (teleport you forever in jail if you're //recall by a GM). Ty xblx.
- [L2J 5684] hitTime lower than 500 are taken in consideration, _castInterruptTime takes in consideration the skill coolTime.
- cleanup of all getKnownXXX() / getKnownXXXInRadius() methods, replacing them by 2 using generic types (
yeah).
- drop few clone checks concerning isRunning() - as setRunning() internally checks it.
- fix FriendList packet, ty Root for report.
N.B :
Between 10mo to 15mo RAM are saved.
The think cycle is actually used more than once per second (called by itself on attack ?). This is the main issue about packet flood when numerous enemies follow you, and will end by a huge performance boost once corrected.
I search a mean to fix pet inventory weight number. Atm it only updates while overweight penalty is called. I dunno why.
Things to fix in AI part II:
- null crap on HitTask / callSkill.
- flee behavior if you're too near (mob stops to attack).
- siege NPCs mage weird movement.
- find a solution about mage with low/no mana, in order to avoid those weird movement.
Changeset 275
Enchant system, Quest system, MiscEnchant system
- [L2J Silentium 145] add skill refresh when you enchant an equiped dual (to +4) or armor (to +6, if other parts of set are already +6).
- don't unequip item (it was visible if you failed a blessed enchant).
- avoid to refresh weight in case of a success or a blessed fail.
Quest system (Hasha)
- fix exclamation mark for NPCs with one-time quests.
- npc will now show correctly the "quest completed" message, when quest is completed.
Misc
- cleanup pathnodes loading.
- delete _isSpoil + setter/getter (can be retrieved with another variable). Cleanup spoil skillhandler && effect.
- cleanup 20+ generated TODO and content of those files (conditions mostly).
- fix an issue where 2 items rewarding the same skill drops the skill once you unequip one of those items. Addition of getPaperdollItems() method. Ty xblx.
- fix alliance creation/dissolution and clan dissolution if you're registered/participing in a siege. Ty Hasha. PS : it also avoids one connection with DB.
- cleanup xp/sp methods to reuse existing stuff. Ty Hasha.
- EffectStunSelf correctly stuns effector, not effected. Ty xblx for report.
- FriendList packet edited (again). Ty xblx.
- fix the last potential NPE (according Eclipse).
- fix a crappy NPE introduced in previous rev (see last comments on previous rev). Ty xblx.
- drop or edit few "_log.log(Level.WARNING, "", e);", as they send blank debug message. I only bothered about the most common.
- AdminPledge is cleaned up, the following actions (dismiss, setlevel, reputation) are now possible on any clan member, not simply the leader. info and dismiss work as supposed (no need 2nd parameter) when used from admin panel.
Changeset 276
Quests, miscQuests
- addition of Q047, Q048, Q324, Q372, Q426. Ty to sharers.
Misc
- "Quest." are dropped on any quest (Quest.getNoQuestMsg(), Quest.getAlreadyCompletedMsg() && all Quest.STATE_XXX).
- drop a double check on checkClanJoinCondition() method, ty Ashe.
- fix "ghost" aborted/completed quest issue on quest logs.
- few HTM typos.