PlayerEvents SQL and updates to the model
This commit is contained in:
parent
6d7ee2ed16
commit
31de79f1b6
@ -82,12 +82,7 @@ let updateCombatants successfulHack (attacker : PlayerData) (defender : PlayerDa
|
||||
HackId = hack.Id
|
||||
Adversary = if isDefenderEvent then attacker.basicPlayer else defender.basicPlayer
|
||||
IsInstigator = not isDefenderEvent
|
||||
Result =
|
||||
match successfulHack , isDefenderEvent with
|
||||
| true , true -> PlayerEventResult.Negative
|
||||
| false , true -> PlayerEventResult.Positive
|
||||
| true , false -> PlayerEventResult.Positive
|
||||
| false , false -> PlayerEventResult.Negative
|
||||
Success = successfulHack
|
||||
}
|
||||
{ Type = Hacking hackEvent
|
||||
Timestamp = DateTime.UtcNow
|
||||
|
@ -151,7 +151,7 @@ let handleSteal (ctx : IDiscordContext) =
|
||||
|
||||
let num = rand.NextDouble()
|
||||
let dp = { DiscordPlayer.Id = targetId ; DiscordPlayer.Name = targetName }
|
||||
let stealAction result = {
|
||||
let stealAction = {
|
||||
Type = Stealing ( true , dp )
|
||||
Cooldown = ThiefCooldown.Minutes * 1<mins>
|
||||
Timestamp = DateTime.UtcNow
|
||||
@ -185,7 +185,7 @@ let handleSteal (ctx : IDiscordContext) =
|
||||
|> Async.Ignore
|
||||
| false ->
|
||||
let embed = getResultEmbed' WentToPrison
|
||||
do! DbService.updatePlayer GuildEnvironment.pgDb { thief with Events = Array.append [| stealAction PlayerEventResult.Neutral |] thief.Events }
|
||||
do! DbService.updatePlayer GuildEnvironment.pgDb { thief with Events = Array.append [| stealAction |] thief.Events }
|
||||
|> Async.Ignore
|
||||
do! Messaging.sendFollowUpEmbed ctx (embed.Build())
|
||||
do! Async.Sleep 2000
|
||||
|
@ -18,7 +18,7 @@ let TrainerEvents = [|
|
||||
Cooldown = 2<mins>
|
||||
Type = Hacking {
|
||||
Adversary = Sensei
|
||||
Result = PlayerEventResult.Positive
|
||||
Success = true
|
||||
IsInstigator = true
|
||||
HackId = defaultHack.Id } }
|
||||
{ Timestamp = System.DateTime.UtcNow
|
||||
|
@ -34,8 +34,10 @@ let tryFindPlayer connStr (discordId : uint64) =
|
||||
let! user =
|
||||
connStr
|
||||
|> Sql.connect
|
||||
|> Sql.query ("SELECT discord_id, display_name, gbt, strength, inventory " +
|
||||
"FROM \"user\" WHERE discord_id = @did")
|
||||
|> Sql.query """
|
||||
SELECT discord_id, display_name, gbt, strength, inventory
|
||||
FROM "user" WHERE discord_id = @did")
|
||||
"""
|
||||
|> Sql.parameters [ "did", Sql.string (string discordId) ]
|
||||
|> Sql.executeAsync (fun read ->
|
||||
{
|
||||
@ -58,26 +60,86 @@ let tryFindPlayer connStr (discordId : uint64) =
|
||||
let updatePlayer connStr (player : PlayerData) =
|
||||
connStr
|
||||
|> Sql.connect
|
||||
|> Sql.query
|
||||
("UPDATE \"user\" SET gbt = @gbt, strength = @str, inventory = @inv " +
|
||||
" WHERE discord_id = @did")
|
||||
|> Sql.parameters [
|
||||
"did", Sql.string (string player.DiscordId)
|
||||
"gbt", Sql.int (int player.Bank)
|
||||
"str", Sql.int (int player.Traits.Strength)
|
||||
"inv", Sql.intArray (player.Inventory |> Array.map (fun i -> i.Id))
|
||||
]
|
||||
|> Sql.query """
|
||||
UPDATE "user" SET gbt = @gbt, strength = @str, inventory = @inv
|
||||
WHERE discord_id = @did")
|
||||
"""
|
||||
|> Sql.executeNonQueryAsync
|
||||
|> Async.AwaitTask
|
||||
|
||||
let addAchievement connStr (did : uint64) (achievement : string) =
|
||||
connStr
|
||||
|> Sql.connect
|
||||
|> Sql.query
|
||||
("WITH ach AS (INSERT INTO achievement (symbol) VALUES (@symbol) RETURNING id),
|
||||
usr AS (SELECT id FROM \"user\" WHERE discord_id = @did)
|
||||
INSERT INTO user_achievements_achievement (user_id, achievement_id) SELECT usr.id, ach.id FROM usr, ach")
|
||||
|
||||
|> Sql.query """
|
||||
WITH ach AS (INSERT INTO achievement (symbol) VALUES (@symbol) RETURNING id),
|
||||
usr AS (SELECT id FROM "user" WHERE discord_id = @did)
|
||||
INSERT INTO user_achievements_achievement (user_id, achievement_id) SELECT usr.id, ach.id FROM usr, ach")
|
||||
"""
|
||||
|> Sql.parameters [ ( "did" , Sql.string (string did) ) ; ( "achievement", Sql.string achievement ) ]
|
||||
|> Sql.executeNonQueryAsync
|
||||
|> Async.AwaitTask
|
||||
|
||||
let addPlayerEvent connStr (did : uint64) (playerEvent : PlayerEvent) =
|
||||
let sqlParams , query =
|
||||
match playerEvent.Type with
|
||||
| Hacking h ->
|
||||
[
|
||||
( "did", Sql.string (string did) )
|
||||
( "success" , Sql.bool h.Success )
|
||||
( "is_instigator", Sql.bool h.IsInstigator )
|
||||
( "item_id", Sql.int h.HackId )
|
||||
( "cooldown", Sql.int (int playerEvent.Cooldown) )
|
||||
( "adversary_id", Sql.string (string h.Adversary.Id) )
|
||||
( "adversary_name", Sql.string (string h.Adversary.Name) )
|
||||
] ,
|
||||
"""
|
||||
WITH usr AS (SELECT id FROM "user" WHERE discord_id = @did)
|
||||
INSERT INTO player_event (event_type, success, is_instigator, item_id, cooldown, adversary_id, adversary_name, user_id)
|
||||
SELECT 'Hacking', @success, @is_instigator, @item_id, @cooldown, @adversary_id, @adversary_name, usr.id FROM usr
|
||||
"""
|
||||
| Shielding id ->
|
||||
[
|
||||
( "did" , Sql.string (string did) )
|
||||
( "item_id", Sql.int id )
|
||||
( "cooldown", Sql.int (int playerEvent.Cooldown) )
|
||||
] ,
|
||||
"""
|
||||
WITH usr AS (SELECT id FROM "user" WHERE discord_id = @did)
|
||||
INSERT INTO player_event (event_type, item_id, cooldown, user_id)
|
||||
SELECT 'Shielding', @item_id, @cooldown, usr.id FROM usr
|
||||
"""
|
||||
| Stealing(instigator, victim) ->
|
||||
[
|
||||
( "did" , Sql.string (string did) )
|
||||
( "is_instigator", Sql.bool instigator )
|
||||
( "adversary_id", Sql.string (string victim.Id) )
|
||||
( "adversary_name", Sql.string (string victim.Name) )
|
||||
( "cooldown", Sql.int (int playerEvent.Cooldown) )
|
||||
] ,
|
||||
"""
|
||||
WITH usr AS (SELECT id FROM "user" WHERE discord_id = @did)
|
||||
INSERT INTO player_event (event_type, is_instigator, adversary_id, adversary_name, cooldown, user_id)
|
||||
SELECT 'Stealing', @is_instigator, @adversary_id, @adversary_name, @cooldown, usr.id FROM usr
|
||||
"""
|
||||
| Imprison ->
|
||||
[
|
||||
( "did" , Sql.string (string did) )
|
||||
( "cooldown", Sql.int (int playerEvent.Cooldown) )
|
||||
] ,
|
||||
"""
|
||||
WITH usr AS (SELECT id FROM "user" WHERE discord_id = @did)
|
||||
INSERT INTO player_event (event_type, cooldown, user_id)
|
||||
SELECT 'Stealing', @cooldown, usr.id FROM usr
|
||||
"""
|
||||
connStr
|
||||
|> Sql.connect
|
||||
|> Sql.parameters sqlParams
|
||||
|> Sql.query query
|
||||
|> Sql.executeNonQueryAsync
|
||||
|> Async.AwaitTask
|
||||
|
@ -87,15 +87,10 @@ module Types =
|
||||
type DiscordPlayer = { Id: uint64; Name: string }
|
||||
with static member empty = { Id = 0uL ; Name = "None" }
|
||||
|
||||
type PlayerEventResult =
|
||||
| Positive
|
||||
| Neutral
|
||||
| Negative
|
||||
|
||||
type HackEvent = {
|
||||
IsInstigator : bool
|
||||
Adversary : DiscordPlayer
|
||||
Result : PlayerEventResult
|
||||
Success : bool
|
||||
HackId : int
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user