diff --git a/src/main/java/com/icedberries/UBFunkeysServer/ArkOne/ArkOneController.java b/src/main/java/com/icedberries/UBFunkeysServer/ArkOne/ArkOneController.java index 504744e..140dcbe 100644 --- a/src/main/java/com/icedberries/UBFunkeysServer/ArkOne/ArkOneController.java +++ b/src/main/java/com/icedberries/UBFunkeysServer/ArkOne/ArkOneController.java @@ -148,7 +148,10 @@ public class ArkOneController implements TcpHandler { responses.add(trunkPlugin.GetFamiliarsList()); break; case "gjl": - responses.add(trunkPlugin.GetJammerList()); + responses.add(trunkPlugin.GetJammersList()); + break; + case "gml": + responses.add(trunkPlugin.GetMoodsList()); break; case "gutc": responses.add(trunkPlugin.GetUserTransactionsCount(connection)); @@ -165,6 +168,9 @@ public class ArkOneController implements TcpHandler { case "bj": responses.add(trunkPlugin.BuyJammer(commandInfo, connection)); break; + case "bm": + responses.add(trunkPlugin.BuyMood(commandInfo, connection)); + break; // Catch Unhandled Commands default: diff --git a/src/main/java/com/icedberries/UBFunkeysServer/ArkOne/Plugins/TrunkPlugin.java b/src/main/java/com/icedberries/UBFunkeysServer/ArkOne/Plugins/TrunkPlugin.java index e9c550d..faf7894 100644 --- a/src/main/java/com/icedberries/UBFunkeysServer/ArkOne/Plugins/TrunkPlugin.java +++ b/src/main/java/com/icedberries/UBFunkeysServer/ArkOne/Plugins/TrunkPlugin.java @@ -4,11 +4,9 @@ import com.icedberries.UBFunkeysServer.ArkOne.ArkOneParser; import com.icedberries.UBFunkeysServer.DatabaseSetup.TrunkData; import com.icedberries.UBFunkeysServer.domain.Familiar; import com.icedberries.UBFunkeysServer.domain.Jammer; +import com.icedberries.UBFunkeysServer.domain.Mood; import com.icedberries.UBFunkeysServer.domain.User; -import com.icedberries.UBFunkeysServer.service.FamiliarService; -import com.icedberries.UBFunkeysServer.service.FileService; -import com.icedberries.UBFunkeysServer.service.JammerService; -import com.icedberries.UBFunkeysServer.service.UserService; +import com.icedberries.UBFunkeysServer.service.*; import javagrinko.spring.tcp.Connection; import javagrinko.spring.tcp.Server; import org.springframework.beans.factory.annotation.Autowired; @@ -38,7 +36,8 @@ public class TrunkPlugin { private enum PurchaseType { FAMILIAR, - JAMMER + JAMMER, + MOOD } @Autowired @@ -53,12 +52,14 @@ public class TrunkPlugin { @Autowired JammerService jammerService; + @Autowired + MoodService moodService; + @Autowired UserService userService; public String GetUserAssets(Connection connection) throws ParserConfigurationException, IOException, SAXException { - //TODO: IMPLEMENT ITEMS | MOODS - // Moods - Tag looks like this: + //TODO: IMPLEMENT ITEMS | CLEANING STATIONS | ROOMS // Append the starting tags StringBuilder response = new StringBuilder(); @@ -106,6 +107,17 @@ public class TrunkPlugin { if (c > 0) { response.append(""); } + + // Append the moods + Node moodParentNode = ArkOneParser.findParentNodeOfPath(profile.getChildNodes(), "profile/trunk/moods"); + for (int i = 0; i < moodParentNode.getChildNodes().getLength(); i++) { + Element child = (Element) moodParentNode.getChildNodes().item(i); + + String id = child.getAttribute("id"); + + // id -> item id + response.append(""); + } } // Append the ending tags @@ -142,7 +154,7 @@ public class TrunkPlugin { return stringBuilder.toString(); } - public String GetJammerList() { + public String GetJammersList() { // Get all the jammers List jammers = jammerService.findAll(); @@ -151,7 +163,7 @@ public class TrunkPlugin { StringBuilder stringBuilder = new StringBuilder(); stringBuilder.append(""); - // Iterate over the items in the familiars list to add them to the response + // Iterate over the items in the jammers list to add them to the response for (Jammer jammer : jammers) { stringBuilder.append(""); @@ -164,6 +176,28 @@ public class TrunkPlugin { return stringBuilder.toString(); } + public String GetMoodsList() { + + // Get all the moods + List moods = moodService.findAll(); + + // Start to build the response + StringBuilder stringBuilder = new StringBuilder(); + stringBuilder.append(""); + + // Iterate over the items in the moods list to add them to the response + for (Mood mood : moods) { + stringBuilder.append(""); + } + + // Add closing tags + stringBuilder.append(""); + + // Return the list + return stringBuilder.toString(); + } + public String GetUserTransactionsCount(Connection connection) { User user = server.getConnectedUsers().get(connection.getClientIdentifier()); @@ -240,6 +274,14 @@ public class TrunkPlugin { return ""; } + public String BuyMood(Element element, Connection connection) { + // Save this transaction to the DB + PostTransaction(connection, PurchaseType.MOOD, Integer.valueOf(element.getAttribute("id"))); + + // We always return LOOT_BALANCE so players are never charged for these items + return ""; + } + public void PostTransaction(Connection connection, PurchaseType purchaseType, Integer itemId) { User user = server.getConnectedUsers().get(connection.getClientIdentifier()); @@ -257,6 +299,9 @@ public class TrunkPlugin { case JAMMER: cost = jammerService.getCostById(itemId); break; + case MOOD: + cost = moodService.getCostById(itemId); + break; } // Get the rid of the item @@ -268,6 +313,9 @@ public class TrunkPlugin { case JAMMER: rid = jammerService.getRidById(itemId); break; + case MOOD: + rid = moodService.getRidById(itemId); + break; } // Create a transaction xml tag diff --git a/src/main/java/com/icedberries/UBFunkeysServer/DatabaseSetup/TrunkData.java b/src/main/java/com/icedberries/UBFunkeysServer/DatabaseSetup/TrunkData.java index 0adc0e4..eefcb7f 100644 --- a/src/main/java/com/icedberries/UBFunkeysServer/DatabaseSetup/TrunkData.java +++ b/src/main/java/com/icedberries/UBFunkeysServer/DatabaseSetup/TrunkData.java @@ -2,8 +2,10 @@ package com.icedberries.UBFunkeysServer.DatabaseSetup; import com.icedberries.UBFunkeysServer.domain.Familiar; import com.icedberries.UBFunkeysServer.domain.Jammer; +import com.icedberries.UBFunkeysServer.domain.Mood; import com.icedberries.UBFunkeysServer.service.FamiliarService; import com.icedberries.UBFunkeysServer.service.JammerService; +import com.icedberries.UBFunkeysServer.service.MoodService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.context.event.ApplicationReadyEvent; import org.springframework.context.event.EventListener; @@ -21,26 +23,27 @@ public class TrunkData { @Autowired JammerService jammerService; - // List of all familiar ids + @Autowired + MoodService moodService; + + // Familiars private final List familiarIds = Arrays.asList("80036a", "80035a", "80034a", "80033a", "80032a", "80031a", "80030a", "80029a", "80028a", "80027a", "80026a", "80025a", "80017a", "80016a", "80015a", "80007a", "80006a", "80005a", "80004a", "80003a", "80002a", "80001a", "80000a"); - public static final String JAMMER_RID = "80014a"; - private final List JAMMER_PACKAGE_QTYS = Arrays.asList(1, 5, 10, 25, 50, 100); - String PackageOf1 = ""; - String PackageOf5 = ""; - String PackageOf10 = ""; - String PackageOf25 = ""; - String PackageOf50 = ""; - String PackageOf100 = ""; - - private final Integer JAMMER_COST = 10; - private final Integer FAMILIAR_COST = 100; private final Integer FAMILIAR_DISCOUNT_COST = 50; private final Integer FAMILIAR_DURATION = 720; + // Jammers + private final List JAMMER_PACKAGE_QTYS = Arrays.asList(1, 5, 10, 25, 50, 100); + private final Integer JAMMER_COST = 10; + + // Moods + private final List moodIds = Arrays.asList("80041a", "80040a", "80039a", "80038a", "80037a", "80024a", "80023a", + "80022a", "80021a", "80020a", "80019a", "80018a", "80013a", "80012a", "80011a", "80010a", "80009a", "80008a"); + private final Integer MOOD_COST = 100; + @EventListener(ApplicationReadyEvent.class) public void insertFamiliars() { // Iterate over the familiar ids @@ -95,4 +98,30 @@ public class TrunkData { idNum++; } } + + @EventListener(ApplicationReadyEvent.class) + public void insertMoods() { + // Iterate over the mood ids + int idNum = 0; + for (String id : moodIds) { + // Attempt to get from the DB + Mood mood = moodService.findByRid(id).orElse(null); + + // Only insert if the data is null + if (mood == null) { + // Build a new mood to insert + Mood newMood = Mood.builder() + .id(idNum) + .rid(id) + .cost(MOOD_COST) + .build(); + + // Save it to the db + moodService.save(newMood); + } + + // Increment id + idNum++; + } + } } diff --git a/src/main/java/com/icedberries/UBFunkeysServer/domain/Mood.java b/src/main/java/com/icedberries/UBFunkeysServer/domain/Mood.java new file mode 100644 index 0000000..b2b06d7 --- /dev/null +++ b/src/main/java/com/icedberries/UBFunkeysServer/domain/Mood.java @@ -0,0 +1,28 @@ +package com.icedberries.UBFunkeysServer.domain; + +import lombok.*; + +import javax.persistence.Entity; +import javax.persistence.Id; +import javax.persistence.Table; + +@Getter +@Setter +@Builder +@NoArgsConstructor +@AllArgsConstructor +@Entity +@Table(name = "Moods") +public class Mood { + + // DB ID + @Id + private Integer id; + + // Item ID + private String rid; + + private Integer cost; + + //private Integer qty; +} diff --git a/src/main/java/com/icedberries/UBFunkeysServer/repository/MoodRepository.java b/src/main/java/com/icedberries/UBFunkeysServer/repository/MoodRepository.java new file mode 100644 index 0000000..52c2755 --- /dev/null +++ b/src/main/java/com/icedberries/UBFunkeysServer/repository/MoodRepository.java @@ -0,0 +1,25 @@ +package com.icedberries.UBFunkeysServer.repository; + +import com.icedberries.UBFunkeysServer.domain.Mood; +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.CrudRepository; +import org.springframework.data.repository.query.Param; +import org.springframework.stereotype.Repository; + +import java.util.List; +import java.util.Optional; + +@Repository +public interface MoodRepository extends CrudRepository { + + List findAll(); + + @Query("select mood from Mood mood where mood.rid = :rid") + Optional findByRid(@Param("rid") String rid); + + @Query("select mood.cost from Mood mood where mood.id = :id") + Integer getCostById(@Param("id") Integer id); + + @Query("select mood.rid from Mood mood where mood.id = :id") + String getRidById(@Param("id") Integer id); +} diff --git a/src/main/java/com/icedberries/UBFunkeysServer/service/MoodService.java b/src/main/java/com/icedberries/UBFunkeysServer/service/MoodService.java new file mode 100644 index 0000000..281d0b0 --- /dev/null +++ b/src/main/java/com/icedberries/UBFunkeysServer/service/MoodService.java @@ -0,0 +1,19 @@ +package com.icedberries.UBFunkeysServer.service; + +import com.icedberries.UBFunkeysServer.domain.Mood; + +import java.util.List; +import java.util.Optional; + +public interface MoodService { + + List findAll(); + + Mood save(Mood mood); + + Optional findByRid(String rid); + + Integer getCostById(Integer id); + + String getRidById(Integer id); +} diff --git a/src/main/java/com/icedberries/UBFunkeysServer/service/impl/MoodServiceImpl.java b/src/main/java/com/icedberries/UBFunkeysServer/service/impl/MoodServiceImpl.java new file mode 100644 index 0000000..154f5eb --- /dev/null +++ b/src/main/java/com/icedberries/UBFunkeysServer/service/impl/MoodServiceImpl.java @@ -0,0 +1,41 @@ +package com.icedberries.UBFunkeysServer.service.impl; + +import com.icedberries.UBFunkeysServer.domain.Mood; +import com.icedberries.UBFunkeysServer.repository.MoodRepository; +import com.icedberries.UBFunkeysServer.service.MoodService; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.Optional; + +@Service +@RequiredArgsConstructor +public class MoodServiceImpl implements MoodService { + + private final MoodRepository moodRepository; + + public List findAll() { + return moodRepository.findAll(); + } + + @Override + public Mood save(Mood mood) { + return moodRepository.save(mood); + } + + @Override + public Optional findByRid(String rid) { + return moodRepository.findByRid(rid); + } + + @Override + public Integer getCostById(Integer id) { + return moodRepository.getCostById(id); + } + + @Override + public String getRidById(Integer id) { + return moodRepository.getRidById(id); + } +}