Jump to content

Recommended Posts

Posted
Changeset 265

 

Misc

- fix GoldenRam issue.

- fix 2 CW issues (when player drops it).

- correct implementation of shift click, with use of inheritance.

- addition of item shift+click possibility for GMs, HTMlize static object shift+click for GMs.

- fix mercenary tickets pickup (probably, couldn't test as we're in wrong 7signs period), optimize item pickup check aswell.

- move caches section upper than clan section, in order to avoid clans crests being deleted at server startup (as crest cache isn't yet initialized).

 


 

Changeset 266

 

L2OFF droplist, misc

 

Droplist

- parse L2OFF IL droplist. Go from 26881 to 29767 drops. A big ty to dEvilKinG for that work.

- Core side goes from SQL to XML aswell.

 

Misc

- fix AQ minions paralyze/silence.

- DatapackRoot config is dropped. I don't find any point to put your DP in another folder, added to that the config is probably bad integrated.

- fix a possible NPE if a RB got suicide skill (happen only when sahar got events ideas).

Posted

So guys , does anybody using this pack ?

How its works,I know Tryskell is doing really hard,good job.

But I just wonder how it goes in live server,anybody can say enything about it ?

Posted

So guys , does anybody using this pack ?

How its works,I know Tryskell is doing really hard,good job.

But I just wonder how it goes in live server,anybody can say enything about it ?

it's pretty damn hard to read, right ?

http://acis.i-live.eu/index.php?board=39.0

Posted

So guys , does anybody using this pack ?

How its works,I know Tryskell is doing really hard,good job.

But I just wonder how it goes in live server,anybody can say enything about it ?

I will tell you how it works.

 

If you want to open a pvp server fast and earn some sweet money, then the best choice is frozen. It provides you with many customs, so it will save you from all the trouble of finding or writting custom features which is taking a lot of time.

 

That's what most people choose.

 

If you look for something more sophisticated, and you dont really care about fast money, and you have the patient to sit down and spend many hours doing many customisations in order to open a server, aCis is for you. Because, Tryskell's target is making things work like retail. But the truth is that people dont really care about retail stuff in interlude nowadays.

 

So, here are the servers which work with aCis:

http://acis.i-live.eu/index.php?board=39.0

 

And the servers which work with frozen:

http://www.l2jfrozen.com/index.php?board=14.0

Posted
So guys , does anybody using this pack ?

How its works,I know Tryskell is doing really hard,good job.

But I just wonder how it goes in live server,anybody can say enything about it ?

aCis is pretty good so far, using it for around a month on a live server, feel free to join http://l2rival.com ;)

Posted

beside the fact that you are reported for being offtopic.

 

u r wrong. fast money aren't made with a project that give u errors every 2 seconds and no working feature.

 

a good server from my pov require money to be invested in, no matter if you are doing it for some high quality machines or for ppl to code u stuff.

if you are too lazy to code or at least implement the codes into the server, then u should be ready to pay ppl for doing it. this, as much time as you are sure that you will get "fast money" after the server get live...

 

what you are talking about is opening a phantom server with QQ donations where all kids donate for 1 month and after u close it.

if u like to scam instead of opening a STABLE server, its up to you.

 

 

EDIT: and no, broken is better than aCis in NOTHING.

from my pov, broken is just a piece of bread that somebody throw it to a dog. is just a piece of junk good for nothing that only the lazy or mentally retarded ppl take it because they can't or they don't want to "work" (and this work ain't smth hard concerning us, but again, ppl expect a rar file which u 2click it and Voila a successfully easy money maker server) .

Posted

EDIT: and no, broken is better than aCis in NOTHING.

from my pov, broken is just a piece of bread that somebody throw it to a dog. is just a piece of junk good for nothing that only the lazy or mentally retarded ppl take it because they can't or they don't want to "work" (and this work ain't smth hard concerning us, but again, ppl expect a rar file which u 2click it and Voila a successfully easy money maker server) .

Pathetic.

Posted

Pathetic.

 

People who can code/apply a custom are not ready to open a server, if something occurs then they won't be able to fix it and they're server will fail. Sido said well, "if you are too lazy to code or at least implement the codes into the server, then u should be ready to pay ppl for doing it." This is a big truth.

 

Pauler: You encourage people making servers for money, you can see every day new servers opening, and every day closing. This is totally wrong. If you want money you need to spend either money or time. You need to work.

 

Anyway...

 

About aCis: Soon coming some "big bang" revs.

Posted
Changeset 268

 

Hasha quest engine cleanup.

 

Quest

- QuestEventType class to its own class.

- sorted all methods by groups (I suggest to create "//INFO: this is some info for text below" tag for the GS,DP pack projects).

- dropped "character_quest_global_data" table, since it only written in 2 quests (never read).

- removed "class_index" column in "character_quests" (never used).

- global quest variables methods unified for simpler usage.

- dropped some method concerning quest load/close (not used).

- added isRealQuest() method to separate scripts from live quest. That means every live quest needs to have _Id > 0.

- method changes :

- player handling filters player with desired quest state or condition :

- getRandomPartyMember() now includes a range check.

- checkPlayerCondition/State() last hit drops.

- getPartyMembers/State() full party last hit (can be used directly in FOR loop).

- getRandomPartyMember/State() party random.

- getClanLeaderQuestState() concerned range check set to npc, not player anymore.

- spawn, timer handling :

- cleaned up, unified usage for these methods.

- dropped methods with same name and different parameters (now you have one method and fill all necessary params in it -> clear usage).

 

State

- added in QuestState class.

- changed quest state storage type in "character_quests" table from String to Byte.

 

QuestState

- these methods created/modified

- item handling (usable during quest) :

- giveItems() simply remove specified amount of items.

- takeItems() simply remove specified amount of items.

- drop handling (usable for quest item drop) :

- in order to support rate of dropping quest items, added drop type parameter to these methods (see javadoc tag).

- dropItemsAlways() amount is affected by Config.QUEST_RATE_DROP.

- dropItems() amount/chance are affected by dropType param and Config.QUEST_RATE_DROP .

- reward hanling (usable for quest rewards) :

- rewardItems() rewards player with items (config applied).

- rewardExpAndSp() rewards player with exp, sp (config applied).

- removed spawn and timer methods from this class, everything is handled in Quest directly (it wasn't necessary to use QuestState for it).

 

General

- fixed onTalk bug, where player could start quest from another NPC, than registered

 

---- IMPORTANT ----

 

For existing database, use attached sql command :

 

USE acis;

SET NAMES cp1250;

 

DROP TABLE IF EXISTS character_quest_global_data;

 

ALTER TABLE character_quests DROP COLUMN class_index;

 

UPDATE character_quests SET value='1' WHERE var='<state>' AND value='Start';

UPDATE character_quests SET value='2' WHERE var='<state>' AND value='Started';

UPDATE character_quests SET value='3' WHERE var='<state>' AND value='Completed';

 

---- EDIT TRYSKELL ----

 

Those are additions to original Hasha's notes'n'patch.

 

- added a check for custom scripts to avoid the reload state when they load, as they all use the same id.

- fix giveItems() behavior (was completely buggy, Hasha...).

- add few final keywords (cause I like them).

- ArrayList initializations are changed for primitive List, it's a bad use to use an "evolved form", as it limits possibilities. In the same spirit we could use directly "HashMap = new HashMap" for maps, but we don't.

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