├── README.md ├── config.json ├── index.js ├── manifest.json ├── map ├── protocol.351828.map ├── protocol.353399.map └── protocol.357120.map ├── module.json └── settings_migrator.js /README.md: -------------------------------------------------------------------------------- 1 | # TerableOpcodes 2 | 3 | This module notifies you once there are updated opcodes for your region. 4 | 5 | Make sure to drop files in the \map\ folder into your proxy's \node_modules\tera-data\map\ folder 6 | 7 | https://discord.gg/huycMsa 8 | 9 | ## Usage 10 | 11 | ### `terao region` 12 | 13 | - Toggles Opcode update notifications for that region. Example: terao na 14 | 15 | ### `terao regionu` 16 | 17 | - Toggles Opcode update notifications for that region for the current patch. Example: terao nau 18 | 19 | ## Currently Added NA Module Opcodes 20 | - [TerableAngler](https://github.com/TerableCoder/TerableAngler) 21 | - [TerableServant](https://github.com/TerableCoder/TerableServant) 22 | - [Tera-Colorful-Whispers](https://github.com/TerableCoder/tera-colorful-whispers) 23 | - [Endless-Crafting](https://github.com/TerableCoder/Endless-Crafting) 24 | - [cmd-channel](https://github.com/TerableCoder/cmd-channel) 25 | -------------------------------------------------------------------------------- /config.json: -------------------------------------------------------------------------------- 1 | { 2 | "version": 13, 3 | "data": { 4 | "NA": true, 5 | "EU": false, 6 | "RU": false, 7 | "TW": false, 8 | "SEA": false, 9 | "JP": false, 10 | "newUpdate87NA": false, 11 | "newUpdate87EU": false, 12 | "newUpdate87RU": false, 13 | "newUpdate87TW": false, 14 | "newUpdate87SEA": false, 15 | "newUpdate87JP": false 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /index.js: -------------------------------------------------------------------------------- 1 | module.exports = function TerableOpcodes(mod) { 2 | const command = mod.command || mod.require.command; 3 | mod.hook('S_LOAD_CLIENT_USER_SETTING', 1, (event) => { 4 | if((mod.settings.newUpdate87NA && mod.settings.NA) || 5 | (mod.settings.newUpdate87EU && mod.settings.EU) || 6 | (mod.settings.newUpdate87RU && mod.settings.RU) || 7 | (mod.settings.newUpdate87TW && mod.settings.TW) || 8 | (mod.settings.newUpdate87SEA && mod.settings.SEA) || 9 | (mod.settings.newUpdate87JP && mod.settings.JP)){ 10 | let timeout = setTimeout(() => { 11 | command.message(`New Opcode Update Available`); 12 | }, 3000); 13 | } 14 | }); 15 | mod.command.add('terao', (arg) => { 16 | if(arg) arg = arg.toLowerCase(); 17 | if("nau" == arg){ 18 | mod.settings.newUpdate87NA = !mod.settings.newUpdate87NA; 19 | command.message(`newUpdate87NA message is ${mod.settings.newUpdate87NA ? "on" : "off"}.`); 20 | } else if("na" == arg){ 21 | mod.settings.NA = !mod.settings.NA; 22 | command.message(`NA message is ${mod.settings.NA ? "on" : "off"}.`); 23 | } else if("euu" == arg){ 24 | mod.settings.newUpdate87EU = !mod.settings.newUpdate87EU; 25 | command.message(`newUpdate87EU message is ${mod.settings.newUpdate87EU ? "on" : "off"}.`); 26 | } else if("eu" == arg){ 27 | mod.settings.EU = !mod.settings.EU; 28 | command.message(`EU message is ${mod.settings.EU ? "on" : "off"}.`); 29 | } else if("ruu" == arg){ 30 | mod.settings.newUpdate87RU = !mod.settings.newUpdate87RU; 31 | command.message(`newUpdate87RU message is ${mod.settings.newUpdate87RU ? "on" : "off"}.`); 32 | } else if("ru" == arg){ 33 | mod.settings.RU = !mod.settings.RU; 34 | command.message(`RU message is ${mod.settings.RU ? "on" : "off"}.`); 35 | } else if("twu" == arg){ 36 | mod.settings.newUpdate87TW = !mod.settings.newUpdate87TW; 37 | command.message(`newUpdate87TW message is ${mod.settings.newUpdate87TW ? "on" : "off"}.`); 38 | } else if("tw" == arg){ 39 | mod.settings.TW = !mod.settings.TW; 40 | command.message(`TW message is ${mod.settings.TW ? "on" : "off"}.`); 41 | } else if("seau" == arg){ 42 | mod.settings.newUpdate87SEA = !mod.settings.newUpdate87SEA; 43 | command.message(`newUpdate87SEA message is ${mod.settings.newUpdate87SEA ? "on" : "off"}.`); 44 | } else if("sea" == arg){ 45 | mod.settings.SEA = !mod.settings.SEA; 46 | command.message(`SEA message is ${mod.settings.SEA ? "on" : "off"}.`); 47 | } else if("jpu" == arg){ 48 | mod.settings.newUpdate87JP = !mod.settings.newUpdate87JP; 49 | command.message(`newUpdate87JP message is ${mod.settings.newUpdate87JP ? "on" : "off"}.`); 50 | } else if("jp" == arg){ 51 | mod.settings.SEA = !mod.settings.SEA; 52 | command.message(`JP message is ${mod.settings.JP ? "on" : "off"}.`); 53 | } 54 | }); 55 | } -------------------------------------------------------------------------------- /manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "files": { 3 | "config.json": { 4 | "overwrite": false, 5 | "hash": "db740bcd129ec880be516ce1936d5048cf9568f1c08ec4e792c5f26cfa5c7d1a" 6 | }, 7 | "index.js": "1eb179cf837017686abc363c9fac2313b0ebdb3b6148f6e159208795f5c70c55", 8 | "module.json": "fc27057da0eb783ba06b2d5acfb3d0acea0f2bc5b5ac6897ea5052932373e525", 9 | "README.md": "57a660f4e336d1ff73594bcdda63170e829a0ec4fded7644558bca25fdb069ff", 10 | "settings_migrator.js": "decb8c853639905d6232a3645ccb5e4c63a379e1d61800634581922efd1a778a", 11 | "map/protocol.357120.map": "fa2ef4ddf1cfccbf109a54d9fd01bc4f47531c92c93240ec59aaeee644d1c5db" 12 | }, 13 | "defs": { 14 | "S_LOAD_CLIENT_USER_SETTING": 1 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /map/protocol.351828.map: -------------------------------------------------------------------------------- 1 | C_MEDAL_STORE_BUY_ADD_BASKET = 29644 2 | C_MEDAL_STORE_COMMIT = 24576 3 | C_REQUEST_SPAWN_SERVANT = 59808 4 | C_SELECT_CHANNEL = 42717 5 | C_STORE_COMMIT = 25566 6 | C_STORE_SELL_ADD_BASKET = 62760 7 | S_CANCEL_SELECT_CHANNEL = 25078 8 | S_DELETE_FRIEND = 58553 9 | S_FATIGABILITY_POINT = 21530 10 | S_PREPARE_SELECT_CHANNEL = 53208 -------------------------------------------------------------------------------- /map/protocol.353399.map: -------------------------------------------------------------------------------- 1 | C_MEDAL_STORE_BUY_ADD_BASKET = 30319 2 | C_MEDAL_STORE_COMMIT = 24929 3 | C_REQUEST_SPAWN_SERVANT = 28133 4 | C_SELECT_CHANNEL = 45788 5 | C_STORE_COMMIT = 50733 6 | C_STORE_SELL_ADD_BASKET = 57659 7 | S_CANCEL_SELECT_CHANNEL = 26243 8 | S_DELETE_FRIEND = 57930 9 | S_FATIGABILITY_POINT = 44699 10 | S_PREPARE_SELECT_CHANNEL = 35368 -------------------------------------------------------------------------------- /map/protocol.357120.map: -------------------------------------------------------------------------------- 1 | C_MEDAL_STORE_BUY_ADD_BASKET = 61733 2 | C_MEDAL_STORE_COMMIT = 29697 3 | C_REQUEST_SPAWN_SERVANT = 47162 4 | C_SELECT_CHANNEL = 20656 5 | C_STORE_COMMIT = 45147 6 | C_STORE_SELL_ADD_BASKET = 60707 7 | S_CANCEL_SELECT_CHANNEL = 54209 8 | S_DELETE_FRIEND = 46740 9 | S_FATIGABILITY_POINT = 36009 10 | S_PREPARE_SELECT_CHANNEL = 48319 -------------------------------------------------------------------------------- /module.json: -------------------------------------------------------------------------------- 1 | 2 | { 3 | "disableAutoUpdate": false, 4 | "name": "TerableOpcodes", 5 | "author": "TerableCoder", 6 | "description": "Opcodes", 7 | "version": "11/12/2019", 8 | "options": { 9 | "niceName": "TerableOpcodes", 10 | "settingsVersion": 13, 11 | "settingsFile": "config.json", 12 | "settingsMigrator": "settings_migrator.js" 13 | }, 14 | "servers": ["https://raw.githubusercontent.com/TerableCoder/TerableOpcodes/master/"], 15 | "supportUrl": "https://github.com/TerableCoder/TerableOpcodes/issues" 16 | } -------------------------------------------------------------------------------- /settings_migrator.js: -------------------------------------------------------------------------------- 1 | const DefaultSettings = { 2 | NA: true, 3 | EU: false, 4 | RU: false, 5 | TW: false, 6 | SEA: false, 7 | JP: false, 8 | newUpdate87NA: false, 9 | newUpdate87EU: false, 10 | newUpdate87RU: false, 11 | newUpdate87TW: false, 12 | newUpdate87SEA: false, 13 | newUpdate87JP: false 14 | } 15 | 16 | module.exports = function MigrateSettings(from_ver, to_ver, settings) { 17 | if (from_ver === undefined) return Object.assign(Object.assign({}, DefaultSettings), settings); 18 | else if (from_ver === null) return DefaultSettings; 19 | else { 20 | if (from_ver + 1 < to_ver) { 21 | settings = MigrateSettings(from_ver, from_ver + 1, settings); 22 | return MigrateSettings(from_ver + 1, to_ver, settings); 23 | } 24 | 25 | switch (to_ver) { 26 | case 13: 27 | settings.newUpdate87NA = true; 28 | settings.newUpdate87EU = true; 29 | settings.newUpdate87RU = true; 30 | settings.newUpdate87TW = true; 31 | settings.newUpdate87SEA = true; 32 | settings.newUpdate87JP = true; 33 | break; 34 | case 12: 35 | settings.newUpdate86NA = true; 36 | settings.newUpdate86EU = true; 37 | settings.newUpdate86RU = true; 38 | settings.newUpdate86TW = true; 39 | settings.newUpdate86SEA = true; 40 | settings.newUpdate86JP = true; 41 | break; 42 | case 11: 43 | settings.newUpdate85NA = true; 44 | settings.newUpdate85EU = true; 45 | settings.newUpdate85RU = true; 46 | settings.newUpdate85TW = true; 47 | settings.newUpdate85SEA = true; 48 | settings.newUpdate85JP = true; 49 | break; 50 | case 10: 51 | settings.newUpdate83NA = true; 52 | settings.newUpdate83EU = true; 53 | settings.newUpdate83RU = true; 54 | settings.newUpdate83TW = true; 55 | settings.newUpdate83SEA = true; 56 | settings.newUpdate83JP = true; 57 | break; 58 | case 9: 59 | settings.newUpdate82NA1 = true; 60 | break; 61 | case 8: 62 | settings.newUpdate82EU1 = true; 63 | break; 64 | case 7: 65 | settings.newUpdate82RU1 = true; 66 | break; 67 | case 6: 68 | settings.newUpdate82EU = true; 69 | break; 70 | case 5: 71 | settings.newUpdate82NA = true; 72 | settings.newUpdate82RU = true; 73 | settings.newUpdate82TW = true; 74 | break; 75 | case 4: 76 | settings.newUpdate81EU3 = true; 77 | break; 78 | case 3: 79 | settings.newUpdate81EU2 = true; 80 | settings.newUpdate81SEA1 = true; 81 | break; 82 | case 2: 83 | settings.newUpdate81EU1 = true; 84 | break; 85 | default: 86 | console.log(`[TerableOpcodes] Your "config.json" was very outdated, so I've remade it.`); 87 | Object.keys(settings).forEach(key => delete settings[key]); 88 | settings = JSON.parse(JSON.stringify(DefaultSettings)); 89 | break; 90 | } 91 | return settings; 92 | } 93 | } --------------------------------------------------------------------------------