Start modularization.
This commit is contained in:
parent
909d62982e
commit
611658114f
|
@ -2,16 +2,19 @@
|
|||
"extends": "eslint:recommended",
|
||||
"env": {
|
||||
"browser": true,
|
||||
"node": true,
|
||||
"es6": true,
|
||||
"node": true,
|
||||
"serviceworker": true,
|
||||
"worker": true
|
||||
},
|
||||
"rules": {
|
||||
"no-console": 0,
|
||||
"no-unused-vars": 0,
|
||||
"no-undef": 0,
|
||||
"no-redeclare": 0,
|
||||
"require-yield": 0,
|
||||
"no-constant-condition": [
|
||||
"error",
|
||||
{
|
||||
"checkLoops": false
|
||||
}
|
||||
],
|
||||
"no-irregular-whitespace": [
|
||||
"error",
|
||||
{
|
||||
|
@ -19,13 +22,13 @@
|
|||
"skipTemplates": true
|
||||
}
|
||||
],
|
||||
"no-constant-condition": [
|
||||
"error",
|
||||
{
|
||||
"checkLoops": false
|
||||
}
|
||||
] /* ,
|
||||
"comma-dangle": ["error", "only-multiline"],
|
||||
"complexity": ["error",100] */
|
||||
"no-redeclare": 0,
|
||||
"no-undef": 0,
|
||||
"no-unused-vars": 0,
|
||||
"require-yield": 0
|
||||
},
|
||||
"parserOptions": {
|
||||
"ecmaVersion": 13,
|
||||
"sourceType": "module"
|
||||
}
|
||||
}
|
|
@ -1,10 +1,25 @@
|
|||
!extension/boss
|
||||
!extension/cardpile
|
||||
!extension/coin
|
||||
!extension/wuxing
|
||||
!node_modules/options
|
||||
!node_modules/ultron
|
||||
!node_modules/ws
|
||||
._*
|
||||
.DS_Store
|
||||
.DS_Store?
|
||||
._*
|
||||
.idea
|
||||
.Spotlight-V100
|
||||
.Trashes
|
||||
ehthumbs.db
|
||||
Thumbs.db
|
||||
localStorage.json
|
||||
.vscode
|
||||
.idea
|
||||
app
|
||||
app.html
|
||||
ehthumbs.db
|
||||
extension
|
||||
jsconfig.json
|
||||
localStorage.json
|
||||
main.js
|
||||
node_modules
|
||||
noname.ico
|
||||
package.json
|
||||
Thumbs.db
|
||||
|
|
|
@ -0,0 +1,4 @@
|
|||
export * from "./noname/ai.js";
|
||||
export * from "./noname/status.js";
|
||||
export * from "./noname/library.js";
|
||||
export * from "./noname/get.js";
|
|
@ -0,0 +1,7 @@
|
|||
import { Get } from "../noname.js";
|
||||
import { BasicAI } from "./ai/basic.js";
|
||||
|
||||
export const ai = {
|
||||
basic: BasicAI,
|
||||
get: Get
|
||||
};
|
|
@ -0,0 +1,180 @@
|
|||
import { status as _status } from "../../noname.js";
|
||||
|
||||
export class BasicAI {
|
||||
static chooseButton(check) {
|
||||
var event = _status.event;
|
||||
var i, j, range, buttons, buttons2;
|
||||
var ok = false, forced = event.forced;
|
||||
var iwhile = 100;
|
||||
while (iwhile--) {
|
||||
range = get.select(event.selectButton);
|
||||
if (ui.selected.buttons.length >= range[0]) {
|
||||
ok = true;
|
||||
}
|
||||
if (range[1] <= -1) {
|
||||
j = 0;
|
||||
for (i = 0; i < ui.selected.buttons.length; i++) {
|
||||
j += check(ui.selected.buttons[i]);
|
||||
}
|
||||
return (j > 0);
|
||||
}
|
||||
buttons = get.selectableButtons();
|
||||
if (buttons.length == 0) {
|
||||
return ok;
|
||||
}
|
||||
buttons2 = buttons.slice(0);
|
||||
var ix = 0;
|
||||
var checkix = check(buttons[0], buttons2);
|
||||
for (i = 1; i < buttons.length; i++) {
|
||||
var checkixtmp = check(buttons[i], buttons2);
|
||||
if (checkixtmp > checkix) {
|
||||
ix = i;
|
||||
checkix = checkixtmp;
|
||||
}
|
||||
}
|
||||
// buttons.sort(function(a,b){
|
||||
// return check(b,buttons2)-check(a,buttons2);
|
||||
// });
|
||||
if (check(buttons[ix]) <= 0) {
|
||||
if (!forced || ok) {
|
||||
return ok;
|
||||
}
|
||||
}
|
||||
buttons[ix].classList.add('selected');
|
||||
ui.selected.buttons.add(buttons[ix]);
|
||||
game.check();
|
||||
if (ui.selected.buttons.length >= range[0]) {
|
||||
ok = true;
|
||||
}
|
||||
if (ui.selected.buttons.length == range[1]) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
static chooseCard(check) {
|
||||
var event = _status.event;
|
||||
if (event.filterCard == undefined) return (check() > 0);
|
||||
var i, j, range, cards, cards2, skills, check, effect;
|
||||
var ok = false, forced = event.forced;
|
||||
var iwhile = 100;
|
||||
while (iwhile--) {
|
||||
range = get.select(event.selectCard);
|
||||
if (ui.selected.cards.length >= range[0]) {
|
||||
ok = true;
|
||||
}
|
||||
if (range[1] <= -1) {
|
||||
if (ui.selected.cards.length == 0) return true;
|
||||
j = 0;
|
||||
for (i = 0; i < ui.selected.cards.length; i++) {
|
||||
effect = check(ui.selected.cards[i]);
|
||||
if (effect < 0) j -= Math.sqrt(-effect);
|
||||
else j += Math.sqrt(effect);
|
||||
}
|
||||
return (j > 0);
|
||||
}
|
||||
cards = get.selectableCards();
|
||||
if (!_status.event.player._noSkill) {
|
||||
cards = cards.concat(get.skills());
|
||||
}
|
||||
if (cards.length == 0) {
|
||||
return ok;
|
||||
}
|
||||
cards2 = cards.slice(0);
|
||||
// cards.sort(function(a,b){
|
||||
// return (check(b,cards2)-check(a,cards2));
|
||||
// });
|
||||
var ix = 0;
|
||||
var checkix = check(cards[0], cards2);
|
||||
for (i = 1; i < cards.length; i++) {
|
||||
var checkixtmp = check(cards[i], cards2);
|
||||
if (checkixtmp > checkix) {
|
||||
ix = i;
|
||||
checkix = checkixtmp;
|
||||
}
|
||||
}
|
||||
if (check(cards[ix]) <= 0) {
|
||||
if (!forced || ok) {
|
||||
return ok;
|
||||
}
|
||||
}
|
||||
if (typeof cards[ix] == 'string') {
|
||||
ui.click.skill(cards[ix]);
|
||||
var info = get.info(event.skill);
|
||||
if (info.filterCard) {
|
||||
check = info.check || get.unuseful2;
|
||||
return (ai.basic.chooseCard(check));
|
||||
}
|
||||
else {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
else {
|
||||
cards[ix].classList.add('selected');
|
||||
ui.selected.cards.add(cards[ix]);
|
||||
game.check();
|
||||
if (ui.selected.cards.length >= range[0]) {
|
||||
ok = true;
|
||||
}
|
||||
if (ui.selected.cards.length == range[1]) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
static chooseTarget(check) {
|
||||
var event = _status.event;
|
||||
if (event.filterTarget == undefined) return (check() > 0);
|
||||
var i, j, range, targets, targets2, effect;
|
||||
var ok = false, forced = event.forced;
|
||||
var iwhile = 100;
|
||||
while (iwhile--) {
|
||||
range = get.select(event.selectTarget);
|
||||
if (ui.selected.targets.length >= range[0]) {
|
||||
ok = true;
|
||||
}
|
||||
if (range[1] <= -1) {
|
||||
j = 0;
|
||||
for (i = 0; i < ui.selected.targets.length; i++) {
|
||||
effect = check(ui.selected.targets[i]);
|
||||
if (effect < 0) j -= Math.sqrt(-effect);
|
||||
else j += Math.sqrt(effect);
|
||||
}
|
||||
return (j > 0);
|
||||
}
|
||||
else if (range[1] == 0) {
|
||||
return check() > 0
|
||||
}
|
||||
targets = get.selectableTargets();
|
||||
if (targets.length == 0) {
|
||||
return range[0] == 0 || ok;
|
||||
}
|
||||
targets2 = targets.slice(0);
|
||||
// targets.sort(function(a,b){
|
||||
// return check(b)-check(a);
|
||||
// });
|
||||
var ix = 0;
|
||||
var checkix = check(targets[0], targets2);
|
||||
for (i = 1; i < targets.length; i++) {
|
||||
var checkixtmp = check(targets[i], targets2);
|
||||
if (checkixtmp > checkix) {
|
||||
ix = i;
|
||||
checkix = checkixtmp;
|
||||
}
|
||||
}
|
||||
if (check(targets[ix]) <= 0) {
|
||||
if (!forced || ok) {
|
||||
return ok;
|
||||
}
|
||||
}
|
||||
targets[ix].classList.add('selected');
|
||||
ui.selected.targets.add(targets[ix]);
|
||||
game.check();
|
||||
if (ui.selected.targets.length >= range[0]) {
|
||||
ok = true;
|
||||
}
|
||||
if (ui.selected.targets.length == range[1]) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,17 @@
|
|||
import { Library as lib, status as _status } from "../noname.js";
|
||||
|
||||
export class Get {
|
||||
/**
|
||||
* @template T
|
||||
* @overload
|
||||
* @param {T} key
|
||||
* @returns {typeof _status.event[T]}
|
||||
*/
|
||||
/**
|
||||
* @overload
|
||||
* @returns {typeof _status.event}
|
||||
*/
|
||||
static event(key) {
|
||||
return key ? _status.event[key] : _status.event;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,69 @@
|
|||
import { animate } from "./library/animate.js";
|
||||
import { cardPack } from "./library/card-pack.js";
|
||||
import { cardType } from "./library/card-type.js";
|
||||
import { characterFilter } from "./library/character-filter.js";
|
||||
import { characterIntro } from "./library/character-intro.js";
|
||||
import { characterPack } from "./library/character-pack.js";
|
||||
import { characterReplace } from "./library/character-replace.js";
|
||||
import { characterSort } from "./library/character-sort.js";
|
||||
import { characterTitle } from "./library/character-title.js";
|
||||
import { dynamicTranslate } from "./library/dynamic-translate.js";
|
||||
import { element } from "./library/element.js";
|
||||
import { emotionList } from "./library/emotion-list.js";
|
||||
import { extensionPack } from "./library/extension-pack.js";
|
||||
import { skin } from "./library/skin.js";
|
||||
import { updateURLs } from "./library/update-urls.js";
|
||||
|
||||
const nonameInitialized = localStorage.getItem('noname_inited');
|
||||
|
||||
export class Library {
|
||||
static configprefix = "noname_0.9_";
|
||||
static versionOL = 27;
|
||||
static updateURLS = updateURLs;
|
||||
static updateURL = updateURLs.github;
|
||||
static mirrorURL = updateURLs.coding;
|
||||
static hallURL = "47.99.105.222";
|
||||
static assetURL = typeof nonameInitialized != 'string' || nonameInitialized == 'nodejs' ? '' : nonameInitialized;
|
||||
static userAgent = navigator.userAgent.toLowerCase();
|
||||
static compatibleEdition = Boolean(typeof nonameInitialized == 'string' && nonameInitialized.match(/\/(?:com\.widget|yuri\.nakamura)\.noname\//));
|
||||
static changeLog = [];
|
||||
static updates = [];
|
||||
static canvasUpdates = [];
|
||||
static video = [];
|
||||
static skilllist = [];
|
||||
static connectBanned = [];
|
||||
static characterIntro = characterIntro;
|
||||
static characterTitle = characterTitle;
|
||||
static characterPack = characterPack;
|
||||
static characterFilter = characterFilter;
|
||||
static characterSort = characterSort;
|
||||
static characterReplace = characterReplace;
|
||||
static characterGuozhanFilter = ["mode_guozhan"];
|
||||
static dynamicTranslate = dynamicTranslate;
|
||||
static cardPack = cardPack;
|
||||
static skin = skin;
|
||||
static onresize = [];
|
||||
static onphase = [];
|
||||
static onwash = [];
|
||||
static onover = [];
|
||||
static ondb = [];
|
||||
static ondb2 = [];
|
||||
static chatHistory = [];
|
||||
static emotionList = emotionList;
|
||||
static animate = animate;
|
||||
static onload = [];
|
||||
static onload2 = [];
|
||||
static onprepare = [];
|
||||
static arenaReady = [];
|
||||
static onfree = [];
|
||||
static inpile = [];
|
||||
static inpile_nature = [];
|
||||
static extensions = [];
|
||||
static extensionPack = extensionPack;
|
||||
static cardType = cardType;
|
||||
static element = element;
|
||||
|
||||
constructor() {
|
||||
throw new TypeError(`${new.target.name} is not a constructor`);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,7 @@
|
|||
import { animateCard } from "./animate/card.js";
|
||||
import { animateSkill } from "./animate/skill.js";
|
||||
|
||||
export const animate = {
|
||||
skill: animateSkill,
|
||||
card: animateCard
|
||||
};
|
|
@ -0,0 +1,3 @@
|
|||
interface AnimateCard extends Record<string, Function> { }
|
||||
|
||||
export const animateCard: AnimateCard;
|
|
@ -0,0 +1 @@
|
|||
export const animateCard = {};
|
|
@ -0,0 +1,3 @@
|
|||
interface AnimateSkill extends Record<string, Function> { }
|
||||
|
||||
export const animateSkill: AnimateSkill;
|
|
@ -0,0 +1 @@
|
|||
export const animateSkill = {};
|
|
@ -0,0 +1,3 @@
|
|||
interface CardPack extends Record<string, string[]> { }
|
||||
|
||||
export const cardPack: CardPack;
|
|
@ -0,0 +1 @@
|
|||
export const cardPack = {};
|
|
@ -0,0 +1,3 @@
|
|||
interface CardType extends Record<string, number> { }
|
||||
|
||||
export const cardType: CardType;
|
|
@ -0,0 +1 @@
|
|||
export const cardType = {};
|
|
@ -0,0 +1,3 @@
|
|||
interface CharacterFilter extends Record<string, (mode: string) => boolean> { }
|
||||
|
||||
export const characterFilter: CharacterFilter;
|
|
@ -0,0 +1 @@
|
|||
export const characterFilter = {};
|
|
@ -0,0 +1,4 @@
|
|||
type CharacterSex = "double" | "female" | "male" | "none" | "unknown" | string & {};
|
||||
type CharacterGroup = "wei" | "shu" | "wu" | "qun" | "jin";
|
||||
type CharacterHP = number | `${number}/${number}` | `${number}/${number}/${number}`;
|
||||
export type CharacterInformation = [CharacterSex, CharacterGroup, CharacterHP, string[], string[]?];
|
|
@ -0,0 +1,3 @@
|
|||
interface CharacterIntro extends Record<string, string> { }
|
||||
|
||||
export const characterIntro: CharacterIntro;
|
|
@ -0,0 +1 @@
|
|||
export const characterIntro = {};
|
|
@ -0,0 +1,5 @@
|
|||
import { CharacterInformation } from "./character-information";
|
||||
|
||||
interface CharacterPack extends Record<string, Record<string, CharacterInformation>> { }
|
||||
|
||||
export const characterPack: CharacterPack;
|
|
@ -0,0 +1 @@
|
|||
export const characterPack = {};
|
|
@ -0,0 +1,3 @@
|
|||
interface CharacterReplace extends Record<string, string[]> { }
|
||||
|
||||
export const characterReplace: CharacterReplace;
|
|
@ -0,0 +1 @@
|
|||
export const characterReplace = {};
|
|
@ -0,0 +1,3 @@
|
|||
interface CharacterSort extends Record<string, Record<string, string[]>> { }
|
||||
|
||||
export const characterSort: CharacterSort;
|
|
@ -0,0 +1 @@
|
|||
export const characterSort = {};
|
|
@ -0,0 +1,3 @@
|
|||
interface CharacterTitle extends Record<string, string> { }
|
||||
|
||||
export const characterTitle: CharacterTitle;
|
|
@ -0,0 +1 @@
|
|||
export const characterTitle = {};
|
|
@ -0,0 +1,5 @@
|
|||
import { Player } from "./element/player";
|
||||
|
||||
interface DynamicTranslate extends Record<string, (player: Player) => string> { }
|
||||
|
||||
export const dynamicTranslate: DynamicTranslate;
|
|
@ -0,0 +1 @@
|
|||
export const dynamicTranslate = {};
|
|
@ -0,0 +1,7 @@
|
|||
import { GameEvent } from "./element/game-event.js";
|
||||
import { Player } from "./element/player.js";
|
||||
|
||||
export const element = {
|
||||
Player: Player,
|
||||
GameEvent: GameEvent
|
||||
};
|
|
@ -0,0 +1,50 @@
|
|||
import { Get as get } from "../../../noname.js";
|
||||
|
||||
export class GameEvent {
|
||||
/**
|
||||
* @param {string} [name]
|
||||
* @param {false} [trigger]
|
||||
*/
|
||||
constructor(name, trigger) {
|
||||
if (typeof name == 'string') {
|
||||
this.name = name;
|
||||
const gameEvent = get.event();
|
||||
|
||||
if (gameEvent) {
|
||||
const type = `onNext${name[0].toUpperCase()}${name.slice(1)}`;
|
||||
if (gameEvent.hasHandler(type)) this.pushHandler(...gameEvent.getHandler(type));
|
||||
}
|
||||
|
||||
game.globalEventHandlers.addHandlerToEvent(this);
|
||||
}
|
||||
|
||||
this.step = 0;
|
||||
this.finished = false;
|
||||
/**
|
||||
* @type {GameEvent[]}
|
||||
*/
|
||||
this.next = [];
|
||||
/**
|
||||
* @type {GameEvent[]}
|
||||
*/
|
||||
this.after = [];
|
||||
this.custom = {
|
||||
add: {},
|
||||
replace: {}
|
||||
};
|
||||
this._aiexclude = [];
|
||||
this._notrigger = [];
|
||||
this._result = {};
|
||||
this._set = [];
|
||||
if (trigger !== false && !game.online) this._triggered = 0;
|
||||
}
|
||||
|
||||
static initialGameEvent() {
|
||||
return (new this).finish();
|
||||
}
|
||||
|
||||
finish() {
|
||||
this.finished = true;
|
||||
return this;
|
||||
}
|
||||
}
|
|
@ -0,0 +1 @@
|
|||
export class Player { }
|
|
@ -0,0 +1,3 @@
|
|||
interface EmotionList extends Record<string, number> { }
|
||||
|
||||
export const emotionList: EmotionList;
|
|
@ -0,0 +1,10 @@
|
|||
export const emotionList = {
|
||||
xiaowu_emotion: 14,
|
||||
xiaokuo_emotion: 8,
|
||||
shibing_emotion: 15,
|
||||
guojia_emotion: 20,
|
||||
zhenji_emotion: 20,
|
||||
xiaosha_emotion: 20,
|
||||
xiaotao_emotion: 20,
|
||||
xiaojiu_emotion: 20
|
||||
};
|
|
@ -0,0 +1 @@
|
|||
export const extensionPack = {};
|
|
@ -0,0 +1,3 @@
|
|||
interface Skin extends Record<string, number> { }
|
||||
|
||||
export const skin: Skin;
|
|
@ -0,0 +1 @@
|
|||
export const skin = {};
|
|
@ -0,0 +1,3 @@
|
|||
interface UpdateURLs extends Record<string, string> { }
|
||||
|
||||
export const updateURLs: UpdateURLs;
|
|
@ -0,0 +1,4 @@
|
|||
export const updateURLs = {
|
||||
coding: "https://gitcode.net/sinat_33405273/noname/-/raw/",
|
||||
github: "https://raw.githubusercontent.com/libccy/noname"
|
||||
};
|
|
@ -0,0 +1,34 @@
|
|||
import { Library as lib } from "../noname.js";
|
||||
import { aiStatus } from "./status/ai.js";
|
||||
import { cardTag } from "./status/card-tag.js";
|
||||
import { postReconnect } from "./status/post-reconnect.js";
|
||||
|
||||
export const status = {
|
||||
paused: false,
|
||||
paused2: false,
|
||||
paused3: false,
|
||||
over: false,
|
||||
clicked: false,
|
||||
auto: false,
|
||||
event: lib.element.GameEvent.initialGameEvent(),
|
||||
ai: aiStatus,
|
||||
lastdragchange: [],
|
||||
skillaudio: [],
|
||||
dieClose: [],
|
||||
dragline: [],
|
||||
dying: [],
|
||||
/**
|
||||
* @type {import("./status/global-history.js").GlobalHistory[]}
|
||||
*/
|
||||
globalHistory: [{
|
||||
cardMove: [],
|
||||
custom: [],
|
||||
useCard: [],
|
||||
changeHp: [],
|
||||
everything: []
|
||||
}],
|
||||
cardtag: cardTag,
|
||||
renku: [],
|
||||
prehidden_skills: [],
|
||||
postReconnect: postReconnect
|
||||
}
|
|
@ -0,0 +1,7 @@
|
|||
import { Player } from "../library/element/player";
|
||||
|
||||
interface AIStatus extends Record<string, any> {
|
||||
customAttitude: ((from: Player, to: Player) => number)[];
|
||||
}
|
||||
|
||||
export const aiStatus: AIStatus;
|
|
@ -0,0 +1,3 @@
|
|||
export const aiStatus = {
|
||||
customAttitude: []
|
||||
};
|
|
@ -0,0 +1,3 @@
|
|||
interface CardTag extends Record<string, `${number}`[]> { }
|
||||
|
||||
export const cardTag: CardTag;
|
|
@ -0,0 +1,7 @@
|
|||
export const cardTag = {
|
||||
yingbian_zhuzhan: [],
|
||||
yingbian_kongchao: [],
|
||||
yingbian_fujia: [],
|
||||
yingbian_canqu: [],
|
||||
yingbian_force: []
|
||||
};
|
|
@ -0,0 +1,9 @@
|
|||
import { GameEvent } from "../library/element/game-event";
|
||||
|
||||
export interface GlobalHistory {
|
||||
cardMove: GameEvent[];
|
||||
custom: any[];
|
||||
useCard: GameEvent[];
|
||||
changeHp: GameEvent[];
|
||||
everything: GameEvent[];
|
||||
}
|
|
@ -0,0 +1 @@
|
|||
export const postReconnect = {};
|
Loading…
Reference in New Issue