Cycle 380-389 focus : movement refactor, quests end. Changeset 385 (1468) is up ! Scripts, CommandChannel edit, Bugfixes, Organization

Last aCis updates

Tryskell · 285 · 243078

Offline Tryskell

  • The cute dwarf
  • *
    • Posts: 4.014
    • Cookies: +61/-2
Reply #240 on: February 01, 2015, 09:16:39 AM
Changeset 341

MMOCore, Announcements, Eclipse settings, Scripts, Misc

MMOCore - basic update to latest L2J version.
   - Add a try/catch to avoid core crashing.
   - Disable Nagle's algorithm (better latency, but bigger bandwitdh usage). It's a real time application, for love of goodness !
   - Client is setted on putPacketIntoWriteBuffer method.

   - Fix an issue regarding Announcement limit.
   - Add //announce all_auto, allowing to announce auto tasks. Add the appropriate button on Announcements admin panel.

Eclipse settings
   - Added project based Java8 compliance on both projects.
   - Copied project settings from gameserver to datapack. It seems I was using workbench settings on datapack.
   - Fix few missing stuff on datapack, such as static keywords or nested return.
   - "Incomplete switch cases on enum option" is now setted to "Ignore".
   - addition of SecondClassChange script. I can't test all cases and HTMs, so please report any issue on forums.
   - addition of Q662. Ty RooT.
   - numerous packets cleanups
      - clean one nested Item Class.
      - improve readability or performance.
      - reduce the amount or complexity of variables / parameters when not needed.
      - HennaInfo is fixed, the class level defines the number of henna slots. Ty RooT.
   - getItems() from Inventory returns a List, not an array anymore.
   - Fix possible double attacks issue, ty Hasha.
   - Decrease timer between multiple pickups.
   - Added a new multisell bypass, with a newbie check for L2Merchant exchange equipment. Ty ArhsGr.
   - Fix a NPE regarding CrestCache rework. Ty katara for report.
Code: [Select]
Triskel does not speak with foolish fellows who do not know their profession!

Offline Tryskell

  • The cute dwarf
  • *
    • Posts: 4.014
    • Cookies: +61/-2
Reply #241 on: February 06, 2015, 11:45:04 AM
Changeset 342

FloodProtectors, Scripts, Misc

   - Simplified FP system (took L2JFree one). Timers are still configurable via config, all others configs are dropped (totally pointless).
   - A parameter setted to 0 means the action is always possible (you can enable/disable any FP that way).
      - GLOBAL_CHAT && TRADE_CHAT FPs are desactivated by default. GLOBAL_CHAT handles "All" and "Shout" chats.
      - SOCIAL timer has been tweaked to handle animations at the most global running speeds. Edit if you don't like.

   - addition of Q224, Q228, Q663. Ty to roko91 and RooT.
   - Fix, anew, the movement stuck issue.
   - Drop the empty folder in taskmanager.
   - You can use arrows UP and DOWN to move the character without making your client crashes. No configs.
   - Chats and RollDice handlers cleanup (nothing fantastic). Roll dice message is sent to anyone.
   - Complete StopRotation packet. Ty RooT.
Code: [Select]
Triskel does not speak with foolish fellows who do not know their profession!

Offline Tryskell

  • The cute dwarf
  • *
    • Posts: 4.014
    • Cookies: +61/-2
Reply #242 on: March 11, 2015, 07:03:25 PM
Changeset 343

Scripts, Inventories, Misc

   - Addition of Q220, Q226. Ty roko91.

   - Drop the unused "block" system on PcInventory.
   - Drop the "quests slots" system on PcInventory. Easier slots check.
   - Fix Packet Forge tool. Ty roko91 for the fix.
   - Fix a NPE on ShortcutInit packet.
   - Fix a NPE on removeCrest().
   - Fix a NPE on calculateRewards(), overhit related. Ty SweeTs for the fix.
   - Added a missing check on pickup method, related to overweight. Now you can't be 110% full...
   - RequestDestroyItem got its checks edited, with the addition of CANNOT_DESTROY_NUMBER_INCORRECT message (for both < 1 and > max item number conditions).
   - Remove GMs priviledges on few packets, leading to a most appropriated casual player experience for : attack stance on restart/logout, slot/weight overbuy, outofcontrol Action.
Code: [Select]
Triskel does not speak with foolish fellows who do not know their profession!

Offline Tryskell

  • The cute dwarf
  • *
    • Posts: 4.014
    • Cookies: +61/-2
Reply #243 on: March 16, 2015, 01:12:41 AM
Changeset 344

Duels - part I, Misc

Duels - part I

I decide to commit first part of Duels, as there is already a lot of work.
All is functional, and far better written than before. Part 2 will get few fixes && little tweaks for Party Duels, probably 10% of what I'm commiting now.

      - General cleanup : aCis code style, DuelState Enum creation, setIsInDuel > setInDuel rename. Numerous comments && Javadoc as documentation.
      - Fix a ConcurrentException on DuelManager (couldn't handle simultaneous Duel creations).
      - Duel id is correctly calculated (it was probably very, very sad before).
      - Chaotic players (karma > 0) can't start or accept a duel request.
      - Fix a potential ConcurrentException on buff/debuff storing.
      - Fix a NPE with _playerConditions.
      - Fix few custom String for SystemMessage counterparts.
      - Fix the way duels handle disconnected players. It is considered as a surrender, as L2OFF. Ty sahar for report.
      - Fix an issue with surrender SystemMessage winner name.
      - Fix the max range for duel request && check task.
      - Fix the check task
         - It is fired once the duel is accepted (instead of after countdowns). A duel can now be disturbed during the countdown.
         - Added missing checks for party duels (zones, interrupted state, distance, pvpflag).
      - Fix RequestDuelAnswerStart checks, which are now exactly the same than RequestDuelStart packet.
      - Fix when a party in a command channel requests or accepts a party duel, that party is automatically withdrawn from the command channel.
      - Fix parties teleport, which are ported back to previous stored location no matter the duel end (in prevision to arena coordinates).
   Victory/lose animations
      - Fix an issue with kneel animation for 'B player/party winner' case.
      - Add Victory animation for winners.
      - Animations are sent even if one side is missing.
      - Revert party duel timer to 120 seconds (retail time).
      - The 1vs1 countdown is setted to 5sec instead of 3sec + "void" 3sec. Messages for 5, 4, 3, 2, 1 cases.
      - The party countdown is setted to 30sec instead of 20sec, with messages for 30, 20, 15, 10 cases. It also uses 5, 4, 3, 2, 1 messages from 1vs1.
      - Drop the 5sec timer at the end of a duel.
      - The two left tasks, CheckTask && StartTask, use scheduleGeneralAtFixedRate to avoid to generate tasks every seconds.
   - Rework PartyMatchList, ExListPartyMatchingWaitingRoom serverpackets.

« Last Edit: March 16, 2015, 01:17:25 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.014
    • Cookies: +61/-2
Reply #244 on: April 15, 2015, 09:17:53 PM
Changeset 345

L2JFree Commons - part I, Misc.

L2JFree Commons - part I
   - StringUtil :
      - Holds all String related methods (gathered from misc places).
      - Addition of 8 static DateFormat to avoid to generate objects. Unify the date writing style over the whole source (few still missing).
      - Cleanup existing methods, improving performance or readability.
      - StringUtil.append() allows to append any type of objects, instead of simply strings (which avoid all valueOf / toString).
      - Util.implodeString() is dropped, use String.join() - Java 8 feature - when possible.
   - Point3D class is dropped (redundant with Location).

   - Drop few invalid IDs from RaidbossInfo script.
   - Fix removeDuel method.
   - Format adenas amount on wedding manager, ty oceeman.
   - Few cleanups, improving readability / performance :
      - L2OlympiadManager, RequestOlympiadMatchList : getOlympiadTasks() creation to handle loop easier.
      - AdminManor handler : addition of static manor.htm.
      - FriendsBBSManager, ClanBBSManager, RegionBBSManager, MailBBSManager : replace String concat on loops for StringBuilder.
      - MailBBSManager : creation of MailType enum.
      - L2AuctionnerInstance : use a StringBuilder instead of String concat loop.
      - RaidBossSpawnManager : the long > long > date > format is cleaned up... You can directly use long to format, lol.
      - SevenSignsFestival : correct use of String.join().
      - PetDataTable : fix a strange use of int array > string format.
      - Drop of GMAudit for bans and buffs action.
      - Q419 : fix the strange array > list > array > 'custom method' formatting
   - All StringBuilder have been reviewed and fixed. The convention name is "sb".
   - All NpcHtmlMessage have been reviewed. The convention name is "html".
   - Since JDK 1.5, String concatenation is AUTOMATICALLY replaced by StringBuilder. Don't bother about concatenation, EXCEPT in one case (see below).
   - FOR loops should always use a StringBuilder, NOT A CONCATENATION.
   - If numerous types of element must be attached, you definitively should use StringUtil.append() method.
   - DON'T USE '+' inside StringUtil.append() to seperate parameters, but ',' !
Code: [Select]
Triskel does not speak with foolish fellows who do not know their profession!

Offline Tryskell

  • The cute dwarf
  • *
    • Posts: 4.014
    • Cookies: +61/-2
Reply #245 on: April 29, 2015, 06:19:13 PM
Changeset 346 (rev 352)

Commons, Holders, Misc

   - StringReplacer class, used for next Log rework (delimiter).
   - Rnd uses ThreadLocalRandom* (Java7 feature)
   - Addition of MathUtil, holding commonly used math methods.
   - isEmpty() addition for StringUtil.

   - ItemHolder && SkillHolder are merged for a more generic IntIntHolder (as there are numerous ways to use an Int<>Int class).
   - Deletion of StatusUpdate Attribute class, use IntIntHolder instead.
   - final static > static final.
   - AdminRepairChar (admin_repair && admin_restore) handler is dropped (pointless).
   - AdminBookmark / AdminSkills / BookmarkTable use a better approach to filter results.
*More performance infos about ThreadLocalRandom on
Code: [Select]
Triskel does not speak with foolish fellows who do not know their profession!

Offline Tryskell

  • The cute dwarf
  • *
    • Posts: 4.014
    • Cookies: +61/-2
Reply #246 on: May 17, 2015, 04:22:28 PM
Changeset 347 (366)

Tradelist, AI, Misc

   - General cleanup, drop logs.
   - Fix a ConcurrentException.
   - Create a new package model.tradelist, and split TradeList and TradeItem.

   - Drop AIAccessor (better OOP approach).
   - Little cleanup and organization of ai package (creation of ai.model).
   - L2PcInstance pickup time is upped to 250ms, from 100ms (and previous was 500ms).
   - L2PcInstance getAI() follows other getAI().
   - Revert synchronized keyword on doAttack (causing issues).
   - Drop the Flee behavior for Mage/Priest AI types (not retail and buggy).
   - Better OOP approach for doRevive().
   - You can't sit anymore on a throne which is already occupied - ty RooT.
   - Fix a visual issue when logging/teleporting near a throne sat player - ty RooT.
   - Few Iterator cleanup, handled in a more elegant way.
   - Fix 15+ "potential ressource leak". Adapt latest SQLAccountManager.
   - Fix //zone_visual without parameter, merge //zone_visual_clear and //zone_visual.
   - Drop internal WarehouseItem classes from SendWarehouse(Deposite/Wthdraw)List. Drop GM check.
   - Replace the 3 uses of CopyOnWriteArraySet, which is a performance overkill crap.
   - L2World cleanup (rename methods && variables).
   - AdminEditChar : cleanup listCharacters() method.
   - PrivateStoreType Enum type creation.
Code: [Select]
Triskel does not speak with foolish fellows who do not know their profession!

Offline Tryskell

  • The cute dwarf
  • *
    • Posts: 4.014
    • Cookies: +61/-2
Reply #247 on: June 07, 2015, 03:57:28 PM
Changeset 348 (379)

Scripts, Refactor, Misc

The scripts stuff has been made due to external compiler taking huge time to compile, prior to JDK8.

   - Drop the external compiler, leading to -8mo RAM usage at startup and 2 libs drop. Server starts in 14sec instead of 1min+.
   - All scripts are moved inside core side ; scripts HTMs are moved into data/htm folder.
   - scripts.cfg is replaced by scripts.xml ; it is moved to data/xml.
   - Drop the possibility to load/reload/bypass scripts (drop associated configs && admincommands).
   - Addition of ScheduledQuest, which will be used later for tasks rework / events.
   - L2AttackableAiScript avoids to check NpcTemplate (- 6000+ .get()).

   - Rename old Util.Util to HexUtil, and move to commons.lang.
   - Creation of package commons.math, move MathUtil && PrimeFinder inside.
   - Move MinionList to gameserver.model.

   - Fix a Config related to packets debug, ty RooT.
   - Fix a ConcurrentException on RecipeShopManageList, and add another exploit check.
   - Fix checkPvpSkill, ty Versus.
   - Fix a double flag addition on siege flag spawn, ty Versus.
   - Use ConcurrentSkipListMap for subclasses and cubics (concurrent AND ordered).
   - Add a single method on NpcTable, which allows to drop 4 "single used" methods.

Due to the huge refactor (thousands files are moved), the pack will be exceptionnally fully shared, to give you idea about how it is organized now.
It's also probably easier to copy-paste folders && packages directly rather than using the diff patch (which is 19mo, 350k lines long).
Code: [Select]
Triskel does not speak with foolish fellows who do not know their profession!

Offline Tryskell

  • The cute dwarf
  • *
    • Posts: 4.014
    • Cookies: +61/-2
Reply #248 on: June 10, 2015, 09:30:36 PM
Changeset 349 (389)

Scripts, RandomAnimationTaskManager, L2Attackable, Misc

   - Addition of Q414, Q416, Q639 - ty roko91, DarthVader (and me for the Q639 rewrite ;p).

   - Drop RandomAnimationTask stored variable on L2Npc (pointless).
   - Creation of RandomAnimationTaskManager, a single task holding NPCs social animation behavior. Avoids to create one task per NPC every 10-40sec ; with a single player online, it's ~120 saved tasks every 10-40sec on a random farm area.
   - cleanup (variables / overriden methods / big methods / get && setters).
   - getHateList() doesn't generate new List objects.
   - _attackByList rework
      - No lazy initialization. Avoids volatile/synchronized stuff.
      - Use concurrency to avoid issues.
      - Better OOP approach (moved from L2Character to L2Attackable).
      - Fix the following performance issue : Dying L2Character(s) generate HashSet for nothing (as getAttackByList().clear() calls the lazy initialization on doDie).
      - As a Set doesn't allow double values, drop .contains() check on addAttackerToAttackByList.

   - Fix an issue with mail system.
   - Revert previous commit regarding static DateFormat ; it can lead to misformatting.
   - Put Logger on L2Object level, drop others post-L2Object loggers.
   - Drop cw_reload admincommand (redundant with //reload cw) && misc cleanup about //reload (help, combobox, etc).
   - Addition of 2 missing NPC templates (2 quest monsters). Rename npcId 32008 "Gremory" for easier tracking.
   - ItemId 8056 Key of Splendor Room isn't considered as a quest item anymore.
Code: [Select]
Triskel does not speak with foolish fellows who do not know their profession!

Offline Tryskell

  • The cute dwarf
  • *
    • Posts: 4.014
    • Cookies: +61/-2
Reply #249 on: July 29, 2015, 02:58:35 AM
Changeset 350 (401)

ArmorSets, Memo system, Misc

   - Rework ArmorSetsTable to use regular writing style (both dp / core). It's probably faster to handle directly an integer array rather than creating a List of HashMap...
   - ArmorSet uses a int[] to store the set, which avoids to generate an integer array everytime you use the admin command "create set".
   - Drop XMLParser, and cleanup XMLDocumentFactory from unused stuff.

Memo system
   - Addition of PlayerMemo, NpcMemo && AbstractMemo. Edit ServerVariables system to reuse AbstractMemo ; rename it ServerMemo.
   - AbstractMemo is a StatsSet with a AtomicBoolean which checks if updates have been made or not (used to make clever saves).
   - PlayerMemo is loaded on player instance creation, and saved on player cleanup.

   - FishingChampionshipManager instance is harmonized.
   - StatsSet getObject() is reworked.
   - Fix a CCE (as throne system uses mount system). Ty Versus for report.
   - Drop nokarma && character_list admincommands (they already exist under set_karma 0 && character_info).
   - Fix a IOOBE on find_character (prior to page system cleanup).
   - Fix a NFE on remove_skills. Send page 1 if parameter was invalid.
   - Few StringBuilder inner concat -> StringUtil.append cleanup.
   - _disabledSkills doesn't use lazy initialization anymore. isSkillDisabled() method are merged.
   - Fix few postIL invalid skillIds checks. Ty raphaelfersan.
   - Fix 2 Oly SystemMessage, ty ErHard.
   - Access level trade-based SystemMessage are formatted. Ty ErHard.
   - Fix few HTMs encoding issues.
   - Fix Summon Friend item consumption update, and add a message for missing items, ty JDruidas.
   - Fix //npc_index, ty JDruidas.
« Last Edit: July 29, 2015, 05:02:21 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.014
    • Cookies: +61/-2
Reply #250 on: August 31, 2015, 03:53:21 PM
Changeset 351 (416)

Sex Enum, Sex-based collision, GameServerRegister, ClassId cleanup, Misc

Sex Enum - Ty lord_rex.
   - setsex admincommand allows only etc, female and male states. There is no more toggle possibility. If you set nothing or a wrong Sex, it defines it as male by default. If the character sex is already setted to the given sex, then it doesn't edit it.
   - Fun fact : etc state for player looks like female. For koreans, women are objects... :troll:
Sex-based collision implementation - Ty lord_rex.
   - Fix oversized weapons on females (notably visible for dwarves).

GameServerRegister is reworked to match aCis database installer standards.
   - Add "clean" option, which allows to drop a SINGLE server.
   - Keep the possibility to drop all servers using "cleanall".
   - Add "exit" option.
   - Rework "help" : renamed as "list" and it is easier to see if an id is already used.
   - Informations refresh is correctly handled (before you had to close and launch back the program to get it updated).

ClassId cleanup - Ty Hasha.
   - ClassId is merged with old PlayerClass, allowing some nice optimization.
   - Race is renamed ClassRace.
   - ClassType is dropped, use regular int instead.
   - Possible subclasses for a class are generated and stored on a sexier way. Fix also an issue if the method was used on a custom way.
   - Drop 3 variables from xml/classes (already handled by ClassId enum).
   - Multiple FindBugs fixes.
   - Rework throne sit system to be stored on its own int, because it was using mount system int and was causing issues.
   - Fix the following issue : Wrong parameter count '2' for SystemMessageId: SM[761:S1_CANT_ENTER_ALLIANCE_WITHIN_1_DAY]
   - Fix Q625 npc messages for retail ones. Ty SweeTs.
Code: [Select]
Triskel does not speak with foolish fellows who do not know their profession!

Offline Tryskell

  • The cute dwarf
  • *
    • Posts: 4.014
    • Cookies: +61/-2
Reply #251 on: September 14, 2015, 03:16:44 AM
Changeset 352 (427)

Quests, Movement, Cleanup, Misc

   - Addition of Q221 && Q229, ty roko91.
   - Add numerous SOUND_ITEMGET sounds to match aCis quests standards.

Movement - Ty Hasha.
   - Fix movement multiplier.
   - You can't walk anymore if you're mounted (avoid moonwalk issue).
   - Few animation based interactions use movement multiplier ; drop getAnimationTimer().
   - Multiple uneccessary overidden methods are cleaned up.
   - Fix player based water speed (not based on run speed, got its own value).
   - Fix player based walking speed (not based on run speed, got its own value).

      - Few variables are renamed (boolean notably), and the class is more organized.
      - _vehiclePosition is now a SpawnLocation in order to keep track of heading information (used for a packet).
      - Drop GatesRequest && SummonRequest classes.
      - Better use of OOP for initCharStatusUpdateValues() method.
      - Merge isWearingArmorXType methods, and add checks for NONE and SHIELD cases. isWearingArmorType(ArmorType) is the result !
      - Internal "one shot" Runnable classes are dropped.

      - L2BoatInstance is merged to L2Vehicle (no use to get abstract), L2BoatAI is renamed L2VehicleAI for the occasion.
      - Fix oust system. Add deletion message on ticket consumption.
      - Vehicles packets writing style is unified and avoid to generate Location objects.
      - Improvement of Location && SpawnLocation classes. The idea is to refresh the object instead of creating a new one.

   - Fix NextAction infinite loop (must be cleaned once action is done). Ty Kraker for report.
   - Add ActionFailed on onIntentionInteract (to fix multiple clicks). Ty Hasha.
Code: [Select]
Triskel does not speak with foolish fellows who do not know their profession!

Offline Tryskell

  • The cute dwarf
  • *
    • Posts: 4.014
    • Cookies: +61/-2
Reply #252 on: October 02, 2015, 08:53:53 PM
Changeset 353 (444)

Pets, Misc

   - Split L2PetData && L2PetLevelData : L2PetData is now merged with the new PetTemplate, while L2PetLevelData is renamed PetDataEntry.
   - Data is parsed using L2OFF : Fix all base values (int to double) and add numerous missing stats.
   - Added template based autoFeed, hungry and unsummon limits (respectively 55, 50 and 40% : before only 55% was used). Rework associated checks, drop isHungry().
   - Added messages for pet items equip/unequip.
   - Fix the walking/running and food visual updates on pet window when autofeeding.
   - Added distance check for player > pet items transfer.
   - Fix a critical issue with pet > player inventory transfer on pet unsummon.
   - Fix doesPetNameExist method to fit with L2OFF (also avoid String operations).
   - Fix the annoying issue with summons single attack (erm, my fault).
   - NpcTable is fully reworked. We avoid 2 loops to check XML content.
   - Drop L2NpcAIData object, the content is merged with NpcTemplate.
   - ClassId Enum got a static VALUES .values() to avoid to generate arrays on call.
   - NpcTemplate is organized ; setRace is cleaner, Race Enum is edited to reflect that change. Drop of "single-uses" methods to avoid pointless calls.
   - NPCs skills are now taken directly from NpcTemplate, instead of being cloned into L2Character. Save 41k+ maps, roughly 15mo of RAM.
   - StatsSet : getBool() is slightly edited. Addition of getStringArray(), getList() and getMap(). Drop of isSet(), which is containsKey() clone.
   - Light cleanup on HelperBuff system (L2HelperBuff moved and renamed, drop of id variable, drop of setters, etc).
   - Drop Server class, which was holding 3 int. Rework Config and associated classes accordingly. Ty Hasha.
   - //reload admincommand allow the use of numerous parameters (//reload skills npc acar, for example).
   - L2AuctioneerInstance RooT's fix.
PS : don't forget to edit npcs XMLs to reflect changes (pet data is holded by NpcTable, and AI type is setted in CAPS to fit with Enum).
PS2 : a second part will come with fixed xp system (wolf, strider, hatchling) and stats for pets (correctly loaded but not yet correctly calculated).
Code: [Select]
Triskel does not speak with foolish fellows who do not know their profession!

Offline Tryskell

  • The cute dwarf
  • *
    • Posts: 4.014
    • Cookies: +61/-2
Reply #253 on: October 21, 2015, 06:25:13 AM
Geodata is now mandatory.
L2D type geodata is too mandatory.
In case you were using L2D geodata, consider to convert anew the geodata you were using, as the type of L2D has been edited. Using an older L2D geodata will lead to ingame issues.

Changeset 354 (460)

GeoEngine (part II/III), DropProtection drop, ObjectPoly drop, ObjectPosition drop, Misc

GeoEngine - part II

   - merged geodata and pathfinding packages/classes, now we have only one Geoengine package and Geoengine class - better structure overview and removal of unnecessary calls between PathFinding and GeoData.
   - simplified inheritance: new Geoengine abstract class now contains as many methods as possible (common methods to any geoengine model), each geoengine model contains only own/specific methods -> like -70% of code over whole geoengine package (duplicates, getters, ...).
   - Geoengine is now mandatory to start up server because of new upcoming features (doors, fences, new npc spawn manager) - cleaned up configs and related classes.
   - adding missing javadoc everywhere, adding comments to critical sections.
   - merged GeoData and PathNode admin handlers/commands.
      - implementing back Block-based geodata model prior to geo part III.
      - dropped all "new IndexOutOfBounds()" thrown every time we are accessing layer, that does not exist - geodata conversion speed +200%.
      - renaming block classes for better identification.
      - geoengine now loads only diagonal geodata (L2D format), due to overall performance reasons, updated configs with info.
      - implemented another way of accessing block data - indexes. Index-based approach should be faster for multilayer block, when accessing both, NSWE and height of particular cell (should have double performance compared to current getter-based model...upon specific conditions).
      - GeoEngine is no longer abstract class, it contains geodata. GeoEnginePathfinding extends GeoEngine and contains pathfinding related methods.

   Path-checking & Pathfinding
      - fixed line of sight check, though walls without geodata, ty Root for report.

   Converter & L2D geodata
      - dropped own block classes, using geoengine blocks and updating them with necessary methods.
      - updated geodata conversion with few cases/conditions leading to slightly more acurate geodata on rare ocasions (100-1000 cells per region file).
      - L2D geodata for multilayer block are now aligned same way as for L2J/L2OFF (from highest layer to lowest one), leading to drop of the sorting mechanism, overall simplicity and much faster conversion.
      - dropped logger class, using standard output now, improved instructions (for dummies).

GeoEngine - part III

      - added IGeoObject interface to create basic definition of geo object, when any object implements IGeoObject interface successfully, the object can be added/removed to/from geoengine and geodata can be affected by it.
      - created IDynamicBlock interface, added BlockComplexDynamic and BlockMultilayerDynamic classes to support dynamic geodata when IGeoObject is added/removed to engine.
      - updated GeoEngine with methods to add/remove IGeoObject, created the normal block to dynamic block conversion.

      - written own parser to get XML from L2OFF data, new XMLs now contains more and accurate parameters (e.g. doors have level now, it is used for Unlock skill chance calculations).
      - doors are parsed using combination of IL (Vanganth) and GF (Sublimity) datas (thanks for shares) - that means, we have also all doors for future implementation of Fortresses now (340 -> 547 doors total!).
      - checked and corrected all spawn coordinates of doors (L2OFF uses spawn coordinate at the edge of door, we need it in the center) + it contains Z coordinate from geodata (this will help with further implementation of doors and its geodata creation).
      - created DoorTemplate to contain data from XML files, L2DoorInstance use the template in constructor - same approach as for NPCs.
      - massive cleanup and reorganization of L2DoorInstance.
      - updated HTML info window, to show all parameters - so sexy now.
      - auto-open/close task improved, using strictly timers from template, cleaned up scripts.
      - updated/cleaned DoorInfo and DoorStatus packets, added missing parameters.
      - added L2OFF posibility for doors to control another door - multiple open/close at same time.
      - implemented IGeoObject interface and updated DoorTable with proper loading mechanism for it.

      - added FenceTable, L2FenceInstance, ExOlympiadFenceInfo packet.
      - updated admin spawn commands to spawn fences correctly.
      - implemented IGeoObject to L2FenceInstance and updated FenceTable to support dynamic geodata - client sends StopMove packet, when character make collision with fence.

DropProtection drop

   - Drop DropProtection class ; rework an existing system to do the same work.
   - Rework L2PcInstance.isInLooterParty() and rename it isLooterOrInLooterParty().
   - dropItem()
      - L2Attackable : No more items template checks.
      - L2PcInstance : No more options to secure player drops. Save a inventory.getItemByObjectId on intentional player dropItem().
   - L2PetInstance.doPickUp() : Drop a double setIntention IDLE.
ObjectPoly drop

   - Drop ObjectPoly class, hold directly variables into L2Object.
   - Add a Enum to enforce cases type (DEFAULT, ITEM, NPC). All checks are based on PolyType.
   - Add few checks, notably item template and possible targets.
   - Add the possibility to polymorph a NPC (regular or L2Attackable).
   - Drop SpawnItemPoly packet (redundant with SpawnItem packet).
ObjectPosition drop

   - Drop ObjectPosition with correct use of override, leading to a shitload of dropped cast. All methods are moved into L2Object.
   - spawnMe methods are harmonized.
   - Fix an issue with setRegion (code was running twice).

   - L2PcInstance : Rename setProtection to setSpawnProtection (to avoid to melt with item protection).
   - Fix subclass height/radius issue, prior to changeset 351.
   - L2CharPosition is dropped. Use Location for IntentionMoveTo, and SpawnLocation for the leftover.
   - Add MathUtil.limit method (pickup min or max limits if reached, from a default value).
   - Use spawnMe() when spawnMe(int, int, int) isn't needed (avoid to write location).
   - Drop all useless occurences of L2WorldRegion.removeFromZones(this) checks, check which is already done by decayMe() > setRegion(null) from L2Character override. In the same order of idea, drop occurences of L2World.removeObject(this), already done by decayMe().

Geodata is now mandatory.
L2D type geodata is too mandatory.
In case you were using L2D geodata, consider to convert anew the geodata you were using, as the type of L2D has been edited. Using an older L2D geodata will lead to ingame issues.
« Last Edit: October 21, 2015, 09:01:40 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.014
    • Cookies: +61/-2
Reply #254 on: November 11, 2015, 03:15:36 AM
Changeset 355 (477)

Movement fix, PetData part II, L2Attackable AI, Lottery, Announcements, Misc

Movement fix
   - Fix strange movement rollback on skill spam.
   - Fix stackoverflow issue.
   - Fix target status (little circle color becoming red on attack).
PetData part II - ty Hasha
   - PetDataEntry uses a recycled StatsSet to feed values (short writing style).
   - Mounted players stats are fixed (regular/swim/fly speeds included).
   - Regular pets stats are fixed.

L2Attackable AI
   - L2Attackable won't buff players anymore.
   - L2Attackable can now buffs when they are in attack mode (in order of skills preference : after heal, but before debuff).
   - Lottery Ticket message fix (doesn't show enchant anymore). Ty RooT.
   - Lottery HTMs table fix. Ty RooT.
   - Fix the lottery instructions %prize% tags.
   - Add default prize to leftover to calculate new lottery prize.
   - Fix an ArrayIndexOutOfBoundsException for empty //announce. Cleanup adminhandler.
   - Edit Announce panel, replacing edit button for a multiedit (allow more than 16 characters message). The typing is more flexible, with 3 visible lines output.
   - Fix L2WorldRegion onDeath() / onRevive() - was triggering all L2WorldRegion zones, no matter if character was inside or not.
   - Slight revision revert for dropItem (fix the issue where you drop the entire stack of an item even if you put lower amount).
   - Calculation of evasion/accuracy is now precomputed into Formulas.BASE_EVASION_ACCURACY.
   - Put defaults values for AI type data (fixing Headquarters spawn, prior to NpcAIData drop).
   - Slight geoengine fix regarding multilayers (most notably fortress) when using an high character's height.
   - Some HTM typos (from "Hunt HTM typos!" topic).
   - Drop PlayableKnownList (no use).
   - Edit knownlist ranges to follow L2J.
Code: [Select]
Triskel does not speak with foolish fellows who do not know their profession!