Кол-во пользователей скрипта

Daniel_Govnocode

Активный
Автор темы
298
45
Версия MoonLoader
Другое
Как посчитать сколько людей пользуется скриптом? Сколько скачиваний узнать через гитхаб, бх в теме не нужно. Именно сколько человек зашло хоть раз в игру со скриптом. Можно как-то обойтись без sql(ну типо бд)?
 
  • Bug
Реакции: влад динозавр

chapo

чопа сребдс // @moujeek
Модератор
8,947
11,722
Проще всего будет через свой сервак, примерно так
client
Lua:
local requests = require('requests');
local baseURL = 'http://localhost:1121';

function myName()
    return sampGetPlayerNickname(select(2, sampGetPlayerIdByCharHandle(PLAYER_PED)));
end

addEventHandler('onScriptTerminate', function(scr)
    if (scr == thisScript()) then
        requests.get(('%s/logout?name=%s&server=%s'):format(baseURL, myName(), select(1, sampGetServerAddress())));
    end
end);

function main()
    while not isSampAvailable() do wait(0) end
    requests.get(('%s/login?name=%s&server=%s'):format(baseURL, myName(), select(1, sampGetServerAddress())));
    while true do
        wait(0)
       
    end
end
server
Go:
package main

import (
    "encoding/json"
    "net/http"
)

var users map[string]string = map[string]string{}

func main() {
    http.HandleFunc("/login", func(w http.ResponseWriter, r *http.Request) {
        name := r.URL.Query().Get("name")
        server := r.URL.Query().Get("server")
        if len(name) == 0 || len(server) == 0 {
            w.WriteHeader(http.StatusBadRequest)
            return
        }
        if _, isExists := users[name]; isExists {
            w.WriteHeader(http.StatusConflict)
            return
        }
        users[name] = server
    })
    http.HandleFunc("/logout", func(w http.ResponseWriter, r *http.Request) {
        name := r.URL.Query().Get("name")
        server := r.URL.Query().Get("server")
        if len(name) == 0 || len(server) == 0 {
            w.WriteHeader(http.StatusBadRequest)
            return
        }
        user, userExists := users[name]
        if !userExists || user != server {
            w.WriteHeader(http.StatusNotFound)
            return
        }
        delete(users, name)
        w.WriteHeader(http.StatusOK)
    })
    http.HandleFunc("/users", func(w http.ResponseWriter, r *http.Request) {
        bytes, err := json.Marshal(users)
        if err != nil {
            w.WriteHeader(http.StatusInternalServerError)
            return
        }
        w.WriteHeader(http.StatusOK)
        w.Write(bytes)
    })
    http.ListenAndServe(":1121", nil)
}
 
  • Вау
  • Bug
Реакции: Vespan и sizeoftrickster

Daniel_Govnocode

Активный
Автор темы
298
45
Проще всего будет через свой сервак, примерно так
client
Lua:
local requests = require('requests');
local baseURL = 'http://localhost:1121';

function myName()
    return sampGetPlayerNickname(select(2, sampGetPlayerIdByCharHandle(PLAYER_PED)));
end

addEventHandler('onScriptTerminate', function(scr)
    if (scr == thisScript()) then
        requests.get(('%s/logout?name=%s&server=%s'):format(baseURL, myName(), select(1, sampGetServerAddress())));
    end
end);

function main()
    while not isSampAvailable() do wait(0) end
    requests.get(('%s/login?name=%s&server=%s'):format(baseURL, myName(), select(1, sampGetServerAddress())));
    while true do
        wait(0)
      
    end
end
server
Go:
package main

import (
    "encoding/json"
    "net/http"
)

var users map[string]string = map[string]string{}

func main() {
    http.HandleFunc("/login", func(w http.ResponseWriter, r *http.Request) {
        name := r.URL.Query().Get("name")
        server := r.URL.Query().Get("server")
        if len(name) == 0 || len(server) == 0 {
            w.WriteHeader(http.StatusBadRequest)
            return
        }
        if _, isExists := users[name]; isExists {
            w.WriteHeader(http.StatusConflict)
            return
        }
        users[name] = server
    })
    http.HandleFunc("/logout", func(w http.ResponseWriter, r *http.Request) {
        name := r.URL.Query().Get("name")
        server := r.URL.Query().Get("server")
        if len(name) == 0 || len(server) == 0 {
            w.WriteHeader(http.StatusBadRequest)
            return
        }
        user, userExists := users[name]
        if !userExists || user != server {
            w.WriteHeader(http.StatusNotFound)
            return
        }
        delete(users, name)
        w.WriteHeader(http.StatusOK)
    })
    http.HandleFunc("/users", func(w http.ResponseWriter, r *http.Request) {
        bytes, err := json.Marshal(users)
        if err != nil {
            w.WriteHeader(http.StatusInternalServerError)
            return
        }
        w.WriteHeader(http.StatusOK)
        w.Write(bytes)
    })
    http.ListenAndServe(":1121", nil)
}
Первое мне больше нравится(короче) и типо шо это делает? Для того что бы эта залупа работала мне надо создать свой сервер и его ссылку вставить за место локалхоста? Шо ещё?
 

chapo

чопа сребдс // @moujeek
Модератор
8,947
11,722
Первое мне больше нравится(короче) и типо шо это делает? Для того что бы эта залупа работала мне надо создать свой сервер и его ссылку вставить за место локалхоста? Шо ещё?
в смысле "первое"? Первое это клиент, второе это пример сервера. Тебе нужно купить вдс и захостить на нем свой сервак. Сервак может быть написан на чем угодно, даже на том же луа