Cycle 390-399 focus : Stabilization, quests end. Changeset 390 (1785) is up ! Ai system rework - part II, Movement - part II, Geoengine, Debug, Cubic system rework, Admincommands, Skills, RecipeBook, Organization, Bugfixes Changeset 391 (1815) is up ! Rev 390 bugfixes, Cubics part II, MailBBS, Geoengine, Skills, Organization, Bugfixes

Last aCis updates

Tryskell · 291 · 266160

Offline Tryskell

  • The cute dwarf
  • *
    • Posts: 4.074
    • Cookies: +78/-2
Reply #255 on: December 09, 2015, 01:16:22 PM
Changeset 356 (494)

L2Attackable, Packets stuff, MultisellData, Misc

   - Reduce global aggro timer, from 2min to 1m30.
   - Edit chasing mob distance check. Passive and aggressive mobs leave fight if a 2000 distance is reached.
   - Drop attackRange from CharTemplate. Edit NPCs XMLs to reflect the change. Monsters use directly weapon range. Fix NPCs archers range (from 1100 to 500).

Packets stuff
   - SignSky packet rework :
      - Rename SkySign for SSQInfo.
      - Add missing parameters (red / regular), and make possible packets static.
      - Edit admin panel to reflect those changes.
   - Add a check on ChatAlliance to avoid crafted packet. Ty RooT.
   - Harmonize RequestSetPledgeCrest/RequestExSetPledgeCrestLarge (integrity checks, SystemMessages, writing style).
   - SkillCoolTime fix, ty Denzel for report.
   - Players name must be between 3 and 16 characters. Optimize one check. Ty Denzel for report.
   - Possibility to use String for multisell names, using hashCode. Ty lord_rex.
   - Move multisells to data/xml folder. Slight content edit (drop entry id, ma'i'ntainEnchantment typo, drop enchant tag).
   - Latest L2J version, introducing :
      - Entries get their ids handled dynamically.
      - Improved performance (less item template calls, no Ingredient objects for temporary adena case, no dummy objects for enchant case).
      - getMultisell / setMultisell on L2PcInstance : you can't send crafted packet with a simple multisell id, the content must be generated before.
      - Introduction of <npcs> tag, to lock multisell lists to certain npcIds.
      - Equipped items aren't part of possible multisell trades.
      - Fix isStackable flag on MultiSellList packet.
   - Fix UNDEAD issue. Overzeal cleaning can lead to that sort of issue. Ty lord_rex.
   - FeedTask NPE fix. Ty lord_rex.
   - Better WeaponEquipTask behavior (doesn't cancel the whole process if you still attack).
   - Edit map_region.xml (fix 3 catacombs respawn location). Ty Hasha.
   - Fix following target issues :
      - level color takes time to change.
      - summons/pets HPs and level color aren't shown.
   - Fix Asamah HTMs (multiple typos). Add Trap Stone multisell 010.xml. Ty Denzel.
   - Addition of missing minions for Marilion boss. Ty Denzel.
   - Fix Banish Seraph, Recharge and Fisherman's Potion skills, prior to rev 434 and Race rework. Ty Sahar for report.
PS : multisell data has been edited. Use new data, don't cp old multisell folder.
Code: [Select]
Triskel does not speak with foolish fellows who do not know their profession!

Offline Tryskell

  • The cute dwarf
  • *
    • Posts: 4.074
    • Cookies: +78/-2
Reply #256 on: January 27, 2016, 02:16:23 PM
Changeset 357 (515)

Duels, Doors, Misc... And Hasha stuff preparing to incoming SpawnManager :D.

   - Add the missing getTeam() packet update for summons/pets (was written as TODO).
   - Fix countdown behavior (can't send duel requests, as you are now considered as being in duel). Add DuelState ON_COUNTDOWN to manage behaviors.
   - Drop _isInDuel internal boolean. isInDuel() can be resolved with _duelId > 0.

   - Correct open/close task && opened doors on server start.
   - Handles correctly miss of geodata if a cell where a door is located isn't loaded.

   - Drop StatusUpdate packet on addLevel (redundant with UserInfo). Ty RooT.
   - AllowFishing config is dropped, due to Geodata being mandatory. Ty svipben for report.
   - Fast fix for eaten ss/bss on potion use. Ty Hasha.
   - Fix 4 out of 9 CastleTeleportZone (reverted negative values leading to IllegalArgumentException). Ty dzumara for report.
   - Remove NPCs siege guards during midVictory. Ty dzumara for report.
   - Fix the idiot issue about player client freeze (upon logging on).
   - Fix NPC hate behavior "spread". Adds a 2000 distance check for siege guards (like mobs).
   - Fix "ghost" attack action during skill cast. Ty Kraker.
   - FeedableBeasts script : ConcurrentException and NPE fixes. Ty Kingzor for report.
   - Few boolean checks cleanup. PrivateStoreType > StoreType (just to be shorter).
Hasha patch 71
   - GrandBossManager doesn't handle anymore boss zones related stuff. ZoneManager handles it.
   - All shapes are reviewed and optimized.
   - OlympiadAnnouncer is merged with Olympiad class, the result is optimized.
Hasha patch 72
   - SpawnListener class drop.
Hasha patch 76
   - Edit NPCs templates to fit with new SpawnManager (no effect atm, but it will be needed later on).
   - //msg admincommand is moved on more appropriated adminhandler.
   - Addition of StringUtil.getTimeStamp, which allows to get a formated second time under (h m s) format.
   - RaidBossInfo script initialization is optimized using correctly L2Spawn class concept.
   - L2Spawn rework
      - x, y, z and heading infos are now stored under SpawnLocation, allowing nice shortcuts and few optimizations.
      - startRespawn()/stopRespawn() > setRespawnState(boolean)

Side note : it's perfectly normal you receive warning about spawns. I was lazy to edit spawnlist, as it will dissapear soon anyway. Don't create threads about it.
« Last Edit: January 27, 2016, 02:39:53 PM by Tryskell »
Code: [Select]
Triskel does not speak with foolish fellows who do not know their profession!

Offline Tryskell

  • The cute dwarf
  • *
    • Posts: 4.074
    • Cookies: +78/-2
Reply #257 on: January 31, 2016, 12:04:43 AM
Changeset 358 (525)

AIs, L2Attackable, Quests, Misc

   - Refresh all scripts writing style (caps lock for static, etc).
   - Cleanup FleeingNPCs script.
   - Rework entirely and optimize Gordon (static path nodes, drop of numerous pointless variables, "one task to rule them all").
   - Few tweaks and improvements for Dr Chaos (static Strings, fix a bug on paranoia_activity task).
   - Drop AbstractAi, L2AttackableAiScript becomes anew the AI "mother". Change the way npcId registration is handled, fixing events override issue. Ty Hasha.

L2Attackable (E.T Phone Home)
   - Mobs return to their home walking (and not running).
   - Faction call logic is changed. Fix the behavior where one monster could bring a whole room if you were running with him.
   - Tweak returnHome spawn point radius check (20 for guards, 300 for monsters).
   - Remove a redundant execution of leader/minion method.
   - returnHome is instantly processed, it doesn't depend from random walk % rate.
   - All 3rd class quests are, anew, functional (were broken prior to ScriptManager edit). Ty emanueld for report/fix.
   - Fix Q643 "missing htm" error. Ty Kingzor for report.
   - Partial rework of Q021 :
      - The route is tweaked (3 static nodes). Few NpcString are replaced.
      - Fix a NPE, prior to reading bookshelf while page ghost already dissapeared. Ty Kingzor for report.
      - Creation of a duke ghost despawn task. Before he could stay forever if the player didn't move on quest.
      - You can request anew the page ghost if he dissapeared.
      - Don't sendMessage player with "pageDespawn" event name.
   - Add 28 missing noskills HTMs for dwarves trainers. Ty Caparso for the share.
   - Warehouse Freightman Daisy HTM bypass skill list fixed. Ty Caparso.
   - Both gates of Splendor open in same time.
   - Disable autoshots after adding/changing subclass. Ty Erlandys.
Code: [Select]
Triskel does not speak with foolish fellows who do not know their profession!

Offline Tryskell

  • The cute dwarf
  • *
    • Posts: 4.074
    • Cookies: +78/-2
Reply #258 on: February 12, 2016, 02:13:19 AM
Changeset 359 (539)

TaskManager drop, LoginController, Instances, Scripts / AI, Misc

TaskManager drop
   - Fix and cleanup ScheduledQuest.
   - Move existing tasks to ScriptManager. Tasks are handled by scripts.xml.
   - Drop old TaskManager system and associated SQL table global_tasks.

   - handle login attempts in a more consistant way (concurrent map, working concept).
   - basic cleanup, from using JDK8 goodies to formatting rules.
   - L2Guard : Drop ReturnTask, drop onSpawn() redundant check (already handled by super.onSpawn()).
   - L2TownPet : Variabilize task in order to be dropped when npc is deleted.
   - L2ClanHallDoormenInstance : _clanHall is fed using onSpawn().

Scripts / AI
   - Addition of Q114, Q227 - ty sharers.
   - Harmonize all HTMs regarding level/class checks.
   - Swap 2 HTMs content for Q226.
   - L2Attackable can now see L2NpcInstance (notably for better AI control).
   - Fix NPE and stackoverflow (prior to last revision) from onEvtAggression / onEvtAttacked. Optimize the loop checks. Rework PrimevalIsle script.
   - NPE fix for Gordon AI, if he died on server startup (prior to last revision). Ty cross for report.
   - "Returning home" monsters && random walking monsters can now be faction called. Ty Hasha.
   - Core support for Q227 (addition of L2Skill parameter for onAttack).
   - Core support for decay event (addDecayId / onDecay(L2Npc)). Ty Hasha for idea.
   - Edit all 2nd class transfer quests to fix DD exploit, since all 2nd classes are now done. Ty Zero for the patch.
   - Fast and ugly fix for Olympiad towers broadcasting. Ty sahar.
   - Hotfix for //delete command (even if it will be probably reworked in 2 revs). Ty svipben for fix.
   - Avoid to compute twice the same things for pets users relation updates.
   - Add clientStopMoving(null) on player thinkAttack().
   - Fix the 2 following issues (ty ErHard for report)
      - Archer acts like melee player on dead targets.
      - Archer auto follow dead NPC.
Code: [Select]
Triskel does not speak with foolish fellows who do not know their profession!

Offline Tryskell

  • The cute dwarf
  • *
    • Posts: 4.074
    • Cookies: +78/-2
Reply #259 on: March 09, 2016, 04:02:02 AM
Changeset 360 (553)

Commons, ThreadPool rework, CharNameTable rework, Misc

   - Creation of ArraysUtil, holding common arrays related methods. Will be feed overtime.
ThreadPool rework (based on L2JFree, but tweaked to death).
   - ThreadPoolManager is renamed ThreadPool and is moved to commons. Use a static approach rather than singleton.
   - Merge all pools (ai, packets, general,...) to a single one.
   - Generate pools according to core numbers (by default -1 for scheduled and instant pools).
   - The tasks charge is balanced through the different pools (random selection).
   - Move hidden configs to

CharNameTable rework - ty svipben and welcome to IC !
   - Cache player informations on server startup rather than on player login (avoid one db call per invalid player entry request).
   - Drop all synchronized blocks, and use a single ConcurrentHashMap (holding infos of the 2 previous HashMap).
   - Tweak few L2World.getPlayer(), in order they use id parameter instead of name when possible (avoid a pointless call on CharNameTable).

   - Addition of Q118, Q333. Rework Q123 (which is a clone of Q118). Ty RooT.
   - Drop AutoDeleteInvalidQuestData config. Rework quests loading method (use a single query, don't process enterworld event on quests you don't own).
   - Few tweaks : addition of getSponsor() / getApprentice(), put null checks as priority checks, put few final keywords, use of Rnd.get(List).
   - Addition of DebugGeoNode config, setted to False by default (avoid to flood geo_bugs.txt on live servers).
   - addFence returns L2FenceInstance. Ty sahar.
   - SpecialXMas itemhandler doesn't broadcast its content (lol). Ty sahar.
   - Fix isInCombat() - Ty cross for report.
   - Slight validateItemManipulation method edit (avoid double getInventory check on RequestDropItem).
   - "Organize Import" edit : net.sf.l2j.commons are divided from regular net (simply to keep things cleaner).
   - Fix a NPE prior to ClassId rework - Ty sahar for report.
   - Rework MailBBSManager.sendLetter ; fix non-GM mail sending and optimize all checks. Ty Mayhem for report.
NB : compared to L2JFree L2ThreadPool :
   - dropped long running pooler.
   - dropped getThreadPools() approach which generate pointless arrays.
   - edit the purge limit from 1min to 10min.
   - delete and merge all pointless classes (10+ merged to 1).
Code: [Select]
Triskel does not speak with foolish fellows who do not know their profession!

Offline Tryskell

  • The cute dwarf
  • *
    • Posts: 4.074
    • Cookies: +78/-2
Reply #260 on: May 13, 2016, 01:29:22 PM
Changeset 361 (568)

World/WorldRegion refactor, CoupleManager, RooT's fixes, Skills cleanup, Misc

World/WorldRegion refactor
   - rename both classes, dropping "L2".
   - Drop 3 "grid" configs (hardcoded for now).
   - Merge unique methods.
   - Drop _allPlayable CHMap. Edit _visibleObjects CHMap for a simple arraylist with a lock. Count only players, not all playable as region activators.

CoupleManager rework
   - Store couples in a ConcurrentHashMap instead of ArrayList (avoid ConcurrentException, better index management).
   - Save process is made on server shutdown rather than couple creation.
   - Loading process isn't cutted between Couple && CoupleManager, which avoids 1 connection per Couple loading.
   - Cleaning (drop isMarried boolean as we can reuse coupleId, drop Couple model for IntIntHolder) + Javadoc.
RooT's fixes
   - Interaction distance with NPCs is setted to 100 instead of 150 (maybe has to edit players ?).
   - Add more ids in non-talking guards. MoveToPawn and ActionFailed packets are sent for such guards.

Skills cleanup

   DP side
      - Pa'agrio Fist and Rapid Fire are counted as buff. Pa'agrio Fist heals 800 CP back, not full CP.
      - Few NPC skills got remove target attribute (dino skills).
      - Added missing enchant routes for : Shock Stomp, Blessed Body, Blessed Soul, Mass Fear, Mass Gloom, Trance, Erase, Magical Backfire
      - Mystic Immunity uses the correct target type.
      - Summon Treasure Key reuse time is fixed.
      - Heart of Pa'agrio HP regeneration effect is fixed.
      - Heroic Berserker mdef malus is fixed.
      - Infinity Axe passive skill is fixed.
      - Counterattack, Dodge, Mirage are using IL values.
      - Shield of Revenge got a mana cost now.
      - Fear effects don't bug anymore.
      - Fix Item Skill: Battle Roar augment.
   Core side
      - The player now runs to the target when skill is under reuse and target out of range.
      - CPHEAL_PERCENT type is dropped (unused).
      - Toggle skills can't be desactivated anymore while in combat.
      - You can't stack anymore Fear, Sleep, Root && Stun effects. Ty xblx.
      - ExRegenMax packet implementation (temporary health gauge on HoT use). Ty svipben to catch it up, and RooT for writing style.
   - Fix a minor typo on 2 packets, ty svipben for report.
   - Mimyu teleport behavior. Ty RooT for share, Sikken for report.
   - Fix SE 2nd class transfer. Ty emanueld for the fix.
   - Lower Loginserver RAM allocation (to 32m), as it doesn't need that much (could even work with 12m with spikes at 9m).
   - SetupGauge packet now uses an Enum to enforce color types.
   - Water task is cleaned up. Drop _isInWater boolean, and "unique-use" methods.
   - Heal participants' CP/HP/MP on Olympiad battle start. Ty sahar for report.
   - Workaround fix for returnHome method (killed stunned mobs = clean aggrolist).
   - Move Die packet call on Enterworld to avoid buffs visual issue. Ty SweeTs/svipben.
PS : skills cleanup got nothing related to skills rework. Those are only fixes to wait for a bigger rework, which will come in few months.
Code: [Select]
Triskel does not speak with foolish fellows who do not know their profession!

Offline Tryskell

  • The cute dwarf
  • *
    • Posts: 4.074
    • Cookies: +78/-2
Reply #261 on: May 23, 2016, 09:30:20 PM
Changeset 362 (578)

Knownlist system , pets fixes, misc

So, I decided to rework the knownlist system. I will explain why, what are benefits and how it worked/works now.

Old version :
Each object (item, npc, player, summon) had its own knownlist, aka a Map holding surrounding objects. Objects were added/removed according owner's region and a self radius (getDistanceToWatch)

Why it sucked :
   - You needed to update map every time you added/remove. Even if ConcurrentHashMap is performant, that could be painful on big operations (sieges, mass kills, etc).
   - The data was extremely redundant ; for 2000 NPCs, there was 2000 knownlist holding each 1999 entries (excluded himself).
   - The data could scale really, really fast according number of surrounding NPCs, leading to important RAM/CPU usage.
   - A task, called every second, was updating every single region (11260 regions) objects to forget objects.
   - Added to the data being extremely redundant between knownlists, the same info was hold into WorldRegion's object maps (as knownlist feed upon those maps).
   - The definitive list of possible targets was cutted first by getVisibleObjects(2000), getDistanceToWatch, then by radius, leading to compute multiple times the same thing.
New version :
   - We use WorldRegion maps as reference.
   - We use setRegion as an passive update system. Which means a single setRegion is needed to refresh every object included in surrounding regions.
      - Regions we leave (aka, old region neighborhood but not part of new region neighborhood) are updated with removeKnownObject.
      - Regions we enter (aka, new region neighborhood but not part of old region neighborhood) are updated with addKnownObject.
      - Leftover (shared regions between old and new neighborhood) isn't processed.
Benefits :
   - No more maps for every object = instant RAM save. No more dangerous RAM scaling when gathering important group of NPCs.
   - Cut a entire layer (before WorldRegion CHMap was updated, and WorldRegion's objects knownlists aswell. Now, only WorldRegion is updated).
   - The task was really heavy (11260 areas to refresh on a populated server every 1m) ; its drop delayed the GC cycle from 6min to 10min on vanilla aCis (cutted the garbage on empty server by almost 2).
   - Merge redundant systems and optimize the output (only 6 cells are updated in case of regular region change).
(Biggest) changes :
   - Revert from previous revision : ArrayList to CHMap to hold WorldRegion objects (wasn't correctly synchronized leading to ConcurrentException).
   - Whole package && KnownListUpdateTaskManager class dissapear.
   - Broadcast.toSelfAndKnownPlayersInRadiusSq method is dropped, as we are standardizing "distance" system.
   - Heavy rework of spawnMe, spawnMe(x, y, z), decayMe to avoid multiple setRegion calls (before : 2 for every L2Object, 3 for summons !). Avoid multiple addKnownObject() calls (bow use, setTarget) aswell.
   - setXYZInvisible(Location) has been added. Uses are tweaked (when spawning you don't need to setRegion(null), so we only update position).
   - PcTemplate holds player spawn under a Location.
   - EVT_FORGET_OBJECT event is dropped (no use, probably not launched at all).
   - WorldRegion setActive is processed instantly by setRegion method.
   - Fix : guards don't go IDLE if aggrolist is cleaned up, breaking aggro system.
   - Rework knownlist admincommand (includes a page system, as known objects number is way bigger than before).
PS :
   - To get knownlist, simply use object.getKnownType or object.getKnownTypeInRadius (all objects on the 9 surrouding areas = object.getKnownType(L2Object.class))
   - Computed knownlist don't show yourself. It shows any type of status : dead, visible, etc. You have to add your own conditions.
   - Always try to choose the HIGHEST instance type (ex: L2PcInstance for players, and not L2Object) to restrain list objects to a maximum. In addition, you won't need any cast.
   - IDLE state for NPCs should be achieved only if no players are left on region. It means the AI is detached from NPC.
Multiple pets fixes
   - Pet inventory isn't restored anymore (as pets inventory is transfered on inventory deletion to owner's inventory, the whole thing is useless).
   - On pet dismiss (or player restart), if the player does not have room in their inventory, these items will drop to the ground.
   - Pets cannot pick up arrows, Soulshots, Spiritshots, Blessed Spiritshots.
   - Cleanup L2PetInstance.validateWeight().
   - Refresh correctly pets inventory weight gauge.
   - Numerous cleanup :
      - don't send twice setShowSummonAnimation() info (inherited from L2Summon, no need to call on children)
      - Merge L2PetInstance.spawnPet() with its single usage.
      - Move setLevel from Pet initialization to restore(), which avoids double call.
      - Don't feed _petData on Pet initialization, as info would be wrong anyway. It's already handled by setLevel().
      - Don't set twice item enchant level (was called by setLevel() and SummonItems).
      - Avoid one call of PetItemList / broadcast status.
   - Wedding mod HTMs are moved in their own "mods" folder.

PPS : knownlist rework probably fixes any type of "ghost" issue (player/monsters which look to be here, but when targeting them they update).

PPPS : I thank "monkeys team" for the good job on reporting behavior. You're invited to drop what I sent you and apply this changeset (you normally have a problem with pets summoning, fixed with this changeset).
« Last Edit: May 23, 2016, 09:36:49 PM by Tryskell »
Code: [Select]
Triskel does not speak with foolish fellows who do not know their profession!

Offline Tryskell

  • The cute dwarf
  • *
    • Posts: 4.074
    • Cookies: +78/-2
Reply #262 on: November 19, 2016, 01:54:50 AM
Changeset 363 (617)

Benom, Castles, Castle Manor, Event listeners, Sieges, Seven Signs, Inventories, Misc

   - Addition of Benom script.

   - CastleManager cleanup by svipben. Castles are hold on a Map, the key being castleId.
   - Castle doormen "busy" HTM is shared among all instances (39 HTMs dropped).
   - Drop _siegeRegistrationEndDate. The registration end time is now directly calculated from siege date (siege date - 1 day). It could generate issues if you didn't edit both times. regTimeEnd dissapears from castle.sql.
   - Static informations are now loaded from castles.xml (circlet id, related tickets, related NPCs, artifact id) and have been unhardcoded.
   - Create MercenaryTicket model, holding ticket infos. Each Castle got its own List of static tickets.
   - NPC getCastle() is entirely cleaned up and generated from castles.xml.
   - Castle model must be generated from a castle id and castle name.
   - Drop entirely castle index logic wherever it was used (replaced by castleId logic).
   - Move removeCirclet logic from CastleManager to Castle.
   - Avoid to generate pointless integers for each L2WyvernManager.
   - Add retail HTMs and core logic for Mercenary Managers. Introduce Seven Signs buylists (show different output depending who is currently owning the Seal of Strife).
   - Castle entity rework :
      - now holds Set<ItemInstance> _droppedTickets (before held by MercTicketManager).
      - now holds int _circletId (before held by CastleManager).
      - now holds List<Integer> _relatedNpcIds (before was generated on the fly using weird castle index and distance check).
      - now holds List<MercenaryTicket> _tickets (before held by MercTicketManager on multiple splitted static arrays ; which weren't even holding Seven Signs state).
      - now holds List<L2Npc> _siegeGuards (before held by MercTicketManager).
      - Artifact is now linked by id, and not by instance.
   - Dropped tickets are now processed by ItemsOnGroundTaskManager.
Castle Manor
   - L2Manor (seeds.xml parsing) is merged with CastleManorManager. Castles related procure/crop lists are moved to CastleManorManager aswell (easier to handle database storage that way).
   - The different internal classes are now moved into model.manor package.
   - Addition of ManorMode enum.
   - CastleManorManager follows latest L2J for the writing style.
   - Complete ExShowCropInfo, ExShowCropSetting, ExShowManorDefaultInfo, ExShowSeedInfo, RequestSetSeed packets.
   - Delete 6 admincommands related to manor. Keep only //manor, based on latest L2J. Incorporate //manor into game_menu.htm.
   - Fix seed/harvest issues.
   - CastleUpdater is dropped. The automatic saving is now handled on CastleManorManager (save manor states every 2h). No more alternative saving Config.

Event listeners
   - Addition of an event layer for sieges addSiegeNotify(castleId). Rework the system to handle siege status with an Enum, under SiegeStatus (which drops 2 booleans).
   - Item listener is now lazy initialized (as it was used for a single item until now, which avoid to generate 6k empty lists for nothing).

   - Teleport system during siege is entirely redone and fixed. All ppl are moved to second closest town, no matter what.
   - Drop SiegeManager and split content between castle entity initialization, Config, CastleManager. getSieges() method is dropped, use getCastles() / getSiege on a for loop to get them.
   - When a Life Control or Flame Control Tower is destroyed, a little, not-attackable version of it spawns.
   - Add 2 SystemMessage related to sieges (when all life controls are destroyed, and when you try to use L2Doormen open/close doors function when castle is being sieged).
   - Add Ressurection siege conditions (can't ress if not participant to a siege, if attacker hasn't a flag or if defender hasn't anymore Life Crystals).
Seven Signs
   - Introduce following Enums : CabalType, SealType, PeriodType. Those enums are 'improved versions' and hold more infos (which avoid few static methods).
   - Due to previous change, all seven signs related tables must be edited.
   - Complete cleanup, which avoids sometimes 15-18 .get() calls and avoid String operations (notably on cabal type).

   - Drop Warehouse abstract layer, and slight cleanup on Inventories.
   - Creation of ItemState Enum to enforce item related modifications.
   - Replace ItemContainer CopyOnWriteArrayList for ConcurrentSkipListSet (because of terrible performance on write).
   - Order items (avoid the items jump on inventories), based on inventory's item addition (similar to L2OFF ; I didn't see other rule). We use an unused ItemInstance variable to store it, _time.
   - Edit items.sql to optimize datatypes. Drop useless column time_of_use.
   - Drop ItemInstance.changeCountWithoutTrace (single use).
   - Drop L2PcInstance._arrowItem (no uses).
   - Cleanup L2PcInstance.reduceArrowCount (probably can be replaced entirely by a simple destroyItem) && checkAndEquipArrows.

   - Due to mercenary tickets handling edition, ItemsOnGroundTaskManager has to be mandatory, so SaveDroppedItem config is now dropped to avoid admin "lack of brain" issue. All timers and configs are still reachable.
   - Drop StartingAdena config (value was wrong, and it can be handle with another config).
   - Edit default GC type for CMS, which avoid lag spikes.
   - Fix pet gain system (wolf, sin eater, etc). Ty Erlandys for the complete fix.
   - Drop deprecated KnownListUpdateInterval config, ty SweeTs for reminder.
   - Cleanup L2PcInstance.storeEffect() - ty svipben.
   - getName() / getTitle()
      - Headquarters name/title follows L2OFF. Ty RooT for fix.
      - isCustomNpc() approach is given up. We rely on templates to feed name/title, but current name/title can be changed (which fixes changename admincommand).
      - changename is merged with setname. Both changename and changename_menu commands are dropped. You can now settitle on L2Npc (it is temporary, similar to setname).
   - HennaTable StatsSet is re-used (avoid to generate 180 HashMaps).
   - MapRegionTable uses getInstance() logic (that's the point of singleton).
   - Edit TownZone "taxById" variable to "castleId", which is friendlier to understand.
   - Merge summon conditions SiegeManager.checkIfOkToSummon && SevenSigns.checkSummonConditions in L2PcInstance.checkUseMagicConditions (single use).
   - L2PcInstance.isCastleLord is cleaned up (compare castle ids directly, not godamn Castle entities).
   - Cleanup GatekeeperSpirit script.
   - Fix NPE on ExListPartyMatchingWaitingRoom, ty sahar for report.
   - //create_set admincommand is extended :
      - armorsets.xml now hold set name. ArmorSetsTable use StatsSet to feed ArmorSet objects.
      - A new panel is generated with existing sets (because good luck to remember chestId).
      - ArmorSet model is cleaned up.
      - CastleManorManager seeds parsing is slightly edited (StatsSet is reused).
      - Clicking on "Item" button simply popup itemcreation.htm.
   - Duel system : partymatch system is ended for any players (was written as TODO since Duel rework).
   - Edit checkEffectRangeInsidePeaceZone x, y, z parameters for Location.
   - Move and cleanup signet cast condition from L2Character to L2PcInstance.checkDoCastConditions.
PS : castle guards spawn (from neutral castle) system isn't yet processed. Don't report it.
PS : due to heavy changes, it is STRONGLY adviced to make a clean installation of tables if you got no clue about what you are doing.

Due to the HUGE amount of edited engines (Seven Signs, Manor, Castles, Sieges,...), consider it as a part I, even if it's not finalized. I need your reviews to complete the part II. This changeset, in term of coding, worth 3 to 4 regular revisions. Unfortunately, as everything depends of everything, it couldn't be done of another mean.

Some things have been voluntarly broken - I think notably about NPC guards, but most shouldn't. Consider to report everything. Due to the amount of code, I couldn't test all, and didn't test Benom, Seven Signs && Manor.
« Last Edit: November 19, 2016, 02:06:22 AM by Tryskell »
Code: [Select]
Triskel does not speak with foolish fellows who do not know their profession!

Offline Tryskell

  • The cute dwarf
  • *
    • Posts: 4.074
    • Cookies: +78/-2
Reply #263 on: December 11, 2016, 08:39:39 PM
Changeset 364 (636)

Scheme buffer v2, Auctioneer, Misc

Tryskell, the scheme buffer v2 !
   - skill names and descriptions, hold by XML rather than Config.
   - less panels, easier to use.
   - paging system to avoid scrolling effect.
   - no "blinking" effect.
   - Drop of BufferMaxSkillsPerScheme config (now uses player max).

Auctioneer instance is reworked :
   - bypasses work anew (caused by getCastle() refactor)
   - fix "Back" button on Bidders list (ty Anarchy)
   - Cleanup and more safety (ConcurrentHashMap, less calls of .get(), everything is try/catch, return is correctly used, paging system is refreshed).   
   - Fix Lucky skill acquisition. Ty Ailierynn for report.
   - Valakas doesn't use a dummy anymore which lighten the code and avoid to bug custom raidboss checkers showing wrong location.
   - Revert interaction range edit (100 is buggy, return back to 150) until someone decides to care about all types of range in one throw.
   - Fix Broadcasting Tower knownlist issue. Methods are sync-ed with observe olympiad. Drop _observerMode boolean (can be guessed with clever use of _savedLocation). inObserveMode() renamed for isInObserveMode().
   - Fix the "unhandled slot type" issue. Ty Sahar.
   - Addition of Flame/Control infos on castle admin panel.
   - Wrath skill enchant route fix. Ty Sahar.
   - Olympiads : No forced stand up on L2OFF.
   - Olympiads : You are teleported back to a random town location, not your saved location.
   - teachTo is slightly edited ; avoid to generate 6k empty ArrayList and drop most of getters. Ty katara.
   - Rework the NPC skills holding system, avoid to generate 28k empty ArrayList.
   - Rework L2TamedBeast (cleaner version).
   - Fix previous revision regarding GrandBoss using returnHome. Ty Sahar.
   - Fix social/abnormal admin panels/commands. Ty katara for report.

Ty to SweeTs for buffer design and Sahar for XML definition.

« Last Edit: December 11, 2016, 10:38:12 PM by Tryskell »
Code: [Select]
Triskel does not speak with foolish fellows who do not know their profession!

Offline Tryskell

  • The cute dwarf
  • *
    • Posts: 4.074
    • Cookies: +78/-2
Reply #264 on: January 10, 2017, 12:05:23 AM
Changeset 365 (652)

Dimensional Rift, AbstractGroup / Party / CommandChannel, Scheme Buffer, Misc

Dimensional Rift
   - cleaned up (delete _deadPlayers, unify writting style, delete single use methods).
   - Fix an issue with _isBossRoom not being fed.
   - L2 legacy website : "When the party changes (such as leaving or banning from party) in the Dimensional Rift, the party will be transported to the waiting room."
   - Remove all custom messages.
   - Fix a ConcurrentException on _revivedInWaitingRoom.
AbstractGroup / Party / CommandChannel
   - cleaning
      - enum generation, enforce types.
      - party leader reference is stored and not retrieved from .get(0) - avoid a rare IOOBE (probably occuring during leader transfer ?).
      - remove L2 prefix to Party and CommandChannel classes.
      - generate a package
      - Both Party and CommandChannel use at least the 2 initial parameters (leader / invited member type).
      - creation of AbstractGroup class, a layer shared between Party and CommandChannel.
   - Modify Party creation to be handled by RequestAnswerJoinParty instead of RequestJoinParty, which was one big exploit (party leader being considered positive to isInParty() for the whole duration of invite request - while there is no party yet created).
   - Fix "The party has dispersed" bug issue, generated if you let the invite run off (due to Party object being created and immediately deleted - main reason of the above rework), ty Marcatu.
   - Party requestor is now checked regarding pending request (he wasn't before, so you could request a trade and a party invite).
   - Strategy Guide item is now consumed on CommandChannel creation, and not simply checked. Drop getPledgeClass() check (plain wrong) and item check (handled by creation) on CommandChannel invitation.
   - Drop ALT_LEAVE_PARTY_LEADER config. Apply default party disband case to all scenarios.

Scheme Buffer
   - Available buffs are ordered as listed on XML. Ty Sahar.
   - Fix a NumberFormatException on schemes restore. Ty Sahar.

   - Fix a MysqlDataTruncation on punish_timer. Ty katara.
   - Fix TARGET_AREA_SUMMON skills type. Ty x-user.
   - Cleanup FishingSkill skillhandler, fix the penalty issue. Ty Ailierynn.
   - Introduce isUsingServerSideName / isUsingServerSideTitle to fix client/custom NPC names/titles.
   - Fix previous revision regarding AURA type skills registration on NPC templates. Ty Sahar.
   - Enforce "party size" (2/9 min/max) for Four Sepulcher and Festival of Darkness configs. Cleanup "beyond exotic" 1-man case Four Sepulcher.
   - Merchant mustn't have the option to trade Shadow Weapon coupons, only grand masters are. Refresh all Shadow Weapon related HTMs. Ty Anarchy for report.
   - Release transaction (requestor/onTransactionRequest) as fast as possible (before you were stucked in middle of a transaction on whatever returning check...). All cases are edited.
   - To keep an harmony, party duels are canceled if party is modified (added/removed member now cancels it, before only leader drop was leading to that scenario) - Dimensional Rift rule.
   - //party_info admincommand cleanup.
   - Cleanup Quest getPartyMembers / getPartyMembersState methods.
Code: [Select]
Triskel does not speak with foolish fellows who do not know their profession!

Offline Tryskell

  • The cute dwarf
  • *
    • Posts: 4.074
    • Cookies: +78/-2
Reply #265 on: February 16, 2017, 08:01:45 PM
Changeset 366 (664)

Castle, Siege part II, ZoneManager / zones, Clans, Misc

   - Rename _zone > _siegeZone (getter included).
   - Move zones attributions to entity creation (instead of getters).

Siege part II
   - Due to following ZoneManager and zones rework, we now support :
      - PKs are ported in the vicinity of second closest town (and not inside).
      - banished players are ported in the vicinity of the castle (and not on closest town).
   - Cleanup L2SiegeFlagInstance, it works even if clan parameter is broken.
   - Cleanup loadSiegeClan() uses, which were called on numerous useless places (called on startSiege(), approveSiegeDefenderClan(), removeSiegeClan(), startAutoTask()).
   - On castle siege end, if your clan is victorious versus former clan, you gain static 1K CRP instead of calculated amount based on former clan CRPs.
   - All CastleManager.getInstance().getCastle(player) used to only retrieve an ACTIVE siege are now replaced by CastleManager.getInstance().getSiege(player), as it is shorter and cleaner.
   - Drop SiegeClan layer. Siege flag is now registered on L2Clan.
   - Creation of SiegeSide enum. Store it under String format rather than int (similar to CabalType, SealType, etc).
   - CopyOnWriteArrayLists about attackers / defenders / pending defenders are replaced by a single ConcurrentHashMap (better performance and avoid heavy lists manipulations).
   - Creation of checkSide(L2Clan), checkSide(L2Clan, SiegeSide), checkSides(L2Clan, SiegeSide...) methods, which is now the center of sides checks (instead of getAttackerClan / getDefenderClan).
   - Drop the possiblity for a clan to hold numerous headquarters flags (it was producing a IOOBE when the first flag of the list was destroyed anyway).
   - L2Clan.isRegisteredOnSiege() method simply checks memory content rather than making a SQL query.
   - Fix following checks :
      - dissolve alliance now checks if ANY allied clans is registered on a active siege (before was only checking your clan status).
      - create alliance now checks if your clan is registered into an ACTIVE siege (avoid to stuck creation if you're castle lord).
      - join alliance now checks if the invited clan is registered as an opposite clan, on any active siege. The previous check checking both characters are on siege zone is dropped (pointless).
ZoneManager / zones
   - Little cleanup of ZoneManager (drop of getArena(L2PcInstance), getOlympiadStadium(L2PcInstance), checkId(int) and getClosestZone(L2Object, Class<T>) methods).
   - L2SiegeZone zones are now considered L2SpawnZone, and hold following L2OFF lists : other_restart_village_list && chao_restart_point_list. Drop the isGM() exception from banishForeigners. Zones shape match with retail values.
   - L2CastleZone zones now hold banish_point_list. chao_restart_point_list is moved to L2SiegeZone, but still hold owner_restart_point_list. We drop _castle variable, which is pointless. Zones shape match with retail values.
   - L2CastleTeleportZone cleanup (isOnline() check is wrong, it basically means a offline shop can stay here).
   - L2ZoneType _characterList is edited from CopyOnWriteArrayList to ConcurrentHashMap (performance boost). The class is cleaned up (javadocs, comments, organization).
   - ZoneManager _debugItems is edited from List to ConcurrentHashMap (performance boost).
   - L2DynamicZone is deleted (no purpose).
   - //zone_visual adena drop count reflects zone id (for an instant overview). Their step spawn is also cutted by 2.5 (from 20 to 50) to faster the generation process.

   - clans are registered into a ConcurrentHashMap to avoid ConcurrentException. Drop synchronized keywords. getClans() returns a Collection instead of array.
   - destroyClan() is reworked ; parameter is now a L2Clan, the clan is removed of ANY siege (before : only if you had a castle)
   - getClanAllies() returns a Collections.emptyList() if no alliance is found.
   - checkAllyJoinCondition is now static (as variables are setted up as parameters).
   - RequestRestartPoint packet is cleaned up, jail location is now static.
   - Drop ALT_GAME_FREE_TELEPORT config, as HTMs can't scale with that config (were still displaying adena cost).
   - Fix L2TeleportLocation isForNoble() item consumption, ty Heinsenberg.
   - Fix skillId 1402 enchantlevel, ty Anarchy.
   - Fix TownPet instance task. Ty TreasureHuman for report.
   - Fix the merchant NPE due to Castle rework.
   - Random cleanup
      - MapRegionTable.getTeleToLocation renamed getLocationToTeleport (english plz). Method is cleaned up, MDT location is now static.
      - FIXED revive option uses player.getPosition() rather than generating a new Location object based on x/y/z.
      - RequestAnswerJoinAlly packet is secured (transaction is correctly cleaned up).
PS : due to Sieges part II, sieges_clans is edited. I invite you to either drop the whole table and add the new one asking your players to register anew on sieges (castle owners are automatically registered), or you can query it to edit all int values to String values.
« Last Edit: February 16, 2017, 08:13:57 PM by Tryskell »
Code: [Select]
Triskel does not speak with foolish fellows who do not know their profession!

Offline Tryskell

  • The cute dwarf
  • *
    • Posts: 4.074
    • Cookies: +78/-2
Reply #266 on: February 19, 2017, 01:21:23 AM
Changeset 367 (668)

Reorganization ! You will hate me.

Edit all instance types.

All instances types are shortcuted as following : L2PetInstance > Pet (remove "L2" and "Instance" from naming convention, to shortcut checks and writing style).
Mother classes simply lose the "L2" prefix (L2Attackable, L2Character, L2Playable,...).

The previous rule doesn't apply exactly on following cases :

   - L2BufferInstance > SchemeBuffer (fits better with the role).
   - L2PcInstance > Player (I guess Pc stands for 'player character', so make it more intuitive).
   - L2SummonInstance > Servitor (to avoid confusion between L2Summon and L2SummonInstance ; the first being mother class of all summons and second being summoners servitors).
   - L2XMassTreeInstance > ChristmasTree (because we aren't #1337 #YOLO #Swag #doge).
   - L2WarehouseInstance > WarehouseKeeper (conflict with Warehouse, part of Inventory).
   - L2CastleWarehouseInstance > CastleWarehouseKeeper (to fit with above).
   - L2CabaleBufferInstance > CabalBuffer (cabal in english, not cabale).
   - L2ArtefactInstance > HolyThing (L2OFF naming).
   - L2ObservationInstance > BroadcastingTower (more proper name).
   - L2NpcInstance > Folk (because those are considered as non attackable targets).
   - L2MutedNpcInstance > MutedFolk (because they are based on Folk).
   - L2FriendlyMobInstance > FriendlyMonster (Monster not Mob).
   - L2NpcWalkerInstance > Walker (drop of Npc).
   - L2TeleporterInstance > Gatekeeper (fits better with the role).
   - L2DoormenInstance > Doorman (not plural).
   - L2CastleDoormenInstance > CastleDoorman (not plural).
   - L2ClanHallDoormenInstance > ClanHallDoorman (not plural).
   - L2GoldenRamInstance > GoldenRamMercenary (more informative).
   - L2CastleTeleporterInstance > CastleGatekeeper.

   - All "Manager" ending NPC types are followed by "Npc" to avoid any conflict with instancemanager (ex : L2ClanHallManagerInstance > ClanHallManagerNpc), even if there isn't any conflict (just respect same rule everytime).
   - Rename StaticObject serverpacket to StaticObjectInfo (after all we got CharInfo, PetInfo, UserInfo,...), to avoid conflict with StaticObject instance type.

   - Fix //removecastle admincommand (owner was still listed).
   - Fix Christmas Trees (and cleanup the instance). Ty Azik for report.
   - Deletion of GNU headers. Reasons :
      - aCis uses its own licence.
      - There is more licence than actual code characters in 80% of classes (notably packets).
      - Faster search tool, lighweight-ier sources when distributed.
   - Edit of licence.htm with latest aCis ToA.
PS : Since it's a complete mess, I will share, exceptionally, the complete pack on rev 367. For people who already owns a server, may Elmoroden gods pity you. I'm the best troll ever.
« Last Edit: February 19, 2017, 02:05:32 PM by Tryskell »
Code: [Select]
Triskel does not speak with foolish fellows who do not know their profession!

Offline Tryskell

  • The cute dwarf
  • *
    • Posts: 4.074
    • Cookies: +78/-2
Reply #267 on: April 20, 2017, 10:12:25 PM
Changeset 368 (712)

Chamberlain Manor's Certificates feature, Cleanup Config, Login, MMOCore, Instance rename && reorganization part II, Logging rework, Misc

Chamberlain Manor's Certificates
   - Implement a missing castle chamberlain feature, the possibility to buy Manor's Certificates. HTMs and behavior is OFF-like.
   - Added "//reset_certificates castleName" admincommand. Integrate it on the castle panel (had to reorganize it a little).

Cleanup Config
   - Drop DATABASE_MAX_IDLE_TIME time (set to 0 by default).
   - Re-order login/server .properties
   - Drop ACCEPT_ALTERNATE_ID / REQUEST_ID from login on (weren't existing on .properties, not used by login)
   - Drop external/internal hostnames system ; only one hostname is allowed.
   - LoginServerThread cleanup :
      - Drop _waitingClients (synchronized, check logic already handled by the other CHMap).
      - Drop some variables (7 were calling Config), some unused methods. Some rename are made.
      - Move some of the security check logic here and there to make it cleaner.
   - ServerStatus content is reorganized in both LS and GS sides. Addition of age limit / pvp server tags.
   - FloodProtectedListener connections are registered on a ConcurrentHashMap.
   - Creation of ServerData class (was part of ServerList packet). Cleanup of ServerList for easier proxy handler implementation.
   - Creation of GameServerInfo class (was part of GameServerTable).

   - Avoid to crash on packet read buffer underflow (client connection is dropped instead).
   - Tweak MMOCore values to process packets x4 faster (5k packets = from 16s to 4s).
Instance rename && reorganization part II
   - L2Object is renamed WorldObject.
   - Character (previously L2Character) is renamed Creature due to class already defined on JDK (and making imports complicated).
   - AI models are renamed to fit with new naming convention (PlayerAI, PlayableAI, CreatureAI, etc).
   - The package is now moved on (best location). ai.model is renamed ai.type (because was redundant).
   - Templates, Stat && Status models are renamed to fit with new naming convention.

Logging rework
   - log.cfg is renamed
   - Drop 'audit' layer && associated IllegalPlayerAction system (all punishements are deleted, DefaultPunish && DefaultPunishParam configs are dropped). Reason : that's the point you write integrity checks.
   - Drop GMAudit, uses the default formatter/handler/filter (all GMs are written on the same file).
   - Whole logging system is moved into commons. Create 'filter', 'formatter' && 'handler' packages on log. Rename package 'log' to 'logging'.
   - All handlers got a limit and a count to avoid to flood server with logs. The log limit is set to 1mo instead of 500ko. The count is setted to 5 files.
   - All logs are now moved in their own folders (those folders are created by default).
   - Logs name pattern has been edited (typeName_count.txt), the extension is now .txt.
   - All formatters are based on same writting style.
   - Merge math methods from Util with MathUtil. Delete Util.
   - banned_ip.cfg is renamed
   - FloodProtectors class is moved from gameserver.util to
   - Addition of SysUtil, holding system related methods.
   - L2Bookmark > Bookmark + basic cleanup of BookmarkTable.
   - Minor cleanup of GameServer and L2LoginServer (don't keep references when not needed, drop of "L2" > LoginServer).
   - MinionList cleanup, replace the CopyOnWriteArrayList (poor performance).
   - Minor cleanup of RaidBoss (drop a double isMovementDisabled() check).
   - Fix a typo error on query prior to sieges rework, ty HaddWik for report. Minor Siege class cleanup.
   - SevenSigns minor cleanup (drop 3 redundant static variables and one method).
   - Slight cleanup of RecipeShopSellList packet (avoid .get on a for loop).
   - villagemaster/30594.htm edit.
PS: if you got better log writting style, I would eventually integrate it.
PS2: build.xml is edited, some .properties are edited.
« Last Edit: April 21, 2017, 12:16:54 AM by Tryskell »
Code: [Select]
Triskel does not speak with foolish fellows who do not know their profession!

Offline Tryskell

  • The cute dwarf
  • *
    • Posts: 4.074
    • Cookies: +78/-2
Reply #268 on: June 15, 2017, 08:52:52 PM
Changeset 369 (762)

Datatype reorganization, HTMs / NPCs behavior, Misc

Datatype reorganization
   - "datatables" package is renamed "data". Creation of subpackages "xml", "sql" && "manager" inside it.
   - All tables are renamed/cleaned up
      - XML loading/storing data ends with "Data".
      - SQL loading/storing data keeps old "Table" denomination.
      - Tables using both types (xml/sql) or temporary data (such as fences) are stored as "Manager".
   - All XMLs are renamed and edited to follow new conventions.
   - XMLDocumentFactory is replace by XMLDocument, a light abstract layer enforcing writting style (parseDocument, loadDocument, load).
   - Biggest edits are following :
      AccessLevels / AdminCommandAccessRight / GmListTable > AdminData
         - AccessLevel uses a StatsSet to feed data, AdminCommandAccessRight model is entirely dropped.
         - All "datatables" are merged under AdminData.
         - All ranks are provided inside the XML (no more hardcoded rank). XML format has been modified.
         - Child access has been simplified (a unique child, instead of a array).
         - Default max rank is now 8, commands are set to 7 (Admin rank) ; all associated configs have been dropped. Colors have been edited to be unique (SweeTs will do a good Support GM ! :kappapride:)
         - A new Config has been added, DefaultAccessLevel, allowing you to set a unique access level to everyone (before, that config was a boolean and could only reward Master rank).
         - //reload acar is edited for //reload admin, which reloads accesses in same time than commands rights.
      TeleportLocationTable > TeleportLocationData
         - TeleportLocation is edited : drop L2 prefix, use a StatsSet to feed infos and extends Location. It doesn't hold anymore id (can be retrieved using the Map).
      FishTable > FishData
         - FishData is renamed Fish, while FishTable is renamed FishData. Use a StatsSet. XML edited.
      SoulCrystalsTable > SoulCrystalData
         - SoulCrystalData is renamed SoulCrystal, while SoulCrystalsTable is renamed SoulCrystalData.
         - Rework successs/fail rates using L2OFF, all chances are now using a base 1000 instead of 100. Ty Marcatu.
         - Data formatting has been edited.
      StaticObjects > StaticObjectData
         - System uses a getInstance(), like his brothers.
         - Store content back in a public List.
      HennaTable > HennaData
         - Edit XML name/parameters.
         - Handle getAvailableHennasFor/canBeUsedBy (previously getAvailableHenna/isForThisClass) differently (no more _hennaTrees).
         - Move the parsing from Characters to Items tab on server loading.
         - Cleanup + Javadoc. getAmountDyeRequire() > getRequiredDyeAmount() - still static.
      HelperBuffTable > NewbieBuffData
         - Edit XML and classes names (NewbieBuff, NewbieBuffData, newbieBuffs.xml).
HTMs / NPCs behavior
   - Karma players can't speak to NPC anymore (default behavior). They STILL can speak when such NPC doesn't have an associated -pk HTM.
   - Add and fix all merchant HTMs (addition of all -pk, -bought, -sold, -empty : something like 300 HTMs). Implemented -empty (when your inventory is empty) and -bought (you just bought an item from a merchant).
   - Fix fisherman -sold behavior (was implemented but dysfunctional).
   - Addition of npcId 31075 HTMs and 5 buylists related to that NPC. Folk > Merchant edition.
   - Toma (the guard) got its real name, Thoma, set on XML.
   - Edit respawn delay / respawn random formulas to avoid warning messages.
   - Rework the Optional uses for better performance, ty Sdw to pointing it out.
   - You can't pickup or use Intention.PICKUP during an attack. Ty IpotoniC.
   - Fix NPE on checkSide / checkSides.
   - Drop fake skills integrity checks. Ty Copyleft.
   - Fix ItemFilter, due to previous logger refactor. Ty Mellion.
   - Fix tax rate on multisell system. Ty vampir.
   - Fix a HTM typo on Q105. Ty Ipotonic.
   - Merge ALT_PARTY_RANGE && ALT_PARTY_RANGE2 configs for PARTY_RANGE. Value is set to 1500 by default (like all checks found on L2OFF AI scripts).
   - Addition of StatsSet.getDoubleArray.
   - Hotfix for skills resistance calculation. Ty Erlandys.

Examples of skills calculation, before / after.
The point is, the accumulation of different similar effects don't impact as much as before (not proportional anymore, follow what could be called a logarithmic curve : "more you got, less you get").

Sleep effect :
NM Set : 16.85% / 16.31%
- : 54.91% / 54.37%
Mental shield : 27.73% / 27.18%
NM Set + Mental shield : 1% / 8.16%

Fire damage :
Elemental resist (20) : 566 / 566
surrender fire (-30) : 920 / 1011
- : 707
surrender fire + elemental resist (-10) : 778 / 808
resist fire + elemental resist (+50) : 353 / 396
valakas passive resist + resist fire + elemental resist (+65) : 240 / 327

PS : most of this patch is part 1 of... 3-4. It's simply too long to make all changes in a single revision. Probably the SpawnManager will be delayed to, at least, the end of the cycle.
« Last Edit: June 15, 2017, 10:21:57 PM by Tryskell »
Code: [Select]
Triskel does not speak with foolish fellows who do not know their profession!

Offline Tryskell

  • The cute dwarf
  • *
    • Posts: 4.074
    • Cookies: +78/-2
Reply #269 on: June 20, 2017, 05:01:00 PM
Changeset 370 (782)

Datatype reorganization, Summon stuff, Skills edit, Revert, Misc

Datatype reorganization
   - Creation of model.pledge package. Move ClanInfo, Clan (renamed from L2Clan) and ClanMember (renamed from L2ClanMember). Move ClanTable with really light edit to data.sql package.
   - Cleanup the Javadoc on all Table/Data types which have been already cleaned up. In the future, I will try to keep using {@link}, which I find useful.
   - BuyListTable > BuyListManager
      - Creation of BuyListTaskManager, a global task for all Products (avoid 1500+ running tasks, if all Products are under restock timer).
      - Javadoc + Reorganization (use of XMLDocument, Product uses a StatsSet, writting style, etc).
      - SQL data is removed on restock timer completion, not simply saved with 0 lenght.
      - decreaseCount result impacts on task schedule (negative result = no task launched).
   - NpcWalkerRoutesTable > WalkerRouteData
      - npcwalker_routes.xml > walkerRoutes.xml. The content is edited, to put content of a node on a single line.
      - Extends XMLDocument, proper Javadoc.
      - WalkerAI is fully rewrote to use generic AI logic (MOVE_TO intention, then we use onEvtArrived() to call the next point).
      - L2NpcWalkerNode > WalkerLocation, cleanup and extends Location (which is handy).
      - Addition of WalkerTaskManager, a global task handling WalkerNode delays.
   - Location
      - Location and all classes extending Location are moved to model.location package.
      - VehiclePathPoint > VehicleLocation, TowerSpawn > TowerSpawnLocation and both now extends (Spawn)Location.
Summon stuff
   - The attack stance is activated even when a player hits the summon (not only Attackable). Attack stance doesn't work for Folk only.
   - Avoid behavior is reworked and implemented in an elegant and retail way. Ty RooT/Enyrgus for tests.
   - PetStatus is dropped (unused).
   - Summon attack damage is correctly shown (different messages for Pet/Servitor). Hitting a summon also fires the EVT_ATTACKED event.
Skills edit - ty Sahar
   - Angelic Icon duration decreased from 120 seconds to 60 seconds. It has cAtk instead of cAtkAdd effect.
   - Archery range bonus reduced from 300 to 100.
   - Force Barrier reuse delay increased from 10 minutes to 15 minutes.
   - Mirage reuse delay increased from 5 minutes to 10 minutes.
   - Honor of Pa'agrio skill radius increased from 400 to 900.
   - Vortexes now use multi_debuff stackType instead of multi_debuff_x.
   - Chant of Victory stackOrder changed from 1 to 2.
   - Victories of Pa'agrio stackOrder changed from 1 to 2.
   - Whiplash reuse delay increased from 8 seconds to 30 seconds.
   - Tidal Wave power decreased from 228 to 81.
   - Salvation duration increased from 20 minutes to 1 hour.
   - Added missing SA effects to Shining Bows.
   - Blinding Blow lethal1 chance reduced from 5 to 4.
   - Blinding Blow lethal2 chance reduced from 2 to 0-1 (depending on skill level).
   - Hotfix for EffectBluff.

Revert parts of rev 361 (changeset 562):
   - Toggle can be used while attacking.
   - You don't stop moving if skill is under reuse and you try to use it.
   - Register a missing admin command, admin_knownlist_page. No clue why it was missing the whole time.
   - Delete admin_mons, which was MDT launch admincommand (no use).
   - Rework PlaySound packet, listing correct parameters and introduce new constructors (notably one with WorldObject). Ty RooT.
   - Fix the stuck behavior after requesting a movement when you're actually isMovementDisabled(). Ty Ipotonic.
Code: [Select]
Triskel does not speak with foolish fellows who do not know their profession!