From 8f2b25839507ca54a803377cbb1800a7db38037d Mon Sep 17 00:00:00 2001 From: MobiusDev <8391001+MobiusDevelopment@users.noreply.github.com> Date: Tue, 12 Dec 2017 00:02:16 +0000 Subject: [PATCH] Custom Ghost Walking buff when TvT member resurrects. --- .../scripts/custom/events/TeamVsTeam/TvT.java | 30 ++++++++++++-- .../data/stats/skills/custom/tvt_event.xml | 39 +++++++++++++++++++ .../dist/game/data/xsd/skills.xsd | 5 ++- .../scripts/custom/events/TeamVsTeam/TvT.java | 30 ++++++++++++-- .../data/stats/skills/custom/tvt_event.xml | 39 +++++++++++++++++++ .../dist/game/data/xsd/skills.xsd | 5 ++- .../scripts/custom/events/TeamVsTeam/TvT.java | 30 ++++++++++++-- .../data/stats/skills/custom/tvt_event.xml | 39 +++++++++++++++++++ .../dist/game/data/xsd/skills.xsd | 5 ++- .../scripts/custom/events/TeamVsTeam/TvT.java | 30 ++++++++++++-- .../data/stats/skills/custom/tvt_event.xml | 39 +++++++++++++++++++ .../dist/game/data/xsd/skills.xsd | 5 ++- .../scripts/custom/events/TeamVsTeam/TvT.java | 30 ++++++++++++-- .../data/stats/skills/custom/tvt_event.xml | 39 +++++++++++++++++++ .../dist/game/data/xsd/skills.xsd | 4 +- 15 files changed, 339 insertions(+), 30 deletions(-) create mode 100644 L2J_Mobius_1.0_Ertheia/dist/game/data/stats/skills/custom/tvt_event.xml create mode 100644 L2J_Mobius_2.5_Underground/dist/game/data/stats/skills/custom/tvt_event.xml create mode 100644 L2J_Mobius_3.0_Helios/dist/game/data/stats/skills/custom/tvt_event.xml create mode 100644 L2J_Mobius_4.0_GrandCrusade/dist/game/data/stats/skills/custom/tvt_event.xml create mode 100644 L2J_Mobius_Classic_2.0_Saviors/dist/game/data/stats/skills/custom/tvt_event.xml diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/scripts/custom/events/TeamVsTeam/TvT.java b/L2J_Mobius_1.0_Ertheia/dist/game/data/scripts/custom/events/TeamVsTeam/TvT.java index 5dd31705f3..6775b4c867 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/scripts/custom/events/TeamVsTeam/TvT.java +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/scripts/custom/events/TeamVsTeam/TvT.java @@ -67,6 +67,7 @@ public class TvT extends Event // NPC private static final int MANAGER = 70010; // Skills + private static final SkillHolder GHOST_WALKING = new SkillHolder(100000, 1); // Custom Ghost Walking private static final SkillHolder KNIGHT = new SkillHolder(15648, 1); // Knight's Harmony (Adventurer) private static final SkillHolder WARRIOR = new SkillHolder(15649, 1); // Warrior's Harmony (Adventurer) private static final SkillHolder WIZARD = new SkillHolder(15650, 1); // Wizard's Harmony (Adventurer) @@ -466,11 +467,19 @@ public class TvT extends Event { player.setIsPendingRevive(true); player.teleToLocation(BLUE_SPAWN_LOC, false, PVP_WORLD); + // Make player invulnerable for 30 seconds. + GHOST_WALKING.getSkill().applyEffects(player, player); + // Reset existing activity timers. + resetActivityTimers(player); // In case player died in peace zone. } else if (RED_TEAM.contains(player)) { player.setIsPendingRevive(true); player.teleToLocation(RED_SPAWN_LOC, false, PVP_WORLD); + // Make player invulnerable for 30 seconds. + GHOST_WALKING.getSkill().applyEffects(player, player); + // Reset existing activity timers. + resetActivityTimers(player); // In case player died in peace zone. } } break; @@ -570,8 +579,7 @@ public class TvT extends Event ((((zone == BLUE_PEACE_ZONE) && (character.getTeam() == Team.BLUE)) || // ((zone == RED_PEACE_ZONE) && (character.getTeam() == Team.RED))))) { - startQuestTimer("KickPlayer" + character.getObjectId(), PVP_WORLD.getDoor(BLUE_DOOR_ID).isOpen() ? INACTIVITY_TIME * 60000 : (INACTIVITY_TIME * 60000) + (WAIT_TIME * 60000), null, character.getActingPlayer()); - startQuestTimer("KickPlayerWarning" + character.getObjectId(), PVP_WORLD.getDoor(BLUE_DOOR_ID).isOpen() ? (INACTIVITY_TIME / 2) * 60000 : ((INACTIVITY_TIME / 2) * 60000) + (WAIT_TIME * 60000), null, character.getActingPlayer()); + resetActivityTimers(character.getActingPlayer()); } } return null; @@ -582,8 +590,14 @@ public class TvT extends Event { if (character.isPlayer() && character.getActingPlayer().isOnCustomEvent()) { - cancelQuestTimer("KickPlayer" + character.getObjectId(), null, character.getActingPlayer()); - cancelQuestTimer("KickPlayerWarning" + character.getObjectId(), null, character.getActingPlayer()); + final L2PcInstance player = character.getActingPlayer(); + cancelQuestTimer("KickPlayer" + character.getObjectId(), null, player); + cancelQuestTimer("KickPlayerWarning" + character.getObjectId(), null, player); + // Removed invulnerability shield. + if (player.isAffectedBySkill(GHOST_WALKING)) + { + player.getEffectList().stopSkillEffects(true, GHOST_WALKING.getSkill()); + } } return super.onExitZone(character, zone); } @@ -718,6 +732,14 @@ public class TvT extends Event } } + private void resetActivityTimers(L2PcInstance player) + { + cancelQuestTimer("KickPlayer" + player.getObjectId(), null, player); + cancelQuestTimer("KickPlayerWarning" + player.getObjectId(), null, player); + startQuestTimer("KickPlayer" + player.getObjectId(), PVP_WORLD.getDoor(BLUE_DOOR_ID).isOpen() ? INACTIVITY_TIME * 60000 : (INACTIVITY_TIME * 60000) + (WAIT_TIME * 60000), null, player); + startQuestTimer("KickPlayerWarning" + player.getObjectId(), PVP_WORLD.getDoor(BLUE_DOOR_ID).isOpen() ? (INACTIVITY_TIME / 2) * 60000 : ((INACTIVITY_TIME / 2) * 60000) + (WAIT_TIME * 60000), null, player); + } + private void manageForfeit() { cancelQuestTimer("10", null, null); diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/stats/skills/custom/tvt_event.xml b/L2J_Mobius_1.0_Ertheia/dist/game/data/stats/skills/custom/tvt_event.xml new file mode 100644 index 0000000000..24eaac1529 --- /dev/null +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/stats/skills/custom/tvt_event.xml @@ -0,0 +1,39 @@ + + + + 1 + 30 + NONE + RO_GHOST_REFLECT + icon.skill01418 + A2 + true + 500 + 500 + 600000 + true + 867 + 1 + NONE;STRIDER;WYVERN;WOLF + NONE + SELF + SINGLE + + + 33 + DIFF + + + BLOCK_HP + + + BLOCK_MP + + + + -100 + ALL + + + + \ No newline at end of file diff --git a/L2J_Mobius_1.0_Ertheia/dist/game/data/xsd/skills.xsd b/L2J_Mobius_1.0_Ertheia/dist/game/data/xsd/skills.xsd index d5d1f719bb..1b23dc184e 100644 --- a/L2J_Mobius_1.0_Ertheia/dist/game/data/xsd/skills.xsd +++ b/L2J_Mobius_1.0_Ertheia/dist/game/data/xsd/skills.xsd @@ -1987,7 +1987,6 @@ - @@ -2023,6 +2022,7 @@ + @@ -2755,12 +2755,13 @@ - + + diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/scripts/custom/events/TeamVsTeam/TvT.java b/L2J_Mobius_2.5_Underground/dist/game/data/scripts/custom/events/TeamVsTeam/TvT.java index 5dd31705f3..6775b4c867 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/scripts/custom/events/TeamVsTeam/TvT.java +++ b/L2J_Mobius_2.5_Underground/dist/game/data/scripts/custom/events/TeamVsTeam/TvT.java @@ -67,6 +67,7 @@ public class TvT extends Event // NPC private static final int MANAGER = 70010; // Skills + private static final SkillHolder GHOST_WALKING = new SkillHolder(100000, 1); // Custom Ghost Walking private static final SkillHolder KNIGHT = new SkillHolder(15648, 1); // Knight's Harmony (Adventurer) private static final SkillHolder WARRIOR = new SkillHolder(15649, 1); // Warrior's Harmony (Adventurer) private static final SkillHolder WIZARD = new SkillHolder(15650, 1); // Wizard's Harmony (Adventurer) @@ -466,11 +467,19 @@ public class TvT extends Event { player.setIsPendingRevive(true); player.teleToLocation(BLUE_SPAWN_LOC, false, PVP_WORLD); + // Make player invulnerable for 30 seconds. + GHOST_WALKING.getSkill().applyEffects(player, player); + // Reset existing activity timers. + resetActivityTimers(player); // In case player died in peace zone. } else if (RED_TEAM.contains(player)) { player.setIsPendingRevive(true); player.teleToLocation(RED_SPAWN_LOC, false, PVP_WORLD); + // Make player invulnerable for 30 seconds. + GHOST_WALKING.getSkill().applyEffects(player, player); + // Reset existing activity timers. + resetActivityTimers(player); // In case player died in peace zone. } } break; @@ -570,8 +579,7 @@ public class TvT extends Event ((((zone == BLUE_PEACE_ZONE) && (character.getTeam() == Team.BLUE)) || // ((zone == RED_PEACE_ZONE) && (character.getTeam() == Team.RED))))) { - startQuestTimer("KickPlayer" + character.getObjectId(), PVP_WORLD.getDoor(BLUE_DOOR_ID).isOpen() ? INACTIVITY_TIME * 60000 : (INACTIVITY_TIME * 60000) + (WAIT_TIME * 60000), null, character.getActingPlayer()); - startQuestTimer("KickPlayerWarning" + character.getObjectId(), PVP_WORLD.getDoor(BLUE_DOOR_ID).isOpen() ? (INACTIVITY_TIME / 2) * 60000 : ((INACTIVITY_TIME / 2) * 60000) + (WAIT_TIME * 60000), null, character.getActingPlayer()); + resetActivityTimers(character.getActingPlayer()); } } return null; @@ -582,8 +590,14 @@ public class TvT extends Event { if (character.isPlayer() && character.getActingPlayer().isOnCustomEvent()) { - cancelQuestTimer("KickPlayer" + character.getObjectId(), null, character.getActingPlayer()); - cancelQuestTimer("KickPlayerWarning" + character.getObjectId(), null, character.getActingPlayer()); + final L2PcInstance player = character.getActingPlayer(); + cancelQuestTimer("KickPlayer" + character.getObjectId(), null, player); + cancelQuestTimer("KickPlayerWarning" + character.getObjectId(), null, player); + // Removed invulnerability shield. + if (player.isAffectedBySkill(GHOST_WALKING)) + { + player.getEffectList().stopSkillEffects(true, GHOST_WALKING.getSkill()); + } } return super.onExitZone(character, zone); } @@ -718,6 +732,14 @@ public class TvT extends Event } } + private void resetActivityTimers(L2PcInstance player) + { + cancelQuestTimer("KickPlayer" + player.getObjectId(), null, player); + cancelQuestTimer("KickPlayerWarning" + player.getObjectId(), null, player); + startQuestTimer("KickPlayer" + player.getObjectId(), PVP_WORLD.getDoor(BLUE_DOOR_ID).isOpen() ? INACTIVITY_TIME * 60000 : (INACTIVITY_TIME * 60000) + (WAIT_TIME * 60000), null, player); + startQuestTimer("KickPlayerWarning" + player.getObjectId(), PVP_WORLD.getDoor(BLUE_DOOR_ID).isOpen() ? (INACTIVITY_TIME / 2) * 60000 : ((INACTIVITY_TIME / 2) * 60000) + (WAIT_TIME * 60000), null, player); + } + private void manageForfeit() { cancelQuestTimer("10", null, null); diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/stats/skills/custom/tvt_event.xml b/L2J_Mobius_2.5_Underground/dist/game/data/stats/skills/custom/tvt_event.xml new file mode 100644 index 0000000000..24eaac1529 --- /dev/null +++ b/L2J_Mobius_2.5_Underground/dist/game/data/stats/skills/custom/tvt_event.xml @@ -0,0 +1,39 @@ + + + + 1 + 30 + NONE + RO_GHOST_REFLECT + icon.skill01418 + A2 + true + 500 + 500 + 600000 + true + 867 + 1 + NONE;STRIDER;WYVERN;WOLF + NONE + SELF + SINGLE + + + 33 + DIFF + + + BLOCK_HP + + + BLOCK_MP + + + + -100 + ALL + + + + \ No newline at end of file diff --git a/L2J_Mobius_2.5_Underground/dist/game/data/xsd/skills.xsd b/L2J_Mobius_2.5_Underground/dist/game/data/xsd/skills.xsd index bc0a2fd426..c70b99f334 100644 --- a/L2J_Mobius_2.5_Underground/dist/game/data/xsd/skills.xsd +++ b/L2J_Mobius_2.5_Underground/dist/game/data/xsd/skills.xsd @@ -2075,7 +2075,6 @@ - @@ -2111,6 +2110,7 @@ + @@ -2878,12 +2878,13 @@ - + + diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/scripts/custom/events/TeamVsTeam/TvT.java b/L2J_Mobius_3.0_Helios/dist/game/data/scripts/custom/events/TeamVsTeam/TvT.java index 5dd31705f3..6775b4c867 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/scripts/custom/events/TeamVsTeam/TvT.java +++ b/L2J_Mobius_3.0_Helios/dist/game/data/scripts/custom/events/TeamVsTeam/TvT.java @@ -67,6 +67,7 @@ public class TvT extends Event // NPC private static final int MANAGER = 70010; // Skills + private static final SkillHolder GHOST_WALKING = new SkillHolder(100000, 1); // Custom Ghost Walking private static final SkillHolder KNIGHT = new SkillHolder(15648, 1); // Knight's Harmony (Adventurer) private static final SkillHolder WARRIOR = new SkillHolder(15649, 1); // Warrior's Harmony (Adventurer) private static final SkillHolder WIZARD = new SkillHolder(15650, 1); // Wizard's Harmony (Adventurer) @@ -466,11 +467,19 @@ public class TvT extends Event { player.setIsPendingRevive(true); player.teleToLocation(BLUE_SPAWN_LOC, false, PVP_WORLD); + // Make player invulnerable for 30 seconds. + GHOST_WALKING.getSkill().applyEffects(player, player); + // Reset existing activity timers. + resetActivityTimers(player); // In case player died in peace zone. } else if (RED_TEAM.contains(player)) { player.setIsPendingRevive(true); player.teleToLocation(RED_SPAWN_LOC, false, PVP_WORLD); + // Make player invulnerable for 30 seconds. + GHOST_WALKING.getSkill().applyEffects(player, player); + // Reset existing activity timers. + resetActivityTimers(player); // In case player died in peace zone. } } break; @@ -570,8 +579,7 @@ public class TvT extends Event ((((zone == BLUE_PEACE_ZONE) && (character.getTeam() == Team.BLUE)) || // ((zone == RED_PEACE_ZONE) && (character.getTeam() == Team.RED))))) { - startQuestTimer("KickPlayer" + character.getObjectId(), PVP_WORLD.getDoor(BLUE_DOOR_ID).isOpen() ? INACTIVITY_TIME * 60000 : (INACTIVITY_TIME * 60000) + (WAIT_TIME * 60000), null, character.getActingPlayer()); - startQuestTimer("KickPlayerWarning" + character.getObjectId(), PVP_WORLD.getDoor(BLUE_DOOR_ID).isOpen() ? (INACTIVITY_TIME / 2) * 60000 : ((INACTIVITY_TIME / 2) * 60000) + (WAIT_TIME * 60000), null, character.getActingPlayer()); + resetActivityTimers(character.getActingPlayer()); } } return null; @@ -582,8 +590,14 @@ public class TvT extends Event { if (character.isPlayer() && character.getActingPlayer().isOnCustomEvent()) { - cancelQuestTimer("KickPlayer" + character.getObjectId(), null, character.getActingPlayer()); - cancelQuestTimer("KickPlayerWarning" + character.getObjectId(), null, character.getActingPlayer()); + final L2PcInstance player = character.getActingPlayer(); + cancelQuestTimer("KickPlayer" + character.getObjectId(), null, player); + cancelQuestTimer("KickPlayerWarning" + character.getObjectId(), null, player); + // Removed invulnerability shield. + if (player.isAffectedBySkill(GHOST_WALKING)) + { + player.getEffectList().stopSkillEffects(true, GHOST_WALKING.getSkill()); + } } return super.onExitZone(character, zone); } @@ -718,6 +732,14 @@ public class TvT extends Event } } + private void resetActivityTimers(L2PcInstance player) + { + cancelQuestTimer("KickPlayer" + player.getObjectId(), null, player); + cancelQuestTimer("KickPlayerWarning" + player.getObjectId(), null, player); + startQuestTimer("KickPlayer" + player.getObjectId(), PVP_WORLD.getDoor(BLUE_DOOR_ID).isOpen() ? INACTIVITY_TIME * 60000 : (INACTIVITY_TIME * 60000) + (WAIT_TIME * 60000), null, player); + startQuestTimer("KickPlayerWarning" + player.getObjectId(), PVP_WORLD.getDoor(BLUE_DOOR_ID).isOpen() ? (INACTIVITY_TIME / 2) * 60000 : ((INACTIVITY_TIME / 2) * 60000) + (WAIT_TIME * 60000), null, player); + } + private void manageForfeit() { cancelQuestTimer("10", null, null); diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/stats/skills/custom/tvt_event.xml b/L2J_Mobius_3.0_Helios/dist/game/data/stats/skills/custom/tvt_event.xml new file mode 100644 index 0000000000..24eaac1529 --- /dev/null +++ b/L2J_Mobius_3.0_Helios/dist/game/data/stats/skills/custom/tvt_event.xml @@ -0,0 +1,39 @@ + + + + 1 + 30 + NONE + RO_GHOST_REFLECT + icon.skill01418 + A2 + true + 500 + 500 + 600000 + true + 867 + 1 + NONE;STRIDER;WYVERN;WOLF + NONE + SELF + SINGLE + + + 33 + DIFF + + + BLOCK_HP + + + BLOCK_MP + + + + -100 + ALL + + + + \ No newline at end of file diff --git a/L2J_Mobius_3.0_Helios/dist/game/data/xsd/skills.xsd b/L2J_Mobius_3.0_Helios/dist/game/data/xsd/skills.xsd index 864b50d175..aeead5813f 100644 --- a/L2J_Mobius_3.0_Helios/dist/game/data/xsd/skills.xsd +++ b/L2J_Mobius_3.0_Helios/dist/game/data/xsd/skills.xsd @@ -2106,7 +2106,6 @@ - @@ -2142,6 +2141,7 @@ + @@ -2917,12 +2917,13 @@ - + + diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/scripts/custom/events/TeamVsTeam/TvT.java b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/scripts/custom/events/TeamVsTeam/TvT.java index 5dd31705f3..6775b4c867 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/scripts/custom/events/TeamVsTeam/TvT.java +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/scripts/custom/events/TeamVsTeam/TvT.java @@ -67,6 +67,7 @@ public class TvT extends Event // NPC private static final int MANAGER = 70010; // Skills + private static final SkillHolder GHOST_WALKING = new SkillHolder(100000, 1); // Custom Ghost Walking private static final SkillHolder KNIGHT = new SkillHolder(15648, 1); // Knight's Harmony (Adventurer) private static final SkillHolder WARRIOR = new SkillHolder(15649, 1); // Warrior's Harmony (Adventurer) private static final SkillHolder WIZARD = new SkillHolder(15650, 1); // Wizard's Harmony (Adventurer) @@ -466,11 +467,19 @@ public class TvT extends Event { player.setIsPendingRevive(true); player.teleToLocation(BLUE_SPAWN_LOC, false, PVP_WORLD); + // Make player invulnerable for 30 seconds. + GHOST_WALKING.getSkill().applyEffects(player, player); + // Reset existing activity timers. + resetActivityTimers(player); // In case player died in peace zone. } else if (RED_TEAM.contains(player)) { player.setIsPendingRevive(true); player.teleToLocation(RED_SPAWN_LOC, false, PVP_WORLD); + // Make player invulnerable for 30 seconds. + GHOST_WALKING.getSkill().applyEffects(player, player); + // Reset existing activity timers. + resetActivityTimers(player); // In case player died in peace zone. } } break; @@ -570,8 +579,7 @@ public class TvT extends Event ((((zone == BLUE_PEACE_ZONE) && (character.getTeam() == Team.BLUE)) || // ((zone == RED_PEACE_ZONE) && (character.getTeam() == Team.RED))))) { - startQuestTimer("KickPlayer" + character.getObjectId(), PVP_WORLD.getDoor(BLUE_DOOR_ID).isOpen() ? INACTIVITY_TIME * 60000 : (INACTIVITY_TIME * 60000) + (WAIT_TIME * 60000), null, character.getActingPlayer()); - startQuestTimer("KickPlayerWarning" + character.getObjectId(), PVP_WORLD.getDoor(BLUE_DOOR_ID).isOpen() ? (INACTIVITY_TIME / 2) * 60000 : ((INACTIVITY_TIME / 2) * 60000) + (WAIT_TIME * 60000), null, character.getActingPlayer()); + resetActivityTimers(character.getActingPlayer()); } } return null; @@ -582,8 +590,14 @@ public class TvT extends Event { if (character.isPlayer() && character.getActingPlayer().isOnCustomEvent()) { - cancelQuestTimer("KickPlayer" + character.getObjectId(), null, character.getActingPlayer()); - cancelQuestTimer("KickPlayerWarning" + character.getObjectId(), null, character.getActingPlayer()); + final L2PcInstance player = character.getActingPlayer(); + cancelQuestTimer("KickPlayer" + character.getObjectId(), null, player); + cancelQuestTimer("KickPlayerWarning" + character.getObjectId(), null, player); + // Removed invulnerability shield. + if (player.isAffectedBySkill(GHOST_WALKING)) + { + player.getEffectList().stopSkillEffects(true, GHOST_WALKING.getSkill()); + } } return super.onExitZone(character, zone); } @@ -718,6 +732,14 @@ public class TvT extends Event } } + private void resetActivityTimers(L2PcInstance player) + { + cancelQuestTimer("KickPlayer" + player.getObjectId(), null, player); + cancelQuestTimer("KickPlayerWarning" + player.getObjectId(), null, player); + startQuestTimer("KickPlayer" + player.getObjectId(), PVP_WORLD.getDoor(BLUE_DOOR_ID).isOpen() ? INACTIVITY_TIME * 60000 : (INACTIVITY_TIME * 60000) + (WAIT_TIME * 60000), null, player); + startQuestTimer("KickPlayerWarning" + player.getObjectId(), PVP_WORLD.getDoor(BLUE_DOOR_ID).isOpen() ? (INACTIVITY_TIME / 2) * 60000 : ((INACTIVITY_TIME / 2) * 60000) + (WAIT_TIME * 60000), null, player); + } + private void manageForfeit() { cancelQuestTimer("10", null, null); diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/stats/skills/custom/tvt_event.xml b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/stats/skills/custom/tvt_event.xml new file mode 100644 index 0000000000..24eaac1529 --- /dev/null +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/stats/skills/custom/tvt_event.xml @@ -0,0 +1,39 @@ + + + + 1 + 30 + NONE + RO_GHOST_REFLECT + icon.skill01418 + A2 + true + 500 + 500 + 600000 + true + 867 + 1 + NONE;STRIDER;WYVERN;WOLF + NONE + SELF + SINGLE + + + 33 + DIFF + + + BLOCK_HP + + + BLOCK_MP + + + + -100 + ALL + + + + \ No newline at end of file diff --git a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/xsd/skills.xsd b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/xsd/skills.xsd index ae48ac3ceb..e99593f9af 100644 --- a/L2J_Mobius_4.0_GrandCrusade/dist/game/data/xsd/skills.xsd +++ b/L2J_Mobius_4.0_GrandCrusade/dist/game/data/xsd/skills.xsd @@ -2073,7 +2073,6 @@ - @@ -2109,6 +2108,7 @@ + @@ -2928,12 +2928,13 @@ - + + diff --git a/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/scripts/custom/events/TeamVsTeam/TvT.java b/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/scripts/custom/events/TeamVsTeam/TvT.java index 6fa205cbd4..251302a1f8 100644 --- a/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/scripts/custom/events/TeamVsTeam/TvT.java +++ b/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/scripts/custom/events/TeamVsTeam/TvT.java @@ -86,6 +86,7 @@ public class TvT extends Event new SkillHolder(4330, 1), // Concentration new SkillHolder(4331, 1), // Empower }; + private static final SkillHolder GHOST_WALKING = new SkillHolder(100000, 1); // Custom Ghost Walking // Others private static final int INSTANCE_ID = 3049; private static final int BLUE_DOOR_ID = 24190002; @@ -468,11 +469,19 @@ public class TvT extends Event { player.setIsPendingRevive(true); player.teleToLocation(BLUE_SPAWN_LOC, false, PVP_WORLD); + // Make player invulnerable for 30 seconds. + GHOST_WALKING.getSkill().applyEffects(player, player); + // Reset existing activity timers. + resetActivityTimers(player); // In case player died in peace zone. } else if (RED_TEAM.contains(player)) { player.setIsPendingRevive(true); player.teleToLocation(RED_SPAWN_LOC, false, PVP_WORLD); + // Make player invulnerable for 30 seconds. + GHOST_WALKING.getSkill().applyEffects(player, player); + // Reset existing activity timers. + resetActivityTimers(player); // In case player died in peace zone. } } break; @@ -572,8 +581,7 @@ public class TvT extends Event ((((zone == BLUE_PEACE_ZONE) && (character.getTeam() == Team.BLUE)) || // ((zone == RED_PEACE_ZONE) && (character.getTeam() == Team.RED))))) { - startQuestTimer("KickPlayer" + character.getObjectId(), PVP_WORLD.getDoor(BLUE_DOOR_ID).isOpen() ? INACTIVITY_TIME * 60000 : (INACTIVITY_TIME * 60000) + (WAIT_TIME * 60000), null, character.getActingPlayer()); - startQuestTimer("KickPlayerWarning" + character.getObjectId(), PVP_WORLD.getDoor(BLUE_DOOR_ID).isOpen() ? (INACTIVITY_TIME / 2) * 60000 : ((INACTIVITY_TIME / 2) * 60000) + (WAIT_TIME * 60000), null, character.getActingPlayer()); + resetActivityTimers(character.getActingPlayer()); } } return null; @@ -584,8 +592,14 @@ public class TvT extends Event { if (character.isPlayer() && character.getActingPlayer().isOnCustomEvent()) { - cancelQuestTimer("KickPlayer" + character.getObjectId(), null, character.getActingPlayer()); - cancelQuestTimer("KickPlayerWarning" + character.getObjectId(), null, character.getActingPlayer()); + final L2PcInstance player = character.getActingPlayer(); + cancelQuestTimer("KickPlayer" + character.getObjectId(), null, player); + cancelQuestTimer("KickPlayerWarning" + character.getObjectId(), null, player); + // Removed invulnerability shield. + if (player.isAffectedBySkill(GHOST_WALKING)) + { + player.getEffectList().stopSkillEffects(true, GHOST_WALKING.getSkill()); + } } return super.onExitZone(character, zone); } @@ -720,6 +734,14 @@ public class TvT extends Event } } + private void resetActivityTimers(L2PcInstance player) + { + cancelQuestTimer("KickPlayer" + player.getObjectId(), null, player); + cancelQuestTimer("KickPlayerWarning" + player.getObjectId(), null, player); + startQuestTimer("KickPlayer" + player.getObjectId(), PVP_WORLD.getDoor(BLUE_DOOR_ID).isOpen() ? INACTIVITY_TIME * 60000 : (INACTIVITY_TIME * 60000) + (WAIT_TIME * 60000), null, player); + startQuestTimer("KickPlayerWarning" + player.getObjectId(), PVP_WORLD.getDoor(BLUE_DOOR_ID).isOpen() ? (INACTIVITY_TIME / 2) * 60000 : ((INACTIVITY_TIME / 2) * 60000) + (WAIT_TIME * 60000), null, player); + } + private void manageForfeit() { cancelQuestTimer("10", null, null); diff --git a/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/stats/skills/custom/tvt_event.xml b/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/stats/skills/custom/tvt_event.xml new file mode 100644 index 0000000000..4d904ab696 --- /dev/null +++ b/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/stats/skills/custom/tvt_event.xml @@ -0,0 +1,39 @@ + + + + 1 + 30 + NONE + ULTIMATE_DEFENCE + icon.skill01418 + A2 + true + 500 + 500 + 600000 + true + 867 + 1 + NONE;STRIDER;WYVERN;WOLF + NONE + SELF + SINGLE + + + 33 + DIFF + + + BLOCK_HP + + + BLOCK_MP + + + + -100 + ALL + + + + \ No newline at end of file diff --git a/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/xsd/skills.xsd b/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/xsd/skills.xsd index ddf0629be1..85593abe8d 100644 --- a/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/xsd/skills.xsd +++ b/L2J_Mobius_Classic_2.0_Saviors/dist/game/data/xsd/skills.xsd @@ -1530,7 +1530,6 @@ - @@ -2005,9 +2004,10 @@ - + +