mirror of
https://github.com/ProjectSWGCore/NGECore2.git
synced 2026-07-30 00:15:57 -04:00
Merge branch 'master' of https://github.com/ProjectSWGCore/NGECore2
Conflicts: src/main/NGECore.java
This commit is contained in:
+18
-3
@@ -43,7 +43,7 @@ import org.apache.mina.core.session.IoSession;
|
||||
import com.sleepycat.je.Transaction;
|
||||
import com.sleepycat.persist.EntityCursor;
|
||||
|
||||
import protocol.swg.ChatSystemMessage;
|
||||
import protocol.swg.chat.ChatSystemMessage;
|
||||
import net.engio.mbassy.bus.config.BusConfiguration;
|
||||
import resources.common.RadialOptions;
|
||||
import resources.common.ThreadMonitor;
|
||||
@@ -57,8 +57,10 @@ import services.DevService;
|
||||
import services.EntertainmentService;
|
||||
import services.EquipmentService;
|
||||
import services.GroupService;
|
||||
import services.housing.HousingService;
|
||||
import services.InstanceService;
|
||||
import services.LoginService;
|
||||
import services.LootService;
|
||||
import services.MissionService;
|
||||
import services.PlayerService;
|
||||
import services.ScriptService;
|
||||
@@ -83,6 +85,7 @@ import services.LoginService;
|
||||
import services.map.MapService;
|
||||
import services.object.ObjectService;
|
||||
import services.object.UpdateService;
|
||||
import services.resources.HarvesterService;
|
||||
import services.resources.ResourceService;
|
||||
import services.retro.RetroService;
|
||||
import services.spawn.SpawnService;
|
||||
@@ -175,6 +178,9 @@ public class NGECore {
|
||||
public ResourceService resourceService;
|
||||
public ConversationService conversationService;
|
||||
public BazaarService bazaarService;
|
||||
public HousingService housingService;
|
||||
public LootService lootService;
|
||||
public HarvesterService harvesterService;
|
||||
|
||||
|
||||
// Login Server
|
||||
@@ -235,6 +241,11 @@ public class NGECore {
|
||||
if (!(config.loadConfigFile())) {
|
||||
config = DefaultConfig.getConfig();
|
||||
}
|
||||
|
||||
Config options = new Config();
|
||||
options.setFilePath("options.cfg");
|
||||
boolean optionsConfigLoaded = options.loadConfigFile();
|
||||
|
||||
// Database
|
||||
databaseConnection = new DatabaseConnection();
|
||||
databaseConnection.connect(config.getString("DB.URL"), config.getString("DB.NAME"), config.getString("DB.USER"), config.getString("DB.PASS"), "postgresql");
|
||||
@@ -288,6 +299,9 @@ public class NGECore {
|
||||
devService = new DevService(this);
|
||||
conversationService = new ConversationService(this);
|
||||
bazaarService = new BazaarService(this);
|
||||
housingService = new HousingService(this);
|
||||
lootService = new LootService(this);
|
||||
harvesterService = new HarvesterService(this);
|
||||
|
||||
if (config.keyExists("JYTHONCONSOLE.PORT")) {
|
||||
int jythonPort = config.getInt("JYTHONCONSOLE.PORT");
|
||||
@@ -304,7 +318,7 @@ public class NGECore {
|
||||
aiService = new AIService(this);
|
||||
//missionService = new MissionService(this);
|
||||
|
||||
if (config.getInt("LOAD.RESOURCE.SYSTEM") == 1) {
|
||||
if (optionsConfigLoaded && options.getInt("LOAD.RESOURCE.SYSTEM") == 1) {
|
||||
surveyService = new SurveyService(this);
|
||||
resourceService = new ResourceService(this);
|
||||
}
|
||||
@@ -409,7 +423,7 @@ public class NGECore {
|
||||
|
||||
objectService.loadBuildings();
|
||||
|
||||
if (config.getInt("LOAD.RESOURCE.SYSTEM") == 1) {
|
||||
if (optionsConfigLoaded && options.getInt("LOAD.RESOURCE.SYSTEM") > 0) {
|
||||
objectService.loadResourceRoots();
|
||||
objectService.loadResources();
|
||||
}
|
||||
@@ -452,6 +466,7 @@ public class NGECore {
|
||||
spawnService.loadLairGroups();
|
||||
spawnService.loadSpawnAreas();
|
||||
|
||||
housingService.loadHousingTemplates();
|
||||
equipmentService.loadBonusSets();
|
||||
|
||||
retroService.run();
|
||||
|
||||
@@ -22,7 +22,6 @@
|
||||
package protocol.swg;
|
||||
|
||||
import java.nio.ByteOrder;
|
||||
import java.util.Map.Entry;
|
||||
|
||||
import org.apache.mina.core.buffer.IoBuffer;
|
||||
import org.apache.mina.core.buffer.SimpleBufferAllocator;
|
||||
|
||||
@@ -99,7 +99,7 @@ public class CharacterSheetResponseMessage extends SWGMessage {
|
||||
|
||||
buffer.put(getUnicodeString(spouse));
|
||||
|
||||
buffer.putInt(10); // lots remaining
|
||||
buffer.putInt(creature.getPlayerObject().getLotsRemaining()); // lots remaining
|
||||
|
||||
return buffer.flip();
|
||||
}
|
||||
|
||||
@@ -25,8 +25,6 @@ import java.nio.ByteOrder;
|
||||
import java.util.Map;
|
||||
import java.util.Map.Entry;
|
||||
|
||||
import main.NGECore;
|
||||
|
||||
import org.apache.mina.core.buffer.IoBuffer;
|
||||
|
||||
import services.collections.ServerFirst;
|
||||
|
||||
@@ -27,7 +27,6 @@ import org.apache.mina.core.buffer.IoBuffer;
|
||||
|
||||
import resources.common.Console;
|
||||
import resources.common.StringUtilities;
|
||||
import engine.resources.common.CRC;
|
||||
|
||||
public class CommPlayerMessage extends SWGMessage {
|
||||
|
||||
|
||||
@@ -0,0 +1,64 @@
|
||||
/*******************************************************************************
|
||||
* Copyright (c) 2013 <Project SWG>
|
||||
*
|
||||
* This File is part of NGECore2.
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser 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 Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
* Using NGEngine to work with NGECore2 is making a combined work based on NGEngine.
|
||||
* Therefore all terms and conditions of the GNU Lesser General Public License cover the combination.
|
||||
******************************************************************************/
|
||||
package protocol.swg;
|
||||
|
||||
import java.nio.ByteOrder;
|
||||
|
||||
import main.NGECore;
|
||||
|
||||
import org.apache.mina.core.buffer.IoBuffer;
|
||||
|
||||
import services.travel.TravelPoint;
|
||||
import engine.resources.objects.SWGObject;
|
||||
|
||||
@SuppressWarnings("unused")
|
||||
public class EnterStructurePlacementModeMessage extends SWGMessage {
|
||||
|
||||
private SWGObject deed;
|
||||
private String structureTemplate;
|
||||
|
||||
public EnterStructurePlacementModeMessage(SWGObject deed, String structureTemplate) {
|
||||
this.deed = deed;
|
||||
this.structureTemplate = structureTemplate;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void deserialize(IoBuffer data) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public IoBuffer serialize() {
|
||||
IoBuffer result = IoBuffer.allocate(16 + structureTemplate.length()).order(ByteOrder.LITTLE_ENDIAN);
|
||||
|
||||
result.putShort((short) 3);
|
||||
result.putInt(0xE8A54DC1);
|
||||
|
||||
result.putLong(deed.getObjectID());
|
||||
|
||||
deed.setAttachment("structureTemplate", structureTemplate);
|
||||
result.put(getAsciiString(structureTemplate));
|
||||
|
||||
return result.flip();
|
||||
}
|
||||
|
||||
}
|
||||
@@ -2,9 +2,6 @@ package protocol.swg;
|
||||
|
||||
import org.apache.mina.core.buffer.IoBuffer;
|
||||
|
||||
import resources.common.Console;
|
||||
import resources.common.StringUtilities;
|
||||
|
||||
public class GuildRequestMessage extends SWGMessage {
|
||||
|
||||
private long characterId;
|
||||
|
||||
@@ -25,11 +25,6 @@ import java.nio.ByteOrder;
|
||||
|
||||
import org.apache.mina.core.buffer.IoBuffer;
|
||||
|
||||
import resources.common.Console;
|
||||
import resources.common.StringUtilities;
|
||||
import resources.guild.Guild;
|
||||
import resources.objects.creature.CreatureObject;
|
||||
|
||||
public class GuildResponseMessage extends SWGMessage {
|
||||
|
||||
private long player;
|
||||
|
||||
@@ -32,7 +32,6 @@ import protocol.swg.objectControllerObjects.DataTransform;
|
||||
import protocol.swg.objectControllerObjects.DataTransformWithParent;
|
||||
import protocol.swg.objectControllerObjects.ObjControllerObject;
|
||||
import protocol.swg.objectControllerObjects.UnknownObjController;
|
||||
import resources.common.StringUtilities;
|
||||
|
||||
public class ObjControllerMessage extends SWGMessage {
|
||||
|
||||
|
||||
@@ -34,8 +34,6 @@ import protocol.swg.SWGMessage;
|
||||
import resources.objects.creature.CreatureObject;
|
||||
import resources.objects.resource.GalacticResource;
|
||||
import resources.objects.tangible.TangibleObject;
|
||||
import resources.objects.tool.SurveyTool;
|
||||
|
||||
|
||||
public class ResourceListForSurveyMessage extends SWGMessage {
|
||||
|
||||
@@ -71,7 +69,7 @@ public class ResourceListForSurveyMessage extends SWGMessage {
|
||||
|
||||
Vector<GalacticResource> planetVector = core.resourceService.getSpawnedResourcesByPlanetAndType(surveyor.getPlanetId(),generalType);
|
||||
|
||||
resourceList = new ArrayList(planetVector);
|
||||
resourceList = new ArrayList<GalacticResource>(planetVector);
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -24,6 +24,7 @@ package protocol.swg;
|
||||
import java.nio.ByteBuffer;
|
||||
|
||||
import protocol.Message;
|
||||
import protocol.swg.chat.ChatInstantMessageToCharacter;
|
||||
|
||||
|
||||
public class SWGMessageFactory {
|
||||
|
||||
@@ -63,7 +63,7 @@ public class SurveyMapUpdateMessage extends SWGMessage {
|
||||
highestConcentration = concentration;
|
||||
}
|
||||
}
|
||||
int size = buffer.position();
|
||||
//int size = buffer.position();
|
||||
buffer.flip();
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,69 @@
|
||||
/*******************************************************************************
|
||||
* Copyright (c) 2013 <Project SWG>
|
||||
*
|
||||
* This File is part of NGECore2.
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser 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 Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
* Using NGEngine to work with NGECore2 is making a combined work based on NGEngine.
|
||||
* Therefore all terms and conditions of the GNU Lesser General Public License cover the combination.
|
||||
******************************************************************************/
|
||||
package protocol.swg.chat;
|
||||
|
||||
import org.apache.mina.core.buffer.IoBuffer;
|
||||
|
||||
import protocol.swg.SWGMessage;
|
||||
|
||||
|
||||
public class ChatCreateRoom extends SWGMessage {
|
||||
|
||||
private String address, title;
|
||||
private boolean privacy, moderatorOnly;
|
||||
private int request;
|
||||
|
||||
public ChatCreateRoom() { }
|
||||
@Override
|
||||
public void deserialize(IoBuffer data) {
|
||||
|
||||
this.privacy = (boolean) ((data.get() == 1) ? false : true);
|
||||
this.moderatorOnly = (boolean) ((data.get() == 1) ? true : false);
|
||||
data.getShort(); // unk
|
||||
this.address = getAsciiString(data);
|
||||
this.title = getAsciiString(data);
|
||||
this.request = data.getInt();
|
||||
}
|
||||
|
||||
@Override
|
||||
public IoBuffer serialize() {
|
||||
return null;
|
||||
}
|
||||
|
||||
public String getAddress() {
|
||||
return address;
|
||||
}
|
||||
public String getTitle() {
|
||||
return title;
|
||||
}
|
||||
public boolean isPrivacy() {
|
||||
return privacy;
|
||||
}
|
||||
public boolean isModeratorOnly() {
|
||||
return moderatorOnly;
|
||||
}
|
||||
|
||||
public int getRequest() {
|
||||
return request;
|
||||
}
|
||||
|
||||
}
|
||||
+3
-1
@@ -19,10 +19,12 @@
|
||||
* Using NGEngine to work with NGECore2 is making a combined work based on NGEngine.
|
||||
* Therefore all terms and conditions of the GNU Lesser General Public License cover the combination.
|
||||
******************************************************************************/
|
||||
package protocol.swg;
|
||||
package protocol.swg.chat;
|
||||
|
||||
import org.apache.mina.core.buffer.IoBuffer;
|
||||
|
||||
import protocol.swg.SWGMessage;
|
||||
|
||||
|
||||
public class ChatDeletePersistentMessage extends SWGMessage {
|
||||
|
||||
+14
-6
@@ -19,19 +19,27 @@
|
||||
* Using NGEngine to work with NGECore2 is making a combined work based on NGEngine.
|
||||
* Therefore all terms and conditions of the GNU Lesser General Public License cover the combination.
|
||||
******************************************************************************/
|
||||
package protocol.swg;
|
||||
package protocol.swg.chat;
|
||||
|
||||
import org.apache.mina.core.buffer.IoBuffer;
|
||||
|
||||
import protocol.swg.SWGMessage;
|
||||
|
||||
public class ChatEnterRoomById extends SWGMessage {
|
||||
|
||||
private int roomId;
|
||||
private int requestId;
|
||||
|
||||
public ChatEnterRoomById() { }
|
||||
|
||||
@Override
|
||||
public void deserialize(IoBuffer data) {
|
||||
setRoomId(data.getInt());
|
||||
data.getShort();
|
||||
data.getInt();
|
||||
|
||||
this.requestId = data.getInt();
|
||||
this.roomId = data.getInt();
|
||||
// getAsciiString(data); // name of the room but don't need it since we have id.
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -39,12 +47,12 @@ public class ChatEnterRoomById extends SWGMessage {
|
||||
return null;
|
||||
}
|
||||
|
||||
public int getRequestId() {
|
||||
return requestId;
|
||||
}
|
||||
|
||||
public int getRoomId() {
|
||||
return roomId;
|
||||
}
|
||||
|
||||
public void setRoomId(int roomId) {
|
||||
this.roomId = roomId;
|
||||
}
|
||||
|
||||
}
|
||||
+3
-1
@@ -1,4 +1,4 @@
|
||||
package protocol.swg;
|
||||
package protocol.swg.chat;
|
||||
|
||||
import java.nio.ByteOrder;
|
||||
|
||||
@@ -6,6 +6,8 @@ import main.NGECore;
|
||||
|
||||
import org.apache.mina.core.buffer.IoBuffer;
|
||||
|
||||
import protocol.swg.SWGMessage;
|
||||
|
||||
public class ChatFriendsListUpdate extends SWGMessage {
|
||||
|
||||
private String friendName;
|
||||
+3
-1
@@ -19,13 +19,15 @@
|
||||
* Using NGEngine to work with NGECore2 is making a combined work based on NGEngine.
|
||||
* Therefore all terms and conditions of the GNU Lesser General Public License cover the combination.
|
||||
******************************************************************************/
|
||||
package protocol.swg;
|
||||
package protocol.swg.chat;
|
||||
|
||||
import java.io.UnsupportedEncodingException;
|
||||
import java.nio.ByteBuffer;
|
||||
|
||||
import org.apache.mina.core.buffer.IoBuffer;
|
||||
|
||||
import protocol.swg.SWGMessage;
|
||||
|
||||
@SuppressWarnings("unused")
|
||||
|
||||
public class ChatInstantMessageToCharacter extends SWGMessage {
|
||||
+3
-1
@@ -19,12 +19,14 @@
|
||||
* Using NGEngine to work with NGECore2 is making a combined work based on NGEngine.
|
||||
* Therefore all terms and conditions of the GNU Lesser General Public License cover the combination.
|
||||
******************************************************************************/
|
||||
package protocol.swg;
|
||||
package protocol.swg.chat;
|
||||
|
||||
import java.nio.ByteOrder;
|
||||
|
||||
import org.apache.mina.core.buffer.IoBuffer;
|
||||
|
||||
import protocol.swg.SWGMessage;
|
||||
|
||||
|
||||
public class ChatInstantMessagetoClient extends SWGMessage{
|
||||
|
||||
@@ -19,12 +19,14 @@
|
||||
* Using NGEngine to work with NGECore2 is making a combined work based on NGEngine.
|
||||
* Therefore all terms and conditions of the GNU Lesser General Public License cover the combination.
|
||||
******************************************************************************/
|
||||
package protocol.swg;
|
||||
package protocol.swg.chat;
|
||||
|
||||
import java.nio.ByteOrder;
|
||||
|
||||
import org.apache.mina.core.buffer.IoBuffer;
|
||||
|
||||
import protocol.swg.SWGMessage;
|
||||
|
||||
public class ChatOnAddFriend extends SWGMessage {
|
||||
|
||||
@Override
|
||||
+2
-1
@@ -19,7 +19,7 @@
|
||||
* Using NGEngine to work with NGECore2 is making a combined work based on NGEngine.
|
||||
* Therefore all terms and conditions of the GNU Lesser General Public License cover the combination.
|
||||
******************************************************************************/
|
||||
package protocol.swg;
|
||||
package protocol.swg.chat;
|
||||
|
||||
import java.nio.ByteOrder;
|
||||
|
||||
@@ -27,6 +27,7 @@ import main.NGECore;
|
||||
|
||||
import org.apache.mina.core.buffer.IoBuffer;
|
||||
|
||||
import protocol.swg.SWGMessage;
|
||||
import engine.resources.config.Config;
|
||||
|
||||
public class ChatOnChangeFriendStatus extends SWGMessage {
|
||||
+48
-47
@@ -1,47 +1,48 @@
|
||||
/*******************************************************************************
|
||||
* Copyright (c) 2013 <Project SWG>
|
||||
*
|
||||
* This File is part of NGECore2.
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser 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 Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
* Using NGEngine to work with NGECore2 is making a combined work based on NGEngine.
|
||||
* Therefore all terms and conditions of the GNU Lesser General Public License cover the combination.
|
||||
******************************************************************************/
|
||||
package protocol.swg;
|
||||
|
||||
import org.apache.mina.core.buffer.IoBuffer;
|
||||
|
||||
import services.chat.ChatRoom;
|
||||
|
||||
public class ChatOnCreateRoom extends SWGMessage {
|
||||
|
||||
private ChatRoom room;
|
||||
|
||||
public ChatOnCreateRoom(ChatRoom room) {
|
||||
this.room = room;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void deserialize(IoBuffer data) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public IoBuffer serialize() {
|
||||
// TODO Auto-generated method stub
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
||||
/*******************************************************************************
|
||||
* Copyright (c) 2013 <Project SWG>
|
||||
*
|
||||
* This File is part of NGECore2.
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser 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 Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
* Using NGEngine to work with NGECore2 is making a combined work based on NGEngine.
|
||||
* Therefore all terms and conditions of the GNU Lesser General Public License cover the combination.
|
||||
******************************************************************************/
|
||||
package protocol.swg.chat;
|
||||
|
||||
import java.nio.ByteOrder;
|
||||
|
||||
import org.apache.mina.core.buffer.IoBuffer;
|
||||
|
||||
import protocol.swg.SWGMessage;
|
||||
|
||||
public class ChatOnConnectAvatar extends SWGMessage {
|
||||
|
||||
public ChatOnConnectAvatar() { }
|
||||
|
||||
@Override
|
||||
public void deserialize(IoBuffer data) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public IoBuffer serialize() {
|
||||
IoBuffer buffer = IoBuffer.allocate(6).order(ByteOrder.LITTLE_ENDIAN);
|
||||
|
||||
buffer.putShort((short) 1);
|
||||
buffer.putInt(0xD72FE9BE);
|
||||
|
||||
return buffer.flip();
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,94 @@
|
||||
/*******************************************************************************
|
||||
* Copyright (c) 2013 <Project SWG>
|
||||
*
|
||||
* This File is part of NGECore2.
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser 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 Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
* Using NGEngine to work with NGECore2 is making a combined work based on NGEngine.
|
||||
* Therefore all terms and conditions of the GNU Lesser General Public License cover the combination.
|
||||
******************************************************************************/
|
||||
package protocol.swg.chat;
|
||||
|
||||
import java.nio.ByteOrder;
|
||||
|
||||
import main.NGECore;
|
||||
|
||||
import org.apache.mina.core.buffer.IoBuffer;
|
||||
|
||||
import protocol.swg.SWGMessage;
|
||||
import services.chat.ChatRoom;
|
||||
|
||||
public class ChatOnCreateRoom extends SWGMessage {
|
||||
|
||||
private ChatRoom room;
|
||||
private int error;
|
||||
private int requestId;
|
||||
|
||||
public ChatOnCreateRoom(ChatRoom room, int error, int requestId) {
|
||||
this.room = room;
|
||||
this.error = error;
|
||||
this.requestId = requestId;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void deserialize(IoBuffer data) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public IoBuffer serialize() {
|
||||
String server = NGECore.getInstance().getGalaxyName();
|
||||
IoBuffer data = IoBuffer.allocate(100).order(ByteOrder.LITTLE_ENDIAN);
|
||||
data.setAutoExpand(true);
|
||||
|
||||
data.putShort((short) 4);
|
||||
data.putInt(0x35D7CC9F);
|
||||
|
||||
data.putInt(error);
|
||||
data.putInt(room.getRoomId());
|
||||
data.putInt(room.isPrivateRoom() ? 0 : 1);
|
||||
data.put((byte) (room.isModeratorsOnly() ? 1 : 0));
|
||||
data.put(getAsciiString(room.getRoomAddress()));
|
||||
data.put(getAsciiString("SWG"));
|
||||
data.put(getAsciiString(server));
|
||||
data.put(getAsciiString(room.getCreator()));
|
||||
data.put(getAsciiString("SWG"));
|
||||
data.put(getAsciiString(server));
|
||||
data.put(getAsciiString(room.getOwner()));
|
||||
data.put(getUnicodeString(room.getDescription()));
|
||||
|
||||
data.putInt(0);
|
||||
/*if (room.getModeratorList().size() > 0) {
|
||||
for (CreatureObject creo : room.getModeratorList()) {
|
||||
data.put(getAsciiString("SWG"));
|
||||
data.put(getAsciiString(server));
|
||||
data.put(getAsciiString(creo.getCustomName()));
|
||||
}
|
||||
}*/
|
||||
|
||||
data.putInt(0);
|
||||
/*if (room.getUserList().size() > 0) {
|
||||
for (CreatureObject creo : room.getUserList()) {
|
||||
data.put(getAsciiString("SWG"));
|
||||
data.put(getAsciiString(server));
|
||||
data.put(getAsciiString(creo.getCustomName()));
|
||||
}
|
||||
}*/
|
||||
|
||||
data.putInt(requestId);
|
||||
return data.flip();
|
||||
}
|
||||
|
||||
}
|
||||
+3
-1
@@ -19,7 +19,7 @@
|
||||
* Using NGEngine to work with NGECore2 is making a combined work based on NGEngine.
|
||||
* Therefore all terms and conditions of the GNU Lesser General Public License cover the combination.
|
||||
******************************************************************************/
|
||||
package protocol.swg;
|
||||
package protocol.swg.chat;
|
||||
|
||||
import java.nio.ByteOrder;
|
||||
|
||||
@@ -27,6 +27,7 @@ import main.NGECore;
|
||||
|
||||
import org.apache.mina.core.buffer.IoBuffer;
|
||||
|
||||
import protocol.swg.SWGMessage;
|
||||
import engine.resources.common.CRC;
|
||||
import resources.common.Opcodes;
|
||||
|
||||
@@ -62,6 +63,7 @@ public class ChatOnEnteredRoom extends SWGMessage {
|
||||
buffer.put(getAsciiString(characterName));
|
||||
buffer.putInt(success);
|
||||
buffer.putInt(roomId);
|
||||
buffer.putInt(0);
|
||||
return buffer.flip();
|
||||
}
|
||||
|
||||
+2
-1
@@ -1,4 +1,4 @@
|
||||
package protocol.swg;
|
||||
package protocol.swg.chat;
|
||||
|
||||
import java.nio.ByteOrder;
|
||||
import java.util.List;
|
||||
@@ -7,6 +7,7 @@ import main.NGECore;
|
||||
|
||||
import org.apache.mina.core.buffer.IoBuffer;
|
||||
|
||||
import protocol.swg.SWGMessage;
|
||||
import resources.objects.player.PlayerObject;
|
||||
|
||||
// This is possibly unused
|
||||
+3
-1
@@ -19,12 +19,14 @@
|
||||
* Using NGEngine to work with NGECore2 is making a combined work based on NGEngine.
|
||||
* Therefore all terms and conditions of the GNU Lesser General Public License cover the combination.
|
||||
******************************************************************************/
|
||||
package protocol.swg;
|
||||
package protocol.swg.chat;
|
||||
|
||||
import java.nio.ByteOrder;
|
||||
|
||||
import org.apache.mina.core.buffer.IoBuffer;
|
||||
|
||||
import protocol.swg.SWGMessage;
|
||||
|
||||
public class ChatOnSendInstantMessage extends SWGMessage {
|
||||
|
||||
private int errorType;
|
||||
+3
-1
@@ -19,12 +19,14 @@
|
||||
* Using NGEngine to work with NGECore2 is making a combined work based on NGEngine.
|
||||
* Therefore all terms and conditions of the GNU Lesser General Public License cover the combination.
|
||||
******************************************************************************/
|
||||
package protocol.swg;
|
||||
package protocol.swg.chat;
|
||||
|
||||
import java.nio.ByteOrder;
|
||||
|
||||
import org.apache.mina.core.buffer.IoBuffer;
|
||||
|
||||
import protocol.swg.SWGMessage;
|
||||
|
||||
|
||||
public class ChatOnSendPersistentMessage extends SWGMessage {
|
||||
|
||||
+3
-1
@@ -19,12 +19,14 @@
|
||||
* Using NGEngine to work with NGECore2 is making a combined work based on NGEngine.
|
||||
* Therefore all terms and conditions of the GNU Lesser General Public License cover the combination.
|
||||
******************************************************************************/
|
||||
package protocol.swg;
|
||||
package protocol.swg.chat;
|
||||
|
||||
import java.nio.ByteOrder;
|
||||
|
||||
import org.apache.mina.core.buffer.IoBuffer;
|
||||
|
||||
import protocol.swg.SWGMessage;
|
||||
|
||||
public class ChatOnSendRoomMessage extends SWGMessage {
|
||||
|
||||
private int errorCode;
|
||||
+4
-1
@@ -19,11 +19,14 @@
|
||||
* Using NGEngine to work with NGECore2 is making a combined work based on NGEngine.
|
||||
* Therefore all terms and conditions of the GNU Lesser General Public License cover the combination.
|
||||
******************************************************************************/
|
||||
package protocol.swg;
|
||||
package protocol.swg.chat;
|
||||
|
||||
import java.nio.ByteOrder;
|
||||
import java.util.List;
|
||||
|
||||
import org.apache.mina.core.buffer.IoBuffer;
|
||||
|
||||
import protocol.swg.SWGMessage;
|
||||
import services.chat.WaypointAttachment;
|
||||
|
||||
|
||||
+4
-1
@@ -19,13 +19,16 @@
|
||||
* Using NGEngine to work with NGECore2 is making a combined work based on NGEngine.
|
||||
* Therefore all terms and conditions of the GNU Lesser General Public License cover the combination.
|
||||
******************************************************************************/
|
||||
package protocol.swg;
|
||||
package protocol.swg.chat;
|
||||
|
||||
import java.io.UnsupportedEncodingException;
|
||||
import java.nio.ByteBuffer;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import org.apache.mina.core.buffer.IoBuffer;
|
||||
|
||||
import protocol.swg.SWGMessage;
|
||||
import services.chat.WaypointAttachment;
|
||||
|
||||
|
||||
@@ -0,0 +1,113 @@
|
||||
/*******************************************************************************
|
||||
* Copyright (c) 2013 <Project SWG>
|
||||
*
|
||||
* This File is part of NGECore2.
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser 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 Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
* Using NGEngine to work with NGECore2 is making a combined work based on NGEngine.
|
||||
* Therefore all terms and conditions of the GNU Lesser General Public License cover the combination.
|
||||
******************************************************************************/
|
||||
package protocol.swg.chat;
|
||||
|
||||
import java.nio.ByteOrder;
|
||||
import java.util.Vector;
|
||||
|
||||
import main.NGECore;
|
||||
|
||||
import org.apache.mina.core.buffer.IoBuffer;
|
||||
|
||||
import protocol.swg.SWGMessage;
|
||||
import resources.objects.creature.CreatureObject;
|
||||
import services.chat.ChatRoom;
|
||||
|
||||
public class ChatQueryRoomResults extends SWGMessage {
|
||||
|
||||
private ChatRoom room;
|
||||
private int requestId;
|
||||
|
||||
public ChatQueryRoomResults(ChatRoom room, int requestId) {
|
||||
this.room = room;
|
||||
this.requestId = requestId;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void deserialize(IoBuffer data) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public IoBuffer serialize() {
|
||||
String server = NGECore.getInstance().getGalaxyName();
|
||||
IoBuffer buffer = IoBuffer.allocate(100).order(ByteOrder.LITTLE_ENDIAN);
|
||||
|
||||
buffer.putShort((short) 7);
|
||||
buffer.putInt(0xC4DE864E);
|
||||
|
||||
Vector<String> users = room.getUserList();
|
||||
|
||||
buffer.putInt(users.size());
|
||||
if (users.size() > 0) {
|
||||
for (String str : users) {
|
||||
buffer.put(getAsciiString("SWG"));
|
||||
buffer.put(getAsciiString(server));
|
||||
buffer.put(getAsciiString(str));
|
||||
}
|
||||
}
|
||||
|
||||
buffer.putInt(0); // TODO: Invited list for chat rooms
|
||||
|
||||
Vector<String> moderators = room.getModeratorList();
|
||||
|
||||
buffer.putInt(moderators.size());
|
||||
if (moderators.size() > 0) {
|
||||
for (String str : moderators) {
|
||||
buffer.put(getAsciiString("SWG"));
|
||||
buffer.put(getAsciiString(server));
|
||||
buffer.put(getAsciiString(str));
|
||||
}
|
||||
}
|
||||
|
||||
Vector<String> banned = room.getBanList();
|
||||
buffer.putInt(banned.size());
|
||||
if (banned.size() > 0) {
|
||||
for (String str : banned) {
|
||||
buffer.put(getAsciiString("SWG"));
|
||||
buffer.put(getAsciiString(server));
|
||||
buffer.put(getAsciiString(str));
|
||||
}
|
||||
}
|
||||
|
||||
buffer.putInt(requestId);
|
||||
buffer.putInt(room.getRoomId());
|
||||
buffer.putInt(room.isPrivateRoom() ? 0 : 1);
|
||||
buffer.put((byte) (room.isModeratorsOnly() ? 1 : 0));
|
||||
|
||||
buffer.put(getAsciiString(room.getRoomAddress()));
|
||||
|
||||
buffer.put(getAsciiString("SWG"));
|
||||
buffer.put(getAsciiString(server));
|
||||
buffer.put(getAsciiString(room.getOwner()));
|
||||
|
||||
buffer.put(getAsciiString("SWG"));
|
||||
buffer.put(getAsciiString(server));
|
||||
buffer.put(getAsciiString(room.getCreator()));
|
||||
|
||||
buffer.put(getUnicodeString(room.getDescription()));
|
||||
|
||||
buffer.putInt(0); // moderator list
|
||||
buffer.putInt(0); // user list
|
||||
return buffer.flip();
|
||||
}
|
||||
|
||||
}
|
||||
+3
-1
@@ -19,10 +19,12 @@
|
||||
* Using NGEngine to work with NGECore2 is making a combined work based on NGEngine.
|
||||
* Therefore all terms and conditions of the GNU Lesser General Public License cover the combination.
|
||||
******************************************************************************/
|
||||
package protocol.swg;
|
||||
package protocol.swg.chat;
|
||||
|
||||
import org.apache.mina.core.buffer.IoBuffer;
|
||||
|
||||
import protocol.swg.SWGMessage;
|
||||
|
||||
|
||||
public class ChatRequestPersistentMessage extends SWGMessage {
|
||||
|
||||
@@ -0,0 +1,102 @@
|
||||
/*******************************************************************************
|
||||
* Copyright (c) 2013 <Project SWG>
|
||||
*
|
||||
* This File is part of NGECore2.
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser 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 Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
* Using NGEngine to work with NGECore2 is making a combined work based on NGEngine.
|
||||
* Therefore all terms and conditions of the GNU Lesser General Public License cover the combination.
|
||||
******************************************************************************/
|
||||
package protocol.swg.chat;
|
||||
|
||||
import java.nio.ByteOrder;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
|
||||
import main.NGECore;
|
||||
|
||||
import org.apache.mina.core.buffer.IoBuffer;
|
||||
|
||||
import protocol.swg.SWGMessage;
|
||||
import services.chat.ChatRoom;
|
||||
|
||||
public class ChatRoomList extends SWGMessage {
|
||||
|
||||
private ConcurrentHashMap<Integer, ChatRoom> chatRooms;
|
||||
private ChatRoom room;
|
||||
|
||||
public ChatRoomList(ConcurrentHashMap<Integer, ChatRoom> chatRooms) {
|
||||
this.chatRooms = chatRooms;
|
||||
}
|
||||
|
||||
public ChatRoomList(ChatRoom room) {
|
||||
this.room = room;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void deserialize(IoBuffer data) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public IoBuffer serialize() {
|
||||
String server = NGECore.getInstance().getGalaxyName();
|
||||
IoBuffer buffer = IoBuffer.allocate(53).order(ByteOrder.LITTLE_ENDIAN);
|
||||
buffer.setAutoExpand(true);
|
||||
|
||||
buffer.putShort((short) 2);
|
||||
buffer.putInt(0x70DEB197);
|
||||
|
||||
if (room != null) {
|
||||
buffer.putInt(1);
|
||||
|
||||
buffer.putInt(room.getRoomId());
|
||||
buffer.putInt((int) ((room.isPrivateRoom() ? 1 : 0)));
|
||||
buffer.put((byte) ((room.isModeratorsOnly() ? 1 : 0)));
|
||||
buffer.put(getAsciiString(room.getRoomAddress()));
|
||||
buffer.put(getAsciiString("SWG"));
|
||||
buffer.put(getAsciiString(server));
|
||||
buffer.put(getAsciiString(room.getOwner()));
|
||||
buffer.put(getAsciiString("SWG"));
|
||||
buffer.put(getAsciiString(server));
|
||||
buffer.put(getAsciiString(room.getCreator()));
|
||||
buffer.put(getUnicodeString(room.getDescription()));
|
||||
buffer.putInt(0); // moderator list (not used by client)
|
||||
buffer.putInt(0); // user list (not used by client)
|
||||
} else {
|
||||
buffer.putInt(chatRooms.size());
|
||||
chatRooms.forEach((key, value) -> {
|
||||
if (value.isVisible()) {
|
||||
buffer.putInt(value.getRoomId());
|
||||
buffer.putInt((int) ((value.isPrivateRoom() ? 1 : 0)));
|
||||
buffer.put((byte) ((value.isModeratorsOnly() ? 1 : 0)));
|
||||
buffer.put(getAsciiString(value.getRoomAddress()));
|
||||
buffer.put(getAsciiString("SWG"));
|
||||
buffer.put(getAsciiString(server));
|
||||
buffer.put(getAsciiString(value.getOwner()));
|
||||
buffer.put(getAsciiString("SWG"));
|
||||
buffer.put(getAsciiString(server));
|
||||
buffer.put(getAsciiString(value.getCreator()));
|
||||
buffer.put(getUnicodeString(value.getDescription()));
|
||||
buffer.putInt(0); // moderator list (not used by client)
|
||||
buffer.putInt(0); // user list (not used by client)
|
||||
}
|
||||
});
|
||||
}
|
||||
buffer.flip();
|
||||
//StringUtilities.printBytes(buffer.array());
|
||||
return buffer;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -19,7 +19,7 @@
|
||||
* Using NGEngine to work with NGECore2 is making a combined work based on NGEngine.
|
||||
* Therefore all terms and conditions of the GNU Lesser General Public License cover the combination.
|
||||
******************************************************************************/
|
||||
package protocol.swg;
|
||||
package protocol.swg.chat;
|
||||
|
||||
import java.nio.ByteOrder;
|
||||
|
||||
@@ -27,6 +27,8 @@ import main.NGECore;
|
||||
|
||||
import org.apache.mina.core.buffer.IoBuffer;
|
||||
|
||||
import protocol.swg.SWGMessage;
|
||||
|
||||
public class ChatRoomMessage extends SWGMessage {
|
||||
|
||||
private String character;
|
||||
@@ -19,10 +19,12 @@
|
||||
* Using NGEngine to work with NGECore2 is making a combined work based on NGEngine.
|
||||
* Therefore all terms and conditions of the GNU Lesser General Public License cover the combination.
|
||||
******************************************************************************/
|
||||
package protocol.swg;
|
||||
package protocol.swg.chat;
|
||||
|
||||
import org.apache.mina.core.buffer.IoBuffer;
|
||||
|
||||
import protocol.swg.SWGMessage;
|
||||
|
||||
public class ChatSendToRoom extends SWGMessage {
|
||||
|
||||
private String message;
|
||||
@@ -0,0 +1,46 @@
|
||||
/*******************************************************************************
|
||||
* Copyright (c) 2013 <Project SWG>
|
||||
*
|
||||
* This File is part of NGECore2.
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser 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 Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
* Using NGEngine to work with NGECore2 is making a combined work based on NGEngine.
|
||||
* Therefore all terms and conditions of the GNU Lesser General Public License cover the combination.
|
||||
******************************************************************************/
|
||||
package protocol.swg.chat;
|
||||
|
||||
import java.nio.ByteOrder;
|
||||
|
||||
import org.apache.mina.core.buffer.IoBuffer;
|
||||
|
||||
import protocol.swg.SWGMessage;
|
||||
|
||||
public class ChatServerStatus extends SWGMessage {
|
||||
|
||||
public ChatServerStatus() { }
|
||||
|
||||
@Override
|
||||
public void deserialize(IoBuffer data) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public IoBuffer serialize() {
|
||||
IoBuffer buffer = IoBuffer.allocate(7).order(ByteOrder.LITTLE_ENDIAN);
|
||||
buffer.putShort((short) 2);
|
||||
buffer.putInt(0x7102B15F);
|
||||
buffer.put((byte) 1);
|
||||
return buffer.flip();
|
||||
}
|
||||
}
|
||||
+2
-1
@@ -19,12 +19,13 @@
|
||||
* Using NGEngine to work with NGECore2 is making a combined work based on NGEngine.
|
||||
* Therefore all terms and conditions of the GNU Lesser General Public License cover the combination.
|
||||
******************************************************************************/
|
||||
package protocol.swg;
|
||||
package protocol.swg.chat;
|
||||
|
||||
import java.nio.ByteOrder;
|
||||
|
||||
import org.apache.mina.core.buffer.IoBuffer;
|
||||
|
||||
import protocol.swg.SWGMessage;
|
||||
import resources.common.Opcodes;
|
||||
|
||||
public class ChatSystemMessage extends SWGMessage{
|
||||
@@ -1,76 +1,47 @@
|
||||
/*******************************************************************************
|
||||
* Copyright (c) 2013 <Project SWG>
|
||||
*
|
||||
* This File is part of NGECore2.
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser 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 Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
* Using NGEngine to work with NGECore2 is making a combined work based on NGEngine.
|
||||
* Therefore all terms and conditions of the GNU Lesser General Public License cover the combination.
|
||||
******************************************************************************/
|
||||
package protocol.swg;
|
||||
|
||||
import java.nio.ByteOrder;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
|
||||
import main.NGECore;
|
||||
|
||||
import org.apache.mina.core.buffer.IoBuffer;
|
||||
|
||||
import services.chat.ChatRoom;
|
||||
|
||||
public class ChatRoomList extends SWGMessage {
|
||||
|
||||
private ConcurrentHashMap<Integer, ChatRoom> chatRooms;
|
||||
|
||||
public ChatRoomList(ConcurrentHashMap<Integer, ChatRoom> chatRooms) {
|
||||
this.chatRooms = chatRooms;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void deserialize(IoBuffer data) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public IoBuffer serialize() {
|
||||
String server = NGECore.getInstance().getGalaxyName();
|
||||
IoBuffer buffer = IoBuffer.allocate(100).order(ByteOrder.LITTLE_ENDIAN);
|
||||
buffer.setAutoExpand(true);
|
||||
|
||||
buffer.putShort((short) 2);
|
||||
buffer.putInt(0x70DEB197);
|
||||
|
||||
buffer.putInt(chatRooms.size());
|
||||
chatRooms.forEach((key, value) -> {
|
||||
if (value.isVisible()) {
|
||||
buffer.putInt(value.getRoomId());
|
||||
buffer.putInt((int) ((value.isPrivateRoom() ? 1 : 0)));
|
||||
buffer.put((byte) ((value.isModeratorsOnly() ? 1 : 0)));
|
||||
buffer.put(getAsciiString(value.getRoomAddress()));
|
||||
buffer.put(getAsciiString("SWG"));
|
||||
buffer.put(getAsciiString(server));
|
||||
buffer.put(getAsciiString(value.getOwner()));
|
||||
buffer.put(getAsciiString("SWG"));
|
||||
buffer.put(getAsciiString(server));
|
||||
buffer.put(getAsciiString(value.getCreator()));
|
||||
buffer.put(getUnicodeString(value.getDescription()));
|
||||
buffer.putInt(0); // moderator list (not used by client)
|
||||
buffer.putInt(0); // user list (not used by client)
|
||||
}
|
||||
});
|
||||
return buffer.flip();
|
||||
}
|
||||
|
||||
}
|
||||
/*******************************************************************************
|
||||
* Copyright (c) 2013 <Project SWG>
|
||||
*
|
||||
* This File is part of NGECore2.
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser 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 Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
* Using NGEngine to work with NGECore2 is making a combined work based on NGEngine.
|
||||
* Therefore all terms and conditions of the GNU Lesser General Public License cover the combination.
|
||||
******************************************************************************/
|
||||
package protocol.swg.chat;
|
||||
|
||||
import java.nio.ByteOrder;
|
||||
|
||||
import org.apache.mina.core.buffer.IoBuffer;
|
||||
|
||||
import protocol.swg.SWGMessage;
|
||||
|
||||
public class VoiceChatStatus extends SWGMessage {
|
||||
|
||||
public VoiceChatStatus() { }
|
||||
|
||||
@Override
|
||||
public void deserialize(IoBuffer data) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public IoBuffer serialize() {
|
||||
IoBuffer buffer = IoBuffer.allocate(10).order(ByteOrder.LITTLE_ENDIAN);
|
||||
buffer.putShort((short) 2);
|
||||
buffer.putInt(0x9E601905);
|
||||
buffer.putInt(1);
|
||||
return buffer.flip();
|
||||
}
|
||||
|
||||
}
|
||||
@@ -25,10 +25,6 @@ import java.nio.ByteOrder;
|
||||
|
||||
import org.apache.mina.core.buffer.IoBuffer;
|
||||
|
||||
import protocol.swg.ObjControllerMessage;
|
||||
import resources.common.Console;
|
||||
import resources.common.StringUtilities;
|
||||
|
||||
public class BiographyUpdate extends ObjControllerObject {
|
||||
|
||||
private long objectId;
|
||||
|
||||
@@ -33,9 +33,9 @@ public class CombatSpam extends ObjControllerObject{
|
||||
private long attackerId;
|
||||
private long defenderId;
|
||||
private int damage;
|
||||
private String file;
|
||||
private String text;
|
||||
private byte colorFlag;
|
||||
//private String file;
|
||||
//private String text;
|
||||
//private byte colorFlag;
|
||||
private boolean hit = true;
|
||||
private boolean critical = false;
|
||||
private boolean dodge = false;
|
||||
|
||||
@@ -21,8 +21,6 @@
|
||||
******************************************************************************/
|
||||
package protocol.swg.objectControllerObjects;
|
||||
|
||||
import java.io.UnsupportedEncodingException;
|
||||
import java.nio.ByteBuffer;
|
||||
import java.nio.ByteOrder;
|
||||
import java.util.Vector;
|
||||
|
||||
@@ -30,7 +28,6 @@ import org.apache.mina.core.buffer.IoBuffer;
|
||||
|
||||
import protocol.swg.ObjControllerMessage;
|
||||
import resources.common.IDAttribute;
|
||||
import resources.common.StringUtilities;
|
||||
|
||||
public class ImageDesignMessage extends ObjControllerObject {
|
||||
|
||||
|
||||
@@ -21,11 +21,8 @@
|
||||
******************************************************************************/
|
||||
package protocol.swg.objectControllerObjects;
|
||||
|
||||
import java.nio.ByteOrder;
|
||||
|
||||
import org.apache.mina.core.buffer.IoBuffer;
|
||||
|
||||
import protocol.swg.ObjControllerMessage;
|
||||
import resources.common.Console;
|
||||
import resources.common.StringUtilities;
|
||||
|
||||
|
||||
@@ -26,7 +26,6 @@ import java.nio.ByteOrder;
|
||||
import org.apache.mina.core.buffer.IoBuffer;
|
||||
|
||||
import protocol.swg.ObjControllerMessage;
|
||||
import resources.common.ObjControllerOpcodes;
|
||||
import resources.common.OutOfBand;
|
||||
|
||||
public class NpcConversationMessage extends ObjControllerObject {
|
||||
|
||||
@@ -28,17 +28,14 @@ import org.apache.mina.core.buffer.IoBuffer;
|
||||
|
||||
import protocol.swg.ObjControllerMessage;
|
||||
import resources.common.ConversationOption;
|
||||
import resources.common.ObjControllerOpcodes;
|
||||
|
||||
public class NpcConversationOptions extends ObjControllerObject {
|
||||
|
||||
private long npcId;
|
||||
private long objectId;
|
||||
private Vector<ConversationOption> conversationOptions = new Vector<ConversationOption>();
|
||||
|
||||
public NpcConversationOptions(long objectId, long npcId) {
|
||||
public NpcConversationOptions(long objectId) {
|
||||
this.objectId = objectId;
|
||||
this.npcId = npcId;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -26,8 +26,6 @@ import java.nio.ByteBuffer;
|
||||
|
||||
import org.apache.mina.core.buffer.IoBuffer;
|
||||
|
||||
import engine.resources.common.Utilities;
|
||||
|
||||
public class SetProfessionTemplate extends ObjControllerObject {
|
||||
|
||||
private String profession;
|
||||
|
||||
@@ -27,7 +27,6 @@ import org.apache.mina.core.buffer.IoBuffer;
|
||||
|
||||
import protocol.swg.ObjControllerMessage;
|
||||
import resources.common.RGB;
|
||||
import resources.common.StringUtilities;
|
||||
|
||||
public class ShowFlyText extends ObjControllerObject {
|
||||
|
||||
|
||||
@@ -22,14 +22,12 @@
|
||||
package protocol.swg.objectControllerObjects;
|
||||
|
||||
import java.nio.ByteOrder;
|
||||
import java.util.List;
|
||||
import java.util.Vector;
|
||||
|
||||
import org.apache.mina.core.buffer.IoBuffer;
|
||||
|
||||
import engine.resources.objects.SWGObject;
|
||||
import protocol.swg.ObjControllerMessage;
|
||||
import resources.common.StringUtilities;
|
||||
|
||||
public class ShowLootBox extends ObjControllerObject {
|
||||
|
||||
|
||||
@@ -26,7 +26,6 @@ import java.nio.ByteOrder;
|
||||
import org.apache.mina.core.buffer.IoBuffer;
|
||||
|
||||
import protocol.swg.ObjControllerMessage;
|
||||
import resources.common.ObjControllerOpcodes;
|
||||
|
||||
public class StartNpcConversation extends ObjControllerObject {
|
||||
|
||||
|
||||
@@ -26,7 +26,6 @@ import java.nio.ByteOrder;
|
||||
import org.apache.mina.core.buffer.IoBuffer;
|
||||
|
||||
import protocol.swg.ObjControllerMessage;
|
||||
import resources.common.ObjControllerOpcodes;
|
||||
|
||||
public class StopNpcConversation extends ObjControllerObject {
|
||||
|
||||
|
||||
@@ -21,9 +21,7 @@
|
||||
******************************************************************************/
|
||||
package resources.common;
|
||||
|
||||
import java.util.concurrent.Executors;
|
||||
import java.util.concurrent.ScheduledFuture;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
public class Cooldown {
|
||||
private long startTimestamp;
|
||||
|
||||
@@ -21,8 +21,6 @@
|
||||
******************************************************************************/
|
||||
package resources.common;
|
||||
|
||||
import java.math.BigInteger;
|
||||
|
||||
public class IDAttribute {
|
||||
|
||||
private float floatValue;
|
||||
|
||||
@@ -42,5 +42,6 @@ public class ObjControllerOpcodes {
|
||||
public static final int STOP_NPC_CONVERSATION = 0xDE000000;
|
||||
public static final int NPC_CONVERSATION_OPTIONS = 0xE0000000;
|
||||
public static final int SET_PROFESSION_TEMPLATE = 0x5C040000;
|
||||
|
||||
public static final int RESOURCE_EMPTY_HOPPER = 0xED000000;
|
||||
|
||||
}
|
||||
|
||||
@@ -187,7 +187,8 @@ public class ThreadMonitor {
|
||||
return true;
|
||||
}
|
||||
|
||||
private void parseMBeanInfo() throws IOException {
|
||||
@SuppressWarnings("unused")
|
||||
private void parseMBeanInfo() throws IOException {
|
||||
try {
|
||||
MBeanOperationInfo[] mopis = server.getMBeanInfo(objname).getOperations();
|
||||
|
||||
|
||||
@@ -36,8 +36,6 @@ import resources.objects.creature.CreatureObject;
|
||||
import com.sleepycat.persist.model.NotPersistent;
|
||||
import com.sleepycat.persist.model.Persistent;
|
||||
|
||||
import engine.clientdata.ClientFileManager;
|
||||
import engine.clientdata.visitors.DatatableVisitor;
|
||||
import engine.resources.common.CRC;
|
||||
|
||||
@Persistent(version=10)
|
||||
|
||||
@@ -30,9 +30,7 @@ import resources.objects.tangible.TangibleObject;
|
||||
import com.sleepycat.persist.model.Entity;
|
||||
import com.sleepycat.persist.model.NotPersistent;
|
||||
import engine.clients.Client;
|
||||
import engine.resources.container.Traverser;
|
||||
import engine.resources.objects.IPersistent;
|
||||
import engine.resources.objects.SWGObject;
|
||||
import engine.resources.scene.Planet;
|
||||
import engine.resources.scene.Point3D;
|
||||
import engine.resources.scene.Quaternion;
|
||||
|
||||
@@ -30,7 +30,6 @@ import org.apache.mina.core.buffer.IoBuffer;
|
||||
import com.sleepycat.persist.model.Persistent;
|
||||
|
||||
import engine.resources.common.CRC;
|
||||
import resources.common.StringUtilities;
|
||||
import resources.objects.Buff;
|
||||
import resources.objects.ObjectMessageBuilder;
|
||||
import resources.objects.SkillMod;
|
||||
|
||||
@@ -22,25 +22,21 @@
|
||||
package resources.objects.creature;
|
||||
|
||||
import java.lang.System;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import java.util.Vector;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
import java.util.concurrent.Executors;
|
||||
import java.util.concurrent.ScheduledFuture;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
import org.apache.mina.core.buffer.IoBuffer;
|
||||
|
||||
import protocol.swg.ChatSystemMessage;
|
||||
import protocol.swg.ObjControllerMessage;
|
||||
import protocol.swg.PlayClientEffectObjectMessage;
|
||||
import protocol.swg.PlayMusicMessage;
|
||||
import protocol.swg.UpdatePostureMessage;
|
||||
import protocol.swg.UpdatePVPStatusMessage;
|
||||
import protocol.swg.chat.ChatSystemMessage;
|
||||
import protocol.swg.objectControllerObjects.Animation;
|
||||
import protocol.swg.objectControllerObjects.Posture;
|
||||
|
||||
@@ -63,8 +59,8 @@ import engine.resources.objects.SWGObject;
|
||||
import engine.resources.scene.Planet;
|
||||
import engine.resources.scene.Point3D;
|
||||
import engine.resources.scene.Quaternion;
|
||||
import resources.objects.player.PlayerObject;
|
||||
import resources.objects.tangible.TangibleObject;
|
||||
import resources.objects.weapon.WeaponObject;
|
||||
|
||||
@Entity(version=6)
|
||||
public class CreatureObject extends TangibleObject implements IPersistent {
|
||||
@@ -1090,8 +1086,7 @@ public class CreatureObject extends TangibleObject implements IPersistent {
|
||||
appearanceEquipmentList.get().remove(object);
|
||||
}
|
||||
}
|
||||
|
||||
@SuppressWarnings("unused")
|
||||
|
||||
@Override
|
||||
public void sendBaselines(Client destination) {
|
||||
|
||||
@@ -1777,6 +1772,11 @@ public class CreatureObject extends TangibleObject implements IPersistent {
|
||||
return 0L;
|
||||
}
|
||||
|
||||
public PlayerObject getPlayerObject()
|
||||
{
|
||||
return (PlayerObject) this.getSlottedObject("ghost");
|
||||
}
|
||||
|
||||
//public float getCooldown(String cooldownGroup) {
|
||||
//return ((float) getCooldown(cooldownGroup) / (float) 1000);
|
||||
//}
|
||||
|
||||
@@ -0,0 +1,37 @@
|
||||
/*******************************************************************************
|
||||
* Copyright (c) 2013 <Project SWG>
|
||||
*
|
||||
* This File is part of NGECore2.
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser 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 Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
* Using NGEngine to work with NGECore2 is making a combined work based on NGEngine.
|
||||
* Therefore all terms and conditions of the GNU Lesser General Public License cover the combination.
|
||||
******************************************************************************/
|
||||
package resources.objects.deed;
|
||||
|
||||
import engine.resources.scene.Planet;
|
||||
import engine.resources.scene.Point3D;
|
||||
import engine.resources.scene.Quaternion;
|
||||
import resources.objects.tangible.TangibleObject;
|
||||
|
||||
/**
|
||||
* @author Charon
|
||||
*/
|
||||
public class Deed extends TangibleObject {
|
||||
|
||||
public Deed(long objectID, Planet planet, String template, Point3D position, Quaternion orientation){
|
||||
super(objectID, planet, template, position, orientation);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,121 @@
|
||||
/*******************************************************************************
|
||||
* Copyright (c) 2013 <Project SWG>
|
||||
*
|
||||
* This File is part of NGECore2.
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser 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 Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
* Using NGEngine to work with NGECore2 is making a combined work based on NGEngine.
|
||||
* Therefore all terms and conditions of the GNU Lesser General Public License cover the combination.
|
||||
******************************************************************************/
|
||||
package resources.objects.deed;
|
||||
import com.sleepycat.persist.model.Persistent;
|
||||
|
||||
import engine.resources.scene.Planet;
|
||||
import engine.resources.scene.Point3D;
|
||||
import engine.resources.scene.Quaternion;
|
||||
|
||||
/**
|
||||
* @author Charon
|
||||
*/
|
||||
@Persistent(version=0)
|
||||
public class Harvester_Deed extends Deed {
|
||||
|
||||
private String name;
|
||||
private String structureTemplate;
|
||||
private String constructorTemplate;
|
||||
private int outputHopperCapacity=0;
|
||||
private int BER=0;
|
||||
private int BMR=0;
|
||||
private int surplusMaintenance=0;
|
||||
private int surplusPower=0;
|
||||
private int lotRequirement;
|
||||
|
||||
|
||||
public Harvester_Deed(long objectID, Planet planet, String template, Point3D position, Quaternion orientation){
|
||||
super(objectID, planet, template, position, orientation);
|
||||
}
|
||||
|
||||
public int getOutputHopperCapacity() {
|
||||
return outputHopperCapacity;
|
||||
}
|
||||
public void setOutputHopperCapacity(int outputHopperCapacity) {
|
||||
this.outputHopperCapacity = outputHopperCapacity;
|
||||
}
|
||||
public int getBER() {
|
||||
return BER;
|
||||
}
|
||||
public void setBER(int bER) {
|
||||
this.BER = bER;
|
||||
}
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
public void setName(String name) {
|
||||
this.name = name;
|
||||
}
|
||||
public String getStructureTemplate() {
|
||||
return structureTemplate;
|
||||
}
|
||||
public void setStructureTemplate(String structureTemplate) {
|
||||
this.structureTemplate = structureTemplate;
|
||||
}
|
||||
public int getLotRequirement() {
|
||||
return lotRequirement;
|
||||
}
|
||||
public void setLotRequirement(int lotRequirement) {
|
||||
this.lotRequirement = lotRequirement;
|
||||
}
|
||||
public String getConstructorTemplate() {
|
||||
return constructorTemplate;
|
||||
}
|
||||
public void setConstructorTemplate(String constructorTemplate) {
|
||||
this.constructorTemplate = constructorTemplate;
|
||||
}
|
||||
public int getBMR() {
|
||||
return BMR;
|
||||
}
|
||||
public void setBMR(int BMR) {
|
||||
this.BMR = BMR;
|
||||
}
|
||||
public int getSurplusMaintenance() {
|
||||
return surplusMaintenance;
|
||||
}
|
||||
public void setSurplusMaintenance(int surplusMaintenance) {
|
||||
this.surplusMaintenance = surplusMaintenance;
|
||||
}
|
||||
|
||||
public int getSurplusPower() {
|
||||
return surplusPower;
|
||||
}
|
||||
|
||||
public void setSurplusPower(int surplusPower) {
|
||||
this.surplusPower = surplusPower;
|
||||
}
|
||||
|
||||
|
||||
public void setAttributes() {
|
||||
this.getAttributes().put("@obj_attr_n:volume", "1");
|
||||
this.getAttributes().put("@obj_attr_n:examine_maintenance_rate", ""+this.getBMR() + "/hour");
|
||||
if (this.getSurplusMaintenance()>0)
|
||||
this.getAttributes().put("@obj_attr_n:examine_maintenance", ""+this.getSurplusMaintenance());
|
||||
|
||||
//this.getAttributes().put("@obj_attr_n:energy_maintenance", "0");
|
||||
if (this.getSurplusPower()>0)
|
||||
this.getAttributes().put("@obj_attr_n:examine_power", ""+this.getSurplusPower());
|
||||
|
||||
this.getAttributes().put("@obj_attr_n:examine_hoppersize", ""+this.getOutputHopperCapacity());
|
||||
this.getAttributes().put("@obj_attr_n:examine_extractionrate", ""+this.getBER());
|
||||
}
|
||||
}
|
||||
@@ -41,6 +41,11 @@ public class GroupObject extends UniverseObject {
|
||||
private GroupMessageBuilder messageBuilder;
|
||||
private int chatRoomId;
|
||||
|
||||
public static int FREE_FOR_ALL = 0;
|
||||
public static int MASTER_LOOTER = 1;
|
||||
public static int LOTTERY = 2;
|
||||
|
||||
|
||||
public GroupObject(long objectId) {
|
||||
super(objectId, null, new Point3D(0, 0, 0), new Quaternion(1, 0, 0, 0), "object/group/shared_group_object.iff");
|
||||
messageBuilder = new GroupMessageBuilder(this);
|
||||
|
||||
@@ -21,6 +21,807 @@
|
||||
******************************************************************************/
|
||||
package resources.objects.harvester;
|
||||
|
||||
public class HarvesterMessageBuilder {
|
||||
import java.nio.ByteOrder;
|
||||
import java.util.Vector;
|
||||
|
||||
import org.apache.mina.core.buffer.IoBuffer;
|
||||
|
||||
import engine.resources.objects.SWGObject;
|
||||
|
||||
import resources.objects.ObjectMessageBuilder;
|
||||
import resources.objects.building.BuildingObject;
|
||||
import resources.objects.creature.CreatureObject;
|
||||
import resources.objects.resource.GalacticResource;
|
||||
import resources.objects.resource.ResourceContainerObject;
|
||||
|
||||
/**
|
||||
* @author Charon
|
||||
*/
|
||||
public class HarvesterMessageBuilder extends ObjectMessageBuilder{
|
||||
|
||||
public HarvesterMessageBuilder(HarvesterObject harvesterObject) {
|
||||
setObject(harvesterObject);
|
||||
}
|
||||
|
||||
public IoBuffer buildBaseline3() {
|
||||
|
||||
HarvesterObject building = (HarvesterObject) object;
|
||||
IoBuffer buffer = bufferPool.allocate(100, false).order(ByteOrder.LITTLE_ENDIAN);
|
||||
buffer.setAutoExpand(true);
|
||||
|
||||
buffer.putShort((short) 0x0D);
|
||||
buffer.putFloat(building.getComplexity());
|
||||
buffer.put(getAsciiString(building.getStfFilename()));
|
||||
buffer.putInt(0);
|
||||
buffer.put(getAsciiString(building.getStfName()));
|
||||
buffer.putInt(0);
|
||||
buffer.putInt(0xFF);
|
||||
//buffer.putInt(0x64);
|
||||
buffer.putInt(0);
|
||||
buffer.putInt(0);
|
||||
buffer.putShort((short) 0);
|
||||
|
||||
buffer.putInt(0);
|
||||
buffer.putInt(0);
|
||||
// buffer.putInt(16777216);
|
||||
buffer.putInt(0x100);
|
||||
buffer.putInt(0);
|
||||
buffer.putInt(64);
|
||||
buffer.putInt(0x201C);
|
||||
buffer.put((byte) 1);
|
||||
|
||||
int size = buffer.position();
|
||||
buffer = bufferPool.allocate(size, false).put(buffer.array(), 0, size);
|
||||
|
||||
buffer.flip();
|
||||
buffer = createBaseline("BUIO", (byte) 3, buffer, size);
|
||||
|
||||
return buffer;
|
||||
|
||||
}
|
||||
|
||||
public IoBuffer buildHINO3Delta(HarvesterObject harvester,byte state) {
|
||||
IoBuffer buffer = IoBuffer.allocate(10).order(ByteOrder.LITTLE_ENDIAN);
|
||||
buffer.setAutoExpand(true);
|
||||
buffer.putShort((short)5);
|
||||
buffer.putInt(0x12862153);
|
||||
buffer.putLong(harvester.getObjectID());
|
||||
buffer.putInt(0x48494E4F);
|
||||
buffer.put((byte)3);
|
||||
buffer.putInt(0xB);
|
||||
buffer.putShort((short)2);
|
||||
buffer.putShort((short)8);
|
||||
buffer.put((byte)1);
|
||||
buffer.putShort((short)1);
|
||||
buffer.put((byte)0);
|
||||
buffer.putShort((short)0xD);
|
||||
buffer.put(state);
|
||||
int size = buffer.position();
|
||||
buffer.flip();
|
||||
tools.CharonPacketUtils.printAnalysis(IoBuffer.allocate(size).put(buffer.array(), 0, size).flip());
|
||||
return IoBuffer.allocate(size).put(buffer.array(), 0, size).flip();
|
||||
}
|
||||
// 0000: 05 00 53 21 86 12 33 01 0E BE 41 00 00 00 4F 4E ..S!..3...A...ON
|
||||
// 0010: 49 48 03 0B 00 00 00 02 00 08 00 01 01 00 00 0D IH..............
|
||||
// 0020: 00 01
|
||||
|
||||
|
||||
public IoBuffer buildHINO3Delta2(HarvesterObject harvester,byte state) {
|
||||
IoBuffer buffer = IoBuffer.allocate(10).order(ByteOrder.LITTLE_ENDIAN);
|
||||
buffer.setAutoExpand(true);
|
||||
buffer.putShort((short)5);
|
||||
buffer.putInt(0x12862153);
|
||||
buffer.putLong(harvester.getObjectID());
|
||||
buffer.putInt(0x48494E4F);
|
||||
buffer.put((byte)3);
|
||||
buffer.putInt(0xB);
|
||||
buffer.putShort((short)2);
|
||||
buffer.putShort((short)8);
|
||||
buffer.put((byte)0);
|
||||
buffer.putShort((short)1);
|
||||
buffer.put((byte)0);
|
||||
buffer.putShort((short)0xD);
|
||||
buffer.put(state);
|
||||
int size = buffer.position();
|
||||
buffer.flip();
|
||||
tools.CharonPacketUtils.printAnalysis(IoBuffer.allocate(size).put(buffer.array(), 0, size).flip());
|
||||
return IoBuffer.allocate(size).put(buffer.array(), 0, size).flip();
|
||||
}
|
||||
|
||||
|
||||
public IoBuffer buildBaseline6() {
|
||||
|
||||
HarvesterObject building = (HarvesterObject) object;
|
||||
IoBuffer buffer = bufferPool.allocate(100, false).order(ByteOrder.LITTLE_ENDIAN);
|
||||
buffer.setAutoExpand(true);
|
||||
|
||||
buffer.putShort((short) 8);
|
||||
buffer.putInt(0x43);
|
||||
|
||||
buffer.put(getAsciiString(building.getDetailFilename()));
|
||||
buffer.putInt(0);
|
||||
buffer.put(getAsciiString(building.getDetailName()));
|
||||
buffer.putInt(0);
|
||||
buffer.put((byte) 0);
|
||||
buffer.putInt(0);
|
||||
buffer.putInt(0);
|
||||
buffer.putInt(0);
|
||||
buffer.putInt(0);
|
||||
buffer.putInt(0);
|
||||
buffer.putInt(0);
|
||||
buffer.putInt(0);
|
||||
buffer.putInt(0);
|
||||
|
||||
int size = buffer.position();
|
||||
buffer = bufferPool.allocate(size, false).put(buffer.array(), 0, size);
|
||||
|
||||
buffer.flip();
|
||||
buffer = createBaseline("BUIO", (byte) 6, buffer, size);
|
||||
|
||||
return buffer;
|
||||
|
||||
}
|
||||
|
||||
|
||||
public IoBuffer buildHINO7Delta(HarvesterObject harvester,byte state) {
|
||||
|
||||
Vector<ResourceContainerObject> outputHopperContent = harvester.getOutputHopperContent();
|
||||
int hopperContentSize = outputHopperContent.size();
|
||||
int iHopperList = 1;
|
||||
if (hopperContentSize==0) {
|
||||
iHopperList = 0;
|
||||
}
|
||||
//int sizeP = 30 + 15*hopperContentSize;
|
||||
int sizeP = 30-2-4-4;
|
||||
//System.out.println("sizeP " + sizeP);
|
||||
IoBuffer buffer = IoBuffer.allocate(10).order(ByteOrder.LITTLE_ENDIAN);
|
||||
buffer.setAutoExpand(true);
|
||||
buffer.putShort((short)5);
|
||||
buffer.putInt(0x12862153);
|
||||
buffer.putLong(harvester.getObjectID());
|
||||
buffer.putInt(0x48494E4F);
|
||||
buffer.put((byte)7);
|
||||
buffer.putInt(sizeP);
|
||||
// dOut.writeInt(0x2D);
|
||||
buffer.putShort((short)5);
|
||||
buffer.putShort((short)6);
|
||||
buffer.put(state);
|
||||
buffer.putShort((short)9);
|
||||
buffer.putFloat(harvester.getActualExtractionRate());
|
||||
buffer.putShort((short)0x0C);
|
||||
buffer.put(harvester.getUpdateCount());
|
||||
// buffer.putShort((short)0x0D);
|
||||
// buffer.putInt(iHopperList);
|
||||
// buffer.putInt(harvester.getResourceUpdateCount());
|
||||
int sumOfHopper = 0;
|
||||
int i = 0;
|
||||
sumOfHopper = 0;
|
||||
Vector<ResourceContainerObject> outputHopper = harvester.getOutputHopperContent();
|
||||
for (ResourceContainerObject cont : outputHopper){
|
||||
sumOfHopper += cont.getStackCount();
|
||||
i++;
|
||||
}
|
||||
|
||||
buffer.putShort((short)0x0A);
|
||||
buffer.putInt(sumOfHopper);
|
||||
int size = buffer.position();
|
||||
buffer.flip();
|
||||
tools.CharonPacketUtils.printAnalysis(IoBuffer.allocate(size).put(buffer.array(), 0, size).flip());
|
||||
return IoBuffer.allocate(size).put(buffer.array(), 0, size).flip();
|
||||
}
|
||||
|
||||
public IoBuffer buildHINO7Delta2(HarvesterObject harvester,byte state) {
|
||||
|
||||
Vector<ResourceContainerObject> outputHopperContent = harvester.getOutputHopperContent();
|
||||
int hopperContentSize = outputHopperContent.size();
|
||||
int iHopperList = 1;
|
||||
if (hopperContentSize==0) {
|
||||
iHopperList = 0;
|
||||
}
|
||||
int sizeP = 30 + 15*hopperContentSize;
|
||||
//System.out.println("sizeP " + sizeP);
|
||||
IoBuffer buffer = IoBuffer.allocate(10).order(ByteOrder.LITTLE_ENDIAN);
|
||||
buffer.setAutoExpand(true);
|
||||
buffer.putShort((short)5);
|
||||
buffer.putInt(0x12862153);
|
||||
buffer.putLong(harvester.getObjectID());
|
||||
buffer.putInt(0x48494E4F);
|
||||
buffer.put((byte)7);
|
||||
buffer.putInt(sizeP);
|
||||
// dOut.writeInt(0x2D);
|
||||
buffer.putShort((short)5);
|
||||
buffer.putShort((short)6);
|
||||
buffer.put(state);
|
||||
buffer.putShort((short)9);
|
||||
buffer.putFloat(harvester.getActualExtractionRate());
|
||||
buffer.putShort((short)0x0C);
|
||||
buffer.put(harvester.getUpdateCount());
|
||||
buffer.putShort((short)0x0D);
|
||||
buffer.putInt(iHopperList);
|
||||
buffer.putInt(harvester.getResourceUpdateCount());
|
||||
int sumOfHopper = 0;
|
||||
|
||||
byte i = 0;
|
||||
for (ResourceContainerObject container : outputHopperContent){
|
||||
buffer.putShort((short)harvester.getResourceUpdateCount());
|
||||
buffer.put(i);
|
||||
buffer.putLong(container.getReferenceID());
|
||||
buffer.putInt(container.getStackCount());
|
||||
sumOfHopper += container.getStackCount();
|
||||
i++;
|
||||
}
|
||||
|
||||
buffer.putShort((short)0x0A);
|
||||
buffer.putInt(sumOfHopper);
|
||||
int size = buffer.position();
|
||||
buffer.flip();
|
||||
tools.CharonPacketUtils.printAnalysis(IoBuffer.allocate(size).put(buffer.array(), 0, size).flip());
|
||||
return IoBuffer.allocate(size).put(buffer.array(), 0, size).flip();
|
||||
}
|
||||
|
||||
// 2 + 2 + 1 + 2 + 4 + 2 + 1 + 2 + 4 + 4 + (hoppersize* 2+1+8+4=15) + 2 + 4
|
||||
|
||||
// 0000: 05 00 53 21 86 12 33 01 0E BE 41 00 00 00 4F 4E ..S!..3...A...ON
|
||||
// 0010: 49 48 07 2D 00 00 00 05 00 06 00 01 09 00 3F AE IH.-..........?.
|
||||
// 0020: 2D 42 0C 00 02 0D 00 01 00 00 00 01 00 00 00 02 -B..............
|
||||
// 0030: 00 00 5E C8 62 AB 41 00 00 00 CC F1 0A 40 0A 00 ..^.b.A......@..
|
||||
// 0040: CC F1 0A 40 ...@
|
||||
|
||||
public IoBuffer buildHINO7EmptyHopperDelta(HarvesterObject harvester) {
|
||||
|
||||
IoBuffer buffer = IoBuffer.allocate(10).order(ByteOrder.LITTLE_ENDIAN);
|
||||
buffer.setAutoExpand(true);
|
||||
buffer.putShort((short)5);
|
||||
buffer.putInt(0x12862153);
|
||||
buffer.putLong(harvester.getObjectID());
|
||||
buffer.putInt(0x48494E4F);
|
||||
buffer.put((byte)7);
|
||||
buffer.putInt(21);
|
||||
buffer.putShort((short)3);
|
||||
buffer.putShort((short)0x0C);
|
||||
buffer.put((byte)harvester.getResourceUpdateCount());
|
||||
buffer.putShort((short)0x0D);
|
||||
buffer.putInt(0);
|
||||
buffer.putInt(harvester.getResourceUpdateCount());
|
||||
buffer.putShort((short)0x0A);
|
||||
buffer.putFloat(harvester.getOutputHopperContent().size());
|
||||
|
||||
int size = buffer.position();
|
||||
buffer.flip();
|
||||
tools.CharonPacketUtils.printAnalysis(IoBuffer.allocate(size).put(buffer.array(), 0, size).flip());
|
||||
return IoBuffer.allocate(size).put(buffer.array(), 0, size).flip();
|
||||
}
|
||||
|
||||
|
||||
public IoBuffer buildHINO7ExperimentalDelta(HarvesterObject harvester) {
|
||||
|
||||
IoBuffer buffer = IoBuffer.allocate(10).order(ByteOrder.LITTLE_ENDIAN);
|
||||
buffer.setAutoExpand(true);
|
||||
buffer.putShort((short)5);
|
||||
buffer.putInt(0x12862153);
|
||||
buffer.putLong(harvester.getObjectID());
|
||||
buffer.putInt(0x48494E4F);
|
||||
buffer.put((byte)7);
|
||||
buffer.putInt(0x18);
|
||||
buffer.putShort((short)3);
|
||||
buffer.putShort((short)0x0C);
|
||||
buffer.put((byte)harvester.getResourceUpdateCount());
|
||||
buffer.putShort((short)0x0D);
|
||||
buffer.putInt(1);
|
||||
buffer.putInt(0x1E);
|
||||
buffer.put((byte)0);
|
||||
buffer.putShort((short)0);
|
||||
buffer.putInt(harvester.getResourceUpdateCount());
|
||||
buffer.putShort((short)0x0A);
|
||||
buffer.putFloat(0); // since it's 0 outputhoppercontent
|
||||
|
||||
int size = buffer.position();
|
||||
buffer.flip();
|
||||
tools.CharonPacketUtils.printAnalysis(IoBuffer.allocate(size).put(buffer.array(), 0, size).flip());
|
||||
return IoBuffer.allocate(size).put(buffer.array(), 0, size).flip();
|
||||
}
|
||||
|
||||
// 0000: 05 00 53 21 86 12 53 D0 AC 41 3F 00 00 00 4F 4E ..S!..S..A?...ON
|
||||
// 0010: 49 48 07 18 00 00 00 03 00 0C 00 25 0D 00 01 00 IH.........%....
|
||||
// 0020: 00 00 1E 00 00 00 00 00 00 0A 00 00 00 00 00 ...............
|
||||
|
||||
|
||||
public IoBuffer buildHINO7ExperimentalDelta2(HarvesterObject harvester) {
|
||||
|
||||
int iHopperList = 0;
|
||||
if (harvester.getOutputHopperContent().size() >= 1) {
|
||||
iHopperList = 1;
|
||||
}
|
||||
|
||||
IoBuffer buffer = IoBuffer.allocate(10).order(ByteOrder.LITTLE_ENDIAN);
|
||||
buffer.setAutoExpand(true);
|
||||
buffer.putShort((short)5);
|
||||
buffer.putInt(0x12862153);
|
||||
buffer.putLong(harvester.getObjectID());
|
||||
buffer.putInt(0x48494E4F);
|
||||
buffer.put((byte)7);
|
||||
|
||||
buffer.putInt(36);
|
||||
buffer.putShort((short)3);
|
||||
buffer.putShort((short)0x0C);
|
||||
buffer.put(harvester.getUpdateCount());
|
||||
buffer.putShort((short)0x0D);
|
||||
buffer.putInt(iHopperList);
|
||||
buffer.putInt(harvester.getResourceUpdateCount());
|
||||
int i = 0;
|
||||
int totalStackCount = 0;
|
||||
Vector<ResourceContainerObject> outputHopper = harvester.getOutputHopperContent();
|
||||
for (ResourceContainerObject cont : outputHopper){
|
||||
totalStackCount += cont.getStackCount();
|
||||
if (cont.getReferenceID() == harvester.getSelectedHarvestResource().getId()) {
|
||||
buffer.put((byte)2);
|
||||
buffer.putShort((short) i);
|
||||
buffer.putLong(cont.getReferenceID());
|
||||
buffer.putFloat((float)cont.getStackCount());
|
||||
//System.out.println("TOTAL STACKCOUNT " + (float)cont.getStackCount());
|
||||
}
|
||||
i++;
|
||||
}
|
||||
|
||||
buffer.putShort((short)0x0A);
|
||||
buffer.putFloat((float)totalStackCount);
|
||||
int size = buffer.position();
|
||||
buffer.flip();
|
||||
tools.CharonPacketUtils.printAnalysis(IoBuffer.allocate(size).put(buffer.array(), 0, size).flip());
|
||||
return IoBuffer.allocate(size).put(buffer.array(), 0, size).flip();
|
||||
}
|
||||
|
||||
public IoBuffer buildHINO7ActivateDelta(HarvesterObject harvester) {
|
||||
|
||||
int iHopperList = 0;
|
||||
if (harvester.getOutputHopperContent().size() >= 1) {
|
||||
iHopperList = 1;
|
||||
}
|
||||
int factor = 0;
|
||||
Vector<ResourceContainerObject> outputHopper = harvester.getOutputHopperContent();
|
||||
for (ResourceContainerObject cont : outputHopper){
|
||||
if (cont.getReferenceID() == harvester.getSelectedHarvestResource().getId()) {
|
||||
factor = 1;
|
||||
}
|
||||
}
|
||||
|
||||
byte iHopperUpdateCounter = harvester.getResourceUpdateCount();
|
||||
|
||||
IoBuffer buffer = IoBuffer.allocate(10).order(ByteOrder.LITTLE_ENDIAN);
|
||||
buffer.setAutoExpand(true);
|
||||
buffer.putShort((short)5);
|
||||
buffer.putInt(0x12862153);
|
||||
buffer.putLong(harvester.getObjectID());
|
||||
buffer.putInt(0x48494E4F);
|
||||
buffer.put((byte)7);
|
||||
buffer.putInt(5+19+(15*factor));
|
||||
buffer.putShort((short)5);
|
||||
buffer.putShort((short)6);
|
||||
buffer.put((byte)1);
|
||||
// 2 + 4 + 4 + 2 + 4 + (15*h) = 16 + 2 + 1 = 19
|
||||
buffer.putShort((short)0x0C);
|
||||
buffer.put(harvester.getUpdateCount());
|
||||
buffer.putShort((short)0x0D);
|
||||
buffer.putInt(iHopperList);
|
||||
buffer.putInt(iHopperUpdateCounter);
|
||||
int totalStackCount = 0;
|
||||
|
||||
int i = 0;
|
||||
|
||||
for (ResourceContainerObject cont : outputHopper){
|
||||
totalStackCount += cont.getStackCount();
|
||||
if (cont.getReferenceID() == harvester.getSelectedHarvestResource().getId()) {
|
||||
buffer.put((byte)2);
|
||||
buffer.putShort((short) i);
|
||||
buffer.putLong(cont.getReferenceID());
|
||||
buffer.putFloat((float)cont.getStackCount());
|
||||
}
|
||||
i++;
|
||||
}
|
||||
|
||||
buffer.putShort((short)0x0A);
|
||||
buffer.putFloat((float)totalStackCount);
|
||||
|
||||
int size = buffer.position();
|
||||
buffer.flip();
|
||||
tools.CharonPacketUtils.printAnalysis(IoBuffer.allocate(size).put(buffer.array(), 0, size).flip());
|
||||
return IoBuffer.allocate(size).put(buffer.array(), 0, size).flip();
|
||||
}
|
||||
|
||||
|
||||
public IoBuffer buildHINO7ActivateDelta2(HarvesterObject harvester) {
|
||||
|
||||
int iHopperList = 0;
|
||||
if (harvester.getOutputHopperContent().size() >= 1) {
|
||||
iHopperList = 1;
|
||||
}
|
||||
|
||||
IoBuffer buffer = IoBuffer.allocate(10).order(ByteOrder.LITTLE_ENDIAN);
|
||||
buffer.setAutoExpand(true);
|
||||
buffer.putShort((short)5);
|
||||
buffer.putInt(0x12862153);
|
||||
buffer.putLong(harvester.getObjectID());
|
||||
buffer.putInt(0x48494E4F);
|
||||
buffer.put((byte)7);
|
||||
|
||||
buffer.putInt(11);
|
||||
buffer.putShort((short)2);
|
||||
buffer.putShort((short)6);
|
||||
buffer.put((byte)1);
|
||||
buffer.putShort((short)9);
|
||||
buffer.putFloat(harvester.getActualExtractionRate());
|
||||
|
||||
int size = buffer.position();
|
||||
buffer.flip();
|
||||
tools.CharonPacketUtils.printAnalysis(IoBuffer.allocate(size).put(buffer.array(), 0, size).flip());
|
||||
return IoBuffer.allocate(size).put(buffer.array(), 0, size).flip();
|
||||
}
|
||||
//
|
||||
// 02 00 06 00 01 09 00 43 94 IH............C.
|
||||
// 0020: 59 42 YB
|
||||
|
||||
public IoBuffer buildHINO7ActivateDelta2old(HarvesterObject harvester) {
|
||||
|
||||
int iHopperList = 0;
|
||||
if (harvester.getOutputHopperContent().size() >= 1) {
|
||||
iHopperList = 1;
|
||||
}
|
||||
|
||||
IoBuffer buffer = IoBuffer.allocate(10).order(ByteOrder.LITTLE_ENDIAN);
|
||||
buffer.setAutoExpand(true);
|
||||
buffer.putShort((short)5);
|
||||
buffer.putInt(0x12862153);
|
||||
buffer.putLong(harvester.getObjectID());
|
||||
buffer.putInt(0x48494E4F);
|
||||
buffer.put((byte)7);
|
||||
|
||||
buffer.putInt(5);
|
||||
buffer.putShort((short)5);
|
||||
buffer.putShort((short)6);
|
||||
buffer.put((byte)1);
|
||||
|
||||
int size = buffer.position();
|
||||
buffer.flip();
|
||||
tools.CharonPacketUtils.printAnalysis(IoBuffer.allocate(size).put(buffer.array(), 0, size).flip());
|
||||
return IoBuffer.allocate(size).put(buffer.array(), 0, size).flip();
|
||||
}
|
||||
|
||||
public IoBuffer buildHINO7DeactivateDelta(HarvesterObject harvester) {
|
||||
|
||||
IoBuffer buffer = IoBuffer.allocate(10).order(ByteOrder.LITTLE_ENDIAN);
|
||||
buffer.setAutoExpand(true);
|
||||
buffer.putShort((short)5);
|
||||
buffer.putInt(0x12862153);
|
||||
buffer.putLong(harvester.getObjectID());
|
||||
buffer.putInt(0x48494E4F);
|
||||
buffer.put((byte)7);
|
||||
|
||||
buffer.putInt(14);
|
||||
buffer.putShort((short)5);
|
||||
buffer.putShort((short)6);
|
||||
buffer.put((byte)0);
|
||||
buffer.putShort((short)9);
|
||||
buffer.putFloat(0);
|
||||
buffer.putShort((short)0xC);
|
||||
buffer.put((byte)5);
|
||||
|
||||
// new
|
||||
// buffer.putShort((short)6);
|
||||
// buffer.put((byte)0);
|
||||
// buffer.putShort((short)9);
|
||||
// buffer.put((byte)0);
|
||||
// buffer.putShort((short)0xC);
|
||||
// buffer.put((byte)5);
|
||||
|
||||
//
|
||||
|
||||
int size = buffer.position();
|
||||
buffer.flip();
|
||||
tools.CharonPacketUtils.printAnalysis(IoBuffer.allocate(size).put(buffer.array(), 0, size).flip());
|
||||
return IoBuffer.allocate(size).put(buffer.array(), 0, size).flip();
|
||||
}
|
||||
|
||||
|
||||
public IoBuffer buildHINO7DeactivateDeltaold(HarvesterObject harvester) {
|
||||
|
||||
IoBuffer buffer = IoBuffer.allocate(10).order(ByteOrder.LITTLE_ENDIAN);
|
||||
buffer.setAutoExpand(true);
|
||||
buffer.putShort((short)5);
|
||||
buffer.putInt(0x12862153);
|
||||
buffer.putLong(harvester.getObjectID());
|
||||
buffer.putInt(0x48494E4F);
|
||||
buffer.put((byte)7);
|
||||
|
||||
buffer.putInt(5);
|
||||
buffer.putShort((short)5);
|
||||
buffer.putShort((short)6);
|
||||
buffer.put((byte)0);
|
||||
|
||||
// new
|
||||
buffer.putShort((short)6);
|
||||
buffer.put((byte)0);
|
||||
buffer.putShort((short)9);
|
||||
buffer.put((byte)0);
|
||||
buffer.putShort((short)0xC);
|
||||
buffer.put((byte)5);
|
||||
|
||||
//
|
||||
|
||||
int size = buffer.position();
|
||||
buffer.flip();
|
||||
tools.CharonPacketUtils.printAnalysis(IoBuffer.allocate(size).put(buffer.array(), 0, size).flip());
|
||||
return IoBuffer.allocate(size).put(buffer.array(), 0, size).flip();
|
||||
}
|
||||
|
||||
public IoBuffer buildHINO7ClearDelta(HarvesterObject harvester) {
|
||||
|
||||
int iHopperList = 0;
|
||||
if (harvester.getOutputHopperContent().size() >= 1) {
|
||||
iHopperList = 1;
|
||||
}
|
||||
|
||||
IoBuffer buffer = IoBuffer.allocate(10).order(ByteOrder.LITTLE_ENDIAN);
|
||||
buffer.setAutoExpand(true);
|
||||
buffer.putShort((short)5);
|
||||
buffer.putInt(0x12862153);
|
||||
buffer.putLong(harvester.getObjectID());
|
||||
buffer.putInt(0x48494E4F);
|
||||
buffer.put((byte)7);
|
||||
|
||||
buffer.putInt(36);
|
||||
buffer.putShort((short)3);
|
||||
buffer.putShort((short)0x0C);
|
||||
buffer.put(harvester.getUpdateCount());
|
||||
buffer.putShort((short)0x0D);
|
||||
buffer.putInt(iHopperList);
|
||||
buffer.putInt(harvester.getResourceUpdateCount());
|
||||
buffer.put((byte)4);
|
||||
buffer.putShort((short)0x0A);
|
||||
buffer.putFloat((float)0.0F);
|
||||
int size = buffer.position();
|
||||
buffer.flip();
|
||||
tools.CharonPacketUtils.printAnalysis(IoBuffer.allocate(size).put(buffer.array(), 0, size).flip());
|
||||
return IoBuffer.allocate(size).put(buffer.array(), 0, size).flip();
|
||||
}
|
||||
|
||||
|
||||
public IoBuffer buildDiscardResourceResponse(HarvesterObject harvester, byte actionMode, byte actionCounter,CreatureObject owner) {
|
||||
|
||||
IoBuffer buffer = IoBuffer.allocate(10).order(ByteOrder.LITTLE_ENDIAN);
|
||||
buffer.setAutoExpand(true);
|
||||
buffer.putShort((short)5);
|
||||
buffer.putInt(0x80CE5E46);
|
||||
buffer.putInt(0x0B);
|
||||
buffer.putInt(0xEE);
|
||||
buffer.putLong(owner.getObjectID());
|
||||
buffer.putInt(0);
|
||||
buffer.putInt(0xED);
|
||||
buffer.put((byte)1);
|
||||
buffer.put(actionCounter);
|
||||
int size = buffer.position();
|
||||
buffer.flip();
|
||||
tools.CharonPacketUtils.printAnalysis(IoBuffer.allocate(size).put(buffer.array(), 0, size).flip());
|
||||
return IoBuffer.allocate(size).put(buffer.array(), 0, size).flip();
|
||||
}
|
||||
|
||||
//0000: 05 00 46 5E CE 80 0B 00 00 00 EE 00 00 00 62 5F ..F^..........b_
|
||||
//0010: 02 15 00 00 01 00 00 00 00 00 ED 00 00 00 01 01 ................
|
||||
// ^^ weird but works, should be zero allowed too
|
||||
|
||||
public IoBuffer buildBaseline8() {
|
||||
IoBuffer buffer = bufferPool.allocate(2, false).order(ByteOrder.LITTLE_ENDIAN);
|
||||
buffer.putShort((short) 0);
|
||||
int size = buffer.position();
|
||||
buffer = IoBuffer.allocate(size).put(buffer.array(), 0, size);
|
||||
buffer.flip();
|
||||
buffer = createBaseline("TANO", (byte) 8, buffer, size);
|
||||
|
||||
return buffer;
|
||||
}
|
||||
|
||||
public IoBuffer buildBaseline9() {
|
||||
IoBuffer buffer = bufferPool.allocate(2, false).order(ByteOrder.LITTLE_ENDIAN);
|
||||
buffer.putShort((short) 0);
|
||||
int size = buffer.position();
|
||||
buffer = IoBuffer.allocate(size).put(buffer.array(), 0, size);
|
||||
buffer.flip();
|
||||
buffer = createBaseline("TANO", (byte) 9, buffer, size);
|
||||
|
||||
return buffer;
|
||||
}
|
||||
|
||||
|
||||
public IoBuffer buildHINOBaseline7(HarvesterObject harvester,Vector<GalacticResource> vSRD) {
|
||||
IoBuffer buffer = IoBuffer.allocate(10).order(ByteOrder.LITTLE_ENDIAN);
|
||||
buffer.setAutoExpand(true);
|
||||
int sizeP = 74;
|
||||
|
||||
buffer.putShort((short)5);
|
||||
buffer.putInt(0x68A75F0C);
|
||||
buffer.putLong(harvester.getObjectID());
|
||||
buffer.putInt(0x4F4E4948);
|
||||
buffer.put((byte)7);
|
||||
|
||||
int iResourceCount = vSRD.size();
|
||||
Vector<ResourceContainerObject> outputHopperContent = harvester.getOutputHopperContent();
|
||||
int hopperContentSize = outputHopperContent.size();
|
||||
float outputHopperCount = 0;
|
||||
|
||||
//y = a + 4x + 16x + 12z = a + 20x + 12z
|
||||
sizeP += (iResourceCount * 4);
|
||||
sizeP += (iResourceCount * 16);
|
||||
|
||||
sizeP += (hopperContentSize * 12);
|
||||
|
||||
for (int i = 0; i < iResourceCount; i++) {
|
||||
sizeP += vSRD.get(i).getName().length();
|
||||
sizeP += vSRD.get(i).getFileName().length();
|
||||
}
|
||||
|
||||
buffer.putInt(sizeP);
|
||||
|
||||
for (ResourceContainerObject container : outputHopperContent){
|
||||
outputHopperCount += container.getStackCount();
|
||||
}
|
||||
|
||||
buffer.putShort((short)0x0F);
|
||||
buffer.put((byte)1);
|
||||
buffer.putInt(iResourceCount);
|
||||
buffer.putInt(iResourceCount);
|
||||
|
||||
for (int i = 0; i < iResourceCount; i++) {
|
||||
buffer.putLong(vSRD.get(i).getId());
|
||||
}
|
||||
buffer.putInt(iResourceCount);
|
||||
|
||||
buffer.putInt(iResourceCount);
|
||||
|
||||
for (int i = 0; i < iResourceCount; i++) {
|
||||
buffer.putLong(vSRD.get(i).getId());
|
||||
}
|
||||
|
||||
buffer.putInt(iResourceCount);
|
||||
|
||||
buffer.putInt(iResourceCount);
|
||||
|
||||
for (int i = 0; i < iResourceCount; i++) {
|
||||
buffer.put(getAsciiString(vSRD.get(i).getName()));
|
||||
}
|
||||
|
||||
buffer.putInt(iResourceCount);
|
||||
buffer.putInt(iResourceCount);
|
||||
for (int i = 0; i < iResourceCount; i++) {
|
||||
buffer.put(getAsciiString(vSRD.get(i).getFileName()));
|
||||
|
||||
}
|
||||
|
||||
if (harvester.getSelectedHarvestResource() != null) {
|
||||
buffer.putLong(harvester.getSelectedHarvestResource().getId());
|
||||
} else {
|
||||
buffer.putLong(0);
|
||||
}
|
||||
|
||||
buffer.put(harvester.isActivated() ? (byte)1 : (byte)0);
|
||||
|
||||
buffer.putInt(harvester.getSpecRate()); // SPEC RATE buffer.putInt(harvester.getBER());
|
||||
|
||||
buffer.putFloat(harvester.getBER());
|
||||
|
||||
buffer.putFloat(harvester.getActualExtractionRate());
|
||||
buffer.putFloat(outputHopperCount);
|
||||
buffer.putInt(harvester.getOutputHopperCapacity());
|
||||
buffer.put(harvester.getUpdateCount());
|
||||
buffer.putInt(hopperContentSize);
|
||||
buffer.putInt(0);
|
||||
for (ResourceContainerObject container : outputHopperContent){
|
||||
buffer.putLong(container.getReferenceID());
|
||||
buffer.putFloat(container.getStackCount());
|
||||
}
|
||||
buffer.put(harvester.getStructuralCondition());
|
||||
int size = buffer.position();
|
||||
buffer.flip();
|
||||
tools.CharonPacketUtils.printAnalysis(IoBuffer.allocate(size).put(buffer.array(), 0, size).flip());
|
||||
return IoBuffer.allocate(size).put(buffer.array(), 0, size).flip();
|
||||
}
|
||||
|
||||
public IoBuffer buildCustomNameDelta(HarvesterObject harvester, String customName) {
|
||||
IoBuffer buffer = IoBuffer.allocate(10).order(ByteOrder.LITTLE_ENDIAN);
|
||||
buffer.setAutoExpand(true);
|
||||
int sizeP = 8;
|
||||
sizeP += 2*customName.length();
|
||||
buffer.putShort((short)5);
|
||||
buffer.putInt(0x12862153);
|
||||
buffer.putLong(harvester.getObjectID());
|
||||
buffer.putInt(0x54414E4F);
|
||||
buffer.put((byte)3);
|
||||
buffer.putInt(sizeP);
|
||||
buffer.putShort((short)1);
|
||||
buffer.putShort((short)2);
|
||||
buffer.put(getUnicodeString(customName));
|
||||
int size = buffer.position();
|
||||
buffer.flip();
|
||||
tools.CharonPacketUtils.printAnalysis(IoBuffer.allocate(size).put(buffer.array(), 0, size).flip());
|
||||
return IoBuffer.allocate(size).put(buffer.array(), 0, size).flip();
|
||||
}
|
||||
|
||||
public IoBuffer buildPermissionListCreate(HarvesterObject harvester, Vector<String> permissionList, String listName) {
|
||||
IoBuffer buffer = IoBuffer.allocate(10).order(ByteOrder.LITTLE_ENDIAN);
|
||||
buffer.setAutoExpand(true);
|
||||
int listSize = permissionList.size();
|
||||
buffer.putShort((short)4);
|
||||
buffer.putInt(0x52F364B8);
|
||||
buffer.putInt(listSize);
|
||||
for (String name : permissionList){
|
||||
buffer.put(getUnicodeString(name));
|
||||
}
|
||||
//buffer.putInt(0x61);
|
||||
buffer.putInt(0);
|
||||
//buffer.putShort((short)0);
|
||||
buffer.put(getUnicodeString(listName));
|
||||
int size = buffer.position();
|
||||
buffer.flip();
|
||||
tools.CharonPacketUtils.printAnalysis(IoBuffer.allocate(size).put(buffer.array(), 0, size).flip());
|
||||
return IoBuffer.allocate(size).put(buffer.array(), 0, size).flip();
|
||||
}
|
||||
/*
|
||||
0000: 04 00 B8 64 F3 52 01 00 00 00 06 00 00 00 63 00 ...d.R........c.
|
||||
0010: 68 00 61 00 72 00 6F 00 6E 00 00 00 00 00 05 00 h.a.r.o.n.......
|
||||
0020: 00 00 41 00 44 00 4D 00 49 00 4E 00 ..A.D.M.I.N.
|
||||
*/
|
||||
|
||||
// Send this in response to the Radial Menu to manage harvesters,
|
||||
// it is necessary to send this *before* the 07 Baseline!
|
||||
//ResourceHarvesterActivatePageMessage (BD18C679)
|
||||
public IoBuffer buildResourceHarvesterActivatePageMessage(HarvesterObject harvester) {
|
||||
IoBuffer buffer = IoBuffer.allocate(10).order(ByteOrder.LITTLE_ENDIAN);
|
||||
buffer.setAutoExpand(true);
|
||||
buffer.putShort((short)2);
|
||||
buffer.putInt(0xBD18C679);
|
||||
buffer.putLong(harvester.getObjectID());
|
||||
int size = buffer.position();
|
||||
buffer.flip();
|
||||
tools.CharonPacketUtils.printAnalysis(IoBuffer.allocate(size).put(buffer.array(), 0, size).flip());
|
||||
return IoBuffer.allocate(size).put(buffer.array(), 0, size).flip();
|
||||
}
|
||||
|
||||
public IoBuffer buildHarvesterGetResourceData(HarvesterObject harvester,SWGObject owner,Vector<GalacticResource> planetResources) {
|
||||
IoBuffer buffer = IoBuffer.allocate(10).order(ByteOrder.LITTLE_ENDIAN);
|
||||
buffer.setAutoExpand(true);
|
||||
buffer.putShort((short)5);
|
||||
buffer.putInt(0x80CE5E46);
|
||||
buffer.putInt(0x0B);
|
||||
buffer.putInt(0x000000EA);
|
||||
buffer.putLong(owner.getObjectID());
|
||||
buffer.putInt(0);
|
||||
buffer.putLong(harvester.getObjectID());
|
||||
if (planetResources == null || planetResources.isEmpty()) {
|
||||
buffer.putInt(0);
|
||||
} else {
|
||||
buffer.putInt(planetResources.size());
|
||||
for (int i = 0; i < planetResources.size(); i++) {
|
||||
float localConcentration = planetResources.get(i).deliverConcentrationForSurvey(owner.getPlanetId(), owner.getPosition().x, owner.getPosition().z);
|
||||
buffer.putLong(planetResources.get(i).getId());
|
||||
buffer.put(getAsciiString(planetResources.get(i).getName()));
|
||||
buffer.put(getAsciiString(planetResources.get(i).getFileName()));
|
||||
buffer.put((byte)localConcentration);
|
||||
}
|
||||
}
|
||||
|
||||
int size = buffer.position();
|
||||
buffer.flip();
|
||||
tools.CharonPacketUtils.printAnalysis(IoBuffer.allocate(size).put(buffer.array(), 0, size).flip());
|
||||
return IoBuffer.allocate(size).put(buffer.array(), 0, size).flip();
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void sendListDelta(byte viewType, short updateType, IoBuffer buffer) {
|
||||
// TODO Auto-generated method stub
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void sendBaselines() {
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -21,11 +21,501 @@
|
||||
******************************************************************************/
|
||||
package resources.objects.harvester;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.Vector;
|
||||
|
||||
import main.NGECore;
|
||||
import protocol.swg.SceneCreateObjectByCrc;
|
||||
import protocol.swg.SceneDestroyObject;
|
||||
import protocol.swg.SceneEndBaselines;
|
||||
import protocol.swg.UpdatePVPStatusMessage;
|
||||
|
||||
import com.sleepycat.persist.model.Persistent;
|
||||
|
||||
import services.chat.WaypointAttachment;
|
||||
import engine.clients.Client;
|
||||
import engine.resources.common.CRC;
|
||||
import engine.resources.objects.SWGObject;
|
||||
import engine.resources.scene.Planet;
|
||||
import engine.resources.scene.Point3D;
|
||||
import engine.resources.scene.Quaternion;
|
||||
import resources.objects.creature.CreatureObject;
|
||||
import resources.objects.installation.InstallationMessageBuilder;
|
||||
import resources.objects.installation.InstallationObject;
|
||||
import resources.objects.player.PlayerObject;
|
||||
import resources.objects.resource.GalacticResource;
|
||||
import resources.objects.resource.ResourceContainerObject;
|
||||
import resources.objects.waypoint.WaypointObject;
|
||||
import services.chat.Mail;
|
||||
|
||||
|
||||
/**
|
||||
* @author Charon
|
||||
*/
|
||||
|
||||
@Persistent(version=0)
|
||||
public class HarvesterObject extends InstallationObject {
|
||||
|
||||
private HarvesterMessageBuilder messageBuilder;
|
||||
private InstallationMessageBuilder installationMessageBuilder;
|
||||
|
||||
public final static byte HARVESTER_TYPE_MINERAL = 0;
|
||||
public final static byte HARVESTER_TYPE_CHEMICAL = 1;
|
||||
public final static byte HARVESTER_TYPE_FLORA = 2;
|
||||
public final static byte HARVESTER_TYPE_GAS = 3;
|
||||
public final static byte HARVESTER_TYPE_WATER = 4;
|
||||
public final static byte HARVESTER_TYPE_SOLAR = 5;
|
||||
public final static byte HARVESTER_TYPE_WIND = 6;
|
||||
public final static byte HARVESTER_TYPE_FUSION = 7;
|
||||
public final static byte HARVESTER_TYPE_GEO = 8;
|
||||
|
||||
public String[] mineral_type_iff = new String[]{"object/installation/mining_ore/shared_mining_ore_harvester_style_1.iff",
|
||||
"object/installation/mining_ore/shared_mining_ore_harvester_style_2.iff",
|
||||
"object/installation/mining_ore/shared_mining_ore_harvester_heavy.iff",
|
||||
"object/installation/mining_ore/shared_mining_ore_harvester_elite.iff"};
|
||||
|
||||
public String[] chemical_type_iff = new String[]{"object/installation/mining_liquid/shared_mining_liquid_harvester_style_1.iff",
|
||||
"object/installation/mining_liquid/shared_mining_liquid_harvester_style_2.iff",
|
||||
"object/installation/mining_liquid/shared_mining_liquid_harvester_style_3.iff",
|
||||
"object/installation/mining_liquid/shared_mining_liquid_harvester_style_4.iff"};
|
||||
|
||||
public String[] flora_type_iff = new String[]{"object/installation/mining_organic/shared_mining_organic_flora_farm.iff",
|
||||
"object/installation/mining_organic/shared_mining_organic_flora_farm_medium.iff",
|
||||
"object/installation/mining_organic/shared_mining_organic_flora_farm_heavy.iff",
|
||||
"object/installation/mining_organic/shared_mining_organic_flora_farm_elite.iff"};
|
||||
|
||||
public String[] water_type_iff = new String[]{"object/installation/mining_liquid/shared_mining_liquid_moisture_harvester.iff",
|
||||
"object/installation/mining_liquid/shared_mining_liquid_moisture_harvester_medium.iff",
|
||||
"object/installation/mining_liquid/shared_mining_liquid_moisture_harvester_heavy.iff",
|
||||
"object/installation/mining_liquid/shared_mining_liquid_moisture_harvester_elite.iff"};
|
||||
|
||||
public String[] gas_type_iff = new String[]{"object/installation/mining_gas/shared_mining_gas_harvester_style_1.iff",
|
||||
"object/installation/mining_gas/shared_mining_gas_harvester_style_2.iff",
|
||||
"object/installation/mining_gas/shared_mining_gas_harvester_style_3.iff",
|
||||
"object/installation/mining_gas/shared_mining_gas_harvester_style_4.iff"};
|
||||
|
||||
public String[] wind_type_iff = new String[]{"object/installation/generators/shared_power_generator_wind_style_1.iff"};
|
||||
|
||||
public String[] solar_type_iff = new String[]{"object/installation/generators/shared_power_generator_solar_style_1.iff"};
|
||||
|
||||
public String[] fusion_type_iff = new String[]{"object/installation/generators/shared_power_generator_fusion_style_1.iff"};
|
||||
|
||||
public String[] geo_type_iff = new String[]{"object/installation/generators/shared_power_generator_geothermal_style_1.iff"};
|
||||
|
||||
//for nothing "object/installation/generators/shared_power_generator_photo_bio_style_1.iff"
|
||||
|
||||
|
||||
public byte harvester_type = 0;
|
||||
public byte harvester_size = 0;
|
||||
private Vector<ResourceContainerObject> outputHopperContent = new Vector<ResourceContainerObject>();
|
||||
private int outputHopperCapacity = 0;
|
||||
private int BER = 0;
|
||||
private float maintenanceAmount = 0;
|
||||
private float powerLevel = 0;
|
||||
private int powerCost = 0;
|
||||
private int maintenanceCost = 0;
|
||||
private byte structuralCondition = 100;
|
||||
private boolean activated = false;
|
||||
private boolean generator = false;
|
||||
private GalacticResource selectedHarvestResource;
|
||||
private float selectedResourceConcentration;
|
||||
private byte updateCount;
|
||||
private byte resourceUpdateCount;
|
||||
private Vector<String> adminList = new Vector<String>();
|
||||
private Vector<String> hopperList = new Vector<String>();
|
||||
private SWGObject owner;
|
||||
private float currentHarvestedCountFloat=0.0F;
|
||||
private String deedTemplate;
|
||||
|
||||
private int specRate;
|
||||
|
||||
|
||||
public HarvesterObject(long objectID, Planet planet, String template, Point3D position, Quaternion orientation){
|
||||
super(objectID, planet, template, position, orientation);
|
||||
this.setConditionDamage(100);
|
||||
messageBuilder = new HarvesterMessageBuilder(this);
|
||||
installationMessageBuilder = new InstallationMessageBuilder((InstallationObject)this);
|
||||
}
|
||||
|
||||
public int getBER() {
|
||||
return BER;
|
||||
}
|
||||
|
||||
|
||||
public void setBER(int baseExtractionRate) {
|
||||
this.BER = baseExtractionRate;
|
||||
}
|
||||
|
||||
|
||||
public float getActualExtractionRate() {
|
||||
//float resourceDraw = (getBER() * getSelectedResourceConcentration()) / 400; // /100
|
||||
float resourceDraw = 1.5F*(getBER() * getSelectedResourceConcentration()) / 100;
|
||||
// BER * concentration * publish 27 bonus * profession buffs = AER
|
||||
// 14* 0.83 * 1.5 * 1.05 = 18.3015 AER
|
||||
return resourceDraw;
|
||||
}
|
||||
|
||||
public int getSpecRate() {
|
||||
return specRate;
|
||||
}
|
||||
|
||||
public void setSpecRate(int specRate) {
|
||||
this.specRate = specRate;
|
||||
}
|
||||
|
||||
|
||||
public GalacticResource getSelectedHarvestResource() {
|
||||
return selectedHarvestResource;
|
||||
}
|
||||
|
||||
|
||||
public void setSelectedHarvestResource(GalacticResource selectedHarvestResource,CreatureObject owner) {
|
||||
this.selectedHarvestResource = selectedHarvestResource;
|
||||
setSelectedResourceConcentration(selectedHarvestResource.deliverConcentrationForSurvey(this.getPlanetId(), this.getPosition().x, this.getPosition().z));
|
||||
|
||||
owner.getClient().getSession().write(installationMessageBuilder.constructINSO7Var1((InstallationObject) this,selectedHarvestResource.getObjectId()));
|
||||
owner.getClient().getSession().write(installationMessageBuilder.constructINSO7Var2((InstallationObject) this,selectedHarvestResource.getObjectId()));
|
||||
}
|
||||
|
||||
|
||||
public float getSelectedResourceConcentration() {
|
||||
return selectedResourceConcentration;
|
||||
}
|
||||
|
||||
|
||||
private void setSelectedResourceConcentration(float selectedResourceConcentration) {
|
||||
this.selectedResourceConcentration = selectedResourceConcentration;
|
||||
}
|
||||
|
||||
|
||||
public void activateHarvester(CreatureObject owner){
|
||||
activated = true;
|
||||
this.setOwner(owner);
|
||||
owner.getClient().getSession().write(messageBuilder.buildHINO3Delta(this,(byte)1));
|
||||
owner.getClient().getSession().write(messageBuilder.buildHINO7ActivateDelta2(this));
|
||||
}
|
||||
|
||||
|
||||
public void deactivateHarvester(CreatureObject owner){
|
||||
activated = false;
|
||||
owner.getClient().getSession().write(messageBuilder.buildHINO3Delta2(this,(byte)0));
|
||||
owner.getClient().getSession().write(messageBuilder.buildHINO7DeactivateDelta(this));
|
||||
}
|
||||
|
||||
|
||||
public boolean isActivated(){
|
||||
return this.activated;
|
||||
}
|
||||
|
||||
|
||||
public byte getHarvester_type() {
|
||||
return harvester_type;
|
||||
}
|
||||
|
||||
|
||||
public void setHarvester_type(byte harvester_type) {
|
||||
this.harvester_type = harvester_type;
|
||||
}
|
||||
|
||||
|
||||
public Vector<ResourceContainerObject> getOutputHopperContent() {
|
||||
return outputHopperContent;
|
||||
}
|
||||
|
||||
|
||||
public void setOutputHopperContent(Vector<ResourceContainerObject> outputHopperContent) {
|
||||
this.outputHopperContent = outputHopperContent;
|
||||
}
|
||||
|
||||
|
||||
public byte getStructuralCondition() {
|
||||
return structuralCondition;
|
||||
}
|
||||
|
||||
|
||||
public void setStructuralCondition(byte structuralCondition) {
|
||||
this.structuralCondition = structuralCondition;
|
||||
}
|
||||
|
||||
|
||||
public int getOutputHopperCapacity() {
|
||||
return outputHopperCapacity;
|
||||
}
|
||||
|
||||
|
||||
public void setOutputHopperCapacity(int outputHopperCapacity) {
|
||||
this.outputHopperCapacity = outputHopperCapacity;
|
||||
}
|
||||
|
||||
|
||||
public byte getUpdateCount() {
|
||||
if (updateCount>254) updateCount = 0;
|
||||
return updateCount++;
|
||||
}
|
||||
|
||||
public byte getResourceUpdateCount() {
|
||||
if (resourceUpdateCount>254) resourceUpdateCount = 0;
|
||||
return resourceUpdateCount++;
|
||||
}
|
||||
|
||||
|
||||
public void setUpdateCount(byte updateCount) {
|
||||
this.updateCount = updateCount;
|
||||
}
|
||||
|
||||
|
||||
public Vector<String> getAdminList() {
|
||||
return adminList;
|
||||
}
|
||||
|
||||
|
||||
public void setAdminList(Vector<String> adminList) {
|
||||
this.adminList = adminList;
|
||||
}
|
||||
|
||||
|
||||
public Vector<String> getHopperList() {
|
||||
return hopperList;
|
||||
}
|
||||
|
||||
|
||||
public void setHopperList(Vector<String> hopperList) {
|
||||
this.hopperList = hopperList;
|
||||
}
|
||||
|
||||
|
||||
public float getPowerLevel() {
|
||||
return powerLevel;
|
||||
}
|
||||
|
||||
|
||||
public void setPowerLevel(float energyLevel) {
|
||||
this.powerLevel = energyLevel;
|
||||
}
|
||||
|
||||
|
||||
public float getMaintenanceAmount() {
|
||||
return maintenanceAmount;
|
||||
}
|
||||
|
||||
|
||||
public void setMaintenanceAmount(float maintenanceAmount) {
|
||||
this.maintenanceAmount = maintenanceAmount;
|
||||
}
|
||||
|
||||
public int getPowerCost() {
|
||||
return powerCost;
|
||||
}
|
||||
|
||||
|
||||
public void setPowerCost(int powerCost) {
|
||||
this.powerCost = powerCost;
|
||||
}
|
||||
|
||||
|
||||
public int getMaintenanceCost() {
|
||||
return maintenanceCost;
|
||||
}
|
||||
|
||||
|
||||
public void setMaintenanceCost(int maintenanceCost) {
|
||||
this.maintenanceCost = maintenanceCost;
|
||||
}
|
||||
|
||||
|
||||
public float getCurrentHarvestedCountFloat() {
|
||||
return currentHarvestedCountFloat;
|
||||
}
|
||||
|
||||
|
||||
public void setCurrentHarvestedCountFloat(float currentHarvestedCountFloat) {
|
||||
this.currentHarvestedCountFloat = currentHarvestedCountFloat;
|
||||
}
|
||||
|
||||
|
||||
public SWGObject getOwner() {
|
||||
return owner;
|
||||
}
|
||||
|
||||
|
||||
public void setOwner(SWGObject owner) {
|
||||
this.owner = owner;
|
||||
}
|
||||
|
||||
public void setDeedTemplate(String deedTemplate){
|
||||
this.deedTemplate = deedTemplate;
|
||||
}
|
||||
|
||||
public String getDeedTemplate(){
|
||||
return this.deedTemplate;
|
||||
}
|
||||
|
||||
|
||||
public boolean isGenerator() {
|
||||
return generator;
|
||||
}
|
||||
|
||||
public void setGenerator(boolean generator) {
|
||||
this.generator = generator;
|
||||
}
|
||||
|
||||
|
||||
public void setHarvesterName(String name,CreatureObject owner){
|
||||
owner.getClient().getSession().write(messageBuilder.buildCustomNameDelta(this,name));
|
||||
this.setCustomName(name);
|
||||
((CreatureObject)owner).sendSystemMessage("Structure renamed.", (byte) 0);
|
||||
}
|
||||
|
||||
public void setPermissionAdmin(String name,CreatureObject owner){
|
||||
Vector<String> permissionList = this.getAdminList();
|
||||
owner.getClient().getSession().write(messageBuilder.buildPermissionListCreate(this, permissionList, name));
|
||||
}
|
||||
|
||||
public void setPermissionHopper(String name,CreatureObject owner){
|
||||
Vector<String> permissionList = this.getAdminList();
|
||||
owner.getClient().getSession().write(messageBuilder.buildPermissionListCreate(this, permissionList, name));
|
||||
}
|
||||
|
||||
public void operateMachinery(CreatureObject owner){
|
||||
owner.getClient().getSession().write(messageBuilder.buildResourceHarvesterActivatePageMessage(this));
|
||||
// Assemble resources at that spot
|
||||
// For later, it might be needed to also pass the template to differentiate liquid resources
|
||||
Vector<GalacticResource> planetResourcesVector = NGECore.getInstance().resourceService.getSpawnedResourcesByPlanetAndHarvesterType(this.getPlanetId(),this.getHarvester_type());
|
||||
owner.getClient().getSession().write(messageBuilder.buildHarvesterGetResourceData(this, owner, planetResourcesVector));
|
||||
owner.getClient().getSession().write(messageBuilder.buildHINOBaseline7(this, planetResourcesVector));
|
||||
}
|
||||
|
||||
public void deActivate(){
|
||||
owner.getClient().getSession().write(messageBuilder.buildResourceHarvesterActivatePageMessage(this));
|
||||
}
|
||||
|
||||
public void placeHarvester(){
|
||||
owner.getClient().getSession().write(messageBuilder.buildResourceHarvesterActivatePageMessage(this));
|
||||
}
|
||||
|
||||
public static void createAndPlaceHarvester(SWGObject object){
|
||||
CreatureObject actor = (CreatureObject) object.getAttachment("Owner");
|
||||
|
||||
String structureTemplate = (String)object.getAttachment("Deed_StructureTemplate");
|
||||
HarvesterObject harvester = (HarvesterObject) NGECore.getInstance().objectService.createObject(structureTemplate, actor.getPlanet());
|
||||
long objectId = harvester.getObjectID();
|
||||
|
||||
Vector<String> adminList = harvester.getAdminList();
|
||||
String[] fullName = ((CreatureObject)actor).getCustomName().split(" ");
|
||||
adminList.add(fullName[0]);
|
||||
harvester.setAdminList(adminList);
|
||||
// Set BER and outputhopper capacity here, take it from deed
|
||||
harvester.setBER((int)object.getAttachment("Deed_BER"));
|
||||
harvester.setSpecRate((int)(1.5F*(int)object.getAttachment("Deed_BER")));
|
||||
harvester.setOutputHopperCapacity((int)object.getAttachment("Deed_Capacity"));
|
||||
harvester.setDeedTemplate((String)object.getAttachment("Deed_DeedTemplate"));
|
||||
if ((int)object.getAttachment("Deed_SurplusMaintenance")>0){
|
||||
harvester.setMaintenanceAmount((int)object.getAttachment("Deed_SurplusMaintenance"));
|
||||
}
|
||||
if ((int)object.getAttachment("Deed_SurplusPower")>0){
|
||||
harvester.setPowerLevel((int)object.getAttachment("Deed_SurplusPower"));
|
||||
}
|
||||
|
||||
|
||||
// build harvester
|
||||
int resCRC = CRC.StringtoCRC(structureTemplate);
|
||||
float positionY = NGECore.getInstance().terrainService.getHeight(actor.getPlanetId(), object.getPosition().x, object.getPosition().z);
|
||||
SceneCreateObjectByCrc createObjectMsg = new SceneCreateObjectByCrc(objectId, object.getOrientation().x, object.getOrientation().y, object.getOrientation().z, object.getOrientation().w, object.getPosition().x, positionY, object.getPosition().z, resCRC, (byte) 0);
|
||||
actor.getClient().getSession().write(createObjectMsg.serialize());
|
||||
tools.CharonPacketUtils.printAnalysis(createObjectMsg.serialize());
|
||||
|
||||
harvester.setPosition(new Point3D(object.getPosition().x,positionY, object.getPosition().z));
|
||||
|
||||
resources.objects.installation.InstallationMessageBuilder messenger = new resources.objects.installation.InstallationMessageBuilder((InstallationObject)harvester);
|
||||
actor.getClient().getSession().write(messenger.buildBaseline3((InstallationObject)harvester));
|
||||
SceneEndBaselines sceneEndBaselinesMsg = new SceneEndBaselines(harvester.getObjectID());
|
||||
actor.getClient().getSession().write(sceneEndBaselinesMsg.serialize());
|
||||
tools.CharonPacketUtils.printAnalysis(sceneEndBaselinesMsg.serialize());
|
||||
|
||||
PlayerObject player = (PlayerObject) actor.getSlottedObject("ghost");
|
||||
WaypointObject constructionWaypoint = (WaypointObject)NGECore.getInstance().objectService.createObject("object/waypoint/shared_world_waypoint_blue.iff", actor.getPlanet(), harvester.getPosition().x, 0 ,harvester.getPosition().z);
|
||||
String displayname = "@installation_n:"+harvester.getStfName();
|
||||
constructionWaypoint.setName(displayname);
|
||||
constructionWaypoint.setPlanetCRC(engine.resources.common.CRC.StringtoCRC(actor.getPlanet().getName()));
|
||||
constructionWaypoint.setPosition(new Point3D(object.getPosition().x,0, object.getPosition().z));
|
||||
player.waypointAdd(constructionWaypoint);
|
||||
constructionWaypoint.setPosition(new Point3D(object.getPosition().x,0, object.getPosition().z));
|
||||
constructionWaypoint.setActive(true);
|
||||
constructionWaypoint.setColor((byte)1);
|
||||
constructionWaypoint.setStringAttribute("", "");
|
||||
player.waypointAdd(constructionWaypoint);
|
||||
constructionWaypoint.setName(displayname);
|
||||
constructionWaypoint.setPlanetCRC(engine.resources.common.CRC.StringtoCRC(actor.getPlanet().getName()));
|
||||
player.setLastSurveyWaypoint(constructionWaypoint);
|
||||
|
||||
List<WaypointAttachment> attachments = new ArrayList<WaypointAttachment>();
|
||||
WaypointAttachment attachment = new WaypointAttachment();
|
||||
attachment.active = true;
|
||||
attachment.cellID = constructionWaypoint.getCellId();
|
||||
attachment.color = (byte)1;
|
||||
attachment.name = displayname;
|
||||
attachment.planetCRC = engine.resources.common.CRC.StringtoCRC(actor.getPlanet().getName());
|
||||
attachment.positionX = object.getPosition().x;
|
||||
attachment.positionY = 0;
|
||||
attachment.positionZ = object.getPosition().z;
|
||||
attachments.add(attachment);
|
||||
|
||||
// remove constructor
|
||||
NGECore.getInstance().objectService.destroyObject(object);
|
||||
SceneDestroyObject destroyObjectMsg = new SceneDestroyObject(object.getObjectID());
|
||||
actor.getClient().getSession().write(destroyObjectMsg.serialize());
|
||||
|
||||
// ToDo: waypoint attachment fix
|
||||
Date date = new Date();
|
||||
Mail constructionNotificationMail = new Mail();
|
||||
constructionNotificationMail.setSenderName("Structure Service");
|
||||
constructionNotificationMail.setSubject("Your structure");
|
||||
constructionNotificationMail.setRecieverId(actor.getObjectID());
|
||||
constructionNotificationMail.setTimeStamp((int) (date.getTime() / 1000));
|
||||
constructionNotificationMail.setMailId(NGECore.getInstance().chatService.generateMailId());
|
||||
String message = "Your construction is ready";
|
||||
constructionNotificationMail.setMessage(message);
|
||||
constructionNotificationMail.setStatus(Mail.NEW);
|
||||
constructionNotificationMail.setAttachments(attachments);
|
||||
//NGECore.getInstance().chatService.sendPersistentMessage(actor.getClient(), constructionNotificationMail);
|
||||
NGECore.getInstance().chatService.storePersistentMessage(constructionNotificationMail);
|
||||
NGECore.getInstance().chatService.sendPersistentMessageHeader(actor.getClient(), constructionNotificationMail);
|
||||
|
||||
}
|
||||
|
||||
public void createNewHopperContainer(){
|
||||
Vector<GalacticResource> planetResourcesVector = NGECore.getInstance().resourceService.getSpawnedResourcesByPlanetAndHarvesterType(this.getPlanetId(),this.getHarvester_type());
|
||||
((CreatureObject)this.getOwner()).getClient().getSession().write(messageBuilder.buildHINOBaseline7(this, planetResourcesVector));
|
||||
((CreatureObject)this.getOwner()).getClient().getSession().write(messageBuilder.buildHINO7Delta(this,(byte)1));
|
||||
}
|
||||
|
||||
public void continueHopperContainer(){
|
||||
Vector<GalacticResource> planetResourcesVector = NGECore.getInstance().resourceService.getSpawnedResourcesByPlanetAndHarvesterType(this.getPlanetId(),this.getHarvester_type());
|
||||
((CreatureObject)this.getOwner()).getClient().getSession().write(messageBuilder.buildHarvesterGetResourceData(this, owner, planetResourcesVector));
|
||||
((CreatureObject)this.getOwner()).getClient().getSession().write(messageBuilder.buildHINOBaseline7(this, planetResourcesVector));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void sendBaselines(Client destination) {
|
||||
|
||||
|
||||
if(destination == null || destination.getSession() == null) {
|
||||
System.out.println("NULL destination");
|
||||
return;
|
||||
}
|
||||
|
||||
destination.getSession().write(messageBuilder.buildBaseline3());
|
||||
destination.getSession().write(messageBuilder.buildBaseline6());
|
||||
destination.getSession().write(messageBuilder.buildBaseline8());
|
||||
destination.getSession().write(messageBuilder.buildBaseline9());
|
||||
|
||||
if(getPvPBitmask() != 0) {
|
||||
UpdatePVPStatusMessage upvpm = new UpdatePVPStatusMessage(getObjectID());
|
||||
upvpm.setFaction(UpdatePVPStatusMessage.factionCRC.Neutral);
|
||||
upvpm.setStatus(getPvPBitmask());
|
||||
destination.getSession().write(upvpm.serialize());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -21,6 +21,205 @@
|
||||
******************************************************************************/
|
||||
package resources.objects.installation;
|
||||
|
||||
public class InstallationMessageBuilder {
|
||||
import java.nio.ByteOrder;
|
||||
import org.apache.mina.core.buffer.IoBuffer;
|
||||
import resources.objects.ObjectMessageBuilder;
|
||||
import resources.objects.harvester.HarvesterObject;
|
||||
|
||||
/**
|
||||
* @author Charon
|
||||
*/
|
||||
|
||||
public class InstallationMessageBuilder extends ObjectMessageBuilder{
|
||||
|
||||
public InstallationMessageBuilder(InstallationObject installationObject) {
|
||||
setObject(installationObject);
|
||||
}
|
||||
|
||||
public IoBuffer buildBaseline3(InstallationObject installationObject) {
|
||||
IoBuffer buffer = bufferPool.allocate(10, false).order(ByteOrder.LITTLE_ENDIAN);
|
||||
buffer.setAutoExpand(true);
|
||||
int packSize = 66;
|
||||
packSize += installationObject.getStfName().length();
|
||||
packSize += installationObject.getStfFilename().length();
|
||||
|
||||
buffer.putShort((short)5);
|
||||
buffer.putInt(0x68A75F0C);
|
||||
buffer.putLong(installationObject.getObjectID());
|
||||
buffer.putInt(0x494E534F);
|
||||
buffer.put((byte)3);
|
||||
buffer.putInt(packSize);
|
||||
buffer.putShort((short) 0x05);
|
||||
buffer.putFloat(installationObject.getComplexity());
|
||||
buffer.put(getAsciiString(installationObject.getStfFilename())); // installation_n
|
||||
buffer.putInt(0);
|
||||
buffer.put(getAsciiString(installationObject.getStfName()));
|
||||
buffer.put(getUnicodeString(""));//buffer.put(getUnicodeString(installationObject.getCustomName()));
|
||||
buffer.putInt(1);// int 1 // oper 3
|
||||
buffer.putShort((short)0);
|
||||
|
||||
buffer.putInt(0);
|
||||
buffer.putInt(0);
|
||||
buffer.putLong(0);
|
||||
|
||||
buffer.putInt(0);
|
||||
buffer.putInt(0);
|
||||
buffer.putInt(0);
|
||||
buffer.putInt(0);
|
||||
buffer.put((byte)1);
|
||||
buffer.put((byte)0);
|
||||
buffer.putFloat(0.0F);
|
||||
buffer.putFloat(0.0F);
|
||||
|
||||
int size = buffer.position();
|
||||
buffer.flip();
|
||||
tools.CharonPacketUtils.printAnalysis(IoBuffer.allocate(size).put(buffer.array(), 0, size).flip());
|
||||
return IoBuffer.allocate(size).put(buffer.array(), 0, size).flip();
|
||||
}
|
||||
|
||||
// 0000: 05 00 0C 5F A7 68 82 EC 7D 16 00 00 02 00 4F 53 ..._.h..}.....OS
|
||||
// 0010: 4E 49 06 0E 00 00 00 05 00 76 00 00 00 00 00 00 NI.......v......
|
||||
// 0020: 00 01 00 00 00 .....
|
||||
|
||||
public IoBuffer buildBaseline6(InstallationObject installationObject) {
|
||||
IoBuffer buffer = bufferPool.allocate(10, false).order(ByteOrder.LITTLE_ENDIAN);
|
||||
buffer.setAutoExpand(true);
|
||||
int packSize = 14;
|
||||
buffer.putShort((short)5);
|
||||
buffer.putInt(0x68A75F0C);
|
||||
buffer.putLong(installationObject.getObjectID());
|
||||
buffer.putInt(0x494E534F);
|
||||
buffer.put((byte)6);
|
||||
buffer.putInt(packSize);
|
||||
buffer.putShort((short)5);
|
||||
buffer.putInt(0x76);
|
||||
buffer.putInt(0);
|
||||
buffer.putInt(1);
|
||||
|
||||
int size = buffer.position();
|
||||
buffer.flip();
|
||||
tools.CharonPacketUtils.printAnalysis(IoBuffer.allocate(size).put(buffer.array(), 0, size).flip());
|
||||
return IoBuffer.allocate(size).put(buffer.array(), 0, size).flip();
|
||||
}
|
||||
|
||||
|
||||
public IoBuffer buildBaseline7() {
|
||||
IoBuffer buffer = bufferPool.allocate(2, false).order(ByteOrder.LITTLE_ENDIAN);
|
||||
buffer.putShort((short) 0);
|
||||
int size = buffer.position();
|
||||
buffer = IoBuffer.allocate(size).put(buffer.array(), 0, size);
|
||||
buffer.flip();
|
||||
buffer = createBaseline("INSO", (byte) 7, buffer, size);
|
||||
|
||||
return buffer;
|
||||
}
|
||||
|
||||
public IoBuffer buildBaseline8() {
|
||||
IoBuffer buffer = bufferPool.allocate(2, false).order(ByteOrder.LITTLE_ENDIAN);
|
||||
buffer.putShort((short) 0);
|
||||
int size = buffer.position();
|
||||
buffer = IoBuffer.allocate(size).put(buffer.array(), 0, size);
|
||||
buffer.flip();
|
||||
buffer = createBaseline("INSO", (byte) 8, buffer, size);
|
||||
|
||||
return buffer;
|
||||
}
|
||||
|
||||
public IoBuffer buildBaseline9() {
|
||||
IoBuffer buffer = bufferPool.allocate(2, false).order(ByteOrder.LITTLE_ENDIAN);
|
||||
buffer.putShort((short) 0);
|
||||
int size = buffer.position();
|
||||
buffer = IoBuffer.allocate(size).put(buffer.array(), 0, size);
|
||||
buffer.flip();
|
||||
buffer = createBaseline("INSO", (byte) 9, buffer, size);
|
||||
|
||||
return buffer;
|
||||
}
|
||||
|
||||
public IoBuffer buildDelta3(InstallationObject installationObject,IoBuffer packet,int packSize) {
|
||||
IoBuffer buffer = bufferPool.allocate(10, false).order(ByteOrder.LITTLE_ENDIAN);
|
||||
buffer.setAutoExpand(true);
|
||||
buffer.putShort((short)5);
|
||||
buffer.putInt(0x12862153);
|
||||
buffer.putLong(installationObject.getObjectID());
|
||||
buffer.putInt(0x494E534F);
|
||||
buffer.put((byte)3);
|
||||
buffer.putInt(packSize);
|
||||
buffer.put(packet);
|
||||
int size = buffer.position();
|
||||
buffer.flip();
|
||||
tools.CharonPacketUtils.printAnalysis(IoBuffer.allocate(size).put(buffer.array(), 0, size).flip());
|
||||
return IoBuffer.allocate(size).put(buffer.array(), 0, size).flip();
|
||||
}
|
||||
|
||||
public IoBuffer buildDelta7(InstallationObject installationObject,IoBuffer packet,int packSize) {
|
||||
IoBuffer buffer = bufferPool.allocate(10, false).order(ByteOrder.LITTLE_ENDIAN);
|
||||
buffer.setAutoExpand(true);
|
||||
buffer.putShort((short)5);
|
||||
buffer.putInt(0x12862153);
|
||||
buffer.putLong(installationObject.getObjectID());
|
||||
buffer.putInt(0x494E534F);
|
||||
buffer.put((byte)7);
|
||||
buffer.putInt(packSize);
|
||||
buffer.put(packet);
|
||||
int size = buffer.position();
|
||||
buffer.flip();
|
||||
tools.CharonPacketUtils.printAnalysis(IoBuffer.allocate(size).put(buffer.array(), 0, size).flip());
|
||||
return IoBuffer.allocate(size).put(buffer.array(), 0, size).flip();
|
||||
}
|
||||
|
||||
public IoBuffer constructINSO7Var1(InstallationObject installationObject,long selectedResource) {
|
||||
IoBuffer buffer = bufferPool.allocate(10, false).order(ByteOrder.LITTLE_ENDIAN);
|
||||
int hopperContentsSize = ((HarvesterObject)installationObject).getOutputHopperContent().size()+1;
|
||||
byte updateCounter = ((HarvesterObject)installationObject).getUpdateCount();
|
||||
|
||||
buffer.setAutoExpand(true);
|
||||
buffer.putShort((short)2); // buffer.putShort((short)updateCounter);
|
||||
buffer.putShort((short)0xC);
|
||||
buffer.put((byte)1);
|
||||
buffer.putShort((short)0xD);
|
||||
|
||||
buffer.putInt(1);//buffer.putInt(hopperContentsSize); // works once with 1! HopperContentsSize->Number of resources in hopper
|
||||
buffer.putInt(2); // UpdateCounter works once with 2!
|
||||
buffer.put((byte)1); // subtype : ADD
|
||||
buffer.putShort((short)0); // index was 0 buffer.putShort((short)(hopperContentsSize-1));
|
||||
buffer.putLong(selectedResource);
|
||||
buffer.putFloat(0);
|
||||
int size = buffer.position();
|
||||
buffer.flip();
|
||||
return buildDelta7(installationObject,IoBuffer.allocate(size).put(buffer.array(), 0, size).flip(),size);
|
||||
}
|
||||
|
||||
// 0000: 05 00 53 21 86 12 82 EC 7D 16 00 00 02 00 4F 53 ..S!....}.....OS
|
||||
// 0010: 4E 49 07 1E 00 00 00 02 00 0C 00 01 0D 00 01 00 NI..............
|
||||
// 0020: 00 00 02 00 00 00 01 00 00 8A D3 79 16 00 00 0F ...........y....
|
||||
// 0030: 00 00 00 00 00 .....
|
||||
|
||||
public IoBuffer constructINSO7Var2(InstallationObject installationObject,long selectedResource) {
|
||||
IoBuffer buffer = bufferPool.allocate(10, false).order(ByteOrder.LITTLE_ENDIAN);
|
||||
buffer.setAutoExpand(true);
|
||||
buffer.putShort((short)2);
|
||||
buffer.putShort((short)0x9);
|
||||
buffer.putFloat(0);
|
||||
buffer.putShort((short)0x5);
|
||||
buffer.putLong(selectedResource);
|
||||
int size = buffer.position();
|
||||
buffer.flip();
|
||||
return buildDelta7(installationObject,IoBuffer.allocate(size).put(buffer.array(), 0, size).flip(),size);
|
||||
}
|
||||
|
||||
// 0000: 05 00 53 21 86 12 82 EC 7D 16 00 00 02 00 4F 53 ..S!....}.....OS
|
||||
// 0010: 4E 49 07 12 00 00 00 02 00 09 00 00 00 00 00 05 NI..............
|
||||
// 0020: 00 8A D3 79 16 00 00 0F 00 ...y.....
|
||||
|
||||
@Override
|
||||
public void sendListDelta(byte viewType, short updateType, IoBuffer buffer) {
|
||||
// TODO Auto-generated method stub
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void sendBaselines() {
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -23,9 +23,16 @@ package resources.objects.installation;
|
||||
|
||||
import com.sleepycat.persist.model.Persistent;
|
||||
|
||||
import engine.resources.scene.Planet;
|
||||
import engine.resources.scene.Point3D;
|
||||
import engine.resources.scene.Quaternion;
|
||||
|
||||
import resources.objects.tangible.TangibleObject;
|
||||
|
||||
@Persistent(version=0)
|
||||
public class InstallationObject extends TangibleObject {
|
||||
|
||||
}
|
||||
|
||||
public InstallationObject(long objectID, Planet planet, String template, Point3D position, Quaternion orientation){
|
||||
super(objectID, planet, template, position, orientation);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,51 @@
|
||||
/*******************************************************************************
|
||||
* Copyright (c) 2013 <Project SWG>
|
||||
*
|
||||
* This File is part of NGECore2.
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser 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 Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
* Using NGEngine to work with NGECore2 is making a combined work based on NGEngine.
|
||||
* Therefore all terms and conditions of the GNU Lesser General Public License cover the combination.
|
||||
******************************************************************************/
|
||||
package resources.objects.loot;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public class LootDrop {
|
||||
|
||||
private List<String> elements = new ArrayList<String>();
|
||||
private String droppedItemTemplate;
|
||||
|
||||
public LootDrop(){
|
||||
|
||||
}
|
||||
|
||||
public void addElement(String element){
|
||||
elements.add(element);
|
||||
}
|
||||
|
||||
public List<String> getElements(){
|
||||
return elements;
|
||||
}
|
||||
|
||||
public String getDroppedItemTemplate() {
|
||||
return droppedItemTemplate;
|
||||
}
|
||||
|
||||
public void setDroppedItemTemplate(String droppedItemTemplate) {
|
||||
this.droppedItemTemplate = droppedItemTemplate;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,64 @@
|
||||
/*******************************************************************************
|
||||
* Copyright (c) 2013 <Project SWG>
|
||||
*
|
||||
* This File is part of NGECore2.
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser 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 Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
* Using NGEngine to work with NGECore2 is making a combined work based on NGEngine.
|
||||
* Therefore all terms and conditions of the GNU Lesser General Public License cover the combination.
|
||||
******************************************************************************/
|
||||
package resources.objects.loot;
|
||||
|
||||
import com.sleepycat.persist.model.Persistent;
|
||||
|
||||
/**
|
||||
* @author Charon
|
||||
*/
|
||||
|
||||
@Persistent(version=0)
|
||||
public class LootGroup {
|
||||
|
||||
private String[] lootPoolNames;
|
||||
private int[] lootPoolChances;
|
||||
private int lootGroupChance;
|
||||
|
||||
public LootGroup(){
|
||||
|
||||
}
|
||||
|
||||
public LootGroup(String[] lootPoolNames, int[] lootPoolChances, int lootGroupChance){
|
||||
this.lootPoolNames = lootPoolNames;
|
||||
this.lootPoolChances = lootPoolChances;
|
||||
this.lootGroupChance = lootGroupChance;
|
||||
}
|
||||
|
||||
public void addLootData(String[] lootPoolNames, int[] lootPoolChances, int lootGroupChance){
|
||||
this.lootPoolNames = lootPoolNames;
|
||||
this.lootPoolChances = lootPoolChances;
|
||||
this.lootGroupChance = lootGroupChance;
|
||||
}
|
||||
|
||||
public String[] getLootPoolNames() {
|
||||
return lootPoolNames;
|
||||
}
|
||||
|
||||
public int[] getLootPoolChances() {
|
||||
return lootPoolChances;
|
||||
}
|
||||
|
||||
public int getLootGroupChance() {
|
||||
return lootGroupChance;
|
||||
}
|
||||
}
|
||||
@@ -19,20 +19,15 @@
|
||||
* Using NGEngine to work with NGECore2 is making a combined work based on NGEngine.
|
||||
* Therefore all terms and conditions of the GNU Lesser General Public License cover the combination.
|
||||
******************************************************************************/
|
||||
package protocol.swg;
|
||||
package resources.objects.loot;
|
||||
|
||||
import org.apache.mina.core.buffer.IoBuffer;
|
||||
|
||||
public class ChatCreateRoom extends SWGMessage {
|
||||
|
||||
@Override
|
||||
public void deserialize(IoBuffer data) {
|
||||
/**
|
||||
* @author Charon
|
||||
*/
|
||||
|
||||
public class LootPool {
|
||||
|
||||
public LootPool(){
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public IoBuffer serialize() {
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,153 @@
|
||||
/*******************************************************************************
|
||||
* Copyright (c) 2013 <Project SWG>
|
||||
*
|
||||
* This File is part of NGECore2.
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser 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 Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
* Using NGEngine to work with NGECore2 is making a combined work based on NGEngine.
|
||||
* Therefore all terms and conditions of the GNU Lesser General Public License cover the combination.
|
||||
******************************************************************************/
|
||||
package resources.objects.loot;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import engine.resources.scene.Planet;
|
||||
import main.NGECore;
|
||||
import resources.objects.creature.CreatureObject;
|
||||
import resources.objects.group.GroupObject;
|
||||
import resources.objects.tangible.TangibleObject;
|
||||
|
||||
/**
|
||||
* @author Charon
|
||||
*/
|
||||
|
||||
public class LootRollSession {
|
||||
|
||||
private String SessionID; // leaderName-SystemTime
|
||||
private boolean sessionValid;
|
||||
private GroupObject playerGroup;
|
||||
private List<TangibleObject> droppedItems;
|
||||
private Planet sessionPlanet;
|
||||
private List<String> errorMessages;
|
||||
private int sessionLootMode;
|
||||
private boolean allowRareLoot;
|
||||
private boolean increasedRLSChance;
|
||||
|
||||
public LootRollSession(){
|
||||
}
|
||||
|
||||
public LootRollSession(CreatureObject requester, TangibleObject lootedObject){
|
||||
long requesterGroupId = requester.getGroupId();
|
||||
if (requesterGroupId>0){
|
||||
this.playerGroup = (GroupObject) NGECore.getInstance().objectService.getObject(requesterGroupId);
|
||||
this.SessionID = playerGroup.getGroupLeader().getCustomName()+"-"+System.currentTimeMillis();
|
||||
|
||||
} else {
|
||||
this.SessionID = requester.getCustomName()+"-"+System.currentTimeMillis();
|
||||
}
|
||||
|
||||
if (lootedObject instanceof CreatureObject){
|
||||
CreatureObject lootedCreature = (CreatureObject)lootedObject;
|
||||
// Exclude rare loot depending on creature level
|
||||
// For groups maybe average CL?
|
||||
if (requester.getLevel()-lootedCreature.getLevel()<=6){
|
||||
this.setAllowRareLoot(true);
|
||||
}
|
||||
}
|
||||
|
||||
// Group situation
|
||||
if (this.getPlayerGroup()!=null){
|
||||
if (this.getPlayerGroup().getMemberList().size()>=4)
|
||||
this.setIncreasedRLSChance(true);
|
||||
}
|
||||
|
||||
// Possible AFKer check here
|
||||
|
||||
|
||||
droppedItems = new ArrayList<TangibleObject>();
|
||||
errorMessages = new ArrayList<String>();
|
||||
sessionPlanet = requester.getPlanet();
|
||||
allowRareLoot = false;
|
||||
}
|
||||
|
||||
public List<TangibleObject> getDroppedItems() {
|
||||
return droppedItems;
|
||||
}
|
||||
|
||||
public void addDroppedItem(TangibleObject droppedItem) {
|
||||
this.droppedItems.add(droppedItem);
|
||||
}
|
||||
|
||||
public String getSessionID() {
|
||||
return SessionID;
|
||||
}
|
||||
|
||||
public void setSessionID(String sessionID) {
|
||||
SessionID = sessionID;
|
||||
}
|
||||
|
||||
public void generateSessionID(String sessionID) {
|
||||
SessionID = sessionID;
|
||||
}
|
||||
|
||||
public Planet getSessionPlanet() {
|
||||
return sessionPlanet;
|
||||
}
|
||||
|
||||
public List<String> getErrorMessages() {
|
||||
return errorMessages;
|
||||
}
|
||||
|
||||
public void addErrorMessage(String errorMessage) {
|
||||
this.errorMessages.add(errorMessage);
|
||||
}
|
||||
|
||||
public int getSessionLootMode() {
|
||||
return sessionLootMode;
|
||||
}
|
||||
|
||||
public void setSessionLootMode(int sessionLootMode) {
|
||||
this.sessionLootMode = sessionLootMode;
|
||||
}
|
||||
|
||||
public boolean isAllowRareLoot() {
|
||||
return allowRareLoot;
|
||||
}
|
||||
|
||||
public void setAllowRareLoot(boolean allowRareLoot) {
|
||||
this.allowRareLoot = allowRareLoot;
|
||||
}
|
||||
|
||||
public GroupObject getPlayerGroup() {
|
||||
return playerGroup;
|
||||
}
|
||||
|
||||
public boolean isIncreasedRLSChance() {
|
||||
return increasedRLSChance;
|
||||
}
|
||||
|
||||
public void setIncreasedRLSChance(boolean increasedRLSChance) {
|
||||
this.increasedRLSChance = increasedRLSChance;
|
||||
}
|
||||
|
||||
public boolean isSessionValid() {
|
||||
return sessionValid;
|
||||
}
|
||||
|
||||
public void setSessionValid(boolean sessionValid) {
|
||||
this.sessionValid = sessionValid;
|
||||
}
|
||||
}
|
||||
@@ -27,8 +27,6 @@ import java.util.Map.Entry;
|
||||
|
||||
import org.apache.mina.core.buffer.IoBuffer;
|
||||
|
||||
import engine.resources.common.CRC;
|
||||
import resources.common.StringUtilities;
|
||||
import resources.objects.ObjectMessageBuilder;
|
||||
import resources.objects.waypoint.WaypointObject;
|
||||
|
||||
|
||||
@@ -28,7 +28,6 @@ import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.TreeMap;
|
||||
|
||||
import resources.common.Console;
|
||||
import resources.objects.intangible.IntangibleObject;
|
||||
import resources.objects.resource.ResourceContainerObject;
|
||||
import resources.objects.tool.SurveyTool;
|
||||
@@ -45,7 +44,7 @@ import engine.resources.scene.Planet;
|
||||
import engine.resources.scene.Point3D;
|
||||
import engine.resources.scene.Quaternion;
|
||||
|
||||
@Persistent(version=9)
|
||||
@Persistent(version=10)
|
||||
public class PlayerObject extends IntangibleObject {
|
||||
|
||||
// PLAY 3
|
||||
@@ -127,6 +126,8 @@ public class PlayerObject extends IntangibleObject {
|
||||
private String holoEmote;
|
||||
private int holoEmoteUses;
|
||||
|
||||
private int lotsRemaining = 10;
|
||||
|
||||
@NotPersistent
|
||||
private PlayerMessageBuilder messageBuilder;
|
||||
|
||||
@@ -822,4 +823,30 @@ public class PlayerObject extends IntangibleObject {
|
||||
public void setRecentContainer(ResourceContainerObject recentContainer) {
|
||||
this.recentContainer = recentContainer;
|
||||
}
|
||||
|
||||
public void setLotsRemaining(int amount)
|
||||
{
|
||||
this.lotsRemaining = amount;
|
||||
}
|
||||
|
||||
public boolean addLots(int amount)
|
||||
{
|
||||
this.lotsRemaining += amount;
|
||||
return true;
|
||||
}
|
||||
|
||||
public boolean deductLots(int amount)
|
||||
{
|
||||
if(this.lotsRemaining - amount >= 0)
|
||||
{
|
||||
this.lotsRemaining -= amount;
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public int getLotsRemaining()
|
||||
{
|
||||
return this.lotsRemaining;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -24,20 +24,17 @@ package resources.objects.resource;
|
||||
import java.util.List;
|
||||
import java.util.Random;
|
||||
import java.util.Vector;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
import main.NGECore;
|
||||
import protocol.swg.SurveyMapUpdateMessage;
|
||||
import resources.objects.creature.CreatureObject;
|
||||
import resources.objects.player.PlayerObject;
|
||||
import resources.objects.tangible.TangibleObject;
|
||||
import resources.objects.waypoint.WaypointObject;
|
||||
|
||||
import com.sleepycat.je.Environment;
|
||||
import com.sleepycat.je.Transaction;
|
||||
import com.sleepycat.persist.model.Entity;
|
||||
import com.sleepycat.persist.model.NotPersistent;
|
||||
import com.sleepycat.persist.model.Persistent;
|
||||
|
||||
import engine.clients.Client;
|
||||
import engine.resources.objects.IPersistent;
|
||||
|
||||
@@ -27,7 +27,7 @@ public class ResourceConcentration {
|
||||
return coordsZ;
|
||||
}
|
||||
|
||||
public void setCoordsZ(float coordsY) {
|
||||
public void setCoordsZ(float coordsZ) {
|
||||
this.coordsZ = coordsZ;
|
||||
}
|
||||
|
||||
|
||||
@@ -47,7 +47,7 @@ public class ResourceContainerObject extends TangibleObject {
|
||||
|
||||
private CreatureObject proprietor;
|
||||
private String resourceType;
|
||||
private String resourceClass;
|
||||
private String resourceClass="";
|
||||
private String resourceName;
|
||||
private byte generalType;
|
||||
private long referenceID;
|
||||
@@ -70,6 +70,7 @@ public class ResourceContainerObject extends TangibleObject {
|
||||
private short overallQuality;
|
||||
private short flavor;
|
||||
|
||||
/*
|
||||
private static byte CONTAINER_TYPE_INORGANIC_MINERALS = 0;
|
||||
private static byte CONTAINER_TYPE_INORGANIC_CHEMICALS = 1;
|
||||
private static byte CONTAINER_TYPE_INORGANIC_GAS = 2;
|
||||
@@ -127,6 +128,7 @@ public class ResourceContainerObject extends TangibleObject {
|
||||
"object/resource_container/shared_resource_container_energy_radioactive.iff",
|
||||
"object/resource_container/shared_resource_container_energy_solid.iff"
|
||||
};
|
||||
*/
|
||||
|
||||
@NotPersistent
|
||||
public static int maximalStackCapacity = 100000;
|
||||
@@ -146,7 +148,7 @@ public class ResourceContainerObject extends TangibleObject {
|
||||
|
||||
public void initializeStats(GalacticResource resource){
|
||||
this.setResourceName(resource.getName());
|
||||
this.setResourceClass(resource.getResourceClass());
|
||||
this.setResourceClass(resource.getCategory());
|
||||
this.setColdResistance(resource.getResourceStats()[0]);
|
||||
this.setConductivity(resource.getResourceStats()[1]);
|
||||
this.setDecayResistance(resource.getResourceStats()[2]);
|
||||
|
||||
@@ -31,8 +31,6 @@ import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.Vector;
|
||||
|
||||
import javax.xml.bind.DatatypeConverter;
|
||||
|
||||
import main.NGECore;
|
||||
import protocol.swg.ObjControllerMessage;
|
||||
import protocol.swg.PlayClientEffectObjectMessage;
|
||||
@@ -41,8 +39,8 @@ import protocol.swg.UpdatePVPStatusMessage;
|
||||
import protocol.swg.objectControllerObjects.ShowFlyText;
|
||||
import resources.common.RGB;
|
||||
import resources.objects.creature.CreatureObject;
|
||||
import resources.objects.loot.LootGroup;
|
||||
import resources.visitors.IDManagerVisitor;
|
||||
import services.ai.AIActor;
|
||||
|
||||
import com.sleepycat.persist.model.NotPersistent;
|
||||
import com.sleepycat.persist.model.Persistent;
|
||||
@@ -54,7 +52,7 @@ import engine.resources.scene.Planet;
|
||||
import engine.resources.scene.Point3D;
|
||||
import engine.resources.scene.Quaternion;
|
||||
|
||||
@Persistent(version=1)
|
||||
@Persistent(version=5)
|
||||
public class TangibleObject extends SWGObject {
|
||||
|
||||
// TODO: Thread safety
|
||||
@@ -77,6 +75,12 @@ public class TangibleObject extends SWGObject {
|
||||
private int respawnTime = 0;
|
||||
private Point3D spawnCoordinates = new Point3D(0, 0, 0);
|
||||
|
||||
//private TreeSet<TreeMap<String,Integer>> lootSpecification = new TreeSet<TreeMap<String,Integer>>();
|
||||
private List<LootGroup> lootGroups = new ArrayList<LootGroup>();
|
||||
|
||||
private boolean looted = false;
|
||||
private boolean lootLock = false;
|
||||
|
||||
@NotPersistent
|
||||
private TangibleObject killer = null;
|
||||
|
||||
@@ -444,6 +448,33 @@ public class TangibleObject extends SWGObject {
|
||||
}
|
||||
}
|
||||
|
||||
public List<LootGroup> getLootGroups() {
|
||||
return lootGroups;
|
||||
}
|
||||
|
||||
public void addToLootGroups(String[] lootPoolNames, int[] lootPoolChances, int lootGroupChance) {
|
||||
System.out.println("lootPoolNames[0] " + lootPoolNames[0]);
|
||||
LootGroup lootGroup = new LootGroup(lootPoolNames, lootPoolChances, lootGroupChance);
|
||||
this.lootGroups.add(lootGroup);
|
||||
}
|
||||
|
||||
public boolean isLooted() {
|
||||
return looted;
|
||||
}
|
||||
|
||||
public void setLooted(boolean looted) {
|
||||
this.looted = looted;
|
||||
}
|
||||
|
||||
public boolean isLootLock() {
|
||||
return lootLock;
|
||||
}
|
||||
|
||||
public void setLootLock(boolean lootLock) {
|
||||
this.lootLock = lootLock;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void sendBaselines(Client destination) {
|
||||
|
||||
@@ -467,5 +498,5 @@ public class TangibleObject extends SWGObject {
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -178,7 +178,6 @@ public class BuffService implements INetworkDispatch {
|
||||
|
||||
// I'm not sure if all aura effects follow the same rules, so this is simply restricted to officer aura's atm
|
||||
ScheduledFuture<?> task = scheduler.scheduleAtFixedRate(new Runnable() {
|
||||
@SuppressWarnings("unused")
|
||||
@Override
|
||||
public void run() {
|
||||
if (buffer == null || buffer.getClient() == null)
|
||||
|
||||
@@ -124,7 +124,7 @@ public class ConversationService implements INetworkDispatch {
|
||||
|
||||
conversationHandlers.put(player, handler);
|
||||
|
||||
NpcConversationOptions convoOptions = new NpcConversationOptions(player.getObjectID(), npc.getObjectID());
|
||||
NpcConversationOptions convoOptions = new NpcConversationOptions(player.getObjectID());
|
||||
options.forEach(convoOptions::addOption);
|
||||
ObjControllerMessage objController = new ObjControllerMessage(0x0B, convoOptions);
|
||||
player.getClient().getSession().write(objController.serialize());
|
||||
|
||||
@@ -38,6 +38,7 @@ import resources.common.Opcodes;
|
||||
import resources.common.SpawnPoint;
|
||||
import resources.objects.building.BuildingObject;
|
||||
import resources.objects.creature.CreatureObject;
|
||||
import resources.objects.deed.Harvester_Deed;
|
||||
import resources.objects.player.PlayerObject;
|
||||
import resources.objects.tangible.TangibleObject;
|
||||
import resources.objects.tool.SurveyTool;
|
||||
@@ -67,7 +68,7 @@ public class DevService implements INetworkDispatch {
|
||||
public void sendCharacterBuilderSUI(CreatureObject creature, int childMenu)
|
||||
{
|
||||
Map<Long, String> suiOptions = new HashMap<Long, String>();
|
||||
|
||||
|
||||
switch(childMenu)
|
||||
{
|
||||
case 0: // Root
|
||||
@@ -84,7 +85,9 @@ public class DevService implements INetworkDispatch {
|
||||
suiOptions.put((long) 21, "Weapons");
|
||||
suiOptions.put((long) 22, "Misc Items");
|
||||
suiOptions.put((long) 23, "Jedi Items");
|
||||
suiOptions.put((long) 26, "Installations");
|
||||
suiOptions.put((long) 110, "Survey Devices");
|
||||
if(creature.getClient().isGM()) suiOptions.put((long) 120, "House Deeds");
|
||||
break;
|
||||
case 3: // [Items] Weapons
|
||||
suiOptions.put((long) 30, "Jedi Weapons");
|
||||
@@ -121,6 +124,10 @@ public class DevService implements INetworkDispatch {
|
||||
suiOptions.put((long) 91, "(Dark) Jedi Robe");
|
||||
suiOptions.put((long) 92, "Belt of Master Bodo Baas");
|
||||
break;
|
||||
case 10: // [Items] Jedi Items
|
||||
suiOptions.put((long) 111, "Harvesters");
|
||||
suiOptions.put((long) 112, "Energy resources");
|
||||
break;
|
||||
|
||||
}
|
||||
|
||||
@@ -186,6 +193,9 @@ public class DevService implements INetworkDispatch {
|
||||
case 25: // Tools
|
||||
sendCharacterBuilderSUI(player, 15);
|
||||
return;
|
||||
case 26: // Installations
|
||||
sendCharacterBuilderSUI(player, 10);
|
||||
return;
|
||||
|
||||
// [Items] Weapons
|
||||
case 30: // Jedi Weapons
|
||||
@@ -990,8 +1000,201 @@ public class DevService implements INetworkDispatch {
|
||||
SurveyTool solarSurveyTool = (SurveyTool) core.objectService.createObject("object/tangible/survey_tool/shared_survey_tool_solar.iff", planet);
|
||||
solarSurveyTool.setCustomName("Solar Survey Device");
|
||||
inventory.add(solarSurveyTool);
|
||||
return;
|
||||
case 111:
|
||||
// Minerals
|
||||
String templateString="object/tangible/deed/harvester_deed/shared_harvester_ore_s1_deed.iff";
|
||||
Harvester_Deed deed1 = (Harvester_Deed)core.objectService.createObject(templateString, planet);
|
||||
deed1.setOutputHopperCapacity(27344);
|
||||
deed1.setBER(5);
|
||||
deed1.setAttributes();
|
||||
inventory.add(deed1);
|
||||
|
||||
templateString="object/tangible/deed/harvester_deed/shared_harvester_ore_s2_deed.iff";
|
||||
deed1 = (Harvester_Deed)core.objectService.createObject(templateString, planet);
|
||||
deed1.setOutputHopperCapacity(27344);
|
||||
deed1.setBER(11);
|
||||
deed1.setAttributes();
|
||||
inventory.add(deed1);
|
||||
|
||||
templateString="object/tangible/deed/harvester_deed/shared_harvester_ore_heavy_deed.iff";
|
||||
deed1 = (Harvester_Deed)core.objectService.createObject(templateString, planet);
|
||||
deed1.setOutputHopperCapacity(135400);
|
||||
deed1.setBER(14);
|
||||
deed1.setAttributes();
|
||||
inventory.add(deed1);
|
||||
|
||||
templateString="object/tangible/deed/harvester_deed/shared_harvester_ore_deed_elite.iff";
|
||||
deed1 = (Harvester_Deed)core.objectService.createObject(templateString, planet);
|
||||
deed1.setOutputHopperCapacity(250000);
|
||||
deed1.setBER(44);
|
||||
deed1.setAttributes();
|
||||
inventory.add(deed1);
|
||||
|
||||
|
||||
// Chemicals
|
||||
templateString="object/tangible/deed/harvester_deed/shared_harvester_liquid_deed.iff";
|
||||
deed1 = (Harvester_Deed)core.objectService.createObject(templateString, planet);
|
||||
deed1.setOutputHopperCapacity(27344);
|
||||
deed1.setBER(5);
|
||||
deed1.setAttributes();
|
||||
inventory.add(deed1);
|
||||
|
||||
templateString="object/tangible/deed/harvester_deed/shared_harvester_liquid_deed_medium.iff";
|
||||
deed1 = (Harvester_Deed)core.objectService.createObject(templateString, planet);
|
||||
deed1.setOutputHopperCapacity(27344);
|
||||
deed1.setBER(11);
|
||||
deed1.setAttributes();
|
||||
inventory.add(deed1);
|
||||
|
||||
templateString="object/tangible/deed/harvester_deed/shared_harvester_liquid_deed_heavy.iff";
|
||||
deed1 = (Harvester_Deed)core.objectService.createObject(templateString, planet);
|
||||
deed1.setOutputHopperCapacity(135400);
|
||||
deed1.setBER(14);
|
||||
deed1.setAttributes();
|
||||
inventory.add(deed1);
|
||||
|
||||
templateString="object/tangible/deed/harvester_deed/shared_harvester_liquid_deed_elite.iff";
|
||||
deed1 = (Harvester_Deed)core.objectService.createObject(templateString, planet);
|
||||
deed1.setOutputHopperCapacity(250000);
|
||||
deed1.setBER(44);
|
||||
deed1.setAttributes();
|
||||
inventory.add(deed1);
|
||||
|
||||
|
||||
// Flora
|
||||
templateString="object/tangible/deed/harvester_deed/shared_harvester_flora_deed.iff";
|
||||
deed1 = (Harvester_Deed)core.objectService.createObject(templateString, planet);
|
||||
deed1.setOutputHopperCapacity(27344);
|
||||
deed1.setBER(5);
|
||||
deed1.setAttributes();
|
||||
inventory.add(deed1);
|
||||
|
||||
templateString="object/tangible/deed/harvester_deed/shared_harvester_flora_deed_medium.iff";
|
||||
deed1 = (Harvester_Deed)core.objectService.createObject(templateString, planet);
|
||||
deed1.setOutputHopperCapacity(27344);
|
||||
deed1.setBER(11);
|
||||
deed1.setAttributes();
|
||||
inventory.add(deed1);
|
||||
|
||||
templateString="object/tangible/deed/harvester_deed/shared_harvester_flora_deed_heavy.iff";
|
||||
deed1 = (Harvester_Deed)core.objectService.createObject(templateString, planet);
|
||||
deed1.setOutputHopperCapacity(135400);
|
||||
deed1.setBER(14);
|
||||
deed1.setAttributes();
|
||||
inventory.add(deed1);
|
||||
|
||||
templateString="object/tangible/deed/harvester_deed/shared_harvester_flora_deed_elite.iff";
|
||||
deed1 = (Harvester_Deed)core.objectService.createObject(templateString, planet);
|
||||
deed1.setOutputHopperCapacity(250000);
|
||||
deed1.setBER(44);
|
||||
deed1.setAttributes();
|
||||
inventory.add(deed1);
|
||||
|
||||
|
||||
// Gas
|
||||
templateString="object/tangible/deed/harvester_deed/shared_harvester_gas_deed.iff";
|
||||
deed1 = (Harvester_Deed)core.objectService.createObject(templateString, planet);
|
||||
deed1.setOutputHopperCapacity(27344);
|
||||
deed1.setBER(5);
|
||||
deed1.setAttributes();
|
||||
inventory.add(deed1);
|
||||
|
||||
templateString="object/tangible/deed/harvester_deed/shared_harvester_gas_deed_medium.iff";
|
||||
deed1 = (Harvester_Deed)core.objectService.createObject(templateString, planet);
|
||||
deed1.setOutputHopperCapacity(27344);
|
||||
deed1.setBER(11);
|
||||
deed1.setAttributes();
|
||||
inventory.add(deed1);
|
||||
|
||||
templateString="object/tangible/deed/harvester_deed/shared_harvester_gas_deed_heavy.iff";
|
||||
deed1 = (Harvester_Deed)core.objectService.createObject(templateString, planet);
|
||||
deed1.setOutputHopperCapacity(135400);
|
||||
deed1.setBER(14);
|
||||
deed1.setAttributes();
|
||||
inventory.add(deed1);
|
||||
|
||||
templateString="object/tangible/deed/harvester_deed/shared_harvester_gas_deed_elite.iff";
|
||||
deed1 = (Harvester_Deed)core.objectService.createObject(templateString, planet);
|
||||
deed1.setOutputHopperCapacity(250000);
|
||||
deed1.setBER(44);
|
||||
deed1.setAttributes();
|
||||
inventory.add(deed1);
|
||||
|
||||
|
||||
// Water
|
||||
templateString="object/tangible/deed/harvester_deed/shared_harvester_moisture_deed.iff";
|
||||
deed1 = (Harvester_Deed)core.objectService.createObject(templateString, planet);
|
||||
deed1.setOutputHopperCapacity(27344);
|
||||
deed1.setBER(5);
|
||||
deed1.setAttributes();
|
||||
inventory.add(deed1);
|
||||
|
||||
templateString="object/tangible/deed/harvester_deed/shared_harvester_moisture_deed_medium.iff";
|
||||
deed1 = (Harvester_Deed)core.objectService.createObject(templateString, planet);
|
||||
deed1.setOutputHopperCapacity(27344);
|
||||
deed1.setBER(11);
|
||||
deed1.setAttributes();
|
||||
inventory.add(deed1);
|
||||
|
||||
templateString="object/tangible/deed/harvester_deed/shared_harvester_moisture_deed_heavy.iff";
|
||||
deed1 = (Harvester_Deed)core.objectService.createObject(templateString, planet);
|
||||
deed1.setOutputHopperCapacity(135400);
|
||||
deed1.setBER(14);
|
||||
deed1.setAttributes();
|
||||
inventory.add(deed1);
|
||||
|
||||
templateString="object/tangible/deed/harvester_deed/shared_harvester_moisture_deed_elite.iff";
|
||||
deed1 = (Harvester_Deed)core.objectService.createObject(templateString, planet);
|
||||
deed1.setOutputHopperCapacity(250000);
|
||||
deed1.setBER(44);
|
||||
deed1.setAttributes();
|
||||
inventory.add(deed1);
|
||||
|
||||
|
||||
// Generators
|
||||
templateString="object/tangible/deed/generator_deed/shared_generator_fusion_deed.iff";
|
||||
deed1 = (Harvester_Deed)core.objectService.createObject(templateString, planet);
|
||||
deed1.setOutputHopperCapacity(250000);
|
||||
deed1.setBER(19);
|
||||
deed1.setAttributes();
|
||||
inventory.add(deed1);
|
||||
|
||||
templateString="object/tangible/deed/generator_deed/shared_generator_wind_deed.iff";
|
||||
deed1 = (Harvester_Deed)core.objectService.createObject(templateString, planet);
|
||||
deed1.setOutputHopperCapacity(250000);
|
||||
deed1.setBER(10);
|
||||
deed1.setAttributes();
|
||||
inventory.add(deed1);
|
||||
|
||||
templateString="object/tangible/deed/generator_deed/shared_generator_solar_deed.iff";
|
||||
deed1 = (Harvester_Deed)core.objectService.createObject(templateString, planet);
|
||||
deed1.setOutputHopperCapacity(250000);
|
||||
deed1.setBER(15);
|
||||
deed1.setAttributes();
|
||||
inventory.add(deed1);
|
||||
|
||||
// templateString="object/tangible/deed/generator_deed/shared_generator_photo_bio_deed.iff";
|
||||
// deed1 = (Harvester_Deed)core.objectService.createObject(templateString, planet);
|
||||
// deed1.setOutputHopperCapacity(250000);
|
||||
// deed1.setBER(19);
|
||||
// inventory.add(deed1);
|
||||
|
||||
templateString="object/tangible/deed/generator_deed/shared_generator_geothermal_deed.iff";
|
||||
deed1 = (Harvester_Deed)core.objectService.createObject(templateString, planet);
|
||||
deed1.setOutputHopperCapacity(250000);
|
||||
deed1.setBER(15);
|
||||
deed1.setAttributes();
|
||||
inventory.add(deed1);
|
||||
|
||||
break;
|
||||
case 112:
|
||||
core.resourceService.spawnSpecificResourceContainer("Radioactive", player, 100000);
|
||||
break;
|
||||
case 120:
|
||||
SWGObject houseDeed = core.objectService.createObject("object/tangible/deed/player_house_deed/shared_generic_house_small_deed.iff", planet);
|
||||
inventory.add(houseDeed);
|
||||
return;
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
@@ -2,10 +2,8 @@ package services;
|
||||
|
||||
import java.nio.ByteOrder;
|
||||
import java.util.HashMap;
|
||||
import java.util.Iterator;
|
||||
import java.util.Map;
|
||||
import java.util.Map.Entry;
|
||||
import java.util.Random;
|
||||
import java.util.Vector;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
import java.util.concurrent.Executors;
|
||||
@@ -19,25 +17,18 @@ import org.apache.mina.core.buffer.IoBuffer;
|
||||
import org.apache.mina.core.session.IoSession;
|
||||
|
||||
import protocol.swg.ObjControllerMessage;
|
||||
import protocol.swg.OkMessage;
|
||||
import protocol.swg.PlayClientEffectObjectMessage;
|
||||
import protocol.swg.objectControllerObjects.BuffBuilderChangeMessage;
|
||||
import protocol.swg.objectControllerObjects.BuffBuilderEndMessage;
|
||||
import protocol.swg.objectControllerObjects.BuffBuilderStartMessage;
|
||||
import protocol.swg.objectControllerObjects.ImageDesignMessage;
|
||||
import resources.common.BuffBuilder;
|
||||
import resources.common.Console;
|
||||
import resources.common.IDAttribute;
|
||||
import resources.common.MathUtilities;
|
||||
import resources.common.ObjControllerOpcodes;
|
||||
import resources.common.Performance;
|
||||
import resources.common.PerformanceEffect;
|
||||
import resources.common.RGB;
|
||||
import resources.common.StringUtilities;
|
||||
import resources.datatables.Posture;
|
||||
import resources.objects.Buff;
|
||||
import resources.objects.BuffItem;
|
||||
import resources.objects.SWGList;
|
||||
import resources.objects.SkillMod;
|
||||
import resources.objects.creature.CreatureObject;
|
||||
import resources.objects.player.PlayerObject;
|
||||
@@ -45,7 +36,6 @@ import resources.objects.tangible.TangibleObject;
|
||||
import resources.visitors.IDManagerVisitor;
|
||||
import services.sui.SUIService.InputBoxType;
|
||||
import services.sui.SUIWindow;
|
||||
import services.sui.SUIWindow.SUICallback;
|
||||
import services.sui.SUIWindow.Trigger;
|
||||
import engine.clientdata.ClientFileManager;
|
||||
import engine.clientdata.visitors.DatatableVisitor;
|
||||
|
||||
@@ -35,7 +35,6 @@ import java.util.Map.Entry;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
import java.util.TreeMap;
|
||||
|
||||
import org.python.antlr.ast.Str;
|
||||
import org.python.core.Py;
|
||||
import org.python.core.PyObject;
|
||||
|
||||
@@ -46,9 +45,7 @@ import engine.resources.objects.SWGObject;
|
||||
import engine.resources.service.INetworkDispatch;
|
||||
import engine.resources.service.INetworkRemoteEvent;
|
||||
import resources.objects.player.PlayerObject;
|
||||
import resources.objects.tangible.TangibleObject;
|
||||
import services.equipment.BonusSetTemplate;
|
||||
import services.spawn.MobileTemplate;
|
||||
|
||||
public class EquipmentService implements INetworkDispatch {
|
||||
|
||||
|
||||
@@ -28,7 +28,6 @@ import java.util.Map;
|
||||
import resources.objects.Buff;
|
||||
import resources.objects.creature.CreatureObject;
|
||||
import resources.objects.group.GroupObject;
|
||||
import services.chat.ChatRoom;
|
||||
import main.NGECore;
|
||||
import engine.clients.Client;
|
||||
import engine.resources.objects.SWGObject;
|
||||
|
||||
@@ -36,7 +36,6 @@ import java.util.concurrent.TimeUnit;
|
||||
import resources.objects.building.BuildingObject;
|
||||
import resources.objects.creature.CreatureObject;
|
||||
import resources.objects.group.GroupObject;
|
||||
import services.object.ObjectService;
|
||||
import main.NGECore;
|
||||
|
||||
import engine.clientdata.ClientFileManager;
|
||||
|
||||
@@ -0,0 +1,521 @@
|
||||
/*******************************************************************************
|
||||
* Copyright (c) 2013 <Project SWG>
|
||||
*
|
||||
* This File is part of NGECore2.
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser 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 Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
* Using NGEngine to work with NGECore2 is making a combined work based on NGEngine.
|
||||
* Therefore all terms and conditions of the GNU Lesser General Public License cover the combination.
|
||||
******************************************************************************/
|
||||
package services;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.nio.file.DirectoryStream;
|
||||
import java.nio.file.DirectoryStream.Filter;
|
||||
import java.nio.file.FileSystems;
|
||||
import java.nio.file.Files;
|
||||
import java.nio.file.LinkOption;
|
||||
import java.nio.file.Path;
|
||||
import java.nio.file.Paths;
|
||||
import java.nio.file.attribute.BasicFileAttributeView;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Random;
|
||||
import java.util.Vector;
|
||||
|
||||
import resources.objects.creature.CreatureObject;
|
||||
import resources.objects.group.GroupObject;
|
||||
import resources.objects.loot.LootGroup;
|
||||
import resources.objects.loot.LootRollSession;
|
||||
import resources.objects.tangible.TangibleObject;
|
||||
import main.NGECore;
|
||||
import engine.resources.objects.SWGObject;
|
||||
import engine.resources.scene.Planet;
|
||||
import engine.resources.service.INetworkDispatch;
|
||||
import engine.resources.service.INetworkRemoteEvent;
|
||||
|
||||
/**
|
||||
* @author Charon
|
||||
*/
|
||||
|
||||
public class LootService implements INetworkDispatch {
|
||||
|
||||
private NGECore core;
|
||||
|
||||
public LootService(NGECore core) {
|
||||
this.core = core;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void insertOpcodes(Map<Integer, INetworkRemoteEvent> swgOpcodes, Map<Integer, INetworkRemoteEvent> objControllerOpcodes) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void shutdown() {
|
||||
|
||||
}
|
||||
|
||||
public void handleLootRequest(CreatureObject requester, TangibleObject lootedObject) {
|
||||
|
||||
GroupObject group = (GroupObject) core.objectService.getObject(requester.getGroupId());
|
||||
|
||||
if (lootedObject.isLooted() || lootedObject.isLootLock() || (group == null && !lootedObject.getKiller().equals(requester)) || (group != null && !group.getMemberList().contains(lootedObject.getKiller())))
|
||||
return;
|
||||
|
||||
lootedObject.setLootLock(true);
|
||||
|
||||
if (requester.getCustomName().contains("Kun")){
|
||||
requester.setCashCredits(requester.getCashCredits()+1);
|
||||
requester.sendSystemMessage("You looted 1 credit.", (byte)1);
|
||||
lootedObject.setLooted(true);
|
||||
return;
|
||||
}
|
||||
|
||||
LootRollSession lootRollSession = new LootRollSession(requester,lootedObject);
|
||||
|
||||
handleCreditDrop(requester,lootedObject);
|
||||
|
||||
lootSituationAssessment(requester,lootedObject,lootRollSession);
|
||||
|
||||
CreatureObject lootedCreature = (CreatureObject) lootedObject;
|
||||
|
||||
//TreeSet<TreeMap<String,Integer>> lootSpec = lootedObject.getLootSpecification();
|
||||
List<LootGroup> lootGroups = lootedCreature.getLootGroups();
|
||||
System.out.println("lootGroups size " + lootGroups.size());
|
||||
Iterator<LootGroup> iterator = lootGroups.iterator();
|
||||
|
||||
while (iterator.hasNext()){
|
||||
LootGroup lootGroup = iterator.next();
|
||||
int groupChance = lootGroup.getLootGroupChance();
|
||||
int lootGroupRoll = new Random().nextInt(100);
|
||||
if (lootGroupRoll <= groupChance){
|
||||
System.out.println("this lootGroup will drop something");
|
||||
handleLootGroup(lootGroup,lootRollSession); //this lootGroup will drop something e.g. {kraytpearl_range,krayt_tissue_rare}
|
||||
}
|
||||
}
|
||||
|
||||
// Rare Loot System Stage (Is in place for all looted creatures)
|
||||
if (lootRollSession.isAllowRareLoot()){
|
||||
int randomRareLoot = new Random().nextInt(100);
|
||||
int chanceRequirement = 1;
|
||||
if (lootRollSession.isIncreasedRLSChance())
|
||||
chanceRequirement+=3; // RLS chance is at 4% for groupsize >= 4
|
||||
if (randomRareLoot <= chanceRequirement){
|
||||
handleRareLootChest(lootRollSession);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// ********** Phase 1 complete, loot items determined **********
|
||||
// stored in the lootSession
|
||||
|
||||
// Distribute the loot drops according to group loot rules
|
||||
// For now just spawn items into requester's inventory
|
||||
|
||||
if (lootRollSession.getErrorMessages().size()>0){
|
||||
for (String msg : lootRollSession.getErrorMessages()){
|
||||
// ToDo: Show this for each group member later!
|
||||
requester.sendSystemMessage(msg,(byte) 1);
|
||||
lootedObject.setLootLock(false);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
SWGObject requesterInventory = requester.getSlottedObject("inventory");
|
||||
|
||||
for (TangibleObject droppedItem : lootRollSession.getDroppedItems()){
|
||||
|
||||
requesterInventory.add(droppedItem);
|
||||
if (droppedItem.getAttachment("LootItemName").toString().contains("Loot Chest")){
|
||||
requester.playEffectObject("clienteffect/level_granted.cef", "");
|
||||
}
|
||||
}
|
||||
|
||||
lootedObject.setLooted(true);
|
||||
|
||||
|
||||
// ToDo: Group loot settings etc. actual loot chance was lootgroupchance*lootchance
|
||||
}
|
||||
|
||||
|
||||
private void handleLootGroup(LootGroup lootGroup,LootRollSession lootRollSession){
|
||||
|
||||
int[] lootPoolChances = lootGroup.getLootPoolChances();
|
||||
String[] lootPoolNames = lootGroup.getLootPoolNames();
|
||||
if (lootPoolChances==null || lootPoolNames==null){
|
||||
System.err.println("Lootpools are null!");
|
||||
return;
|
||||
}
|
||||
if (lootPoolChances.length==0 || lootPoolNames.length==0){
|
||||
System.err.println("No Lootpools in Lootgroup!");
|
||||
return;
|
||||
}
|
||||
|
||||
int randomItemFromGroup = new Random().nextInt(100);
|
||||
int remainder = 0; // [10,20,30,34,5,1]
|
||||
|
||||
for(int i=0;i<lootPoolChances.length;i++) {
|
||||
remainder += lootPoolChances[i];
|
||||
if (randomItemFromGroup <= remainder){
|
||||
System.out.println("this loot pool will drop something"); // e.g. kraytpearl_range
|
||||
handleLootPool(lootPoolNames[i],lootRollSession); // This loot pool will drop something
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void handleLootPool(String poolName,LootRollSession lootRollSession){
|
||||
|
||||
// Fetch the loot pool data from the poolName.py script
|
||||
String path = "scripts/loot/lootPools/"+poolName.toLowerCase();
|
||||
Vector<String> itemNames = (Vector<String>)core.scriptService.fetchStringVector(path,"itemNames");
|
||||
|
||||
for (String s : itemNames){
|
||||
System.out.println("template: " + s);
|
||||
}
|
||||
|
||||
Vector<Integer> itemChances = (Vector<Integer>)core.scriptService.fetchIntegerVector(path,"itemChances");
|
||||
|
||||
int randomItemFromPool = new Random().nextInt(100);
|
||||
int remainder = 0; // [10,20,30,34,5,1]
|
||||
|
||||
for (int i=0;i<itemNames.size();i++){
|
||||
remainder += itemChances.get(i);
|
||||
if (randomItemFromPool<=remainder){
|
||||
// this element has been chosen e.g. kraytpearl_flawless
|
||||
handleLootPoolItems(itemNames.get(i), lootRollSession);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static class DirectoriesFilter implements Filter<Path> {
|
||||
@Override
|
||||
public boolean accept(Path entry) throws IOException {
|
||||
return Files.isDirectory(entry);
|
||||
}
|
||||
}
|
||||
|
||||
private void handleLootPoolItems(String itemName,LootRollSession lootRollSession){
|
||||
|
||||
List<String> subfolders = new ArrayList<String>(); // Consider all sub-folders
|
||||
try (DirectoryStream<Path> ds = Files.newDirectoryStream(FileSystems.getDefault().getPath("scripts/loot/lootItems/"), new DirectoriesFilter())) {
|
||||
for (Path p : ds) {
|
||||
subfolders.add(p.getFileName().toString());
|
||||
}
|
||||
} catch (IOException e) {
|
||||
lootRollSession.addErrorMessage("File system check caused an error. Please contact Charon about this issue.");
|
||||
return;
|
||||
}
|
||||
|
||||
String itemPath = "scripts/loot/lootItems/"+itemName.toLowerCase()+".py";
|
||||
File file = new File(itemPath);
|
||||
if (!file.isFile()){
|
||||
for (String subfolderName : subfolders){
|
||||
itemPath = "scripts/loot/lootItems/"+ subfolderName +"/"+itemName.toLowerCase()+".py";
|
||||
File subfile = new File(itemPath);
|
||||
if (subfile.isFile())
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
File checkfile = new File(itemPath);
|
||||
if (!checkfile.isFile()){
|
||||
String errorMessage = "Loot item '" + itemName + "' not found in file system. Please contact Charon about this issue.";
|
||||
lootRollSession.addErrorMessage(errorMessage);
|
||||
return;
|
||||
}
|
||||
|
||||
itemPath = itemPath.substring(0, itemPath.length()-3); // remove the file type
|
||||
|
||||
String customName = "";
|
||||
String itemTemplate = "";
|
||||
int stackCount = 1;
|
||||
Vector<String> customizationAttributes = null;
|
||||
Vector<Integer> customizationValues = null;
|
||||
|
||||
if(core.scriptService.getMethod(itemPath,"","itemTemplate")==null){
|
||||
String errorMessage = "Loot item '" + itemName + "' has no template function assigned in its script. Please contact Charon about this issue.";
|
||||
lootRollSession.addErrorMessage(errorMessage);
|
||||
return;
|
||||
}
|
||||
|
||||
itemTemplate = (String)core.scriptService.fetchString(itemPath,"itemTemplate");
|
||||
|
||||
// only consider the following variables, if they are in the python-script file
|
||||
if(core.scriptService.getMethod(itemPath,"","customItemName")!=null)
|
||||
customName = (String)core.scriptService.fetchString(itemPath,"customItemName");
|
||||
|
||||
if(core.scriptService.getMethod(itemPath,"","customItemStackCount")!=null)
|
||||
stackCount = (Integer)core.scriptService.fetchInteger(itemPath,"customItemStackCount");
|
||||
|
||||
if(core.scriptService.getMethod(itemPath,"","customizationAttributes")!=null)
|
||||
customizationAttributes = (Vector<String>)core.scriptService.fetchStringVector(itemPath,"customizationAttributes");
|
||||
|
||||
if(core.scriptService.getMethod(itemPath,"","customizationValues")!=null)
|
||||
customizationValues = (Vector<Integer>)core.scriptService.fetchIntegerVector(itemPath,"customizationValues");
|
||||
|
||||
System.out.println("itemTemplate " + itemTemplate);
|
||||
|
||||
TangibleObject droppedItem = createDroppedItem(itemTemplate,lootRollSession.getSessionPlanet());
|
||||
|
||||
droppedItem.setAttachment("LootItemName", itemName);
|
||||
handleCustomDropName(droppedItem,customName);
|
||||
handleStats(droppedItem);
|
||||
setCustomization(droppedItem, itemName);
|
||||
handleSpecialItems(droppedItem,itemName);
|
||||
|
||||
lootRollSession.addDroppedItem(droppedItem);
|
||||
}
|
||||
|
||||
private void handleCustomDropName(TangibleObject droppedItem,String customName) {
|
||||
// String customItemName = droppedItem.getCustomName();
|
||||
// if (customName.charAt(0) == '@' || customName.contains("_n:")) {
|
||||
// if (customName!=null) {
|
||||
// customName = ""; // Look the name up in some tre table
|
||||
// }
|
||||
// }
|
||||
droppedItem.setCustomName(customName);
|
||||
}
|
||||
|
||||
private TangibleObject createDroppedItem(String template,Planet planet){
|
||||
TangibleObject droppedItem = (TangibleObject) core.objectService.createObject(template, planet);
|
||||
System.out.println("droppedItem " + droppedItem);
|
||||
return droppedItem;
|
||||
}
|
||||
|
||||
private void handleRareLootChest(LootRollSession lootRollSession){
|
||||
|
||||
TangibleObject droppedItem = null;
|
||||
|
||||
int legendaryRoll = new Random().nextInt(100);
|
||||
int exceptionalRoll = new Random().nextInt(100);
|
||||
int chancemodifier = 0;
|
||||
if (lootRollSession.isIncreasedRLSChance())
|
||||
chancemodifier += 15;
|
||||
|
||||
if (legendaryRoll<2+chancemodifier){
|
||||
String itemTemplate="object/tangible/item/shared_rare_loot_chest_3.iff";
|
||||
droppedItem = createDroppedItem(itemTemplate,lootRollSession.getSessionPlanet());
|
||||
String itemName = "Legendary Loot Chest";
|
||||
droppedItem.setStfFilename("loot_n");
|
||||
droppedItem.setStfName("rare_loot_chest_3_n");
|
||||
droppedItem.setDetailFilename("loot_n");
|
||||
droppedItem.setDetailName("rare_loot_chest_3_d");
|
||||
droppedItem.setAttachment("LootItemName", itemName);
|
||||
droppedItem.getAttributes().put("@obj_attr_n:rare_loot_category", "\\#D1F56F Rare Item \\#FFFFFF ");
|
||||
fillLegendaryChest(droppedItem);
|
||||
|
||||
} else if (exceptionalRoll<10+chancemodifier){
|
||||
String itemTemplate="object/tangible/item/shared_rare_loot_chest_2.iff";
|
||||
droppedItem = createDroppedItem(itemTemplate,lootRollSession.getSessionPlanet());
|
||||
String itemName = "Exceptional Loot Chest";
|
||||
droppedItem.setStfFilename("loot_n");
|
||||
droppedItem.setStfName("rare_loot_chest_2_n");
|
||||
droppedItem.setDetailFilename("loot_n");
|
||||
droppedItem.setDetailName("rare_loot_chest_2_d");
|
||||
droppedItem.setAttachment("LootItemName", itemName);
|
||||
droppedItem.getAttributes().put("@obj_attr_n:rare_loot_category", "\\#D1F56F Rare Item \\#FFFFFF ");
|
||||
fillExceptionalChest(droppedItem);
|
||||
} else {
|
||||
String itemTemplate="object/tangible/item/shared_rare_loot_chest_1.iff";
|
||||
droppedItem = createDroppedItem(itemTemplate,lootRollSession.getSessionPlanet());
|
||||
String itemName = "Rare Loot Chest";
|
||||
droppedItem.setStfFilename("loot_n");
|
||||
droppedItem.setStfName("rare_loot_chest_1_n");
|
||||
droppedItem.setDetailFilename("loot_n");
|
||||
droppedItem.setDetailName("rare_loot_chest_1_d");
|
||||
droppedItem.setAttachment("LootItemName", itemName);
|
||||
droppedItem.getAttributes().put("@obj_attr_n:rare_loot_category", "\\#D1F56F Rare Item \\#FFFFFF ");
|
||||
fillRareChest(droppedItem);
|
||||
}
|
||||
|
||||
lootRollSession.addDroppedItem(droppedItem);
|
||||
}
|
||||
|
||||
private void fillLegendaryChest(TangibleObject droppedItem){
|
||||
|
||||
}
|
||||
|
||||
private void fillExceptionalChest(TangibleObject droppedItem){
|
||||
|
||||
}
|
||||
|
||||
private void fillRareChest(TangibleObject droppedItem){
|
||||
|
||||
}
|
||||
|
||||
private void setCustomization(TangibleObject droppedItem,String itemName) {
|
||||
|
||||
// Example color crystal
|
||||
if (itemName.contains("colorcrystal")) {
|
||||
System.out.println("colorcrystal");
|
||||
droppedItem.setCustomizationVariable("/private/index_color_1", (byte) new Random().nextInt(11));
|
||||
}
|
||||
|
||||
// Example power crystal
|
||||
if (itemName.contains("powercrystal")) {
|
||||
System.out.println("powercrystal");
|
||||
droppedItem.setCustomizationVariable("/private/index_color_1", (byte) 0x21); // 0x1F
|
||||
}
|
||||
|
||||
// More general
|
||||
// String path = "scripts/loot/lootItems/"+droppedItem.getCustomName().toLowerCase();
|
||||
// Vector<String> customizationPaths = (Vector<String>)core.scriptService.fetchStringVector(path,"itemCustomizationPaths");
|
||||
// Vector<Integer> customizationValues = (Vector<Integer>)core.scriptService.fetchIntegerVector(path,"itemCustomizationValues");
|
||||
// for (int i=0;i<customizationPaths.size();i++){
|
||||
// String attributePath = customizationPaths.get(i);
|
||||
// int attributeValue = customizationValues.get(i);
|
||||
// droppedItem.setCustomizationVariable(attributePath, (byte)attributeValue);
|
||||
// }
|
||||
}
|
||||
|
||||
private void handleSpecialItems(TangibleObject droppedItem,String itemName) {
|
||||
if (itemName.contains("kraytpearl")){
|
||||
handleKraytPearl(droppedItem);
|
||||
}
|
||||
if (itemName.contains("powercrystal")){
|
||||
handlePowerCrystal(droppedItem);
|
||||
}
|
||||
}
|
||||
|
||||
private void handleStats(TangibleObject droppedItem) {
|
||||
// ToDo: Min,Max for weapons , Dots on weapons etc.
|
||||
// This must be considered for the python scripts as well
|
||||
// So basically every item needs to have loot-related data in their py scripts as well
|
||||
|
||||
|
||||
}
|
||||
|
||||
private void handleCreditDrop(CreatureObject requester,TangibleObject lootedObject){
|
||||
int lootedCredits = 0;
|
||||
// Credit drop is depending on the CL of the looted CreatureObject
|
||||
// or if explicitely assigned in the .py script
|
||||
if (lootedObject instanceof CreatureObject){
|
||||
CreatureObject lootedCreature = (CreatureObject) lootedObject;
|
||||
int creatureCL = lootedCreature.getLevel();
|
||||
creatureCL = 90;
|
||||
int maximalCredits = (int)Math.floor(4*creatureCL + creatureCL*creatureCL*4/100);
|
||||
int minimalCredits = (int)Math.floor(creatureCL*2 + maximalCredits/2);
|
||||
int spanOfCredits = maximalCredits - minimalCredits;
|
||||
lootedCredits = minimalCredits + new Random().nextInt(spanOfCredits);
|
||||
requester.setCashCredits(requester.getCashCredits()+lootedCredits);
|
||||
requester.sendSystemMessage("You looted " + lootedCredits + " credits.", (byte)1);
|
||||
}
|
||||
|
||||
if (lootedObject instanceof TangibleObject){
|
||||
// This is for chests etc.
|
||||
// Check the py script
|
||||
}
|
||||
}
|
||||
|
||||
private void lootSituationAssessment(CreatureObject requester,TangibleObject lootedObject, LootRollSession lootRollSession){
|
||||
|
||||
// reserved for possible necessities
|
||||
}
|
||||
|
||||
// ************* Special items ************
|
||||
private void handleKraytPearl(TangibleObject droppedItem) {
|
||||
|
||||
String itemName = (String)droppedItem.getAttachment("LootItemName");
|
||||
String qualityString = "";
|
||||
switch (itemName) {
|
||||
case "kraytpearl_cracked":
|
||||
droppedItem.setStfFilename("static_item_n");
|
||||
droppedItem.setStfName("item_junk_imitation_pearl_01_02");
|
||||
droppedItem.setDetailFilename("static_item_d");
|
||||
droppedItem.setDetailName("item_junk_imitation_pearl_01_02");
|
||||
return;
|
||||
case "kraytpearl_scratched":
|
||||
droppedItem.setStfFilename("static_item_n");
|
||||
droppedItem.setStfName("item_junk_imitation_pearl_01_01");
|
||||
droppedItem.setDetailFilename("static_item_d");
|
||||
droppedItem.setDetailName("item_junk_imitation_pearl_01_01");
|
||||
return;
|
||||
case "kraytpearl_poor":
|
||||
qualityString="Poor";
|
||||
break;
|
||||
case "kraytpearl_fair":
|
||||
qualityString="Fair";
|
||||
break;
|
||||
case "kraytpearl_good":
|
||||
qualityString="Good";
|
||||
break;
|
||||
case "kraytpearl_quality":
|
||||
qualityString="Quality";
|
||||
break;
|
||||
case "kraytpearl_select":
|
||||
qualityString="Select";
|
||||
break;
|
||||
case "kraytpearl_premium":
|
||||
qualityString="Premium";
|
||||
break;
|
||||
case "kraytpearl_flawless":
|
||||
qualityString="Flawless";
|
||||
break;
|
||||
default:
|
||||
qualityString="Undetermined";
|
||||
break;
|
||||
}
|
||||
droppedItem.getAttributes().put("@obj_attr_n:condition", "100/100");
|
||||
droppedItem.getAttributes().put("@obj_attr_n:crystal_owner", "\\#D1F56F UNTUNED \\#FFFFFF ");
|
||||
droppedItem.getAttributes().put("@obj_attr_n:crystal_quality", qualityString);
|
||||
droppedItem.setAttachment("radial_filename", "tunable");
|
||||
}
|
||||
|
||||
private void handlePowerCrystal(TangibleObject droppedItem) {
|
||||
|
||||
String itemName = (String)droppedItem.getAttachment("LootItemName");
|
||||
String qualityString = "";
|
||||
switch (itemName) {
|
||||
|
||||
case "powercrystal_poor":
|
||||
qualityString="Poor";
|
||||
break;
|
||||
case "powercrystal_fair":
|
||||
qualityString="Fair";
|
||||
break;
|
||||
case "powercrystal_good":
|
||||
qualityString="Good";
|
||||
break;
|
||||
case "powercrystal_quality":
|
||||
qualityString="Quality";
|
||||
break;
|
||||
case "powercrystal_select":
|
||||
qualityString="Select";
|
||||
break;
|
||||
case "powercrystal_premium":
|
||||
qualityString="Premium";
|
||||
break;
|
||||
case "powercrystal_flawless":
|
||||
qualityString="Flawless";
|
||||
break;
|
||||
case "powercrystal_perfect":
|
||||
qualityString="Perfect";
|
||||
break;
|
||||
default:
|
||||
qualityString="Undetermined";
|
||||
break;
|
||||
}
|
||||
droppedItem.getAttributes().put("@obj_attr_n:condition", "100/100");
|
||||
droppedItem.getAttributes().put("@obj_attr_n:crystal_owner", "\\#D1F56F UNTUNED \\#FFFFFF ");
|
||||
droppedItem.getAttributes().put("@obj_attr_n:crystal_quality", qualityString);
|
||||
droppedItem.setAttachment("radial_filename", "tunable");
|
||||
}
|
||||
}
|
||||
@@ -24,7 +24,6 @@ package services;
|
||||
import java.nio.ByteOrder;
|
||||
import java.util.Map;
|
||||
import java.util.Random;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
import java.util.concurrent.atomic.AtomicInteger;
|
||||
|
||||
import main.NGECore;
|
||||
@@ -44,7 +43,6 @@ import engine.clientdata.visitors.DatatableVisitor;
|
||||
import engine.clients.Client;
|
||||
import engine.resources.container.Traverser;
|
||||
import engine.resources.objects.SWGObject;
|
||||
import engine.resources.scene.Planet;
|
||||
import engine.resources.service.INetworkDispatch;
|
||||
import engine.resources.service.INetworkRemoteEvent;
|
||||
|
||||
|
||||
@@ -21,6 +21,9 @@
|
||||
******************************************************************************/
|
||||
package services;
|
||||
|
||||
import java.util.Iterator;
|
||||
import java.util.Vector;
|
||||
|
||||
import org.python.core.Py;
|
||||
import org.python.core.PyObject;
|
||||
import org.python.util.PythonInterpreter;
|
||||
@@ -107,4 +110,34 @@ public class ScriptService {
|
||||
return func;
|
||||
}
|
||||
|
||||
public String fetchString(String path, String method) {
|
||||
PyObject result = core.scriptService.callScript(path, "", method);
|
||||
return ((PyObject)result).asString();
|
||||
}
|
||||
|
||||
public int fetchInteger(String path, String method) {
|
||||
PyObject result = core.scriptService.callScript(path, "", method);
|
||||
return ((PyObject)result).asInt();
|
||||
}
|
||||
|
||||
public Vector<String> fetchStringVector(String path, String method) {
|
||||
Vector<String> vector = new Vector<String>();
|
||||
PyObject result = core.scriptService.callScript(path, "", method);
|
||||
Iterable<PyObject> comp = (Iterable<PyObject>)result.asIterable();
|
||||
for (Iterator<PyObject> temp = comp.iterator(); temp.hasNext();){
|
||||
vector.add(temp.next().asString());
|
||||
}
|
||||
return vector;
|
||||
}
|
||||
|
||||
public Vector<Integer> fetchIntegerVector(String path, String method) {
|
||||
Vector<Integer> vector = new Vector<Integer>();
|
||||
PyObject result = core.scriptService.callScript(path, "", method);
|
||||
Iterable<PyObject> comp = (Iterable<PyObject>)result.asIterable();
|
||||
for (Iterator<PyObject> temp = comp.iterator(); temp.hasNext();){
|
||||
vector.add(temp.next().asInt());
|
||||
}
|
||||
return vector;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -60,15 +60,15 @@ import engine.resources.scene.Quaternion;
|
||||
import engine.resources.scene.quadtree.QuadTree;
|
||||
import engine.resources.service.INetworkDispatch;
|
||||
import engine.resources.service.INetworkRemoteEvent;
|
||||
import protocol.swg.ChatFriendsListUpdate;
|
||||
import protocol.swg.ChatOnChangeFriendStatus;
|
||||
import protocol.swg.ChatOnGetFriendsList;
|
||||
import protocol.swg.CmdStartScene;
|
||||
import protocol.swg.HeartBeatMessage;
|
||||
import protocol.swg.ObjControllerMessage;
|
||||
import protocol.swg.OpenedContainerMessage;
|
||||
import protocol.swg.UpdateTransformMessage;
|
||||
import protocol.swg.UpdateTransformWithParentMessage;
|
||||
import protocol.swg.chat.ChatFriendsListUpdate;
|
||||
import protocol.swg.chat.ChatOnChangeFriendStatus;
|
||||
import protocol.swg.chat.ChatOnGetFriendsList;
|
||||
import protocol.swg.objectControllerObjects.DataTransform;
|
||||
import protocol.swg.objectControllerObjects.DataTransformWithParent;
|
||||
import protocol.swg.objectControllerObjects.TargetUpdate;
|
||||
@@ -809,7 +809,9 @@ public class SimulationService implements INetworkDispatch {
|
||||
PlayerObject ghost = (PlayerObject) object.getSlottedObject("ghost");
|
||||
|
||||
core.weatherService.sendWeather(object);
|
||||
|
||||
|
||||
//core.chatService.joinChatRoom(object.getCustomName().toLowerCase(), "SWG." + core.getGalaxyName() + "." + object.getPlanet().getName());
|
||||
|
||||
if (!object.hasSkill(ghost.getProfessionWheelPosition())) {
|
||||
object.showFlyText("cbt_spam", "skill_up", (float) 2.5, new RGB(154, 205, 50), 0);
|
||||
object.playEffectObject("clienteffect/skill_granted.cef", "");
|
||||
@@ -886,6 +888,24 @@ public class SimulationService implements INetworkDispatch {
|
||||
|
||||
}
|
||||
|
||||
public void transform(TangibleObject obj, Point3D position)
|
||||
{
|
||||
Point3D oldPosition = obj.getPosition();
|
||||
Point3D newPosition = new Point3D(oldPosition.x + position.x, oldPosition.y + position.y, oldPosition.z + position.z);
|
||||
|
||||
teleport(obj, newPosition, obj.getOrientation(), obj.getParentId());
|
||||
}
|
||||
|
||||
public void transform(SWGObject obj, float rotation, Point3D axis)
|
||||
{
|
||||
rotation *= (Math.PI / 180);
|
||||
|
||||
Quaternion oldRotation = obj.getOrientation();
|
||||
Quaternion newRotation = resources.common.MathUtilities.rotateQuaternion(oldRotation, rotation, axis);
|
||||
|
||||
teleport(obj, obj.getPosition(), newRotation, obj.getParentId());
|
||||
}
|
||||
|
||||
public void teleport(SWGObject obj, Point3D position, Quaternion orientation, long cellId) {
|
||||
|
||||
if(cellId == 0) {
|
||||
@@ -900,6 +920,9 @@ public class SimulationService implements INetworkDispatch {
|
||||
DataTransformWithParent dataTransform = new DataTransformWithParent(new Point3D(position.x, position.y, position.z), orientation, obj.getMovementCounter(), obj.getObjectID(), cellId);
|
||||
ObjControllerMessage objController = new ObjControllerMessage(0x1B, dataTransform);
|
||||
obj.notifyObservers(objController, true);
|
||||
|
||||
obj.setPosition(position);
|
||||
obj.setOrientation(orientation);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -22,7 +22,6 @@
|
||||
package services;
|
||||
|
||||
import java.util.Map;
|
||||
import java.util.Observable;
|
||||
import java.util.Random;
|
||||
import java.util.Vector;
|
||||
import java.util.concurrent.Executors;
|
||||
@@ -31,27 +30,19 @@ import java.util.concurrent.ScheduledFuture;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
import protocol.swg.PlayClientEffectLocMessage;
|
||||
import protocol.swg.SceneCreateObjectByCrc;
|
||||
import protocol.swg.SceneEndBaselines;
|
||||
import protocol.swg.SurveyMapUpdateMessage;
|
||||
import protocol.swg.UpdateContainmentMessage;
|
||||
import resources.objects.creature.CreatureObject;
|
||||
import resources.objects.player.PlayerObject;
|
||||
import resources.objects.resource.GalacticResource;
|
||||
import resources.objects.resource.ResourceConcentration;
|
||||
import resources.objects.resource.ResourceContainerObject;
|
||||
import resources.objects.resource.ResourceRoot;
|
||||
import resources.objects.tangible.TangibleObject;
|
||||
import resources.objects.tool.SurveyTool;
|
||||
import resources.objects.waypoint.WaypointObject;
|
||||
import services.sui.SUIWindow;
|
||||
import services.sui.SUIWindow.SUICallback;
|
||||
import services.sui.SUIWindow.Trigger;
|
||||
import main.NGECore;
|
||||
import engine.resources.common.CRC;
|
||||
import engine.resources.container.Traverser;
|
||||
import engine.resources.objects.SWGObject;
|
||||
import engine.resources.scene.Point3D;
|
||||
import engine.resources.service.INetworkDispatch;
|
||||
import engine.resources.service.INetworkRemoteEvent;
|
||||
|
||||
@@ -479,7 +470,6 @@ public class SurveyService implements INetworkDispatch {
|
||||
returnList.add("List.lstList:SelectedRow");
|
||||
|
||||
window.addHandler(0, "", Trigger.TRIGGER_OK, returnList, new SUICallback() {
|
||||
@SuppressWarnings("unchecked")
|
||||
@Override
|
||||
public void process(SWGObject owner, int eventType, Vector<String> returnList) {
|
||||
int index = Integer.parseInt(returnList.get(0));
|
||||
@@ -627,7 +617,6 @@ public class SurveyService implements INetworkDispatch {
|
||||
final SurveyTool outerSurveyTool = (SurveyTool)target;
|
||||
|
||||
window.addHandler(0, "", Trigger.TRIGGER_OK, returnList, new SUICallback() {
|
||||
@SuppressWarnings("unchecked")
|
||||
@Override
|
||||
public void process(SWGObject owner, int eventType, Vector<String> returnList) {
|
||||
CreatureObject crafter = (CreatureObject)owner;
|
||||
@@ -673,14 +662,12 @@ public class SurveyService implements INetworkDispatch {
|
||||
final SurveyTool outerSurveyTool = (SurveyTool)target;
|
||||
|
||||
window.addHandler(0, "", Trigger.TRIGGER_OK, returnList, new SUICallback() {
|
||||
@SuppressWarnings("unchecked")
|
||||
@Override
|
||||
public void process(SWGObject owner, int eventType, Vector<String> returnList) {
|
||||
((CreatureObject)owner).sendSystemMessage("Rad confirmed", (byte) 0);
|
||||
}
|
||||
});
|
||||
window.addHandler(1, "", Trigger.TRIGGER_CANCEL, returnList, new SUICallback() {
|
||||
@SuppressWarnings("unchecked")
|
||||
@Override
|
||||
public void process(SWGObject owner, int eventType, Vector<String> returnList) {
|
||||
((CreatureObject)owner).sendSystemMessage("Rad declined", (byte) 0);
|
||||
|
||||
@@ -24,22 +24,16 @@ package services;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
|
||||
import resources.common.FileUtilities;
|
||||
import resources.common.collidables.CollidableCircle;
|
||||
import resources.objects.building.BuildingObject;
|
||||
import resources.objects.cell.CellObject;
|
||||
import resources.objects.creature.CreatureObject;
|
||||
|
||||
import engine.clientdata.ClientFileManager;
|
||||
import engine.clientdata.visitors.DatatableVisitor;
|
||||
import engine.resources.config.Config;
|
||||
import engine.resources.container.Traverser;
|
||||
import engine.resources.objects.SWGObject;
|
||||
import engine.resources.scene.Planet;
|
||||
import engine.resources.scene.Point3D;
|
||||
@@ -181,6 +175,12 @@ public class TerrainService {
|
||||
core.mapService.addPlanet(planet);
|
||||
noBuildAreas.put(planet, new ArrayList<CollidableCircle>());
|
||||
loadClientRegions(planet);
|
||||
|
||||
core.chatService.createChatRoom("", name, "system", true);
|
||||
core.chatService.createChatRoom("public chat for this planet, cannot create rooms here", name + ".Planet", "SYSTEM", true);
|
||||
core.chatService.createChatRoom("system messages for this planet, cannot create rooms here", name + ".system", "SYSTEM", true);
|
||||
|
||||
System.out.println("Created chat rooms for " + name);
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -22,7 +22,6 @@
|
||||
package services.ai;
|
||||
|
||||
import java.util.Map;
|
||||
import java.util.Map.Entry;
|
||||
import java.util.Vector;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
import java.util.concurrent.ScheduledExecutorService;
|
||||
@@ -42,7 +41,6 @@ import services.ai.states.AttackState;
|
||||
import services.ai.states.DeathState;
|
||||
import services.ai.states.IdleState;
|
||||
import services.ai.states.RetreatState;
|
||||
import services.ai.states.SpawnState;
|
||||
import services.combat.CombatEvents.DamageTaken;
|
||||
import services.spawn.MobileTemplate;
|
||||
|
||||
|
||||
@@ -26,14 +26,11 @@ import java.util.Map.Entry;
|
||||
import java.util.Random;
|
||||
import java.util.Vector;
|
||||
|
||||
import resources.objects.cell.CellObject;
|
||||
import resources.objects.creature.CreatureObject;
|
||||
import resources.objects.group.GroupObject;
|
||||
import resources.objects.player.PlayerObject;
|
||||
|
||||
import engine.resources.scene.Planet;
|
||||
import engine.resources.scene.Point3D;
|
||||
import engine.resources.scene.Quaternion;
|
||||
|
||||
import main.NGECore;
|
||||
|
||||
|
||||
@@ -29,6 +29,7 @@ public class DeathState extends AIState {
|
||||
@Override
|
||||
public byte onEnter(AIActor actor) {
|
||||
NGECore.getInstance().aiService.awardExperience(actor);
|
||||
actor.getCreature().setAttachment("radial_filename", "npc/corpse");
|
||||
actor.scheduleDespawn();
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -21,9 +21,7 @@
|
||||
******************************************************************************/
|
||||
package services.ai.states;
|
||||
|
||||
import resources.objects.creature.CreatureObject;
|
||||
import services.ai.AIActor;
|
||||
import services.ai.states.AIState.StateResult;
|
||||
|
||||
public class RetreatState extends AIState {
|
||||
|
||||
|
||||
@@ -21,16 +21,12 @@
|
||||
******************************************************************************/
|
||||
package services.chat;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Vector;
|
||||
|
||||
import resources.objects.creature.CreatureObject;
|
||||
|
||||
import com.sleepycat.persist.model.Entity;
|
||||
import com.sleepycat.persist.model.NotPersistent;
|
||||
import com.sleepycat.persist.model.PrimaryKey;
|
||||
import com.sleepycat.persist.model.Relationship;
|
||||
import com.sleepycat.persist.model.SecondaryKey;
|
||||
|
||||
@Entity
|
||||
public class ChatRoom {
|
||||
@@ -40,13 +36,11 @@ public class ChatRoom {
|
||||
private int roomId;
|
||||
private String roomAddress; // name
|
||||
|
||||
private Vector<CreatureObject> moderatorList = new Vector<CreatureObject>();
|
||||
private Vector<CreatureObject> banList = new Vector<CreatureObject>();
|
||||
private Vector<String> moderatorList = new Vector<String>();
|
||||
private Vector<String> banList = new Vector<String>();
|
||||
@NotPersistent
|
||||
private Vector<CreatureObject> userList = new Vector<CreatureObject>(); // current users
|
||||
private Vector<String> userList = new Vector<String>(); // current users
|
||||
|
||||
@NotPersistent
|
||||
private int requestId; // not-persistent
|
||||
private boolean moderatorsOnly;
|
||||
private boolean privateRoom;
|
||||
private boolean visible;
|
||||
@@ -55,9 +49,9 @@ public class ChatRoom {
|
||||
public String getCreator() {
|
||||
return creator;
|
||||
}
|
||||
|
||||
|
||||
public void setCreator(String creator) {
|
||||
this.creator = creator;
|
||||
this.creator = creator.toLowerCase();
|
||||
}
|
||||
|
||||
public String getRoomAddress() {
|
||||
@@ -76,30 +70,14 @@ public class ChatRoom {
|
||||
this.roomId = roomId;
|
||||
}
|
||||
|
||||
public Vector<CreatureObject> getModeratorList() {
|
||||
public Vector<String> getModeratorList() {
|
||||
return moderatorList;
|
||||
}
|
||||
|
||||
public void setModeratorList(Vector<CreatureObject> moderatorList) {
|
||||
this.moderatorList = moderatorList;
|
||||
}
|
||||
|
||||
public Vector<CreatureObject> getUserList() {
|
||||
public Vector<String> getUserList() {
|
||||
return userList;
|
||||
}
|
||||
|
||||
public void setUserList(Vector<CreatureObject> userList) {
|
||||
this.userList = userList;
|
||||
}
|
||||
|
||||
public int getRequestId() {
|
||||
return requestId;
|
||||
}
|
||||
|
||||
public void setRequestId(int requestId) {
|
||||
this.requestId = requestId;
|
||||
}
|
||||
|
||||
public boolean isModeratorsOnly() {
|
||||
return moderatorsOnly;
|
||||
}
|
||||
@@ -121,17 +99,13 @@ public class ChatRoom {
|
||||
}
|
||||
|
||||
public void setOwner(String owner) {
|
||||
this.owner = owner;
|
||||
this.owner = owner.toLowerCase();
|
||||
}
|
||||
|
||||
public Vector<CreatureObject> getBanList() {
|
||||
public Vector<String> getBanList() {
|
||||
return banList;
|
||||
}
|
||||
|
||||
public void setBanList(Vector<CreatureObject> banList) {
|
||||
this.banList = banList;
|
||||
}
|
||||
|
||||
public String getDescription() {
|
||||
return description;
|
||||
}
|
||||
@@ -147,4 +121,28 @@ public class ChatRoom {
|
||||
public void setVisible(boolean visible) {
|
||||
this.visible = visible;
|
||||
}
|
||||
|
||||
public void addUser(String user) {
|
||||
userList.add(user.toLowerCase());
|
||||
}
|
||||
|
||||
public void addModerator(String moderator) {
|
||||
moderatorList.add(moderator.toLowerCase());
|
||||
}
|
||||
|
||||
public void banUser(String user) {
|
||||
banList.add(user.toLowerCase());
|
||||
}
|
||||
|
||||
public boolean hasUser(String user) {
|
||||
return userList.contains(user.toLowerCase());
|
||||
}
|
||||
|
||||
public boolean hasModerator(String moderator) {
|
||||
return moderatorList.contains(moderator.toLowerCase());
|
||||
}
|
||||
|
||||
public boolean hasBan(String user) {
|
||||
return banList.contains(user.toLowerCase());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -24,6 +24,7 @@ package services.chat;
|
||||
import java.nio.ByteOrder;
|
||||
import java.util.Date;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Random;
|
||||
import java.util.Vector;
|
||||
@@ -34,14 +35,13 @@ import org.apache.mina.core.session.IoSession;
|
||||
|
||||
import com.sleepycat.je.Transaction;
|
||||
import com.sleepycat.persist.EntityCursor;
|
||||
import com.sleepycat.persist.PrimaryIndex;
|
||||
import com.sleepycat.persist.SecondaryIndex;
|
||||
|
||||
import engine.clients.Client;
|
||||
import engine.resources.config.Config;
|
||||
import engine.resources.config.DefaultConfig;
|
||||
import engine.resources.database.ObjectDatabase;
|
||||
import engine.resources.objects.SWGObject;
|
||||
import engine.resources.scene.Planet;
|
||||
import engine.resources.scene.Point3D;
|
||||
import engine.resources.service.INetworkDispatch;
|
||||
import engine.resources.service.INetworkRemoteEvent;
|
||||
@@ -49,25 +49,28 @@ import resources.common.*;
|
||||
import resources.objects.creature.CreatureObject;
|
||||
import resources.objects.player.PlayerObject;
|
||||
import protocol.swg.AddIgnoreMessage;
|
||||
import protocol.swg.ChatEnterRoomById;
|
||||
import protocol.swg.ChatOnChangeFriendStatus;
|
||||
import protocol.swg.ChatDeletePersistentMessage;
|
||||
import protocol.swg.ChatFriendsListUpdate;
|
||||
import protocol.swg.ChatInstantMessageToCharacter;
|
||||
import protocol.swg.ChatInstantMessagetoClient;
|
||||
import protocol.swg.ChatOnAddFriend;
|
||||
import protocol.swg.ChatOnEnteredRoom;
|
||||
import protocol.swg.ChatOnSendInstantMessage;
|
||||
import protocol.swg.ChatOnSendPersistentMessage;
|
||||
import protocol.swg.ChatOnSendRoomMessage;
|
||||
import protocol.swg.ChatPersistentMessageToClient;
|
||||
import protocol.swg.ChatPersistentMessageToServer;
|
||||
import protocol.swg.ChatRequestPersistentMessage;
|
||||
import protocol.swg.ChatRoomList;
|
||||
import protocol.swg.ChatRoomMessage;
|
||||
import protocol.swg.ChatSendToRoom;
|
||||
import protocol.swg.ChatSystemMessage;
|
||||
import protocol.swg.ObjControllerMessage;
|
||||
import protocol.swg.chat.ChatCreateRoom;
|
||||
import protocol.swg.chat.ChatDeletePersistentMessage;
|
||||
import protocol.swg.chat.ChatEnterRoomById;
|
||||
import protocol.swg.chat.ChatFriendsListUpdate;
|
||||
import protocol.swg.chat.ChatInstantMessageToCharacter;
|
||||
import protocol.swg.chat.ChatInstantMessagetoClient;
|
||||
import protocol.swg.chat.ChatOnAddFriend;
|
||||
import protocol.swg.chat.ChatOnChangeFriendStatus;
|
||||
import protocol.swg.chat.ChatOnCreateRoom;
|
||||
import protocol.swg.chat.ChatOnEnteredRoom;
|
||||
import protocol.swg.chat.ChatOnSendInstantMessage;
|
||||
import protocol.swg.chat.ChatOnSendPersistentMessage;
|
||||
import protocol.swg.chat.ChatOnSendRoomMessage;
|
||||
import protocol.swg.chat.ChatPersistentMessageToClient;
|
||||
import protocol.swg.chat.ChatPersistentMessageToServer;
|
||||
import protocol.swg.chat.ChatRequestPersistentMessage;
|
||||
import protocol.swg.chat.ChatRoomList;
|
||||
import protocol.swg.chat.ChatRoomMessage;
|
||||
import protocol.swg.chat.ChatSendToRoom;
|
||||
import protocol.swg.chat.ChatServerStatus;
|
||||
import protocol.swg.chat.ChatSystemMessage;
|
||||
import protocol.swg.objectControllerObjects.PlayerEmote;
|
||||
import protocol.swg.objectControllerObjects.SpatialChat;
|
||||
import main.NGECore;
|
||||
@@ -362,23 +365,65 @@ public class ChatService implements INetworkDispatch {
|
||||
return;
|
||||
|
||||
ChatRoomList listMessage = new ChatRoomList(chatRooms);
|
||||
|
||||
client.getSession().write(listMessage.serialize());
|
||||
|
||||
//System.out.println("Sent the room request responses.");
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
swgOpcodes.put(Opcodes.ChatCreateRoom, (session, data) -> {
|
||||
//System.out.println("CREATE:");
|
||||
//StringUtilities.printBytes(data.array());
|
||||
/*data.order(ByteOrder.LITTLE_ENDIAN);
|
||||
|
||||
Client client = core.getClient(session);
|
||||
|
||||
if(client == null)
|
||||
return;
|
||||
|
||||
SWGObject obj = client.getParent();
|
||||
|
||||
if (obj == null)
|
||||
return;
|
||||
|
||||
CreatureObject creo = (CreatureObject) obj;
|
||||
|
||||
ChatCreateRoom sentPacket = new ChatCreateRoom();
|
||||
sentPacket.deserialize(data);
|
||||
|
||||
ChatRoom room = createChatRoom(sentPacket.getTitle(), sentPacket.getAddress(), creo.getCustomName().toLowerCase(), true, false);
|
||||
|
||||
if (room != null) {
|
||||
room.setPrivateRoom(sentPacket.isPrivacy());
|
||||
room.setModeratorsOnly(sentPacket.isModeratorOnly());
|
||||
room.addUser(creo.getCustomName());
|
||||
room.addModerator(creo.getCustomName());
|
||||
ChatOnCreateRoom response = new ChatOnCreateRoom(room, 0, sentPacket.getRequest());
|
||||
session.write(response.serialize());
|
||||
}
|
||||
|
||||
System.out.println("Created room.");*/
|
||||
|
||||
});
|
||||
|
||||
swgOpcodes.put(Opcodes.ChatQueryRoom, (session, data) -> {
|
||||
//System.out.println("QUERY: ");
|
||||
data.order(ByteOrder.LITTLE_ENDIAN);
|
||||
//StringUtilities.printBytes(data.array());
|
||||
Client client = core.getClient(session);
|
||||
|
||||
if(client == null)
|
||||
return;
|
||||
|
||||
SWGObject obj = client.getParent();
|
||||
|
||||
if (obj == null)
|
||||
return;
|
||||
|
||||
|
||||
|
||||
});
|
||||
|
||||
swgOpcodes.put(Opcodes.ChatSendToRoom, (session, data) -> {
|
||||
//System.out.println("send to room!");
|
||||
Client client = core.getClient(session);
|
||||
|
||||
if(client == null)
|
||||
@@ -408,13 +453,14 @@ public class ChatService implements INetworkDispatch {
|
||||
|
||||
if (obj == null)
|
||||
return;
|
||||
|
||||
data.order(ByteOrder.LITTLE_ENDIAN);
|
||||
data.position(0);
|
||||
ChatEnterRoomById sentPacket = new ChatEnterRoomById();
|
||||
sentPacket.deserialize(data);
|
||||
|
||||
joinChatRoom((CreatureObject) obj, sentPacket.getRoomId());
|
||||
joinChatRoom(obj.getCustomName(), sentPacket.getRoomId());
|
||||
|
||||
//System.out.println("Entering room...");
|
||||
//System.out.println("Entering room... " + sentPacket.getRoomId());
|
||||
|
||||
});
|
||||
}
|
||||
@@ -684,8 +730,22 @@ public class ChatService implements INetworkDispatch {
|
||||
}
|
||||
|
||||
private void loadChatRooms() {
|
||||
ChatRoom system = createChatRoom("Waves Dungeon", "ProjectSWGTest.Dungeon", "Waverunner", true);
|
||||
chatRooms.put(system.getRoomId(), system);
|
||||
|
||||
/*
|
||||
* Battlefields channel format:
|
||||
* SWG.serverName.battlefield.bfMapName
|
||||
*
|
||||
* TODO: Research other channel address formats
|
||||
*/
|
||||
|
||||
createChatRoom("", "SWG", "system", true);
|
||||
createChatRoom("", "SWG." + core.getGalaxyName(), "system", true);
|
||||
|
||||
createChatRoom("", "system", "system", true); // galaxy system messages
|
||||
createChatRoom("", "Auction", "system", true);
|
||||
|
||||
//createChatRoom("Bounty Hunter chat for this galaxy", "BountyHunter", "SYSTEM", true);
|
||||
//createChatRoom("Commando chat for this galaxy", "Commando", "SYSTEM", true);
|
||||
|
||||
EntityCursor<ChatRoom> cursor = chatRoomsODB.getCursor(Integer.class, ChatRoom.class);
|
||||
cursor.forEach(room -> {
|
||||
@@ -694,20 +754,23 @@ public class ChatService implements INetworkDispatch {
|
||||
cursor.close();
|
||||
}
|
||||
|
||||
public ChatRoom createChatRoom(String roomName, String address, String creator, boolean showInList) {
|
||||
return createChatRoom(roomName, address, creator, showInList, false);
|
||||
public ChatRoom createChatRoom(String roomName, String address, String creator, boolean isPublic) {
|
||||
return createChatRoom(roomName, address, creator, isPublic, false);
|
||||
}
|
||||
public ChatRoom createChatRoom(String roomName, String address, String creator, boolean showInList, boolean store) {
|
||||
public ChatRoom createChatRoom(String roomName, String address, String creator, boolean isPublic, boolean store) {
|
||||
|
||||
if (creator.contains(" "))
|
||||
creator = creator.split(" ")[0];
|
||||
|
||||
|
||||
ChatRoom room = new ChatRoom();
|
||||
room.setDescription(roomName);
|
||||
room.setRoomAddress("SWG." + core.getGalaxyName() + "." + address);
|
||||
room.setCreator(creator);
|
||||
room.setOwner(creator);
|
||||
room.setVisible(showInList);
|
||||
if (!address.startsWith("SWG"))
|
||||
room.setRoomAddress("SWG." + core.getGalaxyName() + "." + address);
|
||||
else
|
||||
room.setRoomAddress(address);
|
||||
room.setCreator(creator.toLowerCase());
|
||||
room.setOwner(creator.toLowerCase());
|
||||
room.setVisible(isPublic);
|
||||
room.setRoomId(generateChatRoomId());
|
||||
|
||||
chatRooms.put(room.getRoomId(), room);
|
||||
@@ -721,26 +784,45 @@ public class ChatService implements INetworkDispatch {
|
||||
return room;
|
||||
}
|
||||
|
||||
public void joinChatRoom(CreatureObject player, int roomId) {
|
||||
public boolean joinChatRoom(String user, String roomAddress) {
|
||||
chatRooms.forEach((k, v) -> {
|
||||
if (v.getRoomAddress().equals(roomAddress)) {
|
||||
joinChatRoom(user, k, true);
|
||||
return;
|
||||
}
|
||||
});
|
||||
return false;
|
||||
}
|
||||
public boolean joinChatRoom(String user, int roomId, boolean resendList) {
|
||||
|
||||
String playerName = player.getCustomName().toLowerCase();
|
||||
|
||||
if (playerName.contains(" "))
|
||||
playerName = playerName.split(" ")[0];
|
||||
if (user.contains(" "))
|
||||
user = user.split(" ")[0];
|
||||
|
||||
ChatRoom room = getChatRoom(roomId);
|
||||
if (room == null)
|
||||
return;
|
||||
|
||||
ChatOnEnteredRoom enterRoom = new ChatOnEnteredRoom(playerName, 0, roomId, true);
|
||||
|
||||
if (!room.getUserList().contains(player))
|
||||
room.getUserList().add(player);
|
||||
|
||||
room.getUserList().stream().forEach(user -> user.getClient().getSession().write(enterRoom.serialize()));
|
||||
return false;
|
||||
|
||||
if (!room.hasUser(user.toLowerCase())) {
|
||||
room.addUser(user.toLowerCase());
|
||||
|
||||
if (!room.isVisible() || resendList) {
|
||||
CreatureObject creo = (CreatureObject) getObjectByFirstName(user);
|
||||
if (creo != null) {
|
||||
ChatRoomList listMessage = new ChatRoomList(room);
|
||||
creo.getClient().getSession().write(listMessage.serialize());
|
||||
}
|
||||
}
|
||||
ChatOnEnteredRoom enterRoom = new ChatOnEnteredRoom(user, 0, roomId, true);
|
||||
getObjectByFirstName(user).getClient().getSession().write(enterRoom.serialize());
|
||||
//System.out.println("Sent message for room " + room.getRoomAddress());
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public boolean joinChatRoom(String user, int roomId) {
|
||||
return joinChatRoom(user, roomId, false);
|
||||
}
|
||||
public void leaveChatRoom(CreatureObject player, int roomId) {
|
||||
|
||||
String playerName = player.getCustomName().toLowerCase();
|
||||
@@ -773,11 +855,8 @@ public class ChatService implements INetworkDispatch {
|
||||
sender.getClient().getSession().write(onSend.serialize());
|
||||
|
||||
ChatRoomMessage roomMessage = new ChatRoomMessage(roomId, senderName, message);
|
||||
Vector<CreatureObject> users = room.getUserList();
|
||||
Vector<String> users = room.getUserList();
|
||||
|
||||
for (CreatureObject user : users) {
|
||||
user.getClient().getSession().write(roomMessage.serialize());
|
||||
}
|
||||
}
|
||||
|
||||
public ConcurrentHashMap<Integer, ChatRoom> getChatRooms() {
|
||||
|
||||
@@ -21,7 +21,6 @@
|
||||
******************************************************************************/
|
||||
package services.combat;
|
||||
|
||||
import services.command.CombatCommand;
|
||||
import main.NGECore;
|
||||
|
||||
public class CombatCommands {
|
||||
|
||||
@@ -36,7 +36,6 @@ import org.apache.mina.core.session.IoSession;
|
||||
|
||||
import protocol.swg.ObjControllerMessage;
|
||||
import protocol.swg.PlayClientEffectLocMessage;
|
||||
import protocol.swg.UpdatePVPStatusMessage;
|
||||
import protocol.swg.objectControllerObjects.CombatAction;
|
||||
import protocol.swg.objectControllerObjects.CombatSpam;
|
||||
import protocol.swg.objectControllerObjects.CommandEnqueueRemove;
|
||||
@@ -52,6 +51,7 @@ import resources.objects.waypoint.WaypointObject;
|
||||
import resources.objects.weapon.WeaponObject;
|
||||
import services.ai.AIActor;
|
||||
import services.combat.CombatEvents.DamageTaken;
|
||||
import services.command.BaseSWGCommand;
|
||||
import services.command.CombatCommand;
|
||||
import services.sui.SUIService.MessageBoxType;
|
||||
import services.sui.SUIWindow;
|
||||
@@ -191,7 +191,9 @@ public class CombatService implements INetworkDispatch {
|
||||
{
|
||||
defender.removeDefender(creature);
|
||||
creature.removeDefender(defender);
|
||||
}
|
||||
}
|
||||
|
||||
if(((CreatureObject) target).getPlayerObject() == null) target.setKiller(attacker);
|
||||
}
|
||||
}
|
||||
else if(target instanceof TangibleObject)
|
||||
@@ -400,7 +402,7 @@ public class CombatService implements INetworkDispatch {
|
||||
|
||||
}
|
||||
|
||||
private void sendCombatPackets(CreatureObject attacker, TangibleObject target, WeaponObject weapon, CombatCommand command, int actionCounter, float damage, int armorAbsorbed, int hitType) {
|
||||
private void sendCombatPackets(CreatureObject attacker, TangibleObject target, WeaponObject weapon, BaseSWGCommand command, int actionCounter, float damage, int armorAbsorbed, int hitType) {
|
||||
|
||||
String animationStr = command.getRandomAnimation(weapon);
|
||||
CombatAction combatAction = new CombatAction(CRC.StringtoCRC(animationStr), attacker.getObjectID(), weapon.getObjectID(), target.getObjectID(), command.getCommandCRC());
|
||||
@@ -429,7 +431,7 @@ public class CombatService implements INetworkDispatch {
|
||||
|
||||
}
|
||||
|
||||
private void sendHealPackets(CreatureObject attacker, CreatureObject target, WeaponObject weapon, CombatCommand command, int actionCounter) {
|
||||
private void sendHealPackets(CreatureObject attacker, CreatureObject target, WeaponObject weapon, BaseSWGCommand command, int actionCounter) {
|
||||
|
||||
CombatAction combatAction = new CombatAction(CRC.StringtoCRC(command.getDefaultAnimations()[0]), attacker.getObjectID(), weapon.getObjectID(), target.getObjectID(), command.getCommandCRC());
|
||||
ObjControllerMessage objController = new ObjControllerMessage(0x1B, combatAction);
|
||||
@@ -820,7 +822,6 @@ public class CombatService implements INetworkDispatch {
|
||||
target.getEventBus().publish(event);
|
||||
}
|
||||
|
||||
@SuppressWarnings("unused")
|
||||
public void doDrainHeal(CreatureObject receiver, int drainAmount) {
|
||||
synchronized(receiver.getMutex()) {
|
||||
receiver.setHealth(receiver.getHealth() + drainAmount);
|
||||
|
||||
@@ -27,6 +27,9 @@ import engine.resources.common.CRC;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Random;
|
||||
|
||||
import resources.objects.weapon.WeaponObject;
|
||||
|
||||
public class BaseSWGCommand implements Cloneable {
|
||||
|
||||
@@ -34,7 +37,6 @@ public class BaseSWGCommand implements Cloneable {
|
||||
private String clientEffectSelf;
|
||||
private String clientEffectTarget;
|
||||
private int commandCRC;
|
||||
private boolean isGmCommand = false;
|
||||
private String characterAbility;
|
||||
private int target;
|
||||
private int targetType;
|
||||
@@ -55,6 +57,21 @@ public class BaseSWGCommand implements Cloneable {
|
||||
private Byte[] invalidPostures;
|
||||
private Long[] invalidStates;
|
||||
|
||||
private String[] defaultAnimations = new String[]{};
|
||||
private String[] oneHandedAnimations = new String[]{};
|
||||
private String[] twoHandedAnimations = new String[]{};
|
||||
private String[] polearmAnimations = new String[]{};
|
||||
private String[] unarmedAnimations = new String[]{};
|
||||
private String[] pistolAnimations = new String[]{};
|
||||
private String[] carbineAnimations = new String[]{};
|
||||
private String[] lightRifleAnimations = new String[]{};
|
||||
private String[] rifleAnimations = new String[]{};
|
||||
private String[] heavyWpnAnimations = new String[]{};
|
||||
private String[] oneHandedLSAnimations = new String[]{};
|
||||
private String[] twoHandedLSAnimations = new String[]{};
|
||||
private String[] polearmLSAnimations = new String[]{};
|
||||
private String[] thrownAnimations = new String[]{};
|
||||
|
||||
public BaseSWGCommand(String commandName) {
|
||||
setCommandName(commandName);
|
||||
setCommandCRC(CRC.StringtoCRC(commandName));
|
||||
@@ -222,10 +239,6 @@ public class BaseSWGCommand implements Cloneable {
|
||||
return (godLevel > 0);
|
||||
}
|
||||
|
||||
public void setGmCommand(boolean isGmCommand) {
|
||||
this.isGmCommand = isGmCommand;
|
||||
}
|
||||
|
||||
public String getCharacterAbility() {
|
||||
return characterAbility;
|
||||
}
|
||||
@@ -362,4 +375,169 @@ public class BaseSWGCommand implements Cloneable {
|
||||
this.warmupTime = warmupTime;
|
||||
}
|
||||
|
||||
public String[] getDefaultAnimations() {
|
||||
return defaultAnimations;
|
||||
}
|
||||
|
||||
public void setDefaultAnimations(String[] defaultAnimations) {
|
||||
this.defaultAnimations = defaultAnimations;
|
||||
}
|
||||
|
||||
public String[] getOneHandedAnimations() {
|
||||
return oneHandedAnimations;
|
||||
}
|
||||
|
||||
public void setOneHandedAnimations(String[] oneHandedAnimations) {
|
||||
this.oneHandedAnimations = oneHandedAnimations;
|
||||
}
|
||||
|
||||
public String[] getTwoHandedAnimations() {
|
||||
return twoHandedAnimations;
|
||||
}
|
||||
|
||||
public void setTwoHandedAnimations(String[] twoHandedAnimations) {
|
||||
this.twoHandedAnimations = twoHandedAnimations;
|
||||
}
|
||||
|
||||
public String[] getPolearmAnimations() {
|
||||
return polearmAnimations;
|
||||
}
|
||||
|
||||
public void setPolearmAnimations(String[] polearmAnimations) {
|
||||
this.polearmAnimations = polearmAnimations;
|
||||
}
|
||||
|
||||
public String[] getUnarmedAnimations() {
|
||||
return unarmedAnimations;
|
||||
}
|
||||
|
||||
public void setUnarmedAnimations(String[] unarmedAnimations) {
|
||||
this.unarmedAnimations = unarmedAnimations;
|
||||
}
|
||||
|
||||
public String[] getPistolAnimations() {
|
||||
return pistolAnimations;
|
||||
}
|
||||
|
||||
public void setPistolAnimations(String[] pistolAnimations) {
|
||||
this.pistolAnimations = pistolAnimations;
|
||||
}
|
||||
|
||||
public String[] getCarbineAnimations() {
|
||||
return carbineAnimations;
|
||||
}
|
||||
|
||||
public void setCarbineAnimations(String[] carbineAnimations) {
|
||||
this.carbineAnimations = carbineAnimations;
|
||||
}
|
||||
|
||||
public String[] getLightRifleAnimations() {
|
||||
return lightRifleAnimations;
|
||||
}
|
||||
|
||||
public void setLightRifleAnimations(String[] lightRifleAnimations) {
|
||||
this.lightRifleAnimations = lightRifleAnimations;
|
||||
}
|
||||
|
||||
public String[] getRifleAnimations() {
|
||||
return rifleAnimations;
|
||||
}
|
||||
|
||||
public void setRifleAnimations(String[] rifleAnimations) {
|
||||
this.rifleAnimations = rifleAnimations;
|
||||
}
|
||||
|
||||
public String[] getHeavyWpnAnimations() {
|
||||
return heavyWpnAnimations;
|
||||
}
|
||||
|
||||
public void setHeavyWpnAnimations(String[] heavyWpnAnimations) {
|
||||
this.heavyWpnAnimations = heavyWpnAnimations;
|
||||
}
|
||||
|
||||
public String[] getOneHandedLSAnimations() {
|
||||
return oneHandedLSAnimations;
|
||||
}
|
||||
|
||||
public void setOneHandedLSAnimations(String[] oneHandedLSAnimations) {
|
||||
this.oneHandedLSAnimations = oneHandedLSAnimations;
|
||||
}
|
||||
|
||||
public String[] getTwoHandedLSAnimations() {
|
||||
return twoHandedLSAnimations;
|
||||
}
|
||||
|
||||
public void setTwoHandedLSAnimations(String[] twoHandedLSAnimations) {
|
||||
this.twoHandedLSAnimations = twoHandedLSAnimations;
|
||||
}
|
||||
|
||||
public String[] getPolearmLSAnimations() {
|
||||
return polearmLSAnimations;
|
||||
}
|
||||
|
||||
public void setPolearmLSAnimations(String[] polearmLSAnimations) {
|
||||
this.polearmLSAnimations = polearmLSAnimations;
|
||||
}
|
||||
|
||||
public String[] getThrownAnimations() {
|
||||
return thrownAnimations;
|
||||
}
|
||||
|
||||
public void setThrownAnimations(String[] thrownAnimations) {
|
||||
this.thrownAnimations = thrownAnimations;
|
||||
}
|
||||
|
||||
public String getRandomAnimation(WeaponObject weapon) {
|
||||
int weaponType = weapon.getWeaponType();
|
||||
String[] animations;
|
||||
|
||||
switch (weaponType) {
|
||||
case 0:
|
||||
animations = rifleAnimations;
|
||||
break;
|
||||
case 1:
|
||||
animations = carbineAnimations;
|
||||
break;
|
||||
case 2:
|
||||
animations = pistolAnimations;
|
||||
break;
|
||||
case 3:
|
||||
animations = heavyWpnAnimations;
|
||||
break;
|
||||
case 4:
|
||||
animations = oneHandedAnimations;
|
||||
break;
|
||||
case 5:
|
||||
animations = twoHandedAnimations;
|
||||
break;
|
||||
case 6:
|
||||
animations = defaultAnimations;
|
||||
break;
|
||||
case 7:
|
||||
animations = polearmAnimations;
|
||||
break;
|
||||
case 8:
|
||||
animations = thrownAnimations;
|
||||
break;
|
||||
case 9:
|
||||
animations = oneHandedLSAnimations;
|
||||
break;
|
||||
case 10:
|
||||
animations = twoHandedLSAnimations;
|
||||
break;
|
||||
case 11:
|
||||
animations = polearmLSAnimations;
|
||||
break;
|
||||
default:
|
||||
animations = defaultAnimations;
|
||||
break;
|
||||
}
|
||||
|
||||
if (animations.length == 0) {
|
||||
animations = defaultAnimations;
|
||||
}
|
||||
|
||||
return animations[new Random().nextInt(animations.length)];
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -21,28 +21,11 @@
|
||||
******************************************************************************/
|
||||
package services.command;
|
||||
|
||||
import java.util.Random;
|
||||
|
||||
import resources.objects.weapon.WeaponObject;
|
||||
import engine.clientdata.ClientFileManager;
|
||||
import engine.clientdata.visitors.DatatableVisitor;
|
||||
|
||||
public class CombatCommand extends BaseSWGCommand {
|
||||
|
||||
private String[] defaultAnimations = new String[]{};
|
||||
private String[] oneHandedAnimations = new String[]{};
|
||||
private String[] twoHandedAnimations = new String[]{};
|
||||
private String[] polearmAnimations = new String[]{};
|
||||
private String[] unarmedAnimations = new String[]{};
|
||||
private String[] pistolAnimations = new String[]{};
|
||||
private String[] carbineAnimations = new String[]{};
|
||||
private String[] lightRifleAnimations = new String[]{};
|
||||
private String[] rifleAnimations = new String[]{};
|
||||
private String[] heavyWpnAnimations = new String[]{};
|
||||
private String[] oneHandedLSAnimations = new String[]{};
|
||||
private String[] twoHandedLSAnimations = new String[]{};
|
||||
private String[] polearmLSAnimations = new String[]{};
|
||||
private String[] thrownAnimations = new String[]{};
|
||||
private byte validTargetType;
|
||||
private byte hitType;
|
||||
private byte healType;
|
||||
@@ -67,16 +50,12 @@ public class CombatCommand extends BaseSWGCommand {
|
||||
private int damageType, elementalType, elementalValue;
|
||||
private String performanceSpam;
|
||||
private byte hitSpam;
|
||||
//private float cooldown;
|
||||
private String delayAttackEggTemplate;
|
||||
private String delayAttackParticle;
|
||||
private float initialAttackDelay;
|
||||
private float delayAttackInterval;
|
||||
private int delayAttackLoops;
|
||||
private int delayAttackEggPosition;
|
||||
//private String cooldownGroup;
|
||||
//private float executeTime;
|
||||
//private float warmupTime;
|
||||
private float vigorCost; // for commando kill meter and bm specials
|
||||
private float criticalChance;
|
||||
private int attack_rolls;
|
||||
@@ -166,119 +145,7 @@ public class CombatCommand extends BaseSWGCommand {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
public String[] getDefaultAnimations() {
|
||||
return defaultAnimations;
|
||||
}
|
||||
|
||||
public void setDefaultAnimations(String[] defaultAnimations) {
|
||||
this.defaultAnimations = defaultAnimations;
|
||||
}
|
||||
|
||||
public String[] getOneHandedAnimations() {
|
||||
return oneHandedAnimations;
|
||||
}
|
||||
|
||||
public void setOneHandedAnimations(String[] oneHandedAnimations) {
|
||||
this.oneHandedAnimations = oneHandedAnimations;
|
||||
}
|
||||
|
||||
public String[] getTwoHandedAnimations() {
|
||||
return twoHandedAnimations;
|
||||
}
|
||||
|
||||
public void setTwoHandedAnimations(String[] twoHandedAnimations) {
|
||||
this.twoHandedAnimations = twoHandedAnimations;
|
||||
}
|
||||
|
||||
public String[] getPolearmAnimations() {
|
||||
return polearmAnimations;
|
||||
}
|
||||
|
||||
public void setPolearmAnimations(String[] polearmAnimations) {
|
||||
this.polearmAnimations = polearmAnimations;
|
||||
}
|
||||
|
||||
public String[] getUnarmedAnimations() {
|
||||
return unarmedAnimations;
|
||||
}
|
||||
|
||||
public void setUnarmedAnimations(String[] unarmedAnimations) {
|
||||
this.unarmedAnimations = unarmedAnimations;
|
||||
}
|
||||
|
||||
public String[] getPistolAnimations() {
|
||||
return pistolAnimations;
|
||||
}
|
||||
|
||||
public void setPistolAnimations(String[] pistolAnimations) {
|
||||
this.pistolAnimations = pistolAnimations;
|
||||
}
|
||||
|
||||
public String[] getCarbineAnimations() {
|
||||
return carbineAnimations;
|
||||
}
|
||||
|
||||
public void setCarbineAnimations(String[] carbineAnimations) {
|
||||
this.carbineAnimations = carbineAnimations;
|
||||
}
|
||||
|
||||
public String[] getLightRifleAnimations() {
|
||||
return lightRifleAnimations;
|
||||
}
|
||||
|
||||
public void setLightRifleAnimations(String[] lightRifleAnimations) {
|
||||
this.lightRifleAnimations = lightRifleAnimations;
|
||||
}
|
||||
|
||||
public String[] getRifleAnimations() {
|
||||
return rifleAnimations;
|
||||
}
|
||||
|
||||
public void setRifleAnimations(String[] rifleAnimations) {
|
||||
this.rifleAnimations = rifleAnimations;
|
||||
}
|
||||
|
||||
public String[] getHeavyWpnAnimations() {
|
||||
return heavyWpnAnimations;
|
||||
}
|
||||
|
||||
public void setHeavyWpnAnimations(String[] heavyWpnAnimations) {
|
||||
this.heavyWpnAnimations = heavyWpnAnimations;
|
||||
}
|
||||
|
||||
public String[] getOneHandedLSAnimations() {
|
||||
return oneHandedLSAnimations;
|
||||
}
|
||||
|
||||
public void setOneHandedLSAnimations(String[] oneHandedLSAnimations) {
|
||||
this.oneHandedLSAnimations = oneHandedLSAnimations;
|
||||
}
|
||||
|
||||
public String[] getTwoHandedLSAnimations() {
|
||||
return twoHandedLSAnimations;
|
||||
}
|
||||
|
||||
public void setTwoHandedLSAnimations(String[] twoHandedLSAnimations) {
|
||||
this.twoHandedLSAnimations = twoHandedLSAnimations;
|
||||
}
|
||||
|
||||
public String[] getPolearmLSAnimations() {
|
||||
return polearmLSAnimations;
|
||||
}
|
||||
|
||||
public void setPolearmLSAnimations(String[] polearmLSAnimations) {
|
||||
this.polearmLSAnimations = polearmLSAnimations;
|
||||
}
|
||||
|
||||
public String[] getThrownAnimations() {
|
||||
return thrownAnimations;
|
||||
}
|
||||
|
||||
public void setThrownAnimations(String[] thrownAnimations) {
|
||||
this.thrownAnimations = thrownAnimations;
|
||||
}
|
||||
|
||||
|
||||
public byte getValidTargetType() {
|
||||
return validTargetType;
|
||||
}
|
||||
@@ -550,64 +417,7 @@ public class CombatCommand extends BaseSWGCommand {
|
||||
public void setHitSpam(byte hitSpam) {
|
||||
this.hitSpam = hitSpam;
|
||||
}
|
||||
|
||||
public String getRandomAnimation(WeaponObject weapon) {
|
||||
|
||||
int weaponType = weapon.getWeaponType();
|
||||
String[] animations;
|
||||
|
||||
switch(weaponType) {
|
||||
|
||||
case 0:
|
||||
animations = rifleAnimations;
|
||||
break;
|
||||
case 1:
|
||||
animations = carbineAnimations;
|
||||
break;
|
||||
case 2:
|
||||
animations = pistolAnimations;
|
||||
break;
|
||||
case 3:
|
||||
animations = heavyWpnAnimations;
|
||||
break;
|
||||
case 4:
|
||||
animations = oneHandedAnimations;
|
||||
break;
|
||||
case 5:
|
||||
animations = twoHandedAnimations;
|
||||
break;
|
||||
case 6:
|
||||
animations = defaultAnimations;
|
||||
break;
|
||||
case 7:
|
||||
animations = polearmAnimations;
|
||||
break;
|
||||
case 8:
|
||||
animations = thrownAnimations;
|
||||
break;
|
||||
case 9:
|
||||
animations = oneHandedLSAnimations;
|
||||
break;
|
||||
case 10:
|
||||
animations = twoHandedLSAnimations;
|
||||
break;
|
||||
case 11:
|
||||
animations = polearmLSAnimations;
|
||||
break;
|
||||
|
||||
default:
|
||||
animations = defaultAnimations;
|
||||
break;
|
||||
|
||||
}
|
||||
|
||||
if(animations.length == 0)
|
||||
animations = defaultAnimations;
|
||||
|
||||
return animations[new Random().nextInt(animations.length)];
|
||||
|
||||
}
|
||||
|
||||
|
||||
public String getDelayAttackEggTemplate() {
|
||||
return delayAttackEggTemplate;
|
||||
}
|
||||
|
||||
@@ -27,7 +27,6 @@ import java.util.Vector;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
import java.util.concurrent.Executors;
|
||||
import java.util.concurrent.ScheduledExecutorService;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
import main.NGECore;
|
||||
|
||||
@@ -43,19 +42,20 @@ import engine.resources.scene.Point3D;
|
||||
import engine.resources.service.INetworkDispatch;
|
||||
import engine.resources.service.INetworkRemoteEvent;
|
||||
import resources.common.*;
|
||||
import resources.datatables.StateStatus;
|
||||
import protocol.swg.ObjControllerMessage;
|
||||
import protocol.swg.objectControllerObjects.CommandEnqueue;
|
||||
import protocol.swg.objectControllerObjects.CommandEnqueueRemove;
|
||||
import protocol.swg.objectControllerObjects.ShowFlyText;
|
||||
import protocol.swg.objectControllerObjects.StartTask;
|
||||
import resources.objects.creature.CreatureObject;
|
||||
import resources.objects.harvester.HarvesterObject;
|
||||
import resources.objects.tangible.TangibleObject;
|
||||
import resources.objects.weapon.WeaponObject;
|
||||
|
||||
public class CommandService implements INetworkDispatch {
|
||||
|
||||
private Vector<BaseSWGCommand> commandLookup = new Vector<BaseSWGCommand>();
|
||||
private ConcurrentHashMap<Integer, Integer> aliases = new ConcurrentHashMap<Integer, Integer>();
|
||||
private final ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
|
||||
private NGECore core;
|
||||
|
||||
@@ -63,6 +63,10 @@ public class CommandService implements INetworkDispatch {
|
||||
this.core = core;
|
||||
}
|
||||
|
||||
public void registerAlias(String name, String target) {
|
||||
aliases.put(CRC.StringtoCRC(name.toLowerCase()), CRC.StringtoCRC(target.toLowerCase()));
|
||||
}
|
||||
|
||||
public boolean callCommand(CreatureObject actor, SWGObject target, BaseSWGCommand command, int actionCounter, String commandArgs) {
|
||||
if (actor == null) {
|
||||
return false;
|
||||
@@ -80,7 +84,7 @@ public class CommandService implements INetworkDispatch {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (command.getGodLevel() > 0 && !actor.getClient().isGM()) {
|
||||
if (command.getGodLevel() > 0 && (actor.getClient() == null || !actor.getClient().isGM())) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -94,14 +98,14 @@ public class CommandService implements INetworkDispatch {
|
||||
return false;
|
||||
}
|
||||
|
||||
// The two below statements need testing before use
|
||||
|
||||
for (long state : command.getInvalidStates()) {
|
||||
if ((actor.getStateBitmask() & state) == state) {
|
||||
//return false;
|
||||
}
|
||||
}
|
||||
|
||||
// This SHOULD be invalid locomotions but we don't track these currently.
|
||||
// Postures are the best we can do.
|
||||
for (byte posture : command.getInvalidPostures()) {
|
||||
if (actor.getPosture() == posture) {
|
||||
//return false;
|
||||
@@ -109,9 +113,7 @@ public class CommandService implements INetworkDispatch {
|
||||
}
|
||||
|
||||
switch (command.getTargetType()) {
|
||||
case 0: // Target Not Used For This Command or Self
|
||||
target = actor;
|
||||
|
||||
case 0: // Target Not Used For This Command
|
||||
break;
|
||||
case 1: // Other Only
|
||||
if (target == null || target == actor) {
|
||||
@@ -122,7 +124,7 @@ public class CommandService implements INetworkDispatch {
|
||||
break;
|
||||
}
|
||||
|
||||
if (actor.getPosition().getDistance(target.getPosition()) > command.getMaxRangeToTarget()) {
|
||||
if (command.getMaxRangeToTarget() != 0 && actor.getPosition().getDistance(target.getPosition()) > command.getMaxRangeToTarget()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -136,7 +138,7 @@ public class CommandService implements INetworkDispatch {
|
||||
target = actor;
|
||||
}
|
||||
|
||||
if (target != actor) {
|
||||
if (target != actor && target instanceof CreatureObject) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -176,7 +178,7 @@ public class CommandService implements INetworkDispatch {
|
||||
}
|
||||
|
||||
// Without this we could be buffing ally NPCs and such
|
||||
if (object.getSlottedObject("ghost") == null) {
|
||||
if (actor.getSlottedObject("ghost") != null && object.getSlottedObject("ghost") == null) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -208,46 +210,20 @@ public class CommandService implements INetworkDispatch {
|
||||
}
|
||||
|
||||
long warmupTime = (long) (command.getWarmupTime() * 1000F);
|
||||
final CreatureObject actorObject = actor;
|
||||
final SWGObject targetObject = target;
|
||||
|
||||
if (warmupTime != 0) {
|
||||
scheduler.schedule(new Runnable() {
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
processCommand(actorObject, targetObject, command, actionCounter, commandArgs);
|
||||
}
|
||||
|
||||
}, warmupTime, TimeUnit.MILLISECONDS);
|
||||
} else {
|
||||
processCommand(actor, target, command, actionCounter, commandArgs);
|
||||
try {
|
||||
Thread.sleep(warmupTime);
|
||||
} catch (InterruptedException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
processCommand(actor, target, command, actionCounter, commandArgs);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public void callCommand(SWGObject actor, String commandName, SWGObject target, String commandArgs) {
|
||||
if (actor == null)
|
||||
return;
|
||||
|
||||
BaseSWGCommand command = getCommandByName(commandName);
|
||||
|
||||
if (command == null)
|
||||
return;
|
||||
|
||||
if(command instanceof CombatCommand) {
|
||||
CombatCommand command2;
|
||||
try {
|
||||
command2 = (CombatCommand) command.clone();
|
||||
processCombatCommand((CreatureObject) actor, target, command2, 0, "");
|
||||
} catch (CloneNotSupportedException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
core.scriptService.callScript("scripts/commands/", command.getCommandName(), "run", core, actor, target, commandArgs);
|
||||
callCommand((CreatureObject) actor, target, getCommandByName(commandName), 0, commandArgs);
|
||||
}
|
||||
|
||||
public BaseSWGCommand getCommandByCRC(int commandCRC) {
|
||||
@@ -284,12 +260,7 @@ public class CommandService implements INetworkDispatch {
|
||||
sub += 5;
|
||||
}
|
||||
|
||||
boolean isCombatCommand = false;
|
||||
|
||||
if(visitor.getObject(i, 82-sub) instanceof Boolean)
|
||||
isCombatCommand = (Boolean) visitor.getObject(i, 82-sub);
|
||||
|
||||
if (hasCharacterAbility || isCombatCommand) {
|
||||
if (hasCharacterAbility || isCombatCommand(name)) {
|
||||
CombatCommand command = new CombatCommand(name.toLowerCase());
|
||||
commandLookup.add(command);
|
||||
return command;
|
||||
@@ -345,12 +316,7 @@ public class CommandService implements INetworkDispatch {
|
||||
sub += 5;
|
||||
}
|
||||
|
||||
boolean isCombatCommand = false;
|
||||
|
||||
if(visitor.getObject(i, 82-sub) instanceof Boolean)
|
||||
isCombatCommand = (Boolean) visitor.getObject(i, 82-sub);
|
||||
|
||||
if (hasCharacterAbility || isCombatCommand) {
|
||||
if (hasCharacterAbility || isCombatCommand(commandName)) {
|
||||
CombatCommand command = new CombatCommand(commandName);
|
||||
commandLookup.add(command);
|
||||
return command;
|
||||
@@ -370,6 +336,22 @@ public class CommandService implements INetworkDispatch {
|
||||
return null;
|
||||
}
|
||||
|
||||
public boolean isCombatCommand(String commandName) {
|
||||
try {
|
||||
DatatableVisitor visitor = ClientFileManager.loadFile("datatables/combat/combat_data.iff", DatatableVisitor.class);
|
||||
|
||||
for (int i = 0; i < visitor.getRowCount(); i++) {
|
||||
if (visitor.getObject(i, 0) != null && ((String) (visitor.getObject(i, 0))).equalsIgnoreCase(commandName)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
public void processCommand(CreatureObject actor, SWGObject target, BaseSWGCommand command, int actionCounter, String commandArgs) {
|
||||
actor.addCooldown(command.getCooldownGroup(), command.getCooldown());
|
||||
|
||||
@@ -378,22 +360,17 @@ public class CommandService implements INetworkDispatch {
|
||||
} else {
|
||||
if (FileUtilities.doesFileExist("scripts/commands/" + command.getCommandName() + ".py")) {
|
||||
core.scriptService.callScript("scripts/commands/", command.getCommandName(), "run", core, actor, target, commandArgs);
|
||||
} else if (FileUtilities.doesFileExist("scripts/commands/combat/" + command.getCommandName() + ".py")) {
|
||||
core.scriptService.callScript("scripts/commands/combat/", command.getCommandName(), "run", core, actor, target, commandArgs);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void processCombatCommand(CreatureObject attacker, SWGObject target, CombatCommand command, int actionCounter, String commandArgs) {
|
||||
|
||||
// Check if the person has access to this ability.
|
||||
// Abilities (inc expertise ones) are added automatically as they level
|
||||
// by reading the datatables.
|
||||
// disabled for now (breaks all combat)
|
||||
//if (!attacker.hasAbility(command.getCommandName())) {
|
||||
// return;
|
||||
//}
|
||||
|
||||
if(FileUtilities.doesFileExist("scripts/commands/combat/" + command.getCommandName() + ".py"))
|
||||
{
|
||||
core.scriptService.callScript("scripts/commands/combat/", command.getCommandName(), "setup", core, attacker, target, command);
|
||||
}
|
||||
|
||||
boolean success = true;
|
||||
|
||||
@@ -497,7 +474,6 @@ public class CommandService implements INetworkDispatch {
|
||||
|
||||
@Override
|
||||
public void handlePacket(IoSession session, IoBuffer data) throws Exception {
|
||||
|
||||
data.order(ByteOrder.LITTLE_ENDIAN);
|
||||
Client client = core.getClient(session);
|
||||
|
||||
@@ -509,7 +485,13 @@ public class CommandService implements INetworkDispatch {
|
||||
CommandEnqueue commandEnqueue = new CommandEnqueue();
|
||||
commandEnqueue.deserialize(data);
|
||||
|
||||
BaseSWGCommand command = getCommandByCRC(commandEnqueue.getCommandCRC());
|
||||
int commandCRC = commandEnqueue.getCommandCRC();
|
||||
|
||||
if (aliases.containsKey(commandEnqueue.getCommandCRC())) {
|
||||
commandCRC = aliases.get(commandCRC);
|
||||
}
|
||||
|
||||
BaseSWGCommand command = getCommandByCRC(commandCRC);
|
||||
|
||||
if (command == null) {
|
||||
//System.out.println("Unknown Command CRC: " + commandEnqueue.getCommandCRC());
|
||||
@@ -540,6 +522,45 @@ public class CommandService implements INetworkDispatch {
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
objControllerOpcodes.put(ObjControllerOpcodes.RESOURCE_EMPTY_HOPPER, new INetworkRemoteEvent() {
|
||||
|
||||
@Override
|
||||
public void handlePacket(IoSession session, IoBuffer data) throws Exception {
|
||||
data.order(ByteOrder.LITTLE_ENDIAN);
|
||||
Client client = core.getClient(session);
|
||||
CommandEnqueue commandEnqueue = new CommandEnqueue();
|
||||
|
||||
// StringBuilder sb = new StringBuilder();
|
||||
// for (byte b : data.array()) {
|
||||
// sb.append(String.format("%02X ", b));
|
||||
// }
|
||||
// System.out.println(sb.toString());
|
||||
|
||||
/*
|
||||
05 00 46 5E CE 80 83 00 00 00 ED 00 00 00 3E 45
|
||||
04 00 00 00 00 00 00 00 00 00 3E 45 04 00 00 00
|
||||
00 00 90 52 05 00 00 00 00 00 D7 35 05 00 00 00
|
||||
00 00 01 00 00 00 00 07
|
||||
*/
|
||||
|
||||
long playerId = data.getLong(); // 3E 45 04 00 00 00 00 00
|
||||
data.getInt(); // 00 00 00 00
|
||||
data.getLong(); // 3E 45 04 00 00 00 00 00
|
||||
long harvesterId = data.getLong(); // 1E 55 05 00 00 00 00 00
|
||||
//long containerId = data.getLong(); // 1E 55 05 00 00 00 00 00 Resources ID
|
||||
long resourceId = data.getLong(); // 1E 55 05 00 00 00 00 00 Resources ID
|
||||
int stackCount = data.getInt(); // Stack count
|
||||
byte actionMode = data.get(); // 0 for retrieving, 1 for discarding
|
||||
byte updateCount = data.get(); // updateCount
|
||||
|
||||
CreatureObject actor = (CreatureObject) client.getParent();
|
||||
SWGObject target = core.objectService.getObject(harvesterId);
|
||||
|
||||
core.harvesterService.handleEmptyHopper(actor,target,harvesterId,resourceId,stackCount,actionMode,updateCount);
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
|
||||
}
|
||||
@@ -548,26 +569,8 @@ public class CommandService implements INetworkDispatch {
|
||||
|
||||
}
|
||||
|
||||
public CombatCommand registerCombatCommand(String name) {
|
||||
BaseSWGCommand command = getCommandByName(name);
|
||||
|
||||
if (command == null) {
|
||||
return null;
|
||||
}
|
||||
|
||||
if (command instanceof CombatCommand) {
|
||||
return (CombatCommand) command;
|
||||
} else {
|
||||
System.out.println("Warning: Forced to make non-combat command " + name + " a combat command.");
|
||||
commandLookup.remove(command);
|
||||
CombatCommand combatCommand = new CombatCommand(name.toLowerCase());
|
||||
commandLookup.add(combatCommand);
|
||||
return combatCommand;
|
||||
}
|
||||
}
|
||||
|
||||
public BaseSWGCommand registerCombatCommand(String name) { return getCommandByName(name); }
|
||||
public BaseSWGCommand registerCommand(String name) { return getCommandByName(name); }
|
||||
public BaseSWGCommand registerGmCommand(String name) { return getCommandByName(name); }
|
||||
public void registerAlias(String name, String target) { }
|
||||
|
||||
}
|
||||
|
||||
@@ -37,7 +37,6 @@ import protocol.swg.FactionResponseMessage;
|
||||
import resources.common.FileUtilities;
|
||||
import resources.common.Opcodes;
|
||||
import resources.datatables.FactionStatus;
|
||||
import resources.datatables.Options;
|
||||
import resources.datatables.PvpStatus;
|
||||
import resources.objects.creature.CreatureObject;
|
||||
import resources.objects.player.PlayerObject;
|
||||
|
||||
@@ -23,7 +23,6 @@ package services.guild;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
import resources.common.Console;
|
||||
import resources.guild.Guild;
|
||||
import resources.objects.SWGList;
|
||||
import resources.objects.guild.GuildObject;
|
||||
|
||||
@@ -0,0 +1,70 @@
|
||||
package services.housing;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.Vector;
|
||||
|
||||
import engine.resources.scene.Point3D;
|
||||
|
||||
public class HouseTemplate
|
||||
{
|
||||
private String deedTemplate;
|
||||
private String buildingTemplate;
|
||||
private int lotCost;
|
||||
private int defaultItemLimit;
|
||||
private Vector<String> placeablePlanets;
|
||||
private Map<String, Point3D> buildingSigns;
|
||||
|
||||
public HouseTemplate(String deedTemplate, String buildingTemplate, int lotCost)
|
||||
{
|
||||
this.deedTemplate = deedTemplate;
|
||||
this.buildingTemplate = buildingTemplate;
|
||||
this.lotCost = lotCost;
|
||||
this.defaultItemLimit = 50;
|
||||
this.placeablePlanets = new Vector<String>();
|
||||
this.buildingSigns = new HashMap<String, Point3D>();
|
||||
}
|
||||
|
||||
public void addBuildingSign(String signTemplate, Point3D signPosition)
|
||||
{
|
||||
buildingSigns.put(signTemplate, signPosition);
|
||||
}
|
||||
public void addPlaceablePlanet(String planetName)
|
||||
{
|
||||
this.placeablePlanets.add(planetName);
|
||||
}
|
||||
public void setDefaultItemLimit(int itemLimit)
|
||||
{
|
||||
this.defaultItemLimit = itemLimit;
|
||||
}
|
||||
|
||||
public String getDeedTemplate()
|
||||
{
|
||||
return this.deedTemplate;
|
||||
}
|
||||
public String getBuildingTemplate()
|
||||
{
|
||||
return this.buildingTemplate;
|
||||
}
|
||||
public Map<String, Point3D> getBuildingSigns()
|
||||
{
|
||||
return this.buildingSigns;
|
||||
}
|
||||
public Vector<String> getPlaceablePlanets()
|
||||
{
|
||||
return this.placeablePlanets;
|
||||
}
|
||||
public boolean canBePlacedOn(String planetName)
|
||||
{
|
||||
if(placeablePlanets.contains(planetName)) return true;
|
||||
return false;
|
||||
}
|
||||
public int getLotCost()
|
||||
{
|
||||
return this.lotCost;
|
||||
}
|
||||
public int getDefaultItemLimit()
|
||||
{
|
||||
return this.defaultItemLimit;
|
||||
}
|
||||
}
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user