fxdyz
This commit is contained in:
@@ -1,5 +1,17 @@
|
||||
## 更新记录
|
||||
|
||||
### version: 3.4.5(2026-09-05):
|
||||
|
||||
新增 `跨服名剑 服务器 [模式]` 指令,接入 JX3API 跨服名剑榜;竞技模式支持 `0=2v2`、`1=3v3`、`2=5v5`,默认为 `1`。榜单按接口数组顺序生成排名,使用统一数据表格模板展示队伍名称、积分、胜场、败场和总场数,并同步更新功能帮助与 README。
|
||||
|
||||
新增 `武林争霸 服务器 [阵营]` 指令,接入 JX3API 武林争霸赛帮会榜;阵营支持 `1=浩气`、`2=恶人`,默认为 `1`。榜单按接口数组顺序生成排名,使用统一数据表格模板展示帮会、帮主、所属服务器、阵营、胜负场、积分和最后比赛时间。
|
||||
|
||||
新增 `捕快荣誉 服务器` 和 `江湖浪客 服务器` 指令,分别接入 JX3API `/rank/constable` 与 `/rank/outlaw`。两个榜单复用同一数据处理流程和统一表格模板,按接口数组顺序生成排名,展示角色、帮会、门派、阵营和抓捕数;江湖浪客榜额外展示敌对数。
|
||||
|
||||
新增 `决斗挑战 服务器 [模式]` 指令,接入 JX3API `/rank/wanted`;模式支持 `1=公开`、`2=私密`,默认为 `1`。榜单按接口数组顺序生成排名,展示被悬赏角色、门派、赏金、剩余时间和发起人,并将 `timeOut` 结束时间戳转换为动态剩余时长。
|
||||
|
||||
统一图片列表中的阵营列:浩气盟、恶人谷和中立改为显示 `templates/img` 内对应图标,不再显示阵营文本;空值或未识别阵营使用“未知”图标兜底。
|
||||
|
||||
### version: 3.4.4(2026-09-05):
|
||||
|
||||
烟花查询在角色名称后新增可选的“条数”参数,默认展示前 50 条,支持指定正整数条数;沿用已绑定会话省略服务器的用法,并同步更新功能帮助和 README。上游接口未提供条数参数,查询结果在本地截取后生成图片。
|
||||
|
||||
@@ -166,6 +166,11 @@ JX3API Token 可从 [JX3API](https://www.jx3api.com/) 获取。推栏 Ticket 通
|
||||
| `战绩 服务器 角色 [模式]` | 角色名剑战绩,模式可选 `22`、`33`、`55`,默认 `33`;图片 | Token + Ticket |
|
||||
| `名剑排行 [模式] [数量]` | 名剑大会排行,默认 `33`、50 条;图片 | Token + Ticket |
|
||||
| `名剑统计 [模式]` | 名剑门派统计,模式默认 `33`;图片 | Token + Ticket |
|
||||
| `跨服名剑 服务器 [模式]` | 跨服名剑队伍榜单,模式可选 `0`(2v2)、`1`(3v3)、`2`(5v5),默认 `1`;图片 | Token(LV.2) |
|
||||
| `武林争霸 服务器 [阵营]` | 武林争霸赛帮会榜,阵营可选 `1`(浩气)、`2`(恶人),默认 `1`;图片 | Token(LV.2) |
|
||||
| `捕快荣誉 服务器` | 捕快荣誉榜,展示角色、帮会、门派、阵营和抓捕数;图片 | Token(LV.2) |
|
||||
| `江湖浪客 服务器` | 江湖浪客榜,展示角色、帮会、门派、阵营、抓捕数和敌对数;图片 | Token(LV.2) |
|
||||
| `决斗挑战 服务器 [模式]` | 决斗挑战悬赏榜,模式可选 `1`(公开)、`2`(私密),默认 `1`;图片 | Token(LV.2) |
|
||||
| `帮会排行 服务器` | 回复序号选择神兵宝甲或爱心帮会榜单,最多保留前 50 条;图片 | Token |
|
||||
| `阵营排行 服务器` | 回复序号选择赛季、上周或本周阵营榜单,最多保留前 50 条;图片 | Token |
|
||||
| `其他排行 服务器` | 回复序号选择名士、老江湖、名师等其他榜单,最多保留前 50 条;图片 | Token |
|
||||
@@ -522,7 +527,7 @@ git diff --check
|
||||
|
||||
## 当前版本状态
|
||||
|
||||
以下内容是对 v3.4.4 当前源码的静态核对结果,部署和二次开发前应注意:
|
||||
以下内容是对 v3.4.5 当前源码的静态核对结果,部署和二次开发前应注意:
|
||||
|
||||
1. 查询图片使用浅色高对比主题和放大的内容区域;渲染清晰度、JPEG/PNG 格式及 JPEG 质量由 `image_render_quality` 配置组控制,提高清晰度或使用 PNG 会增加图片体积与渲染耗时。
|
||||
2. `帮会排行`、`阵营排行`、`其他排行` 使用固定的“数字序号 → 榜单名称”首轮菜单,次轮查询统一截取接口返回的前 50 条;取得有效选择后会先停止超时计时器,避免渲染期间重复输出。
|
||||
|
||||
+1
-1
@@ -53,7 +53,7 @@
|
||||
"1.3",
|
||||
"1.8"
|
||||
],
|
||||
"default": "1.3",
|
||||
"default": "1.0",
|
||||
"hint": "数值越高越清晰,同时图片更大、渲染耗时更多。"
|
||||
},
|
||||
"format": {
|
||||
|
||||
@@ -560,6 +560,162 @@ class JX3APIService:
|
||||
template="mingjiantongji.html"
|
||||
)
|
||||
|
||||
async def kuafumingjian(self, server: str, mode: int = 1) -> Dict[str, Any]:
|
||||
"""跨服名剑榜。"""
|
||||
mode_names = {0: "2v2", 1: "3v3", 2: "5v5"}
|
||||
|
||||
async def processor(data: Any, return_data: Dict[str, Any]) -> None:
|
||||
items = data.get("data") or []
|
||||
if not isinstance(items, list):
|
||||
items = []
|
||||
|
||||
return_data["data"] = {
|
||||
"items": [item for item in items if isinstance(item, dict)],
|
||||
"name": data.get("name") or "跨服名剑榜",
|
||||
"server": data.get("server") or server or "全区",
|
||||
"mode_name": mode_names[mode],
|
||||
"update_time": format_time(data.get("time")),
|
||||
}
|
||||
|
||||
return await self._request_api(
|
||||
path="/rank/arena",
|
||||
params={"server": server, "mode": mode, "token": self.token},
|
||||
processor=processor,
|
||||
template="kuafumingjian.html",
|
||||
)
|
||||
|
||||
async def wulinzhengba(self, server: str, camp: int = 1) -> Dict[str, Any]:
|
||||
"""武林争霸赛帮会榜。"""
|
||||
camp_names = {1: "浩气盟", 2: "恶人谷"}
|
||||
|
||||
def format_match_time(value: Any) -> str:
|
||||
try:
|
||||
total_seconds = int(value)
|
||||
except (TypeError, ValueError):
|
||||
return ""
|
||||
if total_seconds < 0:
|
||||
return ""
|
||||
|
||||
hours, remainder = divmod(total_seconds, 3600)
|
||||
minutes, seconds = divmod(remainder, 60)
|
||||
if hours:
|
||||
return f"{hours}时{minutes:02d}分{seconds:02d}秒"
|
||||
return f"{minutes}分{seconds:02d}秒"
|
||||
|
||||
async def processor(data: Any, return_data: Dict[str, Any]) -> None:
|
||||
items = data.get("data") or []
|
||||
if not isinstance(items, list):
|
||||
items = []
|
||||
|
||||
rank_items = []
|
||||
for item in items:
|
||||
if not isinstance(item, dict):
|
||||
continue
|
||||
rank_item = item.copy()
|
||||
rank_item["lastMatchTimeText"] = format_match_time(
|
||||
item.get("lastMatchTime")
|
||||
)
|
||||
rank_items.append(rank_item)
|
||||
|
||||
return_data["data"] = {
|
||||
"items": rank_items,
|
||||
"name": data.get("name") or "武林争霸赛",
|
||||
"server": data.get("server") or server or "全区",
|
||||
"camp_name": camp_names[camp],
|
||||
"update_time": format_time(data.get("time")),
|
||||
}
|
||||
|
||||
return await self._request_api(
|
||||
path="/rank/championship",
|
||||
params={"server": server, "camp": camp, "token": self.token},
|
||||
processor=processor,
|
||||
template="wulinzhengba.html",
|
||||
)
|
||||
|
||||
async def _bounty_rank(self,server: str,path: str,fallback_name: str,show_hostile_count: bool,) -> Dict[str, Any]:
|
||||
"""处理捕快荣誉和江湖浪客共用的榜单结构。"""
|
||||
|
||||
async def processor(data: Any, return_data: Dict[str, Any]) -> None:
|
||||
items = data.get("data") or []
|
||||
if not isinstance(items, list):
|
||||
items = []
|
||||
|
||||
return_data["data"] = {
|
||||
"items": [item for item in items if isinstance(item, dict)],
|
||||
"name": data.get("name") or fallback_name,
|
||||
"server": data.get("server") or server or "全区",
|
||||
"show_hostile_count": show_hostile_count,
|
||||
"update_time": format_time(data.get("time")),
|
||||
}
|
||||
|
||||
return await self._request_api(
|
||||
path=path,
|
||||
params={"server": server, "token": self.token},
|
||||
processor=processor,
|
||||
template="bounty_rank.html",
|
||||
)
|
||||
|
||||
async def bukairongyu(self, server: str) -> Dict[str, Any]:
|
||||
"""捕快荣誉榜。"""
|
||||
return await self._bounty_rank(
|
||||
server=server,
|
||||
path="/rank/constable",
|
||||
fallback_name="捕快荣誉榜",
|
||||
show_hostile_count=False,
|
||||
)
|
||||
|
||||
async def jianghulangke(self, server: str) -> Dict[str, Any]:
|
||||
"""江湖浪客榜。"""
|
||||
return await self._bounty_rank(
|
||||
server=server,
|
||||
path="/rank/outlaw",
|
||||
fallback_name="江湖浪客榜",
|
||||
show_hostile_count=True,
|
||||
)
|
||||
|
||||
async def juedoutiaozhan(self,server: str,mode: int = 1,) -> Dict[str, Any]:
|
||||
"""决斗挑战榜。"""
|
||||
mode_names = {1: "公开", 2: "私密"}
|
||||
|
||||
async def processor(data: Any, return_data: Dict[str, Any]) -> None:
|
||||
items = data.get("data") or []
|
||||
if not isinstance(items, list):
|
||||
items = []
|
||||
|
||||
now_timestamp = int(datetime.now().timestamp())
|
||||
rank_items = []
|
||||
for item in items:
|
||||
if not isinstance(item, dict):
|
||||
continue
|
||||
rank_item = item.copy()
|
||||
try:
|
||||
timeout = int(item.get("timeOut"))
|
||||
except (TypeError, ValueError):
|
||||
remaining_time = ""
|
||||
else:
|
||||
remaining_time = (
|
||||
format_remaining(timeout)
|
||||
if timeout > now_timestamp
|
||||
else "已结束"
|
||||
)
|
||||
rank_item["remainingTime"] = remaining_time
|
||||
rank_items.append(rank_item)
|
||||
|
||||
return_data["data"] = {
|
||||
"items": rank_items,
|
||||
"name": data.get("name") or "决斗挑战榜",
|
||||
"server": data.get("server") or server or "全区",
|
||||
"mode_name": mode_names[mode],
|
||||
"update_time": format_time(data.get("time")),
|
||||
}
|
||||
|
||||
return await self._request_api(
|
||||
path="/rank/wanted",
|
||||
params={"server": server, "mode": mode, "token": self.token},
|
||||
processor=processor,
|
||||
template="juedoutiaozhan.html",
|
||||
)
|
||||
|
||||
|
||||
async def banghui_rank_menu(self) -> Dict[str, str]:
|
||||
"""帮会排行榜选择内容。"""
|
||||
|
||||
@@ -349,6 +349,47 @@ class MessageBuilder:
|
||||
""" 名剑统计 模式"""
|
||||
return await self.T2I_image_msg(event, lambda: self.jx3api.mingjiantongji(mode))
|
||||
|
||||
async def kuafumingjian(self, event: AstrMessageEvent, server: str, mode: int = 1,):
|
||||
"""跨服名剑 服务器 [模式]。"""
|
||||
if mode not in {0, 1, 2}:
|
||||
return event.plain_result("竞技模式仅支持 0=2v2、1=3v3、2=5v5")
|
||||
return await self.T2I_image_msg(
|
||||
event,
|
||||
lambda: self.jx3api.kuafumingjian(server, mode),
|
||||
)
|
||||
|
||||
async def wulinzhengba(self,event: AstrMessageEvent,server: str,camp: int = 1,):
|
||||
"""武林争霸 服务器 [阵营]。"""
|
||||
if camp not in {1, 2}:
|
||||
return event.plain_result("阵营仅支持 1=浩气、2=恶人")
|
||||
return await self.T2I_image_msg(
|
||||
event,
|
||||
lambda: self.jx3api.wulinzhengba(server, camp),
|
||||
)
|
||||
|
||||
async def bukairongyu(self, event: AstrMessageEvent, server: str):
|
||||
"""捕快荣誉 服务器。"""
|
||||
return await self.T2I_image_msg(
|
||||
event,
|
||||
lambda: self.jx3api.bukairongyu(server),
|
||||
)
|
||||
|
||||
async def jianghulangke(self, event: AstrMessageEvent, server: str):
|
||||
"""江湖浪客 服务器。"""
|
||||
return await self.T2I_image_msg(
|
||||
event,
|
||||
lambda: self.jx3api.jianghulangke(server),
|
||||
)
|
||||
|
||||
async def juedoutiaozhan(self,event: AstrMessageEvent,server: str,mode: int = 1,):
|
||||
"""决斗挑战 服务器 [模式]。"""
|
||||
if mode not in {1, 2}:
|
||||
return event.plain_result("模式仅支持 1=公开、2=私密")
|
||||
return await self.T2I_image_msg(
|
||||
event,
|
||||
lambda: self.jx3api.juedoutiaozhan(server, mode),
|
||||
)
|
||||
|
||||
async def banghuipaihang(self, event: AstrMessageEvent, server: str):
|
||||
"""帮会排行 服务器。"""
|
||||
return await self.handler_plain_image_msg(
|
||||
|
||||
@@ -25,7 +25,7 @@ PLUGIN_NAME = "astrbot_plugin_jx3"
|
||||
@register("astrbot_plugin_jx3",
|
||||
"fxdyz",
|
||||
"聚合剑网三游戏数据,提供查询、图片渲染、本地避雷和实时事件推送。",
|
||||
"3.4.4",
|
||||
"3.4.5",
|
||||
"https://github.com/qsc20001102/astrbot_plugin_jx3"
|
||||
)
|
||||
class Jx3ApiPlugin(Star):
|
||||
@@ -254,6 +254,11 @@ class Jx3ApiPlugin(Star):
|
||||
"战绩": self. jx3cmd.zhanji,
|
||||
"名剑排行": self. jx3cmd.mingjianpaihang,
|
||||
"名剑统计": self. jx3cmd.mingjiantongji,
|
||||
"跨服名剑": self.jx3cmd.kuafumingjian,
|
||||
"武林争霸": self.jx3cmd.wulinzhengba,
|
||||
"捕快荣誉": self.jx3cmd.bukairongyu,
|
||||
"江湖浪客": self.jx3cmd.jianghulangke,
|
||||
"决斗挑战": self.jx3cmd.juedoutiaozhan,
|
||||
"帮会排行": self. jx3cmd.banghuipaihang,
|
||||
"阵营排行": self. jx3cmd.zhenyingpaihang,
|
||||
"其他排行": self. jx3cmd.qitapaihang,
|
||||
|
||||
+1
-1
@@ -1,7 +1,7 @@
|
||||
name: astrbot_plugin_jx3
|
||||
display_name: 剑网三游戏数据查询工具
|
||||
desc: 聚合剑网三游戏数据,提供查询、图片渲染、本地避雷和实时事件推送。
|
||||
version: 3.4.4
|
||||
version: 3.4.5
|
||||
author: 飞翔大野猪
|
||||
repo: https://github.com/qsc20001102/astrbot_plugin_jx3
|
||||
astrbot_version: ">=4.24.1"
|
||||
|
||||
@@ -0,0 +1,46 @@
|
||||
{# template-title: 悬赏排行榜 #}
|
||||
{# template-components: data-table #}
|
||||
|
||||
|
||||
<div class="container data-page">
|
||||
<h1>{{ name }}</h1>
|
||||
<div class="data-page__meta">{{ server }}{% if update_time %} · 更新时间:{{ update_time }}{% endif %}</div>
|
||||
|
||||
<table class="data-table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>排名</th>
|
||||
<th>名称</th>
|
||||
<th>帮会</th>
|
||||
<th>门派</th>
|
||||
<th>阵营</th>
|
||||
<th>抓捕数</th>
|
||||
{% if show_hostile_count %}<th>敌对数</th>{% endif %}
|
||||
</tr>
|
||||
</thead>
|
||||
|
||||
<tbody>
|
||||
{% for item in items %}
|
||||
<tr>
|
||||
<td class="data-cell--rank">{{ loop.index }}</td>
|
||||
<td class="data-cell--name data-cell--nowrap">{{ item.name }}</td>
|
||||
<td class="data-cell--wrap">{{ item.tongName }}</td>
|
||||
<td>
|
||||
<div class="icon-label">
|
||||
{% if icons.sect.get(item.forceName) %}
|
||||
<img class="icon-label__icon" src="{{ icons.sect[item.forceName] }}" alt="{{ item.forceName }}">
|
||||
{% endif %}
|
||||
<span>{{ item.forceName }}</span>
|
||||
</div>
|
||||
</td>
|
||||
{% set camp_name = item.campName or '未知' %}
|
||||
<td class="data-cell--camp data-cell--nowrap">
|
||||
<img class="data-camp-icon" src="{{ icons.img.get(camp_name) or icons.img.get('未知') }}" alt="{{ camp_name }}" title="{{ camp_name }}">
|
||||
</td>
|
||||
<td class="data-cell--score">{{ item.score }}</td>
|
||||
{% if show_hostile_count %}<td class="data-cell--nowrap data-cell--numeric">{{ item.customValue0 }}</td>{% endif %}
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
@@ -33,11 +33,17 @@
|
||||
<td>{{ m.refreshTime }}</td>
|
||||
<td>{{ m.captureTime }}</td>
|
||||
<td>{{ m.captureRoleName }}</td>
|
||||
<td>{{ m.captureCampName }}</td>
|
||||
{% set capture_camp_name = m.captureCampName or '未知' %}
|
||||
<td class="data-cell--camp data-cell--nowrap">
|
||||
<img class="data-camp-icon" src="{{ icons.img.get(capture_camp_name) or icons.img.get('未知') }}" alt="{{ capture_camp_name }}" title="{{ capture_camp_name }}">
|
||||
</td>
|
||||
<td>{{ m.auctionTime }}</td>
|
||||
<td>{{ m.auctionAmount }}</td>
|
||||
<td>{{ m.auctionRoleName }}</td>
|
||||
<td>{{ m.auctionCampName }}</td>
|
||||
{% set auction_camp_name = m.auctionCampName or '未知' %}
|
||||
<td class="data-cell--camp data-cell--nowrap">
|
||||
<img class="data-camp-icon" src="{{ icons.img.get(auction_camp_name) or icons.img.get('未知') }}" alt="{{ auction_camp_name }}" title="{{ auction_camp_name }}">
|
||||
</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
|
||||
@@ -30,7 +30,10 @@
|
||||
class="camp-haoqi"
|
||||
{% endif %}
|
||||
>
|
||||
<td class="data-cell--camp data-cell--nowrap data-cell--strong">{{ item.camp_name }}</td>
|
||||
{% set camp_name = item.camp_name or '未知' %}
|
||||
<td class="data-cell--camp data-cell--nowrap">
|
||||
<img class="data-camp-icon" src="{{ icons.img.get(camp_name) or icons.img.get('未知') }}" alt="{{ camp_name }}" title="{{ camp_name }}">
|
||||
</td>
|
||||
<td class="data-cell--camp data-cell--name data-cell--nowrap">{{ item.castle }}</td>
|
||||
<td class="data-cell--nowrap data-cell--strong">{{ item.str_status }}</td>
|
||||
<td class="data-cell--time">{{ item.start_time }}</td>
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<header class="top-info help-header">
|
||||
<div>
|
||||
<div class="top-name">剑网三综合查询插件</div>
|
||||
<div class="top-summary">18 个功能分区 · 92 个触发指令</div>
|
||||
<div class="top-summary">18 个功能分区 · 97 个触发指令</div>
|
||||
</div>
|
||||
<div class="help-rules">
|
||||
<span>参数之间使用空格分隔</span>
|
||||
@@ -30,17 +30,21 @@
|
||||
</section>
|
||||
|
||||
<section class="command-section">
|
||||
<header class="command-section__header"><span class="section-index">02</span><h2>名剑相关</h2><span class="section-count">3 个触发词</span></header>
|
||||
<header class="command-section__header"><span class="section-index">02</span><h2>名剑相关</h2><span class="section-count">4 个触发词</span></header>
|
||||
<div class="command-list">
|
||||
<div class="command-row" data-description="模式可选22、33、55"><div class="feature-name">名剑战绩</div><div class="commands"><code class="command">战绩 服务器 角色 [模式]</code></div></div>
|
||||
<div class="command-row"><div class="feature-name">名剑排行</div><div class="commands"><code class="command">名剑排行 [模式] [数量]</code></div></div>
|
||||
<div class="command-row"><div class="feature-name">名剑统计</div><div class="commands"><code class="command">名剑统计 [模式]</code></div></div>
|
||||
<div class="command-row" data-description="模式:0=2v2、1=3v3、2=5v5,默认 1"><div class="feature-name">跨服名剑</div><div class="commands"><code class="command">跨服名剑 服务器 [模式]</code></div></div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="command-section">
|
||||
<header class="command-section__header"><span class="section-index">03</span><h2>排行榜单</h2><span class="section-count">4 个触发词</span></header>
|
||||
<header class="command-section__header"><span class="section-index">03</span><h2>排行榜单</h2><span class="section-count">8 个触发词</span></header>
|
||||
<div class="command-list">
|
||||
<div class="command-row" data-description="阵营:1=浩气、2=恶人,默认 1"><div class="feature-name">武林争霸</div><div class="commands"><code class="command">武林争霸 服务器 [阵营]</code></div></div>
|
||||
<div class="command-row"><div class="feature-name">悬赏排行</div><div class="commands"><code class="command">捕快荣誉 服务器</code><code class="command">江湖浪客 服务器</code></div></div>
|
||||
<div class="command-row" data-description="模式:1=公开、2=私密,默认 1"><div class="feature-name">决斗挑战</div><div class="commands"><code class="command">决斗挑战 服务器 [模式]</code></div></div>
|
||||
<div class="command-row"><div class="feature-name">分类排行</div><div class="commands"><code class="command">帮会排行 服务器</code><code class="command">阵营排行 服务器</code><code class="command">其他排行 服务器</code></div></div>
|
||||
<div class="command-row"><div class="feature-name">试炼排行</div><div class="commands"><code class="command">试炼排行 服务器 心法</code></div></div>
|
||||
</div>
|
||||
|
||||
@@ -0,0 +1,41 @@
|
||||
{# template-title: 决斗挑战榜 #}
|
||||
{# template-components: data-table #}
|
||||
|
||||
|
||||
<div class="container data-page">
|
||||
<h1>{{ name }}</h1>
|
||||
<div class="data-page__meta">{{ server }} · {{ mode_name }}{% if update_time %} · 更新时间:{{ update_time }}{% endif %}</div>
|
||||
|
||||
<table class="data-table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>排名</th>
|
||||
<th>被悬赏</th>
|
||||
<th>门派</th>
|
||||
<th>赏金</th>
|
||||
<th>剩余时间</th>
|
||||
<th>发起人</th>
|
||||
</tr>
|
||||
</thead>
|
||||
|
||||
<tbody>
|
||||
{% for item in items %}
|
||||
<tr>
|
||||
<td class="data-cell--rank">{{ loop.index }}</td>
|
||||
<td class="data-cell--name data-cell--nowrap">{{ item.name }}</td>
|
||||
<td>
|
||||
<div class="icon-label">
|
||||
{% if icons.sect.get(item.forceName) %}
|
||||
<img class="icon-label__icon" src="{{ icons.sect[item.forceName] }}" alt="{{ item.forceName }}">
|
||||
{% endif %}
|
||||
<span>{{ item.forceName }}</span>
|
||||
</div>
|
||||
</td>
|
||||
<td class="data-cell--score">{{ item.money }}</td>
|
||||
<td class="data-cell--time">{{ item.remainingTime }}</td>
|
||||
<td class="data-cell--name data-cell--wrap">{{ item.payerName }}</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
@@ -0,0 +1,34 @@
|
||||
{# template-title: 跨服名剑榜 #}
|
||||
{# template-components: data-table #}
|
||||
|
||||
|
||||
<div class="container data-page">
|
||||
<h1>{{ name }}</h1>
|
||||
<div class="data-page__meta">{{ server }} · {{ mode_name }}{% if update_time %} · 更新时间:{{ update_time }}{% endif %}</div>
|
||||
|
||||
<table class="data-table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>排名</th>
|
||||
<th>队伍名称</th>
|
||||
<th>积分</th>
|
||||
<th>胜场</th>
|
||||
<th>败场</th>
|
||||
<th>总场数</th>
|
||||
</tr>
|
||||
</thead>
|
||||
|
||||
<tbody>
|
||||
{% for item in items %}
|
||||
<tr>
|
||||
<td class="data-cell--rank">{{ loop.index }}</td>
|
||||
<td class="data-cell--name data-cell--wrap">{{ item.corpsName }}</td>
|
||||
<td class="data-cell--score">{{ item.corpsLevel }}</td>
|
||||
<td class="data-cell--nowrap data-cell--numeric">{{ item.seasonWinCount }}</td>
|
||||
<td class="data-cell--nowrap data-cell--numeric">{{ item.seasonLoseCount }}</td>
|
||||
<td class="data-cell--nowrap data-cell--numeric">{{ item.seasonTotalCount }}</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
@@ -33,7 +33,10 @@
|
||||
</td>
|
||||
<td class="data-cell--name data-cell--nowrap">{{ item.name }}</td>
|
||||
<td class="data-cell--nowrap">{{ item.level }}</td>
|
||||
<td class="data-cell--nowrap">{{ item.campName }}</td>
|
||||
{% set camp_name = item.campName or '未知' %}
|
||||
<td class="data-cell--camp data-cell--nowrap">
|
||||
<img class="data-camp-icon" src="{{ icons.img.get(camp_name) or icons.img.get('未知') }}" alt="{{ camp_name }}" title="{{ camp_name }}">
|
||||
</td>
|
||||
<td class="data-cell--wrap">{{ item.tongName }}</td>
|
||||
<td class="data-cell--score">{{ item.totalScore }}</td>
|
||||
</tr>
|
||||
|
||||
@@ -38,7 +38,10 @@
|
||||
<td class="data-cell--nowrap">{{ item.roleLevel }}</td>
|
||||
<td class="data-cell--nowrap">{{ item.bodyName }}</td>
|
||||
<td>{{ item.tongName }}</td>
|
||||
<td class="data-cell--nowrap">{{ item.campName }}</td>
|
||||
{% set camp_name = item.campName or '未知' %}
|
||||
<td class="data-cell--camp data-cell--nowrap">
|
||||
<img class="data-camp-icon" src="{{ icons.img.get(camp_name) or icons.img.get('未知') }}" alt="{{ camp_name }}" title="{{ camp_name }}">
|
||||
</td>
|
||||
<td class="data-cell--copy">{{ item.comment }}</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
|
||||
@@ -0,0 +1,43 @@
|
||||
{# template-title: 武林争霸赛 #}
|
||||
{# template-components: data-table #}
|
||||
|
||||
|
||||
<div class="container data-page">
|
||||
<h1>{{ name }}</h1>
|
||||
<div class="data-page__meta">{{ server }} · {{ camp_name }}{% if update_time %} · 更新时间:{{ update_time }}{% endif %}</div>
|
||||
|
||||
<table class="data-table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>排名</th>
|
||||
<th>帮会名称</th>
|
||||
<th>帮主</th>
|
||||
<th>所属服务器</th>
|
||||
<th>阵营</th>
|
||||
<th>胜场</th>
|
||||
<th>败场</th>
|
||||
<th>积分</th>
|
||||
<th>最后比赛时间</th>
|
||||
</tr>
|
||||
</thead>
|
||||
|
||||
<tbody>
|
||||
{% for item in items %}
|
||||
<tr>
|
||||
<td class="data-cell--rank">{{ loop.index }}</td>
|
||||
<td class="data-cell--name data-cell--wrap">{{ item.tongName }}</td>
|
||||
<td class="data-cell--name data-cell--wrap">{{ item.masterName }}</td>
|
||||
<td class="data-cell--nowrap">{{ item.serverName }}</td>
|
||||
{% set camp_name = item.campName or '未知' %}
|
||||
<td class="data-cell--camp data-cell--nowrap">
|
||||
<img class="data-camp-icon" src="{{ icons.img.get(camp_name) or icons.img.get('未知') }}" alt="{{ camp_name }}" title="{{ camp_name }}">
|
||||
</td>
|
||||
<td class="data-cell--nowrap data-cell--numeric">{{ item.winCount }}</td>
|
||||
<td class="data-cell--nowrap data-cell--numeric">{{ item.loseCount }}</td>
|
||||
<td class="data-cell--score">{{ item.totalScore }}</td>
|
||||
<td class="data-cell--time">{{ item.lastMatchTimeText }}</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
@@ -29,7 +29,10 @@
|
||||
<td>{{ m.server }}</td>
|
||||
<td>{{ m.itemName }}</td>
|
||||
<td>{{ m.roleName }}</td>
|
||||
<td>{{ m.campName }}</td>
|
||||
{% set camp_name = m.campName or '未知' %}
|
||||
<td class="data-cell--camp data-cell--nowrap">
|
||||
<img class="data-camp-icon" src="{{ icons.img.get(camp_name) or icons.img.get('未知') }}" alt="{{ camp_name }}" title="{{ camp_name }}">
|
||||
</td>
|
||||
<td>{{ m.itemAmount }}</td>
|
||||
<td>{{ m.time }}</td>
|
||||
</tr>
|
||||
|
||||
@@ -20,13 +20,16 @@
|
||||
<tbody>
|
||||
{% for item in items %}
|
||||
<tr
|
||||
{% if item.camp_name == '恶人谷' %}
|
||||
{% if item.campName == '恶人谷' %}
|
||||
class="camp-eren"
|
||||
{% elif item.camp_name == '浩气盟' %}
|
||||
{% elif item.campName == '浩气盟' %}
|
||||
class="camp-haoqi"
|
||||
{% endif %}
|
||||
>
|
||||
<td class="data-cell--camp data-cell--nowrap data-cell--strong">{{ item.campName }}</td>
|
||||
{% set camp_name = item.campName or '未知' %}
|
||||
<td class="data-cell--camp data-cell--nowrap">
|
||||
<img class="data-camp-icon" src="{{ icons.img.get(camp_name) or icons.img.get('未知') }}" alt="{{ camp_name }}" title="{{ camp_name }}">
|
||||
</td>
|
||||
<td class="data-cell--nowrap data-cell--strong">{{ item.fenxianName }}</td>
|
||||
<td class="data-cell--nowrap data-cell--strong">{{ item.friendName }}</td>
|
||||
<td class="data-cell--name data-cell--copy">{{ item.roleName }}</td>
|
||||
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 6.1 KiB |
@@ -353,6 +353,14 @@
|
||||
background: var(--jx3-surface-muted);
|
||||
}
|
||||
|
||||
.jx3-template .data-camp-icon {
|
||||
display: block;
|
||||
width: 46px;
|
||||
height: 40px;
|
||||
margin: 0 auto;
|
||||
object-fit: contain;
|
||||
}
|
||||
|
||||
.jx3-template .data-table tr.camp-haoqi {
|
||||
color: var(--jx3-blue);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user