| @ -0,0 +1,23 @@@@ -0,0 +1,23 @@ | ||||
| .DS_Store | ||||
| node_modules | ||||
| /dist | ||||
| 
 | ||||
| 
 | ||||
| # local env files | ||||
| .env.local | ||||
| .env.*.local | ||||
| 
 | ||||
| # Log files | ||||
| npm-debug.log* | ||||
| yarn-debug.log* | ||||
| yarn-error.log* | ||||
| pnpm-debug.log* | ||||
| 
 | ||||
| # Editor directories and files | ||||
| .idea | ||||
| .vscode | ||||
| *.suo | ||||
| *.ntvs* | ||||
| *.njsproj | ||||
| *.sln | ||||
| *.sw? | ||||
| @ -1,3 +0,0 @@@@ -1,3 +0,0 @@ | ||||
| Additional permission under GNU GPL version 3 section 7 | ||||
| 
 | ||||
| If you modify this Program, or any covered work, by linking or combining it with [name of library] (or a modified version of that library), containing parts covered by the terms of [name of library's license], the licensors of this Program grant you additional permission to convey the resulting work. | ||||
| @ -1,3 +1,19 @@@@ -1,3 +1,19 @@ | ||||
| # vue-idle-game | ||||
| # code | ||||
| 
 | ||||
| 一个全随机的刷装备小游戏 | ||||
| ## Project setup | ||||
| ``` | ||||
| yarn install | ||||
| ``` | ||||
| 
 | ||||
| ### Compiles and hot-reloads for development | ||||
| ``` | ||||
| yarn serve | ||||
| ``` | ||||
| 
 | ||||
| ### Compiles and minifies for production | ||||
| ``` | ||||
| yarn build | ||||
| ``` | ||||
| 
 | ||||
| ### Customize configuration | ||||
| See [Configuration Reference](https://cli.vuejs.org/config/). | ||||
|  | ||||
| @ -0,0 +1,5 @@@@ -0,0 +1,5 @@ | ||||
| module.exports = { | ||||
|   presets: [ | ||||
|     '@vue/cli-plugin-babel/preset' | ||||
|   ] | ||||
| } | ||||
| @ -0,0 +1,7 @@@@ -0,0 +1,7 @@ | ||||
| /.classpath | ||||
| /.project | ||||
| /.settings | ||||
| /bin/ | ||||
| /logs | ||||
| /target | ||||
| /src/main/resources/static | ||||
| @ -0,0 +1,8 @@@@ -0,0 +1,8 @@ | ||||
| # WEB服务端口配置 | ||||
| server.port=80 | ||||
| # WEB服务根路径配置 | ||||
| server.servlet.context-path=/ | ||||
| # 程序自身数据源配置 | ||||
| spring.datasource.url=jdbc:mysql://10.100.0.108:3306/idle_game?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&allowMultiQueries=true | ||||
| spring.datasource.username=root | ||||
| spring.datasource.password=mBMjp2v74c7MzhC/5RGeXF1V3E+AcRFs1f5OH6PDHi3nWaM3njaaoewswq8Sl7/AY631t0sONVDG672pX4mFpZx/8xex8BJP3uX1wUu9NGpTCSHskb5cD6KZMNV4jNsfoqxFRyJq8yk86djPsCfR4ch0sPnLH+LCg9XY1DAw8szh93QnKDkiImq2JLkaIwG3R3t8dNWv1wVoMR6vVecPsEUyPJu5vsrvJhjP3uAL7jZYJVGZG6bkrpV3R6I6mja0QnTdF41NCL5Ex0TINSi7GKnrALjZ0qWcT9fe2bTUCKq50+CtVEAQnEz2ZJpYUaBZXJbHh4OrUyqjAmA5s7IelQ== | ||||
| @ -0,0 +1,116 @@@@ -0,0 +1,116 @@ | ||||
| <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> | ||||
| 	<modelVersion>4.0.0</modelVersion> | ||||
| 	<parent> | ||||
| 		<groupId>org.springframework.boot</groupId> | ||||
| 		<artifactId>spring-boot-starter-parent</artifactId> | ||||
| 		<version>2.7.1</version> | ||||
| 	</parent> | ||||
| 	<groupId>com.sprt.simple</groupId> | ||||
| 	<artifactId>idle_game_server</artifactId> | ||||
| 	<version>0.0.0</version> | ||||
| 	<name>idle_game_server</name> | ||||
| 	<description>idle game server</description> | ||||
| 	<packaging>jar</packaging> | ||||
| 
 | ||||
| 	<properties> | ||||
| 		<java.version>17</java.version> | ||||
| 		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> | ||||
| 		<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> | ||||
| 
 | ||||
| 		<core.version>1.0.0</core.version> | ||||
| 		<log4j.version>1.2.17</log4j.version> | ||||
| 		<fastjson.version>1.2.46</fastjson.version> | ||||
| 		<druid.version>1.1.9</druid.version> | ||||
| 		<mybatis-plus.version>3.5.1</mybatis-plus.version> | ||||
| 		<mybatis.pagehelper.version>1.4.6</mybatis.pagehelper.version> | ||||
| 	</properties> | ||||
| 
 | ||||
| 	<dependencies> | ||||
| 
 | ||||
| 		<dependency> | ||||
| 			<groupId>vip.xumy.core</groupId> | ||||
| 			<artifactId>xumy_core</artifactId> | ||||
| 			<version>${core.version}</version> | ||||
| 		</dependency> | ||||
| 
 | ||||
| 		<!-- 代码修改之后可以实时生效,该模块在完整的打包环境下运行的时候会被禁用 --> | ||||
| 		<dependency> | ||||
| 			<groupId>org.springframework.boot</groupId> | ||||
| 			<artifactId>spring-boot-devtools</artifactId> | ||||
| 			<optional>true</optional> | ||||
| 		</dependency> | ||||
| 
 | ||||
| 		<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-web --> | ||||
| 		<dependency> | ||||
| 			<groupId>org.springframework.boot</groupId> | ||||
| 			<artifactId>spring-boot-starter-web</artifactId> | ||||
| 		</dependency> | ||||
| 
 | ||||
| 		<dependency> | ||||
| 			<groupId>org.springframework.boot</groupId> | ||||
| 			<artifactId>spring-boot-starter-test</artifactId> | ||||
| 			<exclusions> | ||||
| 				<!-- 单元测试不使用Junit4,使用Junit5 --> | ||||
| 				<exclusion> | ||||
| 					<groupId>junit</groupId> | ||||
| 					<artifactId>junit</artifactId> | ||||
| 				</exclusion> | ||||
| 				<exclusion> | ||||
| 					<groupId>org.junit.vintage</groupId> | ||||
| 					<artifactId>junit-vintage-engine</artifactId> | ||||
| 				</exclusion> | ||||
| 			</exclusions> | ||||
| 		</dependency> | ||||
| 
 | ||||
| 		<!--junit 测试包--> | ||||
| 		<dependency> | ||||
| 			<groupId>org.junit.jupiter</groupId> | ||||
| 			<artifactId>junit-jupiter-api</artifactId> | ||||
| 			<scope>test</scope> | ||||
| 		</dependency> | ||||
| 
 | ||||
| 		<!-- mysql驱动 --> | ||||
| 		<dependency> | ||||
| 			<groupId>mysql</groupId> | ||||
| 			<artifactId>mysql-connector-java</artifactId> | ||||
| 			<scope>runtime</scope> | ||||
| 		</dependency> | ||||
| 		<!-- alibaba的druid数据库连接池 --> | ||||
| 		<dependency> | ||||
| 			<groupId>com.alibaba</groupId> | ||||
| 			<artifactId>druid-spring-boot-starter</artifactId> | ||||
| 			<version>${druid.version}</version> | ||||
| 		</dependency> | ||||
| 
 | ||||
| 		<!-- mybatis plus--> | ||||
| 		<dependency> | ||||
| 			<groupId>com.baomidou</groupId> | ||||
| 			<artifactId>mybatis-plus-boot-starter</artifactId> | ||||
| 			<version>${mybatis-plus.version}</version> | ||||
| 		</dependency> | ||||
| 
 | ||||
| 		<!-- mybatis的pagehelper --> | ||||
| 		<dependency> | ||||
| 			<groupId>com.github.pagehelper</groupId> | ||||
| 			<artifactId>pagehelper-spring-boot-starter</artifactId> | ||||
| 			<version>${mybatis.pagehelper.version}</version> | ||||
| 		</dependency> | ||||
| 
 | ||||
| 
 | ||||
| 	</dependencies> | ||||
| 
 | ||||
| 	<!-- Package as an executable jar --> | ||||
| 	<build> | ||||
| 		<finalName>${project.name}</finalName> | ||||
| 		<plugins> | ||||
| 			<plugin> | ||||
| 				<groupId>org.springframework.boot</groupId> | ||||
| 				<artifactId>spring-boot-maven-plugin</artifactId> | ||||
| 				<configuration> | ||||
| 					<executable>true</executable> | ||||
| 				</configuration> | ||||
| 			</plugin> | ||||
| 		</plugins> | ||||
| 	</build> | ||||
| 
 | ||||
| </project> | ||||
| @ -0,0 +1,14 @@@@ -0,0 +1,14 @@ | ||||
| package vip.xumy.idle.server; | ||||
| 
 | ||||
| import org.springframework.boot.SpringApplication; | ||||
| 
 | ||||
| import vip.xumy.idle.server.conf.SimpleInitializer; | ||||
| 
 | ||||
| public class SimpleApplocation { | ||||
| 
 | ||||
| 	public static void main(String[] args) { | ||||
| 		Class<?>[] arr = new Class<?>[] { SimpleInitializer.class }; | ||||
| 		SpringApplication.run(arr, args); | ||||
| 	} | ||||
| 
 | ||||
| } | ||||
| @ -0,0 +1,75 @@@@ -0,0 +1,75 @@ | ||||
| package vip.xumy.idle.server.conf; | ||||
| 
 | ||||
| import java.security.KeyFactory; | ||||
| import java.security.interfaces.RSAPrivateKey; | ||||
| import java.security.interfaces.RSAPublicKey; | ||||
| import java.security.spec.PKCS8EncodedKeySpec; | ||||
| import java.security.spec.X509EncodedKeySpec; | ||||
| 
 | ||||
| /** | ||||
|  * @Description  | ||||
|  * @Author 86199 | ||||
|  * @Date 2021/12/1 16:36 | ||||
|  */ | ||||
| 
 | ||||
| import java.util.Base64; | ||||
| 
 | ||||
| import javax.crypto.Cipher; | ||||
| public class RSAEncryptDecrypt | ||||
| { | ||||
|     // 公钥
 | ||||
|     private static String publicKey = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqfkYJn8BHttyGrQYcoXTZK8Za" + | ||||
|             "MVUkqhEdFIyWZhnUQz6Jr299IkBCrbTnKcQTn3ekyQl5/F+j2p8YuNQDBJiq46T/srI+zh1XIaTIKJoOI8M4ploKOztJ8IP" + | ||||
|             "L9ucdnv/tEdGDD9kY5JILa5DQnem9HkaS55kGJX6Oet6CRiNekwiG4+K61SjyfqxuLcqm7v2gH2nvTnkci9FLwtErpdF4uT" + | ||||
|             "Mv6LB46Z9Hpg5iVsHDbwnwqOCfirgwdalJQTy+jcn9UqqNTsneREOxTtt9JQEnsDE/4UIPAYiU6cQDRJ5YrXR56LYC/0g55" + | ||||
|             "KpMVnMIJgS5Y/YVt66QHtUTCVmmSgxAQIDAQAB"; | ||||
| 
 | ||||
|     // 私钥
 | ||||
|     private static String privateKey = "MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCp+" + | ||||
|             "RgmfwEe23IatBhyhdNkrxloxVSSqER0UjJZmGdRDPomvb30iQEKttOcpxBOfd6TJCXn8X6Panxi41AMEmKrjpP+" + | ||||
|             "ysj7OHVchpMgomg4jwzimWgo7O0nwg8v25x2e/+0R0YMP2RjkkgtrkNCd6b0eRpLnmQYlfo563oJGI16TCIbj4rrVKPJ+" + | ||||
|             "rG4tyqbu/aAfae9OeRyL0UvC0Sul0Xi5My/osHjpn0emDmJWwcNvCfCo4J+" + | ||||
|             "KuDB1qUlBPL6Nyf1Sqo1Oyd5EQ7FO230lASewMT/hQg8BiJTpxANEnlitdHnotgL/SDnkqkxWcwgmBLlj" + | ||||
|             "9hW3rpAe1RMJWaZKDEBAgMBAAECggEBAIHEloaVglJ/sf7nLp8IwxrkgB64QVhytUillKFItOBxau53A" + | ||||
|             "HaYvr3iVW8NMWrruClYeMQ7YKe34d1RtMRyqPhXs2/cfFMoiJmqeNt6gt1jga/i9V4BfRJUm2mrXiorg" + | ||||
|             "06s97LUFx3aCdcua1Vsqn+NkeDXvY3zuwXLXPFi2GjcRBnwZL9S2i8mxCSChWy8ePjYW34bJ7viTQ7hf" + | ||||
|             "Hz5VNA0hqMQrmgzUADq5xelnhQKsEWBaHHhLTKGYF0yNmRJ7zQJkiSncxIrzD5dvRH88Ms2nJ7lJlb1F" + | ||||
|             "YEpZ8URlK63ofOskvcpvXFH3g7yvi6j9rCRFAL/i2UnP+lFimQ+bs0CgYEA7ZdVrSGMsKRwaX7+lmCTu" + | ||||
|             "5cR6V74ohZKyDyzp8PcOBxvPmjY5tIULK++12xyOpsMHAwAoKfRedRrvS9vm525g5A+fioALXE74/d2A7" + | ||||
|             "E/psO6hO89W5AcA91wMTZXLLGZ8JD0LBQp3u4dNGyyZLpDMTgM1WUsted1mOn2msRkK68CgYEAtySKlvaL" + | ||||
|             "8Rw70LMMYZUUJ6BbUsR85aJHZ3JPsisM01PgEgcJiZHfThVZHqUgEU0noqRDzIVVKk9C1Gqx+t6F3JqU8" + | ||||
|             "Cewop+nIKboLH5vMr+7OqM5hXLSx9g8Mm779k9P4+u7Kvq4/fY38d7kVayr3TVb5g0jEo1ugsHonwMsKk8Cg" + | ||||
|             "YBa791/EqRCx+2us0jGTdi9qCjW5d7MSzP8SB+LSs/zOg7qGD9MuYO3Rt0Inx1piQathXqIAzOOKdvC4XEaYtgqnv8" + | ||||
|             "MUw8WVYzSyFiHOURfk/LEBr25WgMfB5Z1f5MGLEP7a7/JTz5ncUQEWMY+/3vQTt+6narrRNgh2wrkWd7tSQKBgGIs" + | ||||
|             "YWpZUVz3UI0oXbu1iW9Qg4PTtkv2eKZYXaZZc2+ZJ6UiRpeLLZQS14oY5B7CKDwEKB/rXWLnyCBL7YpYXJOL/cjazd" + | ||||
|             "HvGUzki9LGF9+xbbEaLEx/58OfA23ZlpFLpLy98cAxVJc2tHigje/rNtnGr7ObWTCpxhKr1YHf1n37AoGBAI64k/lV4" + | ||||
|             "FJn57cJnIZPp1jjapxSouxO063Z5BTYVsA6/cqXgbNPt1S8TnZRaRB2qtVrN5otRuueO6GIRJf6XTXvwxLV4xQAA/Z5" + | ||||
|             "g2q2gelK7/ChYRdVn6Fwtnwx4iPBkH6FK+eQ0E8BfcJ5f6XPWp8N7ZpaZrd+dyc3r7uW78gG"; | ||||
| 
 | ||||
|     //加密
 | ||||
|     public static byte[] encrypt(byte[] str) throws Exception | ||||
|     { | ||||
|         // base64编码的公钥
 | ||||
|         byte[] decoded = Base64.getDecoder().decode(publicKey); | ||||
|         RSAPublicKey pubKey = (RSAPublicKey) KeyFactory.getInstance("RSA") | ||||
|                 .generatePublic(new X509EncodedKeySpec(decoded)); | ||||
|         // RSA加密
 | ||||
|         Cipher cipher = Cipher.getInstance("RSA"); | ||||
|         cipher.init(Cipher.ENCRYPT_MODE, pubKey); | ||||
|         return cipher.doFinal(str); | ||||
|     } | ||||
| 
 | ||||
|     //解密
 | ||||
|     public static byte[] decrypt(byte[] str) throws Exception | ||||
|     { | ||||
|         // base64编码的私钥
 | ||||
|         byte[] decoded = Base64.getDecoder().decode(privateKey); | ||||
|         RSAPrivateKey priKey = (RSAPrivateKey) KeyFactory.getInstance("RSA") | ||||
|                 .generatePrivate(new PKCS8EncodedKeySpec(decoded)); | ||||
|         // RSA解密
 | ||||
|         Cipher cipher = Cipher.getInstance("RSA"); | ||||
|         cipher.init(Cipher.DECRYPT_MODE, priKey); | ||||
|         return cipher.doFinal(str); | ||||
|     } | ||||
| 
 | ||||
| } | ||||
| @ -0,0 +1,18 @@@@ -0,0 +1,18 @@ | ||||
| package vip.xumy.idle.server.conf; | ||||
| 
 | ||||
| import org.springframework.boot.autoconfigure.EnableAutoConfiguration; | ||||
| import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; | ||||
| import org.springframework.boot.builder.SpringApplicationBuilder; | ||||
| import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; | ||||
| import org.springframework.context.annotation.ComponentScan; | ||||
| 
 | ||||
| @EnableAutoConfiguration(exclude = DataSourceAutoConfiguration.class) | ||||
| @ComponentScan(value = "vip.xumy.idle.server, vip.xumy.core") | ||||
| public class SimpleInitializer extends SpringBootServletInitializer { | ||||
| 
 | ||||
| 	@Override | ||||
| 	protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) { | ||||
| 		return builder.sources(SimpleInitializer.class); | ||||
| 	} | ||||
| 
 | ||||
| } | ||||
| @ -0,0 +1,23 @@@@ -0,0 +1,23 @@ | ||||
| package vip.xumy.idle.server.mapper; | ||||
| 
 | ||||
| import org.apache.ibatis.annotations.Select; | ||||
| 
 | ||||
| import com.baomidou.mybatisplus.core.mapper.BaseMapper; | ||||
| 
 | ||||
| import vip.xumy.idle.server.pojo.User; | ||||
| 
 | ||||
| /** | ||||
|  * Ownership belongs to the company | ||||
|  * | ||||
|  * @author:mengyxu | ||||
|  * @date:2025年4月18日 | ||||
|  */ | ||||
| 
 | ||||
| public interface IUserMapper extends BaseMapper<User> { | ||||
| 
 | ||||
| 	@Select(""" | ||||
| 			SELECT username, state FROM user WHERE username = #{username} AND password = #{password} | ||||
| 			""") | ||||
| 	User login(User param); | ||||
| 
 | ||||
| } | ||||
| @ -0,0 +1,29 @@@@ -0,0 +1,29 @@ | ||||
| package vip.xumy.idle.server.pojo; | ||||
| 
 | ||||
| import com.baomidou.mybatisplus.annotation.TableName; | ||||
| 
 | ||||
| import lombok.Getter; | ||||
| import lombok.Setter; | ||||
| 
 | ||||
| /**	Ownership belongs to the company | ||||
|  * | ||||
|  *	@author:mengyxu | ||||
|  *	@date:2025年4月18日 | ||||
|  */ | ||||
| 
 | ||||
| @Setter | ||||
| @Getter | ||||
| @TableName("user") | ||||
| public class User { | ||||
| 	 | ||||
| 	private String useranme; | ||||
| 	private String password; | ||||
| 	private String state; | ||||
| 	private String phone; | ||||
| 	private String idCard; | ||||
| 	private String name; | ||||
| 	private String registerTime; | ||||
| 	private String last_login; | ||||
| 	 | ||||
| 
 | ||||
| } | ||||
| @ -0,0 +1,11 @@@@ -0,0 +1,11 @@ | ||||
| package vip.xumy.idle.server.service; | ||||
| 
 | ||||
| /**	Ownership belongs to the company | ||||
|  * | ||||
|  *	@author:mengyxu | ||||
|  *	@date:2025年4月18日 | ||||
|  */ | ||||
| 
 | ||||
| public class UserService { | ||||
| 
 | ||||
| } | ||||
| @ -0,0 +1,38 @@@@ -0,0 +1,38 @@ | ||||
| # WEB服务端口配置 | ||||
| server.port=80 | ||||
| # WEB服务根路径配置 | ||||
| server.servlet.context-path=/ | ||||
| logging.config=classpath:logback.xml | ||||
| 
 | ||||
| spring.main.banner-mode=off | ||||
| 
 | ||||
| spring.datasource.type=com.alibaba.druid.pool.DruidDataSource | ||||
| spring.datasource.driver-class-name=com.mysql.jdbc.Driver | ||||
| spring.datasource.initialSize=1 | ||||
| spring.datasource.minIdle=1 | ||||
| spring.datasource.maxActive=20 | ||||
| spring.datasource.maxWait=60000 | ||||
| spring.datasource.timeBetweenEvictionRunsMillis=60000 | ||||
| spring.datasource.minEvictableIdleTimeMillis=300000 | ||||
| spring.datasource.validationQuery=SELECT 1 FROM DUAL | ||||
| spring.datasource.keepAlive=true | ||||
| spring.datasource.testWhileIdle=true | ||||
| spring.datasource.testOnBorrow=false | ||||
| spring.datasource.testOnReturn=false | ||||
| spring.datasource.poolPreparedStatements=false | ||||
| 
 | ||||
| spring.datasource.driver-class-name=com.mysql.jdbc.Driver | ||||
| mcc.datasource.driver-class-name=com.mysql.jdbc.Driver | ||||
| 
 | ||||
| mybatis.configuration.map-underscore-to-camel-case=true | ||||
| 
 | ||||
| quartz.cron.clean.global=0 */10 * * * ? | ||||
| 
 | ||||
| pagehelper.helperDialect=mysql | ||||
| pagehelper.reasonable=true | ||||
| pagehelper.supportMethodsArguments=true | ||||
| pagehelper.params=count=countSql | ||||
| pagehelper.returnPageInfo=check | ||||
| version.num=1.0.1 | ||||
| version.date=2025-03-07 | ||||
| disk.info.path= | ||||
| @ -0,0 +1,81 @@@@ -0,0 +1,81 @@ | ||||
| <?xml version="1.0" encoding="UTF-8"?> | ||||
| <configuration debug="false"> | ||||
| 
 | ||||
| 	<!--定义日志文件的存储地址 勿在 LogBack 的配置中使用相对路径--> | ||||
| 	<property name="LOG_HOME" value="./logs" /> | ||||
| 	<!--普通日志文件名--> | ||||
| 	<property name="FILE_NAME" value="debug" /> | ||||
| 	<!--错误日志文件名--> | ||||
| 	<property name="ERROR_FILE_NAME" value="error" /> | ||||
| 	<!--日志输出格式:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符--> | ||||
| 	<property name="PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n" /> | ||||
| 	<!--日志文件保留天数--> | ||||
| 	<property name="MAX_HISTORY" value="30" /> | ||||
| 	<!--日志文件最大的大小--> | ||||
| 	<property name="MAX_SIZE" value="10MB" /> | ||||
| 
 | ||||
| 	<!--控制台日志, 控制台输出 --> | ||||
| 	<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> | ||||
| 		<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> | ||||
| 			<pattern>${PATTERN}</pattern> | ||||
| 		</encoder> | ||||
| 	</appender> | ||||
| 
 | ||||
| 	<!--文件日志, 按照每天生成日志文件 --> | ||||
| 	<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> | ||||
| 		<file>${LOG_HOME}/${FILE_NAME}.log</file> | ||||
| 		<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> | ||||
| 			<FileNamePattern>${LOG_HOME}/${FILE_NAME}-%d{yyyy-MM-dd}%i.log</FileNamePattern> | ||||
| 			<MaxHistory>${MAX_HISTORY}</MaxHistory> | ||||
| 			<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"> | ||||
| 				<maxFileSize>${MAX_SIZE}</maxFileSize> | ||||
| 			</timeBasedFileNamingAndTriggeringPolicy> | ||||
| 		</rollingPolicy> | ||||
| 		<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> | ||||
| 			<pattern>${PATTERN}</pattern> | ||||
| 		</encoder> | ||||
| 	</appender> | ||||
| 
 | ||||
| 	<!--错误, 按照每天生成日志文件 --> | ||||
| 	<appender name="ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender"> | ||||
| 		<file>${LOG_HOME}/${ERROR_FILE_NAME}.log</file> | ||||
| 		<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> | ||||
| 			<FileNamePattern>${LOG_HOME}/${ERROR_FILE_NAME}-%d{yyyy-MM-dd}%i.log</FileNamePattern> | ||||
| 			<MaxHistory>${MAX_HISTORY}</MaxHistory> | ||||
| 			<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"> | ||||
| 				<maxFileSize>${MAX_SIZE}</maxFileSize> | ||||
| 			</timeBasedFileNamingAndTriggeringPolicy> | ||||
| 		</rollingPolicy> | ||||
| 		<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> | ||||
| 			<pattern>${PATTERN}</pattern> | ||||
| 		</encoder> | ||||
| 		<filter class="ch.qos.logback.classic.filter.LevelFilter"> | ||||
| 			<!-- 只打印DEBUG日志 --> | ||||
| 			<level>ERROR</level> | ||||
| 			<onMatch>ACCEPT</onMatch> | ||||
| 			<onMismatch>DENY</onMismatch> | ||||
| 		</filter> | ||||
| 	</appender> | ||||
| 	 | ||||
| 	<logger name="com.sprt" level="DEBUG" additivity="false"> | ||||
| 		<appender-ref ref="STDOUT" /> | ||||
| 		<appender-ref ref="FILE" /> | ||||
|         <appender-ref ref="ERROR" /> | ||||
| 	</logger> | ||||
| 	<logger name="com.sprt.core" level="INFO" additivity="false"> | ||||
| 		<appender-ref ref="STDOUT" /> | ||||
| 		<appender-ref ref="FILE" /> | ||||
|         <appender-ref ref="ERROR" /> | ||||
| 	</logger> | ||||
| 	<logger name="org.springframework" level="error" additivity="false"> | ||||
| 		<appender-ref ref="STDOUT" /> | ||||
| 		<appender-ref ref="FILE" /> | ||||
|         <appender-ref ref="ERROR" /> | ||||
| 	</logger> | ||||
| 	 <root level="INFO"> | ||||
|         <appender-ref ref="STDOUT" /> | ||||
|         <appender-ref ref="FILE" /> | ||||
|         <appender-ref ref="ERROR" /> | ||||
|     </root> | ||||
| 
 | ||||
| </configuration> | ||||
| @ -0,0 +1,70 @@@@ -0,0 +1,70 @@ | ||||
| package com.sprt.simple.test; | ||||
| 
 | ||||
| import java.io.BufferedReader; | ||||
| import java.io.BufferedWriter; | ||||
| import java.io.File; | ||||
| import java.io.FileReader; | ||||
| import java.io.FileWriter; | ||||
| import java.util.Base64; | ||||
| 
 | ||||
| import org.junit.jupiter.api.Test; | ||||
| 
 | ||||
| import vip.xumy.idle.server.conf.RSAEncryptDecrypt; | ||||
| 
 | ||||
| /** | ||||
|  * Ownership belongs to the company | ||||
|  * | ||||
|  * @author:mengyxu | ||||
|  * @date:2024年9月26日 | ||||
|  */ | ||||
| 
 | ||||
| public class RSATester { | ||||
| 
 | ||||
| 	@Test | ||||
| 	public void test() throws Exception { | ||||
| 		byte[] message = "mydoris".getBytes(); | ||||
| 		System.out.println("原始字符串为:" + new String(message)); | ||||
| 		byte[] messageEn = RSAEncryptDecrypt.encrypt(message); | ||||
| 		String encryPassword = new String(Base64.getEncoder().encode(messageEn)); | ||||
| 		System.out.println("加密后的Base64字符串为:" + encryPassword); | ||||
| 
 | ||||
| 		byte[] decode = Base64.getDecoder().decode(encryPassword); | ||||
| 		byte[] messageDe = RSAEncryptDecrypt.decrypt(decode); | ||||
| 		System.out.println("还原后的字符串为:" + new String(messageDe)); | ||||
| 	} | ||||
| 
 | ||||
| 	@Test | ||||
| 	public void checkData() { | ||||
| 		String fileName = "D:\\work\\86.其他未确认项目\\知识库111(1)\\csv\\IPData2.CSV"; | ||||
| 		int idx = fileName.lastIndexOf('.'); | ||||
| 		String pre = fileName.substring(0, idx); | ||||
| 		String suf = fileName.substring(idx); | ||||
| 		String right = pre + "-right" + suf; | ||||
| 		String wrong = pre + "-wrong" + suf; | ||||
| 
 | ||||
| 		try (BufferedReader br = new BufferedReader(new FileReader(new File(fileName))); | ||||
| 				BufferedWriter rbw = new BufferedWriter(new FileWriter(new File(right))); | ||||
| 				BufferedWriter wbr = new BufferedWriter(new FileWriter(new File(wrong)));) { | ||||
| 			String line = br.readLine(); | ||||
| 			rbw.write(line); | ||||
| 			wbr.write(line); | ||||
| 
 | ||||
| 			line = br.readLine(); | ||||
| 			while (line != null && line.trim() != null) { | ||||
| 				int num = line.length() - line.replace(",", "").length(); | ||||
| 				if (num == 14) { | ||||
| 					rbw.newLine(); | ||||
| 					rbw.write(line); | ||||
| 				} else { | ||||
| 					wbr.newLine(); | ||||
| 					wbr.write(line); | ||||
| 				} | ||||
| 				line = br.readLine(); | ||||
| 			} | ||||
| 		} catch (Exception e) { | ||||
| 			e.printStackTrace(); | ||||
| 		} | ||||
| 
 | ||||
| 	} | ||||
| 
 | ||||
| } | ||||
| @ -0,0 +1,34 @@@@ -0,0 +1,34 @@ | ||||
| { | ||||
|   "name": "code", | ||||
|   "version": "0.1.0", | ||||
|   "private": true, | ||||
|   "scripts": { | ||||
|     "dev": "vue-cli-service serve", | ||||
|     "build": "vue-cli-service build" | ||||
|   }, | ||||
|   "dependencies": { | ||||
|     "core-js": "^3.8.3", | ||||
|     "js-base64": "^3.7.7", | ||||
|     "vue": "^3.2.13", | ||||
|     "vue-class-component": "^8.0.0-0", | ||||
|     "vue-router": "^4.0.3", | ||||
|     "vue3-i18n": "^1.1.5", | ||||
|     "vuex": "^4.0.0" | ||||
|   }, | ||||
|   "devDependencies": { | ||||
|     "@vue/cli-plugin-babel": "~5.0.0", | ||||
|     "@vue/cli-plugin-router": "~5.0.0", | ||||
|     "@vue/cli-plugin-typescript": "~5.0.0", | ||||
|     "@vue/cli-plugin-vuex": "~5.0.0", | ||||
|     "@vue/cli-service": "~5.0.0", | ||||
|     "sass": "^1.32.7", | ||||
|     "sass-loader": "^12.0.0", | ||||
|     "typescript": "~4.5.5" | ||||
|   }, | ||||
|   "browserslist": [ | ||||
|     "> 1%", | ||||
|     "last 2 versions", | ||||
|     "not dead", | ||||
|     "not ie 11" | ||||
|   ] | ||||
| } | ||||
| After Width: | Height: | Size: 4.2 KiB | 
| @ -0,0 +1,23 @@@@ -0,0 +1,23 @@ | ||||
| <!DOCTYPE html> | ||||
| <html lang=""> | ||||
| 
 | ||||
| <head> | ||||
|     <meta charset="utf-8"> | ||||
|     <meta http-equiv="X-UA-Compatible" content="IE=edge"> | ||||
|     <meta name="viewport" content="width=device-width,initial-scale=1.0"> | ||||
|     <meta name="Description" content="一个全随机的刷装备小游戏" /> | ||||
|     <meta name="Keywords" content="游戏,couy,idle,放置游戏,vue,couy.xyz,rougelike" /> | ||||
|     <link rel="icon" href="./logo.svg"> | ||||
|     <title>couy-idleGame</title> | ||||
| </head> | ||||
| 
 | ||||
| <body> | ||||
|     <noscript> | ||||
|         <strong>We're sorry but <%= htmlWebpackPlugin.options.title %> doesn't work properly without JavaScript enabled. | ||||
|                 Please enable it to continue.</strong> | ||||
|     </noscript> | ||||
|     <div id="app"></div> | ||||
|     <!-- built files will be auto injected --> | ||||
| </body> | ||||
| 
 | ||||
| </html> | ||||
| @ -0,0 +1,17 @@@@ -0,0 +1,17 @@ | ||||
| <template> | ||||
|     <router-view /> | ||||
| </template> | ||||
| 
 | ||||
| <style lang="scss"> | ||||
| // @import '@/assets/css/base.scss'; | ||||
| #app { | ||||
|     font-family: Avenir, Helvetica, Arial, sans-serif; | ||||
|     -webkit-font-smoothing: antialiased; | ||||
|     -moz-osx-font-smoothing: grayscale; | ||||
|     text-align: center; | ||||
|     color: #2c3e50; | ||||
|     width: 100%; | ||||
|     height: 100%; | ||||
|     overflow: hidden; | ||||
| } | ||||
| </style> | ||||
| @ -0,0 +1,165 @@@@ -0,0 +1,165 @@ | ||||
| /** | ||||
|  * 基础样式 | ||||
|  * @author couy(couy69@gmail.com) | ||||
|  */ | ||||
| 
 | ||||
| * { | ||||
|   padding: 0; | ||||
|   margin: 0; | ||||
|   outline: 0; | ||||
|   box-sizing: border-box !important; | ||||
| } | ||||
| 
 | ||||
| li { | ||||
|   list-style: none; | ||||
| } | ||||
| 
 | ||||
| a { | ||||
|   text-decoration: none; | ||||
| } | ||||
| 
 | ||||
| i { | ||||
|   font-style: normal; | ||||
| } | ||||
| 
 | ||||
| html, | ||||
| body { | ||||
|   width: 100%; | ||||
|   height: 100%; | ||||
|   overflow: hidden !important; | ||||
|   font-size: 14px; | ||||
| } | ||||
| 
 | ||||
| @font-face { | ||||
|   font-family: 'sarasa'; | ||||
|   src: url('../fonts/sarasa-ui-cl-regular.ttf') format('truetype'); | ||||
|   font-weight: normal; | ||||
|   font-style: normal; | ||||
| } | ||||
| @font-face { | ||||
|   font-family: 'JetBrainsMono'; | ||||
|   src: url('../fonts/JetBrainsMono-Regular.ttf') format('truetype'); | ||||
|   font-weight: normal; | ||||
|   font-style: normal; | ||||
| } | ||||
| #app { | ||||
|   font-family: 'NotoSansSC', 'Noto Sans', 'Source Sans Pro', 'Avenir', Helvetica, Arial, sans-serif !important; | ||||
| } | ||||
| div, | ||||
| button, | ||||
| span, | ||||
| p, | ||||
| h1, | ||||
| h2, | ||||
| h3, | ||||
| h4, | ||||
| h5, | ||||
| b, | ||||
| input, | ||||
| textarea { | ||||
|   font-family: 'sarasa', 'JetBrainsMono', 'NotoSansSC', 'Noto Sans', 'Source Sans Pro', 'Avenir', Helvetica, Arial, sans-serif !important; | ||||
| } | ||||
| 
 | ||||
| input, | ||||
| textarea { | ||||
|   border: 1px solid #ccc; | ||||
|   border-radius: 4px; | ||||
|   padding: 0.4rem; | ||||
|   font-size: 1rem; | ||||
|   background-color: #e0e8ea; | ||||
| } | ||||
| 
 | ||||
| button { | ||||
|   height: 2.4rem; | ||||
|   line-height: 2.2rem; | ||||
|   padding: 0 1rem; | ||||
|   margin-left: 0.5rem; | ||||
|   margin-right: 0.5rem; | ||||
|   cursor: pointer; | ||||
|   color: #fff; | ||||
|   background: #000; | ||||
|   border: 1px solid #fff; | ||||
|   border-radius: 4px; | ||||
|   width: fit-content; | ||||
|   &:hover { | ||||
|     // background: #222; | ||||
|     border: 1px solid #ccc; | ||||
|     text-shadow: 1px 1px 3px #ccc; | ||||
|   } | ||||
| } | ||||
| 
 | ||||
| /*使用选择器指定字体*/ | ||||
| .panel-title { | ||||
|   font-family: 'MaShanZheng' !important; | ||||
|   display: flex; | ||||
|   align-items: center !important; | ||||
|   justify-content: center; | ||||
|   font-size: 0.22rem; | ||||
|   padding: 0.2rem 0.1rem; | ||||
|   color: #efb96e; | ||||
| } | ||||
| 
 | ||||
| /* 滚动条 */ | ||||
| ::-webkit-scrollbar-thumb:horizontal { | ||||
|   /*水平滚动条的样式*/ | ||||
|   width: 5px; | ||||
|   background-color: #999; | ||||
|   border-radius: 6px; | ||||
| } | ||||
| 
 | ||||
| ::-webkit-scrollbar-track-piece { | ||||
|   background-color: transparent; | ||||
|   /*滚动条的背景颜色*/ | ||||
|   border-radius: 0; | ||||
|   /*滚动条的圆角宽度*/ | ||||
| } | ||||
| 
 | ||||
| ::-webkit-scrollbar { | ||||
|   width: 8px; | ||||
|   /*滚动条的宽度*/ | ||||
|   height: 8px; | ||||
|   /*滚动条的高度*/ | ||||
| } | ||||
| 
 | ||||
| ::-webkit-scrollbar-thumb:vertical { | ||||
|   /*垂直滚动条的样式*/ | ||||
|   height: 20px; | ||||
|   background-color: #999; | ||||
|   border-radius: 4px; | ||||
|   outline: 2px solid transparent; | ||||
|   outline-offset: -2px; | ||||
|   border: 2px solid transparent; | ||||
| } | ||||
| 
 | ||||
| ::-webkit-scrollbar-thumb:hover { | ||||
|   /*滚动条的hover样式*/ | ||||
|   height: 20px; | ||||
|   background-color: #9f9f9f; | ||||
|   border-radius: 4px; | ||||
| } | ||||
| 
 | ||||
| .unique { | ||||
|   background: linear-gradient(125deg, #c90e0d36, #5656d647, 40%, #867d1033, #2c846f4d) !important; | ||||
| } | ||||
| 
 | ||||
| .fade-enter-active, | ||||
| .fade-leave-active { | ||||
|   transition: 0.3s; | ||||
| } | ||||
| 
 | ||||
| .fade-enter, | ||||
| .fade-leave-to { | ||||
|   transform: translateX(100%); | ||||
| } | ||||
| .icon { | ||||
|   display: inline-block; | ||||
|   width: 0.25rem; | ||||
|   height: 0.25rem; | ||||
|   background-repeat: no-repeat; | ||||
|   background-size: contain; | ||||
|   padding: 2px; | ||||
|   background-position: center; | ||||
| } | ||||
| .icon-setting { | ||||
|   background-image: url(../icons/menu/setting.png); | ||||
| } | ||||
| @ -0,0 +1,291 @@@@ -0,0 +1,291 @@ | ||||
| @media screen and (max-width: 768px) { | ||||
| } | ||||
| 
 | ||||
| @media screen and (max-width: 768px) { | ||||
|   .body, | ||||
|   html, | ||||
|   #app { | ||||
|     width: 100%; | ||||
|     height: 100%; | ||||
|     overflow: hidden; | ||||
|   } | ||||
|   * { | ||||
|     user-select: text !important; | ||||
|   } | ||||
|   #app { | ||||
|     -webkit-tap-highlight-color: transparent; | ||||
|     position: fixed; | ||||
|     top: 0; | ||||
|     left: 0; | ||||
|     bottom: 0; | ||||
|     right: 0; | ||||
| 
 | ||||
|     .main { | ||||
|       .user-status { | ||||
|         width: calc(50% - 0.12rem); | ||||
|         height: calc(25% - 0.02rem); | ||||
|         padding: 0.05rem; | ||||
| 
 | ||||
|         .hp { | ||||
|           padding-left: 0.08rem; | ||||
|           border: none; | ||||
|           height: 0.25rem; | ||||
|           img { | ||||
|             width: 0.35rem; | ||||
|             height: 0.35rem; | ||||
|           } | ||||
| 
 | ||||
|           .value { | ||||
|             font-size: 0.18rem; | ||||
|           } | ||||
|         } | ||||
|         .lv { | ||||
|           padding-left: 0.08rem; | ||||
|           border: none; | ||||
|           height: 0.25rem; | ||||
| 
 | ||||
|           img { | ||||
|             width: 0.35rem; | ||||
|             height: 0.35rem; | ||||
|           } | ||||
| 
 | ||||
|           .value { | ||||
|             font-size: 0.18rem; | ||||
|             justify-content: space-between; | ||||
|             padding-right: 0.1rem; | ||||
|           } | ||||
|         } | ||||
| 
 | ||||
|         .other { | ||||
|           margin-top: 0.02rem; | ||||
|           padding: 0.04rem; | ||||
|           border: 1px solid #ccc; | ||||
|           & > div { | ||||
|             padding-top: 0.02rem; | ||||
|           } | ||||
| 
 | ||||
|           img { | ||||
|             width: 0.3rem; | ||||
|             height: 0.3rem; | ||||
|           } | ||||
| 
 | ||||
|           .value { | ||||
|             font-size: 0.18rem; | ||||
|             margin-top: 0.04rem; | ||||
|             span { | ||||
|               font-size: 0.12rem !important; | ||||
|               transform: scale(0.8); | ||||
|               margin-top: -0.02rem; | ||||
|             } | ||||
|           } | ||||
|         } | ||||
|       } | ||||
| 
 | ||||
|       .user-item { | ||||
|         margin-top: 0.12rem; | ||||
|         width: calc(50% - 0.12rem); | ||||
|         height: calc(25% - 0.02rem); | ||||
|         top: 25%; | ||||
|         left: 0.1rem; | ||||
|         padding: 0; | ||||
| 
 | ||||
|         & > div { | ||||
|           height: 25%; | ||||
|           width: 100%; | ||||
| 
 | ||||
|           .title { | ||||
|             padding: 0 0.1rem; | ||||
|             display: flex; | ||||
|             align-items: center; | ||||
| 
 | ||||
|             .icon { | ||||
|               width: 0.4rem; | ||||
|               height: 0.4rem; | ||||
| 
 | ||||
|               img { | ||||
|                 width: 0.35rem; | ||||
|                 height: 0.35rem; | ||||
|               } | ||||
|             } | ||||
| 
 | ||||
|             .name { | ||||
|               font-size: 0.18rem; | ||||
|             } | ||||
|           } | ||||
|         } | ||||
| 
 | ||||
|         .uii { | ||||
|           display: flex; | ||||
|           flex-direction: column; | ||||
| 
 | ||||
|           .gold { | ||||
|             width: 100%; | ||||
|             height: 50% !important; | ||||
|             height: auto; | ||||
|             margin: 0; | ||||
|             font-size: 0.12rem; | ||||
|             padding-right: 0.12rem; | ||||
| 
 | ||||
|             span { | ||||
|               padding: 0; | ||||
|               font-size: 0.16rem !important; | ||||
|             } | ||||
|           } | ||||
|         } | ||||
|       } | ||||
| 
 | ||||
|       .sys-info { | ||||
|         width: calc(50% - 0.12rem); | ||||
|         height: 50%; | ||||
|         bottom: auto; | ||||
|         right: 0.1rem; | ||||
|         top: 0.1rem; | ||||
|         left: auto; | ||||
|         padding: 0.05rem; | ||||
|         font-size: 0.12rem; | ||||
| 
 | ||||
|         .info { | ||||
|           i { | ||||
|             display: none; | ||||
|           } | ||||
|         } | ||||
| 
 | ||||
|         .clear { | ||||
|           top: auto; | ||||
|           bottom: 0.1rem; | ||||
|           right: 0.1rem; | ||||
|           background: #000; | ||||
|           border: 1px solid #ccc; | ||||
|           border-radius: 0.06rem; | ||||
|           padding: 0.02rem 0.04rem; | ||||
|         } | ||||
|       } | ||||
| 
 | ||||
|       .map { | ||||
|         height: calc(50% - 0.24rem); | ||||
|         right: 0.8rem; | ||||
|         left: 0.1rem; | ||||
|         top: auto; | ||||
|         bottom: 0.1rem; | ||||
| 
 | ||||
|         .plan { | ||||
|           height: 0.6rem; | ||||
|         } | ||||
| 
 | ||||
|         .dungeons { | ||||
|           img { | ||||
|             width: 0.35rem; | ||||
|             height: 0.35rem; | ||||
|           } | ||||
|         } | ||||
| 
 | ||||
|         .event-icon { | ||||
|           width: 0.35rem; | ||||
|           height: 0.35rem; | ||||
|           background-size: 100%; | ||||
| 
 | ||||
|           span { | ||||
|             font-size: 0.13rem; | ||||
|           } | ||||
|         } | ||||
|       } | ||||
| 
 | ||||
|       .menu { | ||||
|         display: flex; | ||||
|         flex-direction: column; | ||||
|         left: auto; | ||||
|         right: 0.1rem; | ||||
|         top: 52%; | ||||
| 
 | ||||
|         & > div { | ||||
|           margin: 0.03rem; | ||||
| 
 | ||||
|           img { | ||||
|             width: 0.35rem; | ||||
|             height: 0.35rem; | ||||
|           } | ||||
| 
 | ||||
|           span { | ||||
|             font-size: 0.22rem; | ||||
|           } | ||||
|         } | ||||
|       } | ||||
|     } | ||||
| 
 | ||||
|     .dialog-backpackPanel { | ||||
|       transform: translate(-50%, -50%) scale(0.8); | ||||
|     } | ||||
| 
 | ||||
|     .dialog { | ||||
|       top: 50% !important; | ||||
|       left: 50% !important; | ||||
|       transform: translate(-50%, -50%); | ||||
| 
 | ||||
|       .item-close { | ||||
|         display: block; | ||||
|       } | ||||
| 
 | ||||
|       .weapon, | ||||
|       .armor, | ||||
|       .ring, | ||||
|       .neck { | ||||
|         & > div { | ||||
|           width: 2.2rem; | ||||
|           font-size: 0.13rem; | ||||
| 
 | ||||
|           .icon { | ||||
|             width: 0.45rem; | ||||
|             height: 0.45rem; | ||||
| 
 | ||||
|             img { | ||||
|               width: 0.4rem; | ||||
|               height: 0.4rem; | ||||
|             } | ||||
|           } | ||||
|         } | ||||
| 
 | ||||
|         padding: 0.06rem; | ||||
|       } | ||||
|     } | ||||
|   } | ||||
| 
 | ||||
|   .drawer-update { | ||||
|     width: 100% !important; | ||||
|   } | ||||
|   .qa { | ||||
|     left: 1.5rem; | ||||
|     width: 0.45rem; | ||||
|     height: 0.5rem; | ||||
|     span { | ||||
|       font-size: 0.12rem !important; | ||||
|     } | ||||
|     img { | ||||
|       width: 0.25rem; | ||||
|       height: 0.25rem; | ||||
|     } | ||||
|   } | ||||
|   .extras { | ||||
|     left: 0.8rem; | ||||
|     width: 0.45rem; | ||||
|     height: 0.5rem; | ||||
|     span { | ||||
|       font-size: 0.12rem !important; | ||||
|     } | ||||
|     img { | ||||
|       width: 0.25rem; | ||||
|       height: 0.25rem; | ||||
|     } | ||||
|   } | ||||
|   .setting { | ||||
|     left: 0.1rem; | ||||
|     width: 0.45rem; | ||||
|     height: 0.5rem; | ||||
|     span { | ||||
|       font-size: 0.12rem !important; | ||||
|     } | ||||
|     img { | ||||
|       width: 0.25rem; | ||||
|       height: 0.25rem; | ||||
|     } | ||||
|   } | ||||
| } | ||||
| @ -0,0 +1,318 @@@@ -0,0 +1,318 @@ | ||||
| * { | ||||
|   box-sizing: border-box; | ||||
|   user-select: none; | ||||
| } | ||||
| a { | ||||
|   cursor: pointer; | ||||
| } | ||||
| .main { | ||||
|   background: #111; | ||||
|   box-sizing: border-box; | ||||
|   margin: 0; | ||||
|   padding: 0; | ||||
|   position: absolute; | ||||
|   top: 0; | ||||
|   left: 0; | ||||
|   bottom: 0; | ||||
|   right: 0; | ||||
|   color: #eee; | ||||
|   height: 100%; | ||||
|   .user-status { | ||||
|     position: absolute; | ||||
|     top: 0.1rem; | ||||
|     left: 0.1rem; | ||||
|     border: 2px solid #ccc; | ||||
|     height: 4rem; | ||||
|     width: 4rem; | ||||
|     padding: 0.1rem; | ||||
|     display: flex; | ||||
|     flex-direction: column; | ||||
|     .hp { | ||||
|       cursor: pointer; | ||||
|       height: 0.7rem; | ||||
|       width: 100%; | ||||
|       display: flex; | ||||
|       border: 2px solid #ccc; | ||||
|       align-items: center; | ||||
|       padding-left: 0.2rem; | ||||
|       margin-bottom: 0.1rem; | ||||
|       img { | ||||
|         width: 0.5rem; | ||||
|         height: 0.5rem; | ||||
|       } | ||||
|       .value { | ||||
|         font-size: 0.26rem; | ||||
|         font-weight: bold; | ||||
|         text-align: center; | ||||
|         flex: 1; | ||||
|       } | ||||
|     } | ||||
|     .lv { | ||||
|       cursor: pointer; | ||||
|       height: 0.7rem; | ||||
|       width: 100%; | ||||
|       display: flex; | ||||
|       border: 2px solid #ccc; | ||||
|       align-items: center; | ||||
|       padding-left: 0.2rem; | ||||
|       margin-bottom: 0.1rem; | ||||
|       img { | ||||
|         width: 0.5rem; | ||||
|         height: 0.5rem; | ||||
|       } | ||||
|       .value { | ||||
|         display: flex; | ||||
|         justify-content: space-around; | ||||
|         font-size: 0.26rem; | ||||
|         font-weight: bold; | ||||
|         text-align: center; | ||||
|         flex: 1; | ||||
|         align-items: center; | ||||
|       } | ||||
|     } | ||||
|     .other { | ||||
|       img { | ||||
|         width: 0.35rem !important; | ||||
|         height: 0.35rem !important; | ||||
|       } | ||||
|       display: flex; | ||||
|       flex: 1; | ||||
|       padding: 0.1rem; | ||||
|       border: 2px solid #ccc; | ||||
|       flex-wrap: wrap; | ||||
|       & > div, | ||||
|       .item { | ||||
|         cursor: pointer; | ||||
|         width: 33.3%; | ||||
|         height: 50%; | ||||
|         display: flex; | ||||
|         align-items: center; | ||||
|         justify-content: flex-start; | ||||
|         padding-top: 0.05rem; | ||||
|         flex-direction: column; | ||||
|         .value { | ||||
|           margin-top: 0.06rem; | ||||
|           font-size: 0.23rem; | ||||
|           font-weight: normal; | ||||
|           flex: 1; | ||||
|           display: flex; | ||||
|           align-items: center; | ||||
|           flex-direction: column; | ||||
|         } | ||||
|       } | ||||
|       .item { | ||||
|         width: 100%; | ||||
|       } | ||||
|     } | ||||
|   } | ||||
|   .user-item { | ||||
|     position: absolute; | ||||
|     top: 0.1rem; | ||||
|     left: 4.2rem; | ||||
|     border: 2px solid #ccc; | ||||
|     height: 4rem; | ||||
|     width: 4rem; | ||||
|     display: flex; | ||||
|     flex-direction: column; | ||||
|     align-items: center; | ||||
|     justify-content: space-around; | ||||
|     padding: 0.2rem 0; | ||||
|     padding-top: 0.1rem; | ||||
|     cursor: pointer; | ||||
|     & > div { | ||||
|       background: rgba(0, 0, 0, 0.7); | ||||
|       width: calc(100% - 0.4rem); | ||||
|       margin: 0 20rem; | ||||
|     } | ||||
|     .uii { | ||||
|       display: flex; | ||||
|       width: calc(100% -0.4rem); | ||||
|     } | ||||
|     .gold { | ||||
|       cursor: pointer; | ||||
|       height: 0.7rem; | ||||
|       margin: 0.1rem; | ||||
|       margin-top: 0.08rem; | ||||
|       width: calc(100%); | ||||
|       display: flex; | ||||
|       align-items: center; | ||||
|       padding-left: 0.1rem; | ||||
|       font-size: 0.22rem; | ||||
|       span { | ||||
|         font-size: 0.2rem; | ||||
|         font-weight: bold; | ||||
|         text-align: right; | ||||
|         flex: 1; | ||||
|         padding: 0.1rem 0.08rem; | ||||
|         display: flex; | ||||
|         align-items: flex-end; | ||||
|         justify-content: flex-end; | ||||
|       } | ||||
|     } | ||||
|     .title { | ||||
|       display: flex; | ||||
|       padding: 0.05rem; | ||||
|       width: 100%; | ||||
|       .icon { | ||||
|         width: 0.56rem; | ||||
|         height: 0.56rem; | ||||
|         background-color: #000; | ||||
|         display: flex; | ||||
|         align-items: center; | ||||
|         justify-content: center; | ||||
|         border-radius: 0.04rem; | ||||
|       } | ||||
|       .name { | ||||
|         font-size: 0.2rem; | ||||
|         height: 0.46rem; | ||||
|         margin-left: 0.2rem; | ||||
|         line-height: 0.46rem; | ||||
|       } | ||||
|     } | ||||
|   } | ||||
|   .sys-info { | ||||
|     position: absolute; | ||||
|     border: 2px solid #ccc; | ||||
|     height: calc(100% - 4.4rem); | ||||
|     width: 8.1rem; | ||||
|     bottom: 0.1rem; | ||||
|     left: 0.1rem; | ||||
| 
 | ||||
|     transition: 0.2s; | ||||
|     padding: 0.2rem; | ||||
|     .clear { | ||||
|       position: absolute; | ||||
|       top: 0.2rem; | ||||
|       right: 0.2rem; | ||||
|       cursor: pointer; | ||||
|       &:hover { | ||||
|         text-decoration: underline; | ||||
|       } | ||||
|     } | ||||
|     #sysInfo { | ||||
|       overflow-y: auto; | ||||
|       transition: 0.2s; | ||||
|       width: 100%; | ||||
|       height: 100%; | ||||
|       display: flex; | ||||
|       flex-direction: column; | ||||
|       align-items: flex-start; | ||||
|       justify-content: flex-start; | ||||
|     } | ||||
|     .info { | ||||
|       margin: 0.03rem 0; | ||||
|     } | ||||
|     a { | ||||
|       cursor: pointer; | ||||
|       text-decoration: underline; | ||||
|       margin-left: 0.05rem; | ||||
|     } | ||||
|     .warning > span { | ||||
|       color: #f90202; | ||||
|     } | ||||
|     .battle > span { | ||||
|       color: #de8618; | ||||
|     } | ||||
|     .win > span { | ||||
|       color: #24c4de; | ||||
|     } | ||||
|     .trophy > span { | ||||
|       color: #2fe20f; | ||||
|     } | ||||
|   } | ||||
|   .map { | ||||
|     position: absolute; | ||||
|     right: 0.1rem; | ||||
|     left: 8.3rem; | ||||
|     top: 0.1rem; | ||||
|     bottom: 0.1rem; | ||||
|     border: 2px solid #ccc; | ||||
|     background-image: url(../img/map.jpg); | ||||
|     background-repeat: no-repeat; | ||||
|     background-size: 100% 100%; | ||||
|     .plan { | ||||
|       position: absolute; | ||||
|       top: 0.1rem; | ||||
|       width: calc(100% - 0.3rem); | ||||
|       left: 0.15rem; | ||||
|       height: 1rem; | ||||
|       background: rgba(54, 121, 176, 0.68); | ||||
|       text-align: center; | ||||
|       font-size: 0.4rem; | ||||
|       line-height: 1rem; | ||||
|     } | ||||
|     .eventEnd { | ||||
|       position: absolute; | ||||
|       top: 1.1rem; | ||||
|       right: 0rem; | ||||
|       height: 0.4rem; | ||||
|       font-size: 0.16rem; | ||||
|       line-height: initial; | ||||
|     } | ||||
|     .event-icon { | ||||
|       position: absolute; | ||||
|       cursor: pointer; | ||||
|       width: 0.55rem; | ||||
|       height: 0.75rem; | ||||
|       border: 1px solid #111; | ||||
|       background: rgba(0, 0, 0, 0.5); | ||||
|       border-radius: 4px; | ||||
|       box-shadow: 0 0 4px 4px rgba(100, 255, 36, 0.5); | ||||
|       display: flex; | ||||
|       flex-direction: column; | ||||
|       align-items: center; | ||||
|       justify-content: center; | ||||
|       .icon-image { | ||||
|         width: 0.45rem; | ||||
|         height: 0.45rem; | ||||
|         border-radius: 50%; | ||||
|         background-image: url(../icons/menu/d1.png); | ||||
|         background-color: rgba(100, 255, 36, 0.6); | ||||
|         background-repeat: no-repeat; | ||||
|         background-position: center center; | ||||
|         background-size: 30px 29px; | ||||
|       } | ||||
|       span { | ||||
|         text-shadow: 1px 1px 3px rgb(0, 0, 0); | ||||
|         white-space: nowrap; | ||||
|         width: 100%; | ||||
|         text-align: center; | ||||
|         border-top: 1px solid rgba(100, 255, 36, 0.6); | ||||
|         margin-top: 0.03rem; | ||||
|         font-size: 0.14rem; | ||||
|       } | ||||
|     } | ||||
|     .low-level { | ||||
|     } | ||||
|     .h-level { | ||||
|       box-shadow: 0 0 4px 4px rgba(245, 241, 0, 0.5); | ||||
|       .icon-image { | ||||
|         background-image: url(../icons/menu/d2.png); | ||||
|         background-color: rgba(245, 241, 0, 0.6); | ||||
|       } | ||||
|       span { | ||||
|         border-top: 1px solid rgba(245, 241, 0, 0.6); | ||||
|       } | ||||
|     } | ||||
|     .boss { | ||||
|       box-shadow: 0 0 4px 4px rgba(245, 54, 54, 0.5); | ||||
|       .icon-image { | ||||
|         background-image: url(../icons/menu/d3.png); | ||||
|         background-color: rgba(245, 54, 54, 0.6); | ||||
|       } | ||||
|       span { | ||||
|         border-top: 1px solid rgba(245, 54, 54, 0.6); | ||||
|       } | ||||
|     } | ||||
|     .endless { | ||||
|       box-shadow: 0 0 4px 4px rgba(245, 69, 0, 0.5); | ||||
|       .icon-image { | ||||
|         background-image: url(../icons/endless.png); | ||||
|         background-color: rgba(245, 69, 0, 0.6); | ||||
|       } | ||||
|       span { | ||||
|         border-top: 1px solid rgba(245, 69, 0, 0.6); | ||||
|       } | ||||
|     } | ||||
|   } | ||||
| } | ||||
| After Width: | Height: | Size: 3.3 KiB | 
| After Width: | Height: | Size: 3.4 KiB | 
| After Width: | Height: | Size: 2.2 KiB | 
| After Width: | Height: | Size: 1.3 KiB | 
| After Width: | Height: | Size: 1.3 KiB | 
| After Width: | Height: | Size: 987 B | 
| After Width: | Height: | Size: 978 B | 
| After Width: | Height: | Size: 878 B | 
| After Width: | Height: | Size: 3.1 KiB | 
| After Width: | Height: | Size: 1.9 KiB | 
| After Width: | Height: | Size: 762 B | 
| After Width: | Height: | Size: 571 B | 
| After Width: | Height: | Size: 3.6 KiB | 
| After Width: | Height: | Size: 3.3 KiB | 
| After Width: | Height: | Size: 3.4 KiB | 
| After Width: | Height: | Size: 3.6 KiB | 
| After Width: | Height: | Size: 560 B | 
| After Width: | Height: | Size: 3.2 KiB | 
| After Width: | Height: | Size: 1.4 KiB | 
| After Width: | Height: | Size: 573 B | 
| After Width: | Height: | Size: 3.1 KiB | 
| After Width: | Height: | Size: 3.5 KiB | 
| After Width: | Height: | Size: 3.2 KiB | 
| After Width: | Height: | Size: 3.2 KiB | 
| After Width: | Height: | Size: 823 B | 
| After Width: | Height: | Size: 911 B | 
| After Width: | Height: | Size: 772 B | 
| After Width: | Height: | Size: 715 B | 
| After Width: | Height: | Size: 734 B | 
| After Width: | Height: | Size: 676 B | 
| After Width: | Height: | Size: 725 B | 
| After Width: | Height: | Size: 873 B | 
| After Width: | Height: | Size: 456 B | 
| After Width: | Height: | Size: 611 B | 
| After Width: | Height: | Size: 1.0 KiB | 
| After Width: | Height: | Size: 1007 B | 
| After Width: | Height: | Size: 596 B | 
| After Width: | Height: | Size: 1.7 KiB | 
| After Width: | Height: | Size: 840 B | 
| After Width: | Height: | Size: 1.2 KiB | 
| After Width: | Height: | Size: 501 B | 
| After Width: | Height: | Size: 717 B | 
| After Width: | Height: | Size: 1.2 KiB | 
| After Width: | Height: | Size: 605 B | 
| After Width: | Height: | Size: 1.2 KiB | 
| After Width: | Height: | Size: 530 B | 
| After Width: | Height: | Size: 887 B | 
| After Width: | Height: | Size: 636 B | 
| After Width: | Height: | Size: 1.5 KiB | 
| After Width: | Height: | Size: 649 B | 
| After Width: | Height: | Size: 1.2 KiB | 
| After Width: | Height: | Size: 826 B | 
| After Width: | Height: | Size: 3.1 KiB | 
| After Width: | Height: | Size: 3.2 KiB | 
| After Width: | Height: | Size: 3.4 KiB | 
| After Width: | Height: | Size: 3.3 KiB | 
| After Width: | Height: | Size: 3.3 KiB | 
| After Width: | Height: | Size: 3.3 KiB | 
| After Width: | Height: | Size: 1.5 KiB | 
| After Width: | Height: | Size: 1.5 KiB | 
| After Width: | Height: | Size: 1.7 KiB | 
| After Width: | Height: | Size: 1.9 KiB | 
| After Width: | Height: | Size: 1.3 KiB | 
| After Width: | Height: | Size: 1.5 KiB | 
| After Width: | Height: | Size: 341 B | 
| After Width: | Height: | Size: 3.1 KiB | 
| After Width: | Height: | Size: 4.0 KiB | 
| After Width: | Height: | Size: 3.3 KiB | 
| After Width: | Height: | Size: 3.2 KiB | 
| After Width: | Height: | Size: 3.7 KiB | 
| After Width: | Height: | Size: 22 KiB | 
| After Width: | Height: | Size: 3.2 KiB | 
| After Width: | Height: | Size: 3.3 KiB |