LoS walls implementation.
This commit is contained in:
11
trunk/dist/game/config/General.ini
vendored
11
trunk/dist/game/config/General.ini
vendored
@@ -385,6 +385,17 @@ GridNeighborTurnOffTime = 90
|
||||
# Default: True
|
||||
EnableFallingDamage = True
|
||||
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Wall Data
|
||||
# ---------------------------------------------------------------------------
|
||||
|
||||
# Use XML wall data for LoS checks.
|
||||
# Does not require geodata to be enabled.
|
||||
# Default: True
|
||||
EnableWallData = True
|
||||
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Features
|
||||
# ---------------------------------------------------------------------------
|
||||
|
3
trunk/dist/game/config/adminCommands.xml
vendored
3
trunk/dist/game/config/adminCommands.xml
vendored
@@ -104,6 +104,9 @@
|
||||
<admin command="admin_closeall" accessLevel="100" />
|
||||
<admin command="admin_showdoors" accessLevel="100" />
|
||||
|
||||
<!-- ADMIN WALL CONTROL -->
|
||||
<admin command="admin_showwalls" accessLevel="100" />
|
||||
|
||||
<!-- ADMIN EDIT CHAR -->
|
||||
<admin command="admin_edit_character" accessLevel="100" />
|
||||
<admin command="admin_current_player" accessLevel="100" />
|
||||
|
6
trunk/dist/game/data/html/admin/reload.htm
vendored
6
trunk/dist/game/data/html/admin/reload.htm
vendored
@@ -35,9 +35,9 @@
|
||||
</tr>
|
||||
<tr>
|
||||
<td><button value="Teleport" action="bypass admin_reload teleport" width=65 height=21 back="L2UI_CT1.Button_DF_Down" fore="L2UI_CT1.Button_DF"></td>
|
||||
<td><button value="Zone" action="bypass admin_reload zone" width=65 height=21 back="L2UI_CT1.Button_DF_Down" fore="L2UI_CT1.Button_DF"></td>
|
||||
<td><button value="Door" action="bypass admin_reload door" width=65 height=21 back="L2UI_CT1.Button_DF_Down" fore="L2UI_CT1.Button_DF"></td>
|
||||
<td><button value="CW" action="bypass admin_reload cw" width=65 height=21 back="L2UI_CT1.Button_DF_Down" fore="L2UI_CT1.Button_DF"></td>
|
||||
<td><button value="Wall" action="bypass admin_reload wall" width=65 height=21 back="L2UI_CT1.Button_DF_Down" fore="L2UI_CT1.Button_DF"></td>
|
||||
<td><button value="Zone" action="bypass admin_reload zone" width=65 height=21 back="L2UI_CT1.Button_DF_Down" fore="L2UI_CT1.Button_DF"></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><button value="Effect" action="bypass admin_reload effect" width=65 height=21 back="L2UI_CT1.Button_DF_Down" fore="L2UI_CT1.Button_DF"></td>
|
||||
@@ -46,10 +46,10 @@
|
||||
<td><button value="Config" action="bypass admin_reload config" width=65 height=21 back="L2UI_CT1.Button_DF_Down" fore="L2UI_CT1.Button_DF"></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><button value="CW" action="bypass admin_reload cw" width=65 height=21 back="L2UI_CT1.Button_DF_Down" fore="L2UI_CT1.Button_DF"></td>
|
||||
<td><button value="Crest" action="bypass admin_reload crest" width=65 height=21 back="L2UI_CT1.Button_DF_Down" fore="L2UI_CT1.Button_DF"></td>
|
||||
<td><button value="L2Store" action="bypass admin_reload primeshop" width=65 height=21 back="L2UI_CT1.Button_DF_Down" fore="L2UI_CT1.Button_DF"></td>
|
||||
<td></td>
|
||||
<td></td>
|
||||
</tr>
|
||||
</table>
|
||||
<br>
|
||||
|
@@ -128,6 +128,7 @@ import handlers.admincommandhandlers.AdminTest;
|
||||
import handlers.admincommandhandlers.AdminTvTEvent;
|
||||
import handlers.admincommandhandlers.AdminUnblockIp;
|
||||
import handlers.admincommandhandlers.AdminVitality;
|
||||
import handlers.admincommandhandlers.AdminWall;
|
||||
import handlers.admincommandhandlers.AdminZone;
|
||||
import handlers.bypasshandlers.AlternateClassMaster;
|
||||
import handlers.bypasshandlers.ArcanCityMovie;
|
||||
@@ -406,6 +407,7 @@ final class MasterHandler
|
||||
AdminTvTEvent.class,
|
||||
AdminUnblockIp.class,
|
||||
AdminVitality.class,
|
||||
AdminWall.class,
|
||||
AdminZone.class,
|
||||
},
|
||||
{
|
||||
|
@@ -38,6 +38,7 @@ import com.l2jmobius.gameserver.data.xml.impl.NpcData;
|
||||
import com.l2jmobius.gameserver.data.xml.impl.PrimeShopData;
|
||||
import com.l2jmobius.gameserver.data.xml.impl.TeleportersData;
|
||||
import com.l2jmobius.gameserver.data.xml.impl.TransformData;
|
||||
import com.l2jmobius.gameserver.data.xml.impl.WallData;
|
||||
import com.l2jmobius.gameserver.datatables.ItemTable;
|
||||
import com.l2jmobius.gameserver.datatables.SkillData;
|
||||
import com.l2jmobius.gameserver.handler.IAdminCommandHandler;
|
||||
@@ -190,6 +191,12 @@ public class AdminReload implements IAdminCommandHandler
|
||||
AdminData.getInstance().broadcastMessageToGMs(activeChar.getName() + ": Reloaded Doors.");
|
||||
break;
|
||||
}
|
||||
case "wall":
|
||||
{
|
||||
WallData.getInstance().load();
|
||||
AdminData.getInstance().broadcastMessageToGMs(activeChar.getName() + ": Reloaded Walls.");
|
||||
break;
|
||||
}
|
||||
case "zone":
|
||||
{
|
||||
ZoneManager.getInstance().reload();
|
||||
|
75
trunk/dist/game/data/scripts/handlers/admincommandhandlers/AdminWall.java
vendored
Normal file
75
trunk/dist/game/data/scripts/handlers/admincommandhandlers/AdminWall.java
vendored
Normal file
@@ -0,0 +1,75 @@
|
||||
/*
|
||||
* 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 java.awt.Color;
|
||||
|
||||
import com.l2jmobius.gameserver.data.xml.impl.WallData;
|
||||
import com.l2jmobius.gameserver.handler.IAdminCommandHandler;
|
||||
import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance;
|
||||
import com.l2jmobius.gameserver.model.holders.WallHolder;
|
||||
import com.l2jmobius.gameserver.network.serverpackets.ExServerPrimitive;
|
||||
import com.l2jmobius.gameserver.util.Util;
|
||||
|
||||
/**
|
||||
* @author Mobius
|
||||
*/
|
||||
public class AdminWall implements IAdminCommandHandler
|
||||
{
|
||||
private static final String[] ADMIN_COMMANDS =
|
||||
{
|
||||
"admin_showwalls"
|
||||
};
|
||||
|
||||
@Override
|
||||
public boolean useAdminCommand(String command, L2PcInstance activeChar)
|
||||
{
|
||||
if (activeChar == null)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
if (command.equals("admin_showwalls"))
|
||||
{
|
||||
final ExServerPrimitive packet = new ExServerPrimitive("wall_info", activeChar.getX(), activeChar.getY(), -16000);
|
||||
for (WallHolder wall : WallData.getInstance().getRegionWalls(activeChar.getX(), activeChar.getY()))
|
||||
{
|
||||
if ((Util.calculateDistance(activeChar.getX(), activeChar.getY(), activeChar.getZ(), wall.getPoint2X(), wall.getPoint2Y(), wall.getZMin(), false, false) < 3000) //
|
||||
|| (Util.calculateDistance(activeChar.getX(), activeChar.getY(), activeChar.getZ(), wall.getPoint1X(), wall.getPoint1Y(), wall.getZMin(), false, false) < 3000))
|
||||
{
|
||||
// top-bottom
|
||||
packet.addLine(Color.GREEN, wall.getPoint1X(), wall.getPoint1Y(), wall.getZMax(), wall.getPoint2X(), wall.getPoint2Y(), wall.getZMax());
|
||||
packet.addLine(Color.GREEN, wall.getPoint1X(), wall.getPoint1Y(), wall.getZMin(), wall.getPoint2X(), wall.getPoint2Y(), wall.getZMin());
|
||||
// left-right
|
||||
packet.addLine(Color.GREEN, wall.getPoint1X(), wall.getPoint1Y(), wall.getZMin(), wall.getPoint1X(), wall.getPoint1Y(), wall.getZMax());
|
||||
packet.addLine(Color.GREEN, wall.getPoint2X(), wall.getPoint2Y(), wall.getZMin(), wall.getPoint2X(), wall.getPoint2Y(), wall.getZMax());
|
||||
// diagonals
|
||||
packet.addLine(Color.GREEN, wall.getPoint1X(), wall.getPoint1Y(), wall.getZMin(), wall.getPoint2X(), wall.getPoint2Y(), wall.getZMax());
|
||||
packet.addLine(Color.GREEN, wall.getPoint1X(), wall.getPoint1Y(), wall.getZMax(), wall.getPoint2X(), wall.getPoint2Y(), wall.getZMin());
|
||||
}
|
||||
}
|
||||
activeChar.sendPacket(packet);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String[] getAdminCommandList()
|
||||
{
|
||||
return ADMIN_COMMANDS;
|
||||
}
|
||||
}
|
17
trunk/dist/game/data/walls/giran_arena.xml
vendored
Normal file
17
trunk/dist/game/data/walls/giran_arena.xml
vendored
Normal file
@@ -0,0 +1,17 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<list xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../xsd/walls.xsd">
|
||||
<!-- outer fence -->
|
||||
<wall point1X="73743" point1Y="142759" point2X="73743" point2Y="143512" minZ="-3795" maxZ="-3715" />
|
||||
<wall point1X="73743" point1Y="143512" point2X="72242" point2Y="143511" minZ="-3795" maxZ="-3715" />
|
||||
<wall point1X="72242" point1Y="143511" point2X="72241" point2Y="143009" minZ="-3795" maxZ="-3715" />
|
||||
<wall point1X="72242" point1Y="142761" point2X="72241" point2Y="142009" minZ="-3795" maxZ="-3715" />
|
||||
<wall point1X="72241" point1Y="142009" point2X="73743" point2Y="142010" minZ="-3795" maxZ="-3715" />
|
||||
<wall point1X="73743" point1Y="142010" point2X="73744" point2Y="142512" minZ="-3795" maxZ="-3715" />
|
||||
<!-- inner fence -->
|
||||
<wall point1X="73117" point1Y="142266" point2X="73494" point2Y="142262" minZ="-3795" maxZ="-3715" />
|
||||
<wall point1X="73494" point1Y="142262" point2X="73494" point2Y="143256" minZ="-3795" maxZ="-3715" />
|
||||
<wall point1X="73494" point1Y="143256" point2X="73040" point2Y="143264" minZ="-3795" maxZ="-3715" />
|
||||
<wall point1X="72882" point1Y="143263" point2X="72500" point2Y="143258" minZ="-3795" maxZ="-3715" />
|
||||
<wall point1X="72500" point1Y="143258" point2X="72492" point2Y="142262" minZ="-3795" maxZ="-3715" />
|
||||
<wall point1X="72492" point1Y="142262" point2X="72958" point2Y="142267" minZ="-3795" maxZ="-3715" />
|
||||
</list>
|
22
trunk/dist/game/data/xsd/walls.xsd
vendored
Normal file
22
trunk/dist/game/data/xsd/walls.xsd
vendored
Normal file
@@ -0,0 +1,22 @@
|
||||
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
|
||||
<xs:element name="list">
|
||||
<xs:complexType>
|
||||
<xs:sequence>
|
||||
<xs:element name="wall" maxOccurs="unbounded" minOccurs="0">
|
||||
<xs:complexType>
|
||||
<xs:simpleContent>
|
||||
<xs:extension base="xs:string">
|
||||
<xs:attribute type="xs:int" name="point1X" use="required"/>
|
||||
<xs:attribute type="xs:int" name="point1Y" use="required"/>
|
||||
<xs:attribute type="xs:int" name="point2X" use="required"/>
|
||||
<xs:attribute type="xs:int" name="point2Y" use="required"/>
|
||||
<xs:attribute type="xs:int" name="minZ" use="required"/>
|
||||
<xs:attribute type="xs:int" name="maxZ" use="required"/>
|
||||
</xs:extension>
|
||||
</xs:simpleContent>
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
</xs:schema>
|
Reference in New Issue
Block a user