Addition of VIP system.
Contributed by marciox25.
This commit is contained in:
@@ -13,6 +13,10 @@ EnableAttendanceRewards = False
|
||||
# Default: False
|
||||
PremiumOnlyAttendanceRewards = False
|
||||
|
||||
# Enable the Attendance Reward system only for Vip accounts.
|
||||
# Default: False
|
||||
VipOnlyAttendanceRewards = False
|
||||
|
||||
# Make rewards sharable in the same account.
|
||||
# Default: False (Each character will receive its own rewards.)
|
||||
AttendanceRewardsShareAccount = False
|
||||
|
||||
@@ -9,6 +9,9 @@ PcCafeEnabled = False
|
||||
# Allow only players with a Premium account.
|
||||
PcCafeOnlyPremium = False
|
||||
|
||||
# Allow only players with a Vip Tier account.
|
||||
PcCafeOnlyVip = False
|
||||
|
||||
# Max points that player may have.
|
||||
# Limited by int limit.
|
||||
MaxPcCafePoints = 200000
|
||||
|
||||
22
L2J_Mobius_Essence_5.0_Sylph/dist/game/config/Custom/VipSystem.ini
vendored
Normal file
22
L2J_Mobius_Essence_5.0_Sylph/dist/game/config/Custom/VipSystem.ini
vendored
Normal file
@@ -0,0 +1,22 @@
|
||||
# ---------------------------------------------------------------------------
|
||||
# VIP System
|
||||
# ---------------------------------------------------------------------------
|
||||
|
||||
# VIP System Enabled.
|
||||
# l2.ini
|
||||
# [VipSystem]
|
||||
# UseVipInfoWndAden=false
|
||||
# -> needs to be true
|
||||
# Prime shop Aden needs to be true aswell!
|
||||
# Check vip.xml for more info!
|
||||
VipEnabled = False
|
||||
|
||||
# Max vip level that can be reached (Client Limitations, lv 8 -> 10 Doesn't exist. If u want to use, make it yourself!)
|
||||
MaxVipLevel = 7
|
||||
|
||||
# When purchasing from the Prime Shop, the price amount will add to your vip points
|
||||
PrimeAffectPoints = true
|
||||
|
||||
# When purchasing from the L Shop, the price amount will add to your vip points
|
||||
# P.S. this will only affect the purchases made with L Coin and not Adena!
|
||||
LShopAffectPoints = true
|
||||
@@ -18,7 +18,56 @@
|
||||
<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 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>
|
||||
|
||||
<item id="2090044" cat="4" paymentType="0" price="30" 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="71268" count="1" /> <!-- VIP Gain Scroll -->
|
||||
</item>
|
||||
<item id="2090045" cat="4" paymentType="0" price="60" 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="71269" count="1" /> <!-- Good VIP Gain Scroll -->
|
||||
</item>
|
||||
<item id="2090046" cat="4" paymentType="0" price="50" 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="71316" count="1" /> <!-- VIP Gain Scroll - 80 -->
|
||||
</item>
|
||||
<item id="2090047" cat="4" paymentType="0" price="100" 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="71317" count="1" /> <!-- VIP Gain Scroll - 240 -->
|
||||
</item>
|
||||
<item id="2090048" cat="4" paymentType="0" price="333" 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="71314" count="1" /> <!-- VIP Gain Scroll - 800 -->
|
||||
</item>
|
||||
<item id="2090049" cat="4" 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="71315" count="1" /> <!-- VIP Gain Scroll - 2400 -->
|
||||
</item>
|
||||
<item id="2090050" cat="5" paymentType="0" price="0" 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" isVipGift="true" vipTier="1">
|
||||
<item itemId="71177" count="1" /> <!-- Daily Present - VIP 1 -->
|
||||
</item>
|
||||
<item id="2090051" cat="5" paymentType="0" price="0" 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" isVipGift="true" vipTier="2">
|
||||
<item itemId="71178" count="1" /> <!-- Daily Present - VIP 2 -->
|
||||
</item>
|
||||
<item id="2090052" cat="5" paymentType="0" price="0" 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" isVipGift="true" vipTier="3">
|
||||
<item itemId="71179" count="1" /> <!-- Daily Present - VIP 3 -->
|
||||
</item>
|
||||
<item id="2090053" cat="5" paymentType="0" price="0" 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" isVipGift="true" vipTier="4">
|
||||
<item itemId="71180" count="1" /> <!-- Daily Present - VIP 4 -->
|
||||
</item>
|
||||
<item id="2090054" cat="5" paymentType="0" price="0" 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" isVipGift="true" vipTier="5">
|
||||
<item itemId="71181" count="1" /> <!-- Daily Present - VIP 5 -->
|
||||
</item>
|
||||
<item id="2090055" cat="5" paymentType="0" price="0" 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" isVipGift="true" vipTier="6">
|
||||
<item itemId="71182" count="1" /> <!-- Daily Present - VIP 6 -->
|
||||
</item>
|
||||
<item id="2090056" cat="5" paymentType="0" price="0" 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" isVipGift="true" vipTier="7">
|
||||
<item itemId="71183" count="1" /> <!-- Daily Present - VIP 7 -->
|
||||
</item>
|
||||
<item id="2090057" cat="5" paymentType="0" price="0" 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" isVipGift="true" vipTier="8">
|
||||
<item itemId="99027" count="1" /> <!-- Daily Present - VIP 8 -->
|
||||
</item>
|
||||
<item id="2090058" cat="5" paymentType="0" price="0" 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" isVipGift="true" vipTier="9">
|
||||
<item itemId="99028" count="1" /> <!-- Daily Present - VIP 9 -->
|
||||
</item>
|
||||
<item id="2090059" cat="5" paymentType="0" price="0" 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" isVipGift="true" vipTier="10">
|
||||
<item itemId="99029" count="1" /> <!-- Daily Present - VIP 10 -->
|
||||
</item>
|
||||
</list>
|
||||
@@ -391,6 +391,7 @@ public class EffectMasterHandler
|
||||
EffectHandler.getInstance().registerHandler("Untargetable", Untargetable::new);
|
||||
EffectHandler.getInstance().registerHandler("VampiricAttack", VampiricAttack::new);
|
||||
EffectHandler.getInstance().registerHandler("VampiricDefence", VampiricDefence::new);
|
||||
EffectHandler.getInstance().registerHandler("VipUp", VipUp::new);
|
||||
EffectHandler.getInstance().registerHandler("VitalityExpRate", VitalityExpRate::new);
|
||||
EffectHandler.getInstance().registerHandler("VitalityPointsRate", VitalityPointsRate::new);
|
||||
EffectHandler.getInstance().registerHandler("VitalityPointUp", VitalityPointUp::new);
|
||||
|
||||
60
L2J_Mobius_Essence_5.0_Sylph/dist/game/data/scripts/handlers/effecthandlers/VipUp.java
vendored
Normal file
60
L2J_Mobius_Essence_5.0_Sylph/dist/game/data/scripts/handlers/effecthandlers/VipUp.java
vendored
Normal 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 Gabriel Costa Souza
|
||||
*/
|
||||
public class VipUp extends AbstractEffect
|
||||
{
|
||||
private final long _amount;
|
||||
|
||||
public VipUp(StatSet params)
|
||||
{
|
||||
_amount = params.getLong("amount", 0L);
|
||||
}
|
||||
|
||||
@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.updateVipPoints(_amount);
|
||||
}
|
||||
}
|
||||
@@ -740,84 +740,129 @@
|
||||
<set name="icon" val="BranchIcon.Icon.etc_vip_present_i00" />
|
||||
<set name="default_action" val="PEEL" />
|
||||
<set name="immediate_effect" val="true" />
|
||||
<set name="weight" val="10" />
|
||||
<set name="material" val="FISH" />
|
||||
<set name="is_tradable" val="false" />
|
||||
<set name="is_dropable" val="false" />
|
||||
<set name="is_depositable" val="false" />
|
||||
<set name="is_sellable" val="false" />
|
||||
<set name="is_stackable" val="true" />
|
||||
<set name="handler" val="ExtractableItems" />
|
||||
<set name="extractableCountMin" val="2" />
|
||||
<set name="extractableCountMax" val="2" />
|
||||
<capsuled_items>
|
||||
<item id="736" min="1" max="1" chance="100.00"/> <!-- Scroll of Escape -->
|
||||
<item id="29651" min="3" max="3" chance="100.00"/> <!-- Healing Potion -->
|
||||
</capsuled_items>
|
||||
</item>
|
||||
<item id="71178" name="Daily Present - VIP 2" type="EtcItem">
|
||||
<!-- Double-click the item to receive 1 Scroll of Resurrection, 3 Healing Potions, 10 VIP Coins. -->
|
||||
<set name="icon" val="BranchIcon.Icon.etc_vip_present_i01" />
|
||||
<set name="default_action" val="PEEL" />
|
||||
<set name="immediate_effect" val="true" />
|
||||
<set name="weight" val="10" />
|
||||
<set name="material" val="FISH" />
|
||||
<set name="is_tradable" val="false" />
|
||||
<set name="is_dropable" val="false" />
|
||||
<set name="is_depositable" val="false" />
|
||||
<set name="is_sellable" val="false" />
|
||||
<set name="is_stackable" val="true" />
|
||||
<set name="handler" val="ExtractableItems" />
|
||||
<set name="extractableCountMin" val="2" />
|
||||
<set name="extractableCountMax" val="2" />
|
||||
<capsuled_items>
|
||||
<item id="737" min="1" max="1" chance="100.00"/> <!-- Scroll of Resurrection -->
|
||||
<item id="29651" min="3" max="3" chance="100.00"/> <!-- Healing Potion -->
|
||||
</capsuled_items>
|
||||
</item>
|
||||
<item id="71179" name="Daily Present - VIP 3" type="EtcItem">
|
||||
<!-- Double-click the item to receive 1 Scroll of Escape, 1 Scroll of Resurrection, 5 Healing Potions, 15 VIP Coins. -->
|
||||
<set name="icon" val="BranchIcon.Icon.etc_vip_present_i02" />
|
||||
<set name="default_action" val="PEEL" />
|
||||
<set name="immediate_effect" val="true" />
|
||||
<set name="weight" val="10" />
|
||||
<set name="material" val="FISH" />
|
||||
<set name="is_tradable" val="false" />
|
||||
<set name="is_dropable" val="false" />
|
||||
<set name="is_depositable" val="false" />
|
||||
<set name="is_sellable" val="false" />
|
||||
<set name="is_stackable" val="true" />
|
||||
<set name="handler" val="ExtractableItems" />
|
||||
<set name="extractableCountMin" val="3" />
|
||||
<set name="extractableCountMax" val="3" />
|
||||
<capsuled_items>
|
||||
<item id="736" min="1" max="1" chance="100.00"/> <!-- Scroll of Escape -->
|
||||
<item id="737" min="1" max="1" chance="100.00"/> <!-- Scroll of Resurrection -->
|
||||
<item id="29651" min="3" max="3" chance="100.00"/> <!-- Healing Potion -->
|
||||
</capsuled_items>
|
||||
</item>
|
||||
<item id="71180" name="Daily Present - VIP 4" type="EtcItem">
|
||||
<!-- Double-click the item to receive 1 Scroll of Escape, 1 Scroll of Resurrection, 3 Greater Healing Potions, 25 VIP Coins. -->
|
||||
<set name="icon" val="BranchIcon.Icon.etc_vip_present_i03" />
|
||||
<set name="default_action" val="PEEL" />
|
||||
<set name="immediate_effect" val="true" />
|
||||
<set name="weight" val="10" />
|
||||
<set name="material" val="FISH" />
|
||||
<set name="is_tradable" val="false" />
|
||||
<set name="is_dropable" val="false" />
|
||||
<set name="is_depositable" val="false" />
|
||||
<set name="is_sellable" val="false" />
|
||||
<set name="is_stackable" val="true" />
|
||||
<set name="handler" val="ExtractableItems" />
|
||||
<set name="extractableCountMin" val="3" />
|
||||
<set name="extractableCountMax" val="3" />
|
||||
<capsuled_items>
|
||||
<item id="736" min="1" max="1" chance="100.00"/> <!-- Scroll of Escape -->
|
||||
<item id="737" min="1" max="1" chance="100.00"/> <!-- Scroll of Resurrection -->
|
||||
<item id="29652" min="3" max="3" chance="100.00"/> <!-- Major Healing Potion -->
|
||||
</capsuled_items>
|
||||
</item>
|
||||
<item id="71181" name="Daily Present - VIP 5" type="EtcItem">
|
||||
<!-- Double-click the item to receive 1 Blessed Scroll of Escape, 3 Greater Healing Potions, 40 VIP Coins. -->
|
||||
<set name="icon" val="BranchIcon.Icon.etc_vip_present_i04" />
|
||||
<set name="default_action" val="PEEL" />
|
||||
<set name="immediate_effect" val="true" />
|
||||
<set name="weight" val="10" />
|
||||
<set name="material" val="FISH" />
|
||||
<set name="is_tradable" val="false" />
|
||||
<set name="is_dropable" val="false" />
|
||||
<set name="is_depositable" val="false" />
|
||||
<set name="is_sellable" val="false" />
|
||||
<set name="is_stackable" val="true" />
|
||||
<set name="handler" val="ExtractableItems" />
|
||||
<set name="extractableCountMin" val="2" />
|
||||
<set name="extractableCountMax" val="2" />
|
||||
<capsuled_items>
|
||||
<item id="91689" min="1" max="1" chance="100.00"/> <!-- Blessed Scroll of Escape -->
|
||||
<item id="29652" min="3" max="3" chance="100.00"/> <!-- Major Healing Potion -->
|
||||
</capsuled_items>
|
||||
</item>
|
||||
<item id="71182" name="Daily Present - VIP 6" type="EtcItem">
|
||||
<!-- Double-click on the item to receive 1 Blessed Scroll of Resurrection, 3 Greater Healing Potions, 100 VIP Coins. -->
|
||||
<set name="icon" val="BranchIcon.Icon.etc_vip_present_i05" />
|
||||
<set name="default_action" val="PEEL" />
|
||||
<set name="immediate_effect" val="true" />
|
||||
<set name="weight" val="10" />
|
||||
<set name="material" val="FISH" />
|
||||
<set name="is_tradable" val="false" />
|
||||
<set name="is_dropable" val="false" />
|
||||
<set name="is_depositable" val="false" />
|
||||
<set name="is_sellable" val="false" />
|
||||
<set name="is_stackable" val="true" />
|
||||
<set name="handler" val="ExtractableItems" />
|
||||
<set name="extractableCountMin" val="2" />
|
||||
<set name="extractableCountMax" val="2" />
|
||||
<capsuled_items>
|
||||
<item id="3936" min="1" max="1" chance="100.00"/> <!-- Blessed Scroll of Resurrection -->
|
||||
<item id="29652" min="3" max="3" chance="100.00"/> <!-- Major Healing Potion -->
|
||||
</capsuled_items>
|
||||
</item>
|
||||
<item id="71183" name="Daily Present - VIP 7" type="EtcItem">
|
||||
<!-- Double-click the item to receive 1 Blessed Scroll of Escape, 1 Blessed Scroll of Resurrection, 3 Greater Healing Potions, 150 VIP Coins. -->
|
||||
<set name="icon" val="BranchIcon.Icon.etc_vip_present_i06" />
|
||||
<set name="default_action" val="PEEL" />
|
||||
<set name="immediate_effect" val="true" />
|
||||
<set name="weight" val="10" />
|
||||
<set name="material" val="FISH" />
|
||||
<set name="is_tradable" val="false" />
|
||||
<set name="is_dropable" val="false" />
|
||||
<set name="is_depositable" val="false" />
|
||||
<set name="is_sellable" val="false" />
|
||||
<set name="is_stackable" val="true" />
|
||||
<set name="handler" val="ExtractableItems" />
|
||||
<set name="extractableCountMin" val="3" />
|
||||
<set name="extractableCountMax" val="3" />
|
||||
<capsuled_items>
|
||||
<item id="91689" min="1" max="1" chance="100.00"/> <!-- Blessed Scroll of Escape -->
|
||||
<item id="3936" min="1" max="1" chance="100.00"/> <!-- Blessed Scroll of Resurrection -->
|
||||
<item id="29652" min="3" max="3" chance="100.00"/> <!-- Major Healing Potion -->
|
||||
</capsuled_items>
|
||||
</item>
|
||||
<item id="71184" name="Agathion Meliodas" additionalName="Lv. 1" type="Armor">
|
||||
<!-- Activates the power of the Agathion Meliodas. Special abilities may be activated if the Agathion is summoned from the main slot. Can be enchanted up to +7 with the Seven Sins Agathion Growth Book. Cannot be exchanged, dropped, destroyed, or sold. Can be stored in a private warehouse. <Conditions for upgrade>. Enchant to +7 to upgrade to Agathion Meliodas Lv. 2. -->
|
||||
|
||||
@@ -678,24 +678,36 @@
|
||||
<item id="71268" name="VIP Gain Scroll" type="EtcItem">
|
||||
<!-- Allows to regain 27 VIP Points when used. Cannot be exchanged, dropped or sold in a private store. Can be stored in a private warehouse. -->
|
||||
<set name="icon" val="BranchIcon.Icon.g_bm_vip_potion_i00" />
|
||||
<set name="default_action" val="SKILL_REDUCE_ON_SKILL_SUCCESS" />
|
||||
<set name="default_action" val="SKILL_REDUCE" />
|
||||
<set name="material" val="PAPER" />
|
||||
<set name="weight" val="5" />
|
||||
<set name="is_tradable" val="false" />
|
||||
<set name="is_dropable" val="false" />
|
||||
<set name="is_depositable" val="false" />
|
||||
<set name="immediate_effect" val="true" />
|
||||
<set name="is_dropable" val="false" />
|
||||
<set name="is_sellable" val="false" />
|
||||
<set name="is_stackable" val="true" />
|
||||
<set name="handler" val="ItemSkills" />
|
||||
<skills>
|
||||
<skill id="56096" level="1" /> <!-- VIP Gain Scroll -->
|
||||
</skills>
|
||||
</item>
|
||||
<item id="71269" name="Good VIP Gain Scroll" type="EtcItem">
|
||||
<!-- Allows to regain 273 VIP Points when used. Cannot be exchanged, dropped or sold in a private store. Can be stored in a private warehouse. -->
|
||||
<set name="icon" val="BranchIcon.Icon.g_bm_vip_potion_i00" />
|
||||
<set name="default_action" val="SKILL_REDUCE_ON_SKILL_SUCCESS" />
|
||||
<set name="default_action" val="SKILL_REDUCE" />
|
||||
<set name="material" val="PAPER" />
|
||||
<set name="weight" val="5" />
|
||||
<set name="is_tradable" val="false" />
|
||||
<set name="is_dropable" val="false" />
|
||||
<set name="is_depositable" val="false" />
|
||||
<set name="immediate_effect" val="true" />
|
||||
<set name="is_dropable" val="false" />
|
||||
<set name="is_sellable" val="false" />
|
||||
<set name="is_stackable" val="true" />
|
||||
<set name="handler" val="ItemSkills" />
|
||||
<skills>
|
||||
<skill id="56097" level="1" /> <!-- Good VIP Gain Scroll -->
|
||||
</skills>
|
||||
</item>
|
||||
<item id="71270" name="Venir's Talisman Fragment" type="EtcItem">
|
||||
<!-- Material used to upgrade Venir's Talisman. If upgrade fails, the talisman level value will drop to 1. Cannot be dropped. -->
|
||||
|
||||
@@ -154,50 +154,70 @@
|
||||
<item id="71314" name="VIP Gain Scroll - 800" type="EtcItem">
|
||||
<!-- Allows to regain 800 VIP Points when used. Cannot be exchanged, dropped or sold in a private store. Can be stored in a private warehouse. -->
|
||||
<set name="icon" val="BranchIcon.Icon.g_bm_vip_potion_i00" />
|
||||
<set name="default_action" val="SKILL_REDUCE_ON_SKILL_SUCCESS" />
|
||||
<set name="material" val="PAPER" />
|
||||
<set name="weight" val="5" />
|
||||
<set name="is_tradable" val="false" />
|
||||
<set name="is_dropable" val="false" />
|
||||
<set name="is_depositable" val="false" />
|
||||
<set name="is_sellable" val="false" />
|
||||
<set name="is_stackable" val="true" />
|
||||
<set name="default_action" val="SKILL_REDUCE" />
|
||||
<set name="material" val="PAPER" />
|
||||
<set name="weight" val="5" />
|
||||
<set name="is_tradable" val="false" />
|
||||
<set name="is_depositable" val="false" />
|
||||
<set name="immediate_effect" val="true" />
|
||||
<set name="is_dropable" val="false" />
|
||||
<set name="is_sellable" val="false" />
|
||||
<set name="is_stackable" val="true" />
|
||||
<set name="handler" val="ItemSkills" />
|
||||
<skills>
|
||||
<skill id="59125" level="1" /> <!-- VIP Gain Scroll - 800 -->
|
||||
</skills>
|
||||
</item>
|
||||
<item id="71315" name="VIP Gain Scroll - 2400" type="EtcItem">
|
||||
<!-- Allows to regain 2400 VIP Points when used. Cannot be exchanged, dropped or sold in a private store. Can be stored in a private warehouse. -->
|
||||
<set name="icon" val="BranchIcon.Icon.g_bm_vip_potion_i00" />
|
||||
<set name="default_action" val="SKILL_REDUCE_ON_SKILL_SUCCESS" />
|
||||
<set name="default_action" val="SKILL_REDUCE" />
|
||||
<set name="material" val="PAPER" />
|
||||
<set name="weight" val="5" />
|
||||
<set name="is_tradable" val="false" />
|
||||
<set name="is_dropable" val="false" />
|
||||
<set name="is_depositable" val="false" />
|
||||
<set name="is_sellable" val="false" />
|
||||
<set name="is_stackable" val="true" />
|
||||
<set name="immediate_effect" val="true" />
|
||||
<set name="is_dropable" val="false" />
|
||||
<set name="is_sellable" val="false" />
|
||||
<set name="is_stackable" val="true" />
|
||||
<set name="handler" val="ItemSkills" />
|
||||
<skills>
|
||||
<skill id="59126" level="1" /> <!-- VIP Gain Scroll - 2400 -->
|
||||
</skills>
|
||||
</item>
|
||||
<item id="71316" name="VIP Gain Scroll - 80" type="EtcItem">
|
||||
<!-- Allows to regain 80 VIP Points when used. Cannot be exchanged, dropped or sold in a private store. Can be stored in a private warehouse. -->
|
||||
<set name="icon" val="BranchIcon.Icon.g_bm_vip_potion_i00" />
|
||||
<set name="default_action" val="SKILL_REDUCE_ON_SKILL_SUCCESS" />
|
||||
<set name="material" val="PAPER" />
|
||||
<set name="weight" val="5" />
|
||||
<set name="is_tradable" val="false" />
|
||||
<set name="is_dropable" val="false" />
|
||||
<set name="is_depositable" val="false" />
|
||||
<set name="is_sellable" val="false" />
|
||||
<set name="is_stackable" val="true" />
|
||||
<set name="default_action" val="SKILL_REDUCE" />
|
||||
<set name="material" val="PAPER" />
|
||||
<set name="weight" val="5" />
|
||||
<set name="is_tradable" val="false" />
|
||||
<set name="is_depositable" val="false" />
|
||||
<set name="immediate_effect" val="true" />
|
||||
<set name="is_dropable" val="false" />
|
||||
<set name="is_sellable" val="false" />
|
||||
<set name="is_stackable" val="true" />
|
||||
<set name="handler" val="ItemSkills" />
|
||||
<skills>
|
||||
<skill id="59127" level="1" /> <!-- VIP Gain Scroll - 80 -->
|
||||
</skills>
|
||||
</item>
|
||||
<item id="71317" name="VIP Gain Scroll - 240" type="EtcItem">
|
||||
<!-- Allows to regain 240 VIP Points when used. Cannot be exchanged, dropped or sold in a private store. Can be stored in a private warehouse. -->
|
||||
<set name="icon" val="BranchIcon.Icon.g_bm_vip_potion_i00" />
|
||||
<set name="default_action" val="SKILL_REDUCE_ON_SKILL_SUCCESS" />
|
||||
<set name="material" val="PAPER" />
|
||||
<set name="weight" val="5" />
|
||||
<set name="is_tradable" val="false" />
|
||||
<set name="is_dropable" val="false" />
|
||||
<set name="is_depositable" val="false" />
|
||||
<set name="is_sellable" val="false" />
|
||||
<set name="is_stackable" val="true" />
|
||||
<set name="default_action" val="SKILL_REDUCE" />
|
||||
<set name="material" val="PAPER" />
|
||||
<set name="weight" val="5" />
|
||||
<set name="is_tradable" val="false" />
|
||||
<set name="is_depositable" val="false" />
|
||||
<set name="immediate_effect" val="true" />
|
||||
<set name="is_dropable" val="false" />
|
||||
<set name="is_sellable" val="false" />
|
||||
<set name="is_stackable" val="true" />
|
||||
<set name="handler" val="ItemSkills" />
|
||||
<skills>
|
||||
<skill id="59128" level="1" /> <!-- VIP Gain Scroll - 240 -->
|
||||
</skills>
|
||||
</item>
|
||||
<item id="71318" name="Transformation Sealbook: Part-time Seller" additionalName="Kat the Cat" type="EtcItem">
|
||||
<!-- Sealbook for learning the skill of transforming yourself into Kat the Cat. -->
|
||||
|
||||
@@ -9,4 +9,61 @@
|
||||
<set name="is_dropable" val="false" />
|
||||
<set name="is_sellable" val="false" />
|
||||
</item>
|
||||
<item id="99027" name="Daily Present - VIP 8" type="EtcItem">
|
||||
<!-- Double-click the item to receive 1 Blessed Scroll of Escape, 1 Blessed Scroll of Resurrection, 3 Greater Healing Potions, 150 VIP Coins. -->
|
||||
<set name="icon" val="BranchIcon.Icon.etc_vip_present_i06" />
|
||||
<set name="default_action" val="PEEL" />
|
||||
<set name="immediate_effect" val="true" />
|
||||
<set name="material" val="FISH" />
|
||||
<set name="is_tradable" val="false" />
|
||||
<set name="is_dropable" val="false" />
|
||||
<set name="is_sellable" val="false" />
|
||||
<set name="is_stackable" val="true" />
|
||||
<set name="handler" val="ExtractableItems" />
|
||||
<set name="extractableCountMin" val="3" />
|
||||
<set name="extractableCountMax" val="3" />
|
||||
<capsuled_items>
|
||||
<item id="91689" min="1" max="1" chance="100.00"/> <!-- Blessed Scroll of Escape -->
|
||||
<item id="3936" min="1" max="1" chance="100.00"/> <!-- Blessed Scroll of Resurrection -->
|
||||
<item id="29652" min="3" max="3" chance="100.00"/> <!-- Major Healing Potion -->
|
||||
</capsuled_items>
|
||||
</item>
|
||||
<item id="99028" name="Daily Present - VIP 9" type="EtcItem">
|
||||
<!-- Double-click the item to receive 1 Blessed Scroll of Escape, 1 Blessed Scroll of Resurrection, 3 Greater Healing Potions, 150 VIP Coins. -->
|
||||
<set name="icon" val="BranchIcon.Icon.etc_vip_present_i06" />
|
||||
<set name="default_action" val="PEEL" />
|
||||
<set name="immediate_effect" val="true" />
|
||||
<set name="material" val="FISH" />
|
||||
<set name="is_tradable" val="false" />
|
||||
<set name="is_dropable" val="false" />
|
||||
<set name="is_sellable" val="false" />
|
||||
<set name="is_stackable" val="true" />
|
||||
<set name="handler" val="ExtractableItems" />
|
||||
<set name="extractableCountMin" val="3" />
|
||||
<set name="extractableCountMax" val="3" />
|
||||
<capsuled_items>
|
||||
<item id="91689" min="1" max="1" chance="100.00"/> <!-- Blessed Scroll of Escape -->
|
||||
<item id="3936" min="1" max="1" chance="100.00"/> <!-- Blessed Scroll of Resurrection -->
|
||||
<item id="29652" min="3" max="3" chance="100.00"/> <!-- Major Healing Potion -->
|
||||
</capsuled_items>
|
||||
</item>
|
||||
<item id="99029" name="Daily Present - VIP 10" type="EtcItem">
|
||||
<!-- Double-click the item to receive 1 Blessed Scroll of Escape, 1 Blessed Scroll of Resurrection, 3 Greater Healing Potions, 150 VIP Coins. -->
|
||||
<set name="icon" val="BranchIcon.Icon.etc_vip_present_i06" />
|
||||
<set name="default_action" val="PEEL" />
|
||||
<set name="immediate_effect" val="true" />
|
||||
<set name="material" val="FISH" />
|
||||
<set name="is_tradable" val="false" />
|
||||
<set name="is_dropable" val="false" />
|
||||
<set name="is_sellable" val="false" />
|
||||
<set name="is_stackable" val="true" />
|
||||
<set name="handler" val="ExtractableItems" />
|
||||
<set name="extractableCountMin" val="3" />
|
||||
<set name="extractableCountMax" val="3" />
|
||||
<capsuled_items>
|
||||
<item id="91689" min="1" max="1" chance="100.00"/> <!-- Blessed Scroll of Escape -->
|
||||
<item id="3936" min="1" max="1" chance="100.00"/> <!-- Blessed Scroll of Resurrection -->
|
||||
<item id="29652" min="3" max="3" chance="100.00"/> <!-- Major Healing Potion -->
|
||||
</capsuled_items>
|
||||
</item>
|
||||
</list>
|
||||
|
||||
@@ -283,36 +283,467 @@
|
||||
<!-- You can obtain a daily VIP chest Lv. 1. Acquired XP/ SP +3%, item drop rate +3%. -->
|
||||
<icon>BranchIcon.Icon.g_skill_vip1</icon>
|
||||
<operateType>P</operateType>
|
||||
<hitTime>500</hitTime>
|
||||
<effects>
|
||||
<effect name="ExpModify">
|
||||
<amount>5</amount>
|
||||
</effect>
|
||||
<effect name="SpModify">
|
||||
<amount>5</amount>
|
||||
</effect>
|
||||
<effect name="BonusDropRate">
|
||||
<amount>50</amount>
|
||||
<mode>PER</mode>
|
||||
</effect>
|
||||
<effect name="WorldChatPoints">
|
||||
<amount>1</amount>
|
||||
<mode>DIFF</mode>
|
||||
</effect>
|
||||
</effects>
|
||||
</skill>
|
||||
<skill id="55025" toLevel="1" name="VIP Lv. 2">
|
||||
<!-- You can obtain a daily VIP chest Lv. 2. Acquired XP/ SP +7%, item drop rate +7%. You can use the world chat at any level (world chat messages +3). -->
|
||||
<icon>BranchIcon.Icon.g_skill_vip2</icon>
|
||||
<operateType>P</operateType>
|
||||
<hitTime>500</hitTime>
|
||||
<effects>
|
||||
<effect name="ExpModify">
|
||||
<amount>10</amount>
|
||||
</effect>
|
||||
<effect name="SpModify">
|
||||
<amount>10</amount>
|
||||
</effect>
|
||||
<effect name="BonusDropRate">
|
||||
<amount>150</amount>
|
||||
<mode>PER</mode>
|
||||
</effect>
|
||||
<effect name="WorldChatPoints">
|
||||
<amount>6</amount>
|
||||
<mode>DIFF</mode>
|
||||
</effect>
|
||||
</effects>
|
||||
</skill>
|
||||
<skill id="55026" toLevel="1" name="VIP Lv. 3">
|
||||
<!-- You can obtain a daily VIP chest Lv. 3. Acquired XP/ SP +15%, item drop rate +15%, Death XP Penalty -10%. You can use the world chat at any level (world chat messages +3). -->
|
||||
<icon>BranchIcon.Icon.g_skill_vip3</icon>
|
||||
<operateType>P</operateType>
|
||||
<hitTime>500</hitTime>
|
||||
<effects>
|
||||
<effect name="ExpModify">
|
||||
<amount>15</amount>
|
||||
</effect>
|
||||
<effect name="SpModify">
|
||||
<amount>15</amount>
|
||||
</effect>
|
||||
<effect name="BonusDropRate">
|
||||
<amount>200</amount>
|
||||
<mode>PER</mode>
|
||||
</effect>
|
||||
<effect name="WorldChatPoints">
|
||||
<amount>6</amount>
|
||||
<mode>DIFF</mode>
|
||||
</effect>
|
||||
<effect name="ReduceDropPenalty">
|
||||
<deathPenalty>-10</deathPenalty>
|
||||
<mode>PER</mode>
|
||||
</effect>
|
||||
<effect name="PveMagicalSkillDamageBonus">
|
||||
<amount>3</amount>
|
||||
<mode>PER</mode>
|
||||
</effect>
|
||||
<effect name="PvePhysicalAttackDamageBonus">
|
||||
<amount>3</amount>
|
||||
<mode>PER</mode>
|
||||
</effect>
|
||||
<effect name="PvePhysicalSkillDamageBonus">
|
||||
<amount>3</amount>
|
||||
<mode>PER</mode>
|
||||
</effect>
|
||||
<effect name="PvePhysicalSkillDamageBonus">
|
||||
<amount>3</amount>
|
||||
<mode>PER</mode>
|
||||
</effect>
|
||||
<effect name="PveRaidMagicalSkillDamageBonus">
|
||||
<amount>3</amount>
|
||||
<mode>PER</mode>
|
||||
</effect>
|
||||
<effect name="PveRaidPhysicalAttackDamageBonus">
|
||||
<amount>3</amount>
|
||||
<mode>PER</mode>
|
||||
</effect>
|
||||
<effect name="PveRaidPhysicalSkillDamageBonus">
|
||||
<amount>3</amount>
|
||||
<mode>PER</mode>
|
||||
</effect>
|
||||
</effects>
|
||||
</skill>
|
||||
<skill id="55027" toLevel="1" name="VIP Lv. 4">
|
||||
<!-- You can obtain a daily VIP chest Lv. 4. Acquired XP/ SP +25%, item drop rate +15%, Death XP Penalty -15%. You can use the world chat at any level (world chat messages +5). -->
|
||||
<icon>BranchIcon.Icon.g_skill_vip4</icon>
|
||||
<operateType>P</operateType>
|
||||
<hitTime>500</hitTime>
|
||||
<effects>
|
||||
<effect name="ExpModify">
|
||||
<amount>25</amount>
|
||||
</effect>
|
||||
<effect name="SpModify">
|
||||
<amount>25</amount>
|
||||
</effect>
|
||||
<effect name="BonusDropRate">
|
||||
<amount>250</amount>
|
||||
<mode>PER</mode>
|
||||
</effect>
|
||||
<effect name="WorldChatPoints">
|
||||
<amount>10</amount>
|
||||
<mode>DIFF</mode>
|
||||
</effect>
|
||||
<effect name="ReduceDropPenalty">
|
||||
<deathPenalty>-20</deathPenalty>
|
||||
<mode>PER</mode>
|
||||
</effect>
|
||||
<effect name="PveMagicalSkillDamageBonus">
|
||||
<amount>10</amount>
|
||||
<mode>PER</mode>
|
||||
</effect>
|
||||
<effect name="PvePhysicalAttackDamageBonus">
|
||||
<amount>10</amount>
|
||||
<mode>PER</mode>
|
||||
</effect>
|
||||
<effect name="PvePhysicalSkillDamageBonus">
|
||||
<amount>10</amount>
|
||||
<mode>PER</mode>
|
||||
</effect>
|
||||
<effect name="PvePhysicalSkillDamageBonus">
|
||||
<amount>10</amount>
|
||||
<mode>PER</mode>
|
||||
</effect>
|
||||
<effect name="PveRaidMagicalSkillDamageBonus">
|
||||
<amount>10</amount>
|
||||
<mode>PER</mode>
|
||||
</effect>
|
||||
<effect name="PveRaidPhysicalAttackDamageBonus">
|
||||
<amount>10</amount>
|
||||
<mode>PER</mode>
|
||||
</effect>
|
||||
<effect name="PveRaidPhysicalSkillDamageBonus">
|
||||
<amount>10</amount>
|
||||
<mode>PER</mode>
|
||||
</effect>
|
||||
<effect name="PhysicalDefence">
|
||||
<amount>10</amount>
|
||||
<mode>DIFF</mode>
|
||||
</effect>
|
||||
<effect name="MagicalDefence">
|
||||
<amount>10</amount>
|
||||
<mode>DIFF</mode>
|
||||
</effect>
|
||||
<effect name="StatUp">
|
||||
<amount>1</amount>
|
||||
<stat>STR</stat>
|
||||
</effect>
|
||||
<effect name="StatUp">
|
||||
<amount>1</amount>
|
||||
<stat>INT</stat>
|
||||
</effect>
|
||||
<effect name="StatUp">
|
||||
<amount>1</amount>
|
||||
<stat>CON</stat>
|
||||
</effect>
|
||||
<effect name="StatUp">
|
||||
<amount>1</amount>
|
||||
<stat>DEX</stat>
|
||||
</effect>
|
||||
<effect name="StatUp">
|
||||
<amount>1</amount>
|
||||
<stat>MEN</stat>
|
||||
</effect>
|
||||
<effect name="StatUp">
|
||||
<amount>1</amount>
|
||||
<stat>WIT</stat>
|
||||
</effect>
|
||||
</effects>
|
||||
</skill>
|
||||
<skill id="55028" toLevel="1" name="VIP Lv. 5">
|
||||
<!-- You can obtain a daily VIP chest Lv. 5. Acquired XP/ SP +30%, item drop rate +30%, Death XP Penalty -20%. Increases PvE damage. You can use the world chat at any level (world chat messages +10). -->
|
||||
<icon>BranchIcon.Icon.g_skill_vip5</icon>
|
||||
<operateType>P</operateType>
|
||||
<hitTime>500</hitTime>
|
||||
<effects>
|
||||
<effect name="ExpModify">
|
||||
<amount>30</amount>
|
||||
</effect>
|
||||
<effect name="SpModify">
|
||||
<amount>30</amount>
|
||||
</effect>
|
||||
<effect name="BonusDropRate">
|
||||
<amount>250</amount>
|
||||
<mode>PER</mode>
|
||||
</effect>
|
||||
<effect name="WorldChatPoints">
|
||||
<amount>20</amount>
|
||||
<mode>DIFF</mode>
|
||||
</effect>
|
||||
<effect name="ReduceDropPenalty">
|
||||
<deathPenalty>-20</deathPenalty>
|
||||
<mode>PER</mode>
|
||||
</effect>
|
||||
<effect name="PveMagicalSkillDamageBonus">
|
||||
<amount>12</amount>
|
||||
<mode>PER</mode>
|
||||
</effect>
|
||||
<effect name="PvePhysicalAttackDamageBonus">
|
||||
<amount>12</amount>
|
||||
<mode>PER</mode>
|
||||
</effect>
|
||||
<effect name="PvePhysicalSkillDamageBonus">
|
||||
<amount>12</amount>
|
||||
<mode>PER</mode>
|
||||
</effect>
|
||||
<effect name="PvePhysicalSkillDamageBonus">
|
||||
<amount>12</amount>
|
||||
<mode>PER</mode>
|
||||
</effect>
|
||||
<effect name="PveRaidMagicalSkillDamageBonus">
|
||||
<amount>12</amount>
|
||||
<mode>PER</mode>
|
||||
</effect>
|
||||
<effect name="PveRaidPhysicalAttackDamageBonus">
|
||||
<amount>12</amount>
|
||||
<mode>PER</mode>
|
||||
</effect>
|
||||
<effect name="PveRaidPhysicalSkillDamageBonus">
|
||||
<amount>12</amount>
|
||||
<mode>PER</mode>
|
||||
</effect>
|
||||
<effect name="PhysicalDefence">
|
||||
<amount>15</amount>
|
||||
<mode>DIFF</mode>
|
||||
</effect>
|
||||
<effect name="MagicalDefence">
|
||||
<amount>15</amount>
|
||||
<mode>DIFF</mode>
|
||||
</effect>
|
||||
<effect name="StatUp">
|
||||
<amount>1</amount>
|
||||
<stat>STR</stat>
|
||||
</effect>
|
||||
<effect name="StatUp">
|
||||
<amount>1</amount>
|
||||
<stat>INT</stat>
|
||||
</effect>
|
||||
<effect name="StatUp">
|
||||
<amount>1</amount>
|
||||
<stat>CON</stat>
|
||||
</effect>
|
||||
<effect name="StatUp">
|
||||
<amount>1</amount>
|
||||
<stat>DEX</stat>
|
||||
</effect>
|
||||
<effect name="StatUp">
|
||||
<amount>1</amount>
|
||||
<stat>MEN</stat>
|
||||
</effect>
|
||||
<effect name="StatUp">
|
||||
<amount>1</amount>
|
||||
<stat>WIT</stat>
|
||||
</effect>
|
||||
</effects>
|
||||
</skill>
|
||||
<skill id="55029" toLevel="1" name="VIP Lv. 6">
|
||||
<!-- You can obtain a daily VIP chest Lv. 6. Acquired XP/ SP +30%, item drop rate +30%, Death XP Penalty -20%. Increases PvE damage, STR/ DEX/ CON/ INT/ WIT/ MEN +2. You can use the world chat at any level (world chat messages +10). -->
|
||||
<icon>BranchIcon.Icon.g_skill_vip6</icon>
|
||||
<operateType>P</operateType>
|
||||
<hitTime>500</hitTime>
|
||||
<effects>
|
||||
<effect name="ExpModify">
|
||||
<amount>35</amount>
|
||||
</effect>
|
||||
<effect name="SpModify">
|
||||
<amount>35</amount>
|
||||
</effect>
|
||||
<effect name="BonusDropRate">
|
||||
<amount>250</amount>
|
||||
<mode>PER</mode>
|
||||
</effect>
|
||||
<effect name="WorldChatPoints">
|
||||
<amount>20</amount>
|
||||
<mode>DIFF</mode>
|
||||
</effect>
|
||||
<effect name="ReduceDropPenalty">
|
||||
<deathPenalty>-20</deathPenalty>
|
||||
<mode>PER</mode>
|
||||
</effect>
|
||||
<effect name="PveMagicalSkillDamageBonus">
|
||||
<amount>15</amount>
|
||||
<mode>PER</mode>
|
||||
</effect>
|
||||
<effect name="PvePhysicalAttackDamageBonus">
|
||||
<amount>15</amount>
|
||||
<mode>PER</mode>
|
||||
</effect>
|
||||
<effect name="PvePhysicalSkillDamageBonus">
|
||||
<amount>15</amount>
|
||||
<mode>PER</mode>
|
||||
</effect>
|
||||
<effect name="PvePhysicalSkillDamageBonus">
|
||||
<amount>15</amount>
|
||||
<mode>PER</mode>
|
||||
</effect>
|
||||
<effect name="PveRaidMagicalSkillDamageBonus">
|
||||
<amount>15</amount>
|
||||
<mode>PER</mode>
|
||||
</effect>
|
||||
<effect name="PveRaidPhysicalAttackDamageBonus">
|
||||
<amount>15</amount>
|
||||
<mode>PER</mode>
|
||||
</effect>
|
||||
<effect name="PveRaidPhysicalSkillDamageBonus">
|
||||
<amount>15</amount>
|
||||
<mode>PER</mode>
|
||||
</effect>
|
||||
<effect name="PvpMagicalSkillDamageBonus">
|
||||
<amount>2.5</amount>
|
||||
<mode>PER</mode>
|
||||
</effect>
|
||||
<effect name="PvpPhysicalAttackDamageBonus">
|
||||
<amount>2.5</amount>
|
||||
<mode>PER</mode>
|
||||
</effect>
|
||||
<effect name="PvpPhysicalSkillDamageBonus">
|
||||
<amount>2.5</amount>
|
||||
<mode>PER</mode>
|
||||
</effect>
|
||||
<effect name="PhysicalDefence">
|
||||
<amount>20</amount>
|
||||
<mode>DIFF</mode>
|
||||
</effect>
|
||||
<effect name="MagicalDefence">
|
||||
<amount>20</amount>
|
||||
<mode>DIFF</mode>
|
||||
</effect>
|
||||
<effect name="StatUp">
|
||||
<amount>1</amount>
|
||||
<stat>STR</stat>
|
||||
</effect>
|
||||
<effect name="StatUp">
|
||||
<amount>1</amount>
|
||||
<stat>INT</stat>
|
||||
</effect>
|
||||
<effect name="StatUp">
|
||||
<amount>1</amount>
|
||||
<stat>CON</stat>
|
||||
</effect>
|
||||
<effect name="StatUp">
|
||||
<amount>1</amount>
|
||||
<stat>DEX</stat>
|
||||
</effect>
|
||||
<effect name="StatUp">
|
||||
<amount>1</amount>
|
||||
<stat>MEN</stat>
|
||||
</effect>
|
||||
<effect name="StatUp">
|
||||
<amount>1</amount>
|
||||
<stat>WIT</stat>
|
||||
</effect>
|
||||
</effects>
|
||||
</skill>
|
||||
<skill id="55030" toLevel="1" name="VIP Lv. 7">
|
||||
<!-- You can obtain a daily VIP chest Lv. 7. Acquired XP/ SP +30%, item drop rate +30%, Death XP Penalty -20%. Increases PvP/ PvE damage, STR/ DEX/ CON/ INT/ WIT/ MEN +2. You can use the world chat at any level (world chat messages +10). -->
|
||||
<icon>BranchIcon.Icon.g_skill_vip7</icon>
|
||||
<operateType>P</operateType>
|
||||
<hitTime>500</hitTime>
|
||||
<effects>
|
||||
<effect name="ExpModify">
|
||||
<amount>35</amount>
|
||||
</effect>
|
||||
<effect name="SpModify">
|
||||
<amount>35</amount>
|
||||
</effect>
|
||||
<effect name="BonusDropRate">
|
||||
<amount>250</amount>
|
||||
<mode>PER</mode>
|
||||
</effect>
|
||||
<effect name="WorldChatPoints">
|
||||
<amount>40</amount>
|
||||
<mode>DIFF</mode>
|
||||
</effect>
|
||||
<effect name="ReduceDropPenalty">
|
||||
<deathPenalty>-20</deathPenalty>
|
||||
<mode>PER</mode>
|
||||
</effect>
|
||||
<effect name="PveMagicalSkillDamageBonus">
|
||||
<amount>15</amount>
|
||||
<mode>PER</mode>
|
||||
</effect>
|
||||
<effect name="PvePhysicalAttackDamageBonus">
|
||||
<amount>15</amount>
|
||||
<mode>PER</mode>
|
||||
</effect>
|
||||
<effect name="PvePhysicalSkillDamageBonus">
|
||||
<amount>15</amount>
|
||||
<mode>PER</mode>
|
||||
</effect>
|
||||
<effect name="PvePhysicalSkillDamageBonus">
|
||||
<amount>15</amount>
|
||||
<mode>PER</mode>
|
||||
</effect>
|
||||
<effect name="PveRaidMagicalSkillDamageBonus">
|
||||
<amount>15</amount>
|
||||
<mode>PER</mode>
|
||||
</effect>
|
||||
<effect name="PveRaidPhysicalAttackDamageBonus">
|
||||
<amount>15</amount>
|
||||
<mode>PER</mode>
|
||||
</effect>
|
||||
<effect name="PveRaidPhysicalSkillDamageBonus">
|
||||
<amount>15</amount>
|
||||
<mode>PER</mode>
|
||||
</effect>
|
||||
<effect name="PvpMagicalSkillDamageBonus">
|
||||
<amount>10</amount>
|
||||
<mode>PER</mode>
|
||||
</effect>
|
||||
<effect name="PvpPhysicalAttackDamageBonus">
|
||||
<amount>10</amount>
|
||||
<mode>PER</mode>
|
||||
</effect>
|
||||
<effect name="PvpPhysicalSkillDamageBonus">
|
||||
<amount>10</amount>
|
||||
<mode>PER</mode>
|
||||
</effect>
|
||||
<effect name="PhysicalDefence">
|
||||
<amount>30</amount>
|
||||
<mode>DIFF</mode>
|
||||
</effect>
|
||||
<effect name="MagicalDefence">
|
||||
<amount>30</amount>
|
||||
<mode>DIFF</mode>
|
||||
</effect>
|
||||
<effect name="StatUp">
|
||||
<amount>2</amount>
|
||||
<stat>STR</stat>
|
||||
</effect>
|
||||
<effect name="StatUp">
|
||||
<amount>2</amount>
|
||||
<stat>INT</stat>
|
||||
</effect>
|
||||
<effect name="StatUp">
|
||||
<amount>2</amount>
|
||||
<stat>CON</stat>
|
||||
</effect>
|
||||
<effect name="StatUp">
|
||||
<amount>2</amount>
|
||||
<stat>DEX</stat>
|
||||
</effect>
|
||||
<effect name="StatUp">
|
||||
<amount>2</amount>
|
||||
<stat>MEN</stat>
|
||||
</effect>
|
||||
<effect name="StatUp">
|
||||
<amount>2</amount>
|
||||
<stat>WIT</stat>
|
||||
</effect>
|
||||
</effects>
|
||||
</skill>
|
||||
<skill id="55031" toLevel="1" name="Report Status">
|
||||
<!-- You are under suspicion of using an illegal program. Your actions have been restricted. -->
|
||||
|
||||
@@ -546,11 +546,21 @@
|
||||
<icon>BranchIcon.Icon.g_bm_vip_potion_i00</icon>
|
||||
<operateType>A1</operateType>
|
||||
<reuseDelay>1000</reuseDelay>
|
||||
<effects>
|
||||
<effect name="VipUp">
|
||||
<amount>27</amount>
|
||||
</effect>
|
||||
</effects>
|
||||
</skill>
|
||||
<skill id="56097" toLevel="1" name="Good VIP Gain Scroll">
|
||||
<icon>BranchIcon.Icon.g_bm_vip_potion_i00</icon>
|
||||
<operateType>A1</operateType>
|
||||
<reuseDelay>1000</reuseDelay>
|
||||
<effects>
|
||||
<effect name="VipUp">
|
||||
<amount>273</amount>
|
||||
</effect>
|
||||
</effects>
|
||||
</skill>
|
||||
<skill id="56098" toLevel="24" name="Venir's Talisman">
|
||||
<!-- When equipped, CON +$s1. -->
|
||||
|
||||
@@ -139,21 +139,41 @@
|
||||
<icon>BranchIcon.Icon.g_bm_vip_potion_i00</icon>
|
||||
<operateType>A1</operateType>
|
||||
<reuseDelay>1000</reuseDelay>
|
||||
<effects>
|
||||
<effect name="VipUp">
|
||||
<amount>800</amount>
|
||||
</effect>
|
||||
</effects>
|
||||
</skill>
|
||||
<skill id="59126" toLevel="1" name="VIP Gain Scroll - 2400">
|
||||
<icon>BranchIcon.Icon.g_bm_vip_potion_i00</icon>
|
||||
<operateType>A1</operateType>
|
||||
<reuseDelay>1000</reuseDelay>
|
||||
<effects>
|
||||
<effect name="VipUp">
|
||||
<amount>2400</amount>
|
||||
</effect>
|
||||
</effects>
|
||||
</skill>
|
||||
<skill id="59127" toLevel="1" name="VIP Gain Scroll - 80">
|
||||
<icon>BranchIcon.Icon.g_bm_vip_potion_i00</icon>
|
||||
<operateType>A1</operateType>
|
||||
<reuseDelay>1000</reuseDelay>
|
||||
<effects>
|
||||
<effect name="VipUp">
|
||||
<amount>80</amount>
|
||||
</effect>
|
||||
</effects>
|
||||
</skill>
|
||||
<skill id="59128" toLevel="1" name="VIP Gain Scroll - 240">
|
||||
<icon>BranchIcon.Icon.g_bm_vip_potion_i00</icon>
|
||||
<operateType>A1</operateType>
|
||||
<reuseDelay>1000</reuseDelay>
|
||||
<effects>
|
||||
<effect name="VipUp">
|
||||
<amount>240</amount>
|
||||
</effect>
|
||||
</effects>
|
||||
</skill>
|
||||
<skill id="59129" toLevel="1" name="Transformation Sealbook: Kat the Cat">
|
||||
<operateType>A1</operateType>
|
||||
|
||||
@@ -241,20 +241,323 @@
|
||||
<icon>icon.skill0000</icon>
|
||||
<operateType>A1</operateType>
|
||||
</skill>
|
||||
<skill id="59723" toLevel="1" name="">
|
||||
<!-- AUTO GENERATED SKILL TODO: FIX IT -->
|
||||
<icon>icon.skill0000</icon>
|
||||
<operateType>A1</operateType>
|
||||
<skill id="59723" toLevel="1" name="VIP Lv. 8">
|
||||
<!-- TODO: Client side -->
|
||||
<icon>BranchIcon.Icon.g_skill_vip8</icon>
|
||||
<operateType>P</operateType>
|
||||
<hitTime>500</hitTime>
|
||||
<effects>
|
||||
<effect name="ExpModify">
|
||||
<amount>35</amount>
|
||||
</effect>
|
||||
<effect name="SpModify">
|
||||
<amount>35</amount>
|
||||
</effect>
|
||||
<effect name="BonusDropRate">
|
||||
<amount>300</amount>
|
||||
<mode>PER</mode>
|
||||
</effect>
|
||||
<effect name="WorldChatPoints">
|
||||
<amount>50</amount>
|
||||
<mode>DIFF</mode>
|
||||
</effect>
|
||||
<effect name="ReduceDropPenalty">
|
||||
<deathPenalty>-30</deathPenalty>
|
||||
<mode>PER</mode>
|
||||
</effect>
|
||||
<effect name="PveMagicalSkillDamageBonus">
|
||||
<amount>15</amount>
|
||||
<mode>PER</mode>
|
||||
</effect>
|
||||
<effect name="PvePhysicalAttackDamageBonus">
|
||||
<amount>15</amount>
|
||||
<mode>PER</mode>
|
||||
</effect>
|
||||
<effect name="PvePhysicalSkillDamageBonus">
|
||||
<amount>15</amount>
|
||||
<mode>PER</mode>
|
||||
</effect>
|
||||
<effect name="PvePhysicalSkillDamageBonus">
|
||||
<amount>15</amount>
|
||||
<mode>PER</mode>
|
||||
</effect>
|
||||
<effect name="PveRaidMagicalSkillDamageBonus">
|
||||
<amount>15</amount>
|
||||
<mode>PER</mode>
|
||||
</effect>
|
||||
<effect name="PveRaidPhysicalAttackDamageBonus">
|
||||
<amount>15</amount>
|
||||
<mode>PER</mode>
|
||||
</effect>
|
||||
<effect name="PveRaidPhysicalSkillDamageBonus">
|
||||
<amount>15</amount>
|
||||
<mode>PER</mode>
|
||||
</effect>
|
||||
<effect name="PvpMagicalSkillDamageBonus">
|
||||
<amount>12</amount>
|
||||
<mode>PER</mode>
|
||||
</effect>
|
||||
<effect name="PvpPhysicalAttackDamageBonus">
|
||||
<amount>12</amount>
|
||||
<mode>PER</mode>
|
||||
</effect>
|
||||
<effect name="PvpPhysicalSkillDamageBonus">
|
||||
<amount>12</amount>
|
||||
<mode>PER</mode>
|
||||
</effect>
|
||||
<effect name="PhysicalDefence">
|
||||
<amount>50</amount>
|
||||
<mode>DIFF</mode>
|
||||
</effect>
|
||||
<effect name="MagicalDefence">
|
||||
<amount>50</amount>
|
||||
<mode>DIFF</mode>
|
||||
</effect>
|
||||
<effect name="StatUp">
|
||||
<amount>2</amount>
|
||||
<stat>STR</stat>
|
||||
</effect>
|
||||
<effect name="StatUp">
|
||||
<amount>2</amount>
|
||||
<stat>INT</stat>
|
||||
</effect>
|
||||
<effect name="StatUp">
|
||||
<amount>2</amount>
|
||||
<stat>CON</stat>
|
||||
</effect>
|
||||
<effect name="StatUp">
|
||||
<amount>2</amount>
|
||||
<stat>DEX</stat>
|
||||
</effect>
|
||||
<effect name="StatUp">
|
||||
<amount>2</amount>
|
||||
<stat>MEN</stat>
|
||||
</effect>
|
||||
<effect name="StatUp">
|
||||
<amount>2</amount>
|
||||
<stat>WIT</stat>
|
||||
</effect>
|
||||
<effect name="MaxHp">
|
||||
<amount>100</amount>
|
||||
<mode>DIFF</mode>
|
||||
</effect>
|
||||
<effect name="MaxMp">
|
||||
<amount>100</amount>
|
||||
<mode>DIFF</mode>
|
||||
</effect>
|
||||
</effects>
|
||||
</skill>
|
||||
<skill id="59724" toLevel="1" name="">
|
||||
<!-- AUTO GENERATED SKILL TODO: FIX IT -->
|
||||
<icon>icon.skill0000</icon>
|
||||
<operateType>A1</operateType>
|
||||
<skill id="59724" toLevel="1" name="VIP Lv. 9">
|
||||
<!-- TODO: Client side -->
|
||||
<icon>BranchIcon.Icon.g_skill_vip9</icon>
|
||||
<operateType>P</operateType>
|
||||
<hitTime>500</hitTime>
|
||||
<effects>
|
||||
<effect name="ExpModify">
|
||||
<amount>40</amount>
|
||||
</effect>
|
||||
<effect name="SpModify">
|
||||
<amount>40</amount>
|
||||
</effect>
|
||||
<effect name="BonusDropRate">
|
||||
<amount>300</amount>
|
||||
<mode>PER</mode>
|
||||
</effect>
|
||||
<effect name="WorldChatPoints">
|
||||
<amount>50</amount>
|
||||
<mode>DIFF</mode>
|
||||
</effect>
|
||||
<effect name="ReduceDropPenalty">
|
||||
<deathPenalty>-40</deathPenalty>
|
||||
<mode>PER</mode>
|
||||
</effect>
|
||||
<effect name="PveMagicalSkillDamageBonus">
|
||||
<amount>15</amount>
|
||||
<mode>PER</mode>
|
||||
</effect>
|
||||
<effect name="PvePhysicalAttackDamageBonus">
|
||||
<amount>15</amount>
|
||||
<mode>PER</mode>
|
||||
</effect>
|
||||
<effect name="PvePhysicalSkillDamageBonus">
|
||||
<amount>15</amount>
|
||||
<mode>PER</mode>
|
||||
</effect>
|
||||
<effect name="PvePhysicalSkillDamageBonus">
|
||||
<amount>15</amount>
|
||||
<mode>PER</mode>
|
||||
</effect>
|
||||
<effect name="PveRaidMagicalSkillDamageBonus">
|
||||
<amount>15</amount>
|
||||
<mode>PER</mode>
|
||||
</effect>
|
||||
<effect name="PveRaidPhysicalAttackDamageBonus">
|
||||
<amount>15</amount>
|
||||
<mode>PER</mode>
|
||||
</effect>
|
||||
<effect name="PveRaidPhysicalSkillDamageBonus">
|
||||
<amount>15</amount>
|
||||
<mode>PER</mode>
|
||||
</effect>
|
||||
<effect name="PvpMagicalSkillDamageBonus">
|
||||
<amount>13</amount>
|
||||
<mode>PER</mode>
|
||||
</effect>
|
||||
<effect name="PvpPhysicalAttackDamageBonus">
|
||||
<amount>13</amount>
|
||||
<mode>PER</mode>
|
||||
</effect>
|
||||
<effect name="PvpPhysicalSkillDamageBonus">
|
||||
<amount>13</amount>
|
||||
<mode>PER</mode>
|
||||
</effect>
|
||||
<effect name="PhysicalDefence">
|
||||
<amount>80</amount>
|
||||
<mode>DIFF</mode>
|
||||
</effect>
|
||||
<effect name="MagicalDefence">
|
||||
<amount>80</amount>
|
||||
<mode>DIFF</mode>
|
||||
</effect>
|
||||
<effect name="StatUp">
|
||||
<amount>3</amount>
|
||||
<stat>STR</stat>
|
||||
</effect>
|
||||
<effect name="StatUp">
|
||||
<amount>3</amount>
|
||||
<stat>INT</stat>
|
||||
</effect>
|
||||
<effect name="StatUp">
|
||||
<amount>3</amount>
|
||||
<stat>CON</stat>
|
||||
</effect>
|
||||
<effect name="StatUp">
|
||||
<amount>3</amount>
|
||||
<stat>DEX</stat>
|
||||
</effect>
|
||||
<effect name="StatUp">
|
||||
<amount>3</amount>
|
||||
<stat>MEN</stat>
|
||||
</effect>
|
||||
<effect name="StatUp">
|
||||
<amount>3</amount>
|
||||
<stat>WIT</stat>
|
||||
</effect>
|
||||
<effect name="MaxHp">
|
||||
<amount>200</amount>
|
||||
<mode>DIFF</mode>
|
||||
</effect>
|
||||
<effect name="MaxMp">
|
||||
<amount>200</amount>
|
||||
<mode>DIFF</mode>
|
||||
</effect>
|
||||
</effects>
|
||||
</skill>
|
||||
<skill id="59725" toLevel="1" name="">
|
||||
<!-- AUTO GENERATED SKILL TODO: FIX IT -->
|
||||
<icon>icon.skill0000</icon>
|
||||
<operateType>A1</operateType>
|
||||
<skill id="59725" toLevel="1" name="VIP Lv. 10">
|
||||
<!-- TODO: Client side -->
|
||||
<icon>BranchIcon.Icon.g_skill_vip10</icon>
|
||||
<operateType>P</operateType>
|
||||
<hitTime>500</hitTime>
|
||||
<effects>
|
||||
<effect name="ExpModify">
|
||||
<amount>50</amount>
|
||||
</effect>
|
||||
<effect name="SpModify">
|
||||
<amount>50</amount>
|
||||
</effect>
|
||||
<effect name="BonusDropRate">
|
||||
<amount>300</amount>
|
||||
<mode>PER</mode>
|
||||
</effect>
|
||||
<effect name="WorldChatPoints">
|
||||
<amount>50</amount>
|
||||
<mode>DIFF</mode>
|
||||
</effect>
|
||||
<effect name="ReduceDropPenalty">
|
||||
<deathPenalty>-50</deathPenalty>
|
||||
<mode>PER</mode>
|
||||
</effect>
|
||||
<effect name="PveMagicalSkillDamageBonus">
|
||||
<amount>15</amount>
|
||||
<mode>PER</mode>
|
||||
</effect>
|
||||
<effect name="PvePhysicalAttackDamageBonus">
|
||||
<amount>15</amount>
|
||||
<mode>PER</mode>
|
||||
</effect>
|
||||
<effect name="PvePhysicalSkillDamageBonus">
|
||||
<amount>15</amount>
|
||||
<mode>PER</mode>
|
||||
</effect>
|
||||
<effect name="PvePhysicalSkillDamageBonus">
|
||||
<amount>15</amount>
|
||||
<mode>PER</mode>
|
||||
</effect>
|
||||
<effect name="PveRaidMagicalSkillDamageBonus">
|
||||
<amount>15</amount>
|
||||
<mode>PER</mode>
|
||||
</effect>
|
||||
<effect name="PveRaidPhysicalAttackDamageBonus">
|
||||
<amount>15</amount>
|
||||
<mode>PER</mode>
|
||||
</effect>
|
||||
<effect name="PveRaidPhysicalSkillDamageBonus">
|
||||
<amount>15</amount>
|
||||
<mode>PER</mode>
|
||||
</effect>
|
||||
<effect name="PvpMagicalSkillDamageBonus">
|
||||
<amount>15</amount>
|
||||
<mode>PER</mode>
|
||||
</effect>
|
||||
<effect name="PvpPhysicalAttackDamageBonus">
|
||||
<amount>15</amount>
|
||||
<mode>PER</mode>
|
||||
</effect>
|
||||
<effect name="PvpPhysicalSkillDamageBonus">
|
||||
<amount>15</amount>
|
||||
<mode>PER</mode>
|
||||
</effect>
|
||||
<effect name="PhysicalDefence">
|
||||
<amount>100</amount>
|
||||
<mode>DIFF</mode>
|
||||
</effect>
|
||||
<effect name="MagicalDefence">
|
||||
<amount>100</amount>
|
||||
<mode>DIFF</mode>
|
||||
</effect>
|
||||
<effect name="StatUp">
|
||||
<amount>4</amount>
|
||||
<stat>STR</stat>
|
||||
</effect>
|
||||
<effect name="StatUp">
|
||||
<amount>4</amount>
|
||||
<stat>INT</stat>
|
||||
</effect>
|
||||
<effect name="StatUp">
|
||||
<amount>4</amount>
|
||||
<stat>CON</stat>
|
||||
</effect>
|
||||
<effect name="StatUp">
|
||||
<amount>4</amount>
|
||||
<stat>DEX</stat>
|
||||
</effect>
|
||||
<effect name="StatUp">
|
||||
<amount>4</amount>
|
||||
<stat>MEN</stat>
|
||||
</effect>
|
||||
<effect name="StatUp">
|
||||
<amount>4</amount>
|
||||
<stat>WIT</stat>
|
||||
</effect>
|
||||
<effect name="MaxHp">
|
||||
<amount>500</amount>
|
||||
<mode>DIFF</mode>
|
||||
</effect>
|
||||
<effect name="MaxMp">
|
||||
<amount>500</amount>
|
||||
<mode>DIFF</mode>
|
||||
</effect>
|
||||
</effects>
|
||||
</skill>
|
||||
<skill id="59726" toLevel="1" name="">
|
||||
<!-- AUTO GENERATED SKILL TODO: FIX IT -->
|
||||
|
||||
245
L2J_Mobius_Essence_5.0_Sylph/dist/game/data/vip.xml
vendored
Normal file
245
L2J_Mobius_Essence_5.0_Sylph/dist/game/data/vip.xml
vendored
Normal file
@@ -0,0 +1,245 @@
|
||||
<?xml version='1.0' encoding='utf-8'?>
|
||||
<list xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="xsd/vip.xsd">
|
||||
<!--
|
||||
tier: tier of the vip
|
||||
points-requires: points required to get to that tier
|
||||
points-lose: points player will lose after a while.
|
||||
|
||||
PS. Client data made for Sylph! Probably works on essence aswell!
|
||||
|
||||
l2.ini
|
||||
[VipSystem]
|
||||
UseVipInfoWndAden=false
|
||||
|
||||
-> needs to be true
|
||||
|
||||
L2 Store needs to be true aswell!
|
||||
|
||||
ItemIds: 71314, 71315, 71316, 71317, 71268, 71269
|
||||
|
||||
|
||||
ItemName_ClassicAden-eu.dat
|
||||
|
||||
item_name_begin id=71314 name=[VIP Gain Scroll - 800] additionalname=[] description=[VIP Points +800.] popup=-1 default_action=[action_skill_reduce_on_skill_success] use_order=99 name_class=-1 color=1 Tooltip_Texture=[None] is_trade=0 is_drop=0 is_destruct=1 is_private_store=0 keep_type=1 is_npctrade=0 is_commission_store=0 item_name_end
|
||||
item_name_begin id=71315 name=[VIP Gain Scroll - 2400] additionalname=[] description=[VIP Points +2400.] popup=-1 default_action=[action_skill_reduce_on_skill_success] use_order=99 name_class=-1 color=1 Tooltip_Texture=[None] is_trade=0 is_drop=0 is_destruct=1 is_private_store=0 keep_type=1 is_npctrade=0 is_commission_store=0 item_name_end
|
||||
item_name_begin id=71316 name=[VIP Gain Scroll - 80] additionalname=[] description=[VIP Points +80.] popup=-1 default_action=[action_skill_reduce_on_skill_success] use_order=99 name_class=-1 color=1 Tooltip_Texture=[None] is_trade=0 is_drop=0 is_destruct=1 is_private_store=0 keep_type=1 is_npctrade=0 is_commission_store=0 item_name_end
|
||||
item_name_begin id=71317 name=[VIP Gain Scroll - 240] additionalname=[] description=[VIP Points +240.] popup=-1 default_action=[action_skill_reduce_on_skill_success] use_order=99 name_class=-1 color=1 Tooltip_Texture=[None] is_trade=0 is_drop=0 is_destruct=1 is_private_store=0 keep_type=1 is_npctrade=0 is_commission_store=0 item_name_end
|
||||
item_name_begin id=71268 name=[VIP Gain Scroll] additionalname=[] description=[VIP Points +27.] popup=-1 default_action=[action_skill_reduce_on_skill_success] use_order=99 name_class=-1 color=1 Tooltip_Texture=[None] is_trade=0 is_drop=0 is_destruct=1 is_private_store=0 keep_type=1 is_npctrade=0 is_commission_store=0 item_name_end
|
||||
item_name_begin id=71269 name=[Good VIP Gain Scroll] additionalname=[] description=[VIP Points +273.] popup=-1 default_action=[action_skill_reduce_on_skill_success] use_order=99 name_class=-1 color=1 Tooltip_Texture=[None] is_trade=0 is_drop=0 is_destruct=1 is_private_store=0 keep_type=1 is_npctrade=0 is_commission_store=0 item_name_end
|
||||
item_name_begin id=71177 name=[Daily Present - VIP 1] additionalname=[] description=[Double-click to obtain a Scroll of Escape and 3 HP Replenishing Potions.] popup=-1 default_action=[action_peel] use_order=99 name_class=-1 color=1 Tooltip_Texture=[None] is_trade=0 is_drop=0 is_destruct=1 is_private_store=0 keep_type=1 is_npctrade=0 is_commission_store=0 item_name_end
|
||||
item_name_begin id=71178 name=[Daily Present - VIP 2] additionalname=[] description=[Double-click to obtain a Scroll of Resurrection and 3 HP Replenishing Potions.] popup=-1 default_action=[action_peel] use_order=99 name_class=-1 color=1 Tooltip_Texture=[None] is_trade=0 is_drop=0 is_destruct=1 is_private_store=0 keep_type=1 is_npctrade=0 is_commission_store=0 item_name_end
|
||||
item_name_begin id=71179 name=[Daily Present - VIP 3] additionalname=[] description=[Double-click to obtain a Scroll of Escape, Scroll of Resurrection, 5 HP Replenishing Potions.] popup=-1 default_action=[action_peel] use_order=99 name_class=-1 color=1 Tooltip_Texture=[None] is_trade=0 is_drop=0 is_destruct=1 is_private_store=0 keep_type=1 is_npctrade=0 is_commission_store=0 item_name_end
|
||||
item_name_begin id=71180 name=[Daily Present - VIP 4] additionalname=[] description=[Double-click to obtain a Scroll of Escape, Scroll of Resurrection, 3 HP Replenishing Potions.] popup=-1 default_action=[action_peel] use_order=99 name_class=-1 color=1 Tooltip_Texture=[None] is_trade=0 is_drop=0 is_destruct=1 is_private_store=0 keep_type=1 is_npctrade=0 is_commission_store=0 item_name_end
|
||||
item_name_begin id=71181 name=[Daily Present - VIP 5] additionalname=[] description=[Double-click to obtain a Blessed Scroll of Escape, 3 High-grade HP Replenishing Potions, 40 VIP Coins.] popup=-1 default_action=[action_peel] use_order=99 name_class=-1 color=1 Tooltip_Texture=[None] is_trade=0 is_drop=0 is_destruct=1 is_private_store=0 keep_type=1 is_npctrade=0 is_commission_store=0 item_name_end
|
||||
item_name_begin id=71182 name=[Daily Present - VIP 6] additionalname=[] description=[Double-click to obtain a Blessed Scroll of Resurrection, 3 High-grade HP Replenishing Potions, 100 VIP Coins.] popup=-1 default_action=[action_peel] use_order=99 name_class=-1 color=1 Tooltip_Texture=[None] is_trade=0 is_drop=0 is_destruct=1 is_private_store=0 keep_type=1 is_npctrade=0 is_commission_store=0 item_name_end
|
||||
item_name_begin id=71183 name=[Daily Present - VIP 7] additionalname=[] description=[Double-click to obtain a Blessed Scroll of Escape, 1 Blessed Scroll of Resurrection, 3 High-grade HP Replenishing Potions, 150 VIP Coins.] popup=-1 default_action=[action_peel] use_order=99 name_class=-1 color=1 Tooltip_Texture=[None] is_trade=0 is_drop=0 is_destruct=1 is_private_store=0 keep_type=1 is_npctrade=0 is_commission_store=0 item_name_end
|
||||
item_name_begin id=99027 name=[Daily Present - VIP 8] additionalname=[] description=[CHANGE ME Double-click to obtain a Blessed Scroll of Escape, 1 Blessed Scroll of Resurrection, 3 High-grade HP Replenishing Potions, 150 VIP Coins.] popup=-1 default_action=[action_peel] use_order=99 name_class=-1 color=1 Tooltip_Texture=[None] is_trade=0 is_drop=0 is_destruct=1 is_private_store=0 keep_type=1 is_npctrade=0 is_commission_store=0 item_name_end
|
||||
item_name_begin id=99028 name=[Daily Present - VIP 9] additionalname=[] description=[CHANGE ME Double-click to obtain a Blessed Scroll of Escape, 1 Blessed Scroll of Resurrection, 3 High-grade HP Replenishing Potions, 150 VIP Coins.] popup=-1 default_action=[action_peel] use_order=99 name_class=-1 color=1 Tooltip_Texture=[None] is_trade=0 is_drop=0 is_destruct=1 is_private_store=0 keep_type=1 is_npctrade=0 is_commission_store=0 item_name_end
|
||||
item_name_begin id=99029 name=[Daily Present - VIP 10] additionalname=[] description=[CHANGE ME Double-click to obtain a Blessed Scroll of Escape, 1 Blessed Scroll of Resurrection, 3 High-grade HP Replenishing Potions, 150 VIP Coins.] popup=-1 default_action=[action_peel] use_order=99 name_class=-1 color=1 Tooltip_Texture=[None] is_trade=0 is_drop=0 is_destruct=1 is_private_store=0 keep_type=1 is_npctrade=0 is_commission_store=0 item_name_end
|
||||
|
||||
ItemName_ClassicAden-eu.dat [end]
|
||||
item_ex_begin id=71314 keep_type_selection=normal keep_type_enchant={0;0;0} item_ex_end
|
||||
item_ex_begin id=71315 keep_type_selection=normal keep_type_enchant={0;0;0} item_ex_end
|
||||
item_ex_begin id=71316 keep_type_selection=normal keep_type_enchant={0;0;0} item_ex_end
|
||||
item_ex_begin id=71317 keep_type_selection=normal keep_type_enchant={0;0;0} item_ex_end
|
||||
item_ex_begin id=71268 keep_type_selection=normal keep_type_enchant={0;0;0} item_ex_end
|
||||
item_ex_begin id=71269 keep_type_selection=normal keep_type_enchant={0;0;0} item_ex_end
|
||||
item_ex_begin id=71177 keep_type_selection=normal keep_type_enchant={0;0;0} item_ex_end
|
||||
item_ex_begin id=71178 keep_type_selection=normal keep_type_enchant={0;0;0} item_ex_end
|
||||
item_ex_begin id=71179 keep_type_selection=normal keep_type_enchant={0;0;0} item_ex_end
|
||||
item_ex_begin id=71180 keep_type_selection=normal keep_type_enchant={0;0;0} item_ex_end
|
||||
item_ex_begin id=71181 keep_type_selection=normal keep_type_enchant={0;0;0} item_ex_end
|
||||
item_ex_begin id=71182 keep_type_selection=normal keep_type_enchant={0;0;0} item_ex_end
|
||||
item_ex_begin id=71183 keep_type_selection=normal keep_type_enchant={0;0;0} item_ex_end
|
||||
item_ex_begin id=99027 keep_type_selection=normal keep_type_enchant={0;0;0} item_ex_end
|
||||
item_ex_begin id=99028 keep_type_selection=normal keep_type_enchant={0;0;0} item_ex_end
|
||||
item_ex_begin id=99029 keep_type_selection=normal keep_type_enchant={0;0;0} item_ex_end
|
||||
|
||||
|
||||
ProductName_ClassicAden-eu.dat
|
||||
product_name_begin id=2090044 outer_name=[VIP Gain Scroll] description=[] icon=[BranchIcon.Icon.g_bm_vip_potion_i00] icon_panel=[None] mainsubject=[] product_name_end
|
||||
product_name_begin id=2090045 outer_name=[Good VIP Gain Scroll] description=[] icon=[BranchIcon.Icon.g_bm_vip_potion_i00] icon_panel=[None] mainsubject=[] product_name_end
|
||||
product_name_begin id=2090046 outer_name=[VIP Gain Scroll - 80] description=[] icon=[BranchIcon.Icon.g_bm_vip_potion_i00] icon_panel=[None] mainsubject=[] product_name_end
|
||||
product_name_begin id=2090047 outer_name=[VIP Gain Scroll - 240] description=[] icon=[BranchIcon.Icon.g_bm_vip_potion_i00] icon_panel=[None] mainsubject=[] product_name_end
|
||||
product_name_begin id=2090048 outer_name=[VIP Gain Scroll - 800] description=[] icon=[BranchIcon.Icon.g_bm_vip_potion_i00] icon_panel=[None] mainsubject=[] product_name_end
|
||||
product_name_begin id=2090049 outer_name=[VIP Gain Scroll - 2400] description=[] icon=[BranchIcon.Icon.g_bm_vip_potion_i00] icon_panel=[None] mainsubject=[] product_name_end
|
||||
product_name_begin id=2090050 outer_name=[Daily Present - VIP 1] description=[] icon=[BranchIcon.Icon.etc_vip_present_i00] icon_panel=[None] mainsubject=[] product_name_end
|
||||
product_name_begin id=2090051 outer_name=[Daily Present - VIP 2] description=[] icon=[BranchIcon.Icon.etc_vip_present_i01] icon_panel=[None] mainsubject=[] product_name_end
|
||||
product_name_begin id=2090052 outer_name=[Daily Present - VIP 3] description=[] icon=[BranchIcon.Icon.etc_vip_present_i02] icon_panel=[None] mainsubject=[] product_name_end
|
||||
product_name_begin id=2090053 outer_name=[Daily Present - VIP 4] description=[] icon=[BranchIcon.Icon.etc_vip_present_i03] icon_panel=[None] mainsubject=[] product_name_end
|
||||
product_name_begin id=2090054 outer_name=[Daily Present - VIP 5] description=[] icon=[BranchIcon.Icon.etc_vip_present_i04] icon_panel=[None] mainsubject=[] product_name_end
|
||||
product_name_begin id=2090055 outer_name=[Daily Present - VIP 6] description=[] icon=[BranchIcon.Icon.etc_vip_present_i05] icon_panel=[None] mainsubject=[] product_name_end
|
||||
product_name_begin id=2090056 outer_name=[Daily Present - VIP 7] description=[] icon=[BranchIcon.Icon.etc_vip_present_i06] icon_panel=[None] mainsubject=[] product_name_end
|
||||
product_name_begin id=2090057 outer_name=[Daily Present - VIP 8] description=[] icon=[BranchIcon.Icon.etc_vip_present_i08] icon_panel=[None] mainsubject=[] product_name_end
|
||||
product_name_begin id=2090058 outer_name=[Daily Present - VIP 9] description=[] icon=[BranchIcon.Icon.etc_vip_present_i09] icon_panel=[None] mainsubject=[] product_name_end
|
||||
product_name_begin id=2090059 outer_name=[Daily Present - VIP 10] description=[] icon=[BranchIcon.Icon.etc_vip_present_i10] icon_panel=[None] mainsubject=[] product_name_end
|
||||
|
||||
|
||||
EtcItemgrp_ClassicAden.dat
|
||||
item_begin tag=2 object_id=71314 drop_type=0 drop_anim_type=3 drop_radius=6 drop_height=3 drop_texture={{[dropitems.drop_scroll_m00];{[dropitemstex.drop_scroll_t00]}}} icon={[BranchIcon.Icon.g_bm_vip_potion_i00];[None];[None];[None];[None]} durability=-1 weight=5 material_type=paper crystallizable=0 related_quest_id={} color=1 is_attribution=0 property_params=0 icon_panel=[None] complete_item_dropsound_type=[None] inventory_type=consumable mesh={[None]} texture={[None]} drop_sound=[ItemSound.itemdrop_scroll] equip_sound=[None] consume_type=consume_type_stackable etcitem_type=scroll crystal_type=crystal_free item_end
|
||||
item_begin tag=2 object_id=71315 drop_type=0 drop_anim_type=3 drop_radius=6 drop_height=3 drop_texture={{[dropitems.drop_scroll_m00];{[dropitemstex.drop_scroll_t00]}}} icon={[BranchIcon.Icon.g_bm_vip_potion_i00];[None];[None];[None];[None]} durability=-1 weight=5 material_type=paper crystallizable=0 related_quest_id={} color=1 is_attribution=0 property_params=0 icon_panel=[icon.panel_2] complete_item_dropsound_type=[None] inventory_type=consumable mesh={[None]} texture={[None]} drop_sound=[ItemSound.itemdrop_scroll] equip_sound=[None] consume_type=consume_type_stackable etcitem_type=scroll crystal_type=crystal_free item_end
|
||||
item_begin tag=2 object_id=71316 drop_type=0 drop_anim_type=3 drop_radius=6 drop_height=3 drop_texture={{[dropitems.drop_scroll_m00];{[dropitemstex.drop_scroll_t00]}}} icon={[BranchIcon.Icon.g_bm_vip_potion_i00];[None];[None];[None];[None]} durability=-1 weight=5 material_type=paper crystallizable=0 related_quest_id={} color=1 is_attribution=0 property_params=0 icon_panel=[None] complete_item_dropsound_type=[None] inventory_type=consumable mesh={[None]} texture={[None]} drop_sound=[ItemSound.itemdrop_scroll] equip_sound=[None] consume_type=consume_type_stackable etcitem_type=scroll crystal_type=crystal_free item_end
|
||||
item_begin tag=2 object_id=71317 drop_type=0 drop_anim_type=3 drop_radius=6 drop_height=3 drop_texture={{[dropitems.drop_scroll_m00];{[dropitemstex.drop_scroll_t00]}}} icon={[BranchIcon.Icon.g_bm_vip_potion_i00];[None];[None];[None];[None]} durability=-1 weight=5 material_type=paper crystallizable=0 related_quest_id={} color=1 is_attribution=0 property_params=0 icon_panel=[icon.panel_2] complete_item_dropsound_type=[None] inventory_type=consumable mesh={[None]} texture={[None]} drop_sound=[ItemSound.itemdrop_scroll] equip_sound=[None] consume_type=consume_type_stackable etcitem_type=scroll crystal_type=crystal_free item_end
|
||||
item_begin tag=2 object_id=71268 drop_type=0 drop_anim_type=3 drop_radius=6 drop_height=3 drop_texture={{[dropitems.drop_scroll_m00];{[dropitemstex.drop_scroll_t00]}}} icon={[BranchIcon.Icon.g_bm_vip_potion_i00];[None];[None];[None];[None]} durability=-1 weight=5 material_type=paper crystallizable=0 related_quest_id={} color=1 is_attribution=0 property_params=0 icon_panel=[None] complete_item_dropsound_type=[None] inventory_type=consumable mesh={[None]} texture={[None]} drop_sound=[ItemSound.itemdrop_scroll] equip_sound=[None] consume_type=consume_type_stackable etcitem_type=scroll crystal_type=crystal_free item_end
|
||||
item_begin tag=2 object_id=71269 drop_type=0 drop_anim_type=3 drop_radius=6 drop_height=3 drop_texture={{[dropitems.drop_scroll_m00];{[dropitemstex.drop_scroll_t00]}}} icon={[BranchIcon.Icon.g_bm_vip_potion_i00];[None];[None];[None];[None]} durability=-1 weight=5 material_type=paper crystallizable=0 related_quest_id={} color=1 is_attribution=0 property_params=0 icon_panel=[icon.panel_2] complete_item_dropsound_type=[None] inventory_type=consumable mesh={[None]} texture={[None]} drop_sound=[ItemSound.itemdrop_scroll] equip_sound=[None] consume_type=consume_type_stackable etcitem_type=scroll crystal_type=crystal_free item_end
|
||||
item_begin tag=2 object_id=71177 drop_type=0 drop_anim_type=3 drop_radius=5 drop_height=6 drop_texture={{[None];{[None]}}} icon={[BranchIcon.Icon.etc_vip_present_i00];[None];[None];[None];[None]} durability=-1 weight=10 material_type=paper crystallizable=0 related_quest_id={} color=1 is_attribution=0 property_params=0 icon_panel=[None] complete_item_dropsound_type=[None] inventory_type=etc mesh={[None]} texture={[None]} drop_sound=[None] equip_sound=[None] consume_type=consume_type_stackable etcitem_type=none crystal_type=crystal_free item_end
|
||||
item_begin tag=2 object_id=71178 drop_type=0 drop_anim_type=3 drop_radius=5 drop_height=6 drop_texture={{[None];{[None]}}} icon={[BranchIcon.Icon.etc_vip_present_i01];[None];[None];[None];[None]} durability=-1 weight=10 material_type=paper crystallizable=0 related_quest_id={} color=1 is_attribution=0 property_params=0 icon_panel=[None] complete_item_dropsound_type=[None] inventory_type=etc mesh={[None]} texture={[None]} drop_sound=[None] equip_sound=[None] consume_type=consume_type_stackable etcitem_type=none crystal_type=crystal_free item_end
|
||||
item_begin tag=2 object_id=71179 drop_type=0 drop_anim_type=3 drop_radius=5 drop_height=6 drop_texture={{[None];{[None]}}} icon={[BranchIcon.Icon.etc_vip_present_i02];[None];[None];[None];[None]} durability=-1 weight=10 material_type=paper crystallizable=0 related_quest_id={} color=1 is_attribution=0 property_params=0 icon_panel=[None] complete_item_dropsound_type=[None] inventory_type=etc mesh={[None]} texture={[None]} drop_sound=[None] equip_sound=[None] consume_type=consume_type_stackable etcitem_type=none crystal_type=crystal_free item_end
|
||||
item_begin tag=2 object_id=71180 drop_type=0 drop_anim_type=3 drop_radius=5 drop_height=6 drop_texture={{[None];{[None]}}} icon={[BranchIcon.Icon.etc_vip_present_i03];[None];[None];[None];[None]} durability=-1 weight=10 material_type=paper crystallizable=0 related_quest_id={} color=1 is_attribution=0 property_params=0 icon_panel=[None] complete_item_dropsound_type=[None] inventory_type=etc mesh={[None]} texture={[None]} drop_sound=[None] equip_sound=[None] consume_type=consume_type_stackable etcitem_type=none crystal_type=crystal_free item_end
|
||||
item_begin tag=2 object_id=71181 drop_type=0 drop_anim_type=3 drop_radius=5 drop_height=6 drop_texture={{[None];{[None]}}} icon={[BranchIcon.Icon.etc_vip_present_i04];[None];[None];[None];[None]} durability=-1 weight=10 material_type=paper crystallizable=0 related_quest_id={} color=1 is_attribution=0 property_params=0 icon_panel=[None] complete_item_dropsound_type=[None] inventory_type=etc mesh={[None]} texture={[None]} drop_sound=[None] equip_sound=[None] consume_type=consume_type_stackable etcitem_type=none crystal_type=crystal_free item_end
|
||||
item_begin tag=2 object_id=71182 drop_type=0 drop_anim_type=3 drop_radius=5 drop_height=6 drop_texture={{[None];{[None]}}} icon={[BranchIcon.Icon.etc_vip_present_i05];[None];[None];[None];[None]} durability=-1 weight=10 material_type=paper crystallizable=0 related_quest_id={} color=1 is_attribution=0 property_params=0 icon_panel=[None] complete_item_dropsound_type=[None] inventory_type=etc mesh={[None]} texture={[None]} drop_sound=[None] equip_sound=[None] consume_type=consume_type_stackable etcitem_type=none crystal_type=crystal_free item_end
|
||||
item_begin tag=2 object_id=71183 drop_type=0 drop_anim_type=3 drop_radius=5 drop_height=6 drop_texture={{[None];{[None]}}} icon={[BranchIcon.Icon.etc_vip_present_i06];[None];[None];[None];[None]} durability=-1 weight=10 material_type=paper crystallizable=0 related_quest_id={} color=1 is_attribution=0 property_params=0 icon_panel=[None] complete_item_dropsound_type=[None] inventory_type=etc mesh={[None]} texture={[None]} drop_sound=[None] equip_sound=[None] consume_type=consume_type_stackable etcitem_type=none crystal_type=crystal_free item_end
|
||||
item_begin tag=2 object_id=99027 drop_type=0 drop_anim_type=3 drop_radius=5 drop_height=6 drop_texture={{[None];{[None]}}} icon={[BranchIcon.Icon.etc_vip_present_i08];[None];[None];[None];[None]} durability=-1 weight=10 material_type=paper crystallizable=0 related_quest_id={} color=1 is_attribution=0 property_params=0 icon_panel=[None] complete_item_dropsound_type=[None] inventory_type=etc mesh={[None]} texture={[None]} drop_sound=[None] equip_sound=[None] consume_type=consume_type_stackable etcitem_type=none crystal_type=crystal_free item_end
|
||||
item_begin tag=2 object_id=99028 drop_type=0 drop_anim_type=3 drop_radius=5 drop_height=6 drop_texture={{[None];{[None]}}} icon={[BranchIcon.Icon.etc_vip_present_i09];[None];[None];[None];[None]} durability=-1 weight=10 material_type=paper crystallizable=0 related_quest_id={} color=1 is_attribution=0 property_params=0 icon_panel=[None] complete_item_dropsound_type=[None] inventory_type=etc mesh={[None]} texture={[None]} drop_sound=[None] equip_sound=[None] consume_type=consume_type_stackable etcitem_type=none crystal_type=crystal_free item_end
|
||||
item_begin tag=2 object_id=99029 drop_type=0 drop_anim_type=3 drop_radius=5 drop_height=6 drop_texture={{[None];{[None]}}} icon={[BranchIcon.Icon.etc_vip_present_i10];[None];[None];[None];[None]} durability=-1 weight=10 material_type=paper crystallizable=0 related_quest_id={} color=1 is_attribution=0 property_params=0 icon_panel=[None] complete_item_dropsound_type=[None] inventory_type=etc mesh={[None]} texture={[None]} drop_sound=[None] equip_sound=[None] consume_type=consume_type_stackable etcitem_type=none crystal_type=crystal_free item_end
|
||||
|
||||
|
||||
Placeholders!!!! The skill exist and is edited. Only client side need to be done. But we cannot open skillgrp yet due missing grp enum.
|
||||
|
||||
SkillName_ClassicAden-eu.dat
|
||||
skill_begin skill_id=59723 skill_level=1 skill_sublevel=0 name=[VIP Lv. 8] desc=[You can obtain a daily VIP chest Lv. 8. Acquired XP/ SP +35%%, item drop rate +300%%, Death XP Penalty -30%%. Increases PvP/ PvE damage, STR/ DEX/ CON/ INT/ WIT/ MEN +2. You can use the world chat at any level (world chat messages +50).] desc_param=[] enchant_name=[none] enchant_name_param=[] enchant_desc=[none] enchant_desc_param=[] skill_end
|
||||
skill_begin skill_id=59724 skill_level=1 skill_sublevel=0 name=[VIP Lv. 9] desc=[You can obtain a daily VIP chest Lv. 9. Acquired XP/ SP +40%%, item drop rate +300%%, Death XP Penalty -40%%. Increases PvP/ PvE damage, STR/ DEX/ CON/ INT/ WIT/ MEN +3. You can use the world chat at any level (world chat messages +50).] desc_param=[] enchant_name=[none] enchant_name_param=[] enchant_desc=[none] enchant_desc_param=[] skill_end
|
||||
skill_begin skill_id=59725 skill_level=1 skill_sublevel=0 name=[VIP Lv. 10] desc=[You can obtain a daily VIP chest Lv. 10. Acquired XP/ SP +50%%, item drop rate +300%%, Death XP Penalty -50%%. Increases PvP/ PvE damage, STR/ DEX/ CON/ INT/ WIT/ MEN +4. You can use the world chat at any level (world chat messages +50).] desc_param=[] enchant_name=[none] enchant_name_param=[] enchant_desc=[none] enchant_desc_param=[] skill_end
|
||||
|
||||
Skillgrp_ClassicAden.dat [Sylph]
|
||||
skill_begin skill_id=59723 skill_level=1 skill_sublevel=0 icon_type=40 icon_hide=0 MagicType=default operate_type=2 mp_consume=0 cast_range=-1 cast_style=0 hit_time=0.0 cool_time=0.0 reuse_delay=0.0 effect_point=0 is_magic=0 origin_skill=0 is_double=0 animation={[None]} skill_visual_effect=[None] icon=[BranchIcon.Icon.g_skill_vip8] icon_panel=[None] debuff=0 resist_cast=0 enchant_skill_level=0 enchant_icon=[None] hp_consume=0 rumble_self=-1 rumble_target=-1 level_hide=0 dp_consume=0 energy_consume=0 dbdelete=0 abnormal_time=0 trait_type=None target_type=none affect_scope=none skill_end
|
||||
skill_begin skill_id=59724 skill_level=1 skill_sublevel=0 icon_type=40 icon_hide=0 MagicType=default operate_type=2 mp_consume=0 cast_range=-1 cast_style=0 hit_time=0.0 cool_time=0.0 reuse_delay=0.0 effect_point=0 is_magic=0 origin_skill=0 is_double=0 animation={[None]} skill_visual_effect=[None] icon=[BranchIcon.Icon.g_skill_vip9] icon_panel=[None] debuff=0 resist_cast=0 enchant_skill_level=0 enchant_icon=[None] hp_consume=0 rumble_self=-1 rumble_target=-1 level_hide=0 dp_consume=0 energy_consume=0 dbdelete=0 abnormal_time=0 trait_type=None target_type=none affect_scope=none skill_end
|
||||
skill_begin skill_id=59725 skill_level=1 skill_sublevel=0 icon_type=40 icon_hide=0 MagicType=default operate_type=2 mp_consume=0 cast_range=-1 cast_style=0 hit_time=0.0 cool_time=0.0 reuse_delay=0.0 effect_point=0 is_magic=0 origin_skill=0 is_double=0 animation={[None]} skill_visual_effect=[None] icon=[BranchIcon.Icon.g_skill_vip10] icon_panel=[None] debuff=0 resist_cast=0 enchant_skill_level=0 enchant_icon=[None] hp_consume=0 rumble_self=-1 rumble_target=-1 level_hide=0 dp_consume=0 energy_consume=0 dbdelete=0 abnormal_time=0 trait_type=None target_type=none affect_scope=none skill_end
|
||||
|
||||
|
||||
-->
|
||||
|
||||
<vip tier="0" points-required="0" points-lose="0">
|
||||
<bonus/>
|
||||
</vip>
|
||||
<vip tier="1" points-required="300" points-lose="300">
|
||||
<bonus skill="55024"/>
|
||||
</vip>
|
||||
<vip tier="2" points-required="1000" points-lose="600">
|
||||
<bonus skill="55025"/>
|
||||
</vip>
|
||||
<vip tier="3" points-required="2000" points-lose="660">
|
||||
<bonus skill="55026"/>
|
||||
</vip>
|
||||
<vip tier="4" points-required="3500" points-lose="1320">
|
||||
<bonus skill="55027"/>
|
||||
</vip>
|
||||
<vip tier="5" points-required="7000" points-lose="2640">
|
||||
<bonus skill="55028"/>
|
||||
</vip>
|
||||
<vip tier="6" points-required="20000" points-lose="5280">
|
||||
<bonus skill="55029"/>
|
||||
</vip>
|
||||
<vip tier="7" points-required="40000" points-lose="10560">
|
||||
<bonus skill="55030"/>
|
||||
</vip>
|
||||
<vip tier="8" points-required="60000" points-lose="15740">
|
||||
<bonus skill="59723"/>
|
||||
</vip>
|
||||
<vip tier="9" points-required="80000" points-lose="21120">
|
||||
<bonus skill="59724"/>
|
||||
</vip>
|
||||
<vip tier="10" points-required="120000" points-lose="31680">
|
||||
<bonus skill="59725"/>
|
||||
</vip>
|
||||
</list>
|
||||
|
||||
|
||||
<!--
|
||||
<file pattern="kor_prelude_of_war_p10" isSafePackage="true">
|
||||
<node name="data" reader="UINT" />
|
||||
<for name="skill" size="#data" hidden="false">
|
||||
<node name="skill_id" reader="UINT" />
|
||||
<node name="skill_level" reader="UCHAR" />
|
||||
<node name="skill_sublevel" reader="SHORT" />
|
||||
<node name="icon_type" reader="UCHAR" />
|
||||
<node name="icon_hide" reader="UCHAR" />
|
||||
<node name="MagicType" reader="UCHAR" enumName="skill_magic_type" />
|
||||
<node name="operate_type" reader="UCHAR" />
|
||||
<node name="mp_consume" reader="SHORT" />
|
||||
<node name="cast_range" reader="UINT" />
|
||||
<node name="cast_style" reader="UCHAR" />
|
||||
<node name="hit_time" reader="FLOAT" />
|
||||
<node name="cool_time" reader="FLOAT" />
|
||||
<node name="reuse_delay" reader="FLOAT" />
|
||||
<node name="effect_point" reader="UINT" />
|
||||
<node name="is_magic" reader="UCHAR" />
|
||||
<node name="origin_skill" reader="UINT" />
|
||||
<node name="is_double" reader="UCHAR" />
|
||||
<node name="animation" reader="UINT" />
|
||||
<for name="animation" size="#animation">
|
||||
<node name="param_animation" reader="MAP_INT" />
|
||||
</for>
|
||||
<node name="skill_visual_effect" reader="MAP_INT" />
|
||||
<node name="icon" reader="MAP_INT" />
|
||||
<node name="icon_panel" reader="MAP_INT" />
|
||||
<node name="debuff" reader="UCHAR" />
|
||||
<node name="resist_cast" reader="UCHAR" />
|
||||
<node name="enchant_skill_level" reader="UCHAR" />
|
||||
<node name="enchant_icon" reader="MAP_INT" />
|
||||
<node name="hp_consume" reader="SHORT" />
|
||||
<node name="rumble_self" reader="UCHAR" />
|
||||
<node name="rumble_target" reader="UCHAR" />
|
||||
<node name="level_hide" reader="UCHAR" />
|
||||
<node name="dp_consume" reader="UCHAR" />
|
||||
<node name="energy_consume" reader="UCHAR" />
|
||||
<node name="dbdelete" reader="INT" />
|
||||
<node name="abnormal_time" reader="UINT" />
|
||||
<node name="trait_type" reader="UCHAR" enumName="trait_type" />
|
||||
<node name="target_type" reader="UCHAR" enumName="target_type" />
|
||||
<node name="affect_scope" reader="UCHAR" enumName="affect_scope" />
|
||||
</for>
|
||||
<node name="data2" reader="CNTR" />
|
||||
<for name="skill_macro" size="#data2" hidden="false">
|
||||
<node name="skill_id" reader="UINT" />
|
||||
<node name="automatic_use" reader="UCHAR" />
|
||||
</for>
|
||||
<node name="data3" reader="CNTR" />
|
||||
<for name="skill_ex_icon" size="#data3" hidden="false">
|
||||
<node name="skill_id" reader="UINT" />
|
||||
<node name="skill_level" reader="UCHAR" />
|
||||
<node name="skill_sublevel" reader="SHORT" />
|
||||
<node name="icon_panel2" reader="MAP_INT" />
|
||||
</for>
|
||||
</file>
|
||||
|
||||
<enum name="trait_type">
|
||||
<node index="0" name="None" />
|
||||
</enum>
|
||||
<enum name="target_type">
|
||||
<node index="0" name="none" />
|
||||
<node index="1" name="self" />
|
||||
<node index="2" name="target" />
|
||||
<node index="3" name="targetself" />
|
||||
<node index="4" name="enemy" />
|
||||
<node index="5" name="enemyonly" />
|
||||
<node index="6" name="enemynot" />
|
||||
<node index="7" name="summon" />
|
||||
</enum>
|
||||
<enum name="affect_scope">
|
||||
<node index="0" name="none" />
|
||||
<node index="1" name="single" />
|
||||
<node index="2" name="range" />
|
||||
<node index="3" name="fan" />
|
||||
<node index="4" name="pointblank" />
|
||||
<node index="5" name="party" />
|
||||
<node index="6" name="square" />
|
||||
<node index="7" name="pledge" />
|
||||
<node index="8" name="rangesortbyhp" />
|
||||
<node index="9" name="rangesortbydist" />
|
||||
</enum>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
-->
|
||||
@@ -34,6 +34,8 @@
|
||||
<xs:attribute type="xs:byte" name="maxBirthday" use="optional" />
|
||||
<xs:attribute type="xs:byte" name="restrictionDay" use="optional" />
|
||||
<xs:attribute type="xs:byte" name="availableCount" use="optional" />
|
||||
<xs:attribute type="xs:boolean" name="isVipGift" use="optional" />
|
||||
<xs:attribute type="xs:byte" name="vipTier" use="optional" />
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
</xs:sequence>
|
||||
|
||||
24
L2J_Mobius_Essence_5.0_Sylph/dist/game/data/xsd/vip.xsd
vendored
Normal file
24
L2J_Mobius_Essence_5.0_Sylph/dist/game/data/xsd/vip.xsd
vendored
Normal file
@@ -0,0 +1,24 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
|
||||
<xs:element name="list">
|
||||
<xs:complexType>
|
||||
<xs:sequence>
|
||||
<xs:element name="vip" type="TierInfo" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
||||
</xs:element>
|
||||
|
||||
<xs:complexType name="TierInfo">
|
||||
<xs:sequence>
|
||||
<xs:element name="bonus" type="TierBonusInfo"/>
|
||||
</xs:sequence>
|
||||
<xs:attribute name="tier" type="xs:byte" use="required"/>
|
||||
<xs:attribute name="points-required" type="xs:long" use="required"/>
|
||||
<xs:attribute name="points-lose" type="xs:long" use="required"/>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="TierBonusInfo">
|
||||
<xs:attribute name="skill" type="xs:int" default="0"/>
|
||||
</xs:complexType>
|
||||
</xs:schema>
|
||||
@@ -134,6 +134,7 @@ public class Config
|
||||
private static final String CUSTOM_OFFLINE_TRADE_CONFIG_FILE = "./config/Custom/OfflineTrade.ini";
|
||||
private static final String CUSTOM_PASSWORD_CHANGE_CONFIG_FILE = "./config/Custom/PasswordChange.ini";
|
||||
private static final String CUSTOM_PC_CAFE_CONFIG_FILE = "./config/Custom/PcCafe.ini";
|
||||
private static final String CUSTOM_VIP_CONFIG_FILE = "./config/Custom/VipSystem.ini";
|
||||
private static final String CUSTOM_PREMIUM_SYSTEM_CONFIG_FILE = "./config/Custom/PremiumSystem.ini";
|
||||
private static final String CUSTOM_PRIVATE_STORE_RANGE_CONFIG_FILE = "./config/Custom/PrivateStoreRange.ini";
|
||||
private static final String CUSTOM_PVP_ANNOUNCE_CONFIG_FILE = "./config/Custom/PvpAnnounce.ini";
|
||||
@@ -156,6 +157,7 @@ public class Config
|
||||
|
||||
public static boolean ENABLE_ATTENDANCE_REWARDS;
|
||||
public static boolean PREMIUM_ONLY_ATTENDANCE_REWARDS;
|
||||
public static boolean VIP_ONLY_ATTENDANCE_REWARDS;
|
||||
public static boolean ATTENDANCE_REWARDS_SHARE_ACCOUNT;
|
||||
public static int ATTENDANCE_REWARD_DELAY;
|
||||
public static boolean ATTENDANCE_POPUP_START;
|
||||
@@ -1261,6 +1263,7 @@ public class Config
|
||||
public static boolean PREMIUM_ONLY_FISHING;
|
||||
public static boolean PC_CAFE_ENABLED;
|
||||
public static boolean PC_CAFE_ONLY_PREMIUM;
|
||||
public static boolean PC_CAFE_ONLY_VIP;
|
||||
public static int PC_CAFE_MAX_POINTS;
|
||||
public static boolean PC_CAFE_ENABLE_DOUBLE_POINTS;
|
||||
public static int PC_CAFE_DOUBLE_POINTS_CHANCE;
|
||||
@@ -1268,6 +1271,10 @@ public class Config
|
||||
public static boolean PC_CAFE_RANDOM_POINT;
|
||||
public static boolean PC_CAFE_REWARD_LOW_EXP_KILLS;
|
||||
public static int PC_CAFE_LOW_EXP_KILLS_CHANCE;
|
||||
public static boolean VIP_SYSTEM_ENABLED;
|
||||
public static boolean VIP_SYSTEM_PRIME_AFFECT;
|
||||
public static boolean VIP_SYSTEM_L_SHOP_AFFECT;
|
||||
public static int VIP_SYSTEM_MAX_TIER;
|
||||
public static boolean SELLBUFF_ENABLED;
|
||||
public static int SELLBUFF_MP_MULTIPLER;
|
||||
public static int SELLBUFF_PAYMENT_ID;
|
||||
@@ -1555,6 +1562,7 @@ public class Config
|
||||
final PropertiesParser Attandance = new PropertiesParser(ATTENDANCE_CONFIG_FILE);
|
||||
ENABLE_ATTENDANCE_REWARDS = Attandance.getBoolean("EnableAttendanceRewards", false);
|
||||
PREMIUM_ONLY_ATTENDANCE_REWARDS = Attandance.getBoolean("PremiumOnlyAttendanceRewards", false);
|
||||
VIP_ONLY_ATTENDANCE_REWARDS = Attandance.getBoolean("VipOnlyAttendanceRewards", false);
|
||||
ATTENDANCE_REWARDS_SHARE_ACCOUNT = Attandance.getBoolean("AttendanceRewardsShareAccount", false);
|
||||
ATTENDANCE_REWARD_DELAY = Attandance.getInt("AttendanceRewardDelay", 30);
|
||||
ATTENDANCE_POPUP_START = Attandance.getBoolean("AttendancePopupStart", true);
|
||||
@@ -3259,6 +3267,7 @@ public class Config
|
||||
final PropertiesParser PcCafe = new PropertiesParser(CUSTOM_PC_CAFE_CONFIG_FILE);
|
||||
PC_CAFE_ENABLED = PcCafe.getBoolean("PcCafeEnabled", false);
|
||||
PC_CAFE_ONLY_PREMIUM = PcCafe.getBoolean("PcCafeOnlyPremium", false);
|
||||
PC_CAFE_ONLY_VIP = PcCafe.getBoolean("PcCafeOnlyVip", false);
|
||||
PC_CAFE_MAX_POINTS = PcCafe.getInt("MaxPcCafePoints", 200000);
|
||||
if (PC_CAFE_MAX_POINTS < 0)
|
||||
{
|
||||
@@ -3287,6 +3296,19 @@ public class Config
|
||||
PC_CAFE_LOW_EXP_KILLS_CHANCE = 100;
|
||||
}
|
||||
|
||||
final PropertiesParser vipSystem = new PropertiesParser(CUSTOM_VIP_CONFIG_FILE);
|
||||
VIP_SYSTEM_ENABLED = vipSystem.getBoolean("VipEnabled", false);
|
||||
if (VIP_SYSTEM_ENABLED)
|
||||
{
|
||||
VIP_SYSTEM_PRIME_AFFECT = vipSystem.getBoolean("PrimeAffectPoints", false);
|
||||
VIP_SYSTEM_L_SHOP_AFFECT = vipSystem.getBoolean("LShopAffectPoints", false);
|
||||
VIP_SYSTEM_MAX_TIER = vipSystem.getInt("MaxVipLevel", 7);
|
||||
if (VIP_SYSTEM_MAX_TIER > 10)
|
||||
{
|
||||
VIP_SYSTEM_MAX_TIER = 10;
|
||||
}
|
||||
}
|
||||
|
||||
// Load PremiumSystem config file (if exists)
|
||||
final PropertiesParser PremiumSystem = new PropertiesParser(CUSTOM_PREMIUM_SYSTEM_CONFIG_FILE);
|
||||
PREMIUM_SYSTEM_ENABLED = PremiumSystem.getBoolean("EnablePremiumSystem", false);
|
||||
|
||||
@@ -111,6 +111,7 @@ import org.l2jmobius.gameserver.data.xml.TeleporterData;
|
||||
import org.l2jmobius.gameserver.data.xml.TimedHuntingZoneData;
|
||||
import org.l2jmobius.gameserver.data.xml.TransformData;
|
||||
import org.l2jmobius.gameserver.data.xml.VariationData;
|
||||
import org.l2jmobius.gameserver.data.xml.VipData;
|
||||
import org.l2jmobius.gameserver.geoengine.GeoEngine;
|
||||
import org.l2jmobius.gameserver.handler.ConditionHandler;
|
||||
import org.l2jmobius.gameserver.handler.DailyMissionHandler;
|
||||
@@ -158,6 +159,7 @@ import org.l2jmobius.gameserver.model.World;
|
||||
import org.l2jmobius.gameserver.model.events.EventDispatcher;
|
||||
import org.l2jmobius.gameserver.model.olympiad.Hero;
|
||||
import org.l2jmobius.gameserver.model.olympiad.Olympiad;
|
||||
import org.l2jmobius.gameserver.model.vip.VipManager;
|
||||
import org.l2jmobius.gameserver.model.votereward.VoteSystem;
|
||||
import org.l2jmobius.gameserver.network.ClientNetworkManager;
|
||||
import org.l2jmobius.gameserver.network.NpcStringId;
|
||||
@@ -293,6 +295,7 @@ public class GameServer
|
||||
AttendanceRewardData.getInstance();
|
||||
MagicLampData.getInstance();
|
||||
RandomCraftData.getInstance();
|
||||
VipData.getInstance();
|
||||
|
||||
printSection("Characters");
|
||||
ClassListData.getInstance();
|
||||
@@ -310,6 +313,7 @@ public class GameServer
|
||||
CharSummonTable.getInstance().init();
|
||||
BeautyShopData.getInstance();
|
||||
MentorManager.getInstance();
|
||||
VipManager.getInstance();
|
||||
|
||||
if (Config.FACTION_SYSTEM_ENABLED)
|
||||
{
|
||||
|
||||
@@ -0,0 +1,152 @@
|
||||
/*
|
||||
* 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 org.l2jmobius.gameserver.data.xml;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
import org.w3c.dom.Document;
|
||||
import org.w3c.dom.NamedNodeMap;
|
||||
import org.w3c.dom.Node;
|
||||
|
||||
import org.l2jmobius.Config;
|
||||
import org.l2jmobius.commons.util.IXmlReader;
|
||||
import org.l2jmobius.gameserver.model.vip.VipInfo;
|
||||
|
||||
/**
|
||||
* @author Gabriel Costa Souza
|
||||
*/
|
||||
public class VipData implements IXmlReader
|
||||
{
|
||||
private static final Logger LOGGER = Logger.getLogger(VipData.class.getName());
|
||||
|
||||
private final Map<Byte, VipInfo> _vipTiers = new HashMap<>();
|
||||
|
||||
protected VipData()
|
||||
{
|
||||
load();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void load()
|
||||
{
|
||||
if (!Config.VIP_SYSTEM_ENABLED)
|
||||
{
|
||||
return;
|
||||
}
|
||||
_vipTiers.clear();
|
||||
parseDatapackFile("data/vip.xml");
|
||||
LOGGER.info(getClass().getSimpleName() + ": Loaded " + _vipTiers.size() + " vips.");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void parseDocument(Document doc, File f)
|
||||
{
|
||||
for (Node n = doc.getFirstChild(); n != null; n = n.getNextSibling())
|
||||
{
|
||||
if ("list".equalsIgnoreCase(n.getNodeName()))
|
||||
{
|
||||
VIP_FILE: for (Node d = n.getFirstChild(); d != null; d = d.getNextSibling())
|
||||
{
|
||||
if ("vip".equalsIgnoreCase(d.getNodeName()))
|
||||
{
|
||||
final NamedNodeMap attrs = d.getAttributes();
|
||||
Node att;
|
||||
byte tier = -1;
|
||||
int required = -1;
|
||||
int lose = -1;
|
||||
|
||||
att = attrs.getNamedItem("tier");
|
||||
if (att == null)
|
||||
{
|
||||
LOGGER.severe(getClass().getSimpleName() + ": Missing tier for vip, skipping");
|
||||
continue;
|
||||
}
|
||||
tier = Byte.parseByte(att.getNodeValue());
|
||||
|
||||
att = attrs.getNamedItem("points-required");
|
||||
if (att == null)
|
||||
{
|
||||
LOGGER.severe(getClass().getSimpleName() + ": Missing points-required for vip: " + tier + ", skipping");
|
||||
continue;
|
||||
}
|
||||
|
||||
required = Integer.parseInt(att.getNodeValue());
|
||||
|
||||
att = attrs.getNamedItem("points-lose");
|
||||
if (att == null)
|
||||
{
|
||||
LOGGER.severe(getClass().getSimpleName() + ": Missing points-lose for vip: " + tier + ", skipping");
|
||||
continue;
|
||||
}
|
||||
|
||||
lose = Integer.parseInt(att.getNodeValue());
|
||||
|
||||
final VipInfo vipInfo = new VipInfo(tier, required, lose);
|
||||
|
||||
for (Node c = d.getFirstChild(); c != null; c = c.getNextSibling())
|
||||
{
|
||||
if ("bonus".equalsIgnoreCase(c.getNodeName()))
|
||||
{
|
||||
final int skill = Integer.parseInt(c.getAttributes().getNamedItem("skill").getNodeValue());
|
||||
try
|
||||
{
|
||||
vipInfo.setSkill(skill);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
LOGGER.severe(getClass().getSimpleName() + ": Error in bonus parameter for vip: " + tier + ", skipping");
|
||||
continue VIP_FILE;
|
||||
}
|
||||
}
|
||||
}
|
||||
_vipTiers.put(tier, vipInfo);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the single instance of VipData.
|
||||
* @return single instance of VipData
|
||||
*/
|
||||
public static VipData getInstance()
|
||||
{
|
||||
return SingletonHolder.INSTANCE;
|
||||
}
|
||||
|
||||
/**
|
||||
* The Class SingletonHolder.
|
||||
*/
|
||||
private static class SingletonHolder
|
||||
{
|
||||
protected static final VipData INSTANCE = new VipData();
|
||||
}
|
||||
|
||||
public int getSkillId(byte tier)
|
||||
{
|
||||
return _vipTiers.get(tier).getSkill();
|
||||
}
|
||||
|
||||
public Map<Byte, VipInfo> getVipTiers()
|
||||
{
|
||||
return _vipTiers;
|
||||
}
|
||||
}
|
||||
@@ -43,7 +43,9 @@ import org.l2jmobius.gameserver.model.eventengine.ScheduleTarget;
|
||||
import org.l2jmobius.gameserver.model.holders.SkillHolder;
|
||||
import org.l2jmobius.gameserver.model.holders.SubClassHolder;
|
||||
import org.l2jmobius.gameserver.model.olympiad.Olympiad;
|
||||
import org.l2jmobius.gameserver.model.variables.AccountVariables;
|
||||
import org.l2jmobius.gameserver.model.variables.PlayerVariables;
|
||||
import org.l2jmobius.gameserver.model.vip.VipManager;
|
||||
import org.l2jmobius.gameserver.network.serverpackets.ExVoteSystemInfo;
|
||||
import org.l2jmobius.gameserver.network.serverpackets.ExWorldChatCnt;
|
||||
|
||||
@@ -73,6 +75,7 @@ public class DailyTaskManager extends AbstractEventManager<AbstractEvent<?>>
|
||||
resetWorldChatPoints();
|
||||
resetTrainingCamp();
|
||||
resetVitality();
|
||||
resetVip();
|
||||
}
|
||||
|
||||
@ScheduleTarget
|
||||
@@ -324,6 +327,24 @@ public class DailyTaskManager extends AbstractEventManager<AbstractEvent<?>>
|
||||
}
|
||||
}
|
||||
|
||||
private void resetVip()
|
||||
{
|
||||
// Delete all entries for received gifts
|
||||
AccountVariables.deleteVipPurchases(AccountVariables.VIP_ITEM_BOUGHT);
|
||||
|
||||
// Checks the tier expiration for online players
|
||||
// offline players get handled on next time they log in.
|
||||
for (PlayerInstance player : World.getInstance().getPlayers())
|
||||
{
|
||||
if (player.getVipTier() > 0)
|
||||
{
|
||||
VipManager.getInstance().checkVipTierExpiration(player);
|
||||
}
|
||||
|
||||
player.getAccountVariables().restoreMe();
|
||||
}
|
||||
}
|
||||
|
||||
private void resetDailyMissionRewards()
|
||||
{
|
||||
DailyMissionData.getInstance().getDailyMissionData().forEach(DailyMissionDataHolder::reset);
|
||||
|
||||
@@ -39,6 +39,11 @@ public class PcCafePointsManager
|
||||
return;
|
||||
}
|
||||
|
||||
if (Config.PC_CAFE_ONLY_VIP && (player.getVipTier() <= 0))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (player.getPcCafePoints() >= Config.PC_CAFE_MAX_POINTS)
|
||||
{
|
||||
final SystemMessage message = new SystemMessage(SystemMessageId.YOU_HAVE_EARNED_THE_MAXIMUM_NUMBER_OF_PA_POINTS);
|
||||
|
||||
@@ -21,6 +21,8 @@ import java.sql.Date;
|
||||
import java.sql.PreparedStatement;
|
||||
import java.sql.ResultSet;
|
||||
import java.sql.SQLException;
|
||||
import java.time.Instant;
|
||||
import java.time.temporal.ChronoUnit;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Calendar;
|
||||
@@ -206,6 +208,7 @@ import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerFameCh
|
||||
import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerHennaAdd;
|
||||
import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerHennaRemove;
|
||||
import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerItemEquip;
|
||||
import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerLoad;
|
||||
import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerLogin;
|
||||
import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerLogout;
|
||||
import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerMenteeStatus;
|
||||
@@ -283,6 +286,7 @@ import org.l2jmobius.gameserver.model.stats.MoveType;
|
||||
import org.l2jmobius.gameserver.model.stats.Stat;
|
||||
import org.l2jmobius.gameserver.model.variables.AccountVariables;
|
||||
import org.l2jmobius.gameserver.model.variables.PlayerVariables;
|
||||
import org.l2jmobius.gameserver.model.vip.VipManager;
|
||||
import org.l2jmobius.gameserver.model.zone.ZoneId;
|
||||
import org.l2jmobius.gameserver.model.zone.ZoneType;
|
||||
import org.l2jmobius.gameserver.model.zone.type.WaterZone;
|
||||
@@ -363,6 +367,7 @@ import org.l2jmobius.gameserver.network.serverpackets.autoplay.ExAutoPlaySetting
|
||||
import org.l2jmobius.gameserver.network.serverpackets.commission.ExResponseCommissionInfo;
|
||||
import org.l2jmobius.gameserver.network.serverpackets.friend.FriendStatus;
|
||||
import org.l2jmobius.gameserver.network.serverpackets.limitshop.ExBloodyCoinCount;
|
||||
import org.l2jmobius.gameserver.network.serverpackets.vip.ReceiveVipInfo;
|
||||
import org.l2jmobius.gameserver.taskmanager.AttackStanceTaskManager;
|
||||
import org.l2jmobius.gameserver.taskmanager.AutoPlayTaskManager;
|
||||
import org.l2jmobius.gameserver.taskmanager.AutoUseTaskManager;
|
||||
@@ -885,6 +890,8 @@ public class PlayerInstance extends Playable
|
||||
private ElementalSpirit[] _spirits;
|
||||
private ElementalType _activeElementalSpiritType;
|
||||
|
||||
private byte _vipTier = 0;
|
||||
|
||||
private final AutoPlaySettingsHolder _autoPlaySettings = new AutoPlaySettingsHolder();
|
||||
private final AutoUseSettingsHolder _autoUseSettings = new AutoUseSettingsHolder();
|
||||
|
||||
@@ -6677,6 +6684,7 @@ public class PlayerInstance extends Playable
|
||||
}
|
||||
}
|
||||
}
|
||||
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerLoad(player), player);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -6780,6 +6788,7 @@ public class PlayerInstance extends Playable
|
||||
player.setOnlineStatus(true, false);
|
||||
|
||||
PlayerAutoSaveTaskManager.getInstance().add(player);
|
||||
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
@@ -10077,6 +10086,7 @@ public class PlayerInstance extends Playable
|
||||
}
|
||||
|
||||
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerLogin(this), this);
|
||||
|
||||
if (isMentee())
|
||||
{
|
||||
// Notify to scripts
|
||||
@@ -14261,6 +14271,57 @@ public class PlayerInstance extends Playable
|
||||
}
|
||||
}
|
||||
|
||||
public byte getVipTier()
|
||||
{
|
||||
return _vipTier;
|
||||
}
|
||||
|
||||
public void setVipTier(byte vipTier)
|
||||
{
|
||||
_vipTier = vipTier;
|
||||
}
|
||||
|
||||
public long getVipPoints()
|
||||
{
|
||||
return getAccountVariables().getLong(AccountVariables.VIP_POINTS, 0L);
|
||||
}
|
||||
|
||||
public long getVipTierExpiration()
|
||||
{
|
||||
return getAccountVariables().getLong(AccountVariables.VIP_EXPIRATION, 0L);
|
||||
}
|
||||
|
||||
public void setVipTierExpiration(long expiration)
|
||||
{
|
||||
getAccountVariables().set(AccountVariables.VIP_EXPIRATION, expiration);
|
||||
}
|
||||
|
||||
public void updateVipPoints(long points)
|
||||
{
|
||||
if (points == 0)
|
||||
{
|
||||
return;
|
||||
}
|
||||
final int currentVipTier = VipManager.getInstance().getVipTier(getVipPoints());
|
||||
getAccountVariables().set(AccountVariables.VIP_POINTS, getVipPoints() + points);
|
||||
final byte newTier = VipManager.getInstance().getVipTier(getVipPoints());
|
||||
if (newTier != currentVipTier)
|
||||
{
|
||||
_vipTier = newTier;
|
||||
if (newTier > 0)
|
||||
{
|
||||
getAccountVariables().set(AccountVariables.VIP_EXPIRATION, Instant.now().plus(30, ChronoUnit.DAYS).toEpochMilli());
|
||||
VipManager.getInstance().manageTier(this);
|
||||
}
|
||||
else
|
||||
{
|
||||
getAccountVariables().set(AccountVariables.VIP_EXPIRATION, 0L);
|
||||
}
|
||||
}
|
||||
getAccountVariables().storeMe(); // force to store to prevent falty purchases after a crash.
|
||||
sendPacket(new ReceiveVipInfo(this));
|
||||
}
|
||||
|
||||
public void initElementalSpirits()
|
||||
{
|
||||
tryLoadSpirits();
|
||||
|
||||
@@ -90,6 +90,7 @@ import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerItemPi
|
||||
import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerItemTransfer;
|
||||
import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerItemUnequip;
|
||||
import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerLevelChanged;
|
||||
import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerLoad;
|
||||
import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerLogin;
|
||||
import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerLogout;
|
||||
import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerMenteeAdd;
|
||||
@@ -259,6 +260,7 @@ public enum EventType
|
||||
ON_PLAYER_LEVEL_CHANGED(OnPlayerLevelChanged.class, void.class),
|
||||
ON_PLAYER_LOGIN(OnPlayerLogin.class, void.class),
|
||||
ON_PLAYER_LOGOUT(OnPlayerLogout.class, void.class),
|
||||
ON_PLAYER_LOAD(OnPlayerLoad.class, void.class),
|
||||
ON_PLAYER_PK_CHANGED(OnPlayerPKChanged.class, void.class),
|
||||
ON_PLAYER_PRESS_TUTORIAL_MARK(OnPlayerPressTutorialMark.class, void.class),
|
||||
ON_PLAYER_MOVE_REQUEST(OnPlayerMoveRequest.class, void.class, TerminateReturn.class),
|
||||
|
||||
@@ -0,0 +1,45 @@
|
||||
/*
|
||||
* 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 org.l2jmobius.gameserver.model.events.impl.creature.player;
|
||||
|
||||
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
|
||||
import org.l2jmobius.gameserver.model.events.EventType;
|
||||
import org.l2jmobius.gameserver.model.events.impl.IBaseEvent;
|
||||
|
||||
/**
|
||||
* @author Gabriel Costa Souza
|
||||
*/
|
||||
public class OnPlayerLoad implements IBaseEvent
|
||||
{
|
||||
private final PlayerInstance _player;
|
||||
|
||||
public OnPlayerLoad(PlayerInstance player)
|
||||
{
|
||||
_player = player;
|
||||
}
|
||||
|
||||
public PlayerInstance getPlayer()
|
||||
{
|
||||
return _player;
|
||||
}
|
||||
|
||||
@Override
|
||||
public EventType getType()
|
||||
{
|
||||
return EventType.ON_PLAYER_LOAD;
|
||||
}
|
||||
}
|
||||
@@ -47,6 +47,8 @@ public class PrimeShopGroup
|
||||
private final int _maxBirthday;
|
||||
private final int _restrictionDay;
|
||||
private final int _availableCount;
|
||||
private final boolean _isVipGift;
|
||||
private final int _vipTier;
|
||||
private final List<PrimeShopItem> _items;
|
||||
|
||||
public PrimeShopGroup(StatSet set, List<PrimeShopItem> items)
|
||||
@@ -73,6 +75,9 @@ public class PrimeShopGroup
|
||||
_maxBirthday = set.getInt("maxBirthday", 0);
|
||||
_restrictionDay = set.getInt("restrictionDay", 0);
|
||||
_availableCount = set.getInt("availableCount", 0);
|
||||
_isVipGift = set.getBoolean("isVipGift", false);
|
||||
_vipTier = set.getInt("vipTier", 0);
|
||||
|
||||
_items = items;
|
||||
}
|
||||
|
||||
@@ -196,6 +201,16 @@ public class PrimeShopGroup
|
||||
return _availableCount;
|
||||
}
|
||||
|
||||
public boolean isVipGift()
|
||||
{
|
||||
return _isVipGift;
|
||||
}
|
||||
|
||||
public int getVipTier()
|
||||
{
|
||||
return _vipTier;
|
||||
}
|
||||
|
||||
public List<PrimeShopItem> getItems()
|
||||
{
|
||||
return _items;
|
||||
|
||||
@@ -37,12 +37,17 @@ public class AccountVariables extends AbstractVariables
|
||||
private static final String SELECT_QUERY = "SELECT * FROM account_gsdata WHERE account_name = ?";
|
||||
private static final String DELETE_QUERY = "DELETE FROM account_gsdata WHERE account_name = ?";
|
||||
private static final String INSERT_QUERY = "INSERT INTO account_gsdata (account_name, var, value) VALUES (?, ?, ?)";
|
||||
private static final String DELETE_QUERY_VAR = "DELETE FROM account_gsdata where var = ?";
|
||||
|
||||
// Public variable names
|
||||
public static final String HWID = "HWID";
|
||||
public static final String HWIDSLIT_VAR = " ";
|
||||
public static final String LCOIN_SHOP_PRODUCT_TIME = "LCSTime";
|
||||
public static final String LCOIN_SHOP_PRODUCT_COUNT = "LCSCount";
|
||||
public static final String VIP_POINTS = "VipPoints";
|
||||
public static final String VIP_TIER = "VipTier";
|
||||
public static final String VIP_EXPIRATION = "VipExpiration";
|
||||
public static final String VIP_ITEM_BOUGHT = "Vip_Item_Bought";
|
||||
|
||||
private final String _accountName;
|
||||
|
||||
@@ -145,4 +150,28 @@ public class AccountVariables extends AbstractVariables
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete all entries for an requested var
|
||||
* @param var
|
||||
* @return success
|
||||
*/
|
||||
public static boolean deleteVipPurchases(String var)
|
||||
{
|
||||
try (Connection con = DatabaseFactory.getConnection())
|
||||
{
|
||||
// Clear previous entries.
|
||||
try (PreparedStatement st = con.prepareStatement(DELETE_QUERY_VAR))
|
||||
{
|
||||
st.setString(1, var);
|
||||
st.execute();
|
||||
}
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
LOGGER.log(Level.WARNING, "AccountVariables: Couldn't delete vip variables!", e);
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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 org.l2jmobius.gameserver.model.vip;
|
||||
|
||||
/**
|
||||
* @author Gabriel Costa Souza
|
||||
*/
|
||||
public class VipInfo
|
||||
{
|
||||
private final byte _tier;
|
||||
private final long _pointsRequired;
|
||||
private final long _pointsDepreciated;
|
||||
private int _skill;
|
||||
|
||||
public VipInfo(byte tier, long pointsRequired, long pointsDepreciated)
|
||||
{
|
||||
_tier = tier;
|
||||
_pointsRequired = pointsRequired;
|
||||
_pointsDepreciated = pointsDepreciated;
|
||||
}
|
||||
|
||||
public byte getTier()
|
||||
{
|
||||
return _tier;
|
||||
}
|
||||
|
||||
public long getPointsRequired()
|
||||
{
|
||||
return _pointsRequired;
|
||||
}
|
||||
|
||||
public long getPointsDepreciated()
|
||||
{
|
||||
return _pointsDepreciated;
|
||||
}
|
||||
|
||||
public int getSkill()
|
||||
{
|
||||
return _skill;
|
||||
}
|
||||
|
||||
public void setSkill(int skill)
|
||||
{
|
||||
_skill = skill;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,202 @@
|
||||
/*
|
||||
* 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 org.l2jmobius.gameserver.model.vip;
|
||||
|
||||
import java.time.Instant;
|
||||
import java.time.temporal.ChronoUnit;
|
||||
import java.util.function.Consumer;
|
||||
|
||||
import org.l2jmobius.Config;
|
||||
import org.l2jmobius.gameserver.data.xml.SkillData;
|
||||
import org.l2jmobius.gameserver.data.xml.VipData;
|
||||
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
|
||||
import org.l2jmobius.gameserver.model.events.Containers;
|
||||
import org.l2jmobius.gameserver.model.events.EventType;
|
||||
import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerLoad;
|
||||
import org.l2jmobius.gameserver.model.events.impl.creature.player.OnPlayerLogin;
|
||||
import org.l2jmobius.gameserver.model.events.listeners.ConsumerEventListener;
|
||||
import org.l2jmobius.gameserver.model.skills.Skill;
|
||||
import org.l2jmobius.gameserver.model.variables.AccountVariables;
|
||||
import org.l2jmobius.gameserver.network.serverpackets.ExBRNewIconCashBtnWnd;
|
||||
import org.l2jmobius.gameserver.network.serverpackets.vip.ReceiveVipInfo;
|
||||
|
||||
/**
|
||||
* @author Gabriel Costa Souza
|
||||
*/
|
||||
public final class VipManager
|
||||
{
|
||||
private static final byte VIP_MAX_TIER = (byte) Config.VIP_SYSTEM_MAX_TIER;
|
||||
|
||||
private final ConsumerEventListener _vipLoginListener = new ConsumerEventListener(null, EventType.ON_PLAYER_LOGIN, (Consumer<OnPlayerLogin>) this::onVipLogin, this);
|
||||
|
||||
private VipManager()
|
||||
{
|
||||
if (!Config.VIP_SYSTEM_ENABLED)
|
||||
{
|
||||
return;
|
||||
}
|
||||
Containers.Global().addListener(new ConsumerEventListener(Containers.Global(), EventType.ON_PLAYER_LOAD, (Consumer<OnPlayerLoad>) this::onPlayerLoaded, this));
|
||||
}
|
||||
|
||||
private void onPlayerLoaded(OnPlayerLoad event)
|
||||
{
|
||||
final PlayerInstance player = event.getPlayer();
|
||||
player.setVipTier(getVipTier(player));
|
||||
if (player.getVipTier() > 0)
|
||||
{
|
||||
manageTier(player);
|
||||
player.addListener(_vipLoginListener);
|
||||
}
|
||||
else
|
||||
{
|
||||
player.sendPacket(new ReceiveVipInfo(player));
|
||||
player.sendPacket(new ExBRNewIconCashBtnWnd((byte) 0));
|
||||
}
|
||||
}
|
||||
|
||||
private boolean canReceiveGift(PlayerInstance player)
|
||||
{
|
||||
if (!Config.VIP_SYSTEM_ENABLED)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
if (player.getVipTier() <= 0)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
return player.getAccountVariables().getLong(AccountVariables.VIP_ITEM_BOUGHT, 0) <= 0;
|
||||
}
|
||||
|
||||
private void onVipLogin(OnPlayerLogin event)
|
||||
{
|
||||
final PlayerInstance player = event.getPlayer();
|
||||
if (canReceiveGift(player))
|
||||
{
|
||||
player.sendPacket(new ExBRNewIconCashBtnWnd((byte) 1));
|
||||
}
|
||||
else
|
||||
{
|
||||
player.sendPacket(new ExBRNewIconCashBtnWnd((byte) 0));
|
||||
}
|
||||
player.removeListener(_vipLoginListener);
|
||||
player.sendPacket(new ReceiveVipInfo(player));
|
||||
}
|
||||
|
||||
public void manageTier(PlayerInstance player)
|
||||
{
|
||||
if (!checkVipTierExpiration(player))
|
||||
{
|
||||
player.sendPacket(new ReceiveVipInfo(player));
|
||||
}
|
||||
|
||||
if (player.getVipTier() > 1)
|
||||
{
|
||||
final int oldSkillId = VipData.getInstance().getSkillId((byte) (player.getVipTier() - 1));
|
||||
if (oldSkillId > 0)
|
||||
{
|
||||
final Skill oldSkill = SkillData.getInstance().getSkill(oldSkillId, 1);
|
||||
if (oldSkill != null)
|
||||
{
|
||||
player.removeSkill(oldSkill);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
final int skillId = VipData.getInstance().getSkillId(player.getVipTier());
|
||||
if (skillId > 0)
|
||||
{
|
||||
final Skill skill = SkillData.getInstance().getSkill(skillId, 1);
|
||||
if (skill != null)
|
||||
{
|
||||
player.addSkill(skill);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public byte getVipTier(PlayerInstance player)
|
||||
{
|
||||
return getVipInfo(player).getTier();
|
||||
}
|
||||
|
||||
public byte getVipTier(long points)
|
||||
{
|
||||
byte temp = getVipInfo(points).getTier();
|
||||
if (temp > VIP_MAX_TIER)
|
||||
{
|
||||
temp = VIP_MAX_TIER;
|
||||
}
|
||||
return temp;
|
||||
}
|
||||
|
||||
private VipInfo getVipInfo(PlayerInstance player)
|
||||
{
|
||||
return getVipInfo(player.getVipPoints());
|
||||
}
|
||||
|
||||
private VipInfo getVipInfo(long points)
|
||||
{
|
||||
for (byte i = 0; i < VipData.getInstance().getVipTiers().size(); i++)
|
||||
{
|
||||
if (points < VipData.getInstance().getVipTiers().get(i).getPointsRequired())
|
||||
{
|
||||
byte temp = (byte) (i - 1);
|
||||
if (temp > VIP_MAX_TIER)
|
||||
{
|
||||
temp = VIP_MAX_TIER;
|
||||
}
|
||||
return VipData.getInstance().getVipTiers().get(temp);
|
||||
}
|
||||
}
|
||||
return VipData.getInstance().getVipTiers().get(VIP_MAX_TIER);
|
||||
}
|
||||
|
||||
public long getPointsDepreciatedOnLevel(byte vipTier)
|
||||
{
|
||||
return VipData.getInstance().getVipTiers().get(vipTier).getPointsDepreciated();
|
||||
}
|
||||
|
||||
public long getPointsToLevel(byte level)
|
||||
{
|
||||
if (VipData.getInstance().getVipTiers().containsKey(level))
|
||||
{
|
||||
return VipData.getInstance().getVipTiers().get(level).getPointsRequired();
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
public boolean checkVipTierExpiration(PlayerInstance player)
|
||||
{
|
||||
final Instant now = Instant.now();
|
||||
if (now.isAfter(Instant.ofEpochMilli(player.getVipTierExpiration())))
|
||||
{
|
||||
player.updateVipPoints(-getPointsDepreciatedOnLevel(player.getVipTier()));
|
||||
player.setVipTierExpiration(Instant.now().plus(30, ChronoUnit.DAYS).toEpochMilli());
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public static VipManager getInstance()
|
||||
{
|
||||
return Singleton.INSTANCE;
|
||||
}
|
||||
|
||||
private static class Singleton
|
||||
{
|
||||
private static final VipManager INSTANCE = new VipManager();
|
||||
}
|
||||
}
|
||||
@@ -131,6 +131,8 @@ import org.l2jmobius.gameserver.network.clientpackets.teleports.ExRequestTelepor
|
||||
import org.l2jmobius.gameserver.network.clientpackets.teleports.ExTeleportToRaidPosition;
|
||||
import org.l2jmobius.gameserver.network.clientpackets.teleports.RequestRaidTeleportInfo;
|
||||
import org.l2jmobius.gameserver.network.clientpackets.training.NotifyTrainingRoomEnd;
|
||||
import org.l2jmobius.gameserver.network.clientpackets.vip.ExRequestVipInfo;
|
||||
import org.l2jmobius.gameserver.network.clientpackets.vip.RequestVipLuckGameInfo;
|
||||
|
||||
/**
|
||||
* @author Sdw
|
||||
@@ -402,10 +404,10 @@ public enum ExIncomingPackets implements IIncomingPackets<GameClient>
|
||||
REQUEST_ITEM_ENSOUL(0x107, RequestItemEnsoul::new, ConnectionState.IN_GAME),
|
||||
REQUEST_CASTLE_WAR_SEASON_REWARD(0x108, null, ConnectionState.IN_GAME),
|
||||
REQUEST_VIP_PRODUCT_LIST(0x109, null, ConnectionState.IN_GAME),
|
||||
REQUEST_VIP_LUCKY_GAME_INFO(0x10A, null, ConnectionState.IN_GAME),
|
||||
REQUEST_VIP_LUCKY_GAME_INFO(0x10A, RequestVipLuckGameInfo::new, ConnectionState.IN_GAME),
|
||||
REQUEST_VIP_LUCKY_GAME_ITEM_LIST(0x10B, null, ConnectionState.IN_GAME),
|
||||
REQUEST_VIP_LUCKY_GAME_BONUS(0x10C, null, ConnectionState.IN_GAME),
|
||||
EX_REQUEST_VIP_INFO(0x10D, null, ConnectionState.IN_GAME),
|
||||
EX_REQUEST_VIP_INFO(0x10D, ExRequestVipInfo::new, ConnectionState.IN_GAME),
|
||||
REQUEST_CAPTCHA_ANSWER(0x10E, null, ConnectionState.IN_GAME),
|
||||
REQUEST_REFRESH_CAPTCHA_IMAGE(0x10F, null, ConnectionState.IN_GAME),
|
||||
REQUEST_PLEDGE_SIGN_IN_FOR_OPEN_JOINING_METHOD(0x110, RequestPledgeSignInForOpenJoiningMethod::new, ConnectionState.IN_GAME),
|
||||
|
||||
@@ -61,6 +61,11 @@ public class RequestVipAttendanceCheck implements IClientIncomingPacket
|
||||
player.sendPacket(SystemMessageId.YOUR_VIP_RANK_IS_TOO_LOW_TO_RECEIVE_THE_REWARD);
|
||||
return;
|
||||
}
|
||||
else if (Config.VIP_ONLY_ATTENDANCE_REWARDS && (player.getVipTier() <= 0))
|
||||
{
|
||||
player.sendPacket(SystemMessageId.YOUR_VIP_RANK_IS_TOO_LOW_TO_RECEIVE_THE_REWARD);
|
||||
return;
|
||||
}
|
||||
|
||||
// Check login delay.
|
||||
if (player.getUptime() < (Config.ATTENDANCE_REWARD_DELAY * 60 * 1000))
|
||||
|
||||
@@ -19,6 +19,7 @@ package org.l2jmobius.gameserver.network.clientpackets.limitshop;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import org.l2jmobius.Config;
|
||||
import org.l2jmobius.commons.network.PacketReader;
|
||||
import org.l2jmobius.commons.util.Chronos;
|
||||
import org.l2jmobius.commons.util.Rnd;
|
||||
@@ -193,6 +194,10 @@ public class RequestPurchaseLimitShopItemBuy implements IClientIncomingPacket
|
||||
{
|
||||
player.destroyItemByItemId("LCoinShop", _product.getIngredientIds()[i], _product.getIngredientQuantities()[i] * _amount, player, true);
|
||||
}
|
||||
if (Config.VIP_SYSTEM_L_SHOP_AFFECT)
|
||||
{
|
||||
player.updateVipPoints(_amount);
|
||||
}
|
||||
}
|
||||
|
||||
// Reward.
|
||||
|
||||
@@ -27,6 +27,7 @@ import org.l2jmobius.gameserver.model.actor.request.PrimeShopRequest;
|
||||
import org.l2jmobius.gameserver.model.itemcontainer.Inventory;
|
||||
import org.l2jmobius.gameserver.model.primeshop.PrimeShopGroup;
|
||||
import org.l2jmobius.gameserver.model.primeshop.PrimeShopItem;
|
||||
import org.l2jmobius.gameserver.model.variables.AccountVariables;
|
||||
import org.l2jmobius.gameserver.network.GameClient;
|
||||
import org.l2jmobius.gameserver.network.clientpackets.IClientIncomingPacket;
|
||||
import org.l2jmobius.gameserver.network.serverpackets.primeshop.ExBRBuyProduct;
|
||||
@@ -98,13 +99,20 @@ public class RequestBRBuyProduct implements IClientIncomingPacket
|
||||
return;
|
||||
}
|
||||
player.setPrimePoints(player.getPrimePoints() - price);
|
||||
if (Config.VIP_SYSTEM_PRIME_AFFECT)
|
||||
{
|
||||
player.updateVipPoints(price);
|
||||
}
|
||||
}
|
||||
|
||||
for (PrimeShopItem subItem : item.getItems())
|
||||
{
|
||||
player.addItem("PrimeShop", subItem.getId(), subItem.getCount() * _count, player, true);
|
||||
}
|
||||
|
||||
if (item.isVipGift())
|
||||
{
|
||||
player.getAccountVariables().set(AccountVariables.VIP_ITEM_BOUGHT, Calendar.getInstance().getTimeInMillis());
|
||||
}
|
||||
player.sendPacket(new ExBRBuyProduct(ExBrProductReplyType.SUCCESS));
|
||||
player.sendPacket(new ExBRGamePoint(player));
|
||||
}
|
||||
@@ -169,6 +177,12 @@ public class RequestBRBuyProduct implements IClientIncomingPacket
|
||||
return false;
|
||||
}
|
||||
|
||||
if ((item.getVipTier() > player.getVipTier()) || (item.isVipGift() && !canReceiveGift(player, item)))
|
||||
{
|
||||
player.sendPacket(new ExBRBuyProduct(ExBrProductReplyType.SOLD_OUT));
|
||||
return false;
|
||||
}
|
||||
|
||||
final int weight = item.getWeight() * count;
|
||||
final long slots = item.getCount() * count;
|
||||
if (player.getInventory().validateWeight(weight))
|
||||
@@ -188,6 +202,34 @@ public class RequestBRBuyProduct implements IClientIncomingPacket
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if player can receive Gift from L2 Store
|
||||
* @param player player in question
|
||||
* @param item requested item.
|
||||
* @return true if player can receive gift item.
|
||||
*/
|
||||
private static boolean canReceiveGift(PlayerInstance player, PrimeShopGroup item)
|
||||
{
|
||||
if (!Config.VIP_SYSTEM_ENABLED)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
if (player.getVipTier() <= 0)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
else if (item.getVipTier() != player.getVipTier())
|
||||
{
|
||||
player.sendMessage("This item is not for your vip tier!");
|
||||
return false;
|
||||
}
|
||||
else
|
||||
{
|
||||
long timeBought = player.getAccountVariables().getLong(AccountVariables.VIP_ITEM_BOUGHT, 0L);
|
||||
return timeBought <= 0;
|
||||
}
|
||||
}
|
||||
|
||||
private static int validatePaymentId(PrimeShopGroup item, long amount)
|
||||
{
|
||||
switch (item.getPaymentType())
|
||||
|
||||
@@ -88,6 +88,13 @@ public class RequestBRPresentBuyProduct implements IClientIncomingPacket
|
||||
player.addRequest(new PrimeShopRequest(player));
|
||||
|
||||
final PrimeShopGroup item = PrimeShopData.getInstance().getItem(_brId);
|
||||
|
||||
if (item.isVipGift())
|
||||
{
|
||||
player.sendMessage("You cannot gift a Vip Gift!");
|
||||
return;
|
||||
}
|
||||
|
||||
if (validatePlayer(item, _count, player))
|
||||
{
|
||||
final int price = (item.getPrice() * _count);
|
||||
@@ -116,6 +123,10 @@ public class RequestBRPresentBuyProduct implements IClientIncomingPacket
|
||||
return;
|
||||
}
|
||||
player.setPrimePoints(player.getPrimePoints() - price);
|
||||
if (Config.VIP_SYSTEM_PRIME_AFFECT)
|
||||
{
|
||||
player.updateVipPoints(price);
|
||||
}
|
||||
}
|
||||
|
||||
player.sendPacket(new ExBRBuyProduct(ExBrProductReplyType.SUCCESS));
|
||||
|
||||
@@ -0,0 +1,37 @@
|
||||
/*
|
||||
* 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 org.l2jmobius.gameserver.network.clientpackets.vip;
|
||||
|
||||
import org.l2jmobius.commons.network.PacketReader;
|
||||
import org.l2jmobius.gameserver.network.GameClient;
|
||||
import org.l2jmobius.gameserver.network.clientpackets.IClientIncomingPacket;
|
||||
import org.l2jmobius.gameserver.network.serverpackets.vip.ReceiveVipInfo;
|
||||
|
||||
public class ExRequestVipInfo implements IClientIncomingPacket
|
||||
{
|
||||
@Override
|
||||
public boolean read(GameClient client, PacketReader packet)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void run(GameClient client)
|
||||
{
|
||||
client.sendPacket(new ReceiveVipInfo(client.getPlayer()));
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,37 @@
|
||||
/*
|
||||
* 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 org.l2jmobius.gameserver.network.clientpackets.vip;
|
||||
|
||||
import org.l2jmobius.commons.network.PacketReader;
|
||||
import org.l2jmobius.gameserver.network.GameClient;
|
||||
import org.l2jmobius.gameserver.network.clientpackets.IClientIncomingPacket;
|
||||
import org.l2jmobius.gameserver.network.serverpackets.vip.ReceiveVipLuckyGameInfo;
|
||||
|
||||
public class RequestVipLuckGameInfo implements IClientIncomingPacket
|
||||
{
|
||||
@Override
|
||||
public boolean read(GameClient client, PacketReader packet)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void run(GameClient client)
|
||||
{
|
||||
client.sendPacket(new ReceiveVipLuckyGameInfo(client.getPlayer()));
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,41 @@
|
||||
/*
|
||||
* 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 org.l2jmobius.gameserver.network.serverpackets;
|
||||
|
||||
import org.l2jmobius.commons.network.PacketWriter;
|
||||
import org.l2jmobius.gameserver.network.OutgoingPackets;
|
||||
|
||||
/**
|
||||
* @author Gabriel Costa Souza
|
||||
*/
|
||||
public class ExBRNewIconCashBtnWnd implements IClientOutgoingPacket
|
||||
{
|
||||
private final short _active;
|
||||
|
||||
public ExBRNewIconCashBtnWnd(short active)
|
||||
{
|
||||
_active = active;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean write(PacketWriter packet)
|
||||
{
|
||||
OutgoingPackets.EX_BR_NEW_ICON_CASH_BTN_WND.writeId(packet);
|
||||
packet.writeH(_active);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@@ -38,7 +38,7 @@ public class ExBrPremiumState implements IClientOutgoingPacket
|
||||
OutgoingPackets.EX_BR_PREMIUM_STATE.writeId(packet);
|
||||
|
||||
packet.writeD(_player.getObjectId());
|
||||
packet.writeC(_player.hasPremiumStatus() ? 0x01 : 0x00);
|
||||
packet.writeC(_player.hasPremiumStatus() || (_player.getVipTier() > 0) ? 0x01 : 0x00);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -30,7 +30,7 @@ public class ExWorldChatCnt implements IClientOutgoingPacket
|
||||
|
||||
public ExWorldChatCnt(PlayerInstance player)
|
||||
{
|
||||
_points = player.getLevel() < Config.WORLD_CHAT_MIN_LEVEL ? 0 : Math.max(player.getWorldChatPoints() - player.getWorldChatUsed(), 0);
|
||||
_points = (player.getLevel() < Config.WORLD_CHAT_MIN_LEVEL) || (player.getVipTier() <= 0) ? 0 : Math.max(player.getWorldChatPoints() - player.getWorldChatUsed(), 0);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -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 org.l2jmobius.gameserver.network.serverpackets.vip;
|
||||
|
||||
import java.time.Instant;
|
||||
import java.time.temporal.ChronoUnit;
|
||||
|
||||
import org.l2jmobius.Config;
|
||||
import org.l2jmobius.commons.network.PacketWriter;
|
||||
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
|
||||
import org.l2jmobius.gameserver.model.vip.VipManager;
|
||||
import org.l2jmobius.gameserver.network.OutgoingPackets;
|
||||
import org.l2jmobius.gameserver.network.serverpackets.IClientOutgoingPacket;
|
||||
|
||||
public class ReceiveVipInfo implements IClientOutgoingPacket
|
||||
{
|
||||
private final PlayerInstance _player;
|
||||
|
||||
public ReceiveVipInfo(PlayerInstance player)
|
||||
{
|
||||
_player = player;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean write(PacketWriter packet)
|
||||
{
|
||||
if (!Config.VIP_SYSTEM_ENABLED)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
final VipManager vipManager = VipManager.getInstance();
|
||||
final byte vipTier = _player.getVipTier();
|
||||
final int vipDuration = (int) ChronoUnit.SECONDS.between(Instant.now(), Instant.ofEpochMilli(_player.getVipTierExpiration()));
|
||||
|
||||
OutgoingPackets.RECIVE_VIP_INFO.writeId(packet);
|
||||
packet.writeC(vipTier);
|
||||
packet.writeQ(_player.getVipPoints());
|
||||
packet.writeD(vipDuration);
|
||||
packet.writeQ(vipManager.getPointsToLevel((byte) (vipTier + 1)));
|
||||
packet.writeQ(vipManager.getPointsDepreciatedOnLevel(vipTier));
|
||||
packet.writeC(vipTier);
|
||||
packet.writeQ(vipManager.getPointsToLevel(vipTier));
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@@ -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 org.l2jmobius.gameserver.network.serverpackets.vip;
|
||||
|
||||
import org.l2jmobius.commons.network.PacketWriter;
|
||||
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
|
||||
import org.l2jmobius.gameserver.model.itemcontainer.Inventory;
|
||||
import org.l2jmobius.gameserver.model.items.instance.ItemInstance;
|
||||
import org.l2jmobius.gameserver.network.OutgoingPackets;
|
||||
import org.l2jmobius.gameserver.network.serverpackets.IClientOutgoingPacket;
|
||||
|
||||
/**
|
||||
* @author Gabriel Costa Souza
|
||||
*/
|
||||
public class ReceiveVipLuckyGameInfo implements IClientOutgoingPacket
|
||||
{
|
||||
private final PlayerInstance _player;
|
||||
|
||||
public ReceiveVipLuckyGameInfo(PlayerInstance player)
|
||||
{
|
||||
_player = player;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean write(PacketWriter packet)
|
||||
{
|
||||
OutgoingPackets.RECIVE_VIP_LUCKY_GAME_INFO.writeId(packet);
|
||||
packet.writeC(1); // enabled
|
||||
packet.writeH((int) _player.getAdena());
|
||||
final ItemInstance item = _player.getInventory().getItemByItemId(Inventory.LCOIN_ID);
|
||||
packet.writeH(item == null ? 0 : (int) item.getCount()); // L Coin count
|
||||
return true;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user