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 @@
-
+
+