Jump to content

Tryskell

Legendary Member
  • Posts

    5,343
  • Credits

  • Joined

  • Last visited

  • Days Won

    52
  • Feedback

    0%

Everything posted by Tryskell

  1. About diff patches specifically, there's probably multiple hundreds of tutorials for Java, simply search on google. About L2J in general, you can either search on MxC, on aCis forums (I explain some concepts), and probably on youtube. Unfortunately, I doubt someone would make such tutorials, I invite you to test to apply a lighter diff patch with less lines first if you feel unable to handle such a diff patch. It's really about copy and pasting things, reading which file and around which place to copy-paste. Not even what I could call "developement".
  2. It's not a script, but a .diff patch. A script in L2J world is basically an AI script, editing behaviors using listeners (onKill, onTalk, etc), mostly used by quests, grandbosses, etc. If you got the good revision, you can normally automatically apply a .diff patch but virtually, it almost never happens due to numerous facts (you either edited sources, you use another revision, etc) so you have to edit your sources at hand. On the diff patch, "index" is the file to edit. Lines to add got a +, lines to remove got a -. To help you, you got also line numbers under @@ numbers @@. If you don't see any +/-, it means that line already existed on the file, at the time of the patch. So you can easily copy paste it to find it and find back on an easy way where other modified lines can be added/removed.
  3. You have to store the Npc reference on the Quest instance level, with a static Npc _npc when it spawns. addSpawn normally return the created Npc, simply store the instance on the famous _npc variable for further usage. _npc has to be cleaned in same time you delete the instance, otherwise it's possible to refer to a non-existing instance. There are few exemples in quests with such variables, I'm sure some quests in aCis got some "_pilgrim" Npc references saved for further usage. Q024/Q025 FoD quest serie also got a chamberlain ghost which walk to a point and is deleted once he did his track. PS : you also have to check if such _npc reference is already filled to avoid to duplicate Npc AND to lose references (meaning a _npc.deleteMe() wouldn't work anymore). A null check is enough. If the solution of a unique static instance isn't ok for you, you have to track all references for every single Player ; you also have to delete the reference once Player logout otherwise it fills the Map for nothing.
  4. The russian text can be translated as "can't open shared object file: No such file or directory", so I suppose it's about crest or whatever image which can't be found. ImagesCache.resizeImage(ImagesCache.java:128) is what throw the error.
  5. If L2JFrozen got the related task, then simply make it manually following the diff patch. + means it's added, - removed. You would probably be interested by my other exploit fix, regarding Enterworld and ENTERING implementation.
  6. If you do what request people, you will end in a black hole - because people are different, and will request different things. Therefore, you simply can't provide everything to everyone. The best is to fully assume/embrace the type of server you decide to open, and to develop it to get its own identity.
  7. addExpAndSp is the way to go, simply check //set level (previously //setlevel) admincommand.
  8. Changeset 393 (1913) L2DatabaseFactory, CreatureStatus, tryToX, Weight system, Organization, Bugfixes L2DatabaseFactory - Rename it ConnectionPool. Move it to commons.concurrent, use static instead of Singleton. - Use MariaDbPoolDataSource instead of C3P0. Delete related JARs. - Indirectly fix "SQLNonTransientConnectionException: (conn=13) unexpected end of stream, read 0 bytes from 4" after inactivity time. - Update MariaDb connector to 2.6.1. CreatureStatus - Merge CreatureStatus and CreatureStat. Use of generics, add Javadoc. Use internal variables instead of getter/setter. - Delete all getters used as shortcuts from Creature/Player. - Rename setCurrentX to setX (right for CP, MP, HP). - Move Cp related methods to PlayerStatus. - Delete all redundant StatusUpdate calls. Basically, whatever which was calling setX()- X being HP, MP, CP. - AddMp and reduceMp are slightly edited to avoid to call setMp if value isn't worthy to be edited. Implement CreatureStatus#addHp based on those. - Implement setMaxHp/HpMp/CPHpMp. Those are optmized to call StatusUpdate only once. tryToX - Intentions use direct methods to avoid to "guess" parameters type. It also shortcuts writting style by a lot. - Delete SkillUseHolder container/use, which was generating a lot of objects. - Players previous stance isn't hidden anymore by ACTIVE triggering IDLE. When a Player calls ACTIVE or IDLE, it goes directly to IDLE. Weight system - Ty Hasha - Addition of PlayerStatus#isOverbuden (80% volume check), with uses. - Fixed pet weight calculation. AltWeightLimit applied to pets too. - Fixing AltWeightLimit config being double parameter read as int. - Fix potential bug, when removing weight penalty functions from Pet. - Fix multiple item extraction to first check available slot and than create items. - Update ConditionPlayerWeight to use weight penalty, updated XMLs. - Added missing WEIGHT_PENALTY stat, updated XMLs to AdvExt values. - Dropped Creature#_isOverloaded, as only Player and Pet may get overloaded. Overload solved by checking speed == 0, as L2OFF. - Added missing system message in MoveBackwardsToLocation. - Fixed Pet not getting effect of weight penalty. Organization - Rename commons.concurrent > commons.pool. - Delete unused effect EffectCombatPointHealOverTime and EffectType.COMBAT_POINT_HEAL_OVER_TIME. - CreatureAttack#doAttack is correctly overriden in Attackable and Player cases. - Rename StatusType to ServerType. Rename related methods / variables. - Generate StatusType out of StatusUpdate packet. - Move _exp, _sp, _level to PlayableStatus. - Delete isChampion() concept. The whole custom is dropped. - Rework Formulas#calcCrit and calcMCrit. - Some Blow/Pdam cleanup. - Delete isBehindTarget() / isInFrontOfTarget(). The concept is wrong, since effected isn't specially actual getTarget(). - Move isBehind / isInFrontOf / isFacing from Creature to SpawnLocation. Any WorldObject can now call it. - Rework targetLost to handle more checks, rename it isTargetLost. - Siege#announceToPlayers is renamed Siege#announce and allow SiegeSide as parameters (making it possible to call it independently for ATTACKER and DEFENDER, or both). - Delete Player#isInSiege concept, since it's wrongly used (used as a mixed "isSiegeParticipant" and "isInSiegeZone" checks). - GMs are now affected by death penalty and by castle foreigner teleport. Bugfixes - 3200-3299.xml is partially fixed (reviewed 15+ item skills). - Add missing check regarding Baium Angelic Vortex. Ty Kitsos. - Fix SiegeGuard NPE during attack. Ty henrique for report. - Fix "Need to press ctrl to attack siege guards". Ty henrique for report. - Fix SiegeGuards respawn upon end of a Castle siege. Ty henrique for report. - Fix Guards can't be debuffed at any case. Ty shyr for report. - Add back interact possibility with FriendlyMonster. Ty shyr for report. - Fix Gatekeeper CANNOT_PORT_VILLAGE_IN_SIEGE condition. Ty Denzel for report. - Add missing Broadcasting Towers spawns. Ty henrique. - Introduce INTERACT for Summons. It basically is a MOVE_TO with shift possibility. - Fix a ClassCastException over PlayerAI interaction (boards use). - Fix a ClassCastException over RequestActionUse (throne use). Ty henrique for fix/report. - Summons react to shift command over attack. - Summons return back to owner if isTargetLost is triggered (interact, cast, attack). - Summons owner follow status is now broken while sent to attack/interact. - Add missing SUMMON_GAVE_DAMAGE_S1. Correct override. Ty StinkyMadness. - Summons can't be sent to attack dead targets. Ty StinkyMadness. - Fix "When you're running and click on npc to speak with it, your char only stops on client, but continues to run on server". Ty SlugeR for report. - Fix "Trying to cast skill + moving teleports you on client". Ty SlugeR for report. - Fix proper uses of tryToSit/tryToStand. You shouldn't "tryTo" when using a skill, but directly execute it. - Fix pick up animation timer. Ty SlugeR. - Add retail C5 implementation of Charm of Courage. - Fis death on siege properly decreases xp by 1/4. - Add proper check messages for siege summons attempts. - Fix siege process timer, based on AdvExt.
  9. %% is a L2J tag used to say that content will be edited by core side. You can use L2PHX / a debug message to see exactly what is sent. If your bypass stays as %command%, then it's normal nothing happens. %command% is supposed to be replaced.
  10. "mysql generate backup" on Google. And yes, it is kinda stupid to save during runtime since some data is stored only when server shutdowns, or when player shutdowns. If you save in middle of nowhere, then data integrity will be different than when server is currently closing. Properly close your server, then use mysqldump. It's the typical sort of code which "sounds cool", but is at best pointless, at worst dangerous (since you can save things in middle of something, and got no guarantee the actual engine properly ended). An "ok" move would be to generate it only when server actually shutdowned, after all server operations ended.
  11. It doesn't work like that. Official L2 updates are cut in "chronicles". I invite you to read any wikipedia speaking about L2 to get the full list, it updates every 6 months or so lately. Each chronicle (tagged by a name) got its own developement team, L2J stopped around H5, mainly because they couldn't follow the pace of retail chronicles. Numerous teams took other chronicles, being older or newer than H5. For that, they use initial L2j work and work on their own version of the emulator ; it's called a "fork". Many of those teams simply dissapear after a while, and their sources are also generally lost. For instance, I'm the project leader of a project aCis, which is based on L2J IL branch, and which is dedicated to Interlude chronicle (which last 6 months, around 2007). Other teams work on other chronicles, and some popular chronicles can have numerous teams working on it. You also have L2OFF, which are basically leaked retail files (basically, what uses NCSoft as game server) and since leakers couldn't leak all chronicles, some people created an "extender" system, to emulate a given chronicle. For instance, L2OFF got leaked C1, C4 and GF, so any L2OFF files you will find about C2/C3/C5/IL/... is an extender. About which chronicle does what, you basically need to know the game to understand. The biggest steps, in the past is the move from IL to Kamael, and the introduction of GoD. Since then, it becames a fuckfest and I personally stopped to interest into it. Then, some years ago, and seeing private servers were still strong and seeing they could milk some players based on nostalgia, retail also launched "Classic" version. So you got actually 2 versions of L2 retail, and an illimited amount of forks trying to emulate chronicles, being latest and older.
  12. Copy-paste a .bat from another pack, most of them are extremely similar. If it doesn't work, check the .bat from your loginserver. .sh are for linux. 1min on google could end you here : https://www.thewindowsclub.com/how-to-run-sh-or-shell-script-file-in-windows-10/
  13. Basically, on every player death (Player#doDie), you check, in the order : if he's in a party (Player#isInParty / getParty() != null) ; if true, you interrogate your zone system (ZoneManager#getAllZones(ZoneType.class) to see if you're registered on such zone if yes (!= null), you iterate getParty() members - since you checked before, you know it's already not null - and you count who is dead and who isn't. For whatever condition you decide (I would say, party size() - 1 as dead people) you Player#teleportTo(TeleportType.TOWN). As I said higher, you also have to check Party#disband and Party#removePartyMember I traditionally don't share any code, only logic. If someone wants to code it for you for free, up to him :).
  14. No, if he comes back it's simply because marketplace rules should be edited. Only already trusted people (aka people who contributed in one way or another in other sections of forums - share things, answer in dev help section,...) should be able to open a marketplace topic. That would drastically lower the amount of people doing crap. Also, if you got scammers, it means you got scammable people. Sorry to say that, but to get a predator, you need a prey. It's a really simple Darwin concept - people aren't educated enough. At a point, you can't blame Outlook if you click on a phishing mail. That's also up to USERS to don't command anything from untrusted people.
  15. Dimensional Rift already got that. See occurences of killRift(). On aCis I introduced Party#wipedOut for easy check. Some tips : If you don't have rooms to teleport in, you have to run it eventless, using a task (ThreadPool / ThreadPoolManager). You have to track party disband.
  16. Changeset 392 (1847) ExServerPrimitive, GeoEngine, Movement, Friend/BlockList, Enchant / Paperdoll ExServerPrimitive - Color is now defined only via Color, rather than int. Extra methods are dropped. - Added addSquare, addRectangle methods for easier draw concepts. - Updated AdminGeoEngine "can_see" command graphics. GeoEngine - ty Hasha. - Updated canSee, canMove and getValidLocation methods. - Now using exact line of sight/movement and checks all cells in the way, rather than using LoS/LoM approximation using Bresenham's line algorithm (see https://en.wikipedia.org/wiki/Bresenham's_line_algorithm ). - Computation more heavy per each iteration. Performs approx 25% more iterations per path (25% more geodata cells evaluated). Still worth the accuracy. - Fix LoM check giving false positive result, when target is on "balcony". - Added first iteration of canFloat check, can be used for both, flying and swimming. Though the movement itself should handle all special cases (like water level, when swimming from bottom up). - Added new admin command "geo_fly" to check LoF. - Misc. Movement - Rework moveToPawn / moveToLocation concept, for both Creatures and Players. - Introduce ValidatePosition debug (part of //show move) to visually see server<>client desync. Rework ValidatePosition. - Fix most of server<>client desync. - Fix dead/teleporting/disconnected over target follow. Friend/BlockList systems rework - ty RooT. - Add missing packets and make a correct use of it. - Delete //silence && //tradeoff admincommands. - Move isBlockingAll concept to BlockList. Basic BlockList cleanup. - Add missing blocklist check over clan invitation. Enchant / Paperdoll rework - ty RooT. - Drop all admin commands from AdminEnchant except "admin_enchant". - Drop enchant.htm, use quickbox instead. - //enchant doesn't work if the same enchant is already set. - Introduce Paperdoll enum. Rework most methods to use it. - Big cleanup of Inventory. Move some overriden behaviors back to PcInventory. Add Javadoc. Move ChangeRecorder out and rename it ChangeRecorderListener. Organization - Delete unused configs : INVENTORY_MAXIMUM_QUEST_ITEMS / DEBUG_PATH / LOG_LOGIN_CONTROLLER. - Delete 2 unused ItemInstance variables. - Few unused methods deletion over SendablePacket. - Move ItemLocation and ItemState to gameserver.enums.items. - XCast/XMove/XAttack now use generics, _creature is renamed _actor and now uses proper instance type which avoid cast. Bugfixes - Introduce back NPC castle guards. It will be kept like this until SpawnManager introduction. - Fix NPE related to castle guards / mercenaries Castle attribution. - Fix ControlTower castle guards spawns cleanup over doDie. - Fix NumberOutOfRange exception over hero fight loading. Ty BIGMANF. - Fix GMViewWarehouseWithdrawList packet. Ty StinkyMadness. - Fix Blacksmith Rooney spawn time. Ty vampir.
  17. Changeset 392 (1847) is up ! ExServerPrimitive, GeoEngine, Movement, Friend/BlockList, Enchant / Paperdoll

  18. XMLDocumentFactory was deleted on rev 382, it has been replaced by IXmlReader a while back (377). Simply check classes using IXmlReader, it produces far lesser code.
  19. Whatever pack you gonna pay, and no matter how hard you gonna pay, get ready to get a lot of reports without a dedicated developer and a big bag of money.
  20. Probably forgot to broadcast NpcInfo when walk/run state toggle occurs. I believe server-side movement is correctly calculated, packet MoveToLocation is correctly sent - but walk speed occurs client side, while it should be running state.
  21. Generally due to connection leak, due to badly written custom code. Use the try-with-resources statement whenever you open a connection. https://docs.oracle.com/javase/tutorial/essential/exceptions/tryResourceClose.html The other possibility being, you try to save all Players variables (custom variables) in a single loop, making the connection pool dry instantly. In that case, write your own version of storeMe which use only one connection and addBatch/executeBatch.
  22. TESO got a decent Achievement system, you should maybe check it. It goes from collectables, to end one serie of quests, to finish a region, to kill monsters/bosses, defeat a dungeon... And even "funny" ones. Achievements unblock dye to set on your character armor, aswell as titles. Which is in same time pointless and fashion. Basically, an Achievement system shouldn't reward a monetary currency. At least, that's not what TESO did. https://elderscrolls.fandom.com/wiki/Achievements_(Online)
  23. That's normally the role of players - in case of server admins - or buyers/customers/supporters - in case of projects - to handle such thing. The problem is, we speak about people, and people are easy to be fooled/scammed/corrupted. Also, many of them don't have a "common sense". Regarding hopzone / topzone, I don't even understand why someone never made a public, friendly, player-oriented top. Like pack projects, I guess, that's many speak and very little action.
  24. There's a lot of stickied topics to read on aCis forums / Discord if you're interested by aCis.
×
×
  • Create New...