Addition of fake player system.
This commit is contained in:
@@ -392,6 +392,9 @@
|
||||
<!-- ADMIN MESSAGES -->
|
||||
<admin command="admin_msg" accessLevel="100" />
|
||||
|
||||
<!-- ADMIN FAKE PLAYERS -->
|
||||
<admin command="admin_fakechat" accessLevel="100" />
|
||||
|
||||
<!-- ADMIN MOB GROUP -->
|
||||
<admin command="admin_mobmenu" accessLevel="100" />
|
||||
<admin command="admin_mobgroup_list" accessLevel="100" />
|
||||
|
33
L2J_Mobius_4.0_GrandCrusade/dist/game/config/Custom/FakePlayers.ini
vendored
Normal file
33
L2J_Mobius_4.0_GrandCrusade/dist/game/config/Custom/FakePlayers.ini
vendored
Normal file
@@ -0,0 +1,33 @@
|
||||
# ---------------------------------------------------------------------------
|
||||
# Fake players
|
||||
# ---------------------------------------------------------------------------
|
||||
|
||||
# Enable fake players.
|
||||
EnableFakePlayers = False
|
||||
|
||||
# Enable chatting with fake players.
|
||||
FakePlayerChat = True
|
||||
|
||||
# Enable shots usage for fake players.
|
||||
FakePlayerUseShots = True
|
||||
|
||||
# Reward PvP kills by killing fake players.
|
||||
FakePlayerKillsRewardPvP = True
|
||||
|
||||
# Fake player kills apply karma rules.
|
||||
FakePlayerUnflaggedKillsKarma = True
|
||||
|
||||
# Aggressive AI fake players attack nearby monsters.
|
||||
FakePlayerAggroMonsters = True
|
||||
|
||||
# Aggressive AI fake players attack nearby players.
|
||||
FakePlayerAggroPlayers = False
|
||||
|
||||
# Aggressive AI fake players attack nearby fake players.
|
||||
FakePlayerAggroFPC = False
|
||||
|
||||
# Fake players can drop items when killing monsters.
|
||||
FakePlayerCanDropItems = True
|
||||
|
||||
# Fake players can pickup dropped items.
|
||||
FakePlayerCanPickup = True
|
24
L2J_Mobius_4.0_GrandCrusade/dist/game/data/FakePlayerChatData.xml
vendored
Normal file
24
L2J_Mobius_4.0_GrandCrusade/dist/game/data/FakePlayerChatData.xml
vendored
Normal file
@@ -0,0 +1,24 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!-- Use lowercase for searchText and answers. -->
|
||||
<!-- You can use specific fpcName or ALL to use with all fpcs. -->
|
||||
<list xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="xsd/FakePlayerChatData.xsd">
|
||||
<fakePlayerChat fpcName="ALL" searchMethod="EQUALS" searchText="hi" answers="hello;hi;hi there;hello there" />
|
||||
<fakePlayerChat fpcName="ALL" searchMethod="EQUALS" searchText="hey" answers="hey hey;hey;hey there" />
|
||||
<fakePlayerChat fpcName="ALL" searchMethod="EQUALS" searchText="hello" answers="hello;hi;hi there;hello there" />
|
||||
<fakePlayerChat fpcName="Evi" searchMethod="EQUALS" searchText="here?" answers="yes;busy;i look for something" />
|
||||
<fakePlayerChat fpcName="Evi" searchMethod="EQUALS" searchText="whats up?" answers="good;busy;i look for something" />
|
||||
<fakePlayerChat fpcName="Evi" searchMethod="EQUALS" searchText="what?" answers="something :P;something for me" />
|
||||
<fakePlayerChat fpcName="Evi" searchMethod="EQUALS" searchText="why?" answers="because;i don't know;what?" />
|
||||
<fakePlayerChat fpcName="Evi" searchMethod="EQUALS" searchText="really" answers="really;yes;of course" />
|
||||
<fakePlayerChat fpcName="Evi" searchMethod="EQUALS" searchText="thanks" answers=":);:D;:*" />
|
||||
<fakePlayerChat fpcName="Evi" searchMethod="EQUALS" searchText="thank you" answers=":);:D;:*" />
|
||||
<fakePlayerChat fpcName="Evi" searchMethod="STARTS_WITH" searchText="how are you" answers="fine;good;busy" />
|
||||
<fakePlayerChat fpcName="Evi" searchMethod="STARTS_WITH" searchText="do you know" answers="nope;no sorry;nope, i don't" />
|
||||
<fakePlayerChat fpcName="Evi" searchMethod="STARTS_WITH" searchText="where can i" answers="i don't know;no clue;ask someone else :P" />
|
||||
<fakePlayerChat fpcName="Evi" searchMethod="STARTS_WITH" searchText="can i ask you" answers="yes;what?;tell me" />
|
||||
<fakePlayerChat fpcName="Evi" searchMethod="CONTAINS" searchText="server;ha;problem" answers="it's good;i don't know;i don't think so..." />
|
||||
<fakePlayerChat fpcName="Evi" searchMethod="CONTAINS" searchText="server;ha;bug" answers="it's good;i don't know;i don't think so..." />
|
||||
<fakePlayerChat fpcName="Evi" searchMethod="CONTAINS" searchText="is th;server;good" answers="it's good :D;i like it :P;yes it is :)" />
|
||||
<fakePlayerChat fpcName="Evi" searchMethod="CONTAINS" searchText="where;you;go;?" answers="i look for something;checking stuff;looking for curius people :P" />
|
||||
<fakePlayerChat fpcName="Evi" searchMethod="CONTAINS" searchText="are;you;kidding" answers="^^;:D;:P" />
|
||||
</list>
|
37
L2J_Mobius_4.0_GrandCrusade/dist/game/data/FakePlayerVisualData.xml
vendored
Normal file
37
L2J_Mobius_4.0_GrandCrusade/dist/game/data/FakePlayerVisualData.xml
vendored
Normal file
@@ -0,0 +1,37 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!-- Values that can be set:
|
||||
int classId, int hair, int hairColor, int face, int nameColor, int titleColor, int equipRHand, int equipLHand, int equipHead,
|
||||
int equipGloves, int equipChest, int equipLegs, int equipFeet, int equipCloak, int equipHair, int equipHair2, int agathionId,
|
||||
int weaponEnchantLevel, int armorEnchantLevel, boolean fishing, int baitLocationX, int baitLocationY, int baitLocationZ,
|
||||
int recommends, int nobleLevel, boolean hero, int clanId, int pledgeStatus -->
|
||||
<!--
|
||||
####################################### Hero Weapons #####################################################
|
||||
Bow(37874) Crossbow(37875) Dagger(37868) Dual Blunt Weapon(37881) Dual Dagger(37880) Dual Sword(37879)
|
||||
Fist(37872) OneHand Blunt(37871) OneHand Magic Blunt(37877) One Hand Magic Sword(37876) One Hand Sword(37869)
|
||||
Spear(37873) Two-handed Magic Blunt Weapon(37878) Two-handed Sword(37870) Shield(37870) Sigil(37223)
|
||||
#############################################################################################################
|
||||
-->
|
||||
<list xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="xsd/FakePlayerVisualData.xsd">
|
||||
<!-- Non-Combat -->
|
||||
<fakePlayer npcId="80000" classId="188" hair="1" hairColor="1" face="0" equipRHand="17294" equipHead="37215" equipGloves="37216" equipChest="37213" equipLegs="37214" equipFeet="37217" equipCloak="40200" />
|
||||
|
||||
<!-- Combat -->
|
||||
<!-- Sigel Phoenix Knight -->
|
||||
<fakePlayer npcId="81001" classId="148" hair="0" hairColor="0" face="0" equipRHand="37869" equipLHand="37212" equipHead="37209" equipGloves="37210" equipChest="37207" equipLegs="37208" equipFeet="37211" equipCloak="30310" />
|
||||
<!-- Tyrr Titan -->
|
||||
<fakePlayer npcId="81002" classId="154" hair="0" hairColor="0" face="0" equipRHand="37870" equipHead="37215" equipGloves="37216" equipChest="37213" equipLegs="37214" equipFeet="37217" equipCloak="30311" />
|
||||
<!-- Othell Fortune Seeker -->
|
||||
<fakePlayer npcId="81003" classId="161" hair="0" hairColor="0" face="0" equipRHand="37880" equipHead="37215" equipGloves="37216" equipChest="37213" equipLegs="37214" equipFeet="37217" equipCloak="30312" />
|
||||
<!-- Yul Trickster -->
|
||||
<fakePlayer npcId="81004" classId="165" hair="0" hairColor="0" face="0" equipRHand="37875" equipHead="37215" equipGloves="37216" equipChest="37213" equipLegs="37214" equipFeet="37217" equipCloak="30313" />
|
||||
<!-- Feoh Archmage -->
|
||||
<fakePlayer npcId="81005" classId="166" hair="0" hairColor="0" face="0" equipRHand="37878" equipHead="37220" equipGloves="37221" equipChest="37218" equipLegs="37219" equipFeet="37222" equipCloak="30314" />
|
||||
<!-- Iss Spectral Dancer -->
|
||||
<fakePlayer npcId="81006" classId="173" hair="0" hairColor="0" face="0" equipRHand="37879" equipHead="37209" equipGloves="37210" equipChest="37207" equipLegs="37208" equipFeet="37211" equipCloak="30316" />
|
||||
<!-- Aeore Eva's Saint -->
|
||||
<fakePlayer npcId="81007" classId="180" hair="0" hairColor="0" face="0" equipRHand="37876" equipLHand="37223" equipHead="37220" equipGloves="37221" equipChest="37218" equipLegs="37219" equipFeet="37222" equipCloak="30317" />
|
||||
<!-- Eviscerator -->
|
||||
<fakePlayer npcId="81008" classId="188" hair="0" hairColor="0" face="0" equipRHand="37872" equipHead="37215" equipGloves="37216" equipChest="37213" equipLegs="37214" equipFeet="37217" equipCloak="40200" />
|
||||
<!-- Sayha's Seer -->
|
||||
<fakePlayer npcId="81009" classId="189" hair="0" hairColor="0" face="0" equipRHand="37878" equipHead="37220" equipGloves="37221" equipChest="37218" equipLegs="37219" equipFeet="37222" equipCloak="40201" />
|
||||
</list>
|
@@ -2402,4 +2402,45 @@
|
||||
<point X="42630" Y="-48231" Z="-792" delay="0" run="true" />
|
||||
<point X="45069" Y="-48034" Z="-792" delay="0" run="true" />
|
||||
</route>
|
||||
<route name="FPC_Giran_Evi" repeat="true" repeatStyle="cycle">
|
||||
<target id="80000" spawnX="83485" spawnY="147998" spawnZ="-3407" />
|
||||
<point X="83485" Y="147998" Z="-3407" delay="10" run="true" /> <!-- Gatekeeper -->
|
||||
<point X="83575" Y="147722" Z="-3405" delay="32" run="true" /> <!-- Buffer -->
|
||||
<point X="82117" Y="147642" Z="-3469" delay="0" run="true" />
|
||||
<point X="82152" Y="147580" Z="-3469" delay="36" run="true" /> <!-- Olympiad Statue-->
|
||||
<point X="82084" Y="147569" Z="-3469" delay="12" run="true" /> <!-- Olympiad Manager -->
|
||||
<point X="81532" Y="147578" Z="-3469" delay="0" run="true" />
|
||||
<point X="81593" Y="146626" Z="-3533" delay="3" run="true" />
|
||||
<point X="81932" Y="146566" Z="-3533" delay="0" run="true" />
|
||||
<point X="82651" Y="146714" Z="-3466" delay="20" run="true" /> <!-- Dimesional Merchant -->
|
||||
<point X="82807" Y="146649" Z="-3465" delay="0" run="true" />
|
||||
<point X="83216" Y="146672" Z="-3465" delay="28" run="true" /> <!-- Warehouse -->
|
||||
<point X="83211" Y="146724" Z="-3467" delay="88" run="true" /> <!-- Warehouse 2 -->
|
||||
<point X="81659" Y="146555" Z="-3533" delay="3" run="true" />
|
||||
<point X="81283" Y="145519" Z="-3533" delay="0" run="true" />
|
||||
<point X="80424" Y="145487" Z="-3533" delay="28" run="true" /> <!-- Auctioneer -->
|
||||
<point X="80283" Y="145826" Z="-3533" delay="0" run="true" />
|
||||
<point X="79952" Y="145840" Z="-3496" delay="0" run="true" />
|
||||
<point X="79781" Y="145546" Z="-3496" delay="0" run="true" />
|
||||
<point X="79736" Y="145518" Z="-3495" delay="0" run="true" />
|
||||
<point X="79663" Y="145529" Z="-3496" delay="40" run="true" /> <!-- Galladucci -->
|
||||
<point X="79661" Y="145429" Z="-3495" delay="80" run="true" /> <!-- Alexandria -->
|
||||
<point X="79999" Y="145152" Z="-3496" delay="0" run="true" />
|
||||
<point X="80393" Y="145136" Z="-3533" delay="0" run="true" />
|
||||
<point X="81073" Y="145935" Z="-3533" delay="6" run="true" /> <!-- Pochi -->
|
||||
<point X="81068" Y="145845" Z="-3533" delay="36" run="true" /> <!-- Pet Manager -->
|
||||
<point X="81061" Y="145563" Z="-3533" delay="0" run="true" />
|
||||
<point X="81563" Y="145532" Z="-3533" delay="3" run="true" />
|
||||
<point X="81692" Y="147231" Z="-3533" delay="32" run="true" /> <!-- Kiki -->
|
||||
<point X="81370" Y="147213" Z="-3533" delay="64" run="true" /> <!-- Plani -->
|
||||
<point X="81517" Y="147231" Z="-3533" delay="1" run="true" />
|
||||
<point X="81542" Y="147570" Z="-3469" delay="0" run="true" />
|
||||
<point X="81109" Y="147770" Z="-3469" delay="99" run="true" /> <!-- Moe -->
|
||||
<point X="81108" Y="149415" Z="-3469" delay="99" run="true" /> <!-- Auction House -->
|
||||
<point X="81413" Y="149700" Z="-3469" delay="52" run="true" /> <!-- Clan Hall Managers -->
|
||||
<point X="81718" Y="149626" Z="-3469" delay="60" run="true" /> <!-- Beauty Shop -->
|
||||
<point X="82815" Y="148840" Z="-3469" delay="3" run="true" />
|
||||
<point X="83482" Y="149278" Z="-3405" delay="16" run="true" /> <!-- Kekropus -->
|
||||
<point X="83307" Y="148431" Z="-3405" delay="21" run="true" /> <!-- Training Camp Manager -->
|
||||
</route>
|
||||
</routes>
|
@@ -88,7 +88,7 @@ public final class Wisp extends AbstractNpcAI
|
||||
final L2Character creature = event.getSeen();
|
||||
final L2Npc npc = (L2Npc) event.getSeer();
|
||||
|
||||
if (creature.isPlayer())
|
||||
if (creature.isPlayer() || creature.isFakePlayer())
|
||||
{
|
||||
npc.setTarget(creature);
|
||||
npc.doCast(npc.getId() == WISP ? WISP_HEAL.getSkill() : LARGE_WISP_HEAL.getSkill());
|
||||
|
80
L2J_Mobius_4.0_GrandCrusade/dist/game/data/scripts/custom/FakePlayers/PvpFlaggingStopTask.java
vendored
Normal file
80
L2J_Mobius_4.0_GrandCrusade/dist/game/data/scripts/custom/FakePlayers/PvpFlaggingStopTask.java
vendored
Normal file
@@ -0,0 +1,80 @@
|
||||
/*
|
||||
* 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 custom.FakePlayers;
|
||||
|
||||
import com.l2jmobius.Config;
|
||||
import com.l2jmobius.gameserver.model.L2Object;
|
||||
import com.l2jmobius.gameserver.model.actor.L2Npc;
|
||||
import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance;
|
||||
|
||||
import ai.AbstractNpcAI;
|
||||
|
||||
/**
|
||||
* TODO: Move it to L2Character.
|
||||
* @author Mobius
|
||||
*/
|
||||
public class PvpFlaggingStopTask extends AbstractNpcAI
|
||||
{
|
||||
private PvpFlaggingStopTask()
|
||||
{
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onAdvEvent(String event, L2Npc npc, L2PcInstance player)
|
||||
{
|
||||
if ((npc == null) || npc.isDead())
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
if (event.startsWith("FLAG_CHECK"))
|
||||
{
|
||||
final L2Object target = npc.getTarget();
|
||||
if ((target != null) && (target.isPlayable() || target.isFakePlayer()))
|
||||
{
|
||||
npc.setScriptValue(1); // in combat
|
||||
cancelQuestTimer("FINISH_FLAG" + npc.getObjectId(), npc, null);
|
||||
cancelQuestTimer("REMOVE_FLAG" + npc.getObjectId(), npc, null);
|
||||
startQuestTimer("FINISH_FLAG" + npc.getObjectId(), Config.PVP_NORMAL_TIME - 20000, npc, null);
|
||||
startQuestTimer("FLAG_CHECK" + npc.getObjectId(), 5000, npc, null);
|
||||
}
|
||||
}
|
||||
else if (event.startsWith("FINISH_FLAG"))
|
||||
{
|
||||
if (npc.isScriptValue(1))
|
||||
{
|
||||
npc.setScriptValue(2); // blink status
|
||||
npc.broadcastInfo(); // update flag status
|
||||
startQuestTimer("REMOVE_FLAG" + npc.getObjectId(), 20000, npc, null);
|
||||
}
|
||||
}
|
||||
else if (event.startsWith("REMOVE_FLAG"))
|
||||
{
|
||||
if (npc.isScriptValue(2))
|
||||
{
|
||||
npc.setScriptValue(0); // not in combat
|
||||
npc.broadcastInfo(); // update flag status
|
||||
}
|
||||
}
|
||||
return super.onAdvEvent(event, npc, player);
|
||||
}
|
||||
|
||||
public static void main(String[] args)
|
||||
{
|
||||
new PvpFlaggingStopTask();
|
||||
}
|
||||
}
|
115
L2J_Mobius_4.0_GrandCrusade/dist/game/data/scripts/custom/FakePlayers/RecieveAdventurerBuffs.java
vendored
Normal file
115
L2J_Mobius_4.0_GrandCrusade/dist/game/data/scripts/custom/FakePlayers/RecieveAdventurerBuffs.java
vendored
Normal file
@@ -0,0 +1,115 @@
|
||||
/*
|
||||
* 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 custom.FakePlayers;
|
||||
|
||||
import com.l2jmobius.Config;
|
||||
import com.l2jmobius.commons.util.CommonUtil;
|
||||
import com.l2jmobius.gameserver.data.xml.impl.FakePlayerData;
|
||||
import com.l2jmobius.gameserver.model.L2World;
|
||||
import com.l2jmobius.gameserver.model.actor.L2Npc;
|
||||
import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance;
|
||||
import com.l2jmobius.gameserver.model.base.ClassId;
|
||||
import com.l2jmobius.gameserver.model.holders.SkillHolder;
|
||||
import com.l2jmobius.gameserver.model.skills.SkillCaster;
|
||||
|
||||
import ai.AbstractNpcAI;
|
||||
|
||||
/**
|
||||
* Town Fake Player walkers that receive buffs from Adventurer NPC.
|
||||
* @author Mobius
|
||||
*/
|
||||
public class RecieveAdventurerBuffs extends AbstractNpcAI
|
||||
{
|
||||
// NPCs
|
||||
private static final int[] ADVENTURERS_GUIDE =
|
||||
{
|
||||
32327,
|
||||
33950,
|
||||
};
|
||||
private static final int[] FAKE_PLAYER_IDS =
|
||||
{
|
||||
80000
|
||||
};
|
||||
// Skills
|
||||
// private static final SkillHolder KNIGHT = new SkillHolder(15648, 1); // Knight's Harmony (Adventurer)
|
||||
private static final SkillHolder WARRIOR = new SkillHolder(15649, 1); // Warrior's Harmony (Adventurer)
|
||||
private static final SkillHolder WIZARD = new SkillHolder(15650, 1); // Wizard's Harmony (Adventurer)
|
||||
private static final SkillHolder[] GROUP_BUFFS =
|
||||
{
|
||||
new SkillHolder(15642, 1), // Horn Melody (Adventurer)
|
||||
new SkillHolder(15643, 1), // Drum Melody (Adventurer)
|
||||
new SkillHolder(15644, 1), // Pipe Organ Melody (Adventurer)
|
||||
new SkillHolder(15645, 1), // Guitar Melody (Adventurer)
|
||||
new SkillHolder(15646, 1), // Harp Melody (Adventurer)
|
||||
new SkillHolder(15647, 1), // Lute Melody (Adventurer)
|
||||
new SkillHolder(15651, 1), // Prevailing Sonata (Adventurer)
|
||||
new SkillHolder(15652, 1), // Daring Sonata (Adventurer)
|
||||
new SkillHolder(15653, 1), // Refreshing Sonata (Adventurer)
|
||||
};
|
||||
|
||||
private RecieveAdventurerBuffs()
|
||||
{
|
||||
if (Config.FAKE_PLAYERS_ENABLED)
|
||||
{
|
||||
addSpawnId(FAKE_PLAYER_IDS);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onAdvEvent(String event, L2Npc npc, L2PcInstance player)
|
||||
{
|
||||
if (event.startsWith("AUTOBUFF") && (npc != null) && !npc.isDead())
|
||||
{
|
||||
if (!npc.isMoving())
|
||||
{
|
||||
for (L2Npc nearby : L2World.getInstance().getVisibleObjects(npc, L2Npc.class, 100))
|
||||
{
|
||||
if (CommonUtil.contains(ADVENTURERS_GUIDE, nearby.getId()))
|
||||
{
|
||||
for (SkillHolder holder : GROUP_BUFFS)
|
||||
{
|
||||
SkillCaster.triggerCast(nearby, npc, holder.getSkill());
|
||||
}
|
||||
if (ClassId.getClassId(FakePlayerData.getInstance().getInfo(npc.getId()).getClassId()).isMage())
|
||||
{
|
||||
SkillCaster.triggerCast(nearby, npc, WIZARD.getSkill());
|
||||
}
|
||||
else
|
||||
{
|
||||
SkillCaster.triggerCast(nearby, npc, WARRIOR.getSkill());
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
startQuestTimer("AUTOBUFF" + npc.getObjectId(), 30000, npc, null);
|
||||
}
|
||||
return super.onAdvEvent(event, npc, player);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onSpawn(L2Npc npc)
|
||||
{
|
||||
startQuestTimer("AUTOBUFF" + npc.getObjectId(), 1000, npc, null);
|
||||
return super.onSpawn(npc);
|
||||
}
|
||||
|
||||
public static void main(String[] args)
|
||||
{
|
||||
new RecieveAdventurerBuffs();
|
||||
}
|
||||
}
|
@@ -79,6 +79,7 @@ import handlers.admincommandhandlers.AdminEnchant;
|
||||
import handlers.admincommandhandlers.AdminEventEngine;
|
||||
import handlers.admincommandhandlers.AdminEvents;
|
||||
import handlers.admincommandhandlers.AdminExpSp;
|
||||
import handlers.admincommandhandlers.AdminFakePlayers;
|
||||
import handlers.admincommandhandlers.AdminFightCalculator;
|
||||
import handlers.admincommandhandlers.AdminFortSiege;
|
||||
import handlers.admincommandhandlers.AdminGeodata;
|
||||
@@ -410,6 +411,7 @@ public class MasterHandler
|
||||
AdminEventEngine.class,
|
||||
AdminEvents.class,
|
||||
AdminExpSp.class,
|
||||
AdminFakePlayers.class,
|
||||
AdminFightCalculator.class,
|
||||
AdminFortSiege.class,
|
||||
AdminGeodata.class,
|
||||
|
@@ -192,7 +192,7 @@ public class L2NpcActionShift implements IActionShiftHandler
|
||||
}
|
||||
else if (Config.ALT_GAME_VIEWNPC)
|
||||
{
|
||||
if (!target.isNpc())
|
||||
if (!target.isNpc() || target.isFakePlayer())
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
@@ -0,0 +1,77 @@
|
||||
/*
|
||||
* 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.admincommandhandlers;
|
||||
|
||||
import com.l2jmobius.gameserver.data.xml.impl.FakePlayerData;
|
||||
import com.l2jmobius.gameserver.handler.IAdminCommandHandler;
|
||||
import com.l2jmobius.gameserver.instancemanager.FakePlayerChatManager;
|
||||
import com.l2jmobius.gameserver.model.L2World;
|
||||
import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance;
|
||||
|
||||
/**
|
||||
* @author Mobius
|
||||
*/
|
||||
public class AdminFakePlayers implements IAdminCommandHandler
|
||||
{
|
||||
private static final String[] ADMIN_COMMANDS =
|
||||
{
|
||||
"admin_fakechat"
|
||||
};
|
||||
|
||||
@Override
|
||||
public boolean useAdminCommand(String command, L2PcInstance activeChar)
|
||||
{
|
||||
if (command.startsWith("admin_fakechat"))
|
||||
{
|
||||
final String[] words = command.substring(15).split(" ");
|
||||
if (words.length < 3)
|
||||
{
|
||||
activeChar.sendMessage("Usage: //fakechat playername fpcname message");
|
||||
return false;
|
||||
}
|
||||
final L2PcInstance player = L2World.getInstance().getPlayer(words[0]);
|
||||
if (player == null)
|
||||
{
|
||||
activeChar.sendMessage("Player not found.");
|
||||
return false;
|
||||
}
|
||||
final String fpcName = FakePlayerData.getInstance().getProperName(words[1]);
|
||||
if (fpcName == null)
|
||||
{
|
||||
activeChar.sendMessage("Fake player not found.");
|
||||
return false;
|
||||
}
|
||||
String message = "";
|
||||
for (int i = 0; i < words.length; i++)
|
||||
{
|
||||
if (i < 2)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
message += (words[i] + " ");
|
||||
}
|
||||
FakePlayerChatManager.getInstance().sendChat(player, fpcName, message);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String[] getAdminCommandList()
|
||||
{
|
||||
return ADMIN_COMMANDS;
|
||||
}
|
||||
}
|
@@ -31,6 +31,7 @@ import com.l2jmobius.gameserver.data.xml.impl.BuyListData;
|
||||
import com.l2jmobius.gameserver.data.xml.impl.DoorData;
|
||||
import com.l2jmobius.gameserver.data.xml.impl.EnchantItemData;
|
||||
import com.l2jmobius.gameserver.data.xml.impl.EnchantItemGroupsData;
|
||||
import com.l2jmobius.gameserver.data.xml.impl.FakePlayerData;
|
||||
import com.l2jmobius.gameserver.data.xml.impl.FishingData;
|
||||
import com.l2jmobius.gameserver.data.xml.impl.ItemCrystalizationData;
|
||||
import com.l2jmobius.gameserver.data.xml.impl.MultisellData;
|
||||
@@ -44,9 +45,12 @@ import com.l2jmobius.gameserver.data.xml.impl.TransformData;
|
||||
import com.l2jmobius.gameserver.datatables.ItemTable;
|
||||
import com.l2jmobius.gameserver.handler.IAdminCommandHandler;
|
||||
import com.l2jmobius.gameserver.instancemanager.CursedWeaponsManager;
|
||||
import com.l2jmobius.gameserver.instancemanager.FakePlayerChatManager;
|
||||
import com.l2jmobius.gameserver.instancemanager.QuestManager;
|
||||
import com.l2jmobius.gameserver.instancemanager.WalkingManager;
|
||||
import com.l2jmobius.gameserver.instancemanager.ZoneManager;
|
||||
import com.l2jmobius.gameserver.model.L2Object;
|
||||
import com.l2jmobius.gameserver.model.L2World;
|
||||
import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance;
|
||||
import com.l2jmobius.gameserver.scripting.ScriptEngineManager;
|
||||
import com.l2jmobius.gameserver.util.Util;
|
||||
@@ -294,6 +298,25 @@ public class AdminReload implements IAdminCommandHandler
|
||||
AdminData.getInstance().broadcastMessageToGMs(activeChar.getName() + ": Reloaded Fishing data.");
|
||||
break;
|
||||
}
|
||||
case "fakeplayers":
|
||||
{
|
||||
FakePlayerData.getInstance().load();
|
||||
for (L2Object obj : L2World.getInstance().getVisibleObjects())
|
||||
{
|
||||
if (obj.isFakePlayer())
|
||||
{
|
||||
obj.broadcastInfo();
|
||||
}
|
||||
}
|
||||
AdminData.getInstance().broadcastMessageToGMs(activeChar.getName() + ": Reloaded Fake Player data.");
|
||||
break;
|
||||
}
|
||||
case "fakeplayerchat":
|
||||
{
|
||||
FakePlayerChatManager.getInstance().load();
|
||||
AdminData.getInstance().broadcastMessageToGMs(activeChar.getName() + ": Reloaded Fake Player Chat data.");
|
||||
break;
|
||||
}
|
||||
default:
|
||||
{
|
||||
activeChar.sendMessage(RELOAD_USAGE);
|
||||
|
@@ -17,8 +17,10 @@
|
||||
package handlers.chathandlers;
|
||||
|
||||
import com.l2jmobius.Config;
|
||||
import com.l2jmobius.gameserver.data.xml.impl.FakePlayerData;
|
||||
import com.l2jmobius.gameserver.enums.ChatType;
|
||||
import com.l2jmobius.gameserver.handler.IChatHandler;
|
||||
import com.l2jmobius.gameserver.instancemanager.FakePlayerChatManager;
|
||||
import com.l2jmobius.gameserver.model.BlockList;
|
||||
import com.l2jmobius.gameserver.model.L2World;
|
||||
import com.l2jmobius.gameserver.model.PcCondOverride;
|
||||
@@ -59,6 +61,28 @@ public final class ChatWhisper implements IChatHandler
|
||||
return;
|
||||
}
|
||||
|
||||
if (Config.FAKE_PLAYERS_ENABLED && (FakePlayerData.getInstance().getProperName(target) != null))
|
||||
{
|
||||
if (FakePlayerData.getInstance().isTalkable(target))
|
||||
{
|
||||
if (Config.FAKE_PLAYER_CHAT)
|
||||
{
|
||||
final String name = FakePlayerData.getInstance().getProperName(target);
|
||||
activeChar.sendPacket(new CreatureSay(activeChar, null, "->" + name, type, text));
|
||||
FakePlayerChatManager.getInstance().manageChat(activeChar, name, text);
|
||||
}
|
||||
else
|
||||
{
|
||||
activeChar.sendPacket(SystemMessageId.THAT_PERSON_IS_IN_MESSAGE_REFUSAL_MODE);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
activeChar.sendPacket(SystemMessageId.THAT_PLAYER_IS_NOT_ONLINE);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
final L2PcInstance receiver = L2World.getInstance().getPlayer(target);
|
||||
|
||||
if ((receiver != null) && !receiver.isSilenceMode(activeChar.getObjectId()))
|
||||
|
@@ -40,5 +40,4 @@ public class PlayerLevelCondition implements ICondition
|
||||
{
|
||||
return creature.isPlayer() && (creature.getLevel() >= _minLevel) && (creature.getLevel() < _maxLevel);
|
||||
}
|
||||
|
||||
}
|
||||
|
@@ -16,9 +16,11 @@
|
||||
*/
|
||||
package handlers.playeractions;
|
||||
|
||||
import com.l2jmobius.gameserver.ThreadPoolManager;
|
||||
import com.l2jmobius.gameserver.ai.CtrlEvent;
|
||||
import com.l2jmobius.gameserver.ai.CtrlIntention;
|
||||
import com.l2jmobius.gameserver.ai.NextAction;
|
||||
import com.l2jmobius.gameserver.data.xml.impl.FakePlayerData;
|
||||
import com.l2jmobius.gameserver.handler.IPlayerActionHandler;
|
||||
import com.l2jmobius.gameserver.model.ActionDataHolder;
|
||||
import com.l2jmobius.gameserver.model.L2Object;
|
||||
@@ -97,6 +99,15 @@ public final class SocialAction implements IPlayerActionHandler
|
||||
return true;
|
||||
}
|
||||
|
||||
private void scheduleDeny(L2PcInstance player)
|
||||
{
|
||||
if (player != null)
|
||||
{
|
||||
player.sendPacket(SystemMessageId.THE_COUPLE_ACTION_WAS_DENIED);
|
||||
player.onTransactionResponse();
|
||||
}
|
||||
}
|
||||
|
||||
private void useCoupleSocial(L2PcInstance player, int id)
|
||||
{
|
||||
if (player == null)
|
||||
@@ -105,7 +116,26 @@ public final class SocialAction implements IPlayerActionHandler
|
||||
}
|
||||
|
||||
final L2Object target = player.getTarget();
|
||||
if ((target == null) || !target.isPlayer())
|
||||
if ((target == null))
|
||||
{
|
||||
player.sendPacket(SystemMessageId.INVALID_TARGET);
|
||||
return;
|
||||
}
|
||||
|
||||
if (FakePlayerData.getInstance().isTalkable(target.getName()))
|
||||
{
|
||||
final SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.YOU_HAVE_REQUESTED_A_COUPLE_ACTION_WITH_C1);
|
||||
sm.addString(target.getName());
|
||||
player.sendPacket(sm);
|
||||
if (!player.isProcessingRequest())
|
||||
{
|
||||
ThreadPoolManager.schedule(() -> scheduleDeny(player), 10000);
|
||||
player.blockRequest();
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
if (!target.isPlayer())
|
||||
{
|
||||
player.sendPacket(SystemMessageId.INVALID_TARGET);
|
||||
return;
|
||||
|
@@ -216,11 +216,14 @@ public class Q10766_ANewCraft extends Quest
|
||||
@Id(WINDY_HEALING_POTION_1)
|
||||
public void onItemCreate(OnItemCreate event)
|
||||
{
|
||||
final L2PcInstance player = event.getActiveChar();
|
||||
final QuestState qs = getQuestState(player, false);
|
||||
if ((qs != null) && (qs.isCond(3)) && (getQuestItemsCount(qs.getPlayer(), AIR_STONE) >= 1) && (getQuestItemsCount(qs.getPlayer(), WINDY_HEALING_POTION_1) >= 1))
|
||||
final L2PcInstance player = event.getActiveChar().getActingPlayer();
|
||||
if (player != null)
|
||||
{
|
||||
qs.setCond(4, true);
|
||||
final QuestState qs = getQuestState(player, false);
|
||||
if ((qs != null) && (qs.isCond(3)) && (getQuestItemsCount(qs.getPlayer(), AIR_STONE) >= 1) && (getQuestItemsCount(qs.getPlayer(), WINDY_HEALING_POTION_1) >= 1))
|
||||
{
|
||||
qs.setCond(4, true);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@@ -141,11 +141,14 @@ public class Q10767_AWholeNewLevelOfAlchemy extends Quest
|
||||
@Id(HIGH_GRADE_LOVE_POTION)
|
||||
public void onItemCreate(OnItemCreate event)
|
||||
{
|
||||
final L2PcInstance player = event.getActiveChar();
|
||||
final QuestState qs = getQuestState(player, false);
|
||||
if ((qs != null) && (qs.isCond(1)) && (getQuestItemsCount(qs.getPlayer(), SUPERIOR_WINDY_HEALING_POTION) >= 1000) && (getQuestItemsCount(qs.getPlayer(), SUPERIOR_WINDY_QUIK_HEALING_POTION) >= 1000) && (getQuestItemsCount(qs.getPlayer(), HIGH_GRADE_LOVE_POTION) >= 1000))
|
||||
final L2PcInstance player = event.getActiveChar().getActingPlayer();
|
||||
if (player != null)
|
||||
{
|
||||
qs.setCond(2, true);
|
||||
final QuestState qs = getQuestState(player, false);
|
||||
if ((qs != null) && (qs.isCond(1)) && (getQuestItemsCount(qs.getPlayer(), SUPERIOR_WINDY_HEALING_POTION) >= 1000) && (getQuestItemsCount(qs.getPlayer(), SUPERIOR_WINDY_QUIK_HEALING_POTION) >= 1000) && (getQuestItemsCount(qs.getPlayer(), HIGH_GRADE_LOVE_POTION) >= 1000))
|
||||
{
|
||||
qs.setCond(2, true);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
8
L2J_Mobius_4.0_GrandCrusade/dist/game/data/spawns/Others/FakePlayers.xml
vendored
Normal file
8
L2J_Mobius_4.0_GrandCrusade/dist/game/data/spawns/Others/FakePlayers.xml
vendored
Normal file
@@ -0,0 +1,8 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<list xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../xsd/spawns.xsd">
|
||||
<spawn name="FakePlayers">
|
||||
<group>
|
||||
<npc id="80000" x="83485" y="147998" z="-3407" heading="23509" respawnTime="60sec" /> <!-- Evi -->
|
||||
</group>
|
||||
</spawn>
|
||||
</list>
|
341
L2J_Mobius_4.0_GrandCrusade/dist/game/data/stats/npcs/custom/fpc_combat.xml
vendored
Normal file
341
L2J_Mobius_4.0_GrandCrusade/dist/game/data/stats/npcs/custom/fpc_combat.xml
vendored
Normal file
@@ -0,0 +1,341 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<list xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../xsd/npcs.xsd">
|
||||
<!-- Sigel Phoenix Knight -->
|
||||
<npc id="81001" level="94" type="L2Monster" name="Siegfield" title="Sigel Phoenix Knight" >
|
||||
<race>HUMAN</race>
|
||||
<sex>MALE</sex>
|
||||
<stats str="88" int="39" dex="55" wit="39" con="82" men="38">
|
||||
<vitals hp="22228" hpRegen="10.8" mp="3681" mpRegen="3.0" />
|
||||
<attack physical="4425" magical="1284" random="30" critical="94" accuracy="206" attackSpeed="517" type="SWORD" range="40" distance="80" width="120" />
|
||||
<defence physical="3613" magical="2307" />
|
||||
<attribute>
|
||||
<defence fire="250" water="250" wind="250" earth="250" holy="250" dark="250" />
|
||||
<attack type="WATER" value="330" />
|
||||
</attribute>
|
||||
<speed>
|
||||
<walk ground="82" />
|
||||
<run ground="132" />
|
||||
</speed>
|
||||
</stats>
|
||||
<status fakePlayer="true" talkable="false" randomAnimation="false" randomWalk="false" attackable="true" />
|
||||
<ai type="FIGHTER" clanHelpRange="1000" aggroRange="1000" isAggressive="true" > <!-- FIGHTER, ARCHER, BALANCED, MAGE, HEALER -->
|
||||
<clan_list>
|
||||
<clan>FAKE_PLAYER</clan>
|
||||
</clan_list>
|
||||
</ai>
|
||||
<collision>
|
||||
<radius normal="9" />
|
||||
<height normal="23" />
|
||||
</collision>
|
||||
<parameters>
|
||||
<skill name="Skill01_ID" id="10009" level="6" />
|
||||
<skill name="Skill02_ID" id="10010" level="6" />
|
||||
<skill name="Skill03_ID" id="10011" level="4" />
|
||||
<skill name="Skill04_ID" id="10012" level="4" />
|
||||
</parameters>
|
||||
<skill_list>
|
||||
<skill id="10009" level="6" /> <!-- Last Judgment -->
|
||||
<skill id="10010" level="6" /> <!-- Justice Punishment -->
|
||||
<skill id="10011" level="4" /> <!-- Shield Impact -->
|
||||
<skill id="10012" level="4" /> <!-- Shield Wave -->
|
||||
</skill_list>
|
||||
</npc>
|
||||
<!-- Tyrr Titan -->
|
||||
<npc id="81002" level="94" type="L2Monster" name="Tyrrion" title="Tyrr Titan" >
|
||||
<race>ORC</race>
|
||||
<sex>MALE</sex>
|
||||
<stats str="88" int="37" dex="50" wit="38" con="87" men="41">
|
||||
<vitals hp="19416" hpRegen="10.8" mp="3727" mpRegen="3.0" />
|
||||
<attack physical="11025" magical="1247" random="30" critical="92" accuracy="168" attackSpeed="540" type="SWORD" range="40" distance="80" width="120" />
|
||||
<defence physical="3429" magical="2046" />
|
||||
<attribute>
|
||||
<defence fire="250" water="250" wind="250" earth="250" holy="250" dark="250" />
|
||||
<attack type="WATER" value="330" />
|
||||
</attribute>
|
||||
<speed>
|
||||
<walk ground="70" />
|
||||
<run ground="130" />
|
||||
</speed>
|
||||
</stats>
|
||||
<status fakePlayer="true" talkable="false" randomAnimation="false" randomWalk="false" attackable="true" />
|
||||
<ai type="FIGHTER" clanHelpRange="1000" aggroRange="1000" isAggressive="true" > <!-- FIGHTER, ARCHER, BALANCED, MAGE, HEALER -->
|
||||
<clan_list>
|
||||
<clan>FAKE_PLAYER</clan>
|
||||
</clan_list>
|
||||
</ai>
|
||||
<collision>
|
||||
<radius normal="7" />
|
||||
<height normal="27" />
|
||||
</collision>
|
||||
<parameters>
|
||||
<skill name="Skill01_ID" id="10267" level="4" />
|
||||
<skill name="Skill02_ID" id="1760" level="5" />
|
||||
</parameters>
|
||||
<skill_list>
|
||||
<skill id="10267" level="4" /> <!-- Hurricane Rush -->
|
||||
<skill id="1760" level="5" /> <!-- Armor Destruction -->
|
||||
</skill_list>
|
||||
</npc>
|
||||
<!-- Othell Fortune Seeker -->
|
||||
<npc id="81003" level="94" type="L2Monster" name="Othelo" title="Othell Fortune Seeker" >
|
||||
<race>DWARF</race>
|
||||
<sex>FEMALE</sex>
|
||||
<stats str="87" int="39" dex="53" wit="37" con="85" men="40">
|
||||
<vitals hp="17018" hpRegen="10.8" mp="3693" mpRegen="3.0" />
|
||||
<attack physical="4807" magical="1281" random="30" critical="230" accuracy="165" attackSpeed="943" type="SWORD" range="40" distance="80" width="120" />
|
||||
<defence physical="2889" magical="2035" />
|
||||
<attribute>
|
||||
<defence fire="250" water="250" wind="250" earth="250" holy="250" dark="250" />
|
||||
<attack type="WATER" value="330" />
|
||||
</attribute>
|
||||
<speed>
|
||||
<walk ground="80" />
|
||||
<run ground="131" />
|
||||
</speed>
|
||||
</stats>
|
||||
<status fakePlayer="true" talkable="false" randomAnimation="false" randomWalk="false" attackable="true" />
|
||||
<ai type="FIGHTER" clanHelpRange="1000" aggroRange="1000" isAggressive="true" > <!-- FIGHTER, ARCHER, BALANCED, MAGE, HEALER -->
|
||||
<clan_list>
|
||||
<clan>FAKE_PLAYER</clan>
|
||||
</clan_list>
|
||||
</ai>
|
||||
<collision>
|
||||
<radius normal="5" />
|
||||
<height normal="19" />
|
||||
</collision>
|
||||
<parameters>
|
||||
<skill name="Skill01_ID" id="10508" level="6" />
|
||||
<skill name="Skill02_ID" id="10509" level="6" />
|
||||
<skill name="Skill03_ID" id="10510" level="5" />
|
||||
</parameters>
|
||||
<skill_list>
|
||||
<skill id="10508" level="6" /> <!-- Blood Stab -->
|
||||
<skill id="10509" level="6" /> <!-- Heart Breaker -->
|
||||
<skill id="10510" level="5" /> <!-- Chain Blow -->
|
||||
</skill_list>
|
||||
</npc>
|
||||
<!-- Yul Trickster -->
|
||||
<npc id="81004" level="94" type="L2Monster" name="Yully" title="Yul Trickster" >
|
||||
<race>KAMAEL</race>
|
||||
<sex>FEMALE</sex>
|
||||
<stats str="88" int="43" dex="57" wit="36" con="80" men="37">
|
||||
<vitals hp="15285" hpRegen="10.8" mp="4596" mpRegen="3.0" />
|
||||
<attack physical="9754" magical="1375" random="30" critical="185" accuracy="167" attackSpeed="483" reuseDelay="1500" type="BOW" range="500" distance="80" width="120" />
|
||||
<defence physical="2885" magical="2318" />
|
||||
<attribute>
|
||||
<defence fire="250" water="250" wind="250" earth="250" holy="250" dark="250" />
|
||||
<attack type="WATER" value="330" />
|
||||
</attribute>
|
||||
<speed>
|
||||
<walk ground="87" />
|
||||
<run ground="140" />
|
||||
</speed>
|
||||
</stats>
|
||||
<status fakePlayer="true" talkable="false" randomAnimation="false" randomWalk="false" attackable="true" />
|
||||
<ai type="ARCHER" clanHelpRange="1000" aggroRange="1000" isAggressive="true" > <!-- FIGHTER, ARCHER, BALANCED, MAGE, HEALER -->
|
||||
<clan_list>
|
||||
<clan>FAKE_PLAYER</clan>
|
||||
</clan_list>
|
||||
</ai>
|
||||
<collision>
|
||||
<radius normal="7" />
|
||||
<height normal="22.6" />
|
||||
</collision>
|
||||
<parameters>
|
||||
<skill name="Skill01_ID" id="10760" level="6" />
|
||||
<skill name="Skill02_ID" id="10762" level="5" />
|
||||
<skill name="Skill03_ID" id="10763" level="6" />
|
||||
</parameters>
|
||||
<skill_list>
|
||||
<skill id="10760" level="6" /> <!-- Tornado Shot -->
|
||||
<skill id="10762" level="5" /> <!-- Quick Shot -->
|
||||
<skill id="10763" level="6" /> <!-- Pin Point -->
|
||||
</skill_list>
|
||||
</npc>
|
||||
<!-- Feoh Archmage -->
|
||||
<npc id="81005" level="94" type="L2Monster" name="Feoth" title="Feoh Archmage" >
|
||||
<race>HUMAN</race>
|
||||
<sex>FEMALE</sex>
|
||||
<stats str="38" int="79" dex="27" wit="78" con="41" men="78">
|
||||
<vitals hp="14435" hpRegen="10.8" mp="9103" mpRegen="3.0" />
|
||||
<attack physical="1257" magical="10320" random="30" critical="61" accuracy="158" attackSpeed="336" type="BLUNT" range="40" distance="500" width="120" />
|
||||
<defence physical="3132" magical="2635" />
|
||||
<attribute>
|
||||
<defence fire="250" water="250" wind="250" earth="250" holy="250" dark="250" />
|
||||
<attack type="WATER" value="330" />
|
||||
</attribute>
|
||||
<speed>
|
||||
<walk ground="78" />
|
||||
<run ground="124" />
|
||||
</speed>
|
||||
</stats>
|
||||
<status fakePlayer="true" talkable="false" randomAnimation="false" randomWalk="false" attackable="true" />
|
||||
<ai type="MAGE" clanHelpRange="1000" aggroRange="1000" isAggressive="true" > <!-- FIGHTER, ARCHER, BALANCED, MAGE, HEALER -->
|
||||
<clan_list>
|
||||
<clan>FAKE_PLAYER</clan>
|
||||
</clan_list>
|
||||
</ai>
|
||||
<collision>
|
||||
<radius normal="8" />
|
||||
<height normal="23.5" />
|
||||
</collision>
|
||||
<parameters>
|
||||
<skill name="Skill01_ID" id="11011" level="6" />
|
||||
<skill name="Skill02_ID" id="11017" level="6" />
|
||||
<skill name="Skill03_ID" id="11024" level="5" />
|
||||
<skill name="Skill04_ID" id="11047" level="4" />
|
||||
</parameters>
|
||||
<skill_list>
|
||||
<skill id="11011" level="6" /> <!-- Elemental Spike -->
|
||||
<skill id="11017" level="6" /> <!-- Elemental Crash -->
|
||||
<skill id="11024" level="5" /> <!-- Volcanic Destruction -->
|
||||
<skill id="11047" level="4" /> <!-- Ruin -->
|
||||
</skill_list>
|
||||
</npc>
|
||||
<!-- Iss Spectral Dancer -->
|
||||
<npc id="81006" level="94" type="L2Monster" name="Isda" title="Iss Spectral Dancer" >
|
||||
<race>DARK_ELF</race>
|
||||
<sex>FEMALE</sex>
|
||||
<stats str="92" int="42" dex="56" wit="39" con="77" men="35">
|
||||
<vitals hp="15499" hpRegen="10.8" mp="4038" mpRegen="3.0" />
|
||||
<attack physical="8777" magical="1451" random="30" critical="95" accuracy="162" attackSpeed="582" type="SWORD" range="40" distance="80" width="120" />
|
||||
<defence physical="3429" magical="2026" />
|
||||
<attribute>
|
||||
<defence fire="250" water="250" wind="250" earth="250" holy="250" dark="250" />
|
||||
<attack type="WATER" value="330" />
|
||||
</attribute>
|
||||
<speed>
|
||||
<walk ground="85" />
|
||||
<run ground="139" />
|
||||
</speed>
|
||||
</stats>
|
||||
<status fakePlayer="true" talkable="false" randomAnimation="false" randomWalk="false" attackable="true" />
|
||||
<ai type="BALANCED" clanHelpRange="1000" aggroRange="1000" isAggressive="true" > <!-- FIGHTER, ARCHER, BALANCED, MAGE, HEALER -->
|
||||
<clan_list>
|
||||
<clan>FAKE_PLAYER</clan>
|
||||
</clan_list>
|
||||
</ai>
|
||||
<collision>
|
||||
<radius normal="7" />
|
||||
<height normal="23.5" />
|
||||
</collision>
|
||||
<parameters>
|
||||
<skill name="Skill01_ID" id="11508" level="4" />
|
||||
<skill name="Skill02_ID" id="11509" level="6" />
|
||||
<skill name="Skill02_ID" id="11510" level="5" />
|
||||
</parameters>
|
||||
<skill_list>
|
||||
<skill id="11508" level="4" /> <!-- Assault Rush -->
|
||||
<skill id="11509" level="6" /> <!-- Crippling Attack -->
|
||||
<skill id="11510" level="5" /> <!-- Shadow Blade -->
|
||||
</skill_list>
|
||||
</npc>
|
||||
<!-- Aeore Eva's Saint -->
|
||||
<npc id="81007" level="94" type="L2Monster" name="Aorta" title="Aeore Eva's Saint" >
|
||||
<race>ELF</race>
|
||||
<sex>FEMALE</sex>
|
||||
<stats str="36" int="74" dex="32" wit="84" con="38" men="77">
|
||||
<vitals hp="13651" hpRegen="10.8" mp="11193" mpRegen="3.0" />
|
||||
<attack physical="1008" magical="7469" random="30" critical="63" accuracy="161" attackSpeed="400" type="SWORD" range="40" distance="80" width="120" />
|
||||
<defence physical="2406" magical="2627" />
|
||||
<attribute>
|
||||
<defence fire="250" water="250" wind="250" earth="250" holy="250" dark="250" />
|
||||
<attack type="WATER" value="330" />
|
||||
</attribute>
|
||||
<speed>
|
||||
<walk ground="85" />
|
||||
<run ground="129" />
|
||||
</speed>
|
||||
</stats>
|
||||
<status fakePlayer="true" talkable="false" randomAnimation="false" randomWalk="false" attackable="true" />
|
||||
<ai type="HEALER" clanHelpRange="1000" aggroRange="1000" isAggressive="true" > <!-- FIGHTER, ARCHER, BALANCED, MAGE, HEALER -->
|
||||
<clan_list>
|
||||
<clan>FAKE_PLAYER</clan>
|
||||
</clan_list>
|
||||
</ai>
|
||||
<collision>
|
||||
<radius normal="7.5" />
|
||||
<height normal="23" />
|
||||
</collision>
|
||||
<parameters>
|
||||
<skill name="Skill01_ID" id="11766" level="6" />
|
||||
<skill name="Skill02_ID" id="11814" level="6" />
|
||||
</parameters>
|
||||
<skill_list>
|
||||
<skill id="11766" level="6" /> <!-- Dark Blast -->
|
||||
<skill id="11814" level="6" /> <!-- Dark Force -->
|
||||
</skill_list>
|
||||
</npc>
|
||||
<!-- Eviscerator -->
|
||||
<npc id="81008" level="94" type="L2Monster" name="Breezer" title="Eviscerator" >
|
||||
<race>ERTHEIA</race>
|
||||
<sex>FEMALE</sex>
|
||||
<stats str="89" int="40" dex="52" wit="37" con="84" men="39">
|
||||
<vitals hp="18857" hpRegen="10.8" mp="3863" mpRegen="3.0" />
|
||||
<attack physical="10198" magical="1305" random="30" critical="132" accuracy="177" attackSpeed="588" type="FIST" range="40" distance="80" width="120" />
|
||||
<defence physical="3388" magical="2450" />
|
||||
<attribute>
|
||||
<defence fire="250" water="250" wind="250" earth="250" holy="250" dark="250" />
|
||||
<attack type="WATER" value="330" />
|
||||
</attribute>
|
||||
<speed>
|
||||
<walk ground="88" />
|
||||
<run ground="141" />
|
||||
</speed>
|
||||
</stats>
|
||||
<status fakePlayer="true" talkable="false" randomAnimation="false" randomWalk="false" attackable="true" />
|
||||
<ai type="FIGHTER" clanHelpRange="1000" aggroRange="1000" isAggressive="true" > <!-- FIGHTER, ARCHER, BALANCED, MAGE, HEALER -->
|
||||
<clan_list>
|
||||
<clan>FAKE_PLAYER</clan>
|
||||
</clan_list>
|
||||
</ai>
|
||||
<collision>
|
||||
<radius normal="6.5" />
|
||||
<height normal="19.2" />
|
||||
</collision>
|
||||
<parameters>
|
||||
<skill name="Skill01_ID" id="30500" level="18" />
|
||||
<skill name="Skill02_ID" id="30504" level="6" />
|
||||
</parameters>
|
||||
<skill_list>
|
||||
<skill id="30500" level="18" /> <!-- Lateral Hit -->
|
||||
<skill id="30504" level="6" /> <!-- Gravity Hit -->
|
||||
</skill_list>
|
||||
</npc>
|
||||
<!-- Sayha's Seer -->
|
||||
<npc id="81009" level="94" type="L2Monster" name="Hoppy" title="Sayha's Seer" >
|
||||
<race>ERTHEIA</race>
|
||||
<sex>FEMALE</sex>
|
||||
<stats str="37" int="79" dex="27" wit="76" con="42" men="80">
|
||||
<vitals hp="18857" hpRegen="10.8" mp="3863" mpRegen="3.0" />
|
||||
<attack physical="1242" magical="4784" random="30" critical="61" accuracy="177" attackSpeed="162" type="BLUNT" range="40" distance="80" width="120" />
|
||||
<defence physical="3388" magical="2450" />
|
||||
<attribute>
|
||||
<defence fire="250" water="250" wind="250" earth="250" holy="250" dark="250" />
|
||||
<attack type="WATER" value="330" />
|
||||
</attribute>
|
||||
<speed>
|
||||
<walk ground="88" />
|
||||
<run ground="141" />
|
||||
</speed>
|
||||
</stats>
|
||||
<status fakePlayer="true" talkable="false" randomAnimation="false" randomWalk="false" attackable="true" />
|
||||
<ai type="BALANCED" clanHelpRange="1000" aggroRange="1000" isAggressive="true" > <!-- FIGHTER, ARCHER, BALANCED, MAGE, HEALER -->
|
||||
<clan_list>
|
||||
<clan>FAKE_PLAYER</clan>
|
||||
</clan_list>
|
||||
</ai>
|
||||
<collision>
|
||||
<radius normal="6.5" />
|
||||
<height normal="19.2" />
|
||||
</collision>
|
||||
<parameters>
|
||||
<skill name="Skill01_ID" id="30001" level="22" /> <!-- Hydro Attack -->
|
||||
<skill name="Skill02_ID" id="30019" level="5" /> <!-- Sayha's Word -->
|
||||
</parameters>
|
||||
<skill_list>
|
||||
<skill id="30001" level="22" /> <!-- Hydro Attack -->
|
||||
<skill id="30019" level="5" /> <!-- Sayha's Word -->
|
||||
</skill_list>
|
||||
</npc>
|
||||
</list>
|
26
L2J_Mobius_4.0_GrandCrusade/dist/game/data/stats/npcs/custom/fpc_passive.xml
vendored
Normal file
26
L2J_Mobius_4.0_GrandCrusade/dist/game/data/stats/npcs/custom/fpc_passive.xml
vendored
Normal file
@@ -0,0 +1,26 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<list xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../xsd/npcs.xsd">
|
||||
<!-- Eviscerator -->
|
||||
<npc id="80000" level="94" type="L2Npc" name="Evi" >
|
||||
<race>ERTHEIA</race>
|
||||
<sex>FEMALE</sex>
|
||||
<stats str="103" int="40" dex="53" wit="37" con="84" men="39">
|
||||
<vitals hp="18857" hpRegen="10.8" mp="3863" mpRegen="3.0" />
|
||||
<attack physical="10198" magical="1305" random="30" critical="132" accuracy="177" attackSpeed="588" type="FIST" range="40" distance="80" width="120" />
|
||||
<defence physical="3388" magical="2450" />
|
||||
<attribute>
|
||||
<defence fire="200" water="250" wind="250" earth="250" holy="250" dark="250" />
|
||||
<attack type="WATER" value="330" />
|
||||
</attribute>
|
||||
<speed>
|
||||
<walk ground="88" />
|
||||
<run ground="141" />
|
||||
</speed>
|
||||
</stats>
|
||||
<status fakePlayer="true" talkable="false" randomAnimation="false" randomWalk="false" undying="true" attackable="false" />
|
||||
<collision>
|
||||
<radius normal="6.5" />
|
||||
<height normal="19.2" />
|
||||
</collision>
|
||||
</npc>
|
||||
</list>
|
20
L2J_Mobius_4.0_GrandCrusade/dist/game/data/xsd/FakePlayerChatData.xsd
vendored
Normal file
20
L2J_Mobius_4.0_GrandCrusade/dist/game/data/xsd/FakePlayerChatData.xsd
vendored
Normal file
@@ -0,0 +1,20 @@
|
||||
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
|
||||
<xs:element name="list">
|
||||
<xs:complexType>
|
||||
<xs:sequence>
|
||||
<xs:element name="fakePlayerChat" maxOccurs="unbounded" minOccurs="0">
|
||||
<xs:complexType>
|
||||
<xs:simpleContent>
|
||||
<xs:extension base="xs:string">
|
||||
<xs:attribute type="xs:string" name="fpcName" use="required" />
|
||||
<xs:attribute type="xs:string" name="searchMethod" use="required" />
|
||||
<xs:attribute type="xs:string" name="searchText" use="required" />
|
||||
<xs:attribute type="xs:string" name="answers" use="required" />
|
||||
</xs:extension>
|
||||
</xs:simpleContent>
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
</xs:schema>
|
45
L2J_Mobius_4.0_GrandCrusade/dist/game/data/xsd/FakePlayerVisualData.xsd
vendored
Normal file
45
L2J_Mobius_4.0_GrandCrusade/dist/game/data/xsd/FakePlayerVisualData.xsd
vendored
Normal file
@@ -0,0 +1,45 @@
|
||||
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
|
||||
<xs:element name="list">
|
||||
<xs:complexType>
|
||||
<xs:sequence>
|
||||
<xs:element name="fakePlayer" maxOccurs="unbounded" minOccurs="0">
|
||||
<xs:complexType>
|
||||
<xs:simpleContent>
|
||||
<xs:extension base="xs:string">
|
||||
<xs:attribute type="xs:int" name="npcId"/>
|
||||
<xs:attribute type="xs:short" name="classId"/>
|
||||
<xs:attribute type="xs:byte" name="hair"/>
|
||||
<xs:attribute type="xs:byte" name="hairColor"/>
|
||||
<xs:attribute type="xs:byte" name="face"/>
|
||||
<xs:attribute type="xs:string" name="nameColor"/>
|
||||
<xs:attribute type="xs:string" name="titleColor"/>
|
||||
<xs:attribute type="xs:int" name="equipHead"/>
|
||||
<xs:attribute type="xs:int" name="equipLHand"/>
|
||||
<xs:attribute type="xs:int" name="equipRHand"/>
|
||||
<xs:attribute type="xs:int" name="equipGloves"/>
|
||||
<xs:attribute type="xs:int" name="equipChest"/>
|
||||
<xs:attribute type="xs:int" name="equipLegs"/>
|
||||
<xs:attribute type="xs:int" name="equipFeet"/>
|
||||
<xs:attribute type="xs:int" name="equipCloak"/>
|
||||
<xs:attribute type="xs:int" name="equipHair"/>
|
||||
<xs:attribute type="xs:int" name="equipHair2"/>
|
||||
<xs:attribute type="xs:int" name="agathionId"/>
|
||||
<xs:attribute type="xs:byte" name="weaponEnchantLevel"/>
|
||||
<xs:attribute type="xs:byte" name="armorEnchantLevel"/>
|
||||
<xs:attribute type="xs:boolean" name="fishing"/>
|
||||
<xs:attribute type="xs:int" name="baitLocationX"/>
|
||||
<xs:attribute type="xs:int" name="baitLocationY"/>
|
||||
<xs:attribute type="xs:int" name="baitLocationZ"/>
|
||||
<xs:attribute type="xs:byte" name="recommends"/>
|
||||
<xs:attribute type="xs:byte" name="nobleLevel"/>
|
||||
<xs:attribute type="xs:boolean" name="hero"/>
|
||||
<xs:attribute type="xs:long" name="clanId"/>
|
||||
<xs:attribute type="xs:byte" name="pledgeStatus"/>
|
||||
</xs:extension>
|
||||
</xs:simpleContent>
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
</xs:schema>
|
@@ -201,6 +201,8 @@
|
||||
<xs:attribute name="hasSummoner" type="xs:boolean" />
|
||||
<xs:attribute name="canBeSown" type="xs:boolean" />
|
||||
<xs:attribute name="isDeathPenalty" type="xs:boolean" />
|
||||
<xs:attribute name="fakePlayer" type="xs:boolean" />
|
||||
<xs:attribute name="fakePlayerTalkable" type="xs:boolean" />
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
<xs:element name="skill_list" minOccurs="0" maxOccurs="1">
|
||||
|
Reference in New Issue
Block a user