-
Posts
5,376 -
Joined
-
Last visited
-
Days Won
70 -
Feedback
0%
Content Type
Articles
Profiles
Forums
Store
Everything posted by Tryskell
-
Source aCis - another CRAPPY interlude server
Tryskell replied to Tryskell's topic in Server Shares & Files [L2J]
Changeset 412 (3767) JDK 25, Garbage shrink, GeoEngine, PathFinder, Movement, IdFactory, Skills/Items refactor, Fishing, Stats calculation, Race issues, Zones, Bugfixes, Organization JDK 25 aCis officialy migrates to latest LTS, JDK 25 ! Make a use of unnamed variables. Garbage shrink - reduce overall garbage (-92%~) with multiple reworks (from 17go/h to 1.4go/h). GeoEngine Memory-mapped geodata, avoiding ~300mo internal objects overhead and remove the geodata loading from the GC heap. Replace divisions with bit shifts for block indexing (notably used by getBlock). Eliminate repeated Math.sqrt() calls in the DDA loops : horizontal distance and step increments (distStepX/distStepY) are precomputed once, then accumulated (accumDist) on each iteration. Implement CellWalker/LosTrace which factorize the DDA and avoid double scanning for vision checks. Add a block cache (lastBlockX/lastBlockY) to avoid redundant getBlock() calls while the cell stays within the same block. Add guards for the dx == 0 case (purely vertical movement) when computing slope m and distance increments. Introduce LOS_HEIGHT_FACTOR to factor out the line-of-sight height calculation. PathFinder Implement retail pathfind system, using both algorithm, rules and data. System is far lesser impressive than geodata ones, but is blazing fast and is strictly similar to what L2OFF is/feels. New Config : PATHFIND_ITERATIONS / PATHFIND_CHASE_ITERATIONS. Movement Revert back to a shared MoveTaskManager ticking every 100ms ; no per-actor scheduled task anymore. Use immutable, atomically-published MoveHolder orders (similar to CastHolder pattern) ; no lock between the order path and the tick path. Implement a server-side start-accel ramp matching the client's from-standstill acceleration, simulating properly the client animation cycle over straight lines - no matter your actual speed. IdFactory Use a lock-free implementation rather than full synchronized. Skills/Items refactor - Ty Bandnentans for refactor, Sahar for initial skill parsing Reparse all skills and items using L2OFF AdvExt. Rework many formulas to handle things as L2OFF (notably skill effect success rate, fall damage, etc). Skills Rework 15 target handlers, introducing 13 AffectScope and 7 AffectObject. Introduce retail effects : 6 consume, 8 cubic, 90 instant, 97 pumps, 3 tick. Introduce 44 conditions. Addition of L2J channelization system, EffectInfo, EffectList - with vital reworks (using lock-based fine-grained concurrency, isLimitExceeded cleanup, effects flag recomputation use main updateEffectList loop,...). Addition of EffectExpirationTaskManager, a wall-clock used to handle timers of effects. Addition of //show affectscope to visualize the range effects of casted skills. Can be used to any target, as a toggle on/off, visualized by any GM (similar to //show move implementation). Add icon tag over data - make a use over SchemeBuffer. Known bugs fixed : All skills properly consume mana (notably stances). Ty to original reporter p0w3rf1y. Similar abnormal states visuals don't override each other anymore (exemple case of Silent Move and Stealth). Ty to original reporter Sim. All skill related data is normally fine - until L2OFF AdvExt is wrong. Topics related to values edition were dropped. If invalid, propose another data to reparse. Fix an issue with Touch of Life, disappearing from buff slot when you port (soe, teleport, GM recall). Issue related to Scroll of Recovery deleting buff because related skill was using BUFF SkillType is fixed. Ty to original reporter KejbL. Upon //skill remove all / set all, the expertise penalty is now properly set. Skills such as Switch/Trick properly use DERANGEMENT trait. Ty to original reporter YeahThePro. Skill, as container of effects, can now apply different skill powers per effect. As exemple, Blinding Blow "turning back" effect is 100%, but damage itself can fail independently. Ty to original reporter YeahThePro. With new affectscope/affectobject/targethandlers : Skills can't be used versus invalid targets (exemple : Tribunal towards Guards). Ty to original reporter shyr. Skills can be used upon CTRL (Vortex, Archer stun, Sand Bomb) without need of pvp flag. Ty to original reporters Denzel, ErHarD. Shuriel's Oracle properly heal the boss rather than themselves. Ty to original reporter Bandnentans. SoE and alike skills can be properly casted by mounted Players, since RideState implementation. Ty to original reporter cross. Skills without effect points don't trigger anymore any type of trigger skills (notably, Energy Stone and Infinity Rod exploit). Ty cross for report. Heroic skills (aswell as a big amount of item skills) casted from any sub/main class should also be set on reuse for all other sub/main classes. Ty Bandnentans for report. Effects don't refresh upon each other (sleep, root, fear, stun) - they are automatically being resisted. Ty to original reporter Kitsos. Effects aren't preventively dropped - if a Stun occurs, it isn't instantly stopped if another Stun is attempted. Ty to original reporter Kitsos. Madness properly temporary aggro a target, and stop to do so at end of the effect. Ty to original reporter shyr. Fear doesn't make the target coming to you, it instantly goes into fear effect. Ty to original reporter shyr. Cubics data and behavior is reparsed and formulas picked from L2OFF. Ty to original reporter p0w3rf1y. Skill casting animation isn't "bloated" anymore by delay. Ty to original reporter deekay. Clan Skill : Luck is now properly implemented. Fix an issue where when an effect disappears, the thinkCast of the same skill is triggered immediately (npcId 18243 using Fake Petrification when he was able to use it, making it invul). Ty to original reporter Denzel. Blows do specific sounds over critical. Ty to original reporter L2Pulse. PvP Ability – The player’s attack ability in Player vs. Player combat increases once they become a Noblesse. Ty YeahThePro for report. Items BodyPart is now an enum, cutting many switches to none (-200 lines over Inventory). Arrow type method helper is now part of CrystalType enum, cutting related uses. Add alias and icon tags - make a use of icon in existing "noicon" placeholders - notably //find item. Known bug fixed : Don't make Adena sellable. Ty DarthVader for report. Upon extractable item production, both sit/Formal Wear now work. Ty to original reporter sahar. All items are properly parsed, so issues such as "Skill 2188 [BEAST_FEED] isn't implemented". Ty to original reporter Jackass. Soul crystals properly aggro monsters upon usage. Ty to original reporter Denzel. Fishing Add parsed data related to fishing (places, monster, rod, distribution). Formulas are picked from L2OFF aswell. Hot Springs Lure is now available to buy. Stats calculation Introduce StatusBroadcastTaskManager, used to delay all types of broadcast (karma, skill cooltime, skilllist, weight, stats, abnormals...). Indirectly fix all types of stats update lacking, such as Bison Spirit Totem skills. Ty to original reporter FunnyMan. Speed is still sent at-will. Basic Creature stats values are now precomputed and recalculated when needed (buff, debuff, etc). There is no more calcStat when getting a basic value, which avoid calcStat over get"Stat" (getPdef, getPatk, etc). Rework StatusUpdate Avoid to use temporary maps, use an int array instead (less RAM footprint). Packet directly pick good stats, you don't have to register it anymore (less verbose). Stats are filtered before being sent. Status listener is moved from Creature to Attackable, avoiding to generate and manage thousands of useless Sets. Race issues Casting process now uses a CastHolder, used to retain current cast data. Should avoid the random NPEs. Movement process now uses MoveHolder. Fix race conditions (geopath queue could be accessed in 2 different spots, could end as a IOOBE). Solve race conditions over DesireQueue, using an ArrayList + lock. WorldObject (_objectId / _region as volatile, _isVisible as atomic, shorten the lock over setRegion, calling effects aside lock, inverse the order of refreshId ; we set a new id, then release old id). Spawn related Fixed SpawnManager leaks. Added atomic maker/multispawn synchronization with rollback. Secured spawn counters with CAS. Introduced atomic respawn-claiming. Simplified and hardened recycling logic in MultiSpawn. Add MultiSpawn#isDeleted to expose the deletion state. Deleted MultiSpawn instances can no longer respawn through the scheduler. Rework MakerSpawnScheduleTaskManager Move from ConcurrentLinkedQueue to PriorityBlockingQueue ; poll until test fails, avoiding to iterate the whole container. Emptiness check removal is down at the end, not the start - to avoid leftovers. Add Spawn _npc safeguards to avoid NPEs due to potential race conditions. Improve DamageZone, PoisonZone and InstantSkillZone concurrency safety and task lifecycle management. Make Intention immutables. Npc#onDecay now claims _isDecayed atomically ; concurrent decay paths (DecayTaskManager tick, deleteMe from scripts) can no longer run it twice and corrupt spawn accounting. TradeList#confirm locks both TradeLists in a deterministic order, so two concurrent confirms can no longer each grab their own lock and silently stall the trade. Product#decreaseCount uses a CAS loop, so racing buyers can no longer drive a limited stock negative. Refactor death state management - provide a single source of truth for death checks and reduce the risk of state desynchronization. Should fix "Body to Mind" sync issue, where skill kills you while it shouldn't (and alike). Zones Zones no longer live in WorldRegion. They are rasterized once into a coarse TILE_SIZE (32768u) grid owned by ZoneManager, decoupled from the visibility grid. A point lookup is now a single cell read instead of scanning the current region plus its 8 neighbours. Revalidation is split add-only / set-iterating: entering scans only the creature's own cell (ZoneManager.revalidate -> ZoneType.addCreature), no wasted removal tests; exiting iterates the creature's cached inside-zone set (Creature._insideZones), which also covers zones outside its current cell. ZoneType keeps a reverse index in sync via Creature.addZone/removeZone. EventTrigger visuals (castle slow traps, fences) become a real invisible WorldObject (EventTriggerObject) riding the object knownlist like retail's CEventController, replacing the ZoneType addKnownObject/removeKnownObject hooks; ZoneType.onReload() releases the emitter on zone reload. Clan-hall decorations move the same way, onto ClanHallManagerNpc.addKnownObject. Danger zones (Damage/Poison/InstantSkill/Swamp) split onEnter/onExit into isOn()-gated public methods plus unconditional doEnter/doExit, so a setOnOff toggle applies the effect correctly against the freshly flipped flag. SwampZone drops its prior func before re-adding it to avoid stacking the slow when a movement revalidate races a toggle. Admin //zone panel is paginated over the current cell's candidate zones. Bugfixes Fix PK killer being flagged as a PKer itself. Grouped territories (territory="a;b;c") are no longer merged into a single synthetic "grouped_XXX" Territory (random location was corrupted due to Z depth merge). Ty Bandnentans for report. Merge _runAiStep into _lifeTime in NpcAI (redundant) since _runAiStep was reset to 0 every 3 ticks, and this broke the % 2 follow cadence. Fix rooted monster who doesn't provide XP/SP upon death. Ty Denzel for report. Introduce a mechanism where hate value is cleared if monster is back to full health and aggro cleaned. Clean aggro and hate upon next spawn occurence. Npc#onDecay now cancels any pending scheduled despawn, preventing a stale timer from despawning a recycled, respawned Npc. Npc#deleteMe now aborts attack, cast and move, releasing the Npc from shared tasks (MoveTaskManager). Npc#deleteMe now severs the master/minion relationship both ways ; killing privates no longer breaks their respawn once the leader deleted itself (Stakato Nest 22108/22110 exploit). Ty Denzel for report. Handle EffectZoneTaskManager NPE gracefully. Improve rev. 411 "Allow blocked interaction to scan at higher range." bugfix ; now it properly reads bypasses. Ty Bandnentans for report/fix. Deny arrow key movement if casting/attacking. Ty Bandnentans for report. Multiple Pledge fixes : Fix 2 potential NPEs upon VillageMaster. Add Clan#getUnitName method. Fix 1 potential NPE upon Clan#getSubPledgeLeaderName. Avoid Clan#getOnlineMembers/getAllSubPledges arrays creation. Fix PledgeShowMemberListAll server crash (introduced in rev 311). Multiple summons/monster fixes : Fix "move to" summon action, broken since movement branch and boat method implementation. Fix "stop" summon action : Stop summon even when returning to owner. Stop attack stance. Fix "attack" summon action, it only tryToAttack, no tryToFollow. Implement proper behavior for attack follow, for both summons and regular Npcs (try to reach one offset surrounding target). Implement proper behavior for friendly follow (offset behind the target, follow task stops if target isn't owner and destination is reached). Remove tryToIdle upon Playable#stop (subject to StackOverflowException). Refresh the SP display upon studying skills. Fix a trade issue, where disconnected Player wouldn't clear trade window for partner. Fix Castle#regTimeOver behavior. Ty Sahar for report, LaRoja for fix. Fix PlayerCast NPE, occuring since Siege switch flip. Ty Sahar for fix. Fix a NPE over Npc#isInMyTerritory. Ty Sahar for fix. Dummy objectId deletion is now ignored. Ty TheDude for report. Fix INVALID_MACRO logic. Macros aren't limited to 255 characters server-side anymore. Ty MrThirtyOddSix for report. Fix and improve SetAggressiveTime logic. Ty Bandnentans for report. Add missing 32049 npcId HTM. Ty Bandnentans for report. Fix potential RequestRestartPoint NPE. Ty Bandnentans for report. Fix Baium Desires weight. Ty Bandnentans for report. Make RandomAnimationTaskManager more random - since all calls are gathered upon a similar wallclock, many Npc were sending SocialAction at the same time. Fix an UnsupportedOperationException over Olympiads, prior to c2c50fa5 commit. Bad, Bad LaRoja. Ty CUCU23 for report. Fix an issue over onEvtAgression (social aggro was running as a dead loop). Fix a NPE over RaidPrivateStandard. Ty Bandnentans for report. Adena is now charged after teleport appearing, not before. Ty Bandnentans for report. Organization World gets explicit coordinate helpers (worldToZoneGridX/Y, worldToRegionX/Y, worldToTileX/Y, regionIndexToWorldX/Y) and drops the expensive getRegion(ZoneType). Geometry gains AShape.getBounds() (Rectangle/Triangle/Polygon) for broad-phase grid insertion, and Polygon now computes an area-weighted centroid. Overload CabalType enum with maxTax. Drop ChangeRecorderListener - avoid generating arraylists/arrays upon item equip/unequip (manually tracking updates became useless since InventoryUpdateTaskManager / ItemInstanceTaskManager introduction). Delete TamedBeast / TamedBeastAI (unused). CastleDefendTeleporter is reworked to handle NPC AI params instead of hardcoded Locations arrays - drop related custom zones. Siegable#checkSides aswell as Siege#switchSides now handles Set<SiegeSide> instead of varargs - (O1) instead of (On) + EnumSet performance. Npc#isLordOwner is renamed isMyLord, Npc#getPledgeCastleState does only 1 SiegeSide lookup instead of 2. Few QuestVars addition (120+ entries). Replace TradeList#getAvailableItems peek use (should be only used for debugging process) TradeList for trade usages isn't nullified anymore, but clear(). Player#isTrading is implemented such as trade partner != null. "skill" package is now part of "model" package, L2Skill is renamed Skill to follow regular convention naming. Most inner packages are renamed. SkillTable is now known as SkillData and moved to "data.xml", since it only cares about XML content. DocumentBase/Item/Skill are heavily reworked, since they don't use <table> tag anymore. DocumentBase, as IXmlReader, now use a static DocumentBuilderFactory. Addition of few Inventory methods, such as #isInPaperdoll(Item) or #forEachPaperdollItem(Predicate, Consumer) - cutting complexity and improving performance. GamePacketHandler management is fully reworked to be handled as an EnumMap<GameState, HashMap<Integer, Supplier>>. Addition of PACKET_VIEWER_DEBUG Config, splitting the packet view logic from PACKET_HANDLER_DEBUG. Rework HexUtil to avoid to generate any sublayered Strings, we only rely on the initial StringBuilder. Rework few unoptimized methods/streams here and there (RaidPointManager#calculateRanking/getWinners, AdminFind#listDualbox, Location#getClosestPosition/getClosestPositionList, ...) Implement RequestSetCastleSiegeTime packet, added back RequestSkillCoolTime packet. Introduce STATIC_PACKET version of DummyPacket. FirstClassChange / SecondClassChange are reworked using record / QuestVars. 50+ SonarLint warnings. Rework GM Shop, delete 20% of buyLists, order Sets over //item set. Drop unused Desire#getTimestamp implementation. Implement a universal, lock-free, growable and highly concurrent ObjectPool. It is used to build, retain and borrow Objects of any type, leading to a complete crush of garbage for such objects at the cost of retained RAM. Implement TimeUtil, a utility class to help to get current hour and minute instead of using a Calendar. Implement ConcurrentSnapshotSet, a thread-safe Set tuned for read-mostly, allocation-free iteration (avoiding to compute .values()). Delete #forceWalkStance / #forceRunStance methods - use #setWalkOrRun instead. Don't send any packet if running state doesn't evolve. Npc follow system is cleaned up (variables are static and precalculated, follow slots is now a int[] instead of a List<Integer>). Add DEFAULT_FOLLOW_RANGE Config. Move fishing variables from Player to FishingStance. Multiple Object[0] > Object[]::new to save some array computation. Skill#getTargetList use a static new Creature[0] to avoid to generate pointless arrays, use an ArrayList rather than LinkedList. World class : #removeObjects allows Collection as parameter, #getRegion is sanitized, #deleteVisibleNpcSpawns is called over _objects, not the 45056 WorldRegion _objects lists, static methods are dropped. PlayerInfoTable : #addPlayer/#updatePlayerData are now processed by a single method, #mergePlayerData. Rework //enchant admincommand. It now uses a panel to properly visualize your target's items and current enchant level. New helper method Npc#notifyClanAttack Behavior edit WorldRegion size is reduced from 2048 to 1024 (retail value). Still no Z check. Monster don't have anymore LoS check for onSee, making them agressive through walls (retail behavior). Drop aswell the social LoS check. -
Discussion L2 Reborn, Who are they?
Tryskell replied to pannicattack's topic in General Discussion [English]
I only spoke with him few times, so no clue. Regarding projects, as any, you can fork sources you like, and do whatever you want with. That can include profesionnal paid development, or adding customs on your own. And for few, rename everything, add customs and say it's better than the original. Only Lucera is limited due to their plugin system and non-accessible sources (at least from what I know about that pack). With AI, the idea is now terrible (since now everything is reachable), but well. So yes, you can start with let's say aCis (which only focus on retailness/vanilla) and then build, let's say, a faction server, an event bound server... You can create new scripts, rework pathfind, edit classes or whatever you want. 99% of projects got their sources accessible. -
Discussion L2 Reborn, Who are they?
Tryskell replied to pannicattack's topic in General Discussion [English]
They indeed moved from aCis to Lucera back in 2020 - he was running under the name p0w3rf1y over my forums (he shared some fixes under that name). I had access to their timeline, got kicked and ignored overnight. From what I know they also struggled using Lucera, but I got no contact since then. -
Request Attack Speed problem with ultra status server [aCis]
Tryskell replied to Hash's question in Request Server Development Help [L2J]
You invent yourself a life - bad for you, one of the inner core dev, fernandopm, which worked hard over aCis quests from 2011 to 2016 is argentinian. I teached him back in time to work and make proper quests. My dev team comes from 10+ countries and I'm myself french. "Racist/nationalist" card ? Not working bro. Not sure why I should thank you to send me questions, and regarding bug reports, so far, I got none of yours in either discord, gitlab, or forums. I'm sorry if you feel "ignored", but that's more a psychanalyst you need to speak with if you put emotions towards someones' appreciation over a forum. I never ignore a bug report, and if so (like skills reports), it's because I got a bigger plan (skills refactor, in that case). In any case, I delivered cookies for the bug report/fix, even if it dated of months, with proper credits over changesets. "Victim card" ? Not really working, but ok, maybe you're "emotional". I barely make money out of aCis, for the spent time - simply selling my services, or even coding/administrating a minecraft/L2J server would make far more money. Breaking intentionally things would be stupid. If you don't understand I'm not the only one working on that pack, I can't help you. Also, the scale of edits is sometimes extreme - AI L2OFF ? 1800 files added. How do you want everything works in a single shot ? "Exploiting noobz for money" card ? Still not working, or I'm a terrible businessman. Meanwhile - you shadow advertise your project, L2JOne (since 2017 btw) - you should maybe start by the beginning saying you're a competitor and aCis is actually a spike in your foot. That also explains why you act like that. RusAcis got the exact same strategy, speaking bad of me, saying they got unique fixes (you speak about I break things, they break and recode things 4 times sometimes, btw), but successfully reselling latest revision with poorly executed stuff. "aCis is good, Tryskell is ok, but I solve all issues in extreme low time so I can piss over him" card ? Mmmmhhhh. Our conversation ends here if you want, I don't force ppl to speak with me if they don't want - hopefully, people would understand I'm not the arrogant one and the one who doesn't want to talk, or even collaborate. :). I understand you got your own project and got no will to improve aCis. NOTE : I'm extremely happy for your call of ExShowServerPrimitive with getValidGeoLocation, extremely impressive. Arrogant, no. Sarcastic ? Maybe. Good night everyone. -
Help Lag When Opening Inventory..
Tryskell replied to borinet's question in Request Server Development Help [L2J]
Probably due to poor choice of container handling items, you should test other types. If it's not due to container, it can be whatever method impacting inventory, such as sort/filter/integrity checks. Bad synchronization can also grealty impact performance. Another thing to check is about packet sending, you should use L2PHX to explore what is actually sent. -
Request Attack Speed problem with ultra status server [aCis]
Tryskell replied to Hash's question in Request Server Development Help [L2J]
I always welcome bug reports and never ban ppl - until proven leaker - not sure where the "arrogant" part comes from, I would like to know what exactly let you think that (quote me please, and not 12y old quotes as the other frog meme dude). I request bug reports to be properly detailed, otherwise it's a waste of time. Other than that, I don't see where I have been arrogant. I got proper discussions with many ppl, not sure why you wouldn't be one of them. I got 76 bug reports in my list (21 on forums, 55 on gitlab). I have a single bug report regarding lvl 4 clan quest, which has to be tested since it's not even clear about what is supposed to be broken. Seven Signs was never reworked and is basically L2J based (we got a rework branch to test/commit with reworked AIs). Geoengine got no specific issues (at my knowledge), pathfinding was reworked lately to be way more performant, and I still try to improve performance using some pool system. Movement was partially fixed in latest 410, and probably will get another rework soon (notably reverting to the task wallclock). "I" surely didn't spend 12y over geoengine - Hasha cared about geoengine during rev 334 / 354 / 390 / 395 and 397. It is solely his work, and always tagged as it. He was rewarded with money for his work, and almost a decade of aCis access. aCis is a community work, things tagged with Tryskell is my work, the leftover is someone else work. 22 ppl worked as developers in this project over 14 years. I would gladly accept whatever list of fixes/reports you have to share. You will even be rewarded (you probably know about cookie system), as anyone else sharing bug report or fixes. My main concerns lately is the lack of decent L2OFF IL data, it is my main bottleneck actually. If you're aware about decent L2OFF data to parse, let me know. Eventually reach me over Discord to speak, I don't want to continue the offtopic over that help request. -
Request Attack Speed problem with ultra status server [aCis]
Tryskell replied to Hash's question in Request Server Development Help [L2J]
Care to detail why ? L2JHellas probably got the same issue, it's inherent to L2J if you don't rework Player intentions (and solving it with a Config < 500 attack is stupid, if it works for attack it works for other types of desires), also last time I checked L2JHellas he was using my changesets to fix its own stuff (which is ok, copy-paste my knownlist system which is 10y old is fine, but don't say it will act different since it's literally the same sub-system). About Lucera code source isn't available so it's easy to say it's better, internally you got no clue what is happening and RU forks got the "feeling" to get everything, but everything is half done, everytime I put an eye on such sources (whatever based on l2ru, they only know how to copy-paste each other). In the other hand, you seem to use aCis since years (I think I see your name since a decade, and you still use it since you made this topic : Be a little more appreciative about the work done, it's not only mine but my community aswell, and if you find something, consider to report rather than getting such an idiotic behavior. I understand you're not forced to share any type of fixes, and than people tend to feel superior when they fix something than aCis didn't yet fix. The thing is, for each bug you found, I found and fixed 10x more than you. 409 is way beyond 382 in all possible ways, if you believe the versus good for you, but don't make ppl believe it's the case, because it's not. There's at least 400+ fixed issues (and that's counting 10 issues by revision, which is kinda low) and entire new systems (spawns, SCHs, pathfind, whole AI implemented, Desire system,...). -
Request Attack Speed problem with ultra status server [aCis]
Tryskell replied to Hash's question in Request Server Development Help [L2J]
You shouldn't use rev 382, not sure why everyone keep using that. I don't make changesets for fun, I don't make new revisions for nothing. Follow the revisions. -
Help GeoEngine Interlude ( aCis )
Tryskell replied to Williams's question in Request Server Development Help [L2J]
Your issue isn't related to geoengine at all (as always), rev 410 got improved water movement management. -
Offtopic, personal attacks, probably too old to use that much memes and what's YOUR actual contribution to L2J, in order I laugh aswell ? The main poster quotes my pack so I answer accordingly, while you advertise L2JFrozen in both of your posts - discontinued since 2014 (? 1132 rev), with none taking back the open source lead while anyone could. If you're somewhat affiliated to hopzone, you probably packed way more money than me. Packs don't make any type of money (barely 100e/month) and if you would follow me, you would know there are ways to handle it or even getting paid. Hope I was short enough, .
-
First, don't really follow the "main voice", moreover if you consider it an hobby. Simply do what you want, you got only one life so use it as you want. If you make it an hobby, it's exactly like piano, or velo - only practice makes you better. Secondly, how do you learn things ? It's actually a really important question, since some can simply be scholar, read books (theory) then practice ; and some simply can't read books. I'm the second type, I hated school, I find it boring - my knowledge in Java comes from try-and-fail. You improve your coding style every year or so, I can myself rewrite my own code (which I already considered top-notched) after a while. You always learn something new - even if Java barely evolves. L2J is a fun way to learn programming, it's a giant sandbox where you can edit anything, and I believe it should be taken as it. My own way of learning was as follow : Add existing customs, no matter what they are : the point is to know main classes used by L2J / customs. L2J is barely Java knowledge ; the true knowledge is to know WHAT to search in WHICH location (what I call, organization). You have to understand than EVERYTHING you think already exists, in a form on another, in the source code. A custom is only the association of the different mechanisms you found "here and there", glued together in a proper goal. Once you know main classes to edit, and the customs you added are compiling fine, the main point is to know WHAT exactly you DID. Try to understand WHY and WHERE you actually copied the code. Third point would be to MANIPULATE the customs you added in order to fit your wish. First edit little values, then logic conditions ; eventually add a new Config, or a new functionality to the custom. Fourth point would be to begin to craft your own ideas. Once again, EVERYTHING already exists, in a form or another. You want a cycled event ? You got Seven Signs main task as exemple. Npc ? Search any type of Npc and figure out what it does. Fifth point would be to understand Java - mostly containers (WHAT and WHERE to use them), variables types and main Java mechanisms (inheritance, static modifier, etc). You should also begin to cut your code into maintainable classes or methods. Java can actually run without optimization, but bigger your ideas, more optimized and well-thought it should be. It's direct saved time in the future, and you would thank yourself doing so. Main tips : ALWAYS use any type of versioning system - GIT or SVN. It allows to save your work, step by step and eventually revert back anytime you want if you terribly messed up. L2J is 80% organization knowledge, and 20% Java knowledge. Basically, if you know WHAT and WHERE to search, if you aren't dumb, it's easy to replicate and re-use things. Cherry on top is to use a already good coded pack to avoid copy-paste crap and get bad habits. Avoid any type of russian or brazilian packs, for exemple - their best ability is to leak someone's else code. Obviously you need some default sense of logic, but Java and programming in general help you to improve it. Finally, most of your questions could be solved joining related Discord (at least for aCis, I can't speak for others) - from the moment your question was correctly asked (and you seemed to search for the answer). My community (and myself) welcomes newbies, but got some issues with noobies. The simpliest is to try, fail and repeat until you succeed - it sounds stupid, but that's basically how life works. PS : about Java ressources, before ChatGPT, it was mostly about stackoverflow website, and site like Baeldung's one. With ChatGPT and alike, you generally double-cross AI output to avoid fucked up answers. Also, care about AI, they are often hallucinating really hard, even today. They can give you complete wrong answer, you tell them they are wrong, and they say "indeed, I suck, sorry - here's a new fucked up answer". You shouldn't 100% rely over AI answer, even if that can give sometimes legit answers, full code or just skeletons of ideas. PPS : I don't think there are reliable ressources regarding L2J itself, also most of the proposed code decays pretty fast if the source code is actually maintained (at least for aCis). Still, old coded customs for old aCis sources are actually a good beginner challenge to apply on latest source.
-
Source aCis - another CRAPPY interlude server
Tryskell replied to Tryskell's topic in Server Shares & Files [L2J]
Changeset 411 (3596) ZoneManager, Manors, Cursed Weapon, AI, Bugfixes, Organization [Fishing is currently malfunctioning. Wait next revisions for item/skills reparse + fish rework. ZoneManager - Ty Bandnentans for the backup job Rework ZoneManager, parsing L2OFF zones and associated parameters. Zones are now handled by name, and not anymore by custom, dynamic, id - making them easier to invoke, and allowing retail script to invoke them aswell. Zones are now extending Territory, and don't use anymore shapes (Circle/Rectangle/NPoly). Default shape is Polygon, cut into Triangles, through Territory. One more step down to delete "zone.form" package and ZoneForm class. All zone types are added as L2OFF. Custom zone types are deleted (ARTIFACT, SCRIPT,...) and good names are provided (Boss = NoRestart, NoLanding = NoFly, etc). NoRestart zones type (eg. previous Boss) behavior is now matching retail, and uses retail parameters aswell. It normally fixes the "instant teleport back to town when entering boss zones through few teleporters" issue. Implementation of onLogin/onLogout/onEnterRegion/onExitRegion methods types for zones. Implementation of EffectZoneTaskManager (a universal 666ms ticking task for all effect zones) and ZoneRevalidationTaskManager (a universal 666ms Creature revalidateZone task, avoiding multiple calls). Migrate zone related Stat Func application to zone onEnter/onExit, deleting ZoneManager#getZone calls upon stat calculation (run speed, hp/mp regen). Fix moving from same zone type to same zone type ; it doesn't consider to going out (hotfix). Should notably fix water re-entrance issue. Delete custom CastleTeleportZone, use retail Mass Teleporter HTMs and AI params. Manors - Ty LaRoja for fixes Fix an issue where turning in crops to the Manor Lord for materials would incorrectly add adena to the castle vault instead of deducting it, while seed sales are correctly handled. Fix an issue where the "Stop Purchase" button did not properly clear all crops. The last crop would remain set, and the manor wouldn't fully disable unless all adena was manually removed from the vault. Introduce //manor [change], allowing manually a manor cycle to run. Cursed Weapon CW passive skill is properly cleaned up. Ty Denzel for report. Don't store anymore Player reference on CursedWeapon. Store CursedWeapon reference upon Player, rather than itemId - for faster acquisition. Fix a NPE upon CursedWeapon#endOfLife. AI Fix aggressive monsters behavior. Ty Denzel for report, Bandnentans for fix. Fix EvilateA/B not respawning demons. Ty Bandnentans for report. Fix a conditional NPE over PartyLeaderHeretic2Aggressive AI. Fix Gordon script NPE. Ty Sahar for report. Move most DefaultNpc methods to Npc (npc isn't a parameter anymore, but the method caller). Overload NpcAi#addCastDesire with NpcSkillType parameter, since it was hard to read and error-prone. -> npc.getAI().addCastDesire(attacker, getNpcSkillByType(npc, NpcSkillType.DD_MAGIC), 1000000); -> npc.getAI().addCastDesire(attacker, NpcSkillType.DD_MAGIC, 1000000);. Implement NpcMaker#areaSetOnOff and Npc#areaSetOnOff. AIs can now activate and de-activate areas based on behavior (generally spawn and dying). Uncomment all scripts areas triggers. Implement Creature#isInThisTerritory, checking if a Creature is in a parametrized zone name. Uncomment all scripts areas triggers. Re-introduce back RandomAnimationTaskManager for Folks. Ty Bandnentans for report. getSeeRange() is now minimal Config.DEFAULT_SEE_RANGE - can't be lower - notably fix Gordon ON_SEE event. Implement NODE_ARRIVED EventHandler. Fix Gordon continuously running after attacking someone. Bugfixes Sanitize the username string in AuthLogin as it is in RequestAuthLogin. Ty artemis for fix. //set title is fixed (allows more than one token, and spaces between words). Add the possibility to clear title with no parameter. Add a missing sysMessage upon regular Pet's name set, remove one check processed by regex (and which had invalid sysMessage). Fix a "day 1" issue related to CH : if your clan was holding any CH, HP/MP regen was applied no matter the CH zone you were currently set. Remove run stance upon Npc#reduceCurrentHp, making Walker run when being hit. Ty Denzel for report. Fix an issue where Castle owners couldn't register for SCH. Fix the related SystemMessageId. Allow blocked interaction to scan at higher range. Organization Config : Introduce NAME_REGEX_PATTERN and TITLE_REGEX_PATTERN, delete ZONE_TOWN Config. Territory "Polygon to Triangle" algorithm is edited for an adapted version of Earcut (earcut4j without the hole handling), allowing monotone polygon and using Z-order curve index for faster spatial partitioning. Rewrite Triangle#intersects method to be more accurate. Drop grandboss_list SQL. The few "var" are now named "variable", prior to var keyword addition in Java. Update MariaDB connector from 3.1.4 to 3.5.3. Add //set pvp <number> and //set pk <number>. RoomInfo improvement - allocate and reuse a single List, rather than nullify it and create a new one. -
Source aCis - another CRAPPY interlude server
Tryskell replied to Tryskell's topic in Server Shares & Files [L2J]
There's many reasons why it would be more NO than YES : Using NCSoft assets is a death wish, they can lawyer any LU3/Unity if they wanted, since it's a plain steal of intellectual property. It's an hobby, as you said it, and it's not specially about money. Money is a way to filter idiots/resellers, nothing more. It's really about trying to replicate old content and optimize it which I find it fun. I just align with the basic idea than an emulator emulates. When you launch Project64 and SuperMario 64, you don't expect to get something more than 120 stars and Bowser boss in the end - which should have been L2J project to begin with Even if I played a lot with TESCS from Morrowind, back in time, it's not enough to handle current engines, and I'm too lazy to learn Unity/Unreal Engine. Moreover, it would mean buying assets. While doing it alone would be a fail, coupling to L2J / L2 community would still be shitty (since the majority is RU/BR) ; people is only about fame/glory/reselling shit on back of others. Opening to others, the project would be leaked day 1, rebranded and resold. MMO genre is basically dead, and that's not a reboot of any game (l2/wow classic :D) which will turn the tide. Regarding L2 or an remastered version of it, you can obviously blatantly copy-cat it (as Propnight did for Dead by daylight). All frenchies aren't supposed to do Expedition 33 :). -
Source aCis - another CRAPPY interlude server
Tryskell replied to Tryskell's topic in Server Shares & Files [L2J]
You still need an executor for delayed task, and regarding instant task, they are simply executed using regular virtual thread. Delayed tasks handling was anyway reverted back due to VT's pinning / strange behavior. If you got something better to propose, you can also contribute rather than "??". -
Source aCis - another CRAPPY interlude server
Tryskell replied to Tryskell's topic in Server Shares & Files [L2J]
Changeset 410 (3371) Makers, NpcAi / Desires, Cursed Weapon rework, Bugfixes, Admincommands, Movement, Organization Makers Fix ghost corpses. Introduce task manager for MultiSpawn spawn schedule. Introduce task managers for Npc respawn and despawn tasks. Add missing random treasurebox maker. NpcAi / Desires AttackableAttack > NpcAttack, allowing ATTACK_FINISHED event over Npc. Merge all reduceWeight from NpcAI operations. Don't broadcast MoveToPawn packet for cast hold scenarii. CH and CP managers use hold cast. Probably way more to add. Rework DesireQueue#addOrUpdate to avoid to generate a List. Drop _isInHitAnimation, avoid twice runAI calls upon attack end animation, save a ThreadPool. Implement Desire#isInvalid, used over the main loop to clean invalid Desires. All sided getDesires().removeIf are dropped, notably over AggroList/HateList. Cursed Weapon rework Fix potential task scheduling issues, reworking the whole layers. Reduce code by 1/3. Use L2OFF formulas/data for item drop rate, staging process. CW end duration now decreases when killing other Players. Bugfixes Revert schedule part from ThreadPool. Fix Pet inventory IU. Ty Denzel for the report. Fix Pet item timestamp reuse delay. Ty artemis for the fix. Disable automatic beastshots when his owner dies. Ty Root for the report. Player cannot craft while casting a skill, nor trade. Ty Root for the report. Add missing weight checks for player/summon pickup, and player craft. Ty Root for the report. Implement /graduatelist command, which displays a list of clan academy graduates for the past week. Ty RooT for the report. Fix PLAYING_FOR_LONG_TIME concept ; rest message is server related, not Player related. Ty RooT for the report. Player should stop movement when opening store. Fix Q351 occurences of itemId 4310 by 4407 one + slight fix. Fix Q365 missing memoState + poison skillId. Ty Root for the report. Fix Q417 Torai despawn over cond 11. Fix Q216 4 missing npcIds. Ty Karudin for the report. Fix the invalid comment of DeleteCharAfterDays Config. Fix NPC drop penalty level calculation. Ty Bandnentans for the report. Items are now dropped in a 30/45 donut shape around dropper. Ty Bandnentans for the report. PartyMatch fixes Don't show Party members or CW holder as available waiting members. You can't show overall List or join a PartyMatch room as CW holder. CW owner, upon acquisition, leave PartyMatch system. PartyMatch window is now automatically closed upon Player#removeMeFromPartyMatch. Remove Player from PartyMatch if Player and newly joined Party leader PartyMatch rooms differ. You can't join or be invited in a PartyMatch room if already partying/CW holding. Fix ShowLicence config when set to false. Ty artemis for the fix. Fix maximum number of macros. Ty artemis for the fix. Fix invalid IU update over //enchant. Ty artemis for the fix. Fix Castle Mass Gatekeeper HTMs. Ty kingNik0n for the fix. Drop _disabledItems implementation. Won't be used by next refactors. Ty artemis for the report. Fix loading handlers under debug. Ty Keku for the fix. Fix character_macroses table structure (commands = 12x32 chars minimum). Admincommands Merge all old spawn admincommands (//list_spawns, //spawn, //unspawnall, //respawnall, //delete) to //spawn and //unspawn (previously //delete). Generate //help. //unspawn works over all ASpawn. Merge all old fence admincommands (//spawnfence, //deletefence, //listfence) to //fence [add|remove], generate AdminFence. They now use proper Pagination. You can also teleport to it. Implementation of //show manor. Implementation of //set quest <id> [cond]. Related items must be hand-given. Implementation of //set henna [page] [add|remove symbolId]. The hennas are still bound to game logic (slots, canBeUsedBy). Movement - Ty LaRoja, Bandnentans Fix Boats IOOBE. Adapt getHeight logic from L2OFF. Introduce back WASD movement, handle boat board/unboard. Fix WATER/FLY movement logic. Avoid to pathfind diagonal cells with detected obstacle. Organization Addition of QuestVars class, holding all related variables from quests (itemIds, npcIds, questNames, sounds, etc), allowing to reduce length of each script while reusing variables. 100+ cloned variables were deleted. Refactor geometry package and Territory. Territory is now a unique 3D shape, holding any type of 2D geometry. Remove few useless Location#clone uses. Implementation of ItemContainer#forEachItem. Clean many unused FrequentSkill. The whole enum is questionable. Drop MathUtil#checkIfInRange, implement WorldObject#isInStrictRadius (involve collision of that WorldObject, and potential WorldObject parameter). WorldObject#isIn2DRadius parameter is now a Point2D, not a Location (since a Location inherits Point2D, Location are still usable as parameter). Rework Pagination#generatePages to handle page number > 1000. Use Pagination over Tryskell SchemeBuffer. Ty CUCU23 for the share. -
aCis is one of the oldest live pack after L2J (dec 2010) - it focuses solely on retailness and vanilla concept, over IL chronicle. It got a public and private gitlabs, because open source in L2J community is either toxic (resell/steal your work) or ungrateful. Still, a public rev is shared from time to time. Regarding junior acceptance, you can contribute based on public revision, earn "cookies" and when you reach a given amount you can be directly registered into the private gitlab (such as Bandnentans lately). You can review all ppl who worked over aCis here : https://acis.i-live.eu/index.php?action=hof I already had good experience with one argentinian, fernandopm, which worked under scripts rework back in 2011-2013. He came with 0 knowledge, but in the end could produce scripts. You can check sources under https://gitlab.com/Tryskell/acis_public and join the Discord, if interested.
-
Help Multi route walker npc HELP
Tryskell replied to Starfire868686's question in Request Server Development Help [L2J]
Verify if following is supposed to be the way to handle movement npc.getAI().setIntention(CtrlIntention.AI_INTENTION_MOVE_TO, new Location(point.getX(), point.getY(), point.getZ())); For me, it's not enough. And if it's the case, whole AI system is probably buggy. -
MMO definitively became a subgenre 15 years ago (basically since LoL introduction and raise, where MATCHES based games took the lead), and L2 itself is 20 years ago, with both deprecated mechanics and graphics. Numerous others games siphoned the playerbase meanwhile, and only RU/BR are still playing it. Even legit MMOs are/were dying, or got their playerbase near to 0. You won't have more ideas than others - if there was good ideas, it would be already leeched and reused. Also, even if you got good ideas, someone will simply leech it. There's nothing special or impossible to produce - except the initial idea. If you want a successful server, you actually shouldn't listen to players. They are your worst source of informations. Games like Dark Souls go totally versus the regular game development idea to easier games. People would follow your vision, from the moment the experience is here. Finally, a network of servers is one thing. The lack of players is another. I fear you actually work for nothing. Thinking too high/too big was/is/will never a good thing. Planified development with extensions/new features, sure. All in one with X servers on at start ? I doubt. Gl nonetheless.
-
Help L2JACIS , DRESS ME SYSTEM
Tryskell replied to TexasJunior's question in Request Server Development Help [L2J]
Verify if the used paperdoll id is the same when you manually set the item or when you call from skin system. Probably, not. -
Source aCis - another CRAPPY interlude server
Tryskell replied to Tryskell's topic in Server Shares & Files [L2J]
Hello, you can share from time to time and build cookies out of it. Once you got 100 cookies, you can either add 200€ or 100 cookies more to get access. Cookies are actually easy to get if you know how to code. Bounties are generally 100+ cookies reward, most fixes begin at 5 cookies (so 20 basic fixes is enough to make 100 cookies), any type of useful rework would be 30-50 cookies. You got "the luck" to come in a time where public version is almost identical to private version - since both versions are pretty similar for now, whatever you find as issue is actually existing and need to be fixed. After you are set on private, I don't request a full commitment ; I just need you to be here from time to time, report shits or sharing fixes. I just don't accept anymore 6/8/10/12 months ppl ghosts, saying and doing nothing. It's enough to get 4-5 average active ppl to get the shit done. Even if you suck at development, if you're a server admin, just sharing your players issues from your own forums is enough, for exemple - you just have to confirm it under PTS. It benefits you (you got free fixes), and it benefits me (I got reports). If you're good at development, well, it's normally easier for you to build cookies. Find some bottlenecks, rework it, profit. I don't even need you to know Lineage 2 - just how to make things performant would be already fine. If you don't have time, generally speaking, avoid to get involved with L2J - at all :D. I don't teach you anything saying programming is time-consuming. -
Source aCis - another CRAPPY interlude server
Tryskell replied to Tryskell's topic in Server Shares & Files [L2J]
Since last massive leak as explained as 07/09 (notably all development branches), I don't accept anymore financial newcomers that easily. People will have to contribute 100 cookies worth of contributions (bug reports/fixes) as a first step to be accepted as Donator. Free user can join after sharing over 200 cookies out of contributions, compared to 100 cookies before. You can say thanks to RusAcis, and notably his worthless leader, UnleashedForce. The size of users will continue to shrink if more leaks occur, until true helpers only will be left. New prices are as following : Joining price: 200€ + 100 cookies, or 200 cookies This fee has to be paid if you are joining aCis project. Next month, and all other months, you will have to donate only basic monthly donation. Monthly price: 10€ / 10 cookies This fee has to be paid every month. I won't accept any new join fee before the 100 cookies contribution. Your money will be instantly sent back. Also, in the same shape of idea, actual supporters/donators have to be active to stay in sources. It doesn't have to be a particular amount, you just have to share from time to time *anything*. I don't accept anymore silent ppl. Only useful people will be kept. -
Source aCis - another CRAPPY interlude server
Tryskell replied to Tryskell's topic in Server Shares & Files [L2J]
@Nightw0lfI kept the PSD, so yes. If more leaks occur, another sacrifice will occur, until being purged. @Trance Updates are pretty much constant, without counting under development content aswell. Revision is both a legacy and public event to get a review of what happened. @Williams Consider to share fixes - they benefit to everyone. -
Source aCis - another CRAPPY interlude server
Tryskell replied to Tryskell's topic in Server Shares & Files [L2J]
Hellllllo everyone ! Good news for some, bad news for others : aCis was, once again, leaked. It wouldn't be that problematic if it was old content, or even last revision 408 ; but this time, the whole content of under development/master branches was leaked out. One pack project is actually reselling NEXT revision content - before even being announced on aCis forums. The mole/leaker is still part of customers, and is still capable to leak data, at the date I speak about. Since I'm on a joyful mood, following events will occur : PIRATE PLANK MINIGAME Since we got restricted amount of donators (we're actually 13 on sources counting developers, over all), it's not extremely hard to actually delete the mole ; few ppl are actually matching the description, and a list can be easily generated based on time leak, potential country, contributions,... Which basically end with that representation : How will it work ? Everytime a new leak will occur, the following donator on the board will jump out of ship (and Talking Island waters are kinda cold). Since I'm not a monster and got principles, I will send back spent money for the non-granted months to the kicked dude. You won't be added back to the sources, anytime. The game ends when the mole is dropped out, or when I'm alone with my most loyal peeps around. CONTRIBUTION Leftover donators will have to contribute to the pack, being reports or code edits. Silent people won't be renewed anymore solely based on money. In the same order of idea, I will now request a minimum of 100 cookies contribution before accepting any new ppl on the gitlab - which anyway won't be hard to do if you're a minimum invested into the pack. If you understood the concept, free ppl can access gitlab sharing for 200 cookies contribution (100+100), and donators can access with 100 cookies + 200€. Regarding monthly contribution, there are no special numbers to achieve, stay active and you will stay. PUBLIC REVISION WILL STEP UP Next rev 409 will be exceptionally released as public revision. This revision got unique reworks, notably AI (L2OFF GF 1:1) and pathfind systems (up to 100 times faster, see #for-your-eyes-only over aCis discord for screens proofs). This revision got a lot of new content, and is far ahead of any other L2J pack in terms of AI fidelity with L2OFF - even the costier. ENDING WORD Thanks to all loyal people who have, will or currently support this pack - one of the very few to offer unique reworks. L2J community, as a whole, unfortunately never stepped up or shined by its cleverness or integrity - and is more preocuppied to add poorly written customs over quality leaked sources. The olympic medal goes to the poop-eater project owner applying straight leak, not even knowing what exactly is the changeset content (because yes, he doesn't know)... It's actually sad real people follow and pay for your work, but well, good job surfing on my own merits, I guess. Maybe one day you will go out of my shadows, and make your own path. That's the best I can wish you. So, my thanks to the few beacons of light in this mere pool of shadows. That's essentially for you (and for my own pleasure, ofc) I continue to work on this hobbyist project - started almost 14 years ago. ----------------------------------------------------- Changeset 409 (3301) SCH, Castles, IU, Npc movement, Drop rate rework, Bugfixes, Organization SCH - Ty Bandnentans for the good work All SCHs are normally fixed and working. CH decorations are reworked (they got their own XML, related Configs are dropped). Aden CHs got the Wyvern option, as stated in Patch Notes. Ty Denzel for report. CH features levels are corrected. Ty Denzel for report. Fix NPC clan crest issue. Castles Keep Castle next tax percent instead of resetting it to 0. Implementation of missing variables over Castle vault management. Ty KejbL for report. Remove doublons over Residence npcIds. Add npcId 35552 HTMs. Ty //Dev for report. Fix the tax income calculation. IU Add PAPERDOLL as potential location for IU (fix gm enchant, arrows consumption). Ty Roko91 for report. Fix weight calculation over login. Ty KejbL for report. Fix inventory update upon teleport (BSOE consumption). Ty //Dev for report, La Roja for fix. Fix inventory weight upon NPC buy. Npc movement MOVE_TO desire is cleansed over onEvtBlocked, avoiding to build infinite desire. Don't add MOVE_TO desire if given Location isn't reachable. FLEE doesn't call event upon onEvtBlocked (that event means something wrong happened, it's then impossible to trigger "regular" FLEE checks). Use Location#equals in few scripts. NpcAI#thinkFollow cleanup (-8 arrays, -24 List#get, -8 distance2D). Drop rate rework Main idea is to iterate each category X times, as if X monsters were killed. No % re-calculation or whatever, it's plain and simple. x50 means you got the calculated drops of 50 monsters. Avoid to generate IntIntHolder, manage the drop/spoil using a Map<Integer, Integer> instead, which also allow to merge similar itemIds. Categories % are tested no matter if drop or spoil, which allow levelMultiplier to be properly applied. Monster#dropItem is moved to Npc#dropItem, which allow any Npc to drop an item and avoid cast. "killer" is now part of all Npc#dropItem, meaning the item is properly item protected. Bugfixes Fix a ClassCastException over Quest#onClanAttacked. Fix a NegativeSizeArrayException upon client logging. Drop few logging errors related to invalid client attempts. Fix NPE over Q635. Fix PDAM calculation prior to rev 399 physical attack/skill split. Ty Yoska for report. Fix TradeList automatic title cleanup. Ty Denzel for report/fix. Add back missing Config.PARTY_XP_CUTOFF_METHOD "none" option. Ty CUCU23 for report/fix. Fix "upper roof" NPCs. Ty Bandnentans for fix. Fix Seven Signs individual stone contribution method. Ty //Dev for report. Fix Q372 reward table and drop rate. Ty //Dev for report. Q348 now distributes drops as party-random, despite the client info. Ty Denzel for report. Fix Benom teleports out. Hardcode other in/out Locations. Ty //Dev for report. Don't show Crystallize icon on inventory for Bounty Hunters (was an addition of CT1 GP1). Ty Bandnentans for report. Replace "weightPenalty" for "weightLimit" over skills XMLs. Ty //Dev for report/fix. When Heroes participate in a raid against Antharas, Valakas, and Baium, the boss monster has a chance to shout out the Hero characters’ names. Ty deekay for fix. Fix isRaidBoss implementation (a raidboss minion without master was considered raidboss). Fix Nurse Ants not healing the Queen Ant larva. Fix a SQLException over Olympiad server startup. Fix a SQLException over Clan member removal (since clan privs rework). Fix default 30169 npcId HTM. Ty Bandnentans for report. Fix Festival Guide missing rift option. Ty Denzel for report/semi-fix. Few dwarven/general manufacture fixes Add the missing max recipe integrity check. Upon shop fail, call back the manage window. Upon shop fail, don't cleanup the manufacture list. Upon shop success, cleanup the reverse manufacture list (successful general shop resets dwarven, successful dwarven shop resets general). Organization Rework HtmCache and CrestCache to use NIO. Move CrestType to enums. Implementation of WorldObject#forEachKnownType / WorldRegion#forEachType & forEachRegion - Avoid List overhead in numerous popular locations (notably broadcastPacket or region checks - which are done on every knownlist check). Rework SkillList packet, it is now handled as other packets. Delete Player#sendSkillList method. Delete DeadlockDetector class and related configs. Add GameServer#isServerCrash, based on LaRoja implementation - without uses, for now. Move IPv4Filter class to commons.network, delete net.sf.l2j.util package. Add DefaultSeeRange config, use the retail value 450 instead of 400. Add more records, ty LaRoja for the merge request. Delete unused dimensionalRift.xml. Few ItemContainer optimizations. Rename all ocurrences of adenas to Adena. SonarLint / UCDetector fixes : Drop MathUtil#limit, use Math#clamp instead (introduced in JDK21). Drop following unused Configs : FS_TIME_ENTRY, FS_TIME_END, RAID_MINION_RESPAWN_TIMER. Few public / protected / private edits. A lot more to come. switch cases are merged (introduced in JDK12). Boolean object is compared to Boolean.FALSE/TRUE, not directly tested as a boolean. String#replaceAll is replaced with String#replace when a regex pattern isn't involved. Generate few records : Sequence, TutorialEvent. Few class-based variables are now local. Use HashMap.newHashMap instead of new HashMap when the capacity is known (static final maps). HashMap.newHashMap avoids to set 0.75 capacity when it's not needed. LogRecord record is renamed LogRecord logRecord, due to record being now a keyword. Use proper Singleton pattern for instance type (notably listeners). Generate private constructors calling IllegalStateException for utility classes. -
Help How to expand Dwarven Manufacture shop slots?
Tryskell replied to Shadin's question in Request Server Development Help [L2J]
Once you open the dwarven manufacture, check for the max value allowed (20 on IL, no clue about others chronicles), or if you got a SystemMessageId on client side when you reach or go beyond that top value. Once you got either informations, make a search on source aiming "related files". If you find a 20 check in a quest, that wouldn't be a good guess, if you find it in Player class or ManufactureList class, it smells betetr. If there is no SystemMessageId being called on source but you got one integrity check on client, it means it's a client integrity check and it involves editing the client.

