Python Library For Metin 2 Online
def __repr__(self): return f"ProtoEntry(vnum=self.vnum, fields=len(self.fields))" class ProtoFile: """Represents a .txt proto file (item_proto, mob_proto, etc.).""" def (self, path: Union[str, Path]): self.path = Path(path) self.entries: Dict[int, ProtoEntry] = {} self._parse()
def get(self, vnum: int) -> Optional[ProtoEntry]: """Get entry by vnum.""" return self.entries.get(vnum)
def get(self, name: str) -> Optional[str]: """Get field value by name.""" for f in self.fields: if f.name == name: return f.value return None python library for metin 2
def get_block(self, state: str) -> Optional[str]: """Get a specific state block.""" return self.blocks.get(f"state state")
def _rebuild_content(self): """Rebuild full script content from blocks.""" self.content = "\n\n".join([f"name\ncontent" for name, content in self.blocks.items()]) def __repr__(self): return f"ProtoEntry(vnum=self
It focuses on , modularity , and extensibility , allowing you to work with game data in Python objects instead of raw text files. 📦 metin2lib – Python Library for Metin 2 """ metin2lib - A Python library for working with Metin 2 game data files. Supports proto files (item, mob, skill, etc.), quest scripts, and more. """ import re from pathlib import Path from typing import List, Dict, Any, Optional, Union
def set(self, name: str, value: Union[str, int]) -> None: """Set field value by name.""" for f in self.fields: if f.name == name: f.value = str(value) return # If field doesn't exist, add it self.fields.append(ProtoField(name, str(value), len(self.fields))) """ import re from pathlib import Path from
def get_item_name(self, vnum: int) -> Optional[str]: """Get localized name from item proto (assumes 'name' field).""" entry = self.proto.get(vnum) return entry.get("name") if entry else None
def list_items_by_type(self, item_type: str) -> List[int]: """List all vnums with a given type.""" result = [] for vnum, entry in self.proto.entries.items(): if entry.get("type") == item_type: result.append(vnum) return result Example usage if name == " main ": # Load item proto item_proto = ProtoFile("item_proto.txt")