📄 datamanager.java
字号:
/*
// player near enough the door ?
if( door.isPlayerNear( myPlayer.getCurrentRectangle() ) ) {
}
*/
targetRange = UserAction.TARGET_RANGE_SAME_MAP;
// checking if the target and the range are right
if( !commandAction.isValidTarget(indexForMaskTarget, targetRange) ){
if (SHOW_DEBUG) {
System.out.println("Action aborting: invalid target/range.....");
}
loc = null;
commandRequest = COMMAND_NOTHING;
getClientScreen().getMapPanel().setCursor(new Cursor(Cursor.DEFAULT_CURSOR));
return true;
}
// executing command
switch(commandRequest) {
case COMMAND_CAST:
// check if can cast
// .....
// check if have mana
// .....
// send message
switch(targetRange){
case UserAction.TARGET_RANGE_NONE:
break;
case UserAction.TARGET_RANGE_TOUCH:
case UserAction.TARGET_RANGE_SHORT:
case UserAction.TARGET_RANGE_MEDIUM:
case UserAction.TARGET_RANGE_LONG:
// case UserAction.TARGET_RANGE_SEE_AND_SHORT:
// case UserAction.TARGET_RANGE_SEE_AND_MEDIUM:
// case UserAction.TARGET_RANGE_SEE_AND_LONG:
case UserAction.TARGET_RANGE_SAME_MAP:
sendMessage(
new CastActionWithPositionMessage( commandAction.getId(), x, y,targetKey ,targetRange ) );
break;
case UserAction.TARGET_RANGE_ONE_MAP:
case UserAction.TARGET_RANGE_MAP_ON_SAME_WORLD:
case UserAction.TARGET_RANGE_ANY:
sendMessage( new CastActionWithLocationMessage( commandAction.getId(), loc ) );
break;
}
getClientScreen().getMapPanel().setCursor(new Cursor(Cursor.DEFAULT_CURSOR));
commandRequest = COMMAND_NOTHING;
loc = null;
return true;
}
// reset vars and screen cursor
loc = null;
commandRequest = COMMAND_NOTHING;
getClientScreen().getMapPanel().setCursor(new Cursor(Cursor.DEFAULT_CURSOR));
if (SHOW_DEBUG) {
System.out.println("Action aborted.....");
}
}
else if( object instanceof PlayerImpl ) {
// We display selection and player info
String previouslySelectedPlayerKey = "";
if (selectedPlayer!=null)
previouslySelectedPlayerKey = selectedPlayer.getPrimaryKey();
selectedPlayer = (PlayerImpl) object; // new player selected
// We get the InfoPlugIn
InfoPlugIn infoPanel = (InfoPlugIn) clientScreen.getPlayerPanel().getPlugIn("Info");
if(infoPanel==null) {
Debug.signal(Debug.ERROR,this,"InfoPlugIn not found !");
return true;
}
// We erase the previous selection circle
if (circle!=null) {
gDirector.removeDrawable(circle);
circle=null;
}
// Deselect ?
if ( previouslySelectedPlayerKey.equals(selectedPlayer.getPrimaryKey()) && isLeftClick ) {
gDirector.addDrawable(selectedPlayer.getTextDrawable());
gDirector.addDrawable(selectedPlayer.getBasicChar().getAura());
selectedPlayer=null;
if(infoPanel!=null) infoPanel.reset();
return true;
}
// Select
circle = new CircleDrawable( selectedPlayer.getDrawable(), 20,
selectedPlayer.getBasicChar().getColor(), true,
ImageLibRef.AURA_PRIORITY );
gDirector.addDrawable(circle);
gDirector.addDrawable(selectedPlayer.getTextDrawable());
if(!selectedPlayer.getLocation().isTileMap())
gDirector.addDrawable(selectedPlayer.getBasicChar().getAura());
if(infoPanel!=null)
infoPanel.setPlayerInfo( selectedPlayer );
// Connection state
if( selectedPlayer.getPlayerState().value == PlayerState.CONNECTED )
return true;
if( !isLeftClick )
return true; // no away message displayed if right click
// Away Message
String awayMessage = selectedPlayer.getPlayerAwayMessage();
if( !selectedPlayer.canDisplayAwayMessage() ) return true;
if( awayMessage!=null ) {
JChatRoom chatRoom = clientScreen.getChatPanel().getCurrentJChatRoom();
if ( selectedPlayer.getPlayerState().value==PlayerState.DISCONNECTED ) {
chatRoom.appendText("<font color='gray'> "+selectedPlayer.getFullPlayerName()+" (disconnected) says: <i> "
+selectedPlayer.getPlayerAwayMessage()+" </i></font>");
} else
chatRoom.appendText("<font color='gray'> "+selectedPlayer.getFullPlayerName()+" (away) says: <i> "
+selectedPlayer.getPlayerAwayMessage()+" </i></font>");
}
return true;
}
else if( object instanceof Door ) {
// We open/close the door IF the player is near enough...
Door door = (Door) object;
if (SHOW_DEBUG)
System.out.println("A door has been clicked...");
// player near enough the door ?
if( door.isPlayerNear( myPlayer.getCurrentRectangle() ) ) {
if( isLeftClick ) {
WotlasLocation location = new WotlasLocation(myPlayer.getLocation());
// ADD HERE lock test, does the player has the key if the door is locked ?
sendMessage( new DoorStateMessage(location, door.getMyRoomLinkID(), !door.isOpened()) );
}
else {
// Door Selection ?
}
}
else {
// we go to the door
Point doorPoint = door.getPointNearDoor( myPlayer.getCurrentRectangle() );
if( doorPoint!=null )
myPlayer.moveTo( doorPoint, worldManager );
}
return true;
}
// else if( object instanceof BaseObject ) {
//
// ADD HERE SELECTION CODE FOR OBJECTS (use the player selection as example)
// }
else if( object!=null ) {
// Unknown Object !
Debug.signal(Debug.WARNING,this,"Unknown Object Clicked : "+object);
return true;
}
return false; // event not for us
}
/*------------------------------------------------------------------------------------*/
/** To add a wave arc effect on the player.
*/
public void addWaveDrawable( PlayerImpl player ) {
if(gDirector!=null)
gDirector.addDrawable(player.getWaveArcDrawable());
}
/*------------------------------------------------------------------------------------*/
/** To add a new player to the screen<br>
* (called by client.message.description.PlayerDataMsgBehaviour)
*
* @player the player to add
*/
public synchronized void addPlayer(PlayerImpl player) {
players.put( player.getPrimaryKey(), player );
}
/** To remove a player
*
* @player the player to remove
*/
public synchronized boolean removePlayer(PlayerImpl player) {
players.remove(player.getPrimaryKey());
return true;
}
/** To add a new screenObject to the screen<br>
* (called by client.message.description.MsgBehaviour)
*
* @screenObject to add to the player screen
*/
public synchronized void addScreenObject(ScreenObject item) {
screenObjects.put( item.getPrimaryKey(), item );
}
/** To remove a screenObject from player screen
*
* @screeenObject the player no more see, cause it's no more there
*/
public synchronized boolean removeScreenObject(ScreenObject item) {
screenObjects.remove( item.getPrimaryKey() );
return true;
}
/** To set our player<br>
* (called by client.message.description.YourPlayerDataMsgBehaviour)
*
* @param player Our player
*/
public void setCurrentPlayer(Player player) {
myPlayer = (PlayerImpl) player;
synchronized(startGameLock) {
startGameLock.notify();
}
}
/*------------------------------------------------------------------------------------*/
/** To change the current MapData ( TownMap, WorldMap, InteriorMap ).
*/
public void changeMapData() {
updatingMapData=true;
if( menuManager.isVisible() )
menuManager.hide();
try{
if ( myPlayer.getLocation().isRoom() ) {
myMapData = new InteriorMapData();
}
else if ( myPlayer.getLocation().isTown() ) {
myMapData = new TownMapData();
}
else if ( myPlayer.getLocation().isWorld() ) {
myMapData = new WorldMapData();
}
else if ( myPlayer.getLocation().isTileMap() ) {
myMapData = new TileMapData();
}
myMapData.showDebug(SHOW_DEBUG);
myMapData.initDisplay(myPlayer, this);
}
catch(Exception e ) {
Debug.signal(Debug.ERROR, this, e);
}
updatingMapData=false;
}
/*------------------------------------------------------------------------------------*/
/** To suppress drawables, shadows, data
*/
public void cleanInteriorMapData() {
gDirector.removeAllDrawables();
circle = null;
selectedPlayer = null;
}
/*------------------------------------------------------------------------------------*/
/** To draw a rectangle on the screen
*
* @param rect the rectangle to display
*/
public void drawScreenRectangle(Rectangle rect, Color color) {
Point p[] = new Point[5];
int x = (int) rect.getX();
int y = (int) rect.getY();
int width = (int) rect.getWidth();
int height = (int) rect.getHeight();
p[0] = new Point(x,y);
p[1] = new Point(x+width, y);
p[2] = new Point(x+width, y+height);
p[3] = new Point(x, y+height);
p[4] = new Point(x,y);
Drawable pathDrawable = (Drawable) new PathDrawable( p, color, (short) ImageLibRef.AURA_PRIORITY );
gDirector.addDrawable( pathDrawable);
}
/*------------------------------------------------------------------------------------*/
/** To exit wotlas.
*/
public void exit() {
if(clientScreen!=null) {
int clientScreenWidth = clientScreen.getWidth();
int clientScreenHeight = clientScreen.getHeight();
if(clientScreenWidth>100)
ClientDirector.getClientConfiguration().setClientWidth(clientScreenWidth);
if(clientScreenHeight>100)
ClientDirector.getClientConfiguration().setClientHeight(clientScreenHeight);
}
ClientDirector.getClientConfiguration().save();
SoundLibrary.clear();
Debug.exit();
}
/*------------------------------------------------------------------------------------*/
/** To get the master player.
*/
public PlayerImpl getMyPlayer() {
return myPlayer;
}
/*------------------------------------------------------------------------------------*/
/** Method called when an item has been clicked on an item who is not a menu link.
* @param e menu event generated.
*/
public void menuItemClicked( Menu2DEvent e ) {
if(SHOW_DEBUG)
System.out.println("Menu Item Clicked : "+e.toString());
// Test petrus
if (e.getItemName().equals("test inventory plugin")) {
System.out.println("ok");
} else {
System.out.println("not a test");
}
}
/*------------------------------------------------------------------------------------*/
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -