mirror of
https://github.com/ProjectSWGCore/Holocore.git
synced 2026-10-04 19:13:19 -04:00
Merged in M4SS/holocore/feature/customization (pull request #569)
Added customization variables
This commit is contained in:
+1
-1
Submodule PSWGCommon updated: 3934cc12aa...9236f68e56
+18
-10
@@ -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() {
|
||||
|
||||
+2
-1
@@ -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));
|
||||
|
||||
Reference in New Issue
Block a user