Перейти к содержимому


Фотография

Extdb3


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 9

#1 OFFLINE   ReXcOr

ReXcOr

    Ст.сержант

  • Пользователи
  • 264 сообщений
  • Откуда:Moscow

Отправлено 08 January 2018 - 16:05

Товарищи!
Кто знает как работать с этой штукой, объясните пожалуйста, я уже всю голову отбил себе, но никак не могу понять, как это работает, тк полный список команд для extdb3 я не смог найти даже на сайте автора данной великолепной приблуды...

Единственное, что я смог сделать это добиться подключения к базе данных :-/

Софт - mariadb

Допустим мы имеем базу - players
В ней столбцы
1. Uid
2. Name
3. Side

Подключаюсь я к ней с помощью
“extdb3” callextension “9:ADD_DATABASE:players”

А как записать туда, что-либо?
Как найти себя по тому же айди и как вернуть?

Сообщение отредактировал ReXcOr: 08 January 2018 - 16:14

  • 0

#2 OFFLINE   Schatten

Schatten

    Капитан

  • Пользователи
  • 1844 сообщений

Отправлено 08 January 2018 - 17:56

Пожалуйста Войдите или Зарегистрируйтесь чтобы увидеть скрытое содержание

, или покопаться в её исходниках.


Сообщение отредактировал Schatten: 08 January 2018 - 17:58

  • 1

#3 OFFLINE   ReXcOr

ReXcOr

    Ст.сержант

  • Пользователи
  • 264 сообщений
  • Откуда:Moscow

Отправлено 09 January 2018 - 01:37

Пожалуйста Войдите или Зарегистрируйтесь чтобы увидеть скрытое содержание

, или покопаться в её исходниках.

Спасибо за наводку! Покапаюсь, тут хоть инфы побольше.

Если кто-нибудь еще может чем-то помочь, буду очень рад помощи! Вопрос остается VERY актуальным =) 


  • 0

#4 OFFLINE   ReXcOr

ReXcOr

    Ст.сержант

  • Пользователи
  • 264 сообщений
  • Откуда:Moscow

Отправлено 09 January 2018 - 14:33

Решил вопрос с этой штукой, отдельное спасибо за наводку Schatten, она мне тоже помогла!

Минигайд, если кому интересно:

@Extdb3\extdb3-conf.ini - настраиваем
[Main]
Version = 1

Randomize Config File = false
;; Randomizes Config File after loading.
;;   Recommend to turn on, if you have enabled filepatching on arma.

Allow Reset = false
;; Allows 9:RESET, usefull for development work

Thread = 0;
;; Option to force number of worker threads for extDB3.
;;   Min = 2, Max = 6

[Log]
Flush = true;
;; Flush logfile after each update.
;;    Option really only usefull if running DEBUG BUILD

[!!!!!]
IP = 127.0.0.1
Port = 3306
Username = ИмяПользователяSQL
Password = ПарольПользователяSQL
Database = !!!!!

Внимание! Там где восклицательные знаки, должно быть название вашей БД, причем обязательно с учетом регистра (Так же как в SQL)
Примерно так:
[MyDBNaMe]
IP = 127.0.0.1
Port = 3306
Username = arma
Password = 12345
Database = MyDBNaMe
Предположим создали таблицы и все дела....
Теперь из консоли Армы:
1. Надо установить соединение с БД - 
"Extdb3" callExtension "9:ADD_DATABASE:BDNaMe";
Там где BDNaMe имя вашей базы данных, учитывая регистр (обязательно).

2. Теперь надо создать протокол, допустим 777 -
"Extdb3" callExtension "9:ADD_DATABASE_PROTOCOL:DBNaMe:SQL_CUSTOM:777:config.ini"
Тут внимание, у вас уже должен быть ini файл, некий шаблон команд.
И путь к нему должен быть такой @Extdb3\sql_custom\config.ini
PS: свой шаблон прикреплю ниже.

3. И только теперь можем оперировать с ДБ, с помощью сформированных в шаблоне команд.
В моем случае используем loadPlayer.
"Extdb3" callExtension  "0:777:loadPlayer:ТутGUIDИгрокаЦифрами".
Мой шаблон, в котором как раз тот самый loadPlayer:
[Default]

Version = 1
;; Used incase there is ever a breaking change, or to inform user in log about a new feature.

;; ----------------------------------------------
;; If set to false, uses SQL instead of Prepared Statement
;; ----------------------------------------------
;; Prepared Statement = true

;; ----------------------------------------------
;; Returns InsertID, Instead of returning [1,[]] It returns [1,[<INSERTID>,[]]]
;; ----------------------------------------------
;; Return InsertID = false

; ----------------------------------------------
; 0 = Strip Bad Chars, 1 = Strip + Log Bad Chars, 2 = Return Error & Log Bad Chars  
;     Note: Logging on works when sending data to database.
; ----------------------------------------------
Strip Chars Mode = 0
Strip Chars = "/\|;{}<>'`"

; --------------------------------------------------------------------------------
; PLAYER SAVING AND LOADING
; --------------------------------------------------------------------------------

[newPlayer]
Return InsertID = false
Prepared Statement = true

SQL1_1 = INSERT INTO
SQL1_2 =     spmc_players (p_steam64, p_money, p_name, p_stats, p_equipment, p_skills, p_experience, p_lastloc, p_joindate, p_lastactive)
SQL1_3 = VALUES
SQL1_4 =     (?,?,?,?,?,?,?,?,CURRENT_TIMESTAMP,CURRENT_TIMESTAMP)

SQL1_INPUTS = 1,2,3,4,5,6,7,8

[loadPlayer]
Return InsertID = false
Prepared Statement = true

SQL1_1 = SELECT
SQL1_2 =     p_money,
SQL1_3 =     p_stats,
SQL1_4 =     p_equipment,
SQL1_5 =     p_skills,
SQL1_6 =     p_experience,
SQL1_7 =     p_lastloc
SQL1_8 = FROM
SQL1_9 =     spmc_players
SQL1_10 = WHERE
SQL1_11 =     p_steam64 = ?
SQL1_12 = LIMIT 1

SQL1_INPUTS = 1

[saveMoney]
Return InsertID = false
Prepared Statement = true

SQL1_1 = UPDATE
SQL1_2 =     spmc_players
SQL1_3 = SET
SQL1_4 =     p_money = ?,
SQL1_5 =     p_lastactive = CURRENT_TIMESTAMP
SQL1_6 = WHERE
SQL1_7 =     p_steam64 = ?
SQL1_8 = LIMIT 1

SQL1_INPUTS = 1,2

[saveLocation]
Return InsertID = false
Prepared Statement = true

SQL1_1 = UPDATE
SQL1_2 =     spmc_players
SQL1_3 = SET
SQL1_4 =     p_lastloc = ?,
SQL1_5 =     p_lastactive = CURRENT_TIMESTAMP
SQL1_6 = WHERE
SQL1_7 =     p_steam64 = ?
SQL1_8 = LIMIT 1

SQL1_INPUTS = 1,2

[updatePlayerName]
Return InsertID = false
Prepared Statement = true

SQL1_1 = UPDATE
SQL1_2 =     spmc_players
SQL1_3 = SET
SQL1_4 =     p_name = ?,
SQL1_5 =     p_lastactive = CURRENT_TIMESTAMP
SQL1_6 = WHERE
SQL1_7 =     p_steam64 = ?
SQL1_8 = LIMIT 1

SQL1_INPUTS = 1,2

[savePlayerStats]
Return InsertID = false
Prepared Statement = true

SQL1_1 = UPDATE
SQL1_2 =     spmc_players
SQL1_3 = SET
SQL1_4 =     p_stats = ?,
SQL1_5 =     p_lastactive = CURRENT_TIMESTAMP
SQL1_6 = WHERE
SQL1_7 =     p_steam64 = ?
SQL1_8 = LIMIT 1

SQL1_INPUTS = 1,2

[savePlayerEquipment]
Return InsertID = false
Prepared Statement = true

SQL1_1 = UPDATE
SQL1_2 =     spmc_players
SQL1_3 = SET
SQL1_4 =     p_equipment = ?,
SQL1_5 =     p_lastactive = CURRENT_TIMESTAMP
SQL1_6 = WHERE
SQL1_7 =     p_steam64 = ?
SQL1_8 = LIMIT 1

SQL1_INPUTS = 1,2

[saveSkills]
Return InsertID = false
Prepared Statement = true

SQL1_1 = UPDATE
SQL1_2 =     spmc_players
SQL1_3 = SET
SQL1_4 =     p_experience = ?,
SQL1_5 =     p_skills = ?,
SQL1_6 =     p_lastactive = CURRENT_TIMESTAMP
SQL1_7 = WHERE
SQL1_8 =     p_steam64 = ?
SQL1_9 = LIMIT 1

SQL1_INPUTS = 1,2,3

[saveExperience]
Return InsertID = false
Prepared Statement = true

SQL1_1 = UPDATE
SQL1_2 =     spmc_players
SQL1_3 = SET
SQL1_4 =     p_experience = ?,
SQL1_5 =     p_lastactive = CURRENT_TIMESTAMP
SQL1_6 = WHERE
SQL1_7 =     p_steam64 = ?
SQL1_8 = LIMIT 1

SQL1_INPUTS = 1,2

[savePlayerFull]
Return InsertID = false
Prepared Statement = true

SQL1_1 = UPDATE
SQL1_2 =     spmc_players
SQL1_3 = SET
SQL1_4 =     p_name = ?,
SQL1_5 =     p_stats = ?,
SQL1_6 =     p_equipment = ?,
SQL1_7 =     p_money = ?,
SQL1_8 =     p_skills = ?,
SQL1_9 =     p_experience = ?,
SQL1_10 =    p_lastloc = ?,
SQL1_11 =    p_lastactive = CURRENT_TIMESTAMP
SQL1_12 = WHERE
SQL1_13 =    p_steam64 = ?
SQL1_14 = LIMIT 1

SQL1_INPUTS = 1,2,3,4,5,6,7,8
Надеюсь это кому-то поможет.))
Если читая мой "Гуйд" ладонь ложиться на лицо, прошу простить, хотел как лучше))
PS если надо подробнее, пишите в ЛС

Сообщение отредактировал ReXcOr: 09 January 2018 - 17:13

  • 2

#5 OFFLINE   Dimon UA

Dimon UA

    Ст.сержант

  • Пользователи
  • 304 сообщений
  • Откуда:Севастополь

Отправлено 09 January 2018 - 19:01

выложи все нужные файлы и тестовую миссию тоже по возможности


  • 0

#6 OFFLINE   ReXcOr

ReXcOr

    Ст.сержант

  • Пользователи
  • 264 сообщений
  • Откуда:Moscow

Отправлено 09 January 2018 - 22:07

Ок, сделаю небольшое руководство, выложу на неделе

Сообщение отредактировал ReXcOr: 10 January 2018 - 08:47

  • 1

#7 OFFLINE   ReXcOr

ReXcOr

    Ст.сержант

  • Пользователи
  • 264 сообщений
  • Откуда:Moscow

Отправлено 11 January 2018 - 11:40

https://arma3.ru/for...stvo-po-extdb3/

Ссылка на руководство


  • 0

#8 OFFLINE   Zlobot

Zlobot

    Мл.сержант

  • Пользователи
  • 149 сообщений
  • Откуда:Хабаровск

Отправлено 16 January 2018 - 14:01

Можно попроще команды в запросах прописать. Типа так:

[LoadPlayer]
SQL1_1 = SELECT p_weapon, s_weapon, h_weapon, uniform, vest, backpack, helmet, facewear, binocular, items, energy, damage, infection, oxygen, bleeding, hunger, thirst, alcohol, temper, position, id FROM players WHERE uid=?;
SQL1_INPUTS = 1
OUTPUT = 1,2,3,4,5,6,7-string,8-string,9,10,11,12,13,14,15,16,17,18,19,20,21
 
[NewPlayer]
SQL1_1 = INSERT INTO players (uid, name, p_weapon, s_weapon, h_weapon, uniform, vest, backpack, helmet, facewear, binocular, items, energy, damage, infection, oxygen, bleeding, hunger, thirst, alcohol, temper, position) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?);
SQL1_INPUTS = 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22
 
ну и тп.

Сообщение отредактировал Zlobot: 16 January 2018 - 14:03

  • 1

#9 OFFLINE   Ego_Brain

Ego_Brain

    Ефрейтор

  • Пользователи
  • 49 сообщений
  • Откуда:Холмск

Отправлено 20 January 2019 - 12:17

Какой лимит размера строки, возвращаемой extDB3?


  • 0

#10 OFFLINE   vlad333000

vlad333000

    Полковник

  • Пользователи
  • 3224 сообщений
  • Откуда:Кострома

Отправлено 20 January 2019 - 12:31

Ego_Brain, ограничение движка игры, из расширения на данный момент можно вернуть строку длинной в 10240 символов, вклбчая '\0'. С помощью правильно сдланного расширения этот лимит можно увеличить за счет получения результата по кусочкам (что, насколько мне известно, может etxdb3)

Сообщение отредактировал vlad333000: 20 January 2019 - 12:34

  • 0




Яндекс.Метрика