diff --git a/src/webserver/admin/npcs.php b/src/webserver/admin/npcs.php
new file mode 100644
index 0000000..4e0a91e
--- /dev/null
+++ b/src/webserver/admin/npcs.php
@@ -0,0 +1,148 @@
+
+
+
+
Wander Admin
+
+Non-Player Characters
+
+Create New NPC
+
+
+
+
+
+ ID |
+ Name |
+ Description |
+ Active? |
+ Unique? |
+ Model Path |
+ Image Path |
+ Avatar Path |
+ Minimum Group Size |
+ Maximum Group Size |
+
+query('SELECT * FROM NPCs');
+ while ($row = $results->fetchArray()) {
+ ?>
+
+ '>= $row['id'] ?> |
+ = $row['name'] ?> |
+ = $row['description'] ?> |
+ = $row['is_active'] ?> |
+ = $row['is_unique'] ?> |
+ = $row['model_path'] ?> |
+ = $row['image_path'] ?> |
+ = $row['avatar_path'] ?> |
+ = $row['minimum_group'] ?> |
+ = $row['maximum_group'] ?> |
+
+
+
+
+Create a New NPC";
+ displayForm(false);
+ break;
+ case 'edit':
+ // edit POI form
+ echo "Edit NPC
";
+ displayForm(true);
+ break;
+ case 'save':
+ if (isset($_POST['name']) && isset($_POST['description']) && isset($_POST['is_active'])) {
+ // do the insert or update
+ if (!isset($_POST['id'])) {
+ // insert
+ $stmt = $conn->prepare('INSERT INTO NPCs (name, description, is_active, is_unique, model_path, image_path, avatar_path, minimum_group, maximum_group) VALUES (:name, :description, :is_active, :is_unique, :model_path, :image_path, :avatar_path, :minimum_group, :maximum_group)');
+ } else {
+ // update
+ $stmt = $conn->prepare('UPDATE NPCs SET name=:name, description=:description, is_active=:is_active, is_unique=:is_unique, model_path=:model_path, image_path=:image_path, avatar_path=:avatar_path, minimum_group=:minimum_group, maximum_group=:maximum_group WHERE id = :id');
+ if ($stmt) $stmt->bindValue(':id', $_POST['id']);
+ }
+ if ($stmt) {
+ $stmt->bindValue(':name', $_POST['name'], SQLITE3_TEXT);
+ $stmt->bindValue(':description', $_POST['description'], SQLITE3_TEXT);
+ $stmt->bindValue(':is_active', $_POST['is_active'] === "on" ? 1 : 0, SQLITE3_INTEGER);
+ $stmt->bindValue(':is_unique', $_POST['is_unique'] === "on" ? 1 : 0, SQLITE3_INTEGER);
+ $stmt->bindValue(':model_path', $_POST['model_path'], SQLITE3_TEXT);
+ $stmt->bindValue(':image_path', $_POST['image_path'], SQLITE3_TEXT);
+ $stmt->bindValue(':avatar_path', $_POST['avatar_path'], SQLITE3_TEXT);
+ $stmt->bindValue(':minimum_group', is_numeric($_POST['minimum_group']) ? intval($_POST['minimum_group']) : 1, SQLITE3_INTEGER);
+ $stmt->bindValue(':maximum_group', is_numeric($_POST['maximum_group']) ? intval($_POST['maximum_group']) : 10, SQLITE3_INTEGER);
+ $result = $stmt->execute();
+ if ($result) {
+ if (isset($_POST['id'])) {
+ echo "Record updated. < back to Non-Player Characters
\n";
+ } else {
+ echo "Record created. < back to Non-Player Characters
\n";
+ }
+ } else {
+ echo "OOPS! There was a problem adding the new NPC!
\n";
+ }
+ } else {
+ echo "OOPS! There was a problem adding the new NPC!!
\n";
+ }
+ } else {
+ echo "Name and Description are required - please go back and try again\n";
+ }
+ break;
+ default:
+ echo "Unknown action: " . $_GET['action'];
+ }
+ }
+
+?>
+
+< back to Admin
+
+
+
+