Merged in M4SS/holocore/feature/customization (pull request #569)

Added customization variables
This commit is contained in:
Mads Boddum
2018-03-06 17:09:05 +00:00
committed by Obique PSWG
4 changed files with 34 additions and 14 deletions
@@ -30,6 +30,8 @@ import java.io.IOException;
import java.io.ObjectInputStream;
import java.util.Set;
import com.projectswg.common.data.customization.CustomizationString;
import com.projectswg.common.data.customization.CustomizationVariable;
import com.projectswg.common.data.encodables.tangible.PvpFaction;
import com.projectswg.common.data.encodables.tangible.PvpFlag;
import com.projectswg.common.data.encodables.tangible.PvpStatus;
@@ -49,7 +51,7 @@ import com.projectswg.holocore.resources.player.Player;
public class TangibleObject extends SWGObject {
private byte [] appearanceData = new byte[0];
private CustomizationString appearanceData = new CustomizationString();
private int maxHitPoints = 1000;
private int components = 0;
private boolean inCombat = false;
@@ -83,10 +85,6 @@ public class TangibleObject extends SWGObject {
inCombat = false;
}
public byte [] getAppearanceData() {
return appearanceData;
}
public int getMaxHitPoints() {
return maxHitPoints;
}
@@ -153,8 +151,18 @@ public class TangibleObject extends SWGObject {
return objectEffects;
}
public void setAppearanceData(byte [] appearanceData) {
public void putCustomization(String name, CustomizationVariable value) {
appearanceData.put(name, value);
}
public CustomizationVariable getCustomization(String name) {
return appearanceData.get(name);
}
public void setAppearanceData(CustomizationString appearanceData) {
this.appearanceData = appearanceData;
sendDelta(3, 6, appearanceData);
}
public void setMaxHitPoints(int maxHitPoints) {
@@ -330,7 +338,7 @@ public class TangibleObject extends SWGObject {
super.createBaseline3(target, bb); // 4 variables - BASE3 (4)
bb.addInt(pvpFaction.getCrc()); // Faction - 4
bb.addInt(pvpStatus.getValue()); // Faction Status - 5
bb.addArray(appearanceData); // - 6
bb.addObject(appearanceData); // - 6
bb.addInt(0); // Component customization (Set, Integer) - 7
bb.addInt(0);
bb.addInt(optionFlags); // 8
@@ -362,7 +370,7 @@ public class TangibleObject extends SWGObject {
super.parseBaseline3(buffer);
pvpFaction = PvpFaction.getFactionForCrc(buffer.getInt());
pvpStatus = PvpStatus.getStatusForValue(buffer.getInt());
appearanceData = buffer.getArray();
appearanceData.decode(buffer);
SWGSet.getSwgSet(buffer, 3, 7, Integer.class);
optionFlags = buffer.getInt();
buffer.getInt();
@@ -393,7 +401,7 @@ public class TangibleObject extends SWGObject {
public void save(NetBufferStream stream) {
super.save(stream);
stream.addByte(0);
stream.addArray(appearanceData);
appearanceData.save(stream);
stream.addInt(maxHitPoints);
stream.addInt(components);
stream.addBoolean(inCombat);
@@ -414,7 +422,7 @@ public class TangibleObject extends SWGObject {
public void read(NetBufferStream stream) {
super.read(stream);
stream.getByte();
appearanceData = stream.getArray();
appearanceData.read(stream);
maxHitPoints = stream.getInt();
components = stream.getInt();
inCombat = stream.getBoolean();
@@ -33,6 +33,7 @@ import java.util.Map;
import com.projectswg.common.control.Service;
import com.projectswg.common.data.combat.DamageType;
import com.projectswg.common.data.customization.CustomizationVariable;
import com.projectswg.common.data.info.RelationalServerData;
import com.projectswg.common.data.info.RelationalServerFactory;
import com.projectswg.common.data.swgfile.ClientFactory;
@@ -47,6 +48,7 @@ import com.projectswg.holocore.resources.config.ConfigFile;
import com.projectswg.holocore.resources.containers.ContainerPermissionsType;
import com.projectswg.holocore.resources.objects.SWGObject;
import com.projectswg.holocore.resources.objects.creature.CreatureObject;
import com.projectswg.holocore.resources.objects.tangible.TangibleObject;
import com.projectswg.holocore.resources.objects.weapon.WeaponObject;
import com.projectswg.holocore.resources.objects.weapon.WeaponType;
import com.projectswg.holocore.resources.player.Player;
@@ -335,8 +337,7 @@ public final class StaticItemService extends Service {
private boolean wearableByRodians;
private boolean wearableByTrandoshans;
private boolean wearableByRest;
// TODO customisation variables, ie. for colours
private int colorIndex;
public WearableAttributes(String itemName, String iffTemplate) {
super(itemName, iffTemplate);
@@ -380,6 +381,7 @@ public final class StaticItemService extends Service {
wearableByRodians = resultSet.getInt("race_rodian") != 0;
wearableByTrandoshans = resultSet.getInt("race_trandoshan") != 0;
wearableByRest = resultSet.getInt("race_rest") != 0;
colorIndex = resultSet.getInt("index_color");
return true;
}
@@ -402,6 +404,15 @@ public final class StaticItemService extends Service {
// Add the race restrictions only if there are any
if (!wearableByWookiees || !wearableByIthorians || !wearableByRodians || !wearableByTrandoshans || !wearableByRest)
object.addAttribute("species_restrictions.species_name", buildRaceRestrictionString());
if (colorIndex != 0 && object instanceof TangibleObject) {
CustomizationVariable color = new CustomizationVariable();
color.setValue(colorIndex);
((TangibleObject) object).putCustomization("/private/index_color_1", color);
// TODO our item SDB has no way of defining multiple colors for a single item
}
}
private String buildRaceRestrictionString() {
@@ -28,6 +28,7 @@ package com.projectswg.holocore.services.player.creation;
import java.util.Calendar;
import com.projectswg.common.data.customization.CustomizationString;
import com.projectswg.common.data.encodables.tangible.PvpFlag;
import com.projectswg.common.data.encodables.tangible.Race;
import com.projectswg.common.data.swgfile.ClientFactory;
@@ -135,7 +136,7 @@ public class CharacterCreation {
return createTangible(container, ContainerPermissionsType.INVENTORY, template);
}
private void createHair(CreatureObject creatureObj, String hair, byte [] customization) {
private void createHair(CreatureObject creatureObj, String hair, CustomizationString customization) {
if (hair.isEmpty())
return;
TangibleObject hairObj = createDefaultObject(creatureObj, ClientFactory.formatToSharedFile(hair));