Custom Ghost Walking buff when TvT member resurrects.
This commit is contained in:
parent
07e95bb19a
commit
8f2b258395
@ -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);
|
||||
|
39
L2J_Mobius_1.0_Ertheia/dist/game/data/stats/skills/custom/tvt_event.xml
vendored
Normal file
39
L2J_Mobius_1.0_Ertheia/dist/game/data/stats/skills/custom/tvt_event.xml
vendored
Normal file
@ -0,0 +1,39 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<list xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../xsd/skills.xsd">
|
||||
<skill id="100000" displayId="770" toLevel="1" name="Ghost Walking">
|
||||
<abnormalLvl>1</abnormalLvl>
|
||||
<abnormalTime>30</abnormalTime>
|
||||
<abnormalType>NONE</abnormalType>
|
||||
<abnormalVisualEffect>RO_GHOST_REFLECT</abnormalVisualEffect>
|
||||
<icon>icon.skill01418</icon>
|
||||
<operateType>A2</operateType>
|
||||
<removedOnAnyActionExceptMove>true</removedOnAnyActionExceptMove>
|
||||
<hitTime>500</hitTime>
|
||||
<coolTime>500</coolTime>
|
||||
<reuseDelay>600000</reuseDelay>
|
||||
<staticReuse>true</staticReuse>
|
||||
<effectPoint>867</effectPoint>
|
||||
<isMagic>1</isMagic>
|
||||
<rideState>NONE;STRIDER;WYVERN;WOLF</rideState>
|
||||
<basicProperty>NONE</basicProperty>
|
||||
<targetType>SELF</targetType>
|
||||
<affectScope>SINGLE</affectScope>
|
||||
<effects>
|
||||
<effect name="Speed">
|
||||
<amount>33</amount>
|
||||
<mode>DIFF</mode>
|
||||
</effect>
|
||||
<effect name="DamageBlock">
|
||||
<type>BLOCK_HP</type>
|
||||
</effect>
|
||||
<effect name="DamageBlock">
|
||||
<type>BLOCK_MP</type>
|
||||
</effect>
|
||||
<effect name="DebuffBlock" />
|
||||
<effect name="ResistDispelByCategory">
|
||||
<amount>-100</amount>
|
||||
<slot>ALL</slot>
|
||||
</effect>
|
||||
</effects>
|
||||
</skill>
|
||||
</list>
|
@ -1987,7 +1987,6 @@
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
<xs:element name="pAtkMod" type="xs:unsignedByte" />
|
||||
<xs:element name="isSummonSpawn" type="xs:boolean" />
|
||||
<xs:element name="randomOffset" type="xs:unsignedByte" />
|
||||
<xs:element name="debuffModifier" type="xs:decimal" />
|
||||
@ -2023,6 +2022,7 @@
|
||||
</xs:element>
|
||||
<xs:element name="damageModifier" type="xs:decimal" />
|
||||
<xs:element name="animationSpeed" type="xs:unsignedShort" />
|
||||
<xs:element name="pAtkMod" type="xs:unsignedByte" />
|
||||
</xs:choice>
|
||||
</xs:sequence>
|
||||
<xs:attribute name="name" type="xs:string" use="required" />
|
||||
@ -2755,12 +2755,13 @@
|
||||
<xs:element name="despawnDelay" type="xs:unsignedInt" />
|
||||
</xs:choice>
|
||||
</xs:sequence>
|
||||
<xs:attribute name="id" type="xs:unsignedShort" use="required" />
|
||||
<xs:attribute name="id" type="xs:unsignedInt" use="required" />
|
||||
<xs:attribute name="toLevel" type="xs:unsignedByte" use="optional" />
|
||||
<xs:attribute name="name" type="xs:string" use="required" />
|
||||
<xs:attribute name="levels" type="xs:unsignedByte" use="optional" />
|
||||
<xs:attribute name="fromLevel" type="xs:unsignedByte" use="optional" />
|
||||
<xs:attribute name="usingServerSideName" type="xs:boolean" use="optional" />
|
||||
<xs:attribute name="displayId" type="xs:unsignedShort" use="optional" />
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
</xs:sequence>
|
||||
|
@ -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);
|
||||
|
39
L2J_Mobius_2.5_Underground/dist/game/data/stats/skills/custom/tvt_event.xml
vendored
Normal file
39
L2J_Mobius_2.5_Underground/dist/game/data/stats/skills/custom/tvt_event.xml
vendored
Normal file
@ -0,0 +1,39 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<list xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../xsd/skills.xsd">
|
||||
<skill id="100000" displayId="770" toLevel="1" name="Ghost Walking">
|
||||
<abnormalLvl>1</abnormalLvl>
|
||||
<abnormalTime>30</abnormalTime>
|
||||
<abnormalType>NONE</abnormalType>
|
||||
<abnormalVisualEffect>RO_GHOST_REFLECT</abnormalVisualEffect>
|
||||
<icon>icon.skill01418</icon>
|
||||
<operateType>A2</operateType>
|
||||
<removedOnAnyActionExceptMove>true</removedOnAnyActionExceptMove>
|
||||
<hitTime>500</hitTime>
|
||||
<coolTime>500</coolTime>
|
||||
<reuseDelay>600000</reuseDelay>
|
||||
<staticReuse>true</staticReuse>
|
||||
<effectPoint>867</effectPoint>
|
||||
<isMagic>1</isMagic>
|
||||
<rideState>NONE;STRIDER;WYVERN;WOLF</rideState>
|
||||
<basicProperty>NONE</basicProperty>
|
||||
<targetType>SELF</targetType>
|
||||
<affectScope>SINGLE</affectScope>
|
||||
<effects>
|
||||
<effect name="Speed">
|
||||
<amount>33</amount>
|
||||
<mode>DIFF</mode>
|
||||
</effect>
|
||||
<effect name="DamageBlock">
|
||||
<type>BLOCK_HP</type>
|
||||
</effect>
|
||||
<effect name="DamageBlock">
|
||||
<type>BLOCK_MP</type>
|
||||
</effect>
|
||||
<effect name="DebuffBlock" />
|
||||
<effect name="ResistDispelByCategory">
|
||||
<amount>-100</amount>
|
||||
<slot>ALL</slot>
|
||||
</effect>
|
||||
</effects>
|
||||
</skill>
|
||||
</list>
|
@ -2075,7 +2075,6 @@
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
<xs:element name="pAtkMod" type="xs:unsignedByte" />
|
||||
<xs:element name="isSummonSpawn" type="xs:boolean" />
|
||||
<xs:element name="randomOffset" type="xs:unsignedByte" />
|
||||
<xs:element name="HATE">
|
||||
@ -2111,6 +2110,7 @@
|
||||
<xs:element name="debuffModifier" type="xs:decimal" />
|
||||
<xs:element name="damageModifier" type="xs:decimal" />
|
||||
<xs:element name="animationSpeed" type="xs:unsignedShort" />
|
||||
<xs:element name="pAtkMod" type="xs:unsignedByte" />
|
||||
</xs:choice>
|
||||
</xs:sequence>
|
||||
<xs:attribute name="name" type="xs:string" use="required" />
|
||||
@ -2878,12 +2878,13 @@
|
||||
<xs:element name="despawnDelay" type="xs:unsignedInt" />
|
||||
</xs:choice>
|
||||
</xs:sequence>
|
||||
<xs:attribute name="id" type="xs:unsignedShort" use="required" />
|
||||
<xs:attribute name="id" type="xs:unsignedInt" use="required" />
|
||||
<xs:attribute name="toLevel" type="xs:unsignedByte" use="optional" />
|
||||
<xs:attribute name="name" type="xs:string" use="required" />
|
||||
<xs:attribute name="levels" type="xs:unsignedByte" use="optional" />
|
||||
<xs:attribute name="fromLevel" type="xs:unsignedByte" use="optional" />
|
||||
<xs:attribute name="usingServerSideName" type="xs:boolean" use="optional" />
|
||||
<xs:attribute name="displayId" type="xs:unsignedShort" use="optional" />
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
</xs:sequence>
|
||||
|
@ -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);
|
||||
|
39
L2J_Mobius_3.0_Helios/dist/game/data/stats/skills/custom/tvt_event.xml
vendored
Normal file
39
L2J_Mobius_3.0_Helios/dist/game/data/stats/skills/custom/tvt_event.xml
vendored
Normal file
@ -0,0 +1,39 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<list xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../xsd/skills.xsd">
|
||||
<skill id="100000" displayId="770" toLevel="1" name="Ghost Walking">
|
||||
<abnormalLvl>1</abnormalLvl>
|
||||
<abnormalTime>30</abnormalTime>
|
||||
<abnormalType>NONE</abnormalType>
|
||||
<abnormalVisualEffect>RO_GHOST_REFLECT</abnormalVisualEffect>
|
||||
<icon>icon.skill01418</icon>
|
||||
<operateType>A2</operateType>
|
||||
<removedOnAnyActionExceptMove>true</removedOnAnyActionExceptMove>
|
||||
<hitTime>500</hitTime>
|
||||
<coolTime>500</coolTime>
|
||||
<reuseDelay>600000</reuseDelay>
|
||||
<staticReuse>true</staticReuse>
|
||||
<effectPoint>867</effectPoint>
|
||||
<isMagic>1</isMagic>
|
||||
<rideState>NONE;STRIDER;WYVERN;WOLF</rideState>
|
||||
<basicProperty>NONE</basicProperty>
|
||||
<targetType>SELF</targetType>
|
||||
<affectScope>SINGLE</affectScope>
|
||||
<effects>
|
||||
<effect name="Speed">
|
||||
<amount>33</amount>
|
||||
<mode>DIFF</mode>
|
||||
</effect>
|
||||
<effect name="DamageBlock">
|
||||
<type>BLOCK_HP</type>
|
||||
</effect>
|
||||
<effect name="DamageBlock">
|
||||
<type>BLOCK_MP</type>
|
||||
</effect>
|
||||
<effect name="DebuffBlock" />
|
||||
<effect name="ResistDispelByCategory">
|
||||
<amount>-100</amount>
|
||||
<slot>ALL</slot>
|
||||
</effect>
|
||||
</effects>
|
||||
</skill>
|
||||
</list>
|
@ -2106,7 +2106,6 @@
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
<xs:element name="pAtkMod" type="xs:unsignedByte" />
|
||||
<xs:element name="isSummonSpawn" type="xs:boolean" />
|
||||
<xs:element name="randomOffset" type="xs:unsignedByte" />
|
||||
<xs:element name="HATE">
|
||||
@ -2142,6 +2141,7 @@
|
||||
<xs:element name="debuffModifier" type="xs:decimal" />
|
||||
<xs:element name="damageModifier" type="xs:decimal" />
|
||||
<xs:element name="animationSpeed" type="xs:unsignedShort" />
|
||||
<xs:element name="pAtkMod" type="xs:unsignedByte" />
|
||||
</xs:choice>
|
||||
</xs:sequence>
|
||||
<xs:attribute name="name" type="xs:string" use="required" />
|
||||
@ -2917,12 +2917,13 @@
|
||||
<xs:element name="despawnDelay" type="xs:unsignedInt" />
|
||||
</xs:choice>
|
||||
</xs:sequence>
|
||||
<xs:attribute name="id" type="xs:unsignedShort" use="required" />
|
||||
<xs:attribute name="id" type="xs:unsignedInt" use="required" />
|
||||
<xs:attribute name="toLevel" type="xs:unsignedByte" use="optional" />
|
||||
<xs:attribute name="name" type="xs:string" use="required" />
|
||||
<xs:attribute name="levels" type="xs:unsignedByte" use="optional" />
|
||||
<xs:attribute name="fromLevel" type="xs:unsignedByte" use="optional" />
|
||||
<xs:attribute name="usingServerSideName" type="xs:boolean" use="optional" />
|
||||
<xs:attribute name="displayId" type="xs:unsignedShort" use="optional" />
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
</xs:sequence>
|
||||
|
@ -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);
|
||||
|
39
L2J_Mobius_4.0_GrandCrusade/dist/game/data/stats/skills/custom/tvt_event.xml
vendored
Normal file
39
L2J_Mobius_4.0_GrandCrusade/dist/game/data/stats/skills/custom/tvt_event.xml
vendored
Normal file
@ -0,0 +1,39 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<list xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../xsd/skills.xsd">
|
||||
<skill id="100000" displayId="770" toLevel="1" name="Ghost Walking">
|
||||
<abnormalLvl>1</abnormalLvl>
|
||||
<abnormalTime>30</abnormalTime>
|
||||
<abnormalType>NONE</abnormalType>
|
||||
<abnormalVisualEffect>RO_GHOST_REFLECT</abnormalVisualEffect>
|
||||
<icon>icon.skill01418</icon>
|
||||
<operateType>A2</operateType>
|
||||
<removedOnAnyActionExceptMove>true</removedOnAnyActionExceptMove>
|
||||
<hitTime>500</hitTime>
|
||||
<coolTime>500</coolTime>
|
||||
<reuseDelay>600000</reuseDelay>
|
||||
<staticReuse>true</staticReuse>
|
||||
<effectPoint>867</effectPoint>
|
||||
<isMagic>1</isMagic>
|
||||
<rideState>NONE;STRIDER;WYVERN;WOLF</rideState>
|
||||
<basicProperty>NONE</basicProperty>
|
||||
<targetType>SELF</targetType>
|
||||
<affectScope>SINGLE</affectScope>
|
||||
<effects>
|
||||
<effect name="Speed">
|
||||
<amount>33</amount>
|
||||
<mode>DIFF</mode>
|
||||
</effect>
|
||||
<effect name="DamageBlock">
|
||||
<type>BLOCK_HP</type>
|
||||
</effect>
|
||||
<effect name="DamageBlock">
|
||||
<type>BLOCK_MP</type>
|
||||
</effect>
|
||||
<effect name="DebuffBlock" />
|
||||
<effect name="ResistDispelByCategory">
|
||||
<amount>-100</amount>
|
||||
<slot>ALL</slot>
|
||||
</effect>
|
||||
</effects>
|
||||
</skill>
|
||||
</list>
|
@ -2073,7 +2073,6 @@
|
||||
<xs:element name="addedSkillId" type="xs:unsignedShort" />
|
||||
<xs:element name="addedSkillLevel" type="xs:unsignedByte" />
|
||||
<xs:element name="skills" type="xs:string" />
|
||||
<xs:element name="pAtkMod" type="xs:unsignedByte" />
|
||||
<xs:element name="isSummonSpawn" type="xs:boolean" />
|
||||
<xs:element name="randomOffset" type="xs:unsignedByte" />
|
||||
<xs:element name="AGGRESSION">
|
||||
@ -2109,6 +2108,7 @@
|
||||
</xs:element>
|
||||
<xs:element name="damageModifier" type="xs:decimal" />
|
||||
<xs:element name="animationSpeed" type="xs:unsignedShort" />
|
||||
<xs:element name="pAtkMod" type="xs:unsignedByte" />
|
||||
</xs:choice>
|
||||
</xs:sequence>
|
||||
<xs:attribute name="name" type="xs:string" use="required" />
|
||||
@ -2928,12 +2928,13 @@
|
||||
<xs:element name="despawnDelay" type="xs:unsignedInt" />
|
||||
</xs:choice>
|
||||
</xs:sequence>
|
||||
<xs:attribute name="id" type="xs:unsignedShort" use="required" />
|
||||
<xs:attribute name="id" type="xs:unsignedInt" use="required" />
|
||||
<xs:attribute name="toLevel" type="xs:unsignedByte" use="optional" />
|
||||
<xs:attribute name="name" type="xs:string" use="required" />
|
||||
<xs:attribute name="levels" type="xs:unsignedByte" use="optional" />
|
||||
<xs:attribute name="fromLevel" type="xs:unsignedByte" use="optional" />
|
||||
<xs:attribute name="usingServerSideName" type="xs:boolean" use="optional" />
|
||||
<xs:attribute name="displayId" type="xs:unsignedShort" use="optional" />
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
</xs:sequence>
|
||||
|
@ -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);
|
||||
|
39
L2J_Mobius_Classic_2.0_Saviors/dist/game/data/stats/skills/custom/tvt_event.xml
vendored
Normal file
39
L2J_Mobius_Classic_2.0_Saviors/dist/game/data/stats/skills/custom/tvt_event.xml
vendored
Normal file
@ -0,0 +1,39 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<list xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../xsd/skills.xsd">
|
||||
<skill id="100000" displayId="770" toLevel="1" name="Ghost Walking">
|
||||
<abnormalLvl>1</abnormalLvl>
|
||||
<abnormalTime>30</abnormalTime>
|
||||
<abnormalType>NONE</abnormalType>
|
||||
<abnormalVisualEffect>ULTIMATE_DEFENCE</abnormalVisualEffect>
|
||||
<icon>icon.skill01418</icon>
|
||||
<operateType>A2</operateType>
|
||||
<removedOnAnyActionExceptMove>true</removedOnAnyActionExceptMove>
|
||||
<hitTime>500</hitTime>
|
||||
<coolTime>500</coolTime>
|
||||
<reuseDelay>600000</reuseDelay>
|
||||
<staticReuse>true</staticReuse>
|
||||
<effectPoint>867</effectPoint>
|
||||
<isMagic>1</isMagic>
|
||||
<rideState>NONE;STRIDER;WYVERN;WOLF</rideState>
|
||||
<basicProperty>NONE</basicProperty>
|
||||
<targetType>SELF</targetType>
|
||||
<affectScope>SINGLE</affectScope>
|
||||
<effects>
|
||||
<effect name="Speed">
|
||||
<amount>33</amount>
|
||||
<mode>DIFF</mode>
|
||||
</effect>
|
||||
<effect name="DamageBlock">
|
||||
<type>BLOCK_HP</type>
|
||||
</effect>
|
||||
<effect name="DamageBlock">
|
||||
<type>BLOCK_MP</type>
|
||||
</effect>
|
||||
<effect name="DebuffBlock" />
|
||||
<effect name="ResistDispelByCategory">
|
||||
<amount>-100</amount>
|
||||
<slot>ALL</slot>
|
||||
</effect>
|
||||
</effects>
|
||||
</skill>
|
||||
</list>
|
@ -1530,7 +1530,6 @@
|
||||
<xs:element name="hp" type="xs:unsignedByte" />
|
||||
<xs:element name="mp" type="xs:unsignedByte" />
|
||||
<xs:element name="cp" type="xs:unsignedByte" />
|
||||
<xs:element name="pAtkMod" type="xs:unsignedByte" />
|
||||
<xs:element name="reputation" type="xs:unsignedByte" />
|
||||
</xs:choice>
|
||||
</xs:sequence>
|
||||
@ -2005,9 +2004,10 @@
|
||||
<xs:element name="blockActionUseSkill" type="xs:boolean" />
|
||||
</xs:choice>
|
||||
</xs:sequence>
|
||||
<xs:attribute name="id" type="xs:unsignedShort" use="required" />
|
||||
<xs:attribute name="id" type="xs:unsignedInt" use="required" />
|
||||
<xs:attribute name="toLevel" type="xs:unsignedByte" use="required" />
|
||||
<xs:attribute name="name" type="xs:string" use="required" />
|
||||
<xs:attribute name="displayId" type="xs:unsignedShort" use="optional" />
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
</xs:sequence>
|
||||
|
Loading…
Reference in New Issue
Block a user