aboutsummaryrefslogtreecommitdiff
path: root/gamemode/server/sv_mapchange.lua
blob: 032a1bbf4cb269db79370e97ec07e2e58c032c69 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
--[[
    A script to move the player to a different map
]]
local mapname = game.GetMap()
local mapareasstr = file.Read("artery/maps/" .. mapname .. "/mapareas.txt")

hook.Add("InitPostEntity", "LoadMapChangePoints", function()
    local transfers = string.Explode("\r?\n\r?\n",mapareasstr,true)
    local dontupdatedisconnect = {}
    for k,v in pairs(transfers) do
        local parts = string.Explode("\r?\n",v,true)
        local vectortxt = string.Explode(" ",parts[1],false)
        local svec = Vector(vectortxt[1],vectortxt[2],vectortxt[3])
        local name = parts[2]
        local server = parts[3]
        local model = parts[4]
        local tvt = string.Explode(" ",parts[5],false)

        local sch = ents.Create("art_serverchanger")
        sch.Model = model
        sch.Pos = svec
        sch.OnHit = function(self, coldata,collider)
            print("Coldata")
            PrintTable(coldata)
            print("collider",collider)
            if coldata.HitEntity:IsPlayer() then
                dontupdatedisconnect[coldata.HitEntity] = true
                local db = ART.database
                local qc = table.concat({[[
            UPDATE artery.playerdata SET WorldPosition="]],
                    tvt[1]," ",
                    tvt[2]," ",
                    tvt[3]," ",
                    [[" WHERE SteamID="]],
                    coldata.HitEntity:SteamID64(),
                    '"'})
                print("Running query:",qc)
                local q = db:query(qc)
                function q:onSuccess(data)
                    print("Got data from update:")
                    PrintTable(data)
                    coldata.HitEntity:ConCommand("connect " .. server)
                end
                function q:onError(err,sql)
                    print("Query error:")
                    print("Query",sql)
                    print("Error",err)
                end
                q:start()
            end
        end
        sch:Spawn()
        print("Loading mapchange area",svec)
    end
end)

hook.Add("PlayerDisconnected","SavePlayerData",function(ply)
    local qc
    if dontupdatedisconnect[ply] then
        dontupdatedisconnect[ply] = nil
        qc = table.concat({
            [[UPDATE artery.playerdata SET
                Inventory="]],
                util.TableToJSON(ply.Inventory),
                [[",
                Skills="]],
                util.TableToJSON(ply.Skills),
                [[",
                Quests="]],
                util.TableToJSON(ply.Quests),
                [["
                WHERE SteamID = "]],
                ply:SteamID64(),
                [[";]]
        })
    else
        local pp = ply:GetPos()
        qc = table.concat({
            [[UPDATE artery.playerdata SET
                Inventory="]],
                util.TableToJSON(ply.Inventory),
                [[",
                Skills="]],
                util.TableToJSON(ply.Skills),
                [[",
                Quests="]],
                util.TableToJSON(ply.Quests),
                [[",
                WorldPosition="]],
                pp[1]," ",pp[2]," ",pp[3],
                [[",
                World="]],
                game.GetIPAddress(),
                [["
                WHERE SteamID = "]],
                ply:SteamID64(),
                [[";]]
        })
    end
    local q = ART.database:query(qc)
    function q:onSuccess(data)
        print("Saveing player data successful")
        PrintTable(data)
    end
    function q:onError(err, sql)
        print("Saveing player data errored!")
        print("Query",sql)
        error(err)
    end
    q:start()
end)