Initial changes.

This commit is contained in:
MobiusDevelopment
2020-10-25 00:27:29 +00:00
parent 8891188894
commit f1e959afc2
686 changed files with 116519 additions and 42184 deletions

View File

@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>L2J_Mobius_Classic_3.0_TheKamael</name>
<name>L2J_Mobius_Essence_4.0_DwellingOfSpirits</name>
<comment></comment>
<projects>
</projects>

View File

@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE xml>
<project name="L2J_Mobius_Classic_3.0_TheKamael" default="cleanup" basedir=".">
<project name="L2J_Mobius_Essence_4.0_DwellingOfSpirits" default="cleanup" basedir=".">
<description>
This file is part of the L2J Mobius project.
@@ -132,15 +132,15 @@
</target>
<target name="adding-core" depends="jar" description="Adding the compiled jars to the Zip file.">
<zip destfile="${build}/L2J_Mobius_Classic_3.0_TheKamael.zip" basedir="${build.dist}" level="9" />
<zip destfile="${build}/L2J_Mobius_Essence_4.0_DwellingOfSpirits.zip" basedir="${build.dist}" level="9" />
</target>
<target name="adding-datapack" depends="adding-core" description="Updating the Zip file with datapack content.">
<zip destfile="${build}/L2J_Mobius_Classic_3.0_TheKamael.zip" basedir="${datapack}" excludes="**/*-sources.jar" update="true" level="9" />
<zip destfile="${build}/L2J_Mobius_Essence_4.0_DwellingOfSpirits.zip" basedir="${datapack}" excludes="**/*-sources.jar" update="true" level="9" />
</target>
<target name="adding-readme" depends="adding-datapack" description="Adding readme.txt to the Zip file.">
<zip destfile="${build}/L2J_Mobius_Classic_3.0_TheKamael.zip" basedir="." includes="readme.txt" update="true" level="9" />
<zip destfile="${build}/L2J_Mobius_Essence_4.0_DwellingOfSpirits.zip" basedir="." includes="readme.txt" update="true" level="9" />
</target>
<target name="cleanup" depends="adding-readme" description="Cleaning the build folder.">

View File

@@ -270,9 +270,9 @@ MaxSp = 50000000000
# Maximum Player Level
# WARNING: Cannot exceed the maximum experince.xml level.
# Example: Set as 86 to force the maximum player level at 86.
# Default: 86
MaximumPlayerLevel = 86
# Example: Set as 90 to force the maximum player level at 90.
# Default: 90
MaximumPlayerLevel = 90
# Maximum number of allowed subclasses for every player.
# Do not use more than 3!
@@ -686,7 +686,7 @@ OffsetOnTeleportEnabled = True
MaxOffsetOnTeleport = 50
# Enable teleporting while siege in progress.
# Classic: True
# Default: True
TeleportWhileSiegeInProgress = True
# This option is to enable or disable the use of in game petitions.

View File

@@ -18,4 +18,5 @@ MobsSpawnNotRandom = 18812,18813,18814,22138,\
18170,18171,18183,18184,18185,18186,18187,18191,18195,18196,18197,18198,18199,18212,18220,\
18221,18222,18226,18230,18231,18232,18233,18234,18235,18236,18237,18238,18239,18240,18241,\
18242,18243,18256,31452,31468,31469,31470,31471,31472,31473,31474,31475,31476,31477,31478,\
31479,31480,31481,31482,31483,31484,31485,31486,31487
31479,31480,31481,31482,31483,31484,31485,31486,31487,\
22183

View File

@@ -41,8 +41,8 @@ GameserverPort = 7777
Driver = org.mariadb.jdbc.Driver
# Database URL
# Default: jdbc:mariadb://localhost/l2jmobiusclassic?useUnicode=true&characterEncoding=utf-8&useSSL=false
URL = jdbc:mariadb://localhost/l2jmobiusclassic?useUnicode=true&characterEncoding=utf-8&useSSL=false
# Default: jdbc:mariadb://localhost/l2jmobiusessence?useUnicode=true&characterEncoding=utf-8&useSSL=false
URL = jdbc:mariadb://localhost/l2jmobiusessence?useUnicode=true&characterEncoding=utf-8&useSSL=false
# Database user info (default is "root" but it's not recommended)
Login = root
@@ -101,14 +101,14 @@ MaximumOnlineUsers = 2000
# Numbers of protocol revisions that server allows to connect.
# Delimiter is ;
# WARNING: <u><b><font color="red">Changing the protocol revision may result in incompatible communication and many errors in game!</font></b></u>
# The Kamael: 228
AllowedProtocolRevisions = 228
# Dwelling of Spirits: 286
AllowedProtocolRevisions = 286
# Displays server type next to the server name on character selection.
# Notes:
# Accepted Values: Normal, Relax, Test, Broad, Restricted, Event, Free, World, New, Classic
# Default: Free
ServerListType = Classic
# Accepted Values: Normal, Relax, Test, Broad, Restricted, Event, Free, World, New, Essence
# Default: Essence
ServerListType = Essence
# Displays server minimum age to the server name on character selection.
# Notes:

View File

@@ -65,6 +65,18 @@
<id>193</id> <!-- Soul Finder -->
<id>194</id> <!-- Soul Breaker -->
<id>195</id> <!-- Soul Hound -->
<id>196</id> <!-- Death Pilgrim - Human -->
<id>205</id> <!-- Death Blade - Human -->
<id>202</id> <!-- Death Messenger - Human -->
<id>199</id> <!-- Death Knight - Human -->
<id>200</id> <!-- Death Pilgrim - Elf -->
<id>197</id> <!-- Death Blade - Elf -->
<id>206</id> <!-- Death Messenger - Elf -->
<id>203</id> <!-- Death Knight - Elf -->
<id>204</id> <!-- Death Pilgrim - Dark Elf -->
<id>201</id> <!-- Death Blade - Dark Elf -->
<id>198</id> <!-- Death Messenger - Dark Elf -->
<id>207</id> <!-- Death Knight - Dark Elf -->
</category>
<category name="MAGE_GROUP">
<id>10</id> <!-- mage -->
@@ -189,6 +201,18 @@
<id>193</id> <!-- Soul Finder -->
<id>194</id> <!-- Soul Breaker -->
<id>195</id> <!-- Soul Hound -->
<id>196</id> <!-- Death Pilgrim - Human -->
<id>205</id> <!-- Death Blade - Human -->
<id>202</id> <!-- Death Messenger - Human -->
<id>199</id> <!-- Death Knight - Human -->
<id>200</id> <!-- Death Pilgrim - Elf -->
<id>197</id> <!-- Death Blade - Elf -->
<id>206</id> <!-- Death Messenger - Elf -->
<id>203</id> <!-- Death Knight - Elf -->
<id>204</id> <!-- Death Pilgrim - Dark Elf -->
<id>201</id> <!-- Death Blade - Dark Elf -->
<id>198</id> <!-- Death Messenger - Dark Elf -->
<id>207</id> <!-- Death Knight - Dark Elf -->
</category>
<category name="FIRST_CLASS_GROUP">
<id>0</id> <!-- fighter -->
@@ -201,6 +225,9 @@
<id>49</id> <!-- orc_mage -->
<id>53</id> <!-- dwarven_fighter -->
<id>192</id> <!-- Jin Kamael Soldier -->
<id>196</id> <!-- Death Pilgrim - Human -->
<id>200</id> <!-- Death Pilgrim - Elf -->
<id>204</id> <!-- Death Pilgrim - Dark Elf -->
</category>
<category name="SECOND_CLASS_GROUP">
<id>1</id> <!-- warrior -->
@@ -224,6 +251,9 @@
<id>125</id> <!-- trooper -->
<id>126</id> <!-- warder -->
<id>193</id> <!-- Soul Finder -->
<id>197</id> <!-- Death Blade - Human -->
<id>201</id> <!-- Death Blade - Elf -->
<id>205</id> <!-- Death Blade - Dark Elf -->
</category>
<category name="THIRD_CLASS_GROUP">
<id>2</id> <!-- gladiator -->
@@ -260,6 +290,9 @@
<id>127</id> <!-- berserker -->
<id>130</id> <!-- arbalester -->
<id>194</id> <!-- Soul Breaker -->
<id>198</id> <!-- Death Messenger - Human -->
<id>202</id> <!-- Death Messenger - Elf -->
<id>206</id> <!-- Death Messenger - Dark Elf -->
</category>
<category name="FOURTH_CLASS_GROUP">
<id>88</id> <!-- duelist -->
@@ -296,6 +329,9 @@
<id>131</id> <!-- doombringer -->
<id>134</id> <!-- trickster -->
<id>195</id> <!-- Soul Hound -->
<id>199</id> <!-- Death Knight - Human -->
<id>203</id> <!-- Death Knight - Elf -->
<id>207</id> <!-- Death Knight - Dark Elf -->
</category>
<category name="BOUNTY_HUNTER_GROUP">
<id>53</id> <!-- dwarven_fighter -->

View File

@@ -0,0 +1,395 @@
<?xml version="1.0" encoding="UTF-8"?>
<list enabled="true" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="xsd/LCoinShop.xsd">
<product id="70" category="0">
<ingredient id="91663" count="200" /> <!-- L-Coin -->
<production id="93740" /> <!-- Giran Seal Pack -->
</product>
<!--
<product id="71" category="0">
<ingredient id="91663" count="100" /> L-Coin
<production id="94167" /> Hero's Shining Pack
</product>
<product id="72" category="1">
<ingredient id="91663" count="500" /> L-Coin
<production id="94303" /> Life Stone - Circlet
</product>
<product id="73" category="1">
<ingredient id="91663" count="200" /> L-Coin
<production id="94188" /> Life Stone Lv. 2 - Armor
</product>
<product id="74" category="1">
<ingredient id="91663" count="200" /> L-Coin
<production id="94186" /> Life Stone Lv. 2 - Weapon
</product>
-->
<product id="75" category="1">
<ingredient id="91663" count="200" /> <!-- L-Coin -->
<production id="93100" /> <!-- Life Stone Lv. 2 - Shield/ Sigil -->
</product>
<!--
<product id="76" category="0">
<ingredient id="91663" count="1000" /> Adena
<production id="94450" accountDailyLimit="1" /> Augustina's Support Box Lv. 1
</product>
<product id="77" category="0">
<ingredient id="91663" count="300000" /> Adena
<production id="94457" accountDailyLimit="1" /> Augustina's Support Box Lv. 2
</product>
-->
<product id="1" category="1">
<ingredient id="91663" count="200" /> <!-- L-Coin -->
<production id="90694" /> <!-- Sealed Soul Crystal Lv. 1 -->
</product>
<product id="2" category="1">
<ingredient id="91663" count="200" /> <!-- L-Coin -->
<production id="9589" /> <!-- Talisman Bracelet Lv. 1 -->
</product>
<product id="3" category="1">
<ingredient id="91663" count="200" /> <!-- L-Coin -->
<production id="90311" /> <!-- Brooch Lv. 1 -->
</product>
<product id="4" category="1">
<ingredient id="91663" count="600" /> <!-- L-Coin -->
<production id="92034" /> <!-- Reinforced Jewel Box -->
</product>
<product id="5" category="1">
<ingredient id="91663" count="600" /> <!-- L-Coin -->
<production id="91767" /> <!-- Enchant Kit: Talisman of Aden -->
</product>
<product id="6" category="1">
<ingredient id="91663" count="600" /> <!-- L-Coin -->
<production id="92020" /> <!-- Enchant Kit: Talisman of Eva -->
</product>
<product id="7" category="1">
<ingredient id="91663" count="600" /> <!-- L-Coin -->
<production id="91864" /> <!-- Dragon Belt Pack -->
</product>
<product id="57" category="1">
<ingredient id="91663" count="600" /> <!-- L-Coin -->
<production id="93303" /> <!-- Package: Cloak of Protection -->
</product>
<product id="32" category="1">
<ingredient id="91663" count="1500" /> <!-- L-Coin -->
<production id="729" /> <!-- Scroll: Enchant A-grade Weapon (Exchangeable) -->
</product>
<product id="31" category="1">
<ingredient id="91663" count="600" /> <!-- L-Coin -->
<production id="947" /> <!-- Scroll: Enchant B-grade Weapon (Exchangeable) -->
</product>
<product id="30" category="1">
<ingredient id="91663" count="200" /> <!-- L-Coin -->
<production id="951" /> <!-- Scroll: Enchant C-grade Weapon (Exchangeable) -->
</product>
<product id="28" category="1">
<ingredient id="91663" count="350" /> <!-- L-Coin -->
<production id="730" /> <!-- Scroll: Enchant A-grade Armor (Exchangeable) -->
</product>
<product id="27" category="1">
<ingredient id="91663" count="100" /> <!-- L-Coin -->
<production id="948" /> <!-- Scroll: Enchant B-grade Armor (Exchangeable) -->
</product>
<product id="26" category="1">
<ingredient id="91663" count="50" /> <!-- L-Coin -->
<production id="952" /> <!-- Scroll: Enchant C-grade Armor (Exchangeable) -->
</product>
<!--
<product id="8" category="2">
<ingredient id="91663" count="120" /> L-Coin
<production id="71900" /> Limited Sayha's Blessing (1 Day)
</product>
<product id="9" category="2">
<ingredient id="91663" count="2000" /> L-Coin
<production id="71899" /> Limited Sayha's Blessing (30 Day)
</product>
-->
<product id="11" category="2">
<ingredient id="91663" count="20" /> <!-- L-Coin -->
<production id="91641" /> <!-- Sayha's Blessing -->
</product>
<product id="12" category="2">
<ingredient id="91663" count="6" /> <!-- L-Coin -->
<production id="90907" /> <!-- Soulshot Ticket -->
</product>
<product id="13" category="2">
<ingredient id="91663" count="20" /> <!-- L-Coin -->
<production id="49674" /> <!-- XP Growth Scroll -->
</product>
<product id="14" category="2">
<ingredient id="91663" count="6" /> <!-- L-Coin -->
<production id="91690" /> <!-- Special HP Recovery Potion -->
</product>
<!--
<product id="15" category="2">
<ingredient id="91663" count="20" /> L-Coin
<production id="91689" /> Blessed Scroll of Escape
</product>
-->
<product id="16" category="2">
<ingredient id="91663" count="300" /> <!-- L-Coin -->
<production id="90404" /> <!-- My Teleport Book -->
</product>
<product id="17" category="2">
<ingredient id="91663" count="20" /> <!-- L-Coin -->
<production id="90405" /> <!-- My Teleport Scroll -->
</product>
<product id="18" category="2">
<ingredient id="91663" count="50" /> <!-- L-Coin -->
<production id="91996" /> <!-- Scroll of Escape Pack: Tower of Insolence (Floors 1-7) -->
</product>
<product id="19" category="2">
<ingredient id="91663" count="100" /> <!-- L-Coin -->
<production id="92973" /> <!-- Scroll of Escape Pack: Tower of Insolence (Floors 8-12) -->
</product>
<!--
<product id="20" category="3">
<ingredient id="91663" count="300" /> L-Coin
<production id="92400" accountDailyLimit="1" /> Forgotten Primeval Garden's Time Stone
</product>
-->
<product id="21" category="3">
<ingredient id="91663" count="200" /> <!-- L-Coin -->
<production id="91983" accountDailyLimit="1" /> <!-- Primeval Isle's Time Stone -->
</product>
<!--
<product id="22" category="3">
<ingredient id="91663" count="200" /> L-Coin
<production id="93704" accountDailyLimit="1" /> Alligator Island's Time Stone
</product>
<product id="58" category="3">
<ingredient id="91663" count="600" /> L-Coin
<production id="93948" accountDailyLimit="1" /> Extra Pass: Transcendent Instance Zone
</product>
-->
<product id="33" category="3">
<ingredient id="91663" count="2000" /> <!-- L-Coin -->
<production id="92004" /> <!-- Inventory Expansion Ticket Lv. 1 -->
</product>
<product id="34" category="3">
<ingredient id="91663" count="2000" /> <!-- L-Coin -->
<production id="92005" /> <!-- Inventory Expansion Ticket Lv. 2 -->
</product>
<product id="35" category="3">
<ingredient id="91663" count="2000" /> <!-- L-Coin -->
<production id="92006" /> <!-- Inventory Expansion Ticket Lv. 3 -->
</product>
<product id="36" category="3">
<ingredient id="91663" count="4000" /> <!-- L-Coin -->
<production id="8618" /> <!-- Buff Expansion Book Lv. 1 -->
</product>
<product id="37" category="3">
<ingredient id="91663" count="4000" /> <!-- L-Coin -->
<production id="8619" /> <!-- Buff Expansion Book Lv. 2 -->
</product>
<product id="38" category="3">
<ingredient id="91663" count="5000" /> <!-- L-Coin -->
<production id="32253" /> <!-- Infinite Mithril Quiver -->
</product>
<product id="39" category="3">
<ingredient id="91663" count="1000" /> <!-- L-Coin -->
<production id="32252" /> <!-- Infinite Silver Quiver -->
</product>
<product id="40" category="3">
<ingredient id="91663" count="400" /> <!-- L-Coin -->
<production id="32251" /> <!-- Infinite Steel Quiver -->
</product>
<product id="41" category="3">
<ingredient id="91663" count="200" /> <!-- L-Coin -->
<production id="32250" /> <!-- Infinite Bone Quiver -->
</product>
<product id="42" category="4">
<ingredient id="57" count="1000000" /> <!-- Adena -->
<production id="91767" accountDailyLimit="1" /> <!-- Enchant Kit: Talisman of Aden -->
</product>
<product id="43" category="4">
<ingredient id="57" count="1000000" /> <!-- Adena -->
<production id="92020" accountDailyLimit="1" /> <!-- Enchant Kit: Talisman of Eva -->
</product>
<product id="47" category="4">
<ingredient id="57" count="1000000" /> <!-- Adena -->
<production id="91864" accountDailyLimit="1" /> <!-- Dragon Belt Pack -->
</product>
<!--
<product id="59" category="4">
<ingredient id="57" count="30000000" /> Adena
<production id="94208" accountDailyLimit="1" /> Scroll of Blessing
</product>
-->
<product id="49" category="4">
<ingredient id="57" count="50000" /> <!-- Adena -->
<production id="91641" accountDailyLimit="30" /> <!-- Sayha's Blessing -->
</product>
<product id="60" category="4">
<ingredient id="57" count="100000" /> <!-- Adena -->
<production id="94271" accountDailyLimit="30" /> <!-- Scroll: Enchant Protection -->
</product>
<product id="61" category="4">
<ingredient id="57" count="100000" /> <!-- Adena -->
<production id="94269" accountDailyLimit="30" /> <!-- Scroll: Enchant Attack -->
</product>
<!--
<product id="68" category="4">
<ingredient id="57" count="150000" /> Adena
<production id="94377" accountDailyLimit="10" /> Supply Pouch
</product>
<product id="69" category="4">
<ingredient id="57" count="30000" /> Adena
<production id="91690" accountDailyLimit="100" /> Special HP Recovery Potion
</product>
<product id="1001" category="1"> TODO: It has a 33% chance of giving the item, or 33% chance of giving a Package: Sirra's Blade (+0) and 33% chance of giving 6 Giran Seals
<ingredient id="92314" count="41" /> Giran Seal
<production id="94573" /> Package: +5 Sirra's Blade
</product>
<product id="1002" category="1"> TODO: It has a 33% chance of giving the item, or 33% chance of giving a Package: Sword of Ipos (+0) and 33% chance of giving 6 Giran Seals
<ingredient id="92314" count="41" /> Giran Seal
<production id="94574" /> Package: +5 Sword of Ipos
</product>
<product id="1003" category="1"> TODO: It has a 33% chance of giving the item, or 33% chance of giving a Package: Barakiel's Axe (+0) and 33% chance of giving 6 Giran Seals
<ingredient id="92314" count="41" /> Giran Seal
<production id="94575" /> Package: +5 Barakiel's Axe
</product>
<product id="1004" category="1"> TODO: It has a 33% chance of giving the item, or 33% chance of giving a Package: Behemoth' Tuning Fork (+0) and 33% chance of giving 6 Giran Seals
<ingredient id="92314" count="41" /> Giran Seal
<production id="94576" /> Package: +5 Behemoth' Tuning Fork
</product>
<product id="1005" category="1"> TODO: It has a 33% chance of giving the item, or 33% chance of giving a Package: Naga's Storm (+0) and 33% chance of giving 6 Giran Seals
<ingredient id="92314" count="41" /> Giran Seal
<production id="94577" /> Package: +5 Naga's Storm
</product>
<product id="1006" category="1"> TODO: It has a 33% chance of giving the item, or 33% chance of giving a Package: Tiphon's Spear (+0) and 33% chance of giving 6 Giran Seals
<ingredient id="92314" count="41" /> Giran Seal
<production id="94578" /> Package: +5 Tiphon's Spear
</product>
<product id="1007" category="1"> TODO: It has a 33% chance of giving the item, or 33% chance of giving a Package: Shyeed's Bow (+0) and 33% chance of giving 6 Giran Seals
<ingredient id="92314" count="41" /> Giran Seal
<production id="94579" /> Package: +5 Shyeed's Bow
</product>
<product id="1008" category="1"> TODO: It has a 33% chance of giving the item, or 33% chance of giving a Package: Sobekk's Hurricane (+0) and 33% chance of giving 6 Giran Seals
<ingredient id="92314" count="41" /> Giran Seal
<production id="94580" /> Package: +5 Sobekk's Hurricane
</product>
<product id="1009" category="1"> TODO: It has a 33% chance of giving the item, or 33% chance of giving a Package: Themis' Tongue (+0) and 33% chance of giving 6 Giran Seals
<ingredient id="92314" count="41" /> Giran Seal
<production id="94581" /> Package: +5 Themis' Tongue
</product>
<product id="1010" category="1"> TODO: It has a 33% chance of giving the item, or 33% chance of giving a Package: Cabrio's Hand (+0) and 33% chance of giving 6 Giran Seals
<ingredient id="92314" count="41" /> Giran Seal
<production id="94582" /> Package: +5 Cabrio's Hand
</product>
<product id="1011" category="1"> TODO: It has a 33% chance of giving the item, or 33% chance of giving a Package: Daimon Crystal (+0) and 33% chance of giving 6 Giran Seals
<ingredient id="92314" count="41" /> Giran Seal
<production id="94583" /> Package: +5 Daimon Crystal
</product>
<product id="1012" category="1"> TODO: It has a 33% chance of giving the item, or 33% chance of giving a Package: Tallum Blade*Damascus (+0) and 33% chance of giving 6 Giran Seals
<ingredient id="92314" count="41" /> Giran Seal
<production id="94584" /> Package: +5 Tallum Blade*Damascus
</product>
<product id="1013" category="1"> TODO: It has a 33% chance of giving the item, or 33% chance of giving a Package: Eclair Bijou (+0) and 33% chance of giving 6 Giran Seals
<ingredient id="92314" count="41" /> Giran Seal
<production id="94585" /> Package: +5 Eclair Bijou
</product>
<product id="1014" category="1"> TODO: It has a 33% chance of giving the item, or 33% chance of giving a Package: Durendal (+0) and 33% chance of giving 6 Giran Seals
<ingredient id="92314" count="41" /> Giran Seal
<production id="94586" /> Package: +5 Durendal
</product>
<product id="1016" category="2"> TODO: It has a 33% chance of giving the item, or 33% chance of giving a Package: Armor of Nightmare (Heavy) Armor (+0) and 33% chance of giving 6 Giran Seals
<ingredient id="92314" count="31" /> Giran Seal
<production id="94587" /> Package: +5 Armor of Nightmare (Heavy) Armor
</product>
<product id="1017" category="2"> TODO: It has a 33% chance of giving the item, or 33% chance of giving a Package: Helm of Nightmare (Heavy) Armor (+0) and 33% chance of giving 6 Giran Seals
<ingredient id="92314" count="31" /> Giran Seal
<production id="94588" /> Package: +5 Helm of Nightmare (Heavy) Armor
</product>
<product id="1018" category="2"> TODO: It has a 33% chance of giving the item, or 33% chance of giving a Package: Gauntlets of Nightmare (Heavy) Armor (+0) and 33% chance of giving 6 Giran Seals
<ingredient id="92314" count="31" /> Giran Seal
<production id="94589" /> Package: +5 Gauntlets of Nightmare (Heavy) Armor
</product>
<product id="1019" category="2"> TODO: It has a 33% chance of giving the item, or 33% chance of giving a Package: Boots of Nightmare (Heavy) Armor (+0) and 33% chance of giving 6 Giran Seals
<ingredient id="92314" count="31" /> Giran Seal
<production id="94590" /> Package: +5 Boots of Nightmare (Heavy) Armor
</product>
<product id="1020" category="2"> TODO: It has a 33% chance of giving the item, or 33% chance of giving a Package: Majestic Plate Armor (Heavy) Armor (+0) and 33% chance of giving 6 Giran Seals
<ingredient id="92314" count="31" /> Giran Seal
<production id="94591" /> Package: +5 Majestic Plate Armor (Heavy) Armor
</product>
<product id="1021" category="2"> TODO: It has a 33% chance of giving the item, or 33% chance of giving a Package: Majestic Circlet (Heavy) Armor (+0) and 33% chance of giving 6 Giran Seals
<ingredient id="92314" count="31" /> Giran Seal
<production id="94592" /> Package: +5 Majestic Circlet (Heavy) Armor
</product>
<product id="1022" category="2"> TODO: It has a 33% chance of giving the item, or 33% chance of giving a Package: Majestic Gauntlets (Heavy) Armor (+0) and 33% chance of giving 6 Giran Seals
<ingredient id="92314" count="31" /> Giran Seal
<production id="94593" /> Package: +5 Majestic Gauntlets (Heavy) Armor
</product>
<product id="1023" category="2"> TODO: It has a 33% chance of giving the item, or 33% chance of giving a Package: Majestic Boots (Heavy) Armor (+0) and 33% chance of giving 6 Giran Seals
<ingredient id="92314" count="31" /> Giran Seal
<production id="94594" /> Package: +5 Majestic Boots (Heavy) Armor
</product>
<product id="1024" category="2"> TODO: It has a 33% chance of giving the item, or 33% chance of giving a Package: Leather Armor of Nightmare (Light) Armor (+0) and 33% chance of giving 6 Giran Seals
<ingredient id="92314" count="31" /> Giran Seal
<production id="94595" /> Package: +5 Leather Armor of Nightmare (Light) Armor
</product>
<product id="1025" category="2"> TODO: It has a 33% chance of giving the item, or 33% chance of giving a Package: Helm of Nightmare (Light) Armor (+0) and 33% chance of giving 6 Giran Seals
<ingredient id="92314" count="31" /> Giran Seal
<production id="94596" /> Package: +5 Helm of Nightmare (Light) Armor
</product>
<product id="1026" category="2"> TODO: It has a 33% chance of giving the item, or 33% chance of giving a Package: Gauntlets of Nightmare (Light) Armor (+0) and 33% chance of giving 6 Giran Seals
<ingredient id="92314" count="31" /> Giran Seal
<production id="94597" /> Package: +5 Gauntlets of Nightmare (Light) Armor
</product>
<product id="1027" category="2"> TODO: It has a 33% chance of giving the item, or 33% chance of giving a Package: Boots of Nightmare (Light) Armor (+0) and 33% chance of giving 6 Giran Seals
<ingredient id="92314" count="31" /> Giran Seal
<production id="94598" /> Package: +5 Boots of Nightmare (Light) Armor
</product>
<product id="1028" category="2"> TODO: It has a 33% chance of giving the item, or 33% chance of giving a Package: Majestic Leather Armor (Light) Armor (+0) and 33% chance of giving 6 Giran Seals
<ingredient id="92314" count="31" /> Giran Seal
<production id="94599" /> Package: +5 Majestic Leather Armor (Light) Armor
</product>
<product id="1029" category="2"> TODO: It has a 33% chance of giving the item, or 33% chance of giving a Package: Majestic Circlet (Light) Armor (+0) and 33% chance of giving 6 Giran Seals
<ingredient id="92314" count="31" /> Giran Seal
<production id="94600" /> Package: +5 Majestic Circlet (Light) Armor
</product>
<product id="1030" category="2"> TODO: It has a 33% chance of giving the item, or 33% chance of giving a Package: Majestic Gauntlets (Light) Armor (+0) and 33% chance of giving 6 Giran Seals
<ingredient id="92314" count="31" /> Giran Seal
<production id="94601" /> Package: +5 Majestic Gauntlets (Light) Armor
</product>
<product id="1031" category="2"> TODO: It has a 33% chance of giving the item, or 33% chance of giving a Package: Majestic Boots (Light) Armor (+0) and 33% chance of giving 6 Giran Seals
<ingredient id="92314" count="31" /> Giran Seal
<production id="94602" /> Package: +5 Majestic Boots (Light) Armor
</product>
<product id="1032" category="2"> TODO: It has a 33% chance of giving the item, or 33% chance of giving a Package: Robe of Nightmare (Robe) (+0) and 33% chance of giving 6 Giran Seals
<ingredient id="92314" count="31" /> Giran Seal
<production id="94603" /> Package: +5 Robe of Nightmare (Robe)
</product>
<product id="1033" category="2"> TODO: It has a 33% chance of giving the item, or 33% chance of giving a Package: Helm of Nightmare (Robe) (+0) and 33% chance of giving 6 Giran Seals
<ingredient id="92314" count="31" /> Giran Seal
<production id="94604" /> Package: +5 Helm of Nightmare (Robe)
</product>
<product id="1034" category="2"> TODO: It has a 33% chance of giving the item, or 33% chance of giving a Package: Gauntlets of Nightmare (Robe) (+0) and 33% chance of giving 6 Giran Seals
<ingredient id="92314" count="31" /> Giran Seal
<production id="94605" /> Package: +5 Gauntlets of Nightmare (Robe)
</product>
<product id="1035" category="2"> TODO: It has a 33% chance of giving the item, or 33% chance of giving a Package: Boots of Nightmare (Robe) (+0) and 33% chance of giving 6 Giran Seals
<ingredient id="92314" count="31" /> Giran Seal
<production id="94606" /> Package: +5 Boots of Nightmare (Robe)
</product>
<product id="1036" category="2"> TODO: It has a 33% chance of giving the item, or 33% chance of giving a Package: Majestic Robe (Robe) (+0) and 33% chance of giving 6 Giran Seals
<ingredient id="92314" count="31" /> Giran Seal
<production id="94607" /> Package: +5 Majestic Robe (Robe)
</product>
<product id="1037" category="2"> TODO: It has a 33% chance of giving the item, or 33% chance of giving a Package: Majestic Circlet (Robe) (+0) and 33% chance of giving 6 Giran Seals
<ingredient id="92314" count="31" /> Giran Seal
<production id="94608" /> Package: +5 Majestic Circlet (Robe)
</product>
<product id="1038" category="2"> TODO: It has a 33% chance of giving the item, or 33% chance of giving a Package: Majestic Gauntlets (Robe) (+0) and 33% chance of giving 6 Giran Seals
<ingredient id="92314" count="31" /> Giran Seal
<production id="94609" /> Package: +5 Majestic Gauntlets (Robe)
</product>
<product id="1039" category="2"> TODO: It has a 33% chance of giving the item, or 33% chance of giving a Package: Majestic Boots (Robe) (+0) and 33% chance of giving 6 Giran Seals
<ingredient id="92314" count="31" /> Giran Seal
<production id="94610" /> Package: +5 Majestic Boots (Robe)
</product>
<product id="1040" category="3"> TODO: It has a 50% chance of giving the item, or 50% chance of giving 7 Elixir Powders
<ingredient id="1" count="10" /> Elixir Powder. TODO: I don't have the ID for this item.
<production id="94314" /> Elixir
</product>
-->
</list>

View File

@@ -1,3 +1,24 @@
<?xml version="1.0" encoding="UTF-8"?>
<list enabled="false" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="xsd/PrimeShop.xsd">
<list enabled="true" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="xsd/PrimeShop.xsd">
<!-- cat = 1 - Exping, 2 - Supplies, 3 - Cosmetic, 4 - Specials, 5 - Other -->
<!-- panelType = 0 - None, 1 - Event, 2 - Sale, 3 - New, 4 - Best -->
<!-- recommended = 1 - Top, 2 - Left, 4 - Right -->
<!-- paymentType = 0 - Euro, 1 - Adena, 2 - Hero Coin -->
<!-- on EU 1 NC coin/Prime point shows as 0.01 euros -->
<!-- startSale = unixTime -->
<!-- endSale = unixTime -->
<!-- Supplies -->
<item id="2090029" cat="2" panelType="3" paymentType="0" price="250" recommended="1" startSale="315558000" endSale="2127452400" dayOfWeek="127" startHour="0" startMinute="0" stopHour="23" stopMinute="59" stock="-1" maxStock="-1" salePercent="0" minLevel="0" maxLevel="0" minBirthday="0" maxBirthday="0" restrictionDay="0" availableCount="0">
<item itemId="93628" count="1" /> <!-- L-Coins (1000 pcs.) -->
</item>
<item id="2090030" cat="2" panelType="2" paymentType="0" price="1499" recommended="1" startSale="315558000" endSale="2127452400" dayOfWeek="127" startHour="0" startMinute="0" stopHour="23" stopMinute="59" stock="-1" maxStock="-1" salePercent="0" minLevel="0" maxLevel="0" minBirthday="0" maxBirthday="0" restrictionDay="0" availableCount="0">
<item itemId="91755" count="1" /> <!-- L-Coins (8000 pcs.) -->
</item>
<item id="2090028" cat="2" paymentType="0" price="600" recommended="2" startSale="315558000" endSale="2127452400" dayOfWeek="127" startHour="0" startMinute="0" stopHour="23" stopMinute="59" stock="-1" maxStock="-1" salePercent="0" minLevel="0" maxLevel="0" minBirthday="0" maxBirthday="0" restrictionDay="0" availableCount="0">
<item itemId="93483" count="1" /> <!-- Growth Kit: L-Coins -->
</item>
<item id="2090027" cat="2" paymentType="0" price="999" recommended="4" startSale="315558000" endSale="2127452400" dayOfWeek="127" startHour="0" startMinute="0" stopHour="23" stopMinute="59" stock="-1" maxStock="-1" salePercent="0" minLevel="0" maxLevel="0" minBirthday="0" maxBirthday="0" restrictionDay="0" availableCount="0">
<item itemId="93484" count="1" /> <!-- Grace Kit: L-Coins -->
</item>
</list>

View File

@@ -90,4 +90,6 @@
<teleport id="417" x="-119618" y="51994" z="-832" price="500" /> <!-- Hill of Hope -->
<teleport id="418" x="-109670" y="45283" z="-1344" price="500" /> <!-- Hills of Gold -->
<teleport id="422" x="107698" y="143854" z="-3440" price="1650" /> <!-- Giran Castle Siege Barracks -->
<teleport id="430" x="45753" y="147564" z="-3680" price="200" /> <!-- The First Training Grounds -->
<teleport id="431" x="52642" y="148105" z="-2424" price="200" /> <!-- The Second Training Grounds -->
</list>

View File

@@ -4,30 +4,48 @@
<npc>30840</npc> <!-- Lorenzo -->
</npcs>
<item id="1378" price="20259" /> <!-- Spellbook: Divine Heal -->
<item id="1384" price="39134" /> <!-- Spellbook: Sprint -->
<item id="1380" price="57438" /> <!-- Spellbook: Entangle -->
<item id="1382" price="39134" /> <!-- Spellbook: Power Break -->
<item id="1381" price="47481" /> <!-- Spellbook: Freezing Strike -->
<item id="3038" price="25724" /> <!-- Blueprint: Summon Mechanic Golem -->
<item id="1399" price="8953" /> <!-- Spellbook: Concentration -->
<item id="1394" price="12723" /> <!-- Spellbook: Sleep -->
<item id="1517" price="18057" /> <!-- Spellbook: Body To Mind -->
<item id="1409" price="52417" /> <!-- Spellbook: Slow -->
<item id="1416" price="52417" /> <!-- Spellbook: Curse Chaos -->
<item id="1514" price="8953" /> <!-- Spellbook: Resurrection -->
<item id="1415" price="12723" /> <!-- Spellbook: Dryad Root -->
<item id="1398" price="18057" /> <!-- Spellbook: Focus -->
<item id="1392" price="52417" /> <!-- Spellbook: Berserker Spirit -->
<item id="1401" price="8953" /> <!-- Spellbook: Acumen -->
<item id="1047" price="52417" /> <!-- Spellbook: Light -->
<item id="1385" price="25724" /> <!-- Spellbook: Recharge -->
<item id="1388" price="18057" /> <!-- Spellbook: Mental Shield -->
<item id="1523" price="8953" /> <!-- Amulet: Chant of Shielding -->
<item id="1521" price="1600" /> <!-- Amulet: Chant of Fire -->
<item id="1536" price="18057" /> <!-- Amulet: Seal of Binding -->
<item id="1519" price="31911" /> <!-- Amulet: Pa'agrio's Gift -->
<item id="1518" price="31911" /> <!-- Amulet: Chant of Flame -->
<item id="1530" price="52417" /> <!-- Amulet: Seal of Slow -->
<item id="1391" price="18057" /> <!-- Spellbook: Empower -->
<item id="1097" price="8953" /> <!-- Spellbook: Drain HP -->
<item id="1519" price="14400" /> <!-- Amulet: Chant of Encouragement -->
<item id="1521" price="48000" /> <!-- Amulet: Chant of Wild Magic -->
<item id="4205" price="48000" /> <!-- Amulet: Chant of the Berserker Spirit -->
<item id="1518" price="31912" /> <!-- Amulet: Chant of Insight -->
<item id="3116" price="120000" /> <!-- Amulet: Chant of Haste -->
<item id="1523" price="14400" /> <!-- Amulet: Chant of Focus -->
<item id="91837" price="14400" /> <!-- Amulet: Chant of Purity -->
<item id="3118" price="14400" /> <!-- Amulet: Chant of the Death Whisper -->
<item id="1530" price="52418" /> <!-- Amulet: Seal of Slowing -->
<item id="1536" price="18058" /> <!-- Amulet: Seal of Bindings -->
<item id="1378" price="20260" /> <!-- Spellbook - Fast Heal -->
<item id="1391" price="14400" /> <!-- Spellbook - Inspire -->
<item id="1514" price="8954" /> <!-- Spellbook - Resurrection -->
<item id="5815" price="48000" /> <!-- Spellbook - Wild Magic -->
<item id="1392" price="48000" /> <!-- Spellbook - Spirit of the Berserker -->
<item id="1409" price="52418" /> <!-- Spellbook - Slow -->
<item id="1381" price="47482" /> <!-- Spellbook - Freeze Weapon -->
<item id="93391" price="1200000" /> <!-- Spellbook - Lightning Call -->
<item id="93389" price="1200000" /> <!-- Spellbook - Call of the Flame -->
<item id="93390" price="1200000" /> <!-- Spellbook - Call of Cold -->
<item id="1399" price="8954" /> <!-- Spellbook - Concentration -->
<item id="1415" price="12724" /> <!-- Spellbook - Dryad Root -->
<item id="1097" price="8954" /> <!-- Spellbook - Life Steal -->
<item id="3944" price="52418" /> <!-- Spellbook - Light -->
<item id="1388" price="18058" /> <!-- Spellbook - Mental Shield -->
<item id="1380" price="57438" /> <!-- Spellbook - Entangle -->
<item id="91946" price="500000" /> <!-- Spellbook - Mount Griffin -->
<item id="90038" price="500000" /> <!-- Spellbook - Ride Golden Lion -->
<item id="90041" price="500000" /> <!-- Spellbook - Ride Kukura -->
<item id="90039" price="500000" /> <!-- Spellbook - Ride Pegasus -->
<item id="90040" price="500000" /> <!-- Spellbook: Ride Sabretooth Cougar -->
<item id="93383" price="500000" /> <!-- Spellbook - Mount Nightmare Steed -->
<item id="90042" price="500000" /> <!-- Spellbook - Mount Black Bear -->
<item id="1416" price="52418" /> <!-- Spellbook: Curse of Chaos -->
<item id="1401" price="8954" /> <!-- Spellbook - Insight -->
<item id="1517" price="18058" /> <!-- Spellbook - Self-flagellation -->
<item id="1382" price="39135" /> <!-- Spellbook - Break of Might -->
<item id="1384" price="39135" /> <!-- Spellbook - Sprint -->
<item id="1385" price="25725" /> <!-- Spellbook - Mana Boost -->
<item id="3099" price="120000" /> <!-- Spellbook - Haste -->
<item id="1394" price="12724" /> <!-- Spellbook: Sleep -->
<item id="1398" price="14400" /> <!-- Spellbook - Focus -->
<item id="8397" price="14400" /> <!-- Spellbook - Purity -->
<item id="3101" price="14400" /> <!-- Spellbook - Death Whisper -->
</list>

View File

@@ -0,0 +1,24 @@
<?xml version="1.0" encoding="UTF-8"?>
<list xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../xsd/buylist.xsd">
<npcs>
<npc>34139</npc> <!-- Mathorn -->
</npcs>
<item id="91927" price="23" /> <!-- Soulshot -->
<item id="91928" price="34" /> <!-- Spiritshot -->
<item id="91929" price="57" /> <!-- Blessed Soulshot -->
<item id="91930" price="86" /> <!-- Blessed Spiritshot -->
<item id="17" price="2" /> <!-- Wooden Arrow -->
<item id="1341" price="3" /> <!-- Bone Arrow -->
<item id="1831" price="86" /> <!-- Antidote -->
<item id="1833" price="86" /> <!-- Bandage -->
<item id="734" price="1380" /> <!-- Wind Walk Potion -->
<item id="735" price="2760" /> <!-- Haste Potion -->
<item id="6035" price="2760" /> <!-- Magic Haste Potion -->
<item id="736" price="460" /> <!-- Scroll of Escape -->
<item id="737" price="2300" /> <!-- Scroll of Resurrection -->
<item id="3031" price="460" /> <!-- Spirit Ore -->
<item id="1785" price="287" /> <!-- Soulstone -->
<item id="5589" price="115" /> <!-- Momentum Stone -->
<item id="5192" price="115" /> <!-- Magic Rope (D-grade) -->
<item id="91912" price="34" /> <!-- HP Potion -->
</list>

View File

@@ -8,7 +8,7 @@
<tr>
<td width="50"></td>
<td align="center" width="695" height="30" align="left">
<img src="l2ui.bbs_lineage2" width="128" height="16" >
<font name="hs12">&$2306;</font>
</td>
</tr>
</table>

View File

@@ -25,7 +25,7 @@
<table width=270 cellpadding="4">
<tr>
<td>Coin Type:</td>
<td><combobox width=120 height=17 var=ebox list=Adena;AncientAdena;FestivalAdena;BlueEva;GoldEinhasad;SilverShilen;BloodyPaagrio;FantasyIsleCoin></td>
<td><combobox width=120 height=17 var=ebox list=Adena;AncientAdena;FestivalAdena;BlueEva;GoldEinhasad;SilverShilen;BloodyPaagrio;FantasyIsleCoin;LCoin></td>
</tr>
<tr>
<td>Amount:</td>

View File

@@ -19,6 +19,7 @@
<tr>
<td><button value="Dwarf" action="bypass -h admin_html setclass/dwarf.htm" width="70" height="15" back="L2UI_CT1.Button_DF_Down" fore="L2UI_CT1.Button_DF"></td>
<td><button value="Kamael" action="bypass -h admin_html setclass/kamael.htm" width="70" height="15" back="L2UI_CT1.Button_DF_Down" fore="L2UI_CT1.Button_DF"></td>
<td><button value="D. Knight" action="bypass -h admin_html setclass/death_knight.htm" width="70" height="15" back="L2UI_CT1.Button_DF_Down" fore="L2UI_CT1.Button_DF"></td>
</tr>
</table>
<table width="302" border="0" bgcolor="999999">

View File

@@ -19,6 +19,7 @@
<tr>
<td><button value="Dwarf" action="bypass -h admin_html setclass/dwarf.htm" width="70" height="15" back="L2UI_CT1.Button_DF_Down" fore="L2UI_CT1.Button_DF"></td>
<td><button value="Kamael" action="bypass -h admin_html setclass/kamael.htm" width="70" height="15" back="L2UI_CT1.Button_DF_Down" fore="L2UI_CT1.Button_DF"></td>
<td><button value="D. Knight" action="bypass -h admin_html setclass/death_knight.htm" width="70" height="15" back="L2UI_CT1.Button_DF_Down" fore="L2UI_CT1.Button_DF"></td>
</tr>
</table>
<table width="302" border="0" bgcolor="999999">

View File

@@ -0,0 +1,53 @@
<html><body>
<title>//setclass Menu</title>
<table width="260"><tr>
<td width="40"><center><button value="Back to Main Menu" action="bypass -h admin_admin" width="292" height="20" back="L2UI_CT1.Button_DF_Down" fore="L2UI_CT1.Button_DF"></center></td>
</tr></table>
<table width="260" border="0" bgcolor="000000">
<tr>
<td><button value="Human F." action="bypass -h admin_html setclass/human_fighter.htm" width="70" height="15" back="L2UI_CT1.Button_DF_Down" fore="L2UI_CT1.Button_DF"></td>
<td><button value="Human M." action="bypass -h admin_html setclass/human_mage.htm" width="70" height="15" back="L2UI_CT1.Button_DF_Down" fore="L2UI_CT1.Button_DF"></td>
<td><button value="Elf F." action="bypass -h admin_html setclass/elf_fighter.htm" width="70" height="15" back="L2UI_CT1.Button_DF_Down" fore="L2UI_CT1.Button_DF"></td>
<td><button value="Elf M." action="bypass -h admin_html setclass/elf_mage.htm" width="70" height="15" back="L2UI_CT1.Button_DF_Down" fore="L2UI_CT1.Button_DF"></td>
</tr>
<tr>
<td><button value="Dark Elf F." action="bypass -h admin_html setclass/dark_elf_fighter.htm" width="70" height="15" back="L2UI_CT1.Button_DF_Down" fore="L2UI_CT1.Button_DF"></td>
<td><button value="Dark Elf M." action="bypass -h admin_html setclass/dark_elf_mage.htm" width="70" height="15" back="L2UI_CT1.Button_DF_Down" fore="L2UI_CT1.Button_DF"></td>
<td><button value="Orc F." action="bypass -h admin_html setclass/orc_fighter.htm" width="70" height="15" back="L2UI_CT1.Button_DF_Down" fore="L2UI_CT1.Button_DF"></td>
<td><button value="Orc M." action="bypass -h admin_html setclass/orc_mage.htm" width="70" height="15" back="L2UI_CT1.Button_DF_Down" fore="L2UI_CT1.Button_DF"></td>
</tr>
<tr>
<td><button value="Dwarf" action="bypass -h admin_html setclass/dwarf.htm" width="70" height="15" back="L2UI_CT1.Button_DF_Down" fore="L2UI_CT1.Button_DF"></td>
<td><button value="Kamael" action="bypass -h admin_html setclass/kamael.htm" width="70" height="15" back="L2UI_CT1.Button_DF_Down" fore="L2UI_CT1.Button_DF"></td>
<td><button value="D. Knight" action="bypass -h admin_html setclass/death_knight.htm" width="70" height="15" back="L2UI_CT1.Button_DF_Down" fore="L2UI_CT1.Button_DF"></td>
</tr>
</table>
<table width="302" border="0" bgcolor="999999">
<tr>
<td><button value="H. Pilgrim" action="bypass -h admin_setclass 196" width="86" height="20" back="L2UI_CT1.Button_DF_Down" fore="L2UI_CT1.Button_DF"></td>
<td><button value="E. Pilgrim" action="bypass -h admin_setclass 200" width="86" height="20" back="L2UI_CT1.Button_DF_Down" fore="L2UI_CT1.Button_DF"></td>
<td><button value="D. Pilgrim" action="bypass -h admin_setclass 204" width="86" height="20" back="L2UI_CT1.Button_DF_Down" fore="L2UI_CT1.Button_DF"></td>
</tr>
</table>
<table width="302" border="0" bgcolor="666666">
<tr>
<td><button value="H. Blade" action="bypass -h admin_setclass 197" width="86" height="20" back="L2UI_CT1.Button_DF_Down" fore="L2UI_CT1.Button_DF"></td>
<td><button value="E. Blade" action="bypass -h admin_setclass 201" width="86" height="20" back="L2UI_CT1.Button_DF_Down" fore="L2UI_CT1.Button_DF"></td>
<td><button value="D. Blade" action="bypass -h admin_setclass 205" width="86" height="20" back="L2UI_CT1.Button_DF_Down" fore="L2UI_CT1.Button_DF"></td>
</tr>
</table>
<table width="302" border="0" bgcolor="0066FF">
<tr>
<td><button value="H. Messenger" action="bypass -h admin_setclass 198" width="86" height="20" back="L2UI_CT1.Button_DF_Down" fore="L2UI_CT1.Button_DF"></td>
<td><button value="E. Messenger" action="bypass -h admin_setclass 202" width="86" height="20" back="L2UI_CT1.Button_DF_Down" fore="L2UI_CT1.Button_DF"></td>
<td><button value="D. Messenger" action="bypass -h admin_setclass 206" width="86" height="20" back="L2UI_CT1.Button_DF_Down" fore="L2UI_CT1.Button_DF"></td>
</tr>
</table>
<table width="302" border="0" bgcolor="0066FF">
<tr>
<td><button value="H. Knight" action="bypass -h admin_setclass 199" width="86" height="20" back="L2UI_CT1.Button_DF_Down" fore="L2UI_CT1.Button_DF"></td>
<td><button value="E. Knight" action="bypass -h admin_setclass 203" width="86" height="20" back="L2UI_CT1.Button_DF_Down" fore="L2UI_CT1.Button_DF"></td>
<td><button value="D. Knight" action="bypass -h admin_setclass 207" width="86" height="20" back="L2UI_CT1.Button_DF_Down" fore="L2UI_CT1.Button_DF"></td>
</tr>
</table>
</body></html>

View File

@@ -19,6 +19,7 @@
<tr>
<td><button value="Dwarf" action="bypass -h admin_html setclass/dwarf.htm" width="70" height="15" back="L2UI_CT1.Button_DF_Down" fore="L2UI_CT1.Button_DF"></td>
<td><button value="Kamael" action="bypass -h admin_html setclass/kamael.htm" width="70" height="15" back="L2UI_CT1.Button_DF_Down" fore="L2UI_CT1.Button_DF"></td>
<td><button value="D. Knight" action="bypass -h admin_html setclass/death_knight.htm" width="70" height="15" back="L2UI_CT1.Button_DF_Down" fore="L2UI_CT1.Button_DF"></td>
</tr>
</table>
<table width="302" border="0" bgcolor="999999">

View File

@@ -19,6 +19,7 @@
<tr>
<td><button value="Dwarf" action="bypass -h admin_html setclass/dwarf.htm" width="70" height="15" back="L2UI_CT1.Button_DF_Down" fore="L2UI_CT1.Button_DF"></td>
<td><button value="Kamael" action="bypass -h admin_html setclass/kamael.htm" width="70" height="15" back="L2UI_CT1.Button_DF_Down" fore="L2UI_CT1.Button_DF"></td>
<td><button value="D. Knight" action="bypass -h admin_html setclass/death_knight.htm" width="70" height="15" back="L2UI_CT1.Button_DF_Down" fore="L2UI_CT1.Button_DF"></td>
</tr>
</table>
<table width="302" border="0" bgcolor="999999">

View File

@@ -19,6 +19,7 @@
<tr>
<td><button value="Dwarf" action="bypass -h admin_html setclass/dwarf.htm" width="70" height="15" back="L2UI_CT1.Button_DF_Down" fore="L2UI_CT1.Button_DF"></td>
<td><button value="Kamael" action="bypass -h admin_html setclass/kamael.htm" width="70" height="15" back="L2UI_CT1.Button_DF_Down" fore="L2UI_CT1.Button_DF"></td>
<td><button value="D. Knight" action="bypass -h admin_html setclass/death_knight.htm" width="70" height="15" back="L2UI_CT1.Button_DF_Down" fore="L2UI_CT1.Button_DF"></td>
</tr>
</table>
<table width="302" border="0" bgcolor="999999">

View File

@@ -19,6 +19,7 @@
<tr>
<td><button value="Dwarf" action="bypass -h admin_html setclass/dwarf.htm" width="70" height="15" back="L2UI_CT1.Button_DF_Down" fore="L2UI_CT1.Button_DF"></td>
<td><button value="Kamael" action="bypass -h admin_html setclass/kamael.htm" width="70" height="15" back="L2UI_CT1.Button_DF_Down" fore="L2UI_CT1.Button_DF"></td>
<td><button value="D. Knight" action="bypass -h admin_html setclass/death_knight.htm" width="70" height="15" back="L2UI_CT1.Button_DF_Down" fore="L2UI_CT1.Button_DF"></td>
</tr>
</table>
<table width="302" border="0" bgcolor="999999">

View File

@@ -19,6 +19,7 @@
<tr>
<td><button value="Dwarf" action="bypass -h admin_html setclass/dwarf.htm" width="70" height="15" back="L2UI_CT1.Button_DF_Down" fore="L2UI_CT1.Button_DF"></td>
<td><button value="Kamael" action="bypass -h admin_html setclass/kamael.htm" width="70" height="15" back="L2UI_CT1.Button_DF_Down" fore="L2UI_CT1.Button_DF"></td>
<td><button value="D. Knight" action="bypass -h admin_html setclass/death_knight.htm" width="70" height="15" back="L2UI_CT1.Button_DF_Down" fore="L2UI_CT1.Button_DF"></td>
</tr>
</table>
<table width="302" border="0" bgcolor="999999">

View File

@@ -19,6 +19,7 @@
<tr>
<td><button value="Dwarf" action="bypass -h admin_html setclass/dwarf.htm" width="70" height="15" back="L2UI_CT1.Button_DF_Down" fore="L2UI_CT1.Button_DF"></td>
<td><button value="Kamael" action="bypass -h admin_html setclass/kamael.htm" width="70" height="15" back="L2UI_CT1.Button_DF_Down" fore="L2UI_CT1.Button_DF"></td>
<td><button value="D. Knight" action="bypass -h admin_html setclass/death_knight.htm" width="70" height="15" back="L2UI_CT1.Button_DF_Down" fore="L2UI_CT1.Button_DF"></td>
</tr>
</table>
<table width="308" border="0" bgcolor="999999">

View File

@@ -20,6 +20,7 @@
<tr>
<td><button value="Dwarf" action="bypass -h admin_html setclass/dwarf.htm" width="70" height="15" back="L2UI_CT1.Button_DF_Down" fore="L2UI_CT1.Button_DF"></td>
<td><button value="Kamael" action="bypass -h admin_html setclass/kamael.htm" width="70" height="15" back="L2UI_CT1.Button_DF_Down" fore="L2UI_CT1.Button_DF"></td>
<td><button value="D. Knight" action="bypass -h admin_html setclass/death_knight.htm" width="70" height="15" back="L2UI_CT1.Button_DF_Down" fore="L2UI_CT1.Button_DF"></td>
</tr>
</table>
<table width="302" border="0" bgcolor="999999">

View File

@@ -19,6 +19,7 @@
<tr>
<td><button value="Dwarf" action="bypass -h admin_html setclass/dwarf.htm" width="70" height="15" back="L2UI_CT1.Button_DF_Down" fore="L2UI_CT1.Button_DF"></td>
<td><button value="Kamael" action="bypass -h admin_html setclass/kamael.htm" width="70" height="15" back="L2UI_CT1.Button_DF_Down" fore="L2UI_CT1.Button_DF"></td>
<td><button value="D. Knight" action="bypass -h admin_html setclass/death_knight.htm" width="70" height="15" back="L2UI_CT1.Button_DF_Down" fore="L2UI_CT1.Button_DF"></td>
</tr>
</table>
<table width="302" border="0" bgcolor="999999">

View File

@@ -0,0 +1,5 @@
<html><body>Head Trainer Kilremange:<br>
You don't like the life of a Death Knight? You should be proud, what's the use of suffering?<br>
Sure, out lot might be hard and sometimes we have to do things we don't want to do, but even in these dire circumstances it is possible to find the strength to fight and win.<br>
<Button ALIGN=LEFT ICON="QUEST" action="bypass -h npc_%objectId%_Quest">Quest</Button>
</body></html>

View File

@@ -0,0 +1,5 @@
<html><body>Quartermaster Mathorn:<br>
Death Knights must always be training. Their fate must be a source of pride, not shame.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h npc_%objectId%_Buy 3413901">Buy supplies and minerals</Button>
<Button ALIGN=LEFT ICON="QUEST" action="bypass -h npc_%objectId%_Quest">Quest</Button>
</body></html>

View File

@@ -0,0 +1,5 @@
<html><body>Gatekeeper Marillia:<br>
What? You need to teleport? Sure, I'll help you.<br>
<Button ALIGN=LEFT ICON="TELEPORT" action="bypass -h npc_%objectId%_showTeleportList">Teleport</Button>
<Button ALIGN=LEFT ICON="QUEST" action="bypass -h npc_%objectId%_Quest">Quest</Button>
</body></html>

View File

@@ -0,0 +1,7 @@
<html><body>Warehouse Keeper Ryuchia:<br>
<center>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h npc_%objectId%_DepositP">Deposit an item (Private Warehouse)</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h npc_%objectId%_WithdrawP">Withdraw an item (Private Warehouse)</Button>
<Button ALIGN=LEFT ICON="RETURN" action="bypass -h npc_%objectId%_Chat 0">Back</Button>
</center>
</body></html>

View File

@@ -0,0 +1,7 @@
<html><body>Warehouse Keeper Ryuchia:<br>
<center>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h npc_%objectId%_DepositC" msg="1039">Deposit Item (Clan Warehouse)</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h npc_%objectId%_WithdrawC">Withdraw Item (Clan Warehouse)</Button>
<Button ALIGN=LEFT ICON="RETURN" action="bypass -h npc_%objectId%_Chat 0">Back</Button>
</center>
</body></html>

View File

@@ -0,0 +1,6 @@
<html><body>Warehouse Keeper Ryuchia:<br>
If you want to leave anything here, let me know. I will keep your items safe and sound.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h npc_%objectId%_Chat 1">Private Warehouse</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h npc_%objectId%_Chat 2">Clan warehouse</Button>
<Button ALIGN=LEFT ICON="QUEST" action="bypass -h npc_%objectId%_Quest">Quest</Button>
</body></html>

View File

@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- TODO: Remove "castle" attributes from here, it should be loaded from TaxZones -->
<list enabled="true" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../xsd/MapRegion.xsd">
<!-- Death Knight Base -->
<region name="death_knight_base" town="Death Knight Base" castle="2" locId="916" bbs="5">
<respawnPoint X="47485" Y="152730" Z="-2728" />
<respawnPoint X="48120" Y="147377" Z="-3431" isChaotic="true" />
<respawnPoint X="36218" Y="148110" Z="-3644" isChaotic="true" />
<map X="21" Y="22" />
</region>
</list>

View File

@@ -30,6 +30,5 @@
<map X="20" Y="21" />
<map X="20" Y="22" />
<map X="21" Y="21" />
<map X="21" Y="22" />
</region>
</list>

View File

@@ -144,7 +144,7 @@ public class Arushinai extends AbstractNpcAI
return null;
}
player.sendPacket(SystemMessageId.YOU_ARE_NOT_IN_A_PARTY);
player.sendPacket(SystemMessageId.YOU_ARE_NOT_IN_A_PARTY_AND_CAN_T_SEND_MESSAGES_TO_THE_PARTY_CHAT);
return null;
}

View File

@@ -198,7 +198,7 @@ public final class LimitBarrier extends AbstractNpcAI
npc.abortAttack();
npc.abortCast();
npc.doCast(LIMIT_BARRIER.getSkill());
npc.broadcastPacket(new ExShowScreenMessage(NpcStringId.THE_RAID_BOSS_USES_THE_LIMIT_BARRIER_NFOCUS_YOUR_ATTACKS_TO_DESTROY_THE_LIMIT_BARRIER_IN_15_SEC, 2, 5000, true));
npc.broadcastPacket(new ExShowScreenMessage(NpcStringId.THE_RAID_BOSS_USES_THE_LIMIT_BARRIER_NFOCUS_YOUR_ATTACKS_TO_DESTROY_THE_LIMIT_BARRIER_IN_15_SECONDS, 2, 5000, true));
startQuestTimer("RESTORE_FULL_HP", 15000, npc, attacker);
}
}
@@ -210,7 +210,7 @@ public final class LimitBarrier extends AbstractNpcAI
npc.abortAttack();
npc.abortCast();
npc.doCast(LIMIT_BARRIER.getSkill());
npc.broadcastPacket(new ExShowScreenMessage(NpcStringId.THE_RAID_BOSS_USES_THE_LIMIT_BARRIER_NFOCUS_YOUR_ATTACKS_TO_DESTROY_THE_LIMIT_BARRIER_IN_15_SEC, 2, 5000, true));
npc.broadcastPacket(new ExShowScreenMessage(NpcStringId.THE_RAID_BOSS_USES_THE_LIMIT_BARRIER_NFOCUS_YOUR_ATTACKS_TO_DESTROY_THE_LIMIT_BARRIER_IN_15_SECONDS, 2, 5000, true));
startQuestTimer("RESTORE_FULL_HP", 15000, npc, attacker);
}
}
@@ -222,7 +222,7 @@ public final class LimitBarrier extends AbstractNpcAI
npc.abortAttack();
npc.abortCast();
npc.doCast(LIMIT_BARRIER.getSkill());
npc.broadcastPacket(new ExShowScreenMessage(NpcStringId.THE_RAID_BOSS_USES_THE_LIMIT_BARRIER_NFOCUS_YOUR_ATTACKS_TO_DESTROY_THE_LIMIT_BARRIER_IN_15_SEC, 2, 5000, true));
npc.broadcastPacket(new ExShowScreenMessage(NpcStringId.THE_RAID_BOSS_USES_THE_LIMIT_BARRIER_NFOCUS_YOUR_ATTACKS_TO_DESTROY_THE_LIMIT_BARRIER_IN_15_SECONDS, 2, 5000, true));
startQuestTimer("RESTORE_FULL_HP", 15000, npc, attacker);
}
}

View File

@@ -1229,7 +1229,7 @@ public class CastleChamberlain extends AbstractNpcAI
{
if (manor.isManorApproved())
{
player.sendPacket(SystemMessageId.A_MANOR_CANNOT_BE_SET_UP_BETWEEN_4_30_AM_AND_8_PM);
player.sendPacket(SystemMessageId.A_MANOR_CANNOT_BE_SET_UP_BETWEEN_6_00_AM_AND_8_00_PM);
return;
}
player.sendPacket(new ExShowSeedSetting(castleId));
@@ -1239,7 +1239,7 @@ public class CastleChamberlain extends AbstractNpcAI
{
if (manor.isManorApproved())
{
player.sendPacket(SystemMessageId.A_MANOR_CANNOT_BE_SET_UP_BETWEEN_4_30_AM_AND_8_PM);
player.sendPacket(SystemMessageId.A_MANOR_CANNOT_BE_SET_UP_BETWEEN_6_00_AM_AND_8_00_PM);
return;
}
player.sendPacket(new ExShowCropSetting(castleId));

View File

@@ -337,7 +337,7 @@ public class ClanHallAuctioneer extends AbstractNpcAI
final ClanHall playerClanHall = ClanHallData.getInstance().getClanHallByClan(clan);
if (playerClanHall != null)
{
player.sendPacket(SystemMessageId.EMPTY_462);
player.sendPacket(SystemMessageId.YOU_DO_NOT_MEET_THE_REQUIREMENTS_TO_PARTICIPATE_IN_AN_AUCTION);
return;
}

View File

@@ -349,7 +349,7 @@ public class ClanHallManager extends AbstractNpcAI
{
final int funcVal = (int) oldFunc.getTemplate().getValue();
htmltext = getHtm(player, "ClanHallManager-manageFuncAlreadySet.html");
htmltext = htmltext.replace("%funcEffect%", "<fstring p1=\"" + (funcVal > 0 ? funcVal : oldFunc.getLevel()) + "\">" + (funcVal > 0 ? NpcStringId.S1.getId() : NpcStringId.STAGE_S1.getId()) + "</fstring>");
htmltext = htmltext.replace("%funcEffect%", "<fstring p1=\"" + (funcVal > 0 ? funcVal : oldFunc.getLevel()) + "\">" + (funcVal > 0 ? NpcStringId.S1.getId() : NpcStringId.LV_S1.getId()) + "</fstring>");
}
else if ((funcId >= 1) && (funcId <= 8))
{

View File

@@ -279,7 +279,7 @@ public class OlyManager extends AbstractNpcAI implements IBypassHandler
{
if (!Olympiad.getInstance().inCompPeriod())
{
player.sendPacket(SystemMessageId.THE_OLYMPIAD_GAMES_ARE_NOT_CURRENTLY_IN_PROGRESS);
player.sendPacket(SystemMessageId.THE_OLYMPIAD_IS_NOT_HELD_RIGHT_NOW);
return false;
}
@@ -296,7 +296,7 @@ public class OlyManager extends AbstractNpcAI implements IBypassHandler
}
else if (!Olympiad.getInstance().inCompPeriod())
{
player.sendPacket(SystemMessageId.THE_OLYMPIAD_GAMES_ARE_NOT_CURRENTLY_IN_PROGRESS);
player.sendPacket(SystemMessageId.THE_OLYMPIAD_IS_NOT_HELD_RIGHT_NOW);
return false;
}
else if (player.isOnEvent())

View File

@@ -26,7 +26,7 @@ import org.l2jmobius.gameserver.model.events.annotations.RegisterEvent;
import org.l2jmobius.gameserver.model.events.annotations.RegisterType;
import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerLevelChanged;
import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerLogin;
import org.l2jmobius.gameserver.network.serverpackets.classchange.ExRequestClassChangeUi;
import org.l2jmobius.gameserver.network.serverpackets.classchange.ExClassChangeSetAlarm;
import ai.AbstractNpcAI;
@@ -58,7 +58,7 @@ public class SecondClassChange extends AbstractNpcAI
return;
}
player.sendPacket(ExRequestClassChangeUi.STATIC_PACKET);
player.sendPacket(ExClassChangeSetAlarm.STATIC_PACKET);
}
@RegisterEvent(EventType.ON_PLAYER_LOGIN)
@@ -81,7 +81,7 @@ public class SecondClassChange extends AbstractNpcAI
return;
}
player.sendPacket(ExRequestClassChangeUi.STATIC_PACKET);
player.sendPacket(ExClassChangeSetAlarm.STATIC_PACKET);
}
public static void main(String[] args)

View File

@@ -0,0 +1,48 @@
/*
* This file is part of the L2J Mobius project.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package ai.others;
import org.l2jmobius.gameserver.model.actor.Npc;
import ai.AbstractNpcAI;
/**
* @author Mobius
*/
public class TrainingDummy extends AbstractNpcAI
{
// NPC
private static final int TRAINING_DUMMY = 22183;
private TrainingDummy()
{
addSpawnId(TRAINING_DUMMY);
}
@Override
public String onSpawn(Npc npc)
{
npc.disableCoreAI(true);
npc.setImmobilized(true);
return super.onSpawn(npc);
}
public static void main(String[] args)
{
new TrainingDummy();
}
}

View File

@@ -0,0 +1,8 @@
<html><body>Event Manager Augustina:<br>
Hello! My name is Augustina. I came here to celebrate the Blossom festival. But I've been awfully busy lately, and I've been late getting ready, so it's only now that I realize some of the items are missing. I can't have a celebration without them.<br>
You look like a brave warrior. Therefore, I ask for your help in returning the missing item! Of course, not for nothing. I have special gifts for my assistants.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest BlossomFestival reward">Get Augustina's Daily Gift Box</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h npc_%objectId%_multisell 3416301">Exchange Augustina's Seeds for useful items</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest BlossomFestival 34163-02.html">Ask about preparations to the Blosson festival</Button>
<!-- <Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest BlossomFestival 34163-03.html">Event duration and item deletion</Button> -->
</body></html>

View File

@@ -0,0 +1,7 @@
<html><body>Event Manager Augustina:<br>
This year is really stressing for everybody, and I would really like to lighten up the mood somehow.<br>
That is why I've decided to plant beautiful flowers, but unfortunately all my seeds have been lost. Then I've heard about people finding boxes with seeds all over the world! I think those are mine! But how am I going to collect them?<br>
If you find Augustina's Chests while traveling, could you please get the seeds out of them and bring them back to me?<br>
I'll exchange them for useful items, so come back any time.<br>
<Button ALIGN=LEFT ICON="RETURN" action="bypass -h npc_%objectId%_Chat 0">Back</Button>
</body></html>

View File

@@ -0,0 +1,19 @@
<html><body>Event will last from <font color="LEVEL">August 19 to September 16</font>.<br>
<font color="LEVEL">On Septeber 16</font> the main items will be deleted:<br1>
-Augustina's Coupon<br1>
-Augustina's Seeds<br1>
-Shiny Jewelry Box - Event<br1>
-Augustina's Essence - Event<br1>
-HP Recovery Potion - Event<br1>
-My teleport Scroll (obtained during the event)<br1>
-Augustina's Daily Gift Box<br1>
-Augustina's Support Box Lv. 1 (all levels)<br1>
-Augustina's Support Box Lv. 2 (all levels)<br1>
-Talisman Fortune Box<br1>
-Agathion Pack<br>
<font color="LEVEL">On September 30</font> the additional items will be deleted:<br1>
-Sayha's Cookie - Event<br1>
-Scroll: Enchant Attack - Event<br1>
-scroll: Enchant Protection - Event<br>
<Button ALIGN=LEFT ICON="RETURN" action="bypass -h npc_%objectId%_Chat 0">Back</Button>
</body></html>

View File

@@ -0,0 +1,5 @@
<html><body>Event Manager Augustina:<br>
Augustina's Daily Gift Box can be obtained only by characters of Lv. 60+.<br>
Come back when you get stronger!<br>
<Button ALIGN=LEFT ICON="RETURN" action="bypass -h npc_%objectId%_Chat 0">Back</Button>
</body></html>

View File

@@ -0,0 +1,5 @@
<html><body>Event Manager Augustina:<br>
It is no time yet to receive your gift.<br1>
Try again later.<br>
<Button ALIGN=LEFT ICON="RETURN" action="bypass -h npc_%objectId%_Chat 0">Back</Button>
</body></html>

View File

@@ -0,0 +1,88 @@
/*
* This file is part of the L2J Mobius project.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package events.BlossomFestival;
import org.l2jmobius.gameserver.model.actor.Npc;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
import org.l2jmobius.gameserver.model.quest.LongTimeEvent;
/**
* @author Mobius
*/
public class BlossomFestival extends LongTimeEvent
{
// NPC
private static final int AUGUSTINA = 34163;
// Item
private static final int REWARD = 94448;
// Misc
private static final String REWARD_VAR = "AUGUSTINA_REWARD_VAR";
private static final Object REWARD_LOCK = new Object();
private BlossomFestival()
{
addFirstTalkId(AUGUSTINA);
addTalkId(AUGUSTINA);
addSpawnId(AUGUSTINA);
}
@Override
public String onAdvEvent(String event, Npc npc, PlayerInstance player)
{
switch (event)
{
case "34163-02.html":
case "34163-03.html":
{
return event;
}
case "reward":
{
if (player.getLevel() < 60)
{
return "34163-04.html";
}
synchronized (REWARD_LOCK)
{
final long currentTime = System.currentTimeMillis();
if (player.getVariables().getLong(REWARD_VAR, 0) < currentTime)
{
player.getVariables().set(REWARD_VAR, currentTime + 86400000); // 24 hours
giveItems(player, REWARD, 1);
}
else
{
return "34163-05.html";
}
}
}
}
return null;
}
@Override
public String onFirstTalk(Npc npc, PlayerInstance player)
{
return "34163-01.html";
}
public static void main(String[] args)
{
new BlossomFestival();
}
}

View File

@@ -0,0 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<event name="Blossom Festival" active="19 08 2020-16 10 2029" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../xsd/eventConfig.xsd">
<droplist>
<add item="94446" min="1" max="1" chance="1%" minLevel="40" /> <!-- Augustina's Seed -->
</droplist>
<spawnlist>
<add npc="34163" x="83332" y="149161" z="-3384" heading="49151" /> <!-- Augustina -->
</spawnlist>
</event>

View File

@@ -225,6 +225,7 @@ public class EffectMasterHandler
EffectHandler.getInstance().registerHandler("MaxHp", MaxHp::new);
EffectHandler.getInstance().registerHandler("MaxMagicCriticalRate", MaxMagicCriticalRate::new);
EffectHandler.getInstance().registerHandler("MaxMp", MaxMp::new);
EffectHandler.getInstance().registerHandler("ModifyDeathPoints", ModifyDeathPoints::new);
EffectHandler.getInstance().registerHandler("ModifyVital", ModifyVital::new);
EffectHandler.getInstance().registerHandler("Mp", Mp::new);
EffectHandler.getInstance().registerHandler("MpConsumePerLevel", MpConsumePerLevel::new);

View File

@@ -52,6 +52,7 @@ public class SkillConditionMasterHandler
SkillConditionHandler.getInstance().registerHandler("CheckLevel", CheckLevelSkillCondition::new);
SkillConditionHandler.getInstance().registerHandler("CheckSex", CheckSexSkillCondition::new);
SkillConditionHandler.getInstance().registerHandler("ConsumeBody", ConsumeBodySkillCondition::new);
SkillConditionHandler.getInstance().registerHandler("DeathPoints", DeathPointsSkillCondition::new);
SkillConditionHandler.getInstance().registerHandler("EnergySaved", EnergySavedSkillCondition::new);
SkillConditionHandler.getInstance().registerHandler("EquipArmor", EquipArmorSkillCondition::new);
SkillConditionHandler.getInstance().registerHandler("EquipShield", EquipShieldSkillCondition::new);

View File

@@ -348,6 +348,10 @@ public class AdminCreateItem implements IAdminCommandHandler
{
id = 13067;
}
else if (name.equalsIgnoreCase("lcoin"))
{
id = 91663;
}
else
{
id = 0;

View File

@@ -411,6 +411,11 @@ public class AdminEditChar implements IAdminCommandHandler
{
player.getAppearance().setFemale();
}
// Death Knight checks.
if ((classidval > 195) && (classidval < 208))
{
player.getAppearance().setMale();
}
final String newclass = ClassListData.getInstance().getClass(player.getClassId()).getClassName();
// if (player.isInCategory(CategoryType.SIXTH_CLASS_GROUP))

View File

@@ -53,7 +53,7 @@ public class AdminLevel implements IAdminCommandHandler
{
if ((targetChar != null) && targetChar.isPlayable())
{
((Playable) targetChar).getStat().addLevel(Byte.parseByte(val));
((Playable) targetChar).getStat().addLevel(Integer.parseInt(val));
}
}
catch (NumberFormatException e)
@@ -78,7 +78,7 @@ public class AdminLevel implements IAdminCommandHandler
try
{
final byte level = Byte.parseByte(val);
final int level = Integer.parseInt(val);
if ((level >= 1) && (level <= maxLevel))
{
final long pXp = targetPlayer.getExp();

View File

@@ -39,6 +39,7 @@ import org.l2jmobius.gameserver.data.xml.impl.EquipmentUpgradeData;
import org.l2jmobius.gameserver.data.xml.impl.FakePlayerData;
import org.l2jmobius.gameserver.data.xml.impl.FishingData;
import org.l2jmobius.gameserver.data.xml.impl.ItemCrystallizationData;
import org.l2jmobius.gameserver.data.xml.impl.LCoinShopData;
import org.l2jmobius.gameserver.data.xml.impl.MultisellData;
import org.l2jmobius.gameserver.data.xml.impl.NpcData;
import org.l2jmobius.gameserver.data.xml.impl.NpcNameLocalisationData;
@@ -280,6 +281,12 @@ public class AdminReload implements IAdminCommandHandler
AdminData.getInstance().broadcastMessageToGMs(activeChar.getName() + ": Reloaded Prime Shop data.");
break;
}
case "limitshop":
{
LCoinShopData.getInstance().load();
AdminData.getInstance().broadcastMessageToGMs(activeChar.getName() + ": Reloaded Limit Shop data.");
break;
}
case "appearance":
{
AppearanceItemData.getInstance().load();

View File

@@ -40,7 +40,7 @@ public class ChatParty implements IChatHandler
{
if (!activeChar.isInParty())
{
activeChar.sendPacket(SystemMessageId.YOU_ARE_NOT_IN_A_PARTY);
activeChar.sendPacket(SystemMessageId.YOU_ARE_NOT_IN_A_PARTY_AND_CAN_T_SEND_MESSAGES_TO_THE_PARTY_CHAT);
return;
}

View File

@@ -75,7 +75,7 @@ public class ChatWorld implements IChatHandler
}
else if (activeChar.getWorldChatUsed() >= activeChar.getWorldChatPoints())
{
activeChar.sendPacket(SystemMessageId.YOU_HAVE_SPENT_YOUR_WORLD_CHAT_QUOTA_FOR_THE_DAY_A_NEW_DAY_STARTS_EVERY_DAY_AT_18_30);
activeChar.sendPacket(SystemMessageId.YOU_HAVE_SPENT_YOUR_WORLD_CHAT_QUOTA_FOR_THE_DAY_IT_IS_RESET_DAILY_AT_7_A_M);
}
else
{

View File

@@ -59,7 +59,7 @@ public class DropSearchBoard implements IParseBoardHandler
{
final int itemId;
final int npcId;
final byte npcLevel;
final int npcLevel;
final long min;
final long max;
final double chance;
@@ -119,7 +119,7 @@ public class DropSearchBoard implements IParseBoardHandler
}
});
DROP_INDEX_CACHE.values().stream().forEach(l -> l.sort((d1, d2) -> Byte.valueOf(d1.npcLevel).compareTo(Byte.valueOf(d2.npcLevel))));
DROP_INDEX_CACHE.values().stream().forEach(l -> l.sort((d1, d2) -> Integer.valueOf(d1.npcLevel).compareTo(Integer.valueOf(d2.npcLevel))));
}
private void addToDropList(NpcTemplate npcTemplate, DropHolder dropHolder)

View File

@@ -108,7 +108,7 @@ public class ConvertItem extends AbstractEffect
final SystemMessage sm;
if (unequippedItem.getEnchantLevel() > 0)
{
sm = new SystemMessage(SystemMessageId.S1_S2_HAS_BEEN_UNEQUIPPED);
sm = new SystemMessage(SystemMessageId.S1_S2_UNEQUIPPED);
sm.addInt(unequippedItem.getEnchantLevel());
sm.addItemName(unequippedItem);
}
@@ -147,7 +147,7 @@ public class ConvertItem extends AbstractEffect
final SystemMessage msg;
if (newItem.getEnchantLevel() > 0)
{
msg = new SystemMessage(SystemMessageId.EQUIPPED_S1_S2);
msg = new SystemMessage(SystemMessageId.S1_S2_EQUIPPED);
msg.addInt(newItem.getEnchantLevel());
msg.addItemName(newItem);
}

View File

@@ -81,7 +81,7 @@ public class Disarmor extends AbstractEffect
SystemMessage sm = null;
if (unequiped[0].getEnchantLevel() > 0)
{
sm = new SystemMessage(SystemMessageId.S1_S2_HAS_BEEN_UNEQUIPPED);
sm = new SystemMessage(SystemMessageId.S1_S2_UNEQUIPPED);
sm.addInt(unequiped[0].getEnchantLevel());
sm.addItemName(unequiped[0]);
}
@@ -123,7 +123,7 @@ public class Disarmor extends AbstractEffect
{
if (item.getEnchantLevel() > 0)
{
sm = new SystemMessage(SystemMessageId.EQUIPPED_S1_S2);
sm = new SystemMessage(SystemMessageId.S1_S2_EQUIPPED);
sm.addInt(item.getEnchantLevel());
sm.addItemName(item);
}

View File

@@ -17,10 +17,14 @@
package handlers.effecthandlers;
import org.l2jmobius.gameserver.model.StatSet;
import org.l2jmobius.gameserver.model.actor.Creature;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
import org.l2jmobius.gameserver.model.skills.Skill;
import org.l2jmobius.gameserver.model.stats.Stat;
import org.l2jmobius.gameserver.network.serverpackets.ExUserBoostStat;
/**
* @author Sdw
* @author Sdw, Mobius
*/
public class ExpModify extends AbstractStatAddEffect
{
@@ -28,4 +32,17 @@ public class ExpModify extends AbstractStatAddEffect
{
super(params, Stat.BONUS_EXP);
}
@Override
public void pump(Creature effected, Skill skill)
{
effected.getStat().mergeAdd(Stat.BONUS_EXP, _amount);
// Send exp bonus to player.
final PlayerInstance player = effected.getActingPlayer();
if (player != null)
{
player.sendPacket(new ExUserBoostStat(player));
}
}
}

View File

@@ -0,0 +1,60 @@
/*
* This file is part of the L2J Mobius project.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package handlers.effecthandlers;
import org.l2jmobius.gameserver.model.StatSet;
import org.l2jmobius.gameserver.model.actor.Creature;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
import org.l2jmobius.gameserver.model.effects.AbstractEffect;
import org.l2jmobius.gameserver.model.items.instance.ItemInstance;
import org.l2jmobius.gameserver.model.skills.Skill;
/**
* @author Mobius
*/
public class ModifyDeathPoints extends AbstractEffect
{
private final int _amount;
public ModifyDeathPoints(StatSet params)
{
_amount = params.getInt("amount");
}
@Override
public boolean isInstant()
{
return true;
}
@Override
public void instant(Creature effector, Creature effected, Skill skill, ItemInstance item)
{
if (effected == null)
{
return;
}
final PlayerInstance player = effected.getActingPlayer();
if (player == null)
{
return;
}
player.setDeathPoints(player.getDeathPoints() + _amount);
}
}

View File

@@ -70,7 +70,7 @@ public class Plunder extends AbstractEffect
if (monster.isSpoiled())
{
effector.sendPacket(SystemMessageId.PLUNDER_SKILL_HAS_BEEN_ALREADY_USED_ON_THIS_TARGET);
effector.sendPacket(SystemMessageId.THE_TARGET_HAS_BEEN_ALREADY_ROBBED);
return;
}

View File

@@ -58,7 +58,7 @@ public class Restoration extends AbstractEffect
if ((_itemId <= 0) || (_itemCount <= 0))
{
effected.sendPacket(SystemMessageId.THERE_WAS_NOTHING_FOUND_INSIDE);
effected.sendPacket(SystemMessageId.FAILED_TO_CHANGE_THE_ITEM);
LOGGER.warning(Restoration.class.getSimpleName() + " effect with wrong item Id/count: " + _itemId + "/" + _itemCount + "!");
return;
}

View File

@@ -97,7 +97,7 @@ public class RestorationRandom extends AbstractEffect
final PlayerInstance player = effected.getActingPlayer();
if (creationList.isEmpty())
{
player.sendPacket(SystemMessageId.THERE_WAS_NOTHING_FOUND_INSIDE);
player.sendPacket(SystemMessageId.FAILED_TO_CHANGE_THE_ITEM);
return;
}
@@ -166,7 +166,7 @@ public class RestorationRandom extends AbstractEffect
}
else if (item.getEnchantLevel() > 0)
{
sm = new SystemMessage(SystemMessageId.YOU_HAVE_OBTAINED_A_S1_S2);
sm = new SystemMessage(SystemMessageId.YOU_HAVE_OBTAINED_S1_S2);
sm.addInt(item.getEnchantLevel());
sm.addItemName(item);
}

View File

@@ -79,7 +79,7 @@ public class SoulEating extends AbstractEffect
final int maxSouls = (int) player.getStat().getValue(Stat.MAX_SOULS, 0);
if (player.getChargedSouls() >= maxSouls)
{
playable.sendPacket(SystemMessageId.SOUL_CANNOT_BE_ABSORBED_ANYMORE);
playable.sendPacket(SystemMessageId.YOU_CAN_T_ABSORB_MORE_SOULS);
return;
}

View File

@@ -17,7 +17,11 @@
package handlers.effecthandlers;
import org.l2jmobius.gameserver.model.StatSet;
import org.l2jmobius.gameserver.model.actor.Creature;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
import org.l2jmobius.gameserver.model.skills.Skill;
import org.l2jmobius.gameserver.model.stats.Stat;
import org.l2jmobius.gameserver.network.serverpackets.ExUserBoostStat;
/**
* @author Mobius
@@ -28,4 +32,17 @@ public class VitalityExpRate extends AbstractStatPercentEffect
{
super(params, Stat.VITALITY_EXP_RATE);
}
@Override
public void pump(Creature effected, Skill skill)
{
effected.getStat().mergeMul(Stat.VITALITY_EXP_RATE, (_amount / 100) + 1);
// Send exp bonus to player.
final PlayerInstance player = effected.getActingPlayer();
if (player != null)
{
player.sendPacket(new ExUserBoostStat(player));
}
}
}

View File

@@ -105,7 +105,7 @@ public class BeastSpiritShot implements IItemHandler
// Not enough SpiritShots to use.
if (!activeOwner.disableAutoShot(itemId))
{
activeOwner.sendPacket(SystemMessageId.YOU_DON_T_HAVE_ENOUGH_SPIRITSHOTS_NEEDED_FOR_A_SERVITOR);
activeOwner.sendPacket(SystemMessageId.YOU_DON_T_HAVE_ENOUGH_SPIRITSHOTS_FOR_THE_SERVITOR);
}
return false;
}
@@ -114,7 +114,7 @@ public class BeastSpiritShot implements IItemHandler
{
if (!activeOwner.disableAutoShot(itemId))
{
activeOwner.sendPacket(SystemMessageId.YOU_DON_T_HAVE_ENOUGH_SPIRITSHOTS_NEEDED_FOR_A_SERVITOR);
activeOwner.sendPacket(SystemMessageId.YOU_DON_T_HAVE_ENOUGH_SPIRITSHOTS_FOR_THE_SERVITOR);
}
return false;
}

View File

@@ -61,7 +61,7 @@ public class ExtractableItems implements IItemHandler
if (!player.isInventoryUnder80(false))
{
player.sendPacket(SystemMessageId.EMPTY_463);
player.sendPacket(SystemMessageId.NOT_ENOUGH_SPACE_IN_INVENTORY_UNABLE_TO_PROCESS_THIS_REQUEST_UNTIL_YOUR_INVENTORY_S_WEIGHT_IS_LESS_THAN_80_AND_SLOT_COUNT_IS_LESS_THAN_90_OF_CAPACITY);
return false;
}
@@ -71,6 +71,7 @@ public class ExtractableItems implements IItemHandler
return false;
}
boolean primeReward = false;
final Map<ItemInstance, Long> extractedItems = new HashMap<>();
final List<ItemInstance> enchantedItems = new ArrayList<>();
if (etcitem.getExtractableCountMin() > 0)
@@ -109,6 +110,14 @@ public class ExtractableItems implements IItemHandler
continue;
}
if (expi.getId() == -1) // Prime points
{
player.setPrimePoints(player.getPrimePoints() + createItemAmount);
player.sendMessage("You have obtained " + (createItemAmount / 100) + " Euro!");
primeReward = true;
continue;
}
if (ItemTable.getInstance().getTemplate(expi.getId()).isStackable() || (createItemAmount == 1))
{
final ItemInstance newItem = player.addItem("Extract", expi.getId(), createItemAmount, player, false);
@@ -156,6 +165,14 @@ public class ExtractableItems implements IItemHandler
continue;
}
if (expi.getId() == -1) // Prime points
{
player.setPrimePoints(player.getPrimePoints() + createItemAmount);
player.sendMessage("You have obtained " + (createItemAmount / 100) + " Euro!");
primeReward = true;
continue;
}
if (ItemTable.getInstance().getTemplate(expi.getId()).isStackable() || (createItemAmount == 1))
{
final ItemInstance newItem = player.addItem("Extract", expi.getId(), createItemAmount, player, false);
@@ -184,9 +201,9 @@ public class ExtractableItems implements IItemHandler
}
}
if (extractedItems.isEmpty())
if (extractedItems.isEmpty() && !primeReward)
{
player.sendPacket(SystemMessageId.THERE_WAS_NOTHING_FOUND_INSIDE);
player.sendPacket(SystemMessageId.FAILED_TO_CHANGE_THE_ITEM);
}
if (!enchantedItems.isEmpty())
{
@@ -229,7 +246,7 @@ public class ExtractableItems implements IItemHandler
}
else if (item.getEnchantLevel() > 0)
{
sm = new SystemMessage(SystemMessageId.YOU_HAVE_OBTAINED_A_S1_S2);
sm = new SystemMessage(SystemMessageId.YOU_HAVE_OBTAINED_S1_S2);
sm.addInt(item.getEnchantLevel());
sm.addItemName(item);
}

View File

@@ -59,7 +59,7 @@ public class FatedSupportBox implements IItemHandler
if (!player.isInventoryUnder80(false))
{
player.sendPacket(SystemMessageId.EMPTY_463);
player.sendPacket(SystemMessageId.NOT_ENOUGH_SPACE_IN_INVENTORY_UNABLE_TO_PROCESS_THIS_REQUEST_UNTIL_YOUR_INVENTORY_S_WEIGHT_IS_LESS_THAN_80_AND_SLOT_COUNT_IS_LESS_THAN_90_OF_CAPACITY);
return false;
}

View File

@@ -32,7 +32,7 @@ public class ItemSkills extends ItemSkillsTemplate
final PlayerInstance player = playable.getActingPlayer();
if ((player != null) && player.isInOlympiadMode())
{
player.sendPacket(SystemMessageId.YOU_CANNOT_USE_THAT_ITEM_IN_A_OLYMPIAD_MATCH);
player.sendPacket(SystemMessageId.THE_ITEM_CANNOT_BE_USED_IN_THE_OLYMPIAD);
return false;
}
return super.useItem(playable, item, forceUse);

View File

@@ -79,7 +79,7 @@ public class ItemSkillsTemplate implements IItemHandler
{
if (itemSkill.hasEffectType(EffectType.EXTRACT_ITEM) && (playable.getActingPlayer() != null) && !playable.getActingPlayer().isInventoryUnder80(false))
{
playable.getActingPlayer().sendPacket(SystemMessageId.EMPTY_463);
playable.getActingPlayer().sendPacket(SystemMessageId.NOT_ENOUGH_SPACE_IN_INVENTORY_UNABLE_TO_PROCESS_THIS_REQUEST_UNTIL_YOUR_INVENTORY_S_WEIGHT_IS_LESS_THAN_80_AND_SLOT_COUNT_IS_LESS_THAN_90_OF_CAPACITY);
return false;
}
@@ -200,7 +200,7 @@ public class ItemSkillsTemplate implements IItemHandler
SystemMessage sm = null;
if (hours > 0)
{
sm = new SystemMessage(SystemMessageId.THERE_ARE_S2_HOUR_S_S3_MINUTE_S_AND_S4_SECOND_S_REMAINING_IN_S1_S_RE_USE_TIME);
sm = new SystemMessage(SystemMessageId.S1_WILL_BE_AVAILABLE_AGAIN_IN_S2_H_S3_MIN_S4_SEC);
if ((skill == null) || skill.isStatic())
{
sm.addItemName(item);
@@ -214,7 +214,7 @@ public class ItemSkillsTemplate implements IItemHandler
}
else if (minutes > 0)
{
sm = new SystemMessage(SystemMessageId.THERE_ARE_S2_MINUTE_S_S3_SECOND_S_REMAINING_IN_S1_S_RE_USE_TIME);
sm = new SystemMessage(SystemMessageId.S1_WILL_BE_AVAILABLE_AGAIN_IN_S2_MIN_S3_SEC);
if ((skill == null) || skill.isStatic())
{
sm.addItemName(item);
@@ -227,7 +227,7 @@ public class ItemSkillsTemplate implements IItemHandler
}
else
{
sm = new SystemMessage(SystemMessageId.THERE_ARE_S2_SECOND_S_REMAINING_IN_S1_S_RE_USE_TIME);
sm = new SystemMessage(SystemMessageId.S1_WILL_BE_AVAILABLE_AGAIN_IN_S2_SEC);
if ((skill == null) || skill.isStatic())
{
sm.addItemName(item);

View File

@@ -89,7 +89,7 @@ public class Recipes implements IItemHandler
if (recipeLevel)
{
player.sendPacket(SystemMessageId.YOUR_CREATE_ITEM_LEVEL_IS_TOO_LOW_TO_REGISTER_THIS_RECIPE);
player.sendPacket(SystemMessageId.THE_LEVEL_OF_CREATE_ITEM_IS_TOO_LOW_FOR_REGISTERING_THE_RECIPE);
return false;
}
@@ -111,7 +111,7 @@ public class Recipes implements IItemHandler
}
player.destroyItem("Consume", item.getObjectId(), 1, null, false);
final SystemMessage sm = new SystemMessage(SystemMessageId.S1_HAS_BEEN_ADDED);
final SystemMessage sm = new SystemMessage(SystemMessageId.S1_ADDED);
sm.addItemName(item);
player.sendPacket(sm);
return true;

View File

@@ -45,7 +45,7 @@ public class RollingDice implements IItemHandler
final int itemId = item.getId();
if (player.isInOlympiadMode())
{
player.sendPacket(SystemMessageId.YOU_CANNOT_USE_THAT_ITEM_IN_A_OLYMPIAD_MATCH);
player.sendPacket(SystemMessageId.THE_ITEM_CANNOT_BE_USED_IN_THE_OLYMPIAD);
return false;
}

View File

@@ -33,7 +33,7 @@ public class PetAttack implements IPlayerActionHandler
{
if ((player.getPet() == null) || !player.getPet().isPet())
{
player.sendPacket(SystemMessageId.YOU_DO_NOT_HAVE_A_PET);
player.sendPacket(SystemMessageId.YOU_DON_T_HAVE_A_PET);
return;
}

View File

@@ -34,7 +34,7 @@ public class PetHold implements IPlayerActionHandler
{
if ((player.getPet() == null) || !player.getPet().isPet())
{
player.sendPacket(SystemMessageId.YOU_DO_NOT_HAVE_A_PET);
player.sendPacket(SystemMessageId.YOU_DON_T_HAVE_A_PET);
return;
}

View File

@@ -34,7 +34,7 @@ public class PetMove implements IPlayerActionHandler
{
if ((player.getPet() == null) || !player.getPet().isPet())
{
player.sendPacket(SystemMessageId.YOU_DO_NOT_HAVE_A_PET);
player.sendPacket(SystemMessageId.YOU_DON_T_HAVE_A_PET);
return;
}

View File

@@ -42,7 +42,7 @@ public class PetSkillUse implements IPlayerActionHandler
final PetInstance pet = player.getPet();
if (pet == null)
{
player.sendPacket(SystemMessageId.YOU_DO_NOT_HAVE_A_PET);
player.sendPacket(SystemMessageId.YOU_DON_T_HAVE_A_PET);
}
else if (pet.isUncontrollable())
{

View File

@@ -33,7 +33,7 @@ public class PetStop implements IPlayerActionHandler
{
if ((player.getPet() == null) || !player.getPet().isPet())
{
player.sendPacket(SystemMessageId.YOU_DO_NOT_HAVE_A_PET);
player.sendPacket(SystemMessageId.YOU_DON_T_HAVE_A_PET);
return;
}

View File

@@ -43,7 +43,7 @@ public class ServitorAttack implements IPlayerActionHandler
}
else
{
player.sendPacket(SystemMessageId.YOU_DO_NOT_HAVE_A_SERVITOR);
player.sendPacket(SystemMessageId.YOU_DON_T_HAVE_A_SERVITOR);
}
}
}

View File

@@ -33,7 +33,7 @@ public class ServitorHold implements IPlayerActionHandler
{
if (!player.hasServitors())
{
player.sendPacket(SystemMessageId.YOU_DO_NOT_HAVE_A_SERVITOR);
player.sendPacket(SystemMessageId.YOU_DON_T_HAVE_A_SERVITOR);
return;
}

View File

@@ -33,7 +33,7 @@ public class ServitorMode implements IPlayerActionHandler
{
if (!player.hasServitors())
{
player.sendPacket(SystemMessageId.YOU_DO_NOT_HAVE_A_SERVITOR);
player.sendPacket(SystemMessageId.YOU_DON_T_HAVE_A_SERVITOR);
return;
}

View File

@@ -34,7 +34,7 @@ public class ServitorMove implements IPlayerActionHandler
{
if (!player.hasServitors())
{
player.sendPacket(SystemMessageId.YOU_DO_NOT_HAVE_A_SERVITOR);
player.sendPacket(SystemMessageId.YOU_DON_T_HAVE_A_SERVITOR);
return;
}

View File

@@ -36,7 +36,7 @@ public class ServitorSkillUse implements IPlayerActionHandler
final Summon summon = player.getAnyServitor();
if ((summon == null) || !summon.isServitor())
{
player.sendPacket(SystemMessageId.YOU_DO_NOT_HAVE_A_SERVITOR);
player.sendPacket(SystemMessageId.YOU_DON_T_HAVE_A_SERVITOR);
return;
}

View File

@@ -32,7 +32,7 @@ public class ServitorStop implements IPlayerActionHandler
{
if (!player.hasServitors())
{
player.sendPacket(SystemMessageId.YOU_DO_NOT_HAVE_A_SERVITOR);
player.sendPacket(SystemMessageId.YOU_DON_T_HAVE_A_SERVITOR);
return;
}

View File

@@ -35,7 +35,7 @@ public class UnsummonPet implements IPlayerActionHandler
final Summon pet = player.getPet();
if (pet == null)
{
player.sendPacket(SystemMessageId.YOU_DO_NOT_HAVE_A_PET);
player.sendPacket(SystemMessageId.YOU_DON_T_HAVE_A_PET);
}
else if (((PetInstance) pet).isUncontrollable())
{

View File

@@ -66,7 +66,7 @@ public class UnsummonServitor implements IPlayerActionHandler
}
else
{
player.sendPacket(SystemMessageId.YOU_DO_NOT_HAVE_A_SERVITOR);
player.sendPacket(SystemMessageId.YOU_DON_T_HAVE_A_SERVITOR);
}
}
}

View File

@@ -47,7 +47,7 @@ public class CanBookmarkAddSlotSkillCondition implements ISkillCondition
if ((player.getBookMarkSlot() + _teleportBookmarkSlots) > 18)
{
player.sendPacket(SystemMessageId.YOUR_NUMBER_OF_MY_TELEPORTS_SLOTS_HAS_REACHED_ITS_MAXIMUM_LIMIT);
player.sendPacket(SystemMessageId.YOU_HAVE_REACHED_THE_MAXIMUM_NUMBER_OF_MY_TELEPORT_SLOTS_OR_USE_CONDITIONS_ARE_NOT_OBSERVED);
return false;
}

View File

@@ -0,0 +1,42 @@
/*
* This file is part of the L2J Mobius project.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package handlers.skillconditionhandlers;
import org.l2jmobius.gameserver.model.StatSet;
import org.l2jmobius.gameserver.model.WorldObject;
import org.l2jmobius.gameserver.model.actor.Creature;
import org.l2jmobius.gameserver.model.skills.ISkillCondition;
import org.l2jmobius.gameserver.model.skills.Skill;
/**
* @author Mobius
*/
public class DeathPointsSkillCondition implements ISkillCondition
{
private final int _amount;
public DeathPointsSkillCondition(StatSet params)
{
_amount = params.getInt("amount");
}
@Override
public boolean canUse(Creature caster, Skill skill, WorldObject target)
{
return caster.getActingPlayer().getDeathPoints() >= _amount;
}
}

View File

@@ -44,7 +44,7 @@ public class ChannelDelete implements IUserCommandHandler
if (player.isInParty() && player.getParty().isLeader(player) && player.getParty().isInCommandChannel() && player.getParty().getCommandChannel().getLeader().equals(player))
{
final CommandChannel channel = player.getParty().getCommandChannel();
channel.broadcastPacket(new SystemMessage(SystemMessageId.THE_COMMAND_CHANNEL_HAS_BEEN_DISBANDED));
channel.broadcastPacket(new SystemMessage(SystemMessageId.THE_COMMAND_CHANNEL_IS_DISBANDED));
channel.disbandChannel();
return true;
}

View File

@@ -53,7 +53,7 @@ public class ChannelLeave implements IUserCommandHandler
final CommandChannel channel = player.getParty().getCommandChannel();
final Party party = player.getParty();
channel.removeParty(party);
party.getLeader().sendPacket(SystemMessageId.YOU_HAVE_QUIT_THE_COMMAND_CHANNEL);
party.getLeader().sendPacket(SystemMessageId.YOU_HAVE_LEFT_THE_COMMAND_CHANNEL);
final SystemMessage sm = new SystemMessage(SystemMessageId.C1_S_PARTY_HAS_LEFT_THE_COMMAND_CHANNEL);
sm.addPcName(party.getLeader());

View File

@@ -108,7 +108,7 @@ public class ClanWarsList implements IUserCommandHandler
else
{
// Target Without Ally
sm = new SystemMessage(SystemMessageId.S1_NO_ALLIANCE_EXISTS);
sm = new SystemMessage(SystemMessageId.S1_S2_ALLIANCE_2);
sm.addString(clanName);
}
player.sendPacket(sm);

View File

@@ -57,7 +57,7 @@ public class OlympiadStat implements IUserCommandHandler
sm.addInt(Olympiad.getInstance().getNoblePoints((PlayerInstance) target));
player.sendPacket(sm);
final SystemMessage sm2 = new SystemMessage(SystemMessageId.THE_MATCHES_THIS_WEEK_ARE_ALL_CLASS_BATTLES_THE_NUMBER_OF_MATCHES_THAT_ARE_ALLOWED_TO_PARTICIPATE_IS_S1);
final SystemMessage sm2 = new SystemMessage(SystemMessageId.THIS_WEEK_YOU_CAN_PARTICIPATE_IN_A_TOTAL_OF_S1_MATCHES);
sm2.addInt(Olympiad.getInstance().getRemainingWeeklyMatches(nobleObjId));
player.sendPacket(sm2);
return true;

View File

@@ -57,7 +57,7 @@ public class Unstuck implements IUserCommandHandler
if (player.isInOlympiadMode())
{
player.sendPacket(SystemMessageId.YOU_CANNOT_USE_THAT_SKILL_IN_A_OLYMPIAD_MATCH);
player.sendPacket(SystemMessageId.THE_SKILL_CANNOT_BE_USED_IN_THE_OLYMPIAD);
return false;
}

View File

@@ -52,7 +52,7 @@ public class LastImperialTomb extends AbstractInstance
{
// NPCs
private static final int GUIDE = 32011;
private static final int CUBE = 29061;
private static final int CUBE = 31843; // 29061
private static final int HALL_ALARM = 18328;
private static final int HALL_KEEPER_SUICIDAL_SOLDIER = 18333;
private static final int DUMMY = 29052;

View File

@@ -111,7 +111,7 @@ public class MonsterArena extends AbstractInstance
player.teleToLocation(world.getNpc(MACHINE), true, world);
if ((world.getStatus() > 0) && (world.getStatus() < 5)) // Show remaining countdown.
{
player.sendPacket(new ExSendUIEvent(player, false, false, (int) (world.getRemainingTime() / 1000), 0, NpcStringId.REMAINING_TIME));
player.sendPacket(new ExSendUIEvent(player, false, false, (int) (world.getRemainingTime() / 1000), 0, NpcStringId.TIME_LEFT));
}
return null;
}
@@ -181,7 +181,7 @@ public class MonsterArena extends AbstractInstance
world.setStatus(1);
for (PlayerInstance plr : world.getPlayers())
{
plr.sendPacket(new ExSendUIEvent(plr, false, false, 1200, 0, NpcStringId.REMAINING_TIME));
plr.sendPacket(new ExSendUIEvent(plr, false, false, 1200, 0, NpcStringId.TIME_LEFT));
}
}
break;
@@ -266,7 +266,7 @@ public class MonsterArena extends AbstractInstance
@Override
public void onInstanceLeave(PlayerInstance player, Instance instance)
{
player.sendPacket(new ExSendUIEvent(player, false, false, 0, 0, NpcStringId.REMAINING_TIME));
player.sendPacket(new ExSendUIEvent(player, false, false, 0, 0, NpcStringId.TIME_LEFT));
}
@Override
@@ -298,7 +298,7 @@ public class MonsterArena extends AbstractInstance
{
for (PlayerInstance plr : world.getPlayers())
{
plr.sendPacket(new ExSendUIEvent(plr, false, false, 0, 0, NpcStringId.REMAINING_TIME));
plr.sendPacket(new ExSendUIEvent(plr, false, false, 0, 0, NpcStringId.TIME_LEFT));
}
world.finishInstance();
}

View File

@@ -148,6 +148,12 @@ public class Q00255_Tutorial extends Quest
@Override
public String onAdvEvent(String event, Npc npc, PlayerInstance player)
{
// Death Knights.
if ((player == null) || (player.getClassId().getId() > 195))
{
return null;
}
final QuestState qs = getQuestState(player, false);
if (qs == null)
{
@@ -223,6 +229,12 @@ public class Q00255_Tutorial extends Quest
@Override
public String onFirstTalk(Npc npc, PlayerInstance player)
{
// Death Knights.
if (player.getClassId().getId() > 195)
{
return null;
}
final QuestState qs = getQuestState(player, false);
if (qs != null)
{
@@ -402,6 +414,12 @@ public class Q00255_Tutorial extends Quest
return;
}
// Death Knights.
if (player.getClassId().getId() > 195)
{
return;
}
final QuestState qs = getQuestState(player, true);
if ((qs != null) && (qs.getMemoState() < 4) && STARTING_VOICE_HTML.containsKey(player.getClassId().getId()))
{

View File

@@ -36,7 +36,7 @@ import org.l2jmobius.gameserver.model.quest.Quest;
import org.l2jmobius.gameserver.model.quest.QuestState;
import org.l2jmobius.gameserver.model.quest.State;
import org.l2jmobius.gameserver.network.NpcStringId;
import org.l2jmobius.gameserver.network.serverpackets.classchange.ExRequestClassChangeUi;
import org.l2jmobius.gameserver.network.serverpackets.classchange.ExClassChangeSetAlarm;
/**
* Saga of Legend (10673)
@@ -100,6 +100,7 @@ public class Q10673_SagaOfLegend extends Quest
private static final int SPELLBOOK_ORC = 90042; // Spellbook: Mount Black Bear
private static final int SPELLBOOK_DWARF = 90041; // Spellbook: Mount Kukuru
private static final int SPELLBOOK_KAMAEL = 91946; // Spellbook: Mount Griffin
private static final int SPELLBOOK_DEATH_KNIGHT = 93383; // Spellbook: Mount Nightmare Steed
// Misc
private static final int MIN_LEVEL = 76;
private static final String KILL_COUNT_VAR = "KillCount";
@@ -160,7 +161,7 @@ public class Q10673_SagaOfLegend extends Quest
qs.exitQuest(false, true);
if (CategoryData.getInstance().isInCategory(CategoryType.THIRD_CLASS_GROUP, player.getClassId().getId()))
{
player.sendPacket(ExRequestClassChangeUi.STATIC_PACKET);
player.sendPacket(ExClassChangeSetAlarm.STATIC_PACKET);
}
htmltext = event;
}
@@ -275,7 +276,7 @@ public class Q10673_SagaOfLegend extends Quest
final QuestState qs = getQuestState(player, false);
if ((qs != null) && qs.isCompleted())
{
player.sendPacket(ExRequestClassChangeUi.STATIC_PACKET);
player.sendPacket(ExClassChangeSetAlarm.STATIC_PACKET);
}
}
@@ -300,6 +301,13 @@ public class Q10673_SagaOfLegend extends Quest
return;
}
// Death Knights.
if (player.getClassId().getId() > 195)
{
giveItems(player, SPELLBOOK_DEATH_KNIGHT, 1);
return;
}
final QuestState qs = getQuestState(player, false);
if ((qs != null) && qs.isCompleted())
{

View File

@@ -0,0 +1,4 @@
<html><body>Head Trainer Kilremange:<br>
Would you like to stop being a recluse and return to a life full of adventure?<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10957_TheLifeOfADeathKnight 34138-02.htm">"Oh, it's a bit awkward..."</Button>
</body></html>

View File

@@ -0,0 +1,6 @@
<html><body>Head Trainer Kilremange:<br>
No wander you find it awkward.<br>
I'm feeling a bit awkward myself. Ha-ha!<br>
But since you decided to return to this world, wouldn't it be right to live life to the fullest?<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10957_TheLifeOfADeathKnight 34138-03.htm">"What do you mean?"</Button>
</body></html>

View File

@@ -0,0 +1,6 @@
<html><body>Head Trainer Kilremange:<br>
That's a tough question.<br>
Now that we got recognized in the Kingdom of Aden, we need to accept our fate and learn to live in a different way.<br>
First you need to master the power that was given to you.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest Q10957_TheLifeOfADeathKnight 34138-04.htm">Lean more</Button>
</body></html>

Some files were not shown because too many files have changed in this diff Show More