Где хранится история покупок Shop

gtixon

Участник
Сообщения
1,078
Реакции
401
Планирую убрать пару вещей из SHOP Core 3.0, нужно узнать у кого они есть, и компенсировать (начислить кредиты).

Как это можно сделать?

В теме ответили полноценным гайдом, поэтому:
Как редактировать Sqlite базу данных?
Редактирование базы данных SHOP Core
SHOP как выдавать предметы через базу данных / csgo
 
Последнее редактирование:

All

Random
Сообщения
553
Реакции
228
Как таковой истории покупок в shop нету. Но через базу данных ты можешь посмотреть у кого есть тот или иной предмет. А так же забрать его у человека и выдать ему кредиты. Но это очень геморно и может привести к поломке базы. Все что я опишу ниже - делать на свой страх и риск.

1) Для начала необходимо установить ПО, а именно - Version 3.11.1 released - DB Browser for SQLite .
2) Затем останавливаем сервер, скачиваем базу данных shop (она находится в папке /addons/sourcemod/data/sqlite/, нам нужен файл shop.sq3).
3) Открываем базу с помощью программы DB Browser for SQLite.
4) Переходим во вкладку данные.
Скрин 001.png
5) Выбираем таблицу shop_items.
Скрин 002.png Скрин 003.png
6) Ищем нужный нам предмет, в моем примере это будет категория trails и предмет DNA 2, на скриншоте видно что у него id 14. Запоминаем/записываем id предмета.
Скрин 004.png
7) Возвращаемся к таблице shop_boughts и в колонке item_id вводим id из пункта 6. Будьте внимательны, после ввода id может найти и другие вещи. Например я ввел 14, у меня так же нашлись предметы из shop под id 114.
8) Запоминаем все player_id у которых есть предмет под id 14 (лучше записать) и запоминаем buy_price (чтоб потом выдать эту сумму игрокам).
Скрин 005.png
9) На всякий случай удаляем записи с id 14 из таблицы shop_boughts. Делается это просто - выделяем все как предметы на рабочем столе и нажимаем delete. А так же удаляем в таблице shop_items предмет под id 14.
Скрин 006.png Скрин 007.png Скрин 008.png
10) Переходим в таблицу shop_players и вводим в поле id - id игрока из пункта 8. (могут быть найдены другие игроки, сверяйтесь) Затем напротив нужного id в колонке money два раза кликаем по цифре и вводим новое значение (старое значение + buy_price). Если в 8 пункте нашлось много игроков с данным предметом - проделываем этот шаг для каждого игрока.
Скрин 009.png Скрин 010.png
10) После того как выдали всем игрокам кредиты за вещь которую будем удалять - нажимаем файл -> Записать изменения. Выходим из программы.
Скрин 012.png
11) Удаляем вещи/модуль shop который хотели, заливаем измененную базу на сервер, включаем его.
12) Proffit!

P.s. Я лишь описал как я удаляю предметы, я не претендую на правильность метода. Если у кого есть замечания или предложения как это сделать быстрей и лучше - напишите, буду рад почитать.
 

gtixon

Участник
Сообщения
1,078
Реакции
401
Как таковой истории покупок в shop нету. Но через базу данных ты можешь посмотреть у кого есть тот или иной предмет. А так же забрать его у человека и выдать ему кредиты. Но это очень геморно и может привести к поломке базы. Все что я опишу ниже - делать на свой страх и риск.

1) Для начала необходимо установить ПО, а именно - Version 3.11.1 released - DB Browser for SQLite .
2) Затем останавливаем сервер, скачиваем базу данных shop (она находится в папке /addons/sourcemod/data/sqlite/, нам нужен файл shop.sq3).
3) Открываем базу с помощью программы DB Browser for SQLite.
4) Переходим во вкладку данные.
Посмотреть вложение 39316
5) Выбираем таблицу shop_items.
Посмотреть вложение 39317 Посмотреть вложение 39318
6) Ищем нужный нам предмет, в моем примере это будет категория trails и предмет DNA 2, на скриншоте видно что у него id 14. Запоминаем/записываем id предмета.
Посмотреть вложение 39319
7) Возвращаемся к таблице shop_boughts и в колонке item_id вводим id из пункта 6. Будьте внимательны, после ввода id может найти и другие вещи. Например я ввел 14, у меня так же нашлись предметы из shop под id 114.
8) Запоминаем все player_id у которых есть предмет под id 14 (лучше записать) и запоминаем buy_price (чтоб потом выдать эту сумму игрокам).
Посмотреть вложение 39320
9) На всякий случай удаляем записи с id 14 из таблицы shop_boughts. Делается это просто - выделяем все как предметы на рабочем столе и нажимаем delete. А так же удаляем в таблице shop_items предмет под id 14.
Посмотреть вложение 39321 Посмотреть вложение 39322 Посмотреть вложение 39323
10) Переходим в таблицу shop_players и вводим в поле id - id игрока из пункта 8. (могут быть найдены другие игроки, сверяйтесь) Затем напротив нужного id в колонке money два раза кликаем по цифре и вводим новое значение (старое значение + buy_price). Если в 8 пункте нашлось много игроков с данным предметом - проделываем этот шаг для каждого игрока.
Посмотреть вложение 39324 Посмотреть вложение 39325
10) После того как выдали всем игрокам кредиты за вещь которую будем удалять - нажимаем файл -> Записать изменения. Выходим из программы.
Посмотреть вложение 39326
11) Удаляем вещи/модуль shop который хотели, заливаем измененную базу на сервер, включаем его.
12) Proffit!

P.s. Я лишь описал как я удаляю предметы, я не претендую на правильность метода. Если у кого есть замечания или предложения как это сделать быстрей и лучше - напишите, буду рад почитать.
А если в момент когда я удаляю предметы, или выдаю их, кто то купил или продал что то на сервере? Когда я залью базу, она ведь будет со старыми данными, то им либо не дастся что они купили, либо дастся тот предмет который они продали.
 

All

Random
Сообщения
553
Реакции
228
А если в момент когда я удаляю предметы, или выдаю их, кто то купил или продал что то на сервере? Когда я залью базу, она ведь будет со старыми данными, то им либо не дастся что они купили, либо дастся тот предмет который они продали.
Обрати внимание на пункты 2 и 11. Нельзя на ходу менять данные. Лучше всего отключить сервер, внести изменения и включить.
 

September

Участник
Сообщения
5,238
Реакции
2,742
  • Команда форума
  • #8
А если в момент когда я удаляю предметы, или выдаю их, кто то купил или продал что то на сервере? Когда я залью базу, она ведь будет со старыми данными, то им либо не дастся что они купили, либо дастся тот предмет который они продали.

sm plugins unload shop
Заливаем бд
sm plugins load shop
 

gtixon

Участник
Сообщения
1,078
Реакции
401
@gtixon,

Если я не ошибаюсь при unload последние данные не сохраняться. + не всегда адекватно встаёт шоп, по крайней мере на версиях 2.х.
А если дать предмет нужно?
upload_2019-2-19_12-45-43.png

Я знаю player_id, item_id, state 1, а id, что писать в id?
 

All

Random
Сообщения
553
Реакции
228
А если дать предмет нужно?
Посмотреть вложение 39328
Я знаю player_id, item_id, state 1, а id, что писать в id?
Тебе надо добавить строку в shop_boughts. Там где Id первый столбец нажми на id (название столбца) и все отсортируется от 1 до 9999+ например. Листаешь вниз, находишь максимальный id и пробавляешь к нему 1. Вот тебе и новый id. Buy time кстати формируется из timestamp - Unix Time Stamp - Epoch Converter
 

September

Участник
Сообщения
5,238
Реакции
2,742
  • Команда форума
  • #12
Сверху Снизу