Jump to content

Recommended Posts

Posted

pack updated

 

- Clan Trader rework to script

- Restored lethal for Deadly Roulette

- Add Sieges Reward system

- Mercenary Captain rework to script

- Add to config [skillChanceShow] calculation of dagger skills

- Add Balance Character System

- FameManager rework to script

- Fixing Harvesting skill.

- AI cosmetic fixes.

* Added missing special camera in Antharas' death.

* Added missing special camera in Valakas' death.

* Fixed wrong battle start music for Queen Ant.

 

- Fixing Chain Heal behavior with different targets.

- Add Skills Checking System

- Rework some spawn squares to -> .xml [18_25, 19_10, 19_13, 19_14, 19_15]

- Fix SelMahumChefs AI

 

 

  • 2 weeks later...
Posted

- Item Mall rework [Full realize]

- Effect template loading cleanup.

- Debuffs without abnormal type should set in use and stats added to the character.

- Updating ExSendUIEvent packet to support NpcStringId as well.

- Updated/Unhardcoded all "ticks" values in skills.

- Fixing skills without any affect limit set, it should be unlimited in that case.

- Fixing minor typo in Valakas AI (Using wrong skill id for Valakas Regeneration

- Rework to java quest _421_LittleWingAdventures

- Fix for loading mitlisell 32487.xml

- All EffectHandlers transfer to core

- Add Safe Admin System

Posted

- Add Auto system of receiving Premium Account

- Skills rework:

* L2PcInstance:

* Removed isUsingDualWeapon() not used anymore.

* Removed custom check for Strider Siege Assault skill (new condition will be added soon).

* Fixed double system message when you use Soul Rage skill.

* Stats:

* Removed useless stats (LETHAL_RATE, AGGRESSION_VULN, AGGRESSION_PROF, CRIT_PROF, NONE_WPN_VULN, transformId).

* !SystemMessageId:

* Updated system message when you done damage on target.

* Added missing system message for Seven Signs quests (quests will be added soon).

* Formulas:

* Moved calcLethalHit in proper effect handler.

* Cleanup and fixes some methods.

* Fixing blow bonus when you hitting from the side of target.

* L2Character:

* Removed !CpConsume check and fixed skill Over the Body.

* L2CubicInstance:

* Added !CubicDrain method.

* Removed useless comment.

* Fixed Magical Critical Rate calculation.

* L2Skill:

* Removed staticDamage variable, now have own effect like retail.

* Removed canBeReflected variable, now have his proper checks.

* Cleanup and fixes some methods.

* L2SkillType:

* Deleted PDAM, MDAM, MANADAM, CPDAMPERCENT, DRAIN, DEATHLINK, FATAL, BLOW, STRSIEGEASSAULT and CHARGEDAM.

* L2EffectType:

* Added new effects DEATH_LINK, ENERGY_ATTACK, FATAL_BLOW, HP_DRAIN, LETHAL, MAGICAL_ATTACK, MAGICAL_ATTACK_MP, PHYSICAL_ATTACK, PHYSICAL_ATTACK_HP_LINK and STATIC_DAMAGE.

* Renamed !IncreaseCharges to !FocusEnergy and made effect retail like.

* Added new effect !FocusMaxEnergy.

* Effecthandlers

* Removed !StatusUpdate from some effect because is already updated by setCurrentHp, setCurrentMp and setCurrentCp methods.

 

'NOTE': New skill debugging will be added soon.

 

- Character templates rework.

- Support for XML character templates

- Support for table level-upgain data (HP, CP, MP and HP-, CP-, MP-regeneration) instead of calculated data

 

Move speed stat:

- rework of calculation (getBaseMoveSpeed() method for CharStat and children)

- calculation of walk speed from run speed was replaced by table values

- core support for pet's template "speed_on_ride" parameter

- penalties for level diff with mount and hungry mount was implemented

 

PDef, MDef stats:

- values for empty paperdol slots were unhardcoded

- P.Def. formula was updated

 

- Effect fix:

* When removing effects they shouldn't be set as not in use in effect list.

* Reported by: nBd

* Reviewed by: nBd

* Removing a couple of useless effect types.

* Making onActionTime() method non-abstract, it returns false by default.

 

- Cleaning up L2PcInstance:

* Moving all task like Runnable classes in own files.

* Handling door open request and summon player requests with addScript/getScript instead of having defined that variable all the time even when it wont be used.

* Reworked Teleport Bookmarks system:

* Using Map instead of List because we need an id and we can get it instead of looping all the time.

* Removed finalization of Location class to be able to extend it.

 

- Fixing minor typo within L2PcTemplate (Missing break in setUpgainValue method)

- Reworking Attack server packet:

* Fixed wrong logic causing to write more hits then it should (How the hell it was even working until now lol).

* Moved Hit class into own file.

* Sorted flag creation by mask id.

* Reworked a little hit creation.

* Added getter for soulshot - hasSoulshot().

* Added new method in L2GameServerPacket writeLoc(Location) it will write 3 32bit int values (x, y, z).

 

- Rework of targeting system:

* Moved all the packets that must be sent on new target inside setTarget method in L2PcInstance instead of all over the sources.

* Cleaned up setTarget method in L2PcInstance

* Preventing from sent status update when hp/mp/cp was not changed.

 

- Restoring setTarget for L2Tower (Accidently deleted in previous commit)

- Removing hardcoded skill implementations:

* Removed L2SkillSpawn.

* Removed L2SkillCreateItem.

* Removed L2SkillDecoy.

* Removed some skill types.

* Removed some effect types.

* Minor cleanup in L2DecoyInstance.

* Added support for effect parameters!

 

- Reworking traps:

* Removing hardcoded skill handler L2SkillTrap.

* L2PcInstance minor cleanup.

* Removed L2Trap.

* Reworked L2TrapInstance, now extends L2Npc not L2Character.

* Moved trap related runnable tasks to proper files and package.

* Reworked ConditionPlayerRangeFromNpc in a more retail like way.

* Allows list of NPC Ids.

* Allows expected value.

 

- Removing hardcoded skill handler L2SkillLearnSkill.

- Unhardcoded herbs check from calcEffectAbnormalTime, now using abnormalInstant boolean.

- Reworking effect's success calculation:

* Avoiding creation of many Env objects inside for statements.

* Avoiding some toArray operations.

* Using static empty array as parameter into some toArray operations since ArrayList only use parameter to get type, there is no need to instantiate a new array of proper size.

* Passive skills add effects to player in method getPassiveEffects(..) as active skills do in getEffects(..).

* If calcSuccess() is not overridden in datapack effect implementation, effect success will depend on Formulas.calcEffectSuccess(env) formula.

* Fixed bug where we calculated success with Formulas.calcEffectSuccess(..), then inside effect implementation as well.

* To make an effect land always, override calcSuccess() in effect implementation and return true.

* To use a specific success formula, override calcSuccess() in effect implementation and return the result of the formula.

 

- Unhardcoding 'Mercenary Manager' AI

- Fixing Signet skills, over time skills and toggle skills.

- Unhardcoding can be stolen condition for transformations and fishing potions.

- Fixes to tick related skills:

* Removed useless methods from L2Effect.

* Added getTimeLeft() method to properly calculate remaining time, according to effect's abnormal time and tick count.

* Changed ticks' default value to 0.

* Removed unused ConditionForceBuff.

* '''Pre-implemented instant effects!'''

* Retail like system messages for skill dispel, toggle abort and effect end!

* Cancel related skills must be verified in retail.

* Reworked "buff display" packets.

* AbnormalStatusUpdate

* PartySpelled.

* ExOlympiadSpelledInfo

* Improved remaining time calculation.

* Fixed consume in continuous skills (toggle/ "over time").

 

- Debuffs duration is now affected by resistances.

- Fixes to Player Can Escape condition implementation.

 

  • 2 weeks later...
Posted

- Changing a couple of Quest method to static.

- Reworked Buylist and npc reload data:

* !TradeController is now replaced by !BuyListData class.

* Moved data from SQL to XML

* Dropped custom sql tables (There will be a folder for custom buylists as there are for multisells and so)

* Reworked reload of npc skills and droplist.

 

* Reworked L2NpcTemplate:

* Replacing all the ArrayLists that was holding AI skills by type with one Map.

* Dropped not used holders of AI skill types.

* Added methods to reset skill list and drop list in order to reuse current holders when reloading.

 

- Removing resetSkills from L2NpcTemplate's constructor it was old approach that has changed and forget to clean it up

- Moved Env object creation outside the loop when checking skill conditions.

- Fixed really rare NPE that can occur when you kill a mob and your char is not online in 5 seconds when notification of killed mob is made.

- Reworking manufacture system:

* Changing data holder from List to Map with recipe id as key to prevent from duplicated records.

* Replaced Recipe class in RequestRecipeShopListSet with L2ManufactureItem.

* Prevented from creating manufacture map when is not needed.

 

- Fixed NPEs in PetFeedTask when player has no mount.

- Punishment system rework:

* Added ability to keep unlimited amount of punishments.

* Added ability to ban/jail by char, account and ip.

* Each ban now has issuer and can be limited for specified time.

 

- Missing abnormalTime in Skill "Disarm".

- Added missing npc that can open multisell 306893001

- Fix quest _409_PathToOracle missing give quest item.

- Typo fix Restore Dispel Skills system

- Nottingale script rework

 

Posted

please check, correct i did?

 

No. I dont see [text].

Plus this topic is locked because your link is dead.

If you wish to upload it somewhere else just gimme a pm to unlock it.

Until then will remain locked.

  • 2 weeks later...

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now



  • Posts

    • what pack you use  send me on discord for it
    • package custom.events.RandomZoneEvent; import java.io.File; import java.util.ArrayList; import java.util.List; import java.util.Random; import java.util.concurrent.ScheduledFuture; import org.w3c.dom.Document; import org.w3c.dom.Node; import org.l2jmobius.commons.threads.ThreadPool; import org.l2jmobius.commons.time.SchedulingPattern; import org.l2jmobius.commons.time.TimeUtil; import org.l2jmobius.commons.util.IXmlReader; import org.l2jmobius.gameserver.managers.ZoneManager; import org.l2jmobius.gameserver.model.StatSet; import org.l2jmobius.gameserver.model.actor.Creature; import org.l2jmobius.gameserver.model.actor.Npc; import org.l2jmobius.gameserver.model.actor.Player; import org.l2jmobius.gameserver.model.quest.Event; import org.l2jmobius.gameserver.model.zone.ZoneId; import org.l2jmobius.gameserver.model.zone.ZoneType; import org.l2jmobius.gameserver.model.zone.type.RandomZone; import org.l2jmobius.gameserver.util.Broadcast; /** * Random Zone Event - Activates one random PvP zone temporarily. No modifica la clase de la zona: usa flags PvP en runtime. * @author Juan */ public class RandomZoneEvent extends Event { private static final String CONFIG_FILE = "data/scripts/custom/events/RandomZoneEvent/config.xml"; private static int EVENT_DURATION_MINUTES = 15; private static boolean _isActive = false; private ScheduledFuture<?> _eventTask = null; private final List<ZoneType> _availableZones = new ArrayList<>(); private ZoneType _activeZone = null; public RandomZoneEvent() { loadConfig(); loadZones(); registerZoneListeners(); } /** * Registra listeners a TODAS LAS ZONAS random */ private void registerZoneListeners() { for (ZoneType zone : _availableZones) { addEnterZoneId(zone.getId()); addExitZoneId(zone.getId()); LOGGER.info("[RandomZoneEvent] Registered listener for zone: " + zone.getName()); } } private void loadConfig() { new IXmlReader() { @Override public void load() { parseDatapackFile(CONFIG_FILE); } @Override public void parseDocument(Document doc, File file) { forEach(doc, "event", eventNode -> { final StatSet att = new StatSet(parseAttributes(eventNode)); final String name = att.getString("name"); for (Node node = eventNode.getFirstChild(); node != null; node = node.getNextSibling()) { if ("schedule".equals(node.getNodeName())) { final StatSet attributes = new StatSet(parseAttributes(node)); final String pattern = attributes.getString("pattern"); final SchedulingPattern schedulingPattern = new SchedulingPattern(pattern); final StatSet params = new StatSet(); params.set("Name", name); params.set("SchedulingPattern", pattern); final long delay = schedulingPattern.getDelayToNextFromNow(); getTimers().addTimer("Schedule_" + name, params, delay + 5000, null, null); LOGGER.info("[RandomZoneEvent] Event " + name + " scheduled at " + TimeUtil.getDateTimeString(System.currentTimeMillis() + delay)); } } }); } }.load(); } private void loadZones() { for (ZoneType zone : ZoneManager.getInstance().getAllZones(RandomZone.class)) { if ((zone.getName() != null) && zone.getName().toLowerCase().startsWith("random_zone")) { _availableZones.add(zone); LOGGER.info("[RandomZoneEvent] Loaded zone: " + zone.getName() + " (id=" + zone.getId() + ")"); } } LOGGER.info("[RandomZoneEvent] Total random zones loaded: " + _availableZones.size()); } @Override public void onTimerEvent(String event, StatSet params, Npc npc, Player player) { if (event.startsWith("Schedule_")) { eventStart(null); final SchedulingPattern schedulingPattern = new SchedulingPattern(params.getString("SchedulingPattern")); final long delay = schedulingPattern.getDelayToNextFromNow(); getTimers().addTimer(event, params, delay + 5000, null, null); LOGGER.info("[RandomZoneEvent] Rescheduled for " + TimeUtil.getDateTimeString(System.currentTimeMillis() + delay)); } } @Override public boolean eventStart(Player eventMaker) { if (_isActive) { if (eventMaker != null) { eventMaker.sendMessage("RandomZoneEvent already active."); } return false; } if (_availableZones.isEmpty()) { Broadcast.toAllOnlinePlayers("[RandomZoneEvent] No zones configured."); return false; } _isActive = true; Broadcast.toAllOnlinePlayers("⚔️ Random Zone Event has started!"); _eventTask = ThreadPool.schedule(this::activateRandomZone, 5_000); return true; } private void activateRandomZone() { _activeZone = _availableZones.get(new Random().nextInt(_availableZones.size())); _activeZone.setEnabled(true); Broadcast.toAllOnlinePlayers("🔥 Random Zone Event: " + _activeZone.getName() + " is now PvP for " + EVENT_DURATION_MINUTES + " minutes!"); _eventTask = ThreadPool.schedule(this::eventStop, EVENT_DURATION_MINUTES * 60 * 1000L); } @Override public boolean eventStop() { if (!_isActive) { return false; } _isActive = false; if (_eventTask != null) { _eventTask.cancel(true); _eventTask = null; } if (_activeZone != null) { _activeZone.setEnabled(false); Broadcast.toAllOnlinePlayers("🏁 Random Zone Event ended. " + _activeZone.getName() + " is back to normal."); _activeZone = null; } else { Broadcast.toAllOnlinePlayers("🏁 Random Zone Event ended."); } return true; } @Override public void onEnterZone(Creature creature, ZoneType zone) { if (!_isActive || (_activeZone == null)) { return; } if ((zone == _activeZone) && creature.isPlayable()) { creature.setInsideZone(ZoneId.PVP, true); if (creature.isPlayer()) { creature.sendMessage("Esta zona está en modo PvP temporalmente."); } } } @Override public void onExitZone(Creature creature, ZoneType zone) { if (!_isActive || (_activeZone == null)) { return; } if ((zone == _activeZone) && creature.isPlayable()) { creature.setInsideZone(ZoneId.PVP, false); if (creature.isPlayer()) { creature.sendMessage("Abandonaste la zona PvP temporal."); } } } @Override public boolean eventBypass(Player player, String bypass) { return true; } @Override public String onEvent(String event, Npc npc, Player player) { return super.onEvent(event, npc, player); } @Override public String onFirstTalk(Npc npc, Player player) { return null; } public static void main(String[] args) { new RandomZoneEvent(); } } i have this but its not working
    • ZonePvPSpawnBossRadio=0 ZonePvPSpawnBossBarakiel=0 at the Customs.ini in L2Server folder. Im prety sure this is it because i had the same problem with you in cruma 1 floor for example and i couldn't fix it but i fixed it finally by changing these 2 lines
    • Siege Reward Start PM Msg Rework Config root BossDieAnnounce and BossDieSound in the L24Team.properties and Config.java files for global raid boss death notifications and sounds. Adds a new reward_list table to the DB.sql file to track castle rewards. Improves character creation logic for thread safety and validation. Adds extensive state checks to the RequestEnchantItem method to prevent enchantments during inappropriate player states. Fixed auto-attack animation bug (there was no attack animation, only damage animation) Clean Code Other fixes I forgot to list! Java 14 Fixed issue where deleting a character would prevent it from leaving the screen or being removed, or even after a delete CD (it would only exit when re-logging in or creating a new character). Added Premium System from the other C2 project (Needs testing and improvement). Added the "Improved" Community Board (incomplete).
  • Topics

×
×
  • Create New...

AdBlock Extension Detected!

Our website is made possible by displaying online advertisements to our members.

Please disable AdBlock browser extension first, to be able to use our community.

I've Disabled AdBlock