diff --git a/src/main/java/com/icedberries/UBFunkeysServer/ArkOne/ArkOneController.java b/src/main/java/com/icedberries/UBFunkeysServer/ArkOne/ArkOneController.java
index fbb1141..504744e 100644
--- a/src/main/java/com/icedberries/UBFunkeysServer/ArkOne/ArkOneController.java
+++ b/src/main/java/com/icedberries/UBFunkeysServer/ArkOne/ArkOneController.java
@@ -147,6 +147,9 @@ public class ArkOneController implements TcpHandler {
case "gfl":
responses.add(trunkPlugin.GetFamiliarsList());
break;
+ case "gjl":
+ responses.add(trunkPlugin.GetJammerList());
+ break;
case "gutc":
responses.add(trunkPlugin.GetUserTransactionsCount(connection));
break;
@@ -154,11 +157,14 @@ public class ArkOneController implements TcpHandler {
responses.add(trunkPlugin.GetUserTransactions(connection));
break;
case "asp":
- responses.add(trunkPlugin.AssetParam());
+ responses.add(trunkPlugin.AssetParam(commandInfo, connection));
break;
case "bf":
responses.add(trunkPlugin.BuyFamiliar(commandInfo, connection));
break;
+ case "bj":
+ responses.add(trunkPlugin.BuyJammer(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 a1edf9d..e9c550d 100644
--- a/src/main/java/com/icedberries/UBFunkeysServer/ArkOne/Plugins/TrunkPlugin.java
+++ b/src/main/java/com/icedberries/UBFunkeysServer/ArkOne/Plugins/TrunkPlugin.java
@@ -1,10 +1,13 @@
package com.icedberries.UBFunkeysServer.ArkOne.Plugins;
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.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 javagrinko.spring.tcp.Connection;
import javagrinko.spring.tcp.Server;
@@ -34,7 +37,8 @@ public class TrunkPlugin {
private final Integer LOOT_BALANCE = 2500;
private enum PurchaseType {
- FAMILIAR
+ FAMILIAR,
+ JAMMER
}
@Autowired
@@ -46,11 +50,14 @@ public class TrunkPlugin {
@Autowired
FamiliarService familiarService;
+ @Autowired
+ JammerService jammerService;
+
@Autowired
UserService userService;
public String GetUserAssets(Connection connection) throws ParserConfigurationException, IOException, SAXException {
- //TODO: IMPLEMENT ITEMS | MOODS | JAMMERS
+ //TODO: IMPLEMENT ITEMS | MOODS
// Moods - Tag looks like this:
// Append the starting tags
@@ -88,6 +95,17 @@ public class TrunkPlugin {
// id -> item id
response.append("");
}
+
+ /* Append the jammers
+ * NOTE: We have to store this on the profile since the user doesn't properly save jammer
+ * counts to the profile data
+ */
+ User user = server.getConnectedUsers().get(connection.getClientIdentifier());
+ Integer p = user.getJammersUsed() != null ? user.getJammersUsed() : 0;
+ Integer c = user.getJammersTotal() != null ? user.getJammersTotal() : 0;
+ if (c > 0) {
+ response.append("");
+ }
}
// Append the ending tags
@@ -112,7 +130,7 @@ public class TrunkPlugin {
// Iterate over the items in the familiars list to add them to the response
for (Familiar familiar : familiars) {
- stringBuilder.append("");
}
@@ -124,6 +142,28 @@ public class TrunkPlugin {
return stringBuilder.toString();
}
+ public String GetJammerList() {
+
+ // Get all the jammers
+ List jammers = jammerService.findAll();
+
+ // Start to build the response
+ StringBuilder stringBuilder = new StringBuilder();
+ stringBuilder.append("");
+
+ // Iterate over the items in the familiars list to add them to the response
+ for (Jammer jammer : jammers) {
+ 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());
@@ -157,20 +197,50 @@ public class TrunkPlugin {
}
}
- public String AssetParam() {
- // Doesn't seem to be needed so we can just respond with an empty xml tag
+ public String AssetParam(Element element, Connection connection) {
+ /* This method would be used to update the server profile data for when familiars are started (setting start time)
+ * Or when you use a jammer
+ *
+ * For familiars we can trust the profile data saved and load from those
+ * For jammers, the profile doesn't update properly so we need to update the jammer used count when received
+ */
+
+ // Check for id equal to the jammer rid
+ if (element.getAttribute("id").equals("80014a")) {
+ User user = server.getConnectedUsers().get(connection.getClientIdentifier());
+ Integer newUsed = Integer.valueOf(element.getAttribute("p"));
+ user.setJammersUsed(newUsed);
+ userService.updateUserOnServer(connection, user);
+ }
+
+ // Return this regardless of outcome (I don't believe a response is read from this)
return "";
}
public String BuyFamiliar(Element element, Connection connection) {
// Save this transaction to the DB
- PostTransaction(connection, PurchaseType.FAMILIAR, element.getAttribute("id"));
+ PostTransaction(connection, PurchaseType.FAMILIAR, 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, String itemId) {
+ public String BuyJammer(Element element, Connection connection) {
+ // Save this transaction to the DB
+ PostTransaction(connection, PurchaseType.JAMMER, Integer.valueOf(element.getAttribute("id")));
+
+ // Increase the amount of jammers a player has in their account
+ User user = server.getConnectedUsers().get(connection.getClientIdentifier());
+ Integer qtyBought = jammerService.getQtyById(Integer.valueOf(element.getAttribute("id")));
+ Integer currentTotal = user.getJammersTotal() != null ? user.getJammersTotal() : 0;
+ user.setJammersTotal(currentTotal + qtyBought);
+ userService.updateUserOnServer(connection, user);
+
+ // 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());
// Get the date for this transaction
@@ -184,10 +254,24 @@ public class TrunkPlugin {
case FAMILIAR:
cost = familiarService.getCostById(itemId);
break;
+ case JAMMER:
+ cost = jammerService.getCostById(itemId);
+ break;
+ }
+
+ // Get the rid of the item
+ String rid = "";
+ switch(purchaseType) {
+ case FAMILIAR:
+ rid = familiarService.getRidById(itemId);
+ break;
+ case JAMMER:
+ rid = jammerService.getRidById(itemId);
+ break;
}
// Create a transaction xml tag
- String transaction = "";
// Append to the user's transaction history
diff --git a/src/main/java/com/icedberries/UBFunkeysServer/ArkOne/Plugins/UserPlugin.java b/src/main/java/com/icedberries/UBFunkeysServer/ArkOne/Plugins/UserPlugin.java
index c37b226..25a3dd4 100644
--- a/src/main/java/com/icedberries/UBFunkeysServer/ArkOne/Plugins/UserPlugin.java
+++ b/src/main/java/com/icedberries/UBFunkeysServer/ArkOne/Plugins/UserPlugin.java
@@ -54,6 +54,8 @@ public class UserPlugin {
.rawBuddyList("")
.transactionCount(0)
.transactionHistory("")
+ .jammersUsed(0)
+ .jammersTotal(0)
.build();
// 0 - Successfully registered
diff --git a/src/main/java/com/icedberries/UBFunkeysServer/DatabaseSetup/TrunkData.java b/src/main/java/com/icedberries/UBFunkeysServer/DatabaseSetup/TrunkData.java
index 171ed31..0adc0e4 100644
--- a/src/main/java/com/icedberries/UBFunkeysServer/DatabaseSetup/TrunkData.java
+++ b/src/main/java/com/icedberries/UBFunkeysServer/DatabaseSetup/TrunkData.java
@@ -1,7 +1,9 @@
package com.icedberries.UBFunkeysServer.DatabaseSetup;
import com.icedberries.UBFunkeysServer.domain.Familiar;
+import com.icedberries.UBFunkeysServer.domain.Jammer;
import com.icedberries.UBFunkeysServer.service.FamiliarService;
+import com.icedberries.UBFunkeysServer.service.JammerService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.context.event.ApplicationReadyEvent;
import org.springframework.context.event.EventListener;
@@ -16,10 +18,25 @@ public class TrunkData {
@Autowired
FamiliarService familiarService;
+ @Autowired
+ JammerService jammerService;
+
// List of all familiar ids
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;
@@ -27,15 +44,17 @@ public class TrunkData {
@EventListener(ApplicationReadyEvent.class)
public void insertFamiliars() {
// Iterate over the familiar ids
+ int idNum = 0;
for (String id : familiarIds) {
// Attempt to get it from the DB
- Familiar familiar = familiarService.findById(id).orElse(null);
+ Familiar familiar = familiarService.findByRid(id).orElse(null);
// Only insert if the data is null
if (familiar == null) {
// Build a new familiar to insert
Familiar newFamiliar = Familiar.builder()
- .id(id)
+ .id(idNum)
+ .rid(id)
.cost(FAMILIAR_COST)
.discountedCost(FAMILIAR_DISCOUNT_COST)
.duration(FAMILIAR_DURATION)
@@ -44,6 +63,36 @@ public class TrunkData {
// Save it to the db
familiarService.save(newFamiliar);
}
+
+ // Increment id
+ idNum++;
+ }
+ }
+
+ @EventListener(ApplicationReadyEvent.class)
+ public void insertJammers() {
+ // Iterate over the jammer package quantities
+ int idNum = 0;
+ for (Integer qty : JAMMER_PACKAGE_QTYS) {
+ // Attempt to get from the DB
+ Jammer jammer = jammerService.findByQty(qty).orElse(null);
+
+ // Only insert if the data is null
+ if (jammer == null) {
+ // Build a new jammer to insert
+ Jammer newJammer = Jammer.builder()
+ .id(idNum)
+ .rid(JAMMER_RID)
+ .cost(JAMMER_COST * qty)
+ .qty(qty)
+ .build();
+
+ // Save it to the db
+ jammerService.save(newJammer);
+ }
+
+ // Increment id
+ idNum++;
}
}
}
diff --git a/src/main/java/com/icedberries/UBFunkeysServer/domain/Familiar.java b/src/main/java/com/icedberries/UBFunkeysServer/domain/Familiar.java
index 328a00d..5f69caa 100644
--- a/src/main/java/com/icedberries/UBFunkeysServer/domain/Familiar.java
+++ b/src/main/java/com/icedberries/UBFunkeysServer/domain/Familiar.java
@@ -15,9 +15,12 @@ import javax.persistence.Table;
@Table(name = "Familiars")
public class Familiar {
- // Item ID
+ // DB ID
@Id
- private String id;
+ private Integer id;
+
+ // Item ID
+ private String rid;
private Integer cost;
diff --git a/src/main/java/com/icedberries/UBFunkeysServer/domain/Jammer.java b/src/main/java/com/icedberries/UBFunkeysServer/domain/Jammer.java
new file mode 100644
index 0000000..3351019
--- /dev/null
+++ b/src/main/java/com/icedberries/UBFunkeysServer/domain/Jammer.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 = "Jammers")
+public class Jammer {
+
+ // 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/domain/User.java b/src/main/java/com/icedberries/UBFunkeysServer/domain/User.java
index b01f900..bef208b 100644
--- a/src/main/java/com/icedberries/UBFunkeysServer/domain/User.java
+++ b/src/main/java/com/icedberries/UBFunkeysServer/domain/User.java
@@ -81,6 +81,10 @@ public class User {
@Type(type = "org.hibernate.type.TextType")
private String transactionHistory;
+ private Integer jammersTotal;
+
+ private Integer jammersUsed;
+
public java.util.UUID getConnectionId() {
return java.util.UUID.fromString(connectionId);
}
diff --git a/src/main/java/com/icedberries/UBFunkeysServer/repository/FamiliarRepository.java b/src/main/java/com/icedberries/UBFunkeysServer/repository/FamiliarRepository.java
index 56a8c31..bb0b43a 100644
--- a/src/main/java/com/icedberries/UBFunkeysServer/repository/FamiliarRepository.java
+++ b/src/main/java/com/icedberries/UBFunkeysServer/repository/FamiliarRepository.java
@@ -7,12 +7,18 @@ import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;
import java.util.List;
+import java.util.Optional;
@Repository
-public interface FamiliarRepository extends CrudRepository {
+public interface FamiliarRepository extends CrudRepository {
List findAll();
@Query("select familiar.cost from Familiar familiar where familiar.id = :id")
- Integer getCostById(@Param("id") String id);
+ Integer getCostById(@Param("id") Integer id);
+
+ Optional findByRid(String rid);
+
+ @Query("select familiar.rid from Familiar familiar where familiar.id = :id")
+ String getRidById(@Param("id") Integer id);
}
diff --git a/src/main/java/com/icedberries/UBFunkeysServer/repository/JammerRepository.java b/src/main/java/com/icedberries/UBFunkeysServer/repository/JammerRepository.java
new file mode 100644
index 0000000..3c7e47a
--- /dev/null
+++ b/src/main/java/com/icedberries/UBFunkeysServer/repository/JammerRepository.java
@@ -0,0 +1,28 @@
+package com.icedberries.UBFunkeysServer.repository;
+
+import com.icedberries.UBFunkeysServer.domain.Jammer;
+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 JammerRepository extends CrudRepository {
+
+ @Query("select jammer.cost from Jammer jammer where jammer.id = :id")
+ Integer getCostById(@Param("id") Integer id);
+
+ @Query("select jammer from Jammer jammer where jammer.qty = :qty")
+ Optional findByQty(@Param("qty") Integer qty);
+
+ @Query("select jammer.rid from Jammer jammer where jammer.id = :id")
+ String getRidById(@Param("id") Integer id);
+
+ @Query("select jammer.qty from Jammer jammer where jammer.id = :id")
+ Integer getQtyById(@Param("id") Integer id);
+
+ List findAll();
+}
diff --git a/src/main/java/com/icedberries/UBFunkeysServer/service/FamiliarService.java b/src/main/java/com/icedberries/UBFunkeysServer/service/FamiliarService.java
index fa9abc5..e7123cf 100644
--- a/src/main/java/com/icedberries/UBFunkeysServer/service/FamiliarService.java
+++ b/src/main/java/com/icedberries/UBFunkeysServer/service/FamiliarService.java
@@ -7,11 +7,13 @@ import java.util.Optional;
public interface FamiliarService {
- Optional findById(String id);
+ Optional findByRid(String rid);
Familiar save(Familiar familiar);
List findAll();
- Integer getCostById(String id);
+ Integer getCostById(Integer id);
+
+ String getRidById(Integer id);
}
diff --git a/src/main/java/com/icedberries/UBFunkeysServer/service/JammerService.java b/src/main/java/com/icedberries/UBFunkeysServer/service/JammerService.java
new file mode 100644
index 0000000..c229e9f
--- /dev/null
+++ b/src/main/java/com/icedberries/UBFunkeysServer/service/JammerService.java
@@ -0,0 +1,21 @@
+package com.icedberries.UBFunkeysServer.service;
+
+import com.icedberries.UBFunkeysServer.domain.Jammer;
+
+import java.util.List;
+import java.util.Optional;
+
+public interface JammerService {
+
+ Integer getCostById(Integer id);
+
+ Jammer save(Jammer jammer);
+
+ Optional findByQty(Integer qty);
+
+ String getRidById(Integer id);
+
+ List findAll();
+
+ Integer getQtyById(Integer id);
+}
diff --git a/src/main/java/com/icedberries/UBFunkeysServer/service/impl/FamiliarServiceImpl.java b/src/main/java/com/icedberries/UBFunkeysServer/service/impl/FamiliarServiceImpl.java
index e7b4d03..7883bf4 100644
--- a/src/main/java/com/icedberries/UBFunkeysServer/service/impl/FamiliarServiceImpl.java
+++ b/src/main/java/com/icedberries/UBFunkeysServer/service/impl/FamiliarServiceImpl.java
@@ -16,8 +16,8 @@ public class FamiliarServiceImpl implements FamiliarService {
private final FamiliarRepository familiarRepository;
@Override
- public Optional findById(String id) {
- return familiarRepository.findById(id);
+ public Optional findByRid(String rid) {
+ return familiarRepository.findByRid(rid);
}
@Override
@@ -31,7 +31,12 @@ public class FamiliarServiceImpl implements FamiliarService {
}
@Override
- public Integer getCostById(String id) {
+ public Integer getCostById(Integer id) {
return familiarRepository.getCostById(id);
}
+
+ @Override
+ public String getRidById(Integer id) {
+ return familiarRepository.getRidById(id);
+ }
}
diff --git a/src/main/java/com/icedberries/UBFunkeysServer/service/impl/JammerServiceImpl.java b/src/main/java/com/icedberries/UBFunkeysServer/service/impl/JammerServiceImpl.java
new file mode 100644
index 0000000..f313f36
--- /dev/null
+++ b/src/main/java/com/icedberries/UBFunkeysServer/service/impl/JammerServiceImpl.java
@@ -0,0 +1,47 @@
+package com.icedberries.UBFunkeysServer.service.impl;
+
+import com.icedberries.UBFunkeysServer.domain.Jammer;
+import com.icedberries.UBFunkeysServer.repository.JammerRepository;
+import com.icedberries.UBFunkeysServer.service.JammerService;
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+import java.util.Optional;
+
+@Service
+@RequiredArgsConstructor
+public class JammerServiceImpl implements JammerService {
+
+ private final JammerRepository jammerRepository;
+
+ @Override
+ public Integer getCostById(Integer id) {
+ return jammerRepository.getCostById(id);
+ }
+
+ @Override
+ public Jammer save(Jammer jammer) {
+ return jammerRepository.save(jammer);
+ }
+
+ @Override
+ public Optional findByQty(Integer qty) {
+ return jammerRepository.findByQty(qty);
+ }
+
+ @Override
+ public String getRidById(Integer id) {
+ return jammerRepository.getRidById(id);
+ }
+
+ @Override
+ public List findAll() {
+ return jammerRepository.findAll();
+ }
+
+ @Override
+ public Integer getQtyById(Integer id) {
+ return jammerRepository.getQtyById(id);
+ }
+}