summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'src/special')
-rw-r--r--src/special/spe_battle.erl2
-rw-r--r--src/special/spe_player.erl70
2 files changed, 71 insertions, 1 deletions
diff --git a/src/special/spe_battle.erl b/src/special/spe_battle.erl
index 31f844a..4836fd2 100644
--- a/src/special/spe_battle.erl
+++ b/src/special/spe_battle.erl
@@ -48,7 +48,7 @@ get_equipment_ids (Characters) ->
{UsedWeaponIDs, UsedArmorIDs}.
--spec get_tile_ids (array:array(shr_tile:type())) -> sets:set(binary()).
+-spec get_tile_ids (array:array(shr_tile:instance())) -> sets:set(binary()).
get_tile_ids (TileInstances) ->
UsedTileIDs =
array:sparse_foldl
diff --git a/src/special/spe_player.erl b/src/special/spe_player.erl
new file mode 100644
index 0000000..9cf3fea
--- /dev/null
+++ b/src/special/spe_player.erl
@@ -0,0 +1,70 @@
+-module(spe_player).
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% TYPES %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% EXPORTS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+-export([generate/3]).
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% LOCAL FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% EXPORTED FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+-spec generate (binary(), binary(), binary()) -> shr_player:type().
+generate (Username, Password, Email) ->
+ UsernameLC = string:lowercase(Username),
+ EmailLC = string:lowercase(Email),
+
+ shr_janitor:new(login_db, UsernameLC),
+ shr_janitor:new(login_db, EmailLC),
+
+ ok = shr_database:reserve(login_db, UsernameLC, janitor),
+ ok = shr_database:reserve(login_db, EmailLC, janitor),
+
+ Player = shr_player:new(<<"">>, Username, Password, Email),
+
+ {ok, PlayerID} = shr_database:insert(player_db, janitor, janitor, Player),
+
+ shr_janitor:new(player_db, PlayerID),
+
+ LoginUpdateQueryOps =
+ [
+ shr_db_query:set_value(PlayerID),
+ shr_db_query:set_read_permission(any),
+ shr_db_query:set_write_permission([{user, PlayerID}])
+ ],
+
+ PlayerUpdateQueryOps =
+ [
+ shr_db_query:set_field(shr_player:get_id_field(), PlayerID),
+ shr_db_query:set_read_permission(any),
+ shr_db_query:set_write_permission([{user, PlayerID}])
+ ],
+
+ ok =
+ shr_database:commit
+ (
+ shr_db_query:new(login_db, UsernameLC, janitor, LoginUpdateQueryOps)
+ ),
+
+ ok =
+ shr_database:commit
+ (
+ shr_db_query:new(login_db, EmailLC, janitor, LoginUpdateQueryOps)
+ ),
+
+ ok =
+ shr_database:commit
+ (
+ shr_db_query:new(player_db, PlayerID, janitor, PlayerUpdateQueryOps)
+ ),
+
+ Result = shr_player:set_id(PlayerID, Player),
+
+ Result.