Jump to content

Recommended Posts

Posted

Rough Draft

Code/Source not for share, don't ask, just want feedback.

 

Vampirism Theory

 

Description: Players killing vampiric monsters have a chance to receive a 1 hour debuff in which, if they don't get an antidote in time are turned into a vampire state, receiving a passive skill "Vampirism". You can obtain the antidote to cure the debuff from grocery, but to cure Vampirism passive you must do a quest. Having this passive skill increases players stats at night time, but decreases players stats during day time. While player has "Vampirism" passive skill, killing any non-vampire player triggers a buff (that has 5 levels max, 5th level obtainable only from item.) and for each non-vampire kill the player gets, the buff will increase by 1 level, killing another vampire will not increase or decrease buff level, also if you do not make a kill before the buff time(20minutes) runs out, the buff will be decreased by 1 level. If you die, the buff completely resets (disappears).

 

A normal player (player without "Vampirism" passive) is rewarded by killing a vampire with a "Vampiric Dust", this item can be used to craft "Vampirism Steriod".

 

"Vampirism Steriod" is a consumable that can be used by Vampires to increase their buff level to 5, increases stats further.

 

The 5th buff level transforms you into the form of 'Eilhalder von Hellmann' keeping your actual weapon visible.

 

 

Specifics:

 

Chance to obtain debuff - 5-10%

 

Vampirism Buff Levels:(Rough Example)

 

Level 1 - Pdef +4%, Mdef +6%, Patk +2%, Matk +1%, Dark Resistance +5

Level 2 - Pdef +5%, Mdef +7%, Patk +3%, Matk +2%, Dark Resistance +15, Speed +2

Level 3 - Pdef +7%, Mdef +9%, Patk +5%, Matk +4%, Dark Resistance +30, Speed +4

Level 4 - Pdef +8%, Mdef +10%, Patk +6%, Matk +5%, Dark Resistance +40, Speed +7

Level 5 - Pdef +10%, Mdef +12%, Patk +8%, Matk +7%, Dark Resistance +50, Speed +10

 

 

PASSIVE Buff Levels:

During Night: Level 1 - Pdef +4%, Mdef +6%, Patk +2%, Matk +1%, Dark Resistance +5

During Day: Level 1 - Pdef -4%, Mdef -6%, Patk -2%, Matk -1%, Dark Resistance -5

 

Vampirism Steriod Craft Requirements:(Rough Example)

Vampiric Dust - x5

Maestro Holder - x1

Synthetic Cokes - x100

 

Posted

Ιncredible..

I wanna see a video,when its ready.

if you gonna sell it,for sure you gonna earn good $$.

What's that?i didn't understand.

open your eyes and read it carefully.
Posted

Ιncredible..

I wanna see a video,when its ready.

if you gonna sell it,for sure you gonna earn good $$.open your eyes and read it carefully.

oh...its -beep-ing awesome,if you sell it i want it!
Posted

Ιncredible..

I wanna see a video,when its ready.

if you gonna sell it,for sure you gonna earn good $$.open your eyes and read it carefully.

+1

Posted

so...

 

Only half of this is AI?

You just make so that mobs at random chance (or specific mobs with more specific prerequisites) cast a debuff on death at the attacker/caster, the debuff is not cleansable.

 

All the conditions are in XML. Comparable to DE Night passive which gives 3 accuracy at night time.

SO

+ effects when night time

if else

- effects.

 

Potion which removes or overbuffs the debuff (again XML).

 

Quest seems like the only work.

 

 

People would pay for it if they were clueless.

 

And whats the point of this? Death has negligible penalties. I just die to a mob and thats it. Why do a quest or get potions?

 

Sounds silly.

Sorry.

Posted

If you use this as a major feature, people will whine after 3 days.

 

 

It's insanely small mod metagameplay wise.

 

 

You need to tie into other small mods/systems that ...give some twists to gameplay.

Else people will go "OMFG AWESOME" to your face but get bored like fuck after 3 days.

Posted

Thanks guys, this is a rough draft, there will surely be changes as tests are made.. our dev team is working hard on this :D also thinking of adding a similar system but with 'Ghosts' or some other race, of course giving different stats and different passive effects.

 

If you have suggestions of more things to add, please share them.

Posted

Imo, add aura on the 'vampire' player or setTitle("Vampire"); plus color and stuff so the 'normal players' know when they are dealing with a vampire or not.

Plus, its kinda good idea and unique if u manage to make it work. (i'd never sell it tho) GL :)

Posted

Yeah that's been discussed, we were thinking of just name color being dark red (different from karma so its not confusing)

 

Or..we could just make them transformed all the time(when vampire state is active), something like male and female (click links)

and of course showing the players actual weapon, and actual skill animations being used in transformation state, so people know what class they are fighting.

 

Or both.

 

Posted

Making it clear AGAIN, its not for sale/share, so there's point in debating if its worth anything sandpants.

I didn't mean to aggravate you. It wasn't directed to you either. I was pointing out that others seem very impressed and excited to the point where they express interest in buying it, it's kinda funny.

 

 

Good luck though.

Guest
This topic is now closed to further replies.


  • 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
  • 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