// ==UserScript== // @name Scouter // @namespace Violentmonkey Scripts // @match https://www.dreadcast.net/Main // @version 0.0.1 // @author Pelagia/IsilinBN // @description Un cibleur de nouvelle génération directement connecté à une base de données. Idéal pour les forces de l'Orient. // @license https://github.com/Isilin/dreadcast-scripts?tab=GPL-3.0-1-ov-file // @require https://update.greasyfork.icu/scripts/507382/Dreadcast%20Development%20Kit.user.js // @connect docs.google.com // @connect googleusercontent.com // @connect sheets.googleapis.com // @grant GM_xmlhttpRequest // @grant GM_getValue // @grant GM_setValue // @downloadURL // @updateURL // @downloadURL https://update.greasyfork.icu/scripts/510463/Scouter.user.js // @updateURL https://update.greasyfork.icu/scripts/510463/Scouter.meta.js // ==/UserScript== $(() => { const style = ` #scouter_content { color: white; } #scouter_content .input_group { display: flex; gap: 1rem; margin-bottom: 1rem; } #scouter_content input[type=text] { padding: 4px 12px; display: inline-block; border: 1px solid #7ec8d8; box-sizing: border-box; width: 70%; color: white; } .scouter_infobox_buttons { display: flex; position: absolute; bottom: -30px; left: -2px; width: auto; background-color: #181818; color: white; } .scouter_infobox_buttons .btn { border: 1px solid white; display: grid; } .scouter_infobox_buttons .btn:hover { background-color: #484848; } .interieur.data_info, .interieur.data_stats, .interieur.data_crim { color: #eee; } .interieur.data_info h4, .interieur.data_stats h4, .interieur.data_crim h4 { margin-bottom: 1rem; } .data_info_list, .data_stats_list, .data_crim_list { display: flex; flex-direction: column; width: 100%; font-size: 13px; gap: 0.5rem; } `; const API_TAG = 'scouter_db_api'; const SHEET_ID_TAG = 'scouter_sheet_id'; const SHEED_NAME_TAG = 'scouter_sheet_name'; const SHEET_RANGE_TAG = 'scouter_sheet_range'; let api, sheetId, sheetName, sheetRange; let data; const syncParams = () => { api = DC.LocalMemory.get(API_TAG); sheetId = DC.LocalMemory.get(SHEET_ID_TAG); sheetName = DC.LocalMemory.get(SHEED_NAME_TAG); sheetRange = DC.LocalMemory.get(SHEET_RANGE_TAG); }; const initPersistence = () => { DC.LocalMemory.init(API_TAG, 'AIzaSyAgS_cjEerpTKyHEZa6JjfUwAdxM91Vpuc'); DC.LocalMemory.init( SHEET_ID_TAG, '1VgeD1CghIxgP-5AfkKV7woLm4CXqVLQ53XSHH7vHZZk', ); DC.LocalMemory.init(SHEED_NAME_TAG, 'Data'); DC.LocalMemory.init(SHEET_RANGE_TAG, 'A:T'); syncParams(); }; const loadData = () => { DC.Network.loadSpreadsheet( sheetId, sheetName, sheetRange, api, (result) => { data = result; }, ); }; const openSettings = () => { const save = () => { DC.LocalMemory.set(API_TAG, $('#input_api').val()); DC.LocalMemory.set(SHEET_ID_TAG, $('#input_sheet_id').val()); DC.LocalMemory.set(SHEED_NAME_TAG, $('#input_sheet_name').val()); DC.LocalMemory.set(SHEET_RANGE_TAG, $('#input_sheet_range').val()); syncParams(); loadData(); engine.closeDataBox('scouter_modal'); }; let content = $(`