Quote:
Originally Posted by .KaiZy
Vibe-code sein vadder. "sicherheitschek" solltest chatgpt vllt auch den text schreiben lassen nächstemal
|
Ok da hab ich nen Schreibfehler gemacht toll das Du ihn entdeckt hast, aber dann korrigier mich doch auch bitte richtig und kill nicht auch noch die Großschreibung.
Was denkst das es einfach paar mit chatgpt erstellte Bilder sind? Hier mal die ersten 200 Zeilen aus dem Mob Editor bzw. NPC Editor, zum Beweis das es nicht nur paar generierte Bilder sind falls duwas damit anfangen kannst, Kurz gesagt ruuft die vorhandenen Mobs und NPC´s vom Server ab, dann kann man Sie Klonen bearbeiten als Questgeber, Laden oder Event NPC oder einfach die Drops bearbeiten und zuteilen anschließend wird gespeichert und die Daten in die Mob, Item und Droplist übernommen:
""
Mob Editor für Metin2 Server Manager
Erstellt Mob-Gruppen, klont NPCs/Mobs und verwaltet Quest/Shop-Zuordnungen
"""
from PyQt6.QtWidgets import (
QWidget, QVBoxLayout, QHBoxLayout, QGridLayout,
QLabel, QLineEdit, QPushButton, QTableWidget, QTableWidgetItem,
QHeaderView, QGroupBox, QSplitter, QComboBox, QSpinBox,
QMessageBox, QListWidget, QListWidgetItem, QFrame,
QDialog, QFormLayout, QDialogButtonBox, QTextEdit,
QDoubleSpinBox, QCheckBox, QTreeWidget, QTreeWidgetItem,
QScrollArea, QTabWidget
)
from PyQt6.QtCore import Qt, pyqtSignal, QSize, QMimeData, QByteArray
from PyQt6.QtGui import QFont, QColor, QIcon, QPixmap, QPainter, QDrag
import json
from ..utils.ssh_manager import SSHManager
from ..utils.database import DatabaseManager
from ..utils.icon_manager import get_icon_manager
class MobPreviewWidget(QFrame):
"""Widget mit Mob-Vorschaubild"""
clicked = pyqtSignal(dict)
def __init__(self, mob_data: dict, parent=None):
super().__init__(parent)
self.mob_data = mob_data
self.icon_manager = get_icon_manager()
self.setFixedSize(120, 140)
self.setCursor(Qt.CursorShape.PointingHandCursor)
self.setStyleSheet("""
MobPreviewWidget {
background-color: #1a1a2e;
border: 2px solid #3d3d5c;
border-radius: 10px;
}
MobPreviewWidget:hover {
border-color: #ffd700;
background-color: #252547;
}
""")
layout = QVBoxLayout(self)
layout.setAlignment(Qt.AlignmentFlag.AlignCenter)
layout.setSpacing(4)
# Icon - jetzt als Pixmap vom IconManager
self.icon_label = QLabel()
self.icon_label.setFixedSize(64, 64)
self.icon_label.setAlignment(Qt.AlignmentFlag.Alig nCenter)
# Lade Icon basierend auf VNUM
vnum = mob_data.get("vnum", 0)
if vnum > 0:
pixmap = self.icon_manager.get_mob_icon(vnum, QSize(60, 60))
self.icon_label.setPixmap(pixmap)
layout.addWidget(self.icon_label, alignment=Qt.AlignmentFlag.AlignCenter)
# Name
name = mob_data.get("name", "Unknown")[:14]
name_label = QLabel(name)
name_label.setStyleSheet("font-weight: bold; color: #ffffff; font-size: 9pt;")
name_label.setAlignment(Qt.AlignmentFlag.AlignCent er)
name_label.setWordWrap(True)
layout.addWidget(name_label)
# VNUM und Level
level = mob_data.get("level", 1)
vnum_text = f"#{vnum}" if vnum > 0 else ""
info_label = QLabel(f"Lv.{level} {vnum_text}")
info_label.setStyleSheet("color: #ffd700; font-size: 8pt;")
info_label.setAlignment(Qt.AlignmentFlag.AlignCent er)
layout.addWidget(info_label)
def mousePressEvent(self, event):
self.clicked.emit(self.mob_data)
super().mousePressEvent(event)
class NPCConfigDialog(QDialog):
"""Dialog zur NPC-Konfiguration (Quest/Shop)"""
# Demo Quests
AVAILABLE_QUESTS = [
{"name": "Anfänger-Quest", "file": "quest_beginner.lua"},
{"name": "Wald-Abenteuer", "file": "quest_forest.lua"},
{"name": "Boss-Jagd", "file": "quest_boss_hunt.lua"},
{"name": "Sammel-Quest", "file": "quest_collect.lua"},
{"name": "Tägliche Quest", "file": "quest_daily.lua"},
]
# Demo Shops
AVAILABLE_SHOPS = [
{"name": "Waffenladen", "file": "shop_weapons.txt"},
{"name": "Rüstungsladen", "file": "shop_armor.txt"},
{"name": "Trankladen", "file": "shop_potions.txt"},
{"name": "Allgemeinwaren", "file": "shop_general.txt"},
{"name": "Schmuck", "file": "shop_accessories.txt"},
]
def __init__(self, npc_data: dict = None, parent=None):
super().__init__(parent)
self.npc_data = npc_data or {}
self.setWindowTitle(" NPC Konfiguration")
self.setMinimumSize(500, 500)
self.setup_ui()
def setup_ui(self):
layout = QVBoxLayout(self)
# NPC Grunddaten
basic_group = QGroupBox(" NPC Grunddaten")
basic_layout = QFormLayout(basic_group)
self.vnum_spin = QSpinBox()
self.vnum_spin.setRange(1, 99999)
self.vnum_spin.setValue(self.npc_data.get("vnum", 20001))
basic_layout.addRow("VNUM:", self.vnum_spin)
self.name_edit = QLineEdit()
self.name_edit.setText(self.npc_data.get("name", "Neuer NPC"))
basic_layout.addRow("Name:", self.name_edit)
layout.addWidget(basic_group)
# NPC Typ
type_group = QGroupBox(" NPC Funktion")
type_layout = QVBoxLayout(type_group)
self.type_combo = QComboBox()
self.type_combo.addItems([
"Kein spezielle Funktion",
"Quest-Geber",
"Händler/Shop",
"Quest-Geber + Händler",
"Teleporter",
"Lagerhaus"
])
self.type_combo.currentIndexChanged.connect(self.o n_type_changed)
type_layout.addWidget(self.type_combo)
layout.addWidget(type_group)
# Quest-Auswahl
self.quest_group = QGroupBox(" Quest-Zuordnung")
quest_layout = QVBoxLayout(self.quest_group)
quest_layout.addWidget(QLabel("Verfügbare Quests:"))
self.quest_list = QListWidget()
self.quest_list.setSelectionMode(QListWidget.Selec tionMode.MultiSelection)
for quest in self.AVAILABLE_QUESTS:
item = QListWidgetItem(f" {quest['name']}")
item.setData(Qt.ItemDataRole.UserRole, quest)
self.quest_list.addItem(item)
quest_layout.addWidget(self.quest_list)
# Eigene Quest hinzufügen
custom_quest_layout = QHBoxLayout()
self.custom_quest_edit = QLineEdit()
self.custom_quest_edit.setPlaceholderText("Eigene Quest-Datei (z.B. quest_custom.lua)")
custom_quest_layout.addWidget(self.custom_quest_ed it)
add_quest_btn = QPushButton("➕")
add_quest_btn.clicked.connect(self.add_custom_ques t)
custom_quest_layout.addWidget(add_quest_btn)
quest_layout.addLayout(custom_quest_layout)
self.quest_group.setVisible(False)
layout.addWidget(self.quest_group)
# Shop-Auswahl
self.shop_group = QGroupBox(" Shop-Zuordnung")
shop_layout = QVBoxLayout(self.shop_group)
shop_layout.addWidget(QLabel("Shop auswählen:"))
self.shop_combo = QComboBox()
self.shop_combo.addItem("-- Kein Shop --")
for shop in self.AVAILABLE_SHOPS:
self.shop_combo.addItem(f" {shop['name']}", shop)
shop_layout.addWidget(self.shop_combo)
# Shop-Vorschau
self.shop_preview = QTextEdit()
self.shop_preview.setReadOnly(True)
self.shop_preview.setMaximumHeight(100)
self.shop_preview.setPlaceholderText("Shop-Inhalt Vorschau...")
shop_layout.addWidget(self.shop_preview)
self.shop_group.setVisible(False)
layout.addWidget(self.shop_group)
# Dialog-Text
dialog_group = QGroupBox(" NPC Dialog")
dialog_layout = QVBoxLayout(dialog_group)
self.dialog_edit = QTextEdit()
self.dialog_edit.setPlaceholderText("Begrüßungstex t des NPCs...\n\nz.B.: Willkommen, Krieger! Wie kann ich dir helfen?")
self.dialog_edit.setMaximumHeight(80)
dialog_layout.addWidget(self.dialog_edit)
layout.addWidget(dialog_group)