Updated DebugTab, loot
This commit is contained in:
parent
c72f984853
commit
54b85f0f1f
@ -31,7 +31,7 @@ class GameDataManager {
|
|||||||
if (Array.isArray(data.rooms)) {
|
if (Array.isArray(data.rooms)) {
|
||||||
data.rooms.forEach((r) => this.rooms.set(r.id, r));
|
data.rooms.forEach((r) => this.rooms.set(r.id, r));
|
||||||
}
|
}
|
||||||
|
console.log(this.hostiles);
|
||||||
if (data.languages) {
|
if (data.languages) {
|
||||||
this.translations = data.languages;
|
this.translations = data.languages;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -88,7 +88,7 @@ const DatapackTab = () => {
|
|||||||
{displayList.map((item) => (
|
{displayList.map((item) => (
|
||||||
<div
|
<div
|
||||||
key={item.id}
|
key={item.id}
|
||||||
className="datapack-card"
|
className={`datapack-card ${activeSection === "hostiles" ? "hostile-card" : ""}`}
|
||||||
onClick={() =>
|
onClick={() =>
|
||||||
setSelectedItem({ ...item, sectionType: activeSection })
|
setSelectedItem({ ...item, sectionType: activeSection })
|
||||||
}
|
}
|
||||||
@ -105,9 +105,37 @@ const DatapackTab = () => {
|
|||||||
</div>
|
</div>
|
||||||
)}
|
)}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div className="card-info">
|
<div className="card-info">
|
||||||
<span className="card-name">{item.displayName}</span>
|
<span className="card-name">{item.displayName}</span>
|
||||||
<span className="card-id">{item.id}</span>
|
<span className="card-id">{item.id}</span>
|
||||||
|
|
||||||
|
{/* Секція луту без картинок, лише текст або іконка коробки */}
|
||||||
|
{activeSection === "hostiles" &&
|
||||||
|
item.loot &&
|
||||||
|
item.loot.length > 0 && (
|
||||||
|
<div className="card-loot-preview">
|
||||||
|
{item.loot.map((lootEntry, idx) => {
|
||||||
|
const lootData = GameDataManager.getItem(lootEntry.id);
|
||||||
|
return (
|
||||||
|
<div
|
||||||
|
key={`${item.id}-loot-${idx}`}
|
||||||
|
className="loot-mini-slot-text"
|
||||||
|
title={`${lootData?.displayName || lootEntry.id} (${(lootEntry.chance * 100).toFixed(0)}%)`}
|
||||||
|
>
|
||||||
|
<i
|
||||||
|
className="fas fa-box-open"
|
||||||
|
style={{ fontSize: "10px", marginRight: "4px" }}
|
||||||
|
></i>
|
||||||
|
<span>
|
||||||
|
{lootData?.displayName ||
|
||||||
|
lootEntry.id.split(":").pop()}
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
})}
|
||||||
|
</div>
|
||||||
|
)}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
))}
|
))}
|
||||||
|
|||||||
@ -91,3 +91,61 @@
|
|||||||
opacity: 1;
|
opacity: 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.loot-list-full {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
gap: 10px;
|
||||||
|
background: rgba(0, 0, 0, 0.2);
|
||||||
|
padding: 12px;
|
||||||
|
border-radius: 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.loot-detail-item {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
gap: 12px;
|
||||||
|
padding: 8px;
|
||||||
|
border-bottom: 1px solid rgba(255, 255, 255, 0.05);
|
||||||
|
}
|
||||||
|
|
||||||
|
.loot-detail-item:last-child {
|
||||||
|
border-bottom: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.loot-item-icon {
|
||||||
|
width: 40px;
|
||||||
|
height: 40px;
|
||||||
|
background: rgba(255, 255, 255, 0.05);
|
||||||
|
border-radius: 6px;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.loot-item-icon img {
|
||||||
|
width: 32px;
|
||||||
|
height: 32px;
|
||||||
|
object-fit: contain;
|
||||||
|
}
|
||||||
|
|
||||||
|
.loot-item-info {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
}
|
||||||
|
|
||||||
|
.loot-item-name {
|
||||||
|
font-weight: 600;
|
||||||
|
color: #fff;
|
||||||
|
font-size: 14px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.loot-item-meta {
|
||||||
|
font-size: 12px;
|
||||||
|
color: #aaa;
|
||||||
|
}
|
||||||
|
|
||||||
|
.fallback-mini {
|
||||||
|
color: #444;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|||||||
@ -22,6 +22,49 @@ const DatapackDetailsModal = ({ data, onClose }) => {
|
|||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const renderLoot = () => {
|
||||||
|
if (!data.loot || data.loot.length === 0) return null;
|
||||||
|
|
||||||
|
return (
|
||||||
|
<div className="details-section">
|
||||||
|
<h4>Loot Table</h4>
|
||||||
|
<div className="loot-list-full">
|
||||||
|
{data.loot.map((entry, idx) => {
|
||||||
|
const itemInfo = GameDataManager.getItem(entry.id);
|
||||||
|
const countDisplay =
|
||||||
|
typeof entry.count === "object"
|
||||||
|
? `${entry.count.min}-${entry.count.max}`
|
||||||
|
: entry.count;
|
||||||
|
|
||||||
|
return (
|
||||||
|
<div key={idx} className="loot-detail-item">
|
||||||
|
<div className="loot-item-icon">
|
||||||
|
{itemInfo?.texture ? (
|
||||||
|
<img
|
||||||
|
src={`${config.serverUrl}/static/${itemInfo.texture}`}
|
||||||
|
alt={itemInfo.displayName}
|
||||||
|
/>
|
||||||
|
) : (
|
||||||
|
<div className="fallback-mini">?</div>
|
||||||
|
)}
|
||||||
|
</div>
|
||||||
|
<div className="loot-item-info">
|
||||||
|
<span className="loot-item-name">
|
||||||
|
{itemInfo?.displayName || entry.id}
|
||||||
|
</span>
|
||||||
|
<span className="loot-item-meta">
|
||||||
|
{Math.round(entry.chance * 100)}% chance • Amount:{" "}
|
||||||
|
{countDisplay}
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
})}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="modal-overlay" onClick={onClose}>
|
<div className="modal-overlay" onClick={onClose}>
|
||||||
<div
|
<div
|
||||||
@ -63,6 +106,8 @@ const DatapackDetailsModal = ({ data, onClose }) => {
|
|||||||
)}
|
)}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
{data.sectionType === "hostiles" && renderLoot()}
|
||||||
|
|
||||||
{data.ingredients && (
|
{data.ingredients && (
|
||||||
<div className="details-section">
|
<div className="details-section">
|
||||||
<h4>Recipe Requirements</h4>
|
<h4>Recipe Requirements</h4>
|
||||||
|
|||||||
@ -6,8 +6,19 @@
|
|||||||
"health": 30,
|
"health": 30,
|
||||||
"defense": 0.0,
|
"defense": 0.0,
|
||||||
"damage": 2,
|
"damage": 2,
|
||||||
"critical,chance": 0.0,
|
"critical.chance": 0.0,
|
||||||
"attack.rate": 1
|
"attack.rate": 1
|
||||||
|
},
|
||||||
|
"loot": [
|
||||||
|
{
|
||||||
|
"id": "original:alloy_steel",
|
||||||
|
"chance": 0.4,
|
||||||
|
"count": {
|
||||||
|
"min": 1,
|
||||||
|
"max": 2
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
],
|
||||||
|
"meta": {}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user