Add mod-transmog and mod-aoe-loot with Paragon-friendly transmog defaults
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -118,6 +118,10 @@ local.properties
|
||||
!/modules/mod-paragon/**
|
||||
!/modules/mod-ale/
|
||||
!/modules/mod-ale/**
|
||||
!/modules/mod-transmog/
|
||||
!/modules/mod-transmog/**
|
||||
!/modules/mod-aoe-loot/
|
||||
!/modules/mod-aoe-loot/**
|
||||
# Team Docker: ALE needs Lua at configure time (see mod-ale docs)
|
||||
!docker-compose.override.yml
|
||||
|
||||
|
||||
@@ -0,0 +1,8 @@
|
||||
[*]
|
||||
charset = utf-8
|
||||
indent_style = space
|
||||
indent_size = 4
|
||||
tab_width = 4
|
||||
insert_final_newline = true
|
||||
trim_trailing_whitespace = true
|
||||
max_line_length = 80
|
||||
@@ -0,0 +1,104 @@
|
||||
## AUTO-DETECT
|
||||
## Handle line endings automatically for files detected as
|
||||
## text and leave all files detected as binary untouched.
|
||||
## This will handle all files NOT defined below.
|
||||
* text eol=lf
|
||||
|
||||
# Text
|
||||
*.conf text
|
||||
*.conf.dist text
|
||||
*.cmake text
|
||||
|
||||
## Scripts
|
||||
*.sh text
|
||||
*.fish text
|
||||
*.lua text
|
||||
|
||||
## SQL
|
||||
*.sql text
|
||||
|
||||
## C++
|
||||
*.c text
|
||||
*.cc text
|
||||
*.cxx text
|
||||
*.cpp text
|
||||
*.c++ text
|
||||
*.hpp text
|
||||
*.h text
|
||||
*.h++ text
|
||||
*.hh text
|
||||
|
||||
## For documentation
|
||||
|
||||
# Documents
|
||||
*.doc diff=astextplain
|
||||
*.DOC diff=astextplain
|
||||
*.docx diff=astextplain
|
||||
*.DOCX diff=astextplain
|
||||
*.dot diff=astextplain
|
||||
*.DOT diff=astextplain
|
||||
*.pdf diff=astextplain
|
||||
*.PDF diff=astextplain
|
||||
*.rtf diff=astextplain
|
||||
*.RTF diff=astextplain
|
||||
|
||||
## DOCUMENTATION
|
||||
*.markdown text
|
||||
*.md text
|
||||
*.mdwn text
|
||||
*.mdown text
|
||||
*.mkd text
|
||||
*.mkdn text
|
||||
*.mdtxt text
|
||||
*.mdtext text
|
||||
*.txt text
|
||||
AUTHORS text
|
||||
CHANGELOG text
|
||||
CHANGES text
|
||||
CONTRIBUTING text
|
||||
COPYING text
|
||||
copyright text
|
||||
COPYRIGHT text
|
||||
INSTALL text
|
||||
license text
|
||||
LICENSE text
|
||||
NEWS text
|
||||
readme text
|
||||
README text
|
||||
TODO text
|
||||
|
||||
## GRAPHICS
|
||||
*.ai binary
|
||||
*.bmp binary
|
||||
*.eps binary
|
||||
*.gif binary
|
||||
*.ico binary
|
||||
*.jng binary
|
||||
*.jp2 binary
|
||||
*.jpg binary
|
||||
*.jpeg binary
|
||||
*.jpx binary
|
||||
*.jxr binary
|
||||
*.pdf binary
|
||||
*.png binary
|
||||
*.psb binary
|
||||
*.psd binary
|
||||
*.svg text
|
||||
*.svgz binary
|
||||
*.tif binary
|
||||
*.tiff binary
|
||||
*.wbmp binary
|
||||
*.webp binary
|
||||
|
||||
|
||||
## ARCHIVES
|
||||
*.7z binary
|
||||
*.gz binary
|
||||
*.jar binary
|
||||
*.rar binary
|
||||
*.tar binary
|
||||
*.zip binary
|
||||
|
||||
## EXECUTABLES
|
||||
*.exe binary
|
||||
*.pyc binary
|
||||
@@ -0,0 +1,72 @@
|
||||
name: Bug report
|
||||
description: Create a bug report to help us improve.
|
||||
title: "Bug: "
|
||||
body:
|
||||
- type: textarea
|
||||
id: current
|
||||
attributes:
|
||||
label: Current Behaviour
|
||||
description: |
|
||||
Description of the problem or issue here.
|
||||
Include entries of affected creatures / items / quests / spells etc.
|
||||
If this is a crash, post the crashlog (upload to https://gist.github.com/) and include the link here.
|
||||
Never upload files! Use GIST for text and YouTube for videos!
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
id: expected
|
||||
attributes:
|
||||
label: Expected Behaviour
|
||||
description: |
|
||||
Tell us what should happen instead.
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
id: reproduce
|
||||
attributes:
|
||||
label: Steps to reproduce the problem
|
||||
description: |
|
||||
What does someone else need to do to encounter the same bug?
|
||||
placeholder: |
|
||||
1. Step 1
|
||||
2. Step 2
|
||||
3. Step 3
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
id: extra
|
||||
attributes:
|
||||
label: Extra Notes
|
||||
description: |
|
||||
Do you have any extra notes that can help solve the issue that does not fit any other field?
|
||||
placeholder: |
|
||||
None
|
||||
validations:
|
||||
required: false
|
||||
- type: textarea
|
||||
id: commit
|
||||
attributes:
|
||||
label: AC rev. hash/commit
|
||||
description: |
|
||||
Copy the result of the `.server debug` command (if you need to run it from the client get a prat addon)
|
||||
validations:
|
||||
required: true
|
||||
- type: input
|
||||
id: os
|
||||
attributes:
|
||||
label: Operating system
|
||||
description: |
|
||||
The Operating System the Server is running on.
|
||||
i.e. Windows 11 x64, Debian 10 x64, macOS 12, Ubuntu 20.04
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
id: custom
|
||||
attributes:
|
||||
label: Custom changes or Modules
|
||||
description: |
|
||||
List which custom changes or modules you have applied, i.e. Eluna module, etc.
|
||||
placeholder: |
|
||||
None
|
||||
validations:
|
||||
required: false
|
||||
@@ -0,0 +1,33 @@
|
||||
name: Feature request
|
||||
description: Suggest an idea for this project
|
||||
title: "Feature: "
|
||||
body:
|
||||
- type: markdown
|
||||
attributes:
|
||||
value: |
|
||||
Thank you for taking your time to fill out a feature request. Remember to fill out all fields including the title above.
|
||||
An issue that is not properly filled out will be closed.
|
||||
- type: textarea
|
||||
id: description
|
||||
attributes:
|
||||
label: Describe your feature request or suggestion in detail
|
||||
description: |
|
||||
A clear and concise description of what you want to happen.
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
id: solution
|
||||
attributes:
|
||||
label: Describe a possible solution to your feature or suggestion in detail
|
||||
description: |
|
||||
A clear and concise description of any alternative solutions or features you've considered.
|
||||
validations:
|
||||
required: false
|
||||
- type: textarea
|
||||
id: additional
|
||||
attributes:
|
||||
label: Additional context
|
||||
description: |
|
||||
Add any other context or screenshots about the feature request here.
|
||||
validations:
|
||||
required: false
|
||||
+294
@@ -0,0 +1,294 @@
|
||||
#  AzerothCore
|
||||
|
||||
# mod-aoe-loot
|
||||
|
||||
[English](README.md) | [Español](README_ES.md)
|
||||
|
||||
[](https://github.com/azerothcore/mod-aoe-loot/actions)
|
||||
|
||||
## Description
|
||||
|
||||
This module enables Area of Effect (AOE) looting functionality for AzerothCore, allowing players to loot multiple nearby corpses by interacting with just one of them. All items and gold from corpses within the configured range are automatically collected into a single loot window.
|
||||
|
||||
## Features
|
||||
|
||||
- **AOE Looting**: Automatically collect loot from multiple nearby corpses with a single interaction
|
||||
- **Player Toggle Commands**: Individual players can enable/disable AOE loot using `.aoeloot on/off` commands
|
||||
- **Multi-language Support**: Full internationalization support with English and Spanish translations (easily extensible to other languages)
|
||||
- **Configurable Range**: Server administrators can set the maximum distance for AOE loot collection
|
||||
- **Group Support**: Optional group looting with configurable settings
|
||||
- **Performance Optimized**: Limits number of corpses processed to maintain server stability
|
||||
- **Smart Item Management**:
|
||||
- Automatic gold accumulation with overflow protection
|
||||
- Quest items sent directly to inventory
|
||||
- Maximum 15 items per loot window to prevent UI issues
|
||||
- **Corpse Management**: Automatically cleans up looted corpses to reduce clutter
|
||||
|
||||
## Recent Updates
|
||||
|
||||
### v2.0 - Player Control & Internationalization
|
||||
- ✅ Added `.aoeloot on/off` player commands for individual control
|
||||
- ✅ Implemented multi-language support via `acore_string` system
|
||||
- ✅ Fixed enum ID alignment issues
|
||||
- ✅ Complete English and Spanish translations
|
||||
- ✅ Improved code documentation and structure
|
||||
|
||||
### v1.x - Core Functionality
|
||||
- Initial AOE loot implementation
|
||||
- Configuration system
|
||||
- Range and group settings
|
||||
|
||||
## Requirements
|
||||
|
||||
- AzerothCore v3.0.0+ (latest master branch recommended)
|
||||
- MySQL 8.0+
|
||||
- Compiler with C++17 support
|
||||
|
||||
## Installation
|
||||
|
||||
### 1. Clone the Module
|
||||
|
||||
Navigate to your AzerothCore modules directory:
|
||||
|
||||
```bash
|
||||
cd <ACoreDir>/modules
|
||||
git clone https://github.com/azerothcore/mod-aoe-loot.git
|
||||
```
|
||||
|
||||
### 2. Compile
|
||||
|
||||
Re-compile AzerothCore:
|
||||
|
||||
```bash
|
||||
cd <ACoreDir>/build
|
||||
cmake ../ -DCMAKE_INSTALL_PREFIX=/path/to/server -DCMAKE_C_COMPILER=/usr/bin/clang -DCMAKE_CXX_COMPILER=/usr/bin/clang++
|
||||
make -j $(nproc)
|
||||
make install
|
||||
```
|
||||
|
||||
### 3. Configure
|
||||
|
||||
Edit your `worldserver.conf` file (or create `AOELoot.conf` in configs folder):
|
||||
|
||||
```conf
|
||||
###################################################################################################
|
||||
# AOE LOOT MODULE CONFIGURATION
|
||||
###################################################################################################
|
||||
|
||||
#
|
||||
# AOELoot.Enable
|
||||
# Description: Enable or disable the AOE Loot module globally
|
||||
# Default: 1 (enabled)
|
||||
# 0 (disabled)
|
||||
|
||||
AOELoot.Enable = 1
|
||||
|
||||
#
|
||||
# AOELoot.Range
|
||||
# Description: Maximum distance (in yards) to collect loot from nearby corpses
|
||||
# Default: 55.0
|
||||
# Range: 5.0 - 100.0
|
||||
|
||||
AOELoot.Range = 55.0
|
||||
|
||||
#
|
||||
# AOELoot.Group
|
||||
# Description: Allow AOE looting when player is in a group
|
||||
# Default: 1 (allowed)
|
||||
# 0 (not allowed)
|
||||
|
||||
AOELoot.Group = 1
|
||||
|
||||
#
|
||||
# AOELoot.Message
|
||||
# Description: Show informational message on player login
|
||||
# Default: 1 (show message)
|
||||
# 0 (no message)
|
||||
|
||||
AOELoot.Message = 1
|
||||
|
||||
###################################################################################################
|
||||
```
|
||||
|
||||
### 4. Corpse Decay Configuration (IMPORTANT)
|
||||
|
||||
For optimal experience, modify the corpse decay settings in `worldserver.conf`:
|
||||
|
||||
```conf
|
||||
#
|
||||
# Rate.Corpse.Decay.Looted
|
||||
# Description: Multiplier for Corpse.Decay.* to configure how long creature corpses stay
|
||||
# after they have been looted.
|
||||
# Default: 0.5
|
||||
# Recommended: 0.01 (for AOE Loot module)
|
||||
|
||||
Rate.Corpse.Decay.Looted = 0.01
|
||||
```
|
||||
|
||||
**Why this is important:** The default decay rate (0.5) can cause corpses to linger after being looted via AOE, creating visual clutter. Setting this to 0.01 ensures corpses disappear quickly after looting.
|
||||
|
||||
### 5. Restart Server
|
||||
|
||||
Restart your worldserver to load the module:
|
||||
|
||||
```bash
|
||||
./worldserver
|
||||
```
|
||||
|
||||
## Usage
|
||||
|
||||
### For Players
|
||||
|
||||
#### Commands
|
||||
- `.aoeloot on` - Enable AOE looting for your character
|
||||
- `.aoeloot off` - Disable AOE looting for your character
|
||||
|
||||
#### How to Use
|
||||
1. Kill multiple enemies in close proximity
|
||||
2. Right-click on any corpse to loot
|
||||
3. All items from nearby corpses will appear in a single loot window
|
||||
4. Quest items are automatically added to your inventory
|
||||
|
||||
**Note:** Player preferences reset on logout. AOE loot is enabled by default if the module is active.
|
||||
|
||||
### For Administrators
|
||||
|
||||
The module can be controlled through configuration file settings (see Configuration section above).
|
||||
|
||||
## Configuration Options
|
||||
|
||||
| Option | Type | Default | Description |
|
||||
|--------|------|---------|-------------|
|
||||
| `AOELoot.Enable` | Boolean | 1 | Enable/disable module globally |
|
||||
| `AOELoot.Range` | Float | 55.0 | Maximum loot collection radius (5.0 - 100.0) |
|
||||
| `AOELoot.Group` | Boolean | 1 | Allow AOE loot in groups |
|
||||
| `AOELoot.Message` | Boolean | 1 | Show login message |
|
||||
|
||||
## Multi-language Support
|
||||
|
||||
The module includes full multi-language support through AzerothCore's `acore_string` system.
|
||||
|
||||
### Currently Supported Languages
|
||||
- 🇬🇧 English (en_US)
|
||||
- 🇪🇸 Spanish (es_ES / es_MX)
|
||||
|
||||
### Adding More Languages
|
||||
|
||||
To add additional language support, update the SQL file:
|
||||
|
||||
```sql
|
||||
UPDATE `acore_string` SET
|
||||
`locale_frFR` = 'Votre traduction ici',
|
||||
`locale_deDE` = 'Ihre Übersetzung hier',
|
||||
`locale_ruRU` = 'Ваш перевод здесь'
|
||||
WHERE `entry` BETWEEN 50000 AND 50007;
|
||||
```
|
||||
|
||||
Supported locale columns:
|
||||
- `locale_koKR` (Korean)
|
||||
- `locale_frFR` (French)
|
||||
- `locale_deDE` (German)
|
||||
- `locale_zhCN` (Chinese Simplified)
|
||||
- `locale_zhTW` (Chinese Traditional)
|
||||
- `locale_ruRU` (Russian)
|
||||
|
||||
## Technical Details
|
||||
|
||||
### Database Entries
|
||||
|
||||
The module uses `acore_string` entries 50000-50007:
|
||||
|
||||
| Entry | Constant | Purpose |
|
||||
|-------|----------|---------|
|
||||
| 50000 | AOE_ACORE_STRING_MESSAGE | Login message |
|
||||
| 50001 | AOE_ITEM_IN_THE_MAIL | Mail notification (reserved) |
|
||||
| 50002-50003 | - | Reserved for future use |
|
||||
| 50004 | AOE_LOOT_ALREADY_ENABLED | "Already enabled" message |
|
||||
| 50005 | AOE_LOOT_ENABLED | "Enabled" confirmation |
|
||||
| 50006 | AOE_LOOT_ALREADY_DISABLED | "Already disabled" message |
|
||||
| 50007 | AOE_LOOT_DISABLED | "Disabled" confirmation |
|
||||
|
||||
### Performance Considerations
|
||||
|
||||
- Maximum 10 corpses processed per loot operation (hardcoded for stability)
|
||||
- Maximum 15 items per loot window
|
||||
- Gold overflow protection (prevents exceeding uint32 max value)
|
||||
- Efficient corpse filtering and cleanup
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
### Issue: AOE loot not working
|
||||
|
||||
**Solutions:**
|
||||
- Verify module is enabled: `AOELoot.Enable = 1`
|
||||
- Check if you disabled it personally: use `.aoeloot on`
|
||||
- Ensure you're within range (default 55 yards)
|
||||
- If in group, check `AOELoot.Group` setting
|
||||
|
||||
### Issue: Corpses not disappearing
|
||||
|
||||
**Solution:**
|
||||
- Set `Rate.Corpse.Decay.Looted = 0.01` in worldserver.conf
|
||||
|
||||
### Issue: Messages in wrong language
|
||||
|
||||
**Solution:**
|
||||
- Verify SQL was imported correctly
|
||||
- Check client locale settings
|
||||
- Confirm `acore_string` table has translations for your locale
|
||||
|
||||
### Issue: "Already enabled/disabled" messages appearing incorrectly
|
||||
|
||||
**Solution:**
|
||||
- This is expected behavior - preferences reset on logout
|
||||
- On first login, AOE loot is enabled by default
|
||||
|
||||
## Known Limitations
|
||||
|
||||
- Player preferences do not persist across logout/login sessions
|
||||
- Maximum 10 corpses processed at once (performance limit)
|
||||
- Quest items sent to inventory may fill bags quickly
|
||||
- Range limited to 100 yards maximum
|
||||
|
||||
## Future Enhancements
|
||||
|
||||
Potential features for future versions:
|
||||
- [ ] Database persistence for player preferences
|
||||
- [ ] Configurable max corpses limit
|
||||
- [ ] Quest item mail option (instead of direct inventory)
|
||||
- [ ] Visual range indicator
|
||||
- [ ] Per-character settings UI
|
||||
- [ ] Statistics tracking (total items/gold looted)
|
||||
|
||||
## Credits
|
||||
|
||||
- **acidmanifesto** - [Original author and concept](https://github.com/azerothcore/mod-aoe-loot/pull/2)
|
||||
- **AzerothCore Community** - Hooks, updates, and improvements
|
||||
- **Contributors** - Player commands, multi-language support, and bug fixes
|
||||
|
||||
## Links
|
||||
|
||||
- **AzerothCore:** [Repository](https://github.com/azerothcore) | [Website](https://azerothcore.org/) | [Discord](https://discord.gg/PaqQRkd)
|
||||
- **Module Repository:** [GitHub](https://github.com/azerothcore/mod-aoe-loot)
|
||||
- **Issues & Suggestions:** [Issue Tracker](https://github.com/azerothcore/mod-aoe-loot/issues)
|
||||
|
||||
## License
|
||||
|
||||
This module is released under the [GNU AGPL v3 License](https://github.com/azerothcore/mod-aoe-loot/blob/master/LICENSE).
|
||||
|
||||
---
|
||||
|
||||
### Support
|
||||
|
||||
If you encounter any issues or have suggestions:
|
||||
1. Check the [Troubleshooting](#troubleshooting) section
|
||||
2. Search [existing issues](https://github.com/azerothcore/mod-aoe-loot/issues)
|
||||
3. Join the [AzerothCore Discord](https://discord.gg/PaqQRkd)
|
||||
4. Create a [new issue](https://github.com/azerothcore/mod-aoe-loot/issues/new) with detailed information
|
||||
|
||||
**Please include:**
|
||||
- AzerothCore commit hash
|
||||
- Operating system and version
|
||||
- Complete error messages (if any)
|
||||
- Configuration settings
|
||||
- Steps to reproduce the issue
|
||||
+293
@@ -0,0 +1,293 @@
|
||||
#  AzerothCore
|
||||
|
||||
# mod-aoe-loot
|
||||
|
||||
[English](README.md) | [Español](README_ES.md)
|
||||
|
||||
[](https://github.com/azerothcore/mod-aoe-loot/actions)
|
||||
|
||||
## Descripción
|
||||
|
||||
Este módulo habilita la funcionalidad de saqueo en área (AOE) para AzerothCore, permitiendo a los jugadores saquear múltiples cadáveres cercanos interactuando con solo uno de ellos. Todos los objetos y oro de los cadáveres dentro del rango configurado se recopilan automáticamente en una sola ventana de botín.
|
||||
|
||||
## Características
|
||||
|
||||
- **Saqueo AOE**: Recolecta automáticamente el botín de múltiples cadáveres cercanos con una sola interacción
|
||||
- **Comandos de Activación Individual**: Los jugadores pueden activar/desactivar el saqueo AOE usando los comandos `.aoeloot on/off`
|
||||
- **Soporte Multi-idioma**: Internacionalización completa con traducciones en inglés y español (fácilmente extensible a otros idiomas)
|
||||
- **Rango Configurable**: Los administradores del servidor pueden establecer la distancia máxima para la recolección de botín AOE
|
||||
- **Soporte de Grupo**: Saqueo en grupo opcional con configuración personalizable
|
||||
- **Optimizado para Rendimiento**: Limita el número de cadáveres procesados para mantener la estabilidad del servidor
|
||||
- **Gestión Inteligente de Objetos**:
|
||||
- Acumulación automática de oro con protección contra desbordamiento
|
||||
- Objetos de misión enviados directamente al inventario
|
||||
- Máximo de 15 objetos por ventana de botín para evitar problemas de interfaz
|
||||
- **Gestión de Cadáveres**: Limpia automáticamente los cadáveres saqueados para reducir el desorden visual
|
||||
|
||||
## Actualizaciones Recientes
|
||||
|
||||
### v2.0 - Control del Jugador e Internacionalización
|
||||
- ✅ Agregados comandos `.aoeloot on/off` para control individual del jugador
|
||||
- ✅ Implementado soporte multi-idioma mediante el sistema `acore_string`
|
||||
- ✅ Corregidos problemas de alineación de IDs en enums
|
||||
- ✅ Traducciones completas en inglés y español
|
||||
- ✅ Mejorada la documentación y estructura del código
|
||||
|
||||
### v1.x - Funcionalidad Principal
|
||||
- Implementación inicial del saqueo AOE
|
||||
- Sistema de configuración
|
||||
- Ajustes de rango y grupo
|
||||
|
||||
## Requisitos
|
||||
|
||||
- AzerothCore v3.0.0+ (se recomienda la última rama master)
|
||||
- MySQL 8.0+
|
||||
- Compilador con soporte para C++17
|
||||
|
||||
## Instalación
|
||||
|
||||
### 1. Clonar el Módulo
|
||||
|
||||
Navega al directorio de módulos de AzerothCore:
|
||||
|
||||
```bash
|
||||
cd <DirectorioACore>/modules
|
||||
git clone https://github.com/azerothcore/mod-aoe-loot.git
|
||||
```
|
||||
|
||||
### 2. Compilar
|
||||
|
||||
Recompila AzerothCore:
|
||||
|
||||
```bash
|
||||
cd <DirectorioACore>/build
|
||||
cmake ../ -DCMAKE_INSTALL_PREFIX=/ruta/al/servidor -DCMAKE_C_COMPILER=/usr/bin/clang -DCMAKE_CXX_COMPILER=/usr/bin/clang++
|
||||
make -j $(nproc)
|
||||
make install
|
||||
```
|
||||
|
||||
### 3. Configurar
|
||||
|
||||
Edita tu archivo `worldserver.conf` (o crea `AOELoot.conf` en la carpeta de configuraciones):
|
||||
|
||||
```conf
|
||||
###################################################################################################
|
||||
# CONFIGURACIÓN DEL MÓDULO AOE LOOT
|
||||
###################################################################################################
|
||||
|
||||
#
|
||||
# AOELoot.Enable
|
||||
# Descripción: Habilita o deshabilita el módulo AOE Loot globalmente
|
||||
# Por defecto: 1 (habilitado)
|
||||
# 0 (deshabilitado)
|
||||
|
||||
AOELoot.Enable = 1
|
||||
|
||||
#
|
||||
# AOELoot.Range
|
||||
# Descripción: Distancia máxima (en yardas) para recolectar botín de cadáveres cercanos
|
||||
# Por defecto: 55.0
|
||||
# Rango: 5.0 - 100.0
|
||||
|
||||
AOELoot.Range = 55.0
|
||||
|
||||
#
|
||||
# AOELoot.Group
|
||||
# Descripción: Permitir saqueo AOE cuando el jugador está en un grupo
|
||||
# Por defecto: 1 (permitido)
|
||||
# 0 (no permitido)
|
||||
|
||||
AOELoot.Group = 1
|
||||
|
||||
#
|
||||
# AOELoot.Message
|
||||
# Descripción: Mostrar mensaje informativo al iniciar sesión
|
||||
# Por defecto: 1 (mostrar mensaje)
|
||||
# 0 (sin mensaje)
|
||||
|
||||
AOELoot.Message = 1
|
||||
|
||||
###################################################################################################
|
||||
```
|
||||
|
||||
### 4. Configuración de Degradación de Cadáveres (IMPORTANTE)
|
||||
|
||||
Para una experiencia óptima, modifica la configuración de degradación de cadáveres en `worldserver.conf`:
|
||||
|
||||
```conf
|
||||
#
|
||||
# Rate.Corpse.Decay.Looted
|
||||
# Descripción: Multiplicador para Corpse.Decay.* que configura cuánto tiempo permanecen
|
||||
# los cadáveres de las criaturas después de ser saqueados.
|
||||
# Por defecto: 0.5
|
||||
# Recomendado: 0.01 (para el módulo AOE Loot)
|
||||
|
||||
Rate.Corpse.Decay.Looted = 0.01
|
||||
```
|
||||
|
||||
**Por qué es importante:** La tasa de degradación predeterminada (0.5) puede hacer que los cadáveres permanezcan después de ser saqueados mediante AOE, creando desorden visual. Establecer esto en 0.01 asegura que los cadáveres desaparezcan rápidamente después del saqueo.
|
||||
|
||||
### 5. Reiniciar el Servidor
|
||||
|
||||
Reinicia tu worldserver para cargar el módulo:
|
||||
|
||||
```bash
|
||||
./worldserver
|
||||
```
|
||||
|
||||
## Uso
|
||||
|
||||
### Para Jugadores
|
||||
|
||||
#### Comandos
|
||||
- `.aoeloot on` - Activar el saqueo AOE para tu personaje
|
||||
- `.aoeloot off` - Desactivar el saqueo AOE para tu personaje
|
||||
|
||||
#### Cómo Usar
|
||||
1. Mata múltiples enemigos en proximidad cercana
|
||||
2. Haz clic derecho en cualquier cadáver para saquear
|
||||
3. Todos los objetos de los cadáveres cercanos aparecerán en una sola ventana de botín
|
||||
4. Los objetos de misión se agregan automáticamente a tu inventario
|
||||
|
||||
**Nota:** Las preferencias del jugador se restablecen al cerrar sesión. El saqueo AOE está habilitado por defecto si el módulo está activo.
|
||||
|
||||
### Para Administradores
|
||||
|
||||
El módulo puede controlarse a través de la configuración del archivo (ver sección de Configuración arriba).
|
||||
|
||||
## Opciones de Configuración
|
||||
|
||||
| Opción | Tipo | Por Defecto | Descripción |
|
||||
|--------|------|-------------|-------------|
|
||||
| `AOELoot.Enable` | Booleano | 1 | Habilitar/deshabilitar módulo globalmente |
|
||||
| `AOELoot.Range` | Decimal | 55.0 | Radio máximo de recolección de botín (5.0 - 100.0) |
|
||||
| `AOELoot.Group` | Booleano | 1 | Permitir saqueo AOE en grupos |
|
||||
| `AOELoot.Message` | Booleano | 1 | Mostrar mensaje de inicio de sesión |
|
||||
|
||||
## Soporte Multi-idioma
|
||||
|
||||
El módulo incluye soporte completo multi-idioma a través del sistema `acore_string` de AzerothCore.
|
||||
|
||||
### Idiomas Actualmente Soportados
|
||||
- 🇬🇧 Inglés (en_US)
|
||||
- 🇪🇸 Español (es_ES / es_MX)
|
||||
|
||||
### Agregar Más Idiomas
|
||||
|
||||
Para agregar soporte de idiomas adicionales, actualiza el archivo SQL:
|
||||
|
||||
```sql
|
||||
UPDATE `acore_string` SET
|
||||
`locale_frFR` = 'Votre traduction ici',
|
||||
`locale_deDE` = 'Ihre Übersetzung hier',
|
||||
`locale_ruRU` = 'Ваш перевод здесь'
|
||||
WHERE `entry` BETWEEN 50000 AND 50007;
|
||||
```
|
||||
|
||||
Columnas de localización soportadas:
|
||||
- `locale_koKR` (Coreano)
|
||||
- `locale_frFR` (Francés)
|
||||
- `locale_deDE` (Alemán)
|
||||
- `locale_zhCN` (Chino Simplificado)
|
||||
- `locale_zhTW` (Chino Tradicional)
|
||||
- `locale_ruRU` (Ruso)
|
||||
|
||||
## Detalles Técnicos
|
||||
|
||||
### Entradas de Base de Datos
|
||||
|
||||
El módulo utiliza las entradas `acore_string` 50000-50007:
|
||||
|
||||
| Entrada | Constante | Propósito |
|
||||
|---------|-----------|-----------|
|
||||
| 50000 | AOE_ACORE_STRING_MESSAGE | Mensaje de inicio de sesión |
|
||||
| 50001 | AOE_ITEM_IN_THE_MAIL | Notificación de correo (reservado) |
|
||||
| 50002-50003 | - | Reservado para uso futuro |
|
||||
| 50004 | AOE_LOOT_ALREADY_ENABLED | Mensaje "Ya activado" |
|
||||
| 50005 | AOE_LOOT_ENABLED | Confirmación "Activado" |
|
||||
| 50006 | AOE_LOOT_ALREADY_DISABLED | Mensaje "Ya desactivado" |
|
||||
| 50007 | AOE_LOOT_DISABLED | Confirmación "Desactivado" |
|
||||
|
||||
### Consideraciones de Rendimiento
|
||||
|
||||
- Máximo 10 cadáveres procesados por operación de saqueo (fijo para estabilidad)
|
||||
- Máximo 15 objetos por ventana de botín
|
||||
- Protección contra desbordamiento de oro (previene exceder el valor máximo uint32)
|
||||
- Filtrado y limpieza eficiente de cadáveres
|
||||
|
||||
## Solución de Problemas
|
||||
|
||||
### Problema: El saqueo AOE no funciona
|
||||
|
||||
**Soluciones:**
|
||||
- Verifica que el módulo esté habilitado: `AOELoot.Enable = 1`
|
||||
- Comprueba si lo desactivaste personalmente: usa `.aoeloot on`
|
||||
- Asegúrate de estar dentro del rango (55 yardas por defecto)
|
||||
- Si estás en grupo, verifica la configuración `AOELoot.Group`
|
||||
|
||||
### Problema: Los cadáveres no desaparecen
|
||||
**Solución:**
|
||||
- Establece `Rate.Corpse.Decay.Looted = 0.01` en worldserver.conf
|
||||
|
||||
### Problema: Mensajes en idioma incorrecto
|
||||
|
||||
**Solución:**
|
||||
- Verifica que el SQL se importó correctamente
|
||||
- Comprueba la configuración de localización del cliente
|
||||
- Confirma que la tabla `acore_string` tiene traducciones para tu localización
|
||||
|
||||
### Problema: Mensajes "Ya activado/desactivado" aparecen incorrectamente
|
||||
|
||||
**Solución:**
|
||||
- Este es el comportamiento esperado - las preferencias se restablecen al cerrar sesión
|
||||
- En el primer inicio de sesión, el saqueo AOE está habilitado por defecto
|
||||
|
||||
## Limitaciones Conocidas
|
||||
|
||||
- Las preferencias del jugador no persisten entre sesiones de inicio/cierre de sesión
|
||||
- Máximo 10 cadáveres procesados a la vez (límite de rendimiento)
|
||||
- Los objetos de misión enviados al inventario pueden llenar las bolsas rápidamente
|
||||
- Rango limitado a un máximo de 100 yardas
|
||||
|
||||
## Mejoras Futuras
|
||||
|
||||
Características potenciales para versiones futuras:
|
||||
- [ ] Persistencia en base de datos para preferencias del jugador
|
||||
- [ ] Límite configurable de cadáveres máximos
|
||||
- [ ] Opción de envío de objetos de misión por correo (en lugar de inventario directo)
|
||||
- [ ] Indicador visual de rango
|
||||
- [ ] Interfaz de configuración por personaje
|
||||
- [ ] Seguimiento de estadísticas (objetos/oro total saqueado)
|
||||
|
||||
## Créditos
|
||||
|
||||
- **acidmanifesto** - [Autor original y concepto](https://github.com/azerothcore/mod-aoe-loot/pull/2)
|
||||
- **Comunidad AzerothCore** - Hooks, actualizaciones y mejoras
|
||||
- **Colaboradores** - Comandos de jugador, soporte multi-idioma y correcciones de errores
|
||||
|
||||
## Enlaces
|
||||
|
||||
- **AzerothCore:** [Repositorio](https://github.com/azerothcore) | [Sitio Web](https://azerothcore.org/) | [Discord](https://discord.gg/PaqQRkd)
|
||||
- **Repositorio del Módulo:** [GitHub](https://github.com/azerothcore/mod-aoe-loot)
|
||||
- **Problemas y Sugerencias:** [Rastreador de Problemas](https://github.com/azerothcore/mod-aoe-loot/issues)
|
||||
|
||||
## Licencia
|
||||
|
||||
Este módulo se publica bajo la [Licencia GNU AGPL v3](https://github.com/azerothcore/mod-aoe-loot/blob/master/LICENSE).
|
||||
|
||||
---
|
||||
|
||||
### Soporte
|
||||
|
||||
Si encuentras algún problema o tienes sugerencias:
|
||||
1. Consulta la sección [Solución de Problemas](#solución-de-problemas)
|
||||
2. Busca en [problemas existentes](https://github.com/azerothcore/mod-aoe-loot/issues)
|
||||
3. Únete al [Discord de AzerothCore](https://discord.gg/PaqQRkd)
|
||||
4. Crea un [nuevo problema](https://github.com/azerothcore/mod-aoe-loot/issues/new) con información detallada
|
||||
|
||||
**Por favor incluye:**
|
||||
- Hash del commit de AzerothCore
|
||||
- Sistema operativo y versión
|
||||
- Mensajes de error completos (si los hay)
|
||||
- Configuraciones utilizadas
|
||||
- Pasos para reproducir el problema
|
||||
@@ -0,0 +1,12 @@
|
||||
name: core-build
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- 'master'
|
||||
pull_request:
|
||||
|
||||
jobs:
|
||||
build:
|
||||
uses: azerothcore/reusable-workflows/.github/workflows/core_build_modules.yml@main
|
||||
with:
|
||||
module_repo: ${{ github.event.repository.name }}
|
||||
@@ -0,0 +1,47 @@
|
||||
!.gitignore
|
||||
|
||||
#
|
||||
#Generic
|
||||
#
|
||||
.directory
|
||||
.mailmap
|
||||
* .orig
|
||||
* .rej
|
||||
* .*~
|
||||
.hg /
|
||||
*.kdev *
|
||||
.DS_Store
|
||||
CMakeLists.txt.user
|
||||
* .bak
|
||||
* .patch
|
||||
* .diff
|
||||
* .REMOTE.*
|
||||
* .BACKUP.*
|
||||
* .BASE.*
|
||||
* .LOCAL.*
|
||||
|
||||
#
|
||||
# IDE & other softwares
|
||||
#
|
||||
/ .settings/
|
||||
/.externalToolBuilders/*
|
||||
# exclude in all levels
|
||||
nbproject/
|
||||
.sync.ffs_db
|
||||
*.kate-swp
|
||||
|
||||
#
|
||||
# Eclipse
|
||||
#
|
||||
*.pydevproject
|
||||
.metadata
|
||||
.gradle
|
||||
tmp/
|
||||
*.tmp
|
||||
*.swp
|
||||
*~.nib
|
||||
local.properties
|
||||
.settings/
|
||||
.loadpath
|
||||
.project
|
||||
.cproject
|
||||
@@ -0,0 +1,661 @@
|
||||
GNU AFFERO GENERAL PUBLIC LICENSE
|
||||
Version 3, 19 November 2007
|
||||
|
||||
Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
|
||||
Everyone is permitted to copy and distribute verbatim copies
|
||||
of this license document, but changing it is not allowed.
|
||||
|
||||
Preamble
|
||||
|
||||
The GNU Affero General Public License is a free, copyleft license for
|
||||
software and other kinds of works, specifically designed to ensure
|
||||
cooperation with the community in the case of network server software.
|
||||
|
||||
The licenses for most software and other practical works are designed
|
||||
to take away your freedom to share and change the works. By contrast,
|
||||
our General Public Licenses are intended to guarantee your freedom to
|
||||
share and change all versions of a program--to make sure it remains free
|
||||
software for all its users.
|
||||
|
||||
When we speak of free software, we are referring to freedom, not
|
||||
price. Our General Public Licenses are designed to make sure that you
|
||||
have the freedom to distribute copies of free software (and charge for
|
||||
them if you wish), that you receive source code or can get it if you
|
||||
want it, that you can change the software or use pieces of it in new
|
||||
free programs, and that you know you can do these things.
|
||||
|
||||
Developers that use our General Public Licenses protect your rights
|
||||
with two steps: (1) assert copyright on the software, and (2) offer
|
||||
you this License which gives you legal permission to copy, distribute
|
||||
and/or modify the software.
|
||||
|
||||
A secondary benefit of defending all users' freedom is that
|
||||
improvements made in alternate versions of the program, if they
|
||||
receive widespread use, become available for other developers to
|
||||
incorporate. Many developers of free software are heartened and
|
||||
encouraged by the resulting cooperation. However, in the case of
|
||||
software used on network servers, this result may fail to come about.
|
||||
The GNU General Public License permits making a modified version and
|
||||
letting the public access it on a server without ever releasing its
|
||||
source code to the public.
|
||||
|
||||
The GNU Affero General Public License is designed specifically to
|
||||
ensure that, in such cases, the modified source code becomes available
|
||||
to the community. It requires the operator of a network server to
|
||||
provide the source code of the modified version running there to the
|
||||
users of that server. Therefore, public use of a modified version, on
|
||||
a publicly accessible server, gives the public access to the source
|
||||
code of the modified version.
|
||||
|
||||
An older license, called the Affero General Public License and
|
||||
published by Affero, was designed to accomplish similar goals. This is
|
||||
a different license, not a version of the Affero GPL, but Affero has
|
||||
released a new version of the Affero GPL which permits relicensing under
|
||||
this license.
|
||||
|
||||
The precise terms and conditions for copying, distribution and
|
||||
modification follow.
|
||||
|
||||
TERMS AND CONDITIONS
|
||||
|
||||
0. Definitions.
|
||||
|
||||
"This License" refers to version 3 of the GNU Affero General Public License.
|
||||
|
||||
"Copyright" also means copyright-like laws that apply to other kinds of
|
||||
works, such as semiconductor masks.
|
||||
|
||||
"The Program" refers to any copyrightable work licensed under this
|
||||
License. Each licensee is addressed as "you". "Licensees" and
|
||||
"recipients" may be individuals or organizations.
|
||||
|
||||
To "modify" a work means to copy from or adapt all or part of the work
|
||||
in a fashion requiring copyright permission, other than the making of an
|
||||
exact copy. The resulting work is called a "modified version" of the
|
||||
earlier work or a work "based on" the earlier work.
|
||||
|
||||
A "covered work" means either the unmodified Program or a work based
|
||||
on the Program.
|
||||
|
||||
To "propagate" a work means to do anything with it that, without
|
||||
permission, would make you directly or secondarily liable for
|
||||
infringement under applicable copyright law, except executing it on a
|
||||
computer or modifying a private copy. Propagation includes copying,
|
||||
distribution (with or without modification), making available to the
|
||||
public, and in some countries other activities as well.
|
||||
|
||||
To "convey" a work means any kind of propagation that enables other
|
||||
parties to make or receive copies. Mere interaction with a user through
|
||||
a computer network, with no transfer of a copy, is not conveying.
|
||||
|
||||
An interactive user interface displays "Appropriate Legal Notices"
|
||||
to the extent that it includes a convenient and prominently visible
|
||||
feature that (1) displays an appropriate copyright notice, and (2)
|
||||
tells the user that there is no warranty for the work (except to the
|
||||
extent that warranties are provided), that licensees may convey the
|
||||
work under this License, and how to view a copy of this License. If
|
||||
the interface presents a list of user commands or options, such as a
|
||||
menu, a prominent item in the list meets this criterion.
|
||||
|
||||
1. Source Code.
|
||||
|
||||
The "source code" for a work means the preferred form of the work
|
||||
for making modifications to it. "Object code" means any non-source
|
||||
form of a work.
|
||||
|
||||
A "Standard Interface" means an interface that either is an official
|
||||
standard defined by a recognized standards body, or, in the case of
|
||||
interfaces specified for a particular programming language, one that
|
||||
is widely used among developers working in that language.
|
||||
|
||||
The "System Libraries" of an executable work include anything, other
|
||||
than the work as a whole, that (a) is included in the normal form of
|
||||
packaging a Major Component, but which is not part of that Major
|
||||
Component, and (b) serves only to enable use of the work with that
|
||||
Major Component, or to implement a Standard Interface for which an
|
||||
implementation is available to the public in source code form. A
|
||||
"Major Component", in this context, means a major essential component
|
||||
(kernel, window system, and so on) of the specific operating system
|
||||
(if any) on which the executable work runs, or a compiler used to
|
||||
produce the work, or an object code interpreter used to run it.
|
||||
|
||||
The "Corresponding Source" for a work in object code form means all
|
||||
the source code needed to generate, install, and (for an executable
|
||||
work) run the object code and to modify the work, including scripts to
|
||||
control those activities. However, it does not include the work's
|
||||
System Libraries, or general-purpose tools or generally available free
|
||||
programs which are used unmodified in performing those activities but
|
||||
which are not part of the work. For example, Corresponding Source
|
||||
includes interface definition files associated with source files for
|
||||
the work, and the source code for shared libraries and dynamically
|
||||
linked subprograms that the work is specifically designed to require,
|
||||
such as by intimate data communication or control flow between those
|
||||
subprograms and other parts of the work.
|
||||
|
||||
The Corresponding Source need not include anything that users
|
||||
can regenerate automatically from other parts of the Corresponding
|
||||
Source.
|
||||
|
||||
The Corresponding Source for a work in source code form is that
|
||||
same work.
|
||||
|
||||
2. Basic Permissions.
|
||||
|
||||
All rights granted under this License are granted for the term of
|
||||
copyright on the Program, and are irrevocable provided the stated
|
||||
conditions are met. This License explicitly affirms your unlimited
|
||||
permission to run the unmodified Program. The output from running a
|
||||
covered work is covered by this License only if the output, given its
|
||||
content, constitutes a covered work. This License acknowledges your
|
||||
rights of fair use or other equivalent, as provided by copyright law.
|
||||
|
||||
You may make, run and propagate covered works that you do not
|
||||
convey, without conditions so long as your license otherwise remains
|
||||
in force. You may convey covered works to others for the sole purpose
|
||||
of having them make modifications exclusively for you, or provide you
|
||||
with facilities for running those works, provided that you comply with
|
||||
the terms of this License in conveying all material for which you do
|
||||
not control copyright. Those thus making or running the covered works
|
||||
for you must do so exclusively on your behalf, under your direction
|
||||
and control, on terms that prohibit them from making any copies of
|
||||
your copyrighted material outside their relationship with you.
|
||||
|
||||
Conveying under any other circumstances is permitted solely under
|
||||
the conditions stated below. Sublicensing is not allowed; section 10
|
||||
makes it unnecessary.
|
||||
|
||||
3. Protecting Users' Legal Rights From Anti-Circumvention Law.
|
||||
|
||||
No covered work shall be deemed part of an effective technological
|
||||
measure under any applicable law fulfilling obligations under article
|
||||
11 of the WIPO copyright treaty adopted on 20 December 1996, or
|
||||
similar laws prohibiting or restricting circumvention of such
|
||||
measures.
|
||||
|
||||
When you convey a covered work, you waive any legal power to forbid
|
||||
circumvention of technological measures to the extent such circumvention
|
||||
is effected by exercising rights under this License with respect to
|
||||
the covered work, and you disclaim any intention to limit operation or
|
||||
modification of the work as a means of enforcing, against the work's
|
||||
users, your or third parties' legal rights to forbid circumvention of
|
||||
technological measures.
|
||||
|
||||
4. Conveying Verbatim Copies.
|
||||
|
||||
You may convey verbatim copies of the Program's source code as you
|
||||
receive it, in any medium, provided that you conspicuously and
|
||||
appropriately publish on each copy an appropriate copyright notice;
|
||||
keep intact all notices stating that this License and any
|
||||
non-permissive terms added in accord with section 7 apply to the code;
|
||||
keep intact all notices of the absence of any warranty; and give all
|
||||
recipients a copy of this License along with the Program.
|
||||
|
||||
You may charge any price or no price for each copy that you convey,
|
||||
and you may offer support or warranty protection for a fee.
|
||||
|
||||
5. Conveying Modified Source Versions.
|
||||
|
||||
You may convey a work based on the Program, or the modifications to
|
||||
produce it from the Program, in the form of source code under the
|
||||
terms of section 4, provided that you also meet all of these conditions:
|
||||
|
||||
a) The work must carry prominent notices stating that you modified
|
||||
it, and giving a relevant date.
|
||||
|
||||
b) The work must carry prominent notices stating that it is
|
||||
released under this License and any conditions added under section
|
||||
7. This requirement modifies the requirement in section 4 to
|
||||
"keep intact all notices".
|
||||
|
||||
c) You must license the entire work, as a whole, under this
|
||||
License to anyone who comes into possession of a copy. This
|
||||
License will therefore apply, along with any applicable section 7
|
||||
additional terms, to the whole of the work, and all its parts,
|
||||
regardless of how they are packaged. This License gives no
|
||||
permission to license the work in any other way, but it does not
|
||||
invalidate such permission if you have separately received it.
|
||||
|
||||
d) If the work has interactive user interfaces, each must display
|
||||
Appropriate Legal Notices; however, if the Program has interactive
|
||||
interfaces that do not display Appropriate Legal Notices, your
|
||||
work need not make them do so.
|
||||
|
||||
A compilation of a covered work with other separate and independent
|
||||
works, which are not by their nature extensions of the covered work,
|
||||
and which are not combined with it such as to form a larger program,
|
||||
in or on a volume of a storage or distribution medium, is called an
|
||||
"aggregate" if the compilation and its resulting copyright are not
|
||||
used to limit the access or legal rights of the compilation's users
|
||||
beyond what the individual works permit. Inclusion of a covered work
|
||||
in an aggregate does not cause this License to apply to the other
|
||||
parts of the aggregate.
|
||||
|
||||
6. Conveying Non-Source Forms.
|
||||
|
||||
You may convey a covered work in object code form under the terms
|
||||
of sections 4 and 5, provided that you also convey the
|
||||
machine-readable Corresponding Source under the terms of this License,
|
||||
in one of these ways:
|
||||
|
||||
a) Convey the object code in, or embodied in, a physical product
|
||||
(including a physical distribution medium), accompanied by the
|
||||
Corresponding Source fixed on a durable physical medium
|
||||
customarily used for software interchange.
|
||||
|
||||
b) Convey the object code in, or embodied in, a physical product
|
||||
(including a physical distribution medium), accompanied by a
|
||||
written offer, valid for at least three years and valid for as
|
||||
long as you offer spare parts or customer support for that product
|
||||
model, to give anyone who possesses the object code either (1) a
|
||||
copy of the Corresponding Source for all the software in the
|
||||
product that is covered by this License, on a durable physical
|
||||
medium customarily used for software interchange, for a price no
|
||||
more than your reasonable cost of physically performing this
|
||||
conveying of source, or (2) access to copy the
|
||||
Corresponding Source from a network server at no charge.
|
||||
|
||||
c) Convey individual copies of the object code with a copy of the
|
||||
written offer to provide the Corresponding Source. This
|
||||
alternative is allowed only occasionally and noncommercially, and
|
||||
only if you received the object code with such an offer, in accord
|
||||
with subsection 6b.
|
||||
|
||||
d) Convey the object code by offering access from a designated
|
||||
place (gratis or for a charge), and offer equivalent access to the
|
||||
Corresponding Source in the same way through the same place at no
|
||||
further charge. You need not require recipients to copy the
|
||||
Corresponding Source along with the object code. If the place to
|
||||
copy the object code is a network server, the Corresponding Source
|
||||
may be on a different server (operated by you or a third party)
|
||||
that supports equivalent copying facilities, provided you maintain
|
||||
clear directions next to the object code saying where to find the
|
||||
Corresponding Source. Regardless of what server hosts the
|
||||
Corresponding Source, you remain obligated to ensure that it is
|
||||
available for as long as needed to satisfy these requirements.
|
||||
|
||||
e) Convey the object code using peer-to-peer transmission, provided
|
||||
you inform other peers where the object code and Corresponding
|
||||
Source of the work are being offered to the general public at no
|
||||
charge under subsection 6d.
|
||||
|
||||
A separable portion of the object code, whose source code is excluded
|
||||
from the Corresponding Source as a System Library, need not be
|
||||
included in conveying the object code work.
|
||||
|
||||
A "User Product" is either (1) a "consumer product", which means any
|
||||
tangible personal property which is normally used for personal, family,
|
||||
or household purposes, or (2) anything designed or sold for incorporation
|
||||
into a dwelling. In determining whether a product is a consumer product,
|
||||
doubtful cases shall be resolved in favor of coverage. For a particular
|
||||
product received by a particular user, "normally used" refers to a
|
||||
typical or common use of that class of product, regardless of the status
|
||||
of the particular user or of the way in which the particular user
|
||||
actually uses, or expects or is expected to use, the product. A product
|
||||
is a consumer product regardless of whether the product has substantial
|
||||
commercial, industrial or non-consumer uses, unless such uses represent
|
||||
the only significant mode of use of the product.
|
||||
|
||||
"Installation Information" for a User Product means any methods,
|
||||
procedures, authorization keys, or other information required to install
|
||||
and execute modified versions of a covered work in that User Product from
|
||||
a modified version of its Corresponding Source. The information must
|
||||
suffice to ensure that the continued functioning of the modified object
|
||||
code is in no case prevented or interfered with solely because
|
||||
modification has been made.
|
||||
|
||||
If you convey an object code work under this section in, or with, or
|
||||
specifically for use in, a User Product, and the conveying occurs as
|
||||
part of a transaction in which the right of possession and use of the
|
||||
User Product is transferred to the recipient in perpetuity or for a
|
||||
fixed term (regardless of how the transaction is characterized), the
|
||||
Corresponding Source conveyed under this section must be accompanied
|
||||
by the Installation Information. But this requirement does not apply
|
||||
if neither you nor any third party retains the ability to install
|
||||
modified object code on the User Product (for example, the work has
|
||||
been installed in ROM).
|
||||
|
||||
The requirement to provide Installation Information does not include a
|
||||
requirement to continue to provide support service, warranty, or updates
|
||||
for a work that has been modified or installed by the recipient, or for
|
||||
the User Product in which it has been modified or installed. Access to a
|
||||
network may be denied when the modification itself materially and
|
||||
adversely affects the operation of the network or violates the rules and
|
||||
protocols for communication across the network.
|
||||
|
||||
Corresponding Source conveyed, and Installation Information provided,
|
||||
in accord with this section must be in a format that is publicly
|
||||
documented (and with an implementation available to the public in
|
||||
source code form), and must require no special password or key for
|
||||
unpacking, reading or copying.
|
||||
|
||||
7. Additional Terms.
|
||||
|
||||
"Additional permissions" are terms that supplement the terms of this
|
||||
License by making exceptions from one or more of its conditions.
|
||||
Additional permissions that are applicable to the entire Program shall
|
||||
be treated as though they were included in this License, to the extent
|
||||
that they are valid under applicable law. If additional permissions
|
||||
apply only to part of the Program, that part may be used separately
|
||||
under those permissions, but the entire Program remains governed by
|
||||
this License without regard to the additional permissions.
|
||||
|
||||
When you convey a copy of a covered work, you may at your option
|
||||
remove any additional permissions from that copy, or from any part of
|
||||
it. (Additional permissions may be written to require their own
|
||||
removal in certain cases when you modify the work.) You may place
|
||||
additional permissions on material, added by you to a covered work,
|
||||
for which you have or can give appropriate copyright permission.
|
||||
|
||||
Notwithstanding any other provision of this License, for material you
|
||||
add to a covered work, you may (if authorized by the copyright holders of
|
||||
that material) supplement the terms of this License with terms:
|
||||
|
||||
a) Disclaiming warranty or limiting liability differently from the
|
||||
terms of sections 15 and 16 of this License; or
|
||||
|
||||
b) Requiring preservation of specified reasonable legal notices or
|
||||
author attributions in that material or in the Appropriate Legal
|
||||
Notices displayed by works containing it; or
|
||||
|
||||
c) Prohibiting misrepresentation of the origin of that material, or
|
||||
requiring that modified versions of such material be marked in
|
||||
reasonable ways as different from the original version; or
|
||||
|
||||
d) Limiting the use for publicity purposes of names of licensors or
|
||||
authors of the material; or
|
||||
|
||||
e) Declining to grant rights under trademark law for use of some
|
||||
trade names, trademarks, or service marks; or
|
||||
|
||||
f) Requiring indemnification of licensors and authors of that
|
||||
material by anyone who conveys the material (or modified versions of
|
||||
it) with contractual assumptions of liability to the recipient, for
|
||||
any liability that these contractual assumptions directly impose on
|
||||
those licensors and authors.
|
||||
|
||||
All other non-permissive additional terms are considered "further
|
||||
restrictions" within the meaning of section 10. If the Program as you
|
||||
received it, or any part of it, contains a notice stating that it is
|
||||
governed by this License along with a term that is a further
|
||||
restriction, you may remove that term. If a license document contains
|
||||
a further restriction but permits relicensing or conveying under this
|
||||
License, you may add to a covered work material governed by the terms
|
||||
of that license document, provided that the further restriction does
|
||||
not survive such relicensing or conveying.
|
||||
|
||||
If you add terms to a covered work in accord with this section, you
|
||||
must place, in the relevant source files, a statement of the
|
||||
additional terms that apply to those files, or a notice indicating
|
||||
where to find the applicable terms.
|
||||
|
||||
Additional terms, permissive or non-permissive, may be stated in the
|
||||
form of a separately written license, or stated as exceptions;
|
||||
the above requirements apply either way.
|
||||
|
||||
8. Termination.
|
||||
|
||||
You may not propagate or modify a covered work except as expressly
|
||||
provided under this License. Any attempt otherwise to propagate or
|
||||
modify it is void, and will automatically terminate your rights under
|
||||
this License (including any patent licenses granted under the third
|
||||
paragraph of section 11).
|
||||
|
||||
However, if you cease all violation of this License, then your
|
||||
license from a particular copyright holder is reinstated (a)
|
||||
provisionally, unless and until the copyright holder explicitly and
|
||||
finally terminates your license, and (b) permanently, if the copyright
|
||||
holder fails to notify you of the violation by some reasonable means
|
||||
prior to 60 days after the cessation.
|
||||
|
||||
Moreover, your license from a particular copyright holder is
|
||||
reinstated permanently if the copyright holder notifies you of the
|
||||
violation by some reasonable means, this is the first time you have
|
||||
received notice of violation of this License (for any work) from that
|
||||
copyright holder, and you cure the violation prior to 30 days after
|
||||
your receipt of the notice.
|
||||
|
||||
Termination of your rights under this section does not terminate the
|
||||
licenses of parties who have received copies or rights from you under
|
||||
this License. If your rights have been terminated and not permanently
|
||||
reinstated, you do not qualify to receive new licenses for the same
|
||||
material under section 10.
|
||||
|
||||
9. Acceptance Not Required for Having Copies.
|
||||
|
||||
You are not required to accept this License in order to receive or
|
||||
run a copy of the Program. Ancillary propagation of a covered work
|
||||
occurring solely as a consequence of using peer-to-peer transmission
|
||||
to receive a copy likewise does not require acceptance. However,
|
||||
nothing other than this License grants you permission to propagate or
|
||||
modify any covered work. These actions infringe copyright if you do
|
||||
not accept this License. Therefore, by modifying or propagating a
|
||||
covered work, you indicate your acceptance of this License to do so.
|
||||
|
||||
10. Automatic Licensing of Downstream Recipients.
|
||||
|
||||
Each time you convey a covered work, the recipient automatically
|
||||
receives a license from the original licensors, to run, modify and
|
||||
propagate that work, subject to this License. You are not responsible
|
||||
for enforcing compliance by third parties with this License.
|
||||
|
||||
An "entity transaction" is a transaction transferring control of an
|
||||
organization, or substantially all assets of one, or subdividing an
|
||||
organization, or merging organizations. If propagation of a covered
|
||||
work results from an entity transaction, each party to that
|
||||
transaction who receives a copy of the work also receives whatever
|
||||
licenses to the work the party's predecessor in interest had or could
|
||||
give under the previous paragraph, plus a right to possession of the
|
||||
Corresponding Source of the work from the predecessor in interest, if
|
||||
the predecessor has it or can get it with reasonable efforts.
|
||||
|
||||
You may not impose any further restrictions on the exercise of the
|
||||
rights granted or affirmed under this License. For example, you may
|
||||
not impose a license fee, royalty, or other charge for exercise of
|
||||
rights granted under this License, and you may not initiate litigation
|
||||
(including a cross-claim or counterclaim in a lawsuit) alleging that
|
||||
any patent claim is infringed by making, using, selling, offering for
|
||||
sale, or importing the Program or any portion of it.
|
||||
|
||||
11. Patents.
|
||||
|
||||
A "contributor" is a copyright holder who authorizes use under this
|
||||
License of the Program or a work on which the Program is based. The
|
||||
work thus licensed is called the contributor's "contributor version".
|
||||
|
||||
A contributor's "essential patent claims" are all patent claims
|
||||
owned or controlled by the contributor, whether already acquired or
|
||||
hereafter acquired, that would be infringed by some manner, permitted
|
||||
by this License, of making, using, or selling its contributor version,
|
||||
but do not include claims that would be infringed only as a
|
||||
consequence of further modification of the contributor version. For
|
||||
purposes of this definition, "control" includes the right to grant
|
||||
patent sublicenses in a manner consistent with the requirements of
|
||||
this License.
|
||||
|
||||
Each contributor grants you a non-exclusive, worldwide, royalty-free
|
||||
patent license under the contributor's essential patent claims, to
|
||||
make, use, sell, offer for sale, import and otherwise run, modify and
|
||||
propagate the contents of its contributor version.
|
||||
|
||||
In the following three paragraphs, a "patent license" is any express
|
||||
agreement or commitment, however denominated, not to enforce a patent
|
||||
(such as an express permission to practice a patent or covenant not to
|
||||
sue for patent infringement). To "grant" such a patent license to a
|
||||
party means to make such an agreement or commitment not to enforce a
|
||||
patent against the party.
|
||||
|
||||
If you convey a covered work, knowingly relying on a patent license,
|
||||
and the Corresponding Source of the work is not available for anyone
|
||||
to copy, free of charge and under the terms of this License, through a
|
||||
publicly available network server or other readily accessible means,
|
||||
then you must either (1) cause the Corresponding Source to be so
|
||||
available, or (2) arrange to deprive yourself of the benefit of the
|
||||
patent license for this particular work, or (3) arrange, in a manner
|
||||
consistent with the requirements of this License, to extend the patent
|
||||
license to downstream recipients. "Knowingly relying" means you have
|
||||
actual knowledge that, but for the patent license, your conveying the
|
||||
covered work in a country, or your recipient's use of the covered work
|
||||
in a country, would infringe one or more identifiable patents in that
|
||||
country that you have reason to believe are valid.
|
||||
|
||||
If, pursuant to or in connection with a single transaction or
|
||||
arrangement, you convey, or propagate by procuring conveyance of, a
|
||||
covered work, and grant a patent license to some of the parties
|
||||
receiving the covered work authorizing them to use, propagate, modify
|
||||
or convey a specific copy of the covered work, then the patent license
|
||||
you grant is automatically extended to all recipients of the covered
|
||||
work and works based on it.
|
||||
|
||||
A patent license is "discriminatory" if it does not include within
|
||||
the scope of its coverage, prohibits the exercise of, or is
|
||||
conditioned on the non-exercise of one or more of the rights that are
|
||||
specifically granted under this License. You may not convey a covered
|
||||
work if you are a party to an arrangement with a third party that is
|
||||
in the business of distributing software, under which you make payment
|
||||
to the third party based on the extent of your activity of conveying
|
||||
the work, and under which the third party grants, to any of the
|
||||
parties who would receive the covered work from you, a discriminatory
|
||||
patent license (a) in connection with copies of the covered work
|
||||
conveyed by you (or copies made from those copies), or (b) primarily
|
||||
for and in connection with specific products or compilations that
|
||||
contain the covered work, unless you entered into that arrangement,
|
||||
or that patent license was granted, prior to 28 March 2007.
|
||||
|
||||
Nothing in this License shall be construed as excluding or limiting
|
||||
any implied license or other defenses to infringement that may
|
||||
otherwise be available to you under applicable patent law.
|
||||
|
||||
12. No Surrender of Others' Freedom.
|
||||
|
||||
If conditions are imposed on you (whether by court order, agreement or
|
||||
otherwise) that contradict the conditions of this License, they do not
|
||||
excuse you from the conditions of this License. If you cannot convey a
|
||||
covered work so as to satisfy simultaneously your obligations under this
|
||||
License and any other pertinent obligations, then as a consequence you may
|
||||
not convey it at all. For example, if you agree to terms that obligate you
|
||||
to collect a royalty for further conveying from those to whom you convey
|
||||
the Program, the only way you could satisfy both those terms and this
|
||||
License would be to refrain entirely from conveying the Program.
|
||||
|
||||
13. Remote Network Interaction; Use with the GNU General Public License.
|
||||
|
||||
Notwithstanding any other provision of this License, if you modify the
|
||||
Program, your modified version must prominently offer all users
|
||||
interacting with it remotely through a computer network (if your version
|
||||
supports such interaction) an opportunity to receive the Corresponding
|
||||
Source of your version by providing access to the Corresponding Source
|
||||
from a network server at no charge, through some standard or customary
|
||||
means of facilitating copying of software. This Corresponding Source
|
||||
shall include the Corresponding Source for any work covered by version 3
|
||||
of the GNU General Public License that is incorporated pursuant to the
|
||||
following paragraph.
|
||||
|
||||
Notwithstanding any other provision of this License, you have
|
||||
permission to link or combine any covered work with a work licensed
|
||||
under version 3 of the GNU General Public License into a single
|
||||
combined work, and to convey the resulting work. The terms of this
|
||||
License will continue to apply to the part which is the covered work,
|
||||
but the work with which it is combined will remain governed by version
|
||||
3 of the GNU General Public License.
|
||||
|
||||
14. Revised Versions of this License.
|
||||
|
||||
The Free Software Foundation may publish revised and/or new versions of
|
||||
the GNU Affero General Public License from time to time. Such new versions
|
||||
will be similar in spirit to the present version, but may differ in detail to
|
||||
address new problems or concerns.
|
||||
|
||||
Each version is given a distinguishing version number. If the
|
||||
Program specifies that a certain numbered version of the GNU Affero General
|
||||
Public License "or any later version" applies to it, you have the
|
||||
option of following the terms and conditions either of that numbered
|
||||
version or of any later version published by the Free Software
|
||||
Foundation. If the Program does not specify a version number of the
|
||||
GNU Affero General Public License, you may choose any version ever published
|
||||
by the Free Software Foundation.
|
||||
|
||||
If the Program specifies that a proxy can decide which future
|
||||
versions of the GNU Affero General Public License can be used, that proxy's
|
||||
public statement of acceptance of a version permanently authorizes you
|
||||
to choose that version for the Program.
|
||||
|
||||
Later license versions may give you additional or different
|
||||
permissions. However, no additional obligations are imposed on any
|
||||
author or copyright holder as a result of your choosing to follow a
|
||||
later version.
|
||||
|
||||
15. Disclaimer of Warranty.
|
||||
|
||||
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
|
||||
APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
|
||||
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
|
||||
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
|
||||
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
|
||||
IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
|
||||
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
|
||||
|
||||
16. Limitation of Liability.
|
||||
|
||||
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
|
||||
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
|
||||
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
|
||||
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
|
||||
USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
|
||||
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
|
||||
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
|
||||
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
|
||||
SUCH DAMAGES.
|
||||
|
||||
17. Interpretation of Sections 15 and 16.
|
||||
|
||||
If the disclaimer of warranty and limitation of liability provided
|
||||
above cannot be given local legal effect according to their terms,
|
||||
reviewing courts shall apply local law that most closely approximates
|
||||
an absolute waiver of all civil liability in connection with the
|
||||
Program, unless a warranty or assumption of liability accompanies a
|
||||
copy of the Program in return for a fee.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
How to Apply These Terms to Your New Programs
|
||||
|
||||
If you develop a new program, and you want it to be of the greatest
|
||||
possible use to the public, the best way to achieve this is to make it
|
||||
free software which everyone can redistribute and change under these terms.
|
||||
|
||||
To do so, attach the following notices to the program. It is safest
|
||||
to attach them to the start of each source file to most effectively
|
||||
state the exclusion of warranty; and each file should have at least
|
||||
the "copyright" line and a pointer to where the full notice is found.
|
||||
|
||||
<one line to give the program's name and a brief idea of what it does.>
|
||||
Copyright (C) <year> <name of author>
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU Affero General Public License as published
|
||||
by the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Affero General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Affero General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Also add information on how to contact you by electronic and paper mail.
|
||||
|
||||
If your software can interact with users remotely through a computer
|
||||
network, you should also make sure that it provides a way for users to
|
||||
get its source. For example, if your program is a web application, its
|
||||
interface could display a "Source" link that leads users to an archive
|
||||
of the code. There are many ways you could offer source, and different
|
||||
solutions will be better for different programs; see section 13 for the
|
||||
specific requirements.
|
||||
|
||||
You should also get your employer (if you work as a programmer) or school,
|
||||
if any, to sign a "copyright disclaimer" for the program, if necessary.
|
||||
For more information on this, and how to apply and follow the GNU AGPL, see
|
||||
<http://www.gnu.org/licenses/>.
|
||||
@@ -0,0 +1,54 @@
|
||||
#
|
||||
# This file is part of the AzerothCore Project. See AUTHORS file for Copyright information
|
||||
#
|
||||
# This file is free software; as a special exception the author gives
|
||||
# unlimited permission to copy and/or distribute it, with or without
|
||||
# modifications, as long as this notice is preserved.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful, but
|
||||
# WITHOUT ANY WARRANTY, to the extent permitted by law; without even the
|
||||
# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
#
|
||||
# User has manually chosen to ignore the git-tests, so throw them a warning.
|
||||
# This is done EACH compile so they can be alerted about the consequences.
|
||||
#
|
||||
|
||||
########################################
|
||||
# AoeLoot module configuration
|
||||
# Fractured: stock defaults; no class-specific logic in this module.
|
||||
########################################
|
||||
#
|
||||
# AOELoot.Enable
|
||||
# Description: Enables Module
|
||||
# Default: 1 - (Enabled)
|
||||
# 0 - (Disabled)
|
||||
#
|
||||
|
||||
AOELoot.Enable = 1
|
||||
|
||||
#
|
||||
# AOELoot.Message
|
||||
# Description: Enables area loot if the player is in a group
|
||||
# Default: 1 - (Enabled)
|
||||
# 0 - (Disabled)
|
||||
#
|
||||
|
||||
AOELoot.Message = 1
|
||||
|
||||
#
|
||||
# AOELoot.Range
|
||||
# Description: Maximum reach range search loot.
|
||||
# Default: 55.0
|
||||
# Range: 5.0 - 100.0
|
||||
#
|
||||
|
||||
AOELoot.Range = 55.0
|
||||
|
||||
#
|
||||
# AOELoot.Group
|
||||
# Description: Enables area loot if the player is in a group
|
||||
# Default: 1 - (Enabled)
|
||||
# 0 - (Disabled)
|
||||
#
|
||||
|
||||
AOELoot.Group = 1
|
||||
@@ -0,0 +1,33 @@
|
||||
SET @MODULE_STRING := 'mod-aoe-loot';
|
||||
|
||||
-- module string
|
||||
DELETE FROM `module_string` WHERE `module` = @MODULE_STRING;
|
||||
INSERT INTO `module_string` (`module`, `id`, `string`) VALUES
|
||||
(@MODULE_STRING, 1, 'This server is running the |cff4CFF00Loot aoe|r module.'),
|
||||
(@MODULE_STRING, 2, '|cff4CFF00[Loot aoe]|r Your items has been mailed to you.'),
|
||||
(@MODULE_STRING, 3, 'AOE Loot module is active. Use .aoeloot on/off to toggle it.'),
|
||||
(@MODULE_STRING, 4, 'AOE Loot: Quest item sent to your mailbox.'),
|
||||
(@MODULE_STRING, 5, 'AOE Loot is already enabled for your character.'),
|
||||
(@MODULE_STRING, 6, 'AOE Loot enabled for your character. Type .aoeloot off to disable it.'),
|
||||
(@MODULE_STRING, 7, 'AOE Loot is already disabled for your character.'),
|
||||
(@MODULE_STRING, 8, 'AOE Loot disabled for your character. Type .aoeloot on to enable it.');
|
||||
|
||||
-- localizations
|
||||
DELETE FROM `module_string_locale` WHERE `module` = @MODULE_STRING;
|
||||
INSERT INTO `module_string_locale` (`module`, `id`, `locale`, `string`) VALUES
|
||||
(@MODULE_STRING, 1, 'esES', 'Este servidor está ejecutando el módulo |cff4CFF00Loot aoe|r.'),
|
||||
(@MODULE_STRING, 2, 'esES', '|cff4CFF00[Loot aoe]|r Sus artículos le han sido enviados por correo.'),
|
||||
(@MODULE_STRING, 3, 'esES', 'El módulo de Botín AOE está activo. Usa .aoeloot on/off para activarlo o desactivarlo.'),
|
||||
(@MODULE_STRING, 4, 'esES', 'Botín AOE: Objeto de misión enviado a tu buzón.'),
|
||||
(@MODULE_STRING, 5, 'esES', 'El Botín AOE ya está activado para tu personaje.'),
|
||||
(@MODULE_STRING, 6, 'esES', 'Botín AOE activado para tu personaje. Escribe .aoeloot off para desactivarlo.'),
|
||||
(@MODULE_STRING, 7, 'esES', 'El Botín AOE ya está desactivado para tu personaje.'),
|
||||
(@MODULE_STRING, 8, 'esES', 'Botín AOE desactivado para tu personaje. Escribe .aoeloot on para activarlo.'),
|
||||
(@MODULE_STRING, 1, 'esMX', 'Este servidor está ejecutando el módulo |cff4CFF00Loot aoe|r.'),
|
||||
(@MODULE_STRING, 2, 'esMX', '|cff4CFF00[Loot aoe]|r Sus artículos le han sido enviados por correo.'),
|
||||
(@MODULE_STRING, 3, 'esMX', 'El módulo de Botín AOE está activo. Usa .aoeloot on/off para activarlo o desactivarlo.'),
|
||||
(@MODULE_STRING, 4, 'esMX', 'Botín AOE: Objeto de misión enviado a tu buzón.'),
|
||||
(@MODULE_STRING, 5, 'esMX', 'El Botín AOE ya está activado para tu personaje.'),
|
||||
(@MODULE_STRING, 6, 'esMX', 'Botín AOE activado para tu personaje. Escribe .aoeloot off para desactivarlo.'),
|
||||
(@MODULE_STRING, 7, 'esMX', 'El Botín AOE ya está desactivado para tu personaje.'),
|
||||
(@MODULE_STRING, 8, 'esMX', 'Botín AOE desactivado para tu personaje. Escribe .aoeloot on para activarlo.');
|
||||
@@ -0,0 +1,25 @@
|
||||
<!-- First of all, THANK YOU for your contribution. -->
|
||||
|
||||
## Changes Proposed:
|
||||
-
|
||||
-
|
||||
|
||||
## Issues Addressed:
|
||||
<!-- If your fix has a relating issue, link it below -->
|
||||
- Closes
|
||||
|
||||
## SOURCE:
|
||||
<!-- If you can, include a source that can strengthen your claim -->
|
||||
|
||||
## Tests Performed:
|
||||
<!-- Does it build without errors? Did you test in-game? What did you test? On which OS did you test? Describe any other tests performed -->
|
||||
-
|
||||
-
|
||||
|
||||
|
||||
## How to Test the Changes:
|
||||
<!-- Describe in a detailed step-by-step order how to test the changes -->
|
||||
|
||||
1.
|
||||
2.
|
||||
3.
|
||||
@@ -0,0 +1,321 @@
|
||||
/*
|
||||
* This file is part of the AzerothCore Project. See AUTHORS file for Copyright information
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify it
|
||||
* under the terms of the GNU General Public License as published by the
|
||||
* Free Software Foundation; either version 2 of the License, or (at your
|
||||
* option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
||||
* more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License along
|
||||
* with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include "aoe_loot.h"
|
||||
#include "ObjectMgr.h"
|
||||
#include <algorithm>
|
||||
#include <limits>
|
||||
|
||||
std::map<uint64, bool> AoeLootCommandScript::playerAoeLootEnabled;
|
||||
|
||||
void AOELootPlayer::OnPlayerLogin(Player* player)
|
||||
{
|
||||
if (!player)
|
||||
return;
|
||||
|
||||
if (sConfigMgr->GetOption<bool>("AOELoot.Enable", true) && sConfigMgr->GetOption<bool>("AOELoot.Message", true))
|
||||
if (WorldSession* session = player->GetSession())
|
||||
ChatHandler(session).PSendModuleSysMessage(MODULE_STRING, AOE_LOGIN_MESSAGE);
|
||||
}
|
||||
|
||||
bool AOELootServer::CanPacketReceive(WorldSession* session, WorldPacket const& packet)
|
||||
{
|
||||
// Only handle loot packets
|
||||
if (packet.GetOpcode() != CMSG_LOOT)
|
||||
return true;
|
||||
|
||||
// Basic validation checks
|
||||
if (!session)
|
||||
return true;
|
||||
|
||||
Player* player = session->GetPlayer();
|
||||
if (!player)
|
||||
return true;
|
||||
|
||||
// Check if module is enabled
|
||||
if (!sConfigMgr->GetOption<bool>("AOELoot.Enable", true))
|
||||
return true;
|
||||
|
||||
// Check if player has AOE loot disabled via command
|
||||
uint64 playerGuid = player->GetGUID().GetRawValue();
|
||||
if (AoeLootCommandScript::hasPlayerAoeLootEnabled(playerGuid) &&
|
||||
!AoeLootCommandScript::getPlayerAoeLootEnabled(playerGuid))
|
||||
return true;
|
||||
|
||||
// Check group settings
|
||||
if (player->GetGroup() && !sConfigMgr->GetOption<bool>("AOELoot.Group", true))
|
||||
return true;
|
||||
|
||||
// Get configured loot range
|
||||
float range = sConfigMgr->GetOption<float>("AOELoot.Range", 55.0f);
|
||||
|
||||
// Limit range to reasonable values
|
||||
if (range < 5.0f)
|
||||
range = 5.0f;
|
||||
|
||||
if (range > 100.0f)
|
||||
range = 100.0f;
|
||||
|
||||
// Read target GUID from packet
|
||||
WorldPacket packetCopy(packet);
|
||||
ObjectGuid targetGuid;
|
||||
packetCopy >> targetGuid;
|
||||
|
||||
if (!targetGuid)
|
||||
return true;
|
||||
|
||||
// Get target creature
|
||||
Creature* mainCreature = player->GetMap()->GetCreature(targetGuid);
|
||||
if (!mainCreature)
|
||||
return true;
|
||||
|
||||
// Check if main creature has loot
|
||||
if (!mainCreature->HasDynamicFlag(UNIT_DYNFLAG_LOOTABLE))
|
||||
return true;
|
||||
|
||||
// Get nearby corpses
|
||||
std::list<Creature*> nearbyCorpses;
|
||||
player->GetDeadCreatureListInGrid(nearbyCorpses, range);
|
||||
|
||||
// Remove invalid corpses and main target
|
||||
nearbyCorpses.remove_if([&](Creature* c)
|
||||
{
|
||||
return !c ||
|
||||
c->GetGUID() == targetGuid ||
|
||||
!c->HasDynamicFlag(UNIT_DYNFLAG_LOOTABLE) ||
|
||||
!player->isAllowedToLoot(c);
|
||||
});
|
||||
|
||||
// If no other corpses, process normally
|
||||
if (nearbyCorpses.empty())
|
||||
{
|
||||
player->SendLoot(targetGuid, LOOT_CORPSE);
|
||||
return false;
|
||||
}
|
||||
|
||||
// Get main loot
|
||||
Loot* mainLoot = &mainCreature->loot;
|
||||
|
||||
// Limit number of corpses to process
|
||||
size_t const maxCorpses = 10; // set to 10 to improve stability
|
||||
size_t processedCorpses = 0;
|
||||
|
||||
// Track total gold to merge
|
||||
uint32 totalGold = mainLoot->gold;
|
||||
|
||||
// Collect all items to merge (don't modify main loot directly)
|
||||
std::vector<LootItem> itemsToAdd;
|
||||
std::vector<LootItem> questItemsToAdd;
|
||||
|
||||
for (Creature* creature : nearbyCorpses)
|
||||
{
|
||||
if (processedCorpses >= maxCorpses)
|
||||
break;
|
||||
|
||||
if (!creature)
|
||||
continue;
|
||||
|
||||
Loot* loot = &creature->loot;
|
||||
|
||||
// Skip already looted corpses
|
||||
if (loot->isLooted())
|
||||
continue;
|
||||
|
||||
// Collect gold
|
||||
if (loot->gold > 0)
|
||||
{
|
||||
// Prevent overflow
|
||||
if (totalGold < (std::numeric_limits<uint32>::max() - loot->gold))
|
||||
totalGold += loot->gold;
|
||||
}
|
||||
|
||||
// Collect regular items
|
||||
for (size_t i = 0; i < loot->items.size(); ++i)
|
||||
{
|
||||
// Check if there's still space
|
||||
if ((mainLoot->items.size() + itemsToAdd.size() + mainLoot->quest_items.size() + questItemsToAdd.size()) >= MAX_LOOT_ITEMS)
|
||||
break;
|
||||
|
||||
itemsToAdd.push_back(loot->items[i]);
|
||||
}
|
||||
|
||||
// Collect quest items (only for active quests, limited to needed count)
|
||||
for (size_t i = 0; i < loot->quest_items.size(); ++i)
|
||||
{
|
||||
// Check if there's still space
|
||||
if ((mainLoot->items.size() + itemsToAdd.size() + mainLoot->quest_items.size() + questItemsToAdd.size()) >= MAX_LOOT_ITEMS)
|
||||
break;
|
||||
|
||||
LootItem const& questItem = loot->quest_items[i];
|
||||
|
||||
// Skip items the player doesn't need for any active quest
|
||||
if (!player->HasQuestForItem(questItem.itemid))
|
||||
continue;
|
||||
|
||||
// Calculate how many the player still needs across all active quests
|
||||
uint32 maxNeeded = 0;
|
||||
for (uint8 slot = 0; slot < MAX_QUEST_LOG_SIZE; ++slot)
|
||||
{
|
||||
uint32 questId = player->GetQuestSlotQuestId(slot);
|
||||
if (!questId)
|
||||
continue;
|
||||
|
||||
Quest const* quest = sObjectMgr->GetQuestTemplate(questId);
|
||||
if (!quest)
|
||||
continue;
|
||||
|
||||
for (uint8 j = 0; j < QUEST_ITEM_OBJECTIVES_COUNT; ++j)
|
||||
{
|
||||
if (quest->RequiredItemId[j] == questItem.itemid && quest->RequiredItemCount[j] > maxNeeded)
|
||||
maxNeeded = quest->RequiredItemCount[j];
|
||||
}
|
||||
}
|
||||
|
||||
if (maxNeeded == 0)
|
||||
continue;
|
||||
|
||||
// Count how many the player already has, plus pending adds
|
||||
// and quest items already in the main loot window
|
||||
uint32 ownedCount = player->GetItemCount(questItem.itemid, true);
|
||||
for (auto const& pending : questItemsToAdd)
|
||||
{
|
||||
if (pending.itemid == questItem.itemid)
|
||||
ownedCount += pending.count;
|
||||
}
|
||||
for (auto const& mainQuestItem : mainLoot->quest_items)
|
||||
{
|
||||
if (mainQuestItem.itemid == questItem.itemid)
|
||||
ownedCount += mainQuestItem.count;
|
||||
}
|
||||
|
||||
if (ownedCount >= maxNeeded)
|
||||
continue;
|
||||
|
||||
uint32 stillNeeded = maxNeeded - ownedCount;
|
||||
LootItem cappedItem = questItem;
|
||||
cappedItem.count = std::min(static_cast<uint32>(questItem.count), stillNeeded);
|
||||
|
||||
questItemsToAdd.push_back(cappedItem);
|
||||
}
|
||||
|
||||
// Clear source loot (but don't modify vector directly)
|
||||
loot->clear();
|
||||
creature->AllLootRemovedFromCorpse();
|
||||
creature->RemoveDynamicFlag(UNIT_DYNFLAG_LOOTABLE);
|
||||
|
||||
processedCorpses++;
|
||||
}
|
||||
|
||||
// Now safely add collected items to main loot
|
||||
// Update gold
|
||||
mainLoot->gold = totalGold;
|
||||
|
||||
// Add regular items
|
||||
for (const auto& item : itemsToAdd)
|
||||
{
|
||||
if (mainLoot->items.size() < MAX_LOOT_ITEMS)
|
||||
mainLoot->items.push_back(item);
|
||||
}
|
||||
|
||||
// Add quest items directly to player inventory
|
||||
for (const auto& item : questItemsToAdd)
|
||||
{
|
||||
if (!player->HasQuestForItem(item.itemid))
|
||||
continue;
|
||||
|
||||
player->AddItem(item.itemid, item.count);
|
||||
}
|
||||
|
||||
// Send merged loot window
|
||||
player->SendLoot(targetGuid, LOOT_CORPSE);
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
ChatCommandTable AoeLootCommandScript::GetCommands() const
|
||||
{
|
||||
static ChatCommandTable aoeLootSubCommandTable =
|
||||
{
|
||||
{ "on", HandleAoeLootOnCommand, SEC_PLAYER, Console::No },
|
||||
{ "off", HandleAoeLootOffCommand, SEC_PLAYER, Console::No }
|
||||
};
|
||||
|
||||
static ChatCommandTable aoeLootCommandTable =
|
||||
{
|
||||
{ "aoeloot", aoeLootSubCommandTable }
|
||||
};
|
||||
|
||||
return aoeLootCommandTable;
|
||||
}
|
||||
|
||||
bool AoeLootCommandScript::hasPlayerAoeLootEnabled(uint64 guid)
|
||||
{
|
||||
return playerAoeLootEnabled.count(guid) > 0;
|
||||
}
|
||||
|
||||
bool AoeLootCommandScript::getPlayerAoeLootEnabled(uint64 guid)
|
||||
{
|
||||
auto it = playerAoeLootEnabled.find(guid);
|
||||
if (it != playerAoeLootEnabled.end())
|
||||
return it->second;
|
||||
return false;
|
||||
}
|
||||
|
||||
void AoeLootCommandScript::setPlayerAoeLootEnabled(uint64 guid, bool mode)
|
||||
{
|
||||
playerAoeLootEnabled[guid] = mode;
|
||||
}
|
||||
|
||||
bool AoeLootCommandScript::HandleAoeLootOnCommand(ChatHandler* handler, Optional<std::string> /*args*/)
|
||||
{
|
||||
Player* player = handler->GetSession()->GetPlayer();
|
||||
if (!player)
|
||||
return true;
|
||||
|
||||
uint64 playerGuid = player->GetGUID().GetRawValue();
|
||||
|
||||
if (AoeLootCommandScript::hasPlayerAoeLootEnabled(playerGuid) &&
|
||||
AoeLootCommandScript::getPlayerAoeLootEnabled(playerGuid))
|
||||
{
|
||||
handler->PSendModuleSysMessage(MODULE_STRING, AOE_LOOT_ALREADY_ENABLED);
|
||||
return true;
|
||||
}
|
||||
|
||||
AoeLootCommandScript::setPlayerAoeLootEnabled(playerGuid, true);
|
||||
handler->PSendModuleSysMessage(MODULE_STRING, AOE_LOOT_ENABLED);
|
||||
return true;
|
||||
}
|
||||
|
||||
bool AoeLootCommandScript::HandleAoeLootOffCommand(ChatHandler* handler, Optional<std::string> /*args*/)
|
||||
{
|
||||
Player* player = handler->GetSession()->GetPlayer();
|
||||
if (!player)
|
||||
return true;
|
||||
|
||||
uint64 playerGuid = player->GetGUID().GetRawValue();
|
||||
|
||||
if (AoeLootCommandScript::hasPlayerAoeLootEnabled(playerGuid) &&
|
||||
!AoeLootCommandScript::getPlayerAoeLootEnabled(playerGuid))
|
||||
{
|
||||
handler->PSendModuleSysMessage(MODULE_STRING, AOE_LOOT_ALREADY_DISABLED);
|
||||
return true;
|
||||
}
|
||||
|
||||
AoeLootCommandScript::setPlayerAoeLootEnabled(playerGuid, false);
|
||||
handler->PSendModuleSysMessage(MODULE_STRING, AOE_LOOT_DISABLED);
|
||||
return true;
|
||||
}
|
||||
@@ -0,0 +1,138 @@
|
||||
/*
|
||||
* This file is part of the AzerothCore Project. See AUTHORS file for Copyright information
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify it
|
||||
* under the terms of the GNU General Public License as published by the
|
||||
* Free Software Foundation; either version 2 of the License, or (at your
|
||||
* option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
||||
* more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License along
|
||||
* with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#ifndef MODULE_AOELOOT_H
|
||||
#define MODULE_AOELOOT_H
|
||||
|
||||
#include "ScriptMgr.h"
|
||||
#include "Config.h"
|
||||
#include "Chat.h"
|
||||
#include "Player.h"
|
||||
#include "ScriptedGossip.h"
|
||||
#include "Group.h"
|
||||
#include "LootMgr.h"
|
||||
#include "Creature.h"
|
||||
#include "Log.h"
|
||||
#include <vector>
|
||||
#include <list>
|
||||
#include <algorithm>
|
||||
#include <string>
|
||||
|
||||
#define MODULE_STRING "mod-aoe-loot"
|
||||
|
||||
// Maximum loot items count
|
||||
constexpr size_t MAX_LOOT_ITEMS = 16;
|
||||
using namespace Acore::ChatCommands;
|
||||
|
||||
enum AoeLootString
|
||||
{
|
||||
AOE_LOGIN_MESSAGE = 1, // Login message
|
||||
AOE_ITEM_IN_THE_MAIL = 2, // Mail notification
|
||||
AOE_MODULE_ACTIVE = 3, // unused
|
||||
AOE_QUEST_ITEM_SENT = 4, // unused
|
||||
AOE_LOOT_ALREADY_ENABLED = 5, // Already enabled message
|
||||
AOE_LOOT_ENABLED = 6, // Enabled confirmation
|
||||
AOE_LOOT_ALREADY_DISABLED = 7, // Already disabled message
|
||||
AOE_LOOT_DISABLED = 8 // Disabled confirmation
|
||||
};
|
||||
|
||||
class AOELootPlayer : public PlayerScript
|
||||
{
|
||||
public:
|
||||
AOELootPlayer() : PlayerScript("AOELootPlayer", { PLAYERHOOK_ON_LOGIN }) {}
|
||||
|
||||
void OnPlayerLogin(Player* player) override;
|
||||
};
|
||||
|
||||
class AOELootServer : public ServerScript
|
||||
{
|
||||
public:
|
||||
AOELootServer() : ServerScript("AOELootServer", { SERVERHOOK_CAN_PACKET_RECEIVE }) {}
|
||||
|
||||
bool CanPacketReceive(WorldSession* session, WorldPacket const& packet) override;
|
||||
|
||||
private:
|
||||
// Helper function - Check if loot is valid
|
||||
bool IsLootValid(Loot* loot) const;
|
||||
|
||||
// Check if loot can be merged
|
||||
bool CanMergeLoot(Player* player, Creature* creature) const;
|
||||
|
||||
// Safely get item count
|
||||
size_t GetSafeItemCount(Loot* loot) const;
|
||||
|
||||
// Safely merge loot items
|
||||
bool SafeMergeLootItems(Loot* mainLoot, Loot* sourceLoot, size_t& remainingSlots);
|
||||
};
|
||||
|
||||
// Configuration options structure (optional, for better config management)
|
||||
struct AOELootConfig
|
||||
{
|
||||
bool enabled = true;
|
||||
bool messageOnLogin = true;
|
||||
bool allowInGroup = true;
|
||||
float range = 55.0f;
|
||||
uint32 maxCorpses = 20;
|
||||
|
||||
static AOELootConfig* instance()
|
||||
{
|
||||
static AOELootConfig instance;
|
||||
return &instance;
|
||||
}
|
||||
|
||||
void Load()
|
||||
{
|
||||
enabled = sConfigMgr->GetOption<bool>("AOELoot.Enable", true);
|
||||
messageOnLogin = sConfigMgr->GetOption<bool>("AOELoot.Message", true);
|
||||
allowInGroup = sConfigMgr->GetOption<bool>("AOELoot.Group", true);
|
||||
range = sConfigMgr->GetOption<float>("AOELoot.Range", 55.0f);
|
||||
maxCorpses = sConfigMgr->GetOption<uint32>("AOELoot.MaxCorpses", 20);
|
||||
|
||||
// Validate configuration values
|
||||
if (range < 5.0f) range = 5.0f;
|
||||
if (range > 100.0f) range = 100.0f;
|
||||
if (maxCorpses < 1) maxCorpses = 1;
|
||||
if (maxCorpses > 50) maxCorpses = 50;
|
||||
}
|
||||
};
|
||||
|
||||
class AoeLootCommandScript : public CommandScript
|
||||
{
|
||||
public:
|
||||
AoeLootCommandScript() : CommandScript("AoeLootCommandScript") {}
|
||||
ChatCommandTable GetCommands() const override;
|
||||
|
||||
static bool HandleAoeLootOnCommand(ChatHandler* handler, Optional<std::string> args);
|
||||
static bool HandleAoeLootOffCommand(ChatHandler* handler, Optional<std::string> args);
|
||||
|
||||
// Getters and setters for player AOE loot settings
|
||||
static bool getPlayerAoeLootEnabled(uint64 guid);
|
||||
static void setPlayerAoeLootEnabled(uint64 guid, bool mode);
|
||||
static bool hasPlayerAoeLootEnabled(uint64 guid);
|
||||
|
||||
private:
|
||||
static std::map<uint64, bool> playerAoeLootEnabled;
|
||||
};
|
||||
|
||||
void AddSC_AoeLoot()
|
||||
{
|
||||
new AOELootPlayer();
|
||||
new AOELootServer();
|
||||
new AoeLootCommandScript();
|
||||
}
|
||||
|
||||
#endif //MODULE_AOELOOT_H
|
||||
@@ -0,0 +1,25 @@
|
||||
/*
|
||||
* This file is part of the AzerothCore Project. See AUTHORS file for Copyright information
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify it
|
||||
* under the terms of the GNU General Public License as published by the
|
||||
* Free Software Foundation; either version 2 of the License, or (at your
|
||||
* option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
||||
* more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License along
|
||||
* with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
// From SC
|
||||
void AddSC_AoeLoot();
|
||||
|
||||
// Add all
|
||||
void Addmod_aoe_lootScripts()
|
||||
{
|
||||
AddSC_AoeLoot();
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
[*]
|
||||
charset = utf-8
|
||||
indent_style = space
|
||||
indent_size = 4
|
||||
tab_width = 4
|
||||
insert_final_newline = true
|
||||
trim_trailing_whitespace = true
|
||||
max_line_length = 80
|
||||
@@ -0,0 +1,49 @@
|
||||
### TITLE
|
||||
## Type(Scope/Subscope): Commit ultra short explanation
|
||||
## |---- Write below the examples with a maximum of 50 characters ----|
|
||||
## Example 1: fix(DB/SAI): Missing spell to NPC Hogger
|
||||
## Example 2: fix(CORE/Raid): Phase 2 of Ragnaros
|
||||
## Example 3: feat(CORE/Commands): New GM command to do something
|
||||
|
||||
|
||||
### DESCRIPTION
|
||||
## Explain why this change is being made, what does it fix etc...
|
||||
## |---- Write below the examples with a maximum of 72 characters per lines ----|
|
||||
## Example: Hogger (id: 492) was not charging player when being engaged.
|
||||
|
||||
|
||||
## Provide links to any issue, commit, pull request or other resource
|
||||
## Example 1: Closes issue #23
|
||||
## Example 2: Ported from other project's commit (link)
|
||||
## Example 3: References taken from wowpedia / wowhead / wowwiki / https://wowgaming.altervista.org/aowow/
|
||||
|
||||
|
||||
|
||||
## =======================================================
|
||||
## EXTRA INFOS
|
||||
## =======================================================
|
||||
## "Type" can be:
|
||||
## feat (new feature)
|
||||
## fix (bug fix)
|
||||
## refactor (refactoring production code)
|
||||
## style (formatting, missing semi colons, etc; no code change)
|
||||
## docs (changes to documentation)
|
||||
## test (adding or refactoring tests; no production code change)
|
||||
## chore (updating bash scripts, git files etc; no production code change)
|
||||
## --------------------
|
||||
## Remember to
|
||||
## Capitalize the subject line
|
||||
## Use the imperative mood in the subject line
|
||||
## Do not end the subject line with a period
|
||||
## Separate subject from body with a blank line
|
||||
## Use the body to explain what and why rather than how
|
||||
## Can use multiple lines with "-" for bullet points in body
|
||||
## --------------------
|
||||
## More info here https://www.conventionalcommits.org/en/v1.0.0-beta.2/
|
||||
## =======================================================
|
||||
## "Scope" can be:
|
||||
## CORE (core related, c++)
|
||||
## DB (database related, sql)
|
||||
## =======================================================
|
||||
## "Subscope" is optional and depends on the nature of the commit.
|
||||
## =======================================================
|
||||
@@ -0,0 +1,105 @@
|
||||
## AUTO-DETECT
|
||||
## Handle line endings automatically for files detected as
|
||||
## text and leave all files detected as binary untouched.
|
||||
## This will handle all files NOT defined below.
|
||||
* text=auto eol=lf
|
||||
|
||||
# Text
|
||||
*.conf text
|
||||
*.conf.dist text
|
||||
*.cmake text
|
||||
|
||||
## Scripts
|
||||
*.sh text
|
||||
*.fish text
|
||||
*.lua text
|
||||
|
||||
## SQL
|
||||
*.sql text
|
||||
|
||||
## C++
|
||||
*.c text
|
||||
*.cc text
|
||||
*.cxx text
|
||||
*.cpp text
|
||||
*.c++ text
|
||||
*.hpp text
|
||||
*.h text
|
||||
*.h++ text
|
||||
*.hh text
|
||||
|
||||
|
||||
## For documentation
|
||||
|
||||
# Documents
|
||||
*.doc diff=astextplain
|
||||
*.DOC diff=astextplain
|
||||
*.docx diff=astextplain
|
||||
*.DOCX diff=astextplain
|
||||
*.dot diff=astextplain
|
||||
*.DOT diff=astextplain
|
||||
*.pdf diff=astextplain
|
||||
*.PDF diff=astextplain
|
||||
*.rtf diff=astextplain
|
||||
*.RTF diff=astextplain
|
||||
|
||||
## DOCUMENTATION
|
||||
*.markdown text
|
||||
*.md text
|
||||
*.mdwn text
|
||||
*.mdown text
|
||||
*.mkd text
|
||||
*.mkdn text
|
||||
*.mdtxt text
|
||||
*.mdtext text
|
||||
*.txt text
|
||||
AUTHORS text
|
||||
CHANGELOG text
|
||||
CHANGES text
|
||||
CONTRIBUTING text
|
||||
COPYING text
|
||||
copyright text
|
||||
*COPYRIGHT* text
|
||||
INSTALL text
|
||||
license text
|
||||
LICENSE text
|
||||
NEWS text
|
||||
readme text
|
||||
*README* text
|
||||
TODO text
|
||||
|
||||
## GRAPHICS
|
||||
*.ai binary
|
||||
*.bmp binary
|
||||
*.eps binary
|
||||
*.gif binary
|
||||
*.ico binary
|
||||
*.jng binary
|
||||
*.jp2 binary
|
||||
*.jpg binary
|
||||
*.jpeg binary
|
||||
*.jpx binary
|
||||
*.jxr binary
|
||||
*.pdf binary
|
||||
*.png binary
|
||||
*.psb binary
|
||||
*.psd binary
|
||||
*.svg text
|
||||
*.svgz binary
|
||||
*.tif binary
|
||||
*.tiff binary
|
||||
*.wbmp binary
|
||||
*.webp binary
|
||||
|
||||
|
||||
## ARCHIVES
|
||||
*.7z binary
|
||||
*.gz binary
|
||||
*.jar binary
|
||||
*.rar binary
|
||||
*.tar binary
|
||||
*.zip binary
|
||||
|
||||
## EXECUTABLES
|
||||
*.exe binary
|
||||
*.pyc binary
|
||||
@@ -0,0 +1,12 @@
|
||||
name: core-build
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- 'master'
|
||||
pull_request:
|
||||
|
||||
jobs:
|
||||
build:
|
||||
uses: azerothcore/reusable-workflows/.github/workflows/core_build_modules.yml@main
|
||||
with:
|
||||
module_repo: ${{ github.event.repository.name }}
|
||||
@@ -0,0 +1,48 @@
|
||||
!.gitignore
|
||||
|
||||
#
|
||||
#Generic
|
||||
#
|
||||
|
||||
.directory
|
||||
.mailmap
|
||||
*.orig
|
||||
*.rej
|
||||
*.*~
|
||||
.hg/
|
||||
*.kdev*
|
||||
.DS_Store
|
||||
CMakeLists.txt.user
|
||||
*.bak
|
||||
*.patch
|
||||
*.diff
|
||||
*.REMOTE.*
|
||||
*.BACKUP.*
|
||||
*.BASE.*
|
||||
*.LOCAL.*
|
||||
|
||||
#
|
||||
# IDE & other softwares
|
||||
#
|
||||
/.settings/
|
||||
/.externalToolBuilders/*
|
||||
# exclude in all levels
|
||||
nbproject/
|
||||
.sync.ffs_db
|
||||
*.kate-swp
|
||||
|
||||
#
|
||||
# Eclipse
|
||||
#
|
||||
*.pydevproject
|
||||
.metadata
|
||||
.gradle
|
||||
tmp/
|
||||
*.tmp
|
||||
*.swp
|
||||
*~.nib
|
||||
local.properties
|
||||
.settings/
|
||||
.loadpath
|
||||
.project
|
||||
.cproject
|
||||
@@ -0,0 +1,661 @@
|
||||
GNU AFFERO GENERAL PUBLIC LICENSE
|
||||
Version 3, 19 November 2007
|
||||
|
||||
Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
|
||||
Everyone is permitted to copy and distribute verbatim copies
|
||||
of this license document, but changing it is not allowed.
|
||||
|
||||
Preamble
|
||||
|
||||
The GNU Affero General Public License is a free, copyleft license for
|
||||
software and other kinds of works, specifically designed to ensure
|
||||
cooperation with the community in the case of network server software.
|
||||
|
||||
The licenses for most software and other practical works are designed
|
||||
to take away your freedom to share and change the works. By contrast,
|
||||
our General Public Licenses are intended to guarantee your freedom to
|
||||
share and change all versions of a program--to make sure it remains free
|
||||
software for all its users.
|
||||
|
||||
When we speak of free software, we are referring to freedom, not
|
||||
price. Our General Public Licenses are designed to make sure that you
|
||||
have the freedom to distribute copies of free software (and charge for
|
||||
them if you wish), that you receive source code or can get it if you
|
||||
want it, that you can change the software or use pieces of it in new
|
||||
free programs, and that you know you can do these things.
|
||||
|
||||
Developers that use our General Public Licenses protect your rights
|
||||
with two steps: (1) assert copyright on the software, and (2) offer
|
||||
you this License which gives you legal permission to copy, distribute
|
||||
and/or modify the software.
|
||||
|
||||
A secondary benefit of defending all users' freedom is that
|
||||
improvements made in alternate versions of the program, if they
|
||||
receive widespread use, become available for other developers to
|
||||
incorporate. Many developers of free software are heartened and
|
||||
encouraged by the resulting cooperation. However, in the case of
|
||||
software used on network servers, this result may fail to come about.
|
||||
The GNU General Public License permits making a modified version and
|
||||
letting the public access it on a server without ever releasing its
|
||||
source code to the public.
|
||||
|
||||
The GNU Affero General Public License is designed specifically to
|
||||
ensure that, in such cases, the modified source code becomes available
|
||||
to the community. It requires the operator of a network server to
|
||||
provide the source code of the modified version running there to the
|
||||
users of that server. Therefore, public use of a modified version, on
|
||||
a publicly accessible server, gives the public access to the source
|
||||
code of the modified version.
|
||||
|
||||
An older license, called the Affero General Public License and
|
||||
published by Affero, was designed to accomplish similar goals. This is
|
||||
a different license, not a version of the Affero GPL, but Affero has
|
||||
released a new version of the Affero GPL which permits relicensing under
|
||||
this license.
|
||||
|
||||
The precise terms and conditions for copying, distribution and
|
||||
modification follow.
|
||||
|
||||
TERMS AND CONDITIONS
|
||||
|
||||
0. Definitions.
|
||||
|
||||
"This License" refers to version 3 of the GNU Affero General Public License.
|
||||
|
||||
"Copyright" also means copyright-like laws that apply to other kinds of
|
||||
works, such as semiconductor masks.
|
||||
|
||||
"The Program" refers to any copyrightable work licensed under this
|
||||
License. Each licensee is addressed as "you". "Licensees" and
|
||||
"recipients" may be individuals or organizations.
|
||||
|
||||
To "modify" a work means to copy from or adapt all or part of the work
|
||||
in a fashion requiring copyright permission, other than the making of an
|
||||
exact copy. The resulting work is called a "modified version" of the
|
||||
earlier work or a work "based on" the earlier work.
|
||||
|
||||
A "covered work" means either the unmodified Program or a work based
|
||||
on the Program.
|
||||
|
||||
To "propagate" a work means to do anything with it that, without
|
||||
permission, would make you directly or secondarily liable for
|
||||
infringement under applicable copyright law, except executing it on a
|
||||
computer or modifying a private copy. Propagation includes copying,
|
||||
distribution (with or without modification), making available to the
|
||||
public, and in some countries other activities as well.
|
||||
|
||||
To "convey" a work means any kind of propagation that enables other
|
||||
parties to make or receive copies. Mere interaction with a user through
|
||||
a computer network, with no transfer of a copy, is not conveying.
|
||||
|
||||
An interactive user interface displays "Appropriate Legal Notices"
|
||||
to the extent that it includes a convenient and prominently visible
|
||||
feature that (1) displays an appropriate copyright notice, and (2)
|
||||
tells the user that there is no warranty for the work (except to the
|
||||
extent that warranties are provided), that licensees may convey the
|
||||
work under this License, and how to view a copy of this License. If
|
||||
the interface presents a list of user commands or options, such as a
|
||||
menu, a prominent item in the list meets this criterion.
|
||||
|
||||
1. Source Code.
|
||||
|
||||
The "source code" for a work means the preferred form of the work
|
||||
for making modifications to it. "Object code" means any non-source
|
||||
form of a work.
|
||||
|
||||
A "Standard Interface" means an interface that either is an official
|
||||
standard defined by a recognized standards body, or, in the case of
|
||||
interfaces specified for a particular programming language, one that
|
||||
is widely used among developers working in that language.
|
||||
|
||||
The "System Libraries" of an executable work include anything, other
|
||||
than the work as a whole, that (a) is included in the normal form of
|
||||
packaging a Major Component, but which is not part of that Major
|
||||
Component, and (b) serves only to enable use of the work with that
|
||||
Major Component, or to implement a Standard Interface for which an
|
||||
implementation is available to the public in source code form. A
|
||||
"Major Component", in this context, means a major essential component
|
||||
(kernel, window system, and so on) of the specific operating system
|
||||
(if any) on which the executable work runs, or a compiler used to
|
||||
produce the work, or an object code interpreter used to run it.
|
||||
|
||||
The "Corresponding Source" for a work in object code form means all
|
||||
the source code needed to generate, install, and (for an executable
|
||||
work) run the object code and to modify the work, including scripts to
|
||||
control those activities. However, it does not include the work's
|
||||
System Libraries, or general-purpose tools or generally available free
|
||||
programs which are used unmodified in performing those activities but
|
||||
which are not part of the work. For example, Corresponding Source
|
||||
includes interface definition files associated with source files for
|
||||
the work, and the source code for shared libraries and dynamically
|
||||
linked subprograms that the work is specifically designed to require,
|
||||
such as by intimate data communication or control flow between those
|
||||
subprograms and other parts of the work.
|
||||
|
||||
The Corresponding Source need not include anything that users
|
||||
can regenerate automatically from other parts of the Corresponding
|
||||
Source.
|
||||
|
||||
The Corresponding Source for a work in source code form is that
|
||||
same work.
|
||||
|
||||
2. Basic Permissions.
|
||||
|
||||
All rights granted under this License are granted for the term of
|
||||
copyright on the Program, and are irrevocable provided the stated
|
||||
conditions are met. This License explicitly affirms your unlimited
|
||||
permission to run the unmodified Program. The output from running a
|
||||
covered work is covered by this License only if the output, given its
|
||||
content, constitutes a covered work. This License acknowledges your
|
||||
rights of fair use or other equivalent, as provided by copyright law.
|
||||
|
||||
You may make, run and propagate covered works that you do not
|
||||
convey, without conditions so long as your license otherwise remains
|
||||
in force. You may convey covered works to others for the sole purpose
|
||||
of having them make modifications exclusively for you, or provide you
|
||||
with facilities for running those works, provided that you comply with
|
||||
the terms of this License in conveying all material for which you do
|
||||
not control copyright. Those thus making or running the covered works
|
||||
for you must do so exclusively on your behalf, under your direction
|
||||
and control, on terms that prohibit them from making any copies of
|
||||
your copyrighted material outside their relationship with you.
|
||||
|
||||
Conveying under any other circumstances is permitted solely under
|
||||
the conditions stated below. Sublicensing is not allowed; section 10
|
||||
makes it unnecessary.
|
||||
|
||||
3. Protecting Users' Legal Rights From Anti-Circumvention Law.
|
||||
|
||||
No covered work shall be deemed part of an effective technological
|
||||
measure under any applicable law fulfilling obligations under article
|
||||
11 of the WIPO copyright treaty adopted on 20 December 1996, or
|
||||
similar laws prohibiting or restricting circumvention of such
|
||||
measures.
|
||||
|
||||
When you convey a covered work, you waive any legal power to forbid
|
||||
circumvention of technological measures to the extent such circumvention
|
||||
is effected by exercising rights under this License with respect to
|
||||
the covered work, and you disclaim any intention to limit operation or
|
||||
modification of the work as a means of enforcing, against the work's
|
||||
users, your or third parties' legal rights to forbid circumvention of
|
||||
technological measures.
|
||||
|
||||
4. Conveying Verbatim Copies.
|
||||
|
||||
You may convey verbatim copies of the Program's source code as you
|
||||
receive it, in any medium, provided that you conspicuously and
|
||||
appropriately publish on each copy an appropriate copyright notice;
|
||||
keep intact all notices stating that this License and any
|
||||
non-permissive terms added in accord with section 7 apply to the code;
|
||||
keep intact all notices of the absence of any warranty; and give all
|
||||
recipients a copy of this License along with the Program.
|
||||
|
||||
You may charge any price or no price for each copy that you convey,
|
||||
and you may offer support or warranty protection for a fee.
|
||||
|
||||
5. Conveying Modified Source Versions.
|
||||
|
||||
You may convey a work based on the Program, or the modifications to
|
||||
produce it from the Program, in the form of source code under the
|
||||
terms of section 4, provided that you also meet all of these conditions:
|
||||
|
||||
a) The work must carry prominent notices stating that you modified
|
||||
it, and giving a relevant date.
|
||||
|
||||
b) The work must carry prominent notices stating that it is
|
||||
released under this License and any conditions added under section
|
||||
7. This requirement modifies the requirement in section 4 to
|
||||
"keep intact all notices".
|
||||
|
||||
c) You must license the entire work, as a whole, under this
|
||||
License to anyone who comes into possession of a copy. This
|
||||
License will therefore apply, along with any applicable section 7
|
||||
additional terms, to the whole of the work, and all its parts,
|
||||
regardless of how they are packaged. This License gives no
|
||||
permission to license the work in any other way, but it does not
|
||||
invalidate such permission if you have separately received it.
|
||||
|
||||
d) If the work has interactive user interfaces, each must display
|
||||
Appropriate Legal Notices; however, if the Program has interactive
|
||||
interfaces that do not display Appropriate Legal Notices, your
|
||||
work need not make them do so.
|
||||
|
||||
A compilation of a covered work with other separate and independent
|
||||
works, which are not by their nature extensions of the covered work,
|
||||
and which are not combined with it such as to form a larger program,
|
||||
in or on a volume of a storage or distribution medium, is called an
|
||||
"aggregate" if the compilation and its resulting copyright are not
|
||||
used to limit the access or legal rights of the compilation's users
|
||||
beyond what the individual works permit. Inclusion of a covered work
|
||||
in an aggregate does not cause this License to apply to the other
|
||||
parts of the aggregate.
|
||||
|
||||
6. Conveying Non-Source Forms.
|
||||
|
||||
You may convey a covered work in object code form under the terms
|
||||
of sections 4 and 5, provided that you also convey the
|
||||
machine-readable Corresponding Source under the terms of this License,
|
||||
in one of these ways:
|
||||
|
||||
a) Convey the object code in, or embodied in, a physical product
|
||||
(including a physical distribution medium), accompanied by the
|
||||
Corresponding Source fixed on a durable physical medium
|
||||
customarily used for software interchange.
|
||||
|
||||
b) Convey the object code in, or embodied in, a physical product
|
||||
(including a physical distribution medium), accompanied by a
|
||||
written offer, valid for at least three years and valid for as
|
||||
long as you offer spare parts or customer support for that product
|
||||
model, to give anyone who possesses the object code either (1) a
|
||||
copy of the Corresponding Source for all the software in the
|
||||
product that is covered by this License, on a durable physical
|
||||
medium customarily used for software interchange, for a price no
|
||||
more than your reasonable cost of physically performing this
|
||||
conveying of source, or (2) access to copy the
|
||||
Corresponding Source from a network server at no charge.
|
||||
|
||||
c) Convey individual copies of the object code with a copy of the
|
||||
written offer to provide the Corresponding Source. This
|
||||
alternative is allowed only occasionally and noncommercially, and
|
||||
only if you received the object code with such an offer, in accord
|
||||
with subsection 6b.
|
||||
|
||||
d) Convey the object code by offering access from a designated
|
||||
place (gratis or for a charge), and offer equivalent access to the
|
||||
Corresponding Source in the same way through the same place at no
|
||||
further charge. You need not require recipients to copy the
|
||||
Corresponding Source along with the object code. If the place to
|
||||
copy the object code is a network server, the Corresponding Source
|
||||
may be on a different server (operated by you or a third party)
|
||||
that supports equivalent copying facilities, provided you maintain
|
||||
clear directions next to the object code saying where to find the
|
||||
Corresponding Source. Regardless of what server hosts the
|
||||
Corresponding Source, you remain obligated to ensure that it is
|
||||
available for as long as needed to satisfy these requirements.
|
||||
|
||||
e) Convey the object code using peer-to-peer transmission, provided
|
||||
you inform other peers where the object code and Corresponding
|
||||
Source of the work are being offered to the general public at no
|
||||
charge under subsection 6d.
|
||||
|
||||
A separable portion of the object code, whose source code is excluded
|
||||
from the Corresponding Source as a System Library, need not be
|
||||
included in conveying the object code work.
|
||||
|
||||
A "User Product" is either (1) a "consumer product", which means any
|
||||
tangible personal property which is normally used for personal, family,
|
||||
or household purposes, or (2) anything designed or sold for incorporation
|
||||
into a dwelling. In determining whether a product is a consumer product,
|
||||
doubtful cases shall be resolved in favor of coverage. For a particular
|
||||
product received by a particular user, "normally used" refers to a
|
||||
typical or common use of that class of product, regardless of the status
|
||||
of the particular user or of the way in which the particular user
|
||||
actually uses, or expects or is expected to use, the product. A product
|
||||
is a consumer product regardless of whether the product has substantial
|
||||
commercial, industrial or non-consumer uses, unless such uses represent
|
||||
the only significant mode of use of the product.
|
||||
|
||||
"Installation Information" for a User Product means any methods,
|
||||
procedures, authorization keys, or other information required to install
|
||||
and execute modified versions of a covered work in that User Product from
|
||||
a modified version of its Corresponding Source. The information must
|
||||
suffice to ensure that the continued functioning of the modified object
|
||||
code is in no case prevented or interfered with solely because
|
||||
modification has been made.
|
||||
|
||||
If you convey an object code work under this section in, or with, or
|
||||
specifically for use in, a User Product, and the conveying occurs as
|
||||
part of a transaction in which the right of possession and use of the
|
||||
User Product is transferred to the recipient in perpetuity or for a
|
||||
fixed term (regardless of how the transaction is characterized), the
|
||||
Corresponding Source conveyed under this section must be accompanied
|
||||
by the Installation Information. But this requirement does not apply
|
||||
if neither you nor any third party retains the ability to install
|
||||
modified object code on the User Product (for example, the work has
|
||||
been installed in ROM).
|
||||
|
||||
The requirement to provide Installation Information does not include a
|
||||
requirement to continue to provide support service, warranty, or updates
|
||||
for a work that has been modified or installed by the recipient, or for
|
||||
the User Product in which it has been modified or installed. Access to a
|
||||
network may be denied when the modification itself materially and
|
||||
adversely affects the operation of the network or violates the rules and
|
||||
protocols for communication across the network.
|
||||
|
||||
Corresponding Source conveyed, and Installation Information provided,
|
||||
in accord with this section must be in a format that is publicly
|
||||
documented (and with an implementation available to the public in
|
||||
source code form), and must require no special password or key for
|
||||
unpacking, reading or copying.
|
||||
|
||||
7. Additional Terms.
|
||||
|
||||
"Additional permissions" are terms that supplement the terms of this
|
||||
License by making exceptions from one or more of its conditions.
|
||||
Additional permissions that are applicable to the entire Program shall
|
||||
be treated as though they were included in this License, to the extent
|
||||
that they are valid under applicable law. If additional permissions
|
||||
apply only to part of the Program, that part may be used separately
|
||||
under those permissions, but the entire Program remains governed by
|
||||
this License without regard to the additional permissions.
|
||||
|
||||
When you convey a copy of a covered work, you may at your option
|
||||
remove any additional permissions from that copy, or from any part of
|
||||
it. (Additional permissions may be written to require their own
|
||||
removal in certain cases when you modify the work.) You may place
|
||||
additional permissions on material, added by you to a covered work,
|
||||
for which you have or can give appropriate copyright permission.
|
||||
|
||||
Notwithstanding any other provision of this License, for material you
|
||||
add to a covered work, you may (if authorized by the copyright holders of
|
||||
that material) supplement the terms of this License with terms:
|
||||
|
||||
a) Disclaiming warranty or limiting liability differently from the
|
||||
terms of sections 15 and 16 of this License; or
|
||||
|
||||
b) Requiring preservation of specified reasonable legal notices or
|
||||
author attributions in that material or in the Appropriate Legal
|
||||
Notices displayed by works containing it; or
|
||||
|
||||
c) Prohibiting misrepresentation of the origin of that material, or
|
||||
requiring that modified versions of such material be marked in
|
||||
reasonable ways as different from the original version; or
|
||||
|
||||
d) Limiting the use for publicity purposes of names of licensors or
|
||||
authors of the material; or
|
||||
|
||||
e) Declining to grant rights under trademark law for use of some
|
||||
trade names, trademarks, or service marks; or
|
||||
|
||||
f) Requiring indemnification of licensors and authors of that
|
||||
material by anyone who conveys the material (or modified versions of
|
||||
it) with contractual assumptions of liability to the recipient, for
|
||||
any liability that these contractual assumptions directly impose on
|
||||
those licensors and authors.
|
||||
|
||||
All other non-permissive additional terms are considered "further
|
||||
restrictions" within the meaning of section 10. If the Program as you
|
||||
received it, or any part of it, contains a notice stating that it is
|
||||
governed by this License along with a term that is a further
|
||||
restriction, you may remove that term. If a license document contains
|
||||
a further restriction but permits relicensing or conveying under this
|
||||
License, you may add to a covered work material governed by the terms
|
||||
of that license document, provided that the further restriction does
|
||||
not survive such relicensing or conveying.
|
||||
|
||||
If you add terms to a covered work in accord with this section, you
|
||||
must place, in the relevant source files, a statement of the
|
||||
additional terms that apply to those files, or a notice indicating
|
||||
where to find the applicable terms.
|
||||
|
||||
Additional terms, permissive or non-permissive, may be stated in the
|
||||
form of a separately written license, or stated as exceptions;
|
||||
the above requirements apply either way.
|
||||
|
||||
8. Termination.
|
||||
|
||||
You may not propagate or modify a covered work except as expressly
|
||||
provided under this License. Any attempt otherwise to propagate or
|
||||
modify it is void, and will automatically terminate your rights under
|
||||
this License (including any patent licenses granted under the third
|
||||
paragraph of section 11).
|
||||
|
||||
However, if you cease all violation of this License, then your
|
||||
license from a particular copyright holder is reinstated (a)
|
||||
provisionally, unless and until the copyright holder explicitly and
|
||||
finally terminates your license, and (b) permanently, if the copyright
|
||||
holder fails to notify you of the violation by some reasonable means
|
||||
prior to 60 days after the cessation.
|
||||
|
||||
Moreover, your license from a particular copyright holder is
|
||||
reinstated permanently if the copyright holder notifies you of the
|
||||
violation by some reasonable means, this is the first time you have
|
||||
received notice of violation of this License (for any work) from that
|
||||
copyright holder, and you cure the violation prior to 30 days after
|
||||
your receipt of the notice.
|
||||
|
||||
Termination of your rights under this section does not terminate the
|
||||
licenses of parties who have received copies or rights from you under
|
||||
this License. If your rights have been terminated and not permanently
|
||||
reinstated, you do not qualify to receive new licenses for the same
|
||||
material under section 10.
|
||||
|
||||
9. Acceptance Not Required for Having Copies.
|
||||
|
||||
You are not required to accept this License in order to receive or
|
||||
run a copy of the Program. Ancillary propagation of a covered work
|
||||
occurring solely as a consequence of using peer-to-peer transmission
|
||||
to receive a copy likewise does not require acceptance. However,
|
||||
nothing other than this License grants you permission to propagate or
|
||||
modify any covered work. These actions infringe copyright if you do
|
||||
not accept this License. Therefore, by modifying or propagating a
|
||||
covered work, you indicate your acceptance of this License to do so.
|
||||
|
||||
10. Automatic Licensing of Downstream Recipients.
|
||||
|
||||
Each time you convey a covered work, the recipient automatically
|
||||
receives a license from the original licensors, to run, modify and
|
||||
propagate that work, subject to this License. You are not responsible
|
||||
for enforcing compliance by third parties with this License.
|
||||
|
||||
An "entity transaction" is a transaction transferring control of an
|
||||
organization, or substantially all assets of one, or subdividing an
|
||||
organization, or merging organizations. If propagation of a covered
|
||||
work results from an entity transaction, each party to that
|
||||
transaction who receives a copy of the work also receives whatever
|
||||
licenses to the work the party's predecessor in interest had or could
|
||||
give under the previous paragraph, plus a right to possession of the
|
||||
Corresponding Source of the work from the predecessor in interest, if
|
||||
the predecessor has it or can get it with reasonable efforts.
|
||||
|
||||
You may not impose any further restrictions on the exercise of the
|
||||
rights granted or affirmed under this License. For example, you may
|
||||
not impose a license fee, royalty, or other charge for exercise of
|
||||
rights granted under this License, and you may not initiate litigation
|
||||
(including a cross-claim or counterclaim in a lawsuit) alleging that
|
||||
any patent claim is infringed by making, using, selling, offering for
|
||||
sale, or importing the Program or any portion of it.
|
||||
|
||||
11. Patents.
|
||||
|
||||
A "contributor" is a copyright holder who authorizes use under this
|
||||
License of the Program or a work on which the Program is based. The
|
||||
work thus licensed is called the contributor's "contributor version".
|
||||
|
||||
A contributor's "essential patent claims" are all patent claims
|
||||
owned or controlled by the contributor, whether already acquired or
|
||||
hereafter acquired, that would be infringed by some manner, permitted
|
||||
by this License, of making, using, or selling its contributor version,
|
||||
but do not include claims that would be infringed only as a
|
||||
consequence of further modification of the contributor version. For
|
||||
purposes of this definition, "control" includes the right to grant
|
||||
patent sublicenses in a manner consistent with the requirements of
|
||||
this License.
|
||||
|
||||
Each contributor grants you a non-exclusive, worldwide, royalty-free
|
||||
patent license under the contributor's essential patent claims, to
|
||||
make, use, sell, offer for sale, import and otherwise run, modify and
|
||||
propagate the contents of its contributor version.
|
||||
|
||||
In the following three paragraphs, a "patent license" is any express
|
||||
agreement or commitment, however denominated, not to enforce a patent
|
||||
(such as an express permission to practice a patent or covenant not to
|
||||
sue for patent infringement). To "grant" such a patent license to a
|
||||
party means to make such an agreement or commitment not to enforce a
|
||||
patent against the party.
|
||||
|
||||
If you convey a covered work, knowingly relying on a patent license,
|
||||
and the Corresponding Source of the work is not available for anyone
|
||||
to copy, free of charge and under the terms of this License, through a
|
||||
publicly available network server or other readily accessible means,
|
||||
then you must either (1) cause the Corresponding Source to be so
|
||||
available, or (2) arrange to deprive yourself of the benefit of the
|
||||
patent license for this particular work, or (3) arrange, in a manner
|
||||
consistent with the requirements of this License, to extend the patent
|
||||
license to downstream recipients. "Knowingly relying" means you have
|
||||
actual knowledge that, but for the patent license, your conveying the
|
||||
covered work in a country, or your recipient's use of the covered work
|
||||
in a country, would infringe one or more identifiable patents in that
|
||||
country that you have reason to believe are valid.
|
||||
|
||||
If, pursuant to or in connection with a single transaction or
|
||||
arrangement, you convey, or propagate by procuring conveyance of, a
|
||||
covered work, and grant a patent license to some of the parties
|
||||
receiving the covered work authorizing them to use, propagate, modify
|
||||
or convey a specific copy of the covered work, then the patent license
|
||||
you grant is automatically extended to all recipients of the covered
|
||||
work and works based on it.
|
||||
|
||||
A patent license is "discriminatory" if it does not include within
|
||||
the scope of its coverage, prohibits the exercise of, or is
|
||||
conditioned on the non-exercise of one or more of the rights that are
|
||||
specifically granted under this License. You may not convey a covered
|
||||
work if you are a party to an arrangement with a third party that is
|
||||
in the business of distributing software, under which you make payment
|
||||
to the third party based on the extent of your activity of conveying
|
||||
the work, and under which the third party grants, to any of the
|
||||
parties who would receive the covered work from you, a discriminatory
|
||||
patent license (a) in connection with copies of the covered work
|
||||
conveyed by you (or copies made from those copies), or (b) primarily
|
||||
for and in connection with specific products or compilations that
|
||||
contain the covered work, unless you entered into that arrangement,
|
||||
or that patent license was granted, prior to 28 March 2007.
|
||||
|
||||
Nothing in this License shall be construed as excluding or limiting
|
||||
any implied license or other defenses to infringement that may
|
||||
otherwise be available to you under applicable patent law.
|
||||
|
||||
12. No Surrender of Others' Freedom.
|
||||
|
||||
If conditions are imposed on you (whether by court order, agreement or
|
||||
otherwise) that contradict the conditions of this License, they do not
|
||||
excuse you from the conditions of this License. If you cannot convey a
|
||||
covered work so as to satisfy simultaneously your obligations under this
|
||||
License and any other pertinent obligations, then as a consequence you may
|
||||
not convey it at all. For example, if you agree to terms that obligate you
|
||||
to collect a royalty for further conveying from those to whom you convey
|
||||
the Program, the only way you could satisfy both those terms and this
|
||||
License would be to refrain entirely from conveying the Program.
|
||||
|
||||
13. Remote Network Interaction; Use with the GNU General Public License.
|
||||
|
||||
Notwithstanding any other provision of this License, if you modify the
|
||||
Program, your modified version must prominently offer all users
|
||||
interacting with it remotely through a computer network (if your version
|
||||
supports such interaction) an opportunity to receive the Corresponding
|
||||
Source of your version by providing access to the Corresponding Source
|
||||
from a network server at no charge, through some standard or customary
|
||||
means of facilitating copying of software. This Corresponding Source
|
||||
shall include the Corresponding Source for any work covered by version 3
|
||||
of the GNU General Public License that is incorporated pursuant to the
|
||||
following paragraph.
|
||||
|
||||
Notwithstanding any other provision of this License, you have
|
||||
permission to link or combine any covered work with a work licensed
|
||||
under version 3 of the GNU General Public License into a single
|
||||
combined work, and to convey the resulting work. The terms of this
|
||||
License will continue to apply to the part which is the covered work,
|
||||
but the work with which it is combined will remain governed by version
|
||||
3 of the GNU General Public License.
|
||||
|
||||
14. Revised Versions of this License.
|
||||
|
||||
The Free Software Foundation may publish revised and/or new versions of
|
||||
the GNU Affero General Public License from time to time. Such new versions
|
||||
will be similar in spirit to the present version, but may differ in detail to
|
||||
address new problems or concerns.
|
||||
|
||||
Each version is given a distinguishing version number. If the
|
||||
Program specifies that a certain numbered version of the GNU Affero General
|
||||
Public License "or any later version" applies to it, you have the
|
||||
option of following the terms and conditions either of that numbered
|
||||
version or of any later version published by the Free Software
|
||||
Foundation. If the Program does not specify a version number of the
|
||||
GNU Affero General Public License, you may choose any version ever published
|
||||
by the Free Software Foundation.
|
||||
|
||||
If the Program specifies that a proxy can decide which future
|
||||
versions of the GNU Affero General Public License can be used, that proxy's
|
||||
public statement of acceptance of a version permanently authorizes you
|
||||
to choose that version for the Program.
|
||||
|
||||
Later license versions may give you additional or different
|
||||
permissions. However, no additional obligations are imposed on any
|
||||
author or copyright holder as a result of your choosing to follow a
|
||||
later version.
|
||||
|
||||
15. Disclaimer of Warranty.
|
||||
|
||||
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
|
||||
APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
|
||||
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
|
||||
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
|
||||
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
|
||||
IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
|
||||
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
|
||||
|
||||
16. Limitation of Liability.
|
||||
|
||||
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
|
||||
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
|
||||
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
|
||||
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
|
||||
USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
|
||||
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
|
||||
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
|
||||
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
|
||||
SUCH DAMAGES.
|
||||
|
||||
17. Interpretation of Sections 15 and 16.
|
||||
|
||||
If the disclaimer of warranty and limitation of liability provided
|
||||
above cannot be given local legal effect according to their terms,
|
||||
reviewing courts shall apply local law that most closely approximates
|
||||
an absolute waiver of all civil liability in connection with the
|
||||
Program, unless a warranty or assumption of liability accompanies a
|
||||
copy of the Program in return for a fee.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
How to Apply These Terms to Your New Programs
|
||||
|
||||
If you develop a new program, and you want it to be of the greatest
|
||||
possible use to the public, the best way to achieve this is to make it
|
||||
free software which everyone can redistribute and change under these terms.
|
||||
|
||||
To do so, attach the following notices to the program. It is safest
|
||||
to attach them to the start of each source file to most effectively
|
||||
state the exclusion of warranty; and each file should have at least
|
||||
the "copyright" line and a pointer to where the full notice is found.
|
||||
|
||||
<one line to give the program's name and a brief idea of what it does.>
|
||||
Copyright (C) <year> <name of author>
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU Affero General Public License as published
|
||||
by the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Affero General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Affero General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Also add information on how to contact you by electronic and paper mail.
|
||||
|
||||
If your software can interact with users remotely through a computer
|
||||
network, you should also make sure that it provides a way for users to
|
||||
get its source. For example, if your program is a web application, its
|
||||
interface could display a "Source" link that leads users to an archive
|
||||
of the code. There are many ways you could offer source, and different
|
||||
solutions will be better for different programs; see section 13 for the
|
||||
specific requirements.
|
||||
|
||||
You should also get your employer (if you work as a programmer) or school,
|
||||
if any, to sign a "copyright disclaimer" for the program, if necessary.
|
||||
For more information on this, and how to apply and follow the GNU AGPL, see
|
||||
<http://www.gnu.org/licenses/>.
|
||||
@@ -0,0 +1,73 @@
|
||||
# Transmog Module
|
||||
|
||||
> [!WARNING]
|
||||
> If you used the old-subscription system for TransmogPlus option before this [commit](https://github.com/azerothcore/mod-transmog/commit/8237df6f88d40d1d83a6f11b86a7187f99f57c99), please update your mod-transmog module to the latest revision and also download the new module [mod-acore-subscriptions](https://github.com/azerothcore/mod-acore-subscriptions).
|
||||
|
||||
- Latest Transmog build status with azerothcore: [](https://github.com/azerothcore/mod-transmog/actions)
|
||||
|
||||
This is a module for [AzerothCore](http://www.azerothcore.org) that adds **Transmog**rification feature, it's based on [Rochet2 Transmog Script](http://rochet2.github.io/Transmogrification.html)
|
||||
|
||||
## Important notes
|
||||
|
||||
You have to use at least this AzerothCore commit:
|
||||
|
||||
<https://github.com/azerothcore/azerothcore-wotlk/commit/b6cb9247ba96a862ee274c0765004e6d2e66e9e4>
|
||||
|
||||
If using this module with an AzerothCore commit older than
|
||||
|
||||
<https://github.com/azerothcore/azerothcore-wotlk/commit/b34bc28e5b02514fca3519beac420c58faa89cad>
|
||||
|
||||
please delete the IDs 50000 and 50001 from npc_text before upgrading AzerothCore:
|
||||
```sql
|
||||
DELETE FROM `npc_text` WHERE `ID` IN (50000,50001);
|
||||
```
|
||||
Otherwise there will be conflicts for these IDs. The module will now use IDs 601083 and 601084 as default.
|
||||
|
||||
## Requirements
|
||||
|
||||
Transmogrification module currently requires:
|
||||
|
||||
AzerothCore v1.0.2+
|
||||
|
||||
## How to install
|
||||
|
||||
### 1) Simply place the module under the `modules` folder of your AzerothCore source folder.
|
||||
|
||||
You can do clone it via git under the azerothcore/modules directory:
|
||||
|
||||
```sh
|
||||
cd path/to/azerothcore/modules
|
||||
git clone https://github.com/azerothcore/mod-transmog.git
|
||||
```
|
||||
|
||||
or you can manually [download the module](https://github.com/azerothcore/mod-transmog/archive/master.zip), unzip the Transmog folder and place it under the `azerothcore/modules` directory.
|
||||
|
||||
### 2) Import the SQL to the right Database (auth, world or characters)
|
||||
|
||||
Import the SQL manually to the right Database (auth, world or characters) or with the `db_assembler.sh` (if `include.sh` provided).
|
||||
|
||||
### 3) Re-run cmake and launch a clean build of AzerothCore
|
||||
|
||||
### 4) Place transmog npc
|
||||
|
||||
With a gm account goto the location you want to add the npc and use this command:
|
||||
|
||||
```
|
||||
.npc add 190010
|
||||
```
|
||||
|
||||
**That's it.**
|
||||
|
||||
### (Optional) Edit module configuration
|
||||
|
||||
If you need to change the module configuration, go to your server configuration folder (e.g. **etc**), copy `transmog.conf.dist` to `transmog.conf` and edit it as you prefer.
|
||||
|
||||
|
||||
## License
|
||||
|
||||
This module is released under the [GNU AGPL license](https://github.com/azerothcore/mod-transmog/blob/master/LICENSE).
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,26 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
#
|
||||
# CUSTOM
|
||||
#
|
||||
|
||||
DB_CHARACTERS_CUSTOM_PATHS+=(
|
||||
$TRANSM_PATH_ROOT"/data/sql/db-characters/"
|
||||
)
|
||||
|
||||
DB_WORLD_CUSTOM_PATHS+=(
|
||||
$TRANSM_PATH_ROOT"/data/sql/db-world/"
|
||||
)
|
||||
|
||||
#
|
||||
# UPDATES
|
||||
#
|
||||
|
||||
DB_CHARACTERS_UPDATE_PATHS+=(
|
||||
$TRANSM_PATH_ROOT"/data/sql/updates/char/"
|
||||
)
|
||||
|
||||
DB_WORLD_UPDATE_PATHS+=(
|
||||
$TRANSM_PATH_ROOT"/data/sql/updates/world/"
|
||||
)
|
||||
|
||||
@@ -0,0 +1,345 @@
|
||||
[worldserver]
|
||||
|
||||
# Fractured / Paragon (class 12): stock item AllowableClass never includes the Paragon
|
||||
# class bit, so transmog eligibility must not gate on class (see mod-transmog
|
||||
# Transmogrification.cpp). Hybrid armor proficiency is also non-standard; relax
|
||||
# skill checks so appearances are not rejected when weapon/armor skills differ
|
||||
# from a single stock class.
|
||||
|
||||
###################################################################################################
|
||||
# Transmogrification config
|
||||
###################################################################################################
|
||||
#
|
||||
# SETTINGS
|
||||
#
|
||||
# Transmogrification.Enable
|
||||
# Description: Enables/Disables transmog.
|
||||
# Players won't be able to see any transmogrified item while disabled, however, database data remains intact.
|
||||
# Default: 1
|
||||
#
|
||||
# Transmogrification.ShowSetDisclaimer
|
||||
# Description: If enabled, players receive a chat notice when transmogrifying an item that belongs to a set,
|
||||
# explaining that set bonuses remain active even though the tooltip won't reflect them.
|
||||
# Players can suppress the notice per-character with: .transmog disclaimer off
|
||||
# Default: 0
|
||||
#
|
||||
# Transmogrification.UseCollectionSystem
|
||||
# Description: Enables/Disables Legion-style appearance collection system.
|
||||
# If enabled, players can use the appearance of any item equipped or rewarded from a completed quest.
|
||||
# If disabled, players must have an item in their bags to use as a transmogrification appearance source.
|
||||
# Default: 1
|
||||
#
|
||||
# Transmogrification.UseVendorInterface
|
||||
# Description: Enables/Disables the use of a fake vendor interface for item selection.
|
||||
# There are (optional) custom items available for Hide Item and Remove Transmog if data/sql/db-world/tasm_world_VendorItems.sql is imported.
|
||||
# If enabled, players can select items from a vendor menu, complete with ctrl-click previews.
|
||||
# If disabled, players will use the gossip menu to select items and will not have access to previews.
|
||||
# Default: 0
|
||||
#
|
||||
# Transmogrification.AllowHiddenTransmog
|
||||
# Description: Enables/Disables the hiding of equipment through transmog
|
||||
# If enabled, players can select an "invisible" appearance for items at the transmog vendor
|
||||
# Default: 1
|
||||
#
|
||||
# Transmogrification.HiddenTransmogIsFree
|
||||
# Description: Enables/Disables free hiding of items through the transmog system.
|
||||
# If enabled, players can hide pieces of equipment for free.
|
||||
# If disabled, players will be charged the standard transmog price (affected by all modifiers) to hide an item.
|
||||
# Default: 1
|
||||
#
|
||||
# Transmogrification.TrackUnusableItems
|
||||
# Description: If enabled, appearances are collected even for items that are not suitable for transmogrification.
|
||||
# This allows these appearances to be used later if the configuration is changed.
|
||||
# Default: 1
|
||||
#
|
||||
# Transmogrification.RetroActiveAppearances
|
||||
# Description: Enables/Disables checking all completed quests for uncollected appearances.
|
||||
# Occurs only once per player.
|
||||
# Default: 1
|
||||
#
|
||||
# Transmogrification.ResetRetroActiveAppearancesFlag
|
||||
# Description: Resets the flag indicating whether the retroactive appearance check has been run.
|
||||
# Occurs for each character on log in.
|
||||
# Default: 0
|
||||
#
|
||||
# Transmogrification.EnableTransmogInfo
|
||||
# Description: Enables / Disables the info button for transmogrification
|
||||
# Default: 1
|
||||
#
|
||||
# Transmogrification.TransmogNpcText
|
||||
# Description: The npc_text entry of the info menu for transmogrification
|
||||
# Default: 601083
|
||||
#
|
||||
# Transmogrification.Allowed
|
||||
# Description: A list of item entries that are allowed for transmogrification (skips quality and CanUseItem check)
|
||||
# Example: "25 35674 5623"
|
||||
# Default: ""
|
||||
#
|
||||
# Transmogrification.NotAllowed
|
||||
# Description: A list of item entries that are NOT allowed for transmogrification
|
||||
# Example: "25 35674 5623"
|
||||
# Default: ""
|
||||
#
|
||||
# Transmogrification.EnablePortable
|
||||
# Description: Enables / Disables the portable transmogrification NPC.
|
||||
# Default: 1
|
||||
#
|
||||
# Transmogrification.EnableSortByQualityAndName
|
||||
# Description: Enables / Disables the sorting of the items by quality and then by names
|
||||
# Default: 1
|
||||
#
|
||||
|
||||
Transmogrification.Enable = 1
|
||||
Transmogrification.ShowSetDisclaimer = 0
|
||||
Transmogrification.UseCollectionSystem = 1
|
||||
Transmogrification.UseVendorInterface = 0
|
||||
Transmogrification.AllowHiddenTransmog = 1
|
||||
Transmogrification.HiddenTransmogIsFree = 1
|
||||
Transmogrification.TrackUnusableItems = 1
|
||||
Transmogrification.RetroActiveAppearances = 1
|
||||
Transmogrification.ResetRetroActiveAppearancesFlag = 0
|
||||
|
||||
Transmogrification.EnableTransmogInfo = 1
|
||||
Transmogrification.TransmogNpcText = 601083
|
||||
|
||||
Transmogrification.Allowed = ""
|
||||
Transmogrification.NotAllowed = ""
|
||||
|
||||
Transmogrification.EnablePortable = 1
|
||||
|
||||
Transmogrification.EnableSortByQualityAndName = 1
|
||||
|
||||
#
|
||||
# COPPER COST
|
||||
#
|
||||
# Transmogrification.ScaledCostModifier
|
||||
# Description: A multiplier for the default gold cost (change to 0 for no default cost)
|
||||
# Default: 1.0
|
||||
#
|
||||
# Transmogrification.CopperCost
|
||||
# Description: Cost added on top of other costs (can be negative)
|
||||
# Default: 0
|
||||
#
|
||||
# For custom gold cost set ScaledCostModifier to 0.0 and CopperCost to what ever cost you want
|
||||
|
||||
Transmogrification.ScaledCostModifier = 1.0
|
||||
Transmogrification.CopperCost = 0
|
||||
|
||||
#
|
||||
# TOKEN COST
|
||||
#
|
||||
# Transmogrification.RequireToken
|
||||
# Description: Adds/disables token cost
|
||||
# Default: 0
|
||||
#
|
||||
# Transmogrification.TokenEntry
|
||||
# Description: Entry of the token item
|
||||
# Default: 49426
|
||||
#
|
||||
# Transmogrification.TokenAmount
|
||||
# Description: Amount of tokens required
|
||||
# Default: 1
|
||||
|
||||
Transmogrification.RequireToken = 0
|
||||
Transmogrification.TokenEntry = 49426
|
||||
Transmogrification.TokenAmount = 1
|
||||
|
||||
#
|
||||
# REQUIREMENTS
|
||||
#
|
||||
# Transmogrification.AllowPoor
|
||||
# Description: Allow poor quality items to be used as source and target items
|
||||
# Default: 0
|
||||
#
|
||||
# Transmogrification.AllowCommon
|
||||
# Description: Allow common quality items to be used as source and target items
|
||||
# Default: 0
|
||||
#
|
||||
# Transmogrification.AllowUncommon
|
||||
# Description: Allow uncommon quality items to be used as source and target items
|
||||
# Default: 1
|
||||
#
|
||||
# Transmogrification.AllowRare
|
||||
# Description: Allow rare quality items to be used as source and target items
|
||||
# Default: 1
|
||||
#
|
||||
# Transmogrification.AllowEpic
|
||||
# Description: Allow epic quality items to be used as source and target items
|
||||
# Default: 1
|
||||
#
|
||||
# Transmogrification.AllowLegendary
|
||||
# Description: Allow legendary quality items to be used as source and target items
|
||||
# Default: 0
|
||||
#
|
||||
# Transmogrification.AllowArtifact
|
||||
# Description: Allow artifact quality items to be used as source and target items
|
||||
# Default: 0
|
||||
#
|
||||
# Transmogrification.AllowHeirloom
|
||||
# Description: Allow heirloom quality items to be used as source and target items
|
||||
# Default: 1
|
||||
#
|
||||
# Transmogrification.AllowTradeable
|
||||
# Description: Allow items that are tradeable (i.e. During 2 hour grace period during an instance)
|
||||
# Default: 0
|
||||
#
|
||||
# Transmogrification.AllowMixedArmorTypes
|
||||
# Description: Allow cloth items to be transmogrified with plate for example
|
||||
# Default: 0
|
||||
#
|
||||
# Transmogrification.AllowLowerTiers
|
||||
# Description: Allows using any armor tier the player can equip (i.e. Warrior plate->cloth | Mage cloth)
|
||||
# Default: 0
|
||||
#
|
||||
# Transmogrification.AllowMixedOffhandArmorTypes
|
||||
# Description: Allow shields, offhands (i.e. lamps), and bucklers to be used interchangeably
|
||||
# Default: 0
|
||||
#
|
||||
# Transmogrification.AllowMixedWeaponTypes
|
||||
# Description: Allow axe to be transmogrified with dagger for example
|
||||
# Possible options:
|
||||
# Default: 0 - STRICT - Fully restricted like original Blizzard 4.3 transmog - Weapons must be the same weapon type (exceptions: Guns, Crossbows, or Bows)
|
||||
# 1 - MODERN - Like later retail WoW, allow swords to be transmogged to axes, etc.
|
||||
# 2 - FULL - No restrictions, allow any weapon to be transmogrified to any other weapon
|
||||
#
|
||||
# Transmogrification.AllowMixedWeaponHandedness
|
||||
# Description: Normally main-hand and off-hand weapons can only be transmogged to this same type. Enable to remove this restriction.
|
||||
# Not necessary when AllowMixedWeaponTypes is set to FULL.
|
||||
# Default: 0
|
||||
#
|
||||
# Transmogrification.AllowFishingPoles
|
||||
# Description: Allow fishing poles to be transmogrified
|
||||
# Default: 0
|
||||
#
|
||||
# Transmogrification.IgnoreReqRace
|
||||
# Description: Ignore required race for source items
|
||||
# Default: 0
|
||||
#
|
||||
# Transmogrification.IgnoreReqClass
|
||||
# Description: Ignore required class for source items
|
||||
# Default: 0
|
||||
#
|
||||
# Transmogrification.IgnoreReqSkill
|
||||
# Description: Ignore required skill for source items
|
||||
# Default: 0
|
||||
#
|
||||
# Transmogrification.IgnoreReqSpell
|
||||
# Description: Ignore required spell for source items
|
||||
# Default: 0
|
||||
#
|
||||
# Transmogrification.IgnoreReqLevel
|
||||
# Description: Ignore required level for source items
|
||||
# Default: 0
|
||||
#
|
||||
# Transmogrification.IgnoreReqEvent
|
||||
# Description: Ignore required event for source items
|
||||
# Default: 0
|
||||
#
|
||||
# Transmogrification.IgnoreReqStats
|
||||
# Description: Ignore stat count > 0 requirement for source items
|
||||
# Default: 0
|
||||
|
||||
|
||||
Transmogrification.AllowPoor = 0
|
||||
Transmogrification.AllowCommon = 0
|
||||
Transmogrification.AllowUncommon = 1
|
||||
Transmogrification.AllowRare = 1
|
||||
Transmogrification.AllowEpic = 1
|
||||
Transmogrification.AllowLegendary = 0
|
||||
Transmogrification.AllowArtifact = 0
|
||||
Transmogrification.AllowHeirloom = 1
|
||||
Transmogrification.AllowTradeable = 0
|
||||
|
||||
Transmogrification.AllowMixedArmorTypes = 0
|
||||
Transmogrification.AllowLowerTiers = 0
|
||||
Transmogrification.AllowMixedOffhandArmorTypes = 0
|
||||
Transmogrification.AllowMixedWeaponTypes = 0
|
||||
Transmogrification.AllowMixedWeaponHandedness = 0
|
||||
Transmogrification.AllowFishingPoles = 0
|
||||
|
||||
Transmogrification.IgnoreReqRace = 0
|
||||
Transmogrification.IgnoreReqClass = 1
|
||||
Transmogrification.IgnoreReqSkill = 1
|
||||
Transmogrification.IgnoreReqSpell = 0
|
||||
Transmogrification.IgnoreReqLevel = 0
|
||||
Transmogrification.IgnoreReqEvent = 0
|
||||
Transmogrification.IgnoreReqStats = 0
|
||||
|
||||
#
|
||||
# SET FEATURE
|
||||
#
|
||||
# Transmogrification.EnableSets
|
||||
# Description: Enables / Disables the set feature. If you want permanent disable, check Transmogrification.h
|
||||
# Default: 1
|
||||
#
|
||||
# Transmogrification.MaxSets
|
||||
# Description: Maximum amount of sets a player can save (hardcap at 25)
|
||||
# Default: 10
|
||||
#
|
||||
# Transmogrification.EnableSetInfo
|
||||
# Description: Enables / Disables the info button for set fature
|
||||
# Default: 1
|
||||
#
|
||||
# Transmogrification.SetNpcText
|
||||
# Description: The npc_text entry of the info menu for the set feature
|
||||
# Default: 601084
|
||||
#
|
||||
# Transmogrification.SetCostModifier
|
||||
# Description: A multiplier for the default gold cost (all costs summed together) (change to 0 for no default cost)
|
||||
# Default: 3.0
|
||||
#
|
||||
# Transmogrification.SetCopperCost
|
||||
# Description: Cost added on top of other costs (can be negative)
|
||||
# Default: 0
|
||||
|
||||
Transmogrification.EnableSets = 1
|
||||
Transmogrification.MaxSets = 10
|
||||
|
||||
Transmogrification.EnableSetInfo = 1
|
||||
Transmogrification.SetNpcText = 601084
|
||||
|
||||
Transmogrification.SetCostModifier = 3.0
|
||||
Transmogrification.SetCopperCost = 0
|
||||
|
||||
#
|
||||
# TRANSMOG PLUS
|
||||
#
|
||||
# Transmogrification.EnablePlus
|
||||
# Description: Enables/Disables TransmogPlus.
|
||||
# Default: 0
|
||||
#
|
||||
# Transmogrification.MembershipLevels
|
||||
# Description: Membership levels ID from acore_cms_subscriptions.
|
||||
# Example: Transmogrification.MembershipLevels = "1,2,3"
|
||||
# Default: ""
|
||||
#
|
||||
# Transmogrification.MembershipLevelsLegendary
|
||||
# Description: Membership levels ID from acore_cms_subscriptions that define the eligibility for legendary items
|
||||
# Example: Transmogrification.MembershipLevelsLegendary = "1,2,3"
|
||||
# Default: ""
|
||||
#
|
||||
# Transmogrification.MembershipLevelsPet
|
||||
# Description: Membership levels ID from acore_cms_subscriptions that define the eligibility for transmog pet
|
||||
# Example: Transmogrification.MembershipLevelsPet = "1,2,3"
|
||||
# Default: ""
|
||||
#
|
||||
# Transmogrification.MembershipLevelsSkipLevelReq
|
||||
# Description: Membership levels ID from acore_cms_subscriptions that define the eligibility for skipping level checks when transmogfrifying
|
||||
# Example: Transmogrification.MembershipLevelsSkipLevelReq = "1,2,3"
|
||||
# Default: ""
|
||||
#
|
||||
# Transmogrification.PetSpellId
|
||||
# Description: The ID used by the transmog pet in the spell_dbc table
|
||||
# Example: Transmogrification.PetSpellId = 2000100
|
||||
# Default: 2000100
|
||||
#
|
||||
|
||||
Transmogrification.EnablePlus = 0
|
||||
Transmogrification.MembershipLevels = ""
|
||||
Transmogrification.MembershipLevelsLegendary = ""
|
||||
Transmogrification.MembershipLevelsPet = ""
|
||||
Transmogrification.MembershipLevelsSkipLevelReq = ""
|
||||
Transmogrification.PetSpellId = 200100
|
||||
|
||||
#
|
||||
###################################################################################################
|
||||
@@ -0,0 +1,4 @@
|
||||
CREATE TABLE IF NOT EXISTS `acore_cms_subscriptions` (
|
||||
`account_name` VARCHAR(255) NOT NULL,
|
||||
`membership_level` INT NOT NULL
|
||||
);
|
||||
@@ -0,0 +1,26 @@
|
||||
-- Dumping structure for table tc_c.custom_transmogrification
|
||||
CREATE TABLE IF NOT EXISTS `custom_transmogrification` (
|
||||
`GUID` int(10) unsigned NOT NULL COMMENT 'Item guidLow',
|
||||
`FakeEntry` int(10) unsigned NOT NULL COMMENT 'Item entry',
|
||||
`Owner` int(10) unsigned NOT NULL COMMENT 'Player guidLow',
|
||||
PRIMARY KEY (`GUID`),
|
||||
KEY `Owner` (`Owner`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='6_2';
|
||||
|
||||
-- Data exporting was unselected.
|
||||
|
||||
|
||||
-- Dumping structure for table tc_c.custom_transmogrification_sets
|
||||
CREATE TABLE IF NOT EXISTS `custom_transmogrification_sets` (
|
||||
`Owner` int(10) unsigned NOT NULL COMMENT 'Player guidlow',
|
||||
`PresetID` tinyint(3) unsigned NOT NULL COMMENT 'Preset identifier',
|
||||
`SetName` text COMMENT 'SetName',
|
||||
`SetData` text COMMENT 'Slot1 Entry1 Slot2 Entry2',
|
||||
PRIMARY KEY (`Owner`,`PresetID`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='6_1';
|
||||
|
||||
CREATE TABLE IF NOT EXISTS `custom_unlocked_appearances` (
|
||||
`account_id` int(10) unsigned NOT NULL,
|
||||
`item_template_id` mediumint(8) unsigned NOT NULL DEFAULT '0',
|
||||
PRIMARY KEY (`account_id`, `item_template_id`)
|
||||
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4;
|
||||
@@ -0,0 +1,49 @@
|
||||
SET
|
||||
@Entry = 190010,
|
||||
@Name = "Warpweaver";
|
||||
DELETE FROM `creature_template` WHERE `entry` = @Entry;
|
||||
|
||||
INSERT INTO `creature_template` (`entry`, `name`, `subname`, `IconName`, `gossip_menu_id`, `minlevel`, `maxlevel`, `exp`, `faction`, `npcflag`, `rank`, `dmgschool`, `BaseAttackTime`, `RangeAttackTime`, `unit_class`, `unit_flags`, `type`, `type_flags`, `lootid`, `pickpocketloot`, `skinloot`, `AIName`, `MovementType`, `HoverHeight`, `RacialLeader`, `movementId`, `RegenHealth`, `CreatureImmunitiesId`, `flags_extra`, `ScriptName`) VALUES
|
||||
(@Entry, @Name, "Transmogrifier", NULL, 0, 80, 80, 2, 35, 1, 0, 0, 2000, 0, 1, 0, 7, 138936390, 0, 0, 0, '', 0, 1, 0, 0, 1, 0, 0, 'npc_transmogrifier');
|
||||
|
||||
DELETE FROM `creature_template_model` WHERE `CreatureID` = @Entry;
|
||||
INSERT INTO `creature_template_model` (`CreatureID`, `Idx`, `CreatureDisplayID`, `DisplayScale`, `Probability`, `VerifiedBuild`) VALUES
|
||||
(@Entry, 0, 19646, 1, 1, 0);
|
||||
|
||||
DELETE FROM `creature_template_locale` WHERE `entry` IN (@Entry);
|
||||
INSERT INTO `creature_template_locale` (`entry`, `locale`, `Name`, `Title`) VALUES
|
||||
(@Entry, 'koKR', @Name, "변형기"),
|
||||
(@Entry, 'frFR', @Name, "Transmogrificateur"),
|
||||
(@Entry, 'deDE', @Name, "Transmogrifier"),
|
||||
(@Entry, 'zhCN', @Name, "变形者"),
|
||||
(@Entry, 'zhTW', @Name, "幻化大師"),
|
||||
(@Entry, 'esES', @Name, "Transfigurador"),
|
||||
(@Entry, 'esMX', @Name, "Transfigurador"),
|
||||
(@Entry, 'ruRU', @Name, "Трансмогрификатор");
|
||||
|
||||
SET
|
||||
@Entry = 190011,
|
||||
@Name = "Ethereal Warpweaver";
|
||||
DELETE FROM `creature_template` WHERE `entry` = @Entry;
|
||||
|
||||
INSERT INTO `creature_template` (`entry`, `name`, `subname`, `IconName`, `gossip_menu_id`, `minlevel`, `maxlevel`, `exp`, `faction`, `npcflag`, `rank`, `dmgschool`, `BaseAttackTime`, `RangeAttackTime`, `unit_class`, `unit_flags`, `type`, `type_flags`, `lootid`, `pickpocketloot`, `skinloot`, `AIName`, `MovementType`, `HoverHeight`, `RacialLeader`, `movementId`, `RegenHealth`, `CreatureImmunitiesId`, `flags_extra`, `ScriptName`) VALUES
|
||||
(@Entry, @Name, "Transmogrifier", NULL, 0, 80, 80, 2, 35, 1, 0, 0, 2000, 0, 1, 0, 7, 138936390, 0, 0, 0, '', 0, 1, 0, 0, 1, 0, 0, 'npc_transmogrifier');
|
||||
|
||||
DELETE FROM `creature_template_model` WHERE `CreatureID` = @Entry;
|
||||
INSERT INTO `creature_template_model` (`CreatureID`, `Idx`, `CreatureDisplayID`, `DisplayScale`, `Probability`, `VerifiedBuild`) VALUES
|
||||
(@Entry, 0, 19646, 1, 1, 0);
|
||||
|
||||
DELETE FROM `creature_template_locale` WHERE `entry` IN (@Entry);
|
||||
INSERT INTO `creature_template_locale` (`entry`, `locale`, `Name`, `Title`) VALUES
|
||||
(@Entry, 'koKR', @Name, "변형기"),
|
||||
(@Entry, 'frFR', @Name, "Transmogrificateur"),
|
||||
(@Entry, 'deDE', @Name, "Transmogrifier"),
|
||||
(@Entry, 'zhCN', @Name, "变形者"),
|
||||
(@Entry, 'zhTW', @Name, "幻化大師"),
|
||||
(@Entry, 'esES', @Name, "Transfigurador"),
|
||||
(@Entry, 'esMX', @Name, "Transfigurador"),
|
||||
(@Entry, 'ruRU', @Name, "Трансмогрификатор");
|
||||
|
||||
DELETE FROM `spell_dbc` WHERE `ID` = 200100;
|
||||
INSERT INTO `spell_dbc` (`ID`, `Category`, `DispelType`, `Mechanic`, `Attributes`, `AttributesEx`, `AttributesEx2`, `AttributesEx3`, `AttributesEx4`, `AttributesEx5`, `AttributesEx6`, `AttributesEx7`, `ShapeshiftMask`, `unk_320_2`, `ShapeshiftExclude`, `unk_320_3`, `Targets`, `TargetCreatureType`, `RequiresSpellFocus`, `FacingCasterFlags`, `CasterAuraState`, `TargetAuraState`, `ExcludeCasterAuraState`, `ExcludeTargetAuraState`, `CasterAuraSpell`, `TargetAuraSpell`, `ExcludeCasterAuraSpell`, `ExcludeTargetAuraSpell`, `CastingTimeIndex`, `RecoveryTime`, `CategoryRecoveryTime`, `InterruptFlags`, `AuraInterruptFlags`, `ChannelInterruptFlags`, `ProcTypeMask`, `ProcChance`, `ProcCharges`, `MaxLevel`, `BaseLevel`, `SpellLevel`, `DurationIndex`, `PowerType`, `ManaCost`, `ManaCostPerLevel`, `ManaPerSecond`, `ManaPerSecondPerLevel`, `RangeIndex`, `Speed`, `ModalNextSpell`, `CumulativeAura`, `Totem_1`, `Totem_2`, `Reagent_1`, `Reagent_2`, `Reagent_3`, `Reagent_4`, `Reagent_5`, `Reagent_6`, `Reagent_7`, `Reagent_8`, `ReagentCount_1`, `ReagentCount_2`, `ReagentCount_3`, `ReagentCount_4`, `ReagentCount_5`, `ReagentCount_6`, `ReagentCount_7`, `ReagentCount_8`, `EquippedItemClass`, `EquippedItemSubclass`, `EquippedItemInvTypes`, `Effect_1`, `Effect_2`, `Effect_3`, `EffectDieSides_1`, `EffectDieSides_2`, `EffectDieSides_3`, `EffectRealPointsPerLevel_1`, `EffectRealPointsPerLevel_2`, `EffectRealPointsPerLevel_3`, `EffectBasePoints_1`, `EffectBasePoints_2`, `EffectBasePoints_3`, `EffectMechanic_1`, `EffectMechanic_2`, `EffectMechanic_3`, `ImplicitTargetA_1`, `ImplicitTargetA_2`, `ImplicitTargetA_3`, `ImplicitTargetB_1`, `ImplicitTargetB_2`, `ImplicitTargetB_3`, `EffectRadiusIndex_1`, `EffectRadiusIndex_2`, `EffectRadiusIndex_3`, `EffectAura_1`, `EffectAura_2`, `EffectAura_3`, `EffectAuraPeriod_1`, `EffectAuraPeriod_2`, `EffectAuraPeriod_3`, `EffectMultipleValue_1`, `EffectMultipleValue_2`, `EffectMultipleValue_3`, `EffectChainTargets_1`, `EffectChainTargets_2`, `EffectChainTargets_3`, `EffectItemType_1`, `EffectItemType_2`, `EffectItemType_3`, `EffectMiscValue_1`, `EffectMiscValue_2`, `EffectMiscValue_3`, `EffectMiscValueB_1`, `EffectMiscValueB_2`, `EffectMiscValueB_3`, `EffectTriggerSpell_1`, `EffectTriggerSpell_2`, `EffectTriggerSpell_3`, `EffectPointsPerCombo_1`, `EffectPointsPerCombo_2`, `EffectPointsPerCombo_3`, `EffectSpellClassMaskA_1`, `EffectSpellClassMaskA_2`, `EffectSpellClassMaskA_3`, `EffectSpellClassMaskB_1`, `EffectSpellClassMaskB_2`, `EffectSpellClassMaskB_3`, `EffectSpellClassMaskC_1`, `EffectSpellClassMaskC_2`, `EffectSpellClassMaskC_3`, `SpellVisualID_1`, `SpellVisualID_2`, `SpellIconID`, `ActiveIconID`, `SpellPriority`, `Name_Lang_enUS`, `Name_Lang_enGB`, `Name_Lang_koKR`, `Name_Lang_frFR`, `Name_Lang_deDE`, `Name_Lang_enCN`, `Name_Lang_zhCN`, `Name_Lang_enTW`, `Name_Lang_zhTW`, `Name_Lang_esES`, `Name_Lang_esMX`, `Name_Lang_ruRU`, `Name_Lang_ptPT`, `Name_Lang_ptBR`, `Name_Lang_itIT`, `Name_Lang_Unk`, `Name_Lang_Mask`, `NameSubtext_Lang_enUS`, `NameSubtext_Lang_enGB`, `NameSubtext_Lang_koKR`, `NameSubtext_Lang_frFR`, `NameSubtext_Lang_deDE`, `NameSubtext_Lang_enCN`, `NameSubtext_Lang_zhCN`, `NameSubtext_Lang_enTW`, `NameSubtext_Lang_zhTW`, `NameSubtext_Lang_esES`, `NameSubtext_Lang_esMX`, `NameSubtext_Lang_ruRU`, `NameSubtext_Lang_ptPT`, `NameSubtext_Lang_ptBR`, `NameSubtext_Lang_itIT`, `NameSubtext_Lang_Unk`, `NameSubtext_Lang_Mask`, `Description_Lang_enUS`, `Description_Lang_enGB`, `Description_Lang_koKR`, `Description_Lang_frFR`, `Description_Lang_deDE`, `Description_Lang_enCN`, `Description_Lang_zhCN`, `Description_Lang_enTW`, `Description_Lang_zhTW`, `Description_Lang_esES`, `Description_Lang_esMX`, `Description_Lang_ruRU`, `Description_Lang_ptPT`, `Description_Lang_ptBR`, `Description_Lang_itIT`, `Description_Lang_Unk`, `Description_Lang_Mask`, `AuraDescription_Lang_enUS`, `AuraDescription_Lang_enGB`, `AuraDescription_Lang_koKR`, `AuraDescription_Lang_frFR`, `AuraDescription_Lang_deDE`, `AuraDescription_Lang_enCN`, `AuraDescription_Lang_zhCN`, `AuraDescription_Lang_enTW`, `AuraDescription_Lang_zhTW`, `AuraDescription_Lang_esES`, `AuraDescription_Lang_esMX`, `AuraDescription_Lang_ruRU`, `AuraDescription_Lang_ptPT`, `AuraDescription_Lang_ptBR`, `AuraDescription_Lang_itIT`, `AuraDescription_Lang_Unk`, `AuraDescription_Lang_Mask`, `ManaCostPct`, `StartRecoveryCategory`, `StartRecoveryTime`, `MaxTargetLevel`, `SpellClassSet`, `SpellClassMask_1`, `SpellClassMask_2`, `SpellClassMask_3`, `MaxTargets`, `DefenseType`, `PreventionType`, `StanceBarOrder`, `EffectChainAmplitude_1`, `EffectChainAmplitude_2`, `EffectChainAmplitude_3`, `MinFactionID`, `MinReputation`, `RequiredAuraVision`, `RequiredTotemCategoryID_1`, `RequiredTotemCategoryID_2`, `RequiredAreasID`, `SchoolMask`, `RuneCostID`, `SpellMissileID`, `PowerDisplayID`, `EffectBonusMultiplier_1`, `EffectBonusMultiplier_2`, `EffectBonusMultiplier_3`, `SpellDescriptionVariableID`, `SpellDifficultyID`) VALUE
|
||||
(200100,0,0,0,262416,0,0,536870912,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,31,0,0,0,101,0,0,0,0,21,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,0,0,28,0,0,1,0,0,0,0,0,0,0,0,0,0,0,32,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1000,0,0,0,0,0,0,0,0,190011,0,0,41,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,458,0,2808,0,0,'Ethereal Warpweaver','','','','','','','','','','','','','','','',16712190,'','','','','','','','','','','','','','','','',16712190,'Right Click to summon and dismiss your Ethereal Warpweaver.','','','','','','','','','','','','','','','',16712190,'','','','','','','','','','','','','','','','',16712190,0,133,1500,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
|
||||
@@ -0,0 +1,30 @@
|
||||
SET
|
||||
@HideEntry = 57575,
|
||||
@RemoveEntry = 57576,
|
||||
@HideName = "Hide Equipped",
|
||||
@RemoveName = "Clear Transmog";
|
||||
|
||||
DELETE FROM `item_template` WHERE `entry` = @HideEntry OR `entry` = @RemoveEntry;
|
||||
|
||||
INSERT INTO `item_template` (`entry`, `class`, `subclass`, `name`, `displayid`, `InventoryType`, `description`) VALUES
|
||||
(@HideEntry, 15, 0, @HideName, 55112, 0, "Hide the item in this slot."),
|
||||
(@RemoveEntry, 15, 0, @RemoveName, 8931, 0, "Remove active transmog for this item.");
|
||||
|
||||
DELETE FROM `item_template_locale` WHERE `ID` = @HideEntry OR `ID` = @RemoveEntry;
|
||||
INSERT INTO `item_template_locale` (`ID`, `locale`, `Name`, `Description`) VALUES
|
||||
(@HideEntry, "koKR", "장착된 아이템 숨기기", "이 슬롯의 아이템을 숨깁니다."),
|
||||
(@RemoveEntry,"koKR", "변형 지우기", "이 아이템의 활성화된 변형을 제거합니다."),
|
||||
(@HideEntry, "frFR", "Masquer l'équipement", "Masquer l'objet dans cet emplacement."),
|
||||
(@RemoveEntry,"frFR", "Effacer transmog", "Supprimer la transmog active."),
|
||||
(@HideEntry, "deDE", "Ausgerüstet verbergen", "Item in diesem Slot verbergen."),
|
||||
(@RemoveEntry,"deDE", "Transmog zurücksetzen", "Aktive Transmogrifikation entfernen."),
|
||||
(@HideEntry, "zhCN", "隐藏已装备", "隐藏此物品。"),
|
||||
(@RemoveEntry,"zhCN", "清除幻化", "移除激活的幻化。"),
|
||||
(@HideEntry, "zhTW", "隱藏已裝備", "隱藏此物品。"),
|
||||
(@RemoveEntry,"zhTW", "清除幻化", "移除啟用的幻化。"),
|
||||
(@HideEntry, "esES", "Ocultar equipado", "Ocultar el objeto en esta ranura."),
|
||||
(@RemoveEntry,"esES", "Borrar transmog", "Eliminar la transmog activa."),
|
||||
(@HideEntry, "esMX", "Ocultar equipado", "Ocultar el objeto en este espacio."),
|
||||
(@RemoveEntry,"esMX", "Borrar transmog", "Eliminar la transmog activa."),
|
||||
(@HideEntry, "ruRU", "Скрыть экипированное", "Скрыть предмет в слоте."),
|
||||
(@RemoveEntry,"ruRU", "Очистить трансмог", "Удалить активный трансмог.");
|
||||
@@ -0,0 +1,476 @@
|
||||
SET @TEXT_ID := 601083;
|
||||
DELETE FROM `npc_text` WHERE `ID` IN (@TEXT_ID,@TEXT_ID+1);
|
||||
INSERT INTO `npc_text` (`ID`, `text0_0`) VALUES
|
||||
(@TEXT_ID, 'Transmogrification allows you to change how your items look like without changing the stats of the items.\r\nItems used in transmogrification are no longer refundable, tradeable and are bound to you.\r\nUpdating a menu updates the view and prices.\r\n\r\nNot everything can be transmogrified with each other.\r\nRestrictions include but are not limited to:\r\nOnly armor and weapons can be transmogrified\r\nGuns, bows and crossbows can be transmogrified with each other\r\nFishing poles can not be transmogrified\r\nYou must be able to equip both items used in the process.\r\n\r\nTransmogrifications stay on your items as long as you own them.\r\nIf you try to put the item in guild bank or mail it to someone else, the transmogrification is stripped.\r\n\r\nYou can also remove transmogrifications for free at the transmogrifier.'),
|
||||
(@TEXT_ID+1, 'You can save your own transmogrification sets.\r\n\r\nTo save, first you must transmogrify your equipped items.\r\nThen when you go to the set management menu and go to save set menu,\r\nall items you have transmogrified are displayed so you see what you are saving.\r\nIf you think the set is fine, you can click to save the set and name it as you wish.\r\n\r\nTo use a set you can click the saved set in the set management menu and then select use set.\r\nIf the set has a transmogrification for an item that is already transmogrified, the old transmogrification is lost.\r\nNote that the same transmogrification restrictions apply when trying to use a set as in normal transmogrification.\r\n\r\nTo delete a set you can go to the set\'s menu and select delete set.');
|
||||
|
||||
DELETE FROM `npc_text_locale` WHERE `ID` IN (@TEXT_ID,@TEXT_ID+1);
|
||||
INSERT INTO `npc_text_locale` (`ID`, `Locale`, `Text0_0`) VALUES
|
||||
(@TEXT_ID, 'koKR', '형상변환을 사용하면 아이템의 능력치를 변경하지 않고도 아이템의 모양을 변경할 수 있습니다.\r\n형변환에 사용된 아이템은 더 이상 환불 및 거래가 불가능하며 귀속됩니다.\r\n메뉴를 업데이트하면 보기 및 가격이 업데이트됩니다.\r\n\r\n모든 것을 서로 형상변환할 수 있는 것은 아닙니다.\r\n제한사항에는 다음이 포함되지만 이에 국한되지는 않습니다:\r\n갑옷과 무기만 형상변환할 수 있습니다.\r\n총, 활, 석궁은 서로 형상변환할 수 있습니다 \r\n낚싯대는 형상변환할 수 없습니다.\r\n이 과정에서 사용되는 두 아이템을 장착할 수 있어야 합니다.\r\n\r\n변환은 아이템을 소유하고 있는 동안 유지됩니다.\r\n시도하면 아이템을 길드 은행에 넣거나 다른 사람에게 우편으로 보내면 형상변환이 제거됩니다.\r\n\r\n변환기에서 무료로 형상변환을 제거할 수도 있습니다.'),
|
||||
(@TEXT_ID+1, 'koKR', '나만의 형상변환 세트를 저장할 수 있습니다.\r\n\r\n저장하려면 먼저 장착한 아이템을 형상변환해야 합니다.\r\n그 다음 세트 관리 메뉴에서 세트 저장 메뉴로 이동하면\r\n모든 아이템이 변환한 항목이 표시되어 저장 중인 항목을 볼 수 있습니다.\r\n세트가 괜찮다고 생각되면 클릭하여 세트를 저장하고 원하는 이름을 지정할 수 있습니다.\r\n\r\n세트를 사용하려면 세트 관리 메뉴에서 저장된 세트를 클릭한 다음 세트 사용을 선택할 수 있습니다.\r\n세트에 이미 형상변환된 아이템에 대한 형상변환이 있는 경우 이전 형상변환은 손실됩니다.\r\n다음과 같은 경우 동일한 형상변환 제한이 적용됩니다. 일반 형상변환에서와 같이 세트를 사용하려고 합니다.\r\n\r\n세트를 삭제하려면 세트 메뉴로 이동하여 세트 삭제를 선택하면 됩니다.'),
|
||||
(@TEXT_ID, 'frFR', 'La transmogrification vous permet de modifier l''apparence de vos objets sans modifier les statistiques des objets.\\r\\nLes objets utilisés dans la transmogrification ne sont plus remboursables, échangeables et vous sont liés.\\r\\nLa mise à jour d''un menu met à jour la vue et les prix.\\ r\\n\\r\\nTout ne peut pas être transmogrifié les uns avec les autres.\\r\\nLes restrictions incluent, mais ne sont pas limitées à :\\r\\nSeules les armures et les armes peuvent être transmogrifiées\\r\\nLes fusils, les arcs et les arbalètes peuvent être transmogrifiés les uns avec les autres \\r\\nLes cannes à pêche ne peuvent pas être transmogrifiées\\r\\nVous devez être capable d''équiper les deux objets utilisés dans le processus.\\r\\n\\r\\nLes transmogrifications restent sur vos objets tant que vous les possédez.\\r\\nSi vous essayez pour mettre l''objet dans la banque de guilde ou l''envoyer à quelqu''un d''autre, la transmogrification est supprimée.\\r\\n\\r\\nVous pouvez également supprimer les transmogrifications gratuitement sur le transmogrificateur.'),
|
||||
(@TEXT_ID+1, 'frFR', 'Vous pouvez enregistrer vos propres ensembles de transmogrification.\r\n\r\nPour enregistrer, vous devez d''abord transmogrifier vos objets équipés.\r\nEnsuite, lorsque vous accédez au menu de gestion des ensembles et accédez au menu de sauvegarde,\r\ntous les objets vous avez transmogrifié sont affichés afin que vous puissiez voir ce que vous enregistrez.\r\nSi vous pensez que l''ensemble est correct, vous pouvez cliquer pour enregistrer l''ensemble et le nommer comme vous le souhaitez.\r\n\r\nPour utiliser un ensemble, vous pouvez cliquer sur l''ensemble enregistré dans le menu de gestion de l''ensemble, puis sélectionnez utiliser l''ensemble.\r\nSi l''ensemble a une transmogrification pour un élément déjà transmogrifié, l''ancienne transmogrification est perdue.\r\nNotez que les mêmes restrictions de transmogrification s''appliquent lorsque essayer d''utiliser un ensemble comme dans une transmogrification normale.\r\n\r\nPour supprimer un ensemble, vous pouvez aller dans le menu de l''ensemble et sélectionner supprimer l''ensemble.'),
|
||||
(@TEXT_ID, 'deDE', 'Mit der Transmogrifizierung können Sie das Aussehen Ihrer Gegenstände ändern, ohne die Werte der Gegenstände zu ändern.\r\nBei der Transmogrifizierung verwendete Gegenstände sind nicht mehr erstattungsfähig, handelbar und an Sie gebunden.\r\nDurch das Aktualisieren eines Menüs werden die Ansicht und die Preise aktualisiert.\ r\n\r\nNicht alles kann miteinander transmogrifiziert werden.\r\nZu den Einschränkungen gehören unter anderem:\r\nNur Rüstungen und Waffen können miteinander transmogrifiziert werden.\r\nWaffen, Bögen und Armbrüste können miteinander transmogrifiziert werden \r\nAngelruten können nicht transmogrifiziert werden.\r\nSie müssen in der Lage sein, beide dabei verwendeten Gegenstände auszurüsten.\r\n\r\nTransmogrifikationen bleiben auf Ihren Gegenständen, solange Sie sie besitzen.\r\nWenn Sie es versuchen Um den Gegenstand in die Gildenbank zu legen oder an jemand anderen zu verschicken, wird die Transmogrifikation entfernt.\r\n\r\nSie können Transmogrifikationen auch kostenlos beim Transmogrifizierer entfernen.'),
|
||||
(@TEXT_ID+1, 'deDE', 'Sie können Ihre eigenen Transmogrifikationssets speichern.\r\n\r\nZum Speichern müssen Sie zuerst Ihre ausgerüsteten Gegenstände transmogrifizieren.\r\nWenn Sie dann zum Set-Verwaltungsmenü gehen und zum Set-Speichermenü gehen,\r\nalle Gegenstände Sie werden angezeigt, sodass Sie sehen, was Sie speichern.\r\nWenn Sie der Meinung sind, dass das Set in Ordnung ist, können Sie auf klicken, um das Set zu speichern und es nach Ihren Wünschen zu benennen.\r\n\r\nSo verwenden Sie ein Set Sie können im Setverwaltungsmenü auf das gespeicherte Set klicken und dann „Set verwenden“ auswählen.\r\nWenn das Set eine Transmogrifizierung für einen Gegenstand hat, der bereits transmogrifiziert ist, geht die alte Transmogrifizierung verloren.\r\nBeachten Sie, dass die gleichen Transmogrifizierungsbeschränkungen gelten, wenn Ich versuche, ein Set wie bei der normalen Transmogrifizierung zu verwenden.\r\n\r\nUm ein Set zu löschen, gehen Sie zum Menü des Sets und wählen Sie „Set löschen“.'),
|
||||
(@TEXT_ID, 'zhCN', '变形允许您更改物品的外观,而无需更改物品的统计信息。\r\n变形中使用的物品不再可退款、可交易并且与您绑定。\r\n更新菜单会更新视图和价格。\ r\n\r\n并不是所有东西都可以互相变形。\r\n限制包括但不限于:\r\n只有盔甲和武器可以变形\r\n枪、弓、弩可以互相变形 \r\n鱼竿无法变形\r\n您必须能够装备在此过程中使用的两个物品。\r\n\r\n只要您拥有它们,变形就会保留在您的物品上。\r\n如果您尝试 将物品放入公会银行或邮寄给其他人时,变形会被剥离。\r\n\r\n您也可以在变形器处免费移除变形。'),
|
||||
(@TEXT_ID+1, 'zhCN', '您可以保存自己的变形套装。\r\n\r\n要保存,首先必须变形您装备的物品。\r\n然后当您进入套装管理菜单并进入保存套装菜单时,\r\n所有物品 将显示您已经变形的内容,以便您看到正在保存的内容。\r\n如果您认为该集合没问题,可以单击以保存该集合并根据需要命名它。\r\n\r\n要使用您的集合 可以在集合管理菜单中单击已保存的集合,然后选择使用集合。\r\n如果该集合对已变形的项目有变形,则旧的变形将丢失。\r\n请注意,以下情况适用相同的变形限制: 尝试像正常变形一样使用集合。\r\n\r\n要删除集合,您可以转到集合的菜单并选择删除集合。'),
|
||||
(@TEXT_ID, 'zhTW', '變身術讓你能夠改變物品的外觀,而不改變物品的屬性。\r\n在變身術中使用的物品將不再可退款、可交易,並且將綁定於你。\r\n更新菜單將更新視圖和價格。\r\n\r\n並非所有物品都可以互相變身。\r\n限制條件包括但不限於:\r\n只有盔甲和武器可以變身。\r\n槍械、弓和弩可以互相變身。\r\n釣魚竿無法進行變身。\r\n你必須能夠裝備在此過程中使用的兩件物品。\r\n\r\n變身效果會持續存在於你的物品上,只要你擁有它們。\r\n如果你試圖將物品放入公會銀行或郵寄給他人,將會去除變身效果。\r\n\r\n你也可以在變身術轉化師處免費移除變身效果。'),
|
||||
(@TEXT_ID+1, 'zhTW', '你可以保存自己的變身套裝。\r\n\r\n要保存,首先必須對你裝備的物品進行變身。\r\n然後,當你進入套裝管理菜單並進入保存套裝菜單時,\r\n所有你已經變身的物品都會顯示出來,這樣你就可以看到你正在保存的內容。\r\n如果你認為這套裝很好,你可以點擊保存套裝並按你的意願命名。\r\n\r\n要使用一個套裝,你可以在套裝管理菜單中點擊已保存的套裝,然後選擇使用套裝。\r\n如果該套裝中的物品已經有變身效果,舊的變身效果將會遺失。\r\n請注意,當嘗試使用套裝時,與普通變身相同的限制將適用。\r\n\r\n要刪除一個套裝,你可以進入套裝的菜單,然後選擇刪除套裝。'),
|
||||
(@TEXT_ID, 'esES', 'La transfiguración permite cambiar la apariencia de tus objetos sin cambiar sus estadísticas.\r\nLos objetos utilizados en la transfiguración ya no son reembolsables, intercambiables y están vinculados a usted.\r\nActualizar un menú actualiza la vista y los precios.\ r\n\r\nNo todo se puede transfigurar entre sí.\r\nLas restricciones incluyen, pero no se limitan a:\r\nSolo se pueden transfigurar armaduras y armas\r\nArmas, arcos y ballestas se pueden transfigurar entre sí \r\nLas cañas de pescar no se pueden transfigurar.\r\nDebes poder equipar ambos elementos utilizados en el proceso.\r\n\r\nLas transfiguraciones permanecen en tus elementos mientras los tengas.\r\nSi lo intentas para poner el artículo en el banco del gremio o enviarlo por correo a otra persona, la transfiguración se elimina.\r\n\r\nTambién puedes eliminar las transfiguraciones de forma gratuita en el transfigurador.'),
|
||||
(@TEXT_ID+1, 'esES', 'Puede guardar sus propios conjuntos de transfiguración.\r\n\r\nPara guardar, primero debe transfigurar sus elementos equipados.\r\nLuego, cuando vaya al menú de administración de conjuntos y vaya al menú Guardar conjunto,\r\ntodos los elementos que ha transfigurado se muestran para que vea lo que está guardando.\r\nSi cree que el conjunto está bien, puede hacer clic para guardar el conjunto y nombrarlo como desee.\r\n\r\nPara usar un conjunto puede hacer clic en el conjunto guardado en el menú de administración de conjuntos y luego seleccionar usar conjunto.\r\nSi el conjunto tiene una transfiguración para un elemento que ya está transfigurado, la transfiguración anterior se pierde.\r\nTenga en cuenta que se aplican las mismas restricciones de transfiguración cuando tratando de usar un conjunto como en la transfiguración normal.\r\n\r\nPara eliminar un conjunto, puede ir al menú del conjunto y seleccionar eliminar conjunto.'),
|
||||
(@TEXT_ID, 'esMX', 'La transfiguración permite cambiar la apariencia de tus objetos sin cambiar sus estadísticas.\r\nLos objetos utilizados en la transfiguración ya no son reembolsables, intercambiables y están vinculados a usted.\r\nActualizar un menú actualiza la vista y los precios.\ r\n\r\nNo todo se puede transfigurar entre sí.\r\nLas restricciones incluyen, pero no se limitan a:\r\nSolo se pueden transfigurar armaduras y armas\r\nArmas, arcos y ballestas se pueden transfigurar entre sí \r\nLas cañas de pescar no se pueden transfigurar.\r\nDebes poder equipar ambos elementos utilizados en el proceso.\r\n\r\nLas transfiguraciones permanecen en tus elementos mientras los tengas.\r\nSi lo intentas para poner el artículo en el banco del gremio o enviarlo por correo a otra persona, la transfiguración se elimina.\r\n\r\nTambién puedes eliminar las transfiguraciones de forma gratuita en el transfigurador.'),
|
||||
(@TEXT_ID+1, 'esMX', 'Puede guardar sus propios conjuntos de transfiguración.\r\n\r\nPara guardar, primero debe transfigurar sus elementos equipados.\r\nLuego, cuando vaya al menú de administración de conjuntos y vaya al menú Guardar conjunto,\r\ntodos los elementos que ha transfigurado se muestran para que vea lo que está guardando.\r\nSi cree que el conjunto está bien, puede hacer clic para guardar el conjunto y nombrarlo como desee.\r\n\r\nPara usar un conjunto puede hacer clic en el conjunto guardado en el menú de administración de conjuntos y luego seleccionar usar conjunto.\r\nSi el conjunto tiene una transfiguración para un elemento que ya está transfigurado, la transfiguración anterior se pierde.\r\nTenga en cuenta que se aplican las mismas restricciones de transfiguración cuando tratando de usar un conjunto como en la transfiguración normal.\r\n\r\nPara eliminar un conjunto, puede ir al menú del conjunto y seleccionar eliminar conjunto.'),
|
||||
(@TEXT_ID, 'ruRU', 'Трансмогрификация позволяет вам изменить внешний вид ваших предметов без изменения характеристик предметов.\r\nПредметы, использованные в трансмогрификации, больше не подлежат возврату, обмену и привязаны к вам.\r\nОбновление меню обновляет вид и цены.\ r\n\r\nНе все можно трансмогрифицировать друг с другом.\r\nОграничения включают, но не ограничиваются:\r\nМожно трансмогрифицировать только доспехи и оружие\r\nОружие, луки и арбалеты можно трансмогрифицировать друг с другом \r\nУдочки не могут быть трансмогрифицированы\r\nВы должны быть в состоянии экипировать оба предмета, используемые в процессе.\r\n\r\nПреобразования остаются на ваших предметах, пока они у вас есть.\r\nЕсли вы попытаетесь чтобы положить предмет в банк гильдии или отправить кому-то другому, трансмогрификация снимается.\r\n\r\nВы также можете бесплатно удалить трансмогрификацию в трансмогрификаторе.'),
|
||||
(@TEXT_ID+1, 'ruRU', 'Вы можете сохранять свои собственные наборы для трансмогрификации.\r\n\r\nЧтобы сохранить, сначала вы должны трансмогрифицировать свои экипированные предметы.\r\nЗатем, когда вы перейдете в меню управления наборами и перейдете в меню сохранения набора,\r\nвсе предметы которые вы преобразовали, отображаются так, что вы видите, что вы сохраняете.\r\nЕсли вы считаете, что набор в порядке, вы можете нажать, чтобы сохранить набор и назвать его по своему желанию.\r\n\r\nЧтобы использовать набор, можно щелкнуть сохраненный набор в меню управления набором, а затем выбрать использовать набор.\r\nЕсли в наборе есть трансмогрификация предмета, который уже трансмогрифицирован, старая трансмогрификация теряется.\r\nОбратите внимание, что те же ограничения на трансмогрификацию применяются, когда пытается использовать набор, как при обычной трансмогрификации.\r\n\r\nЧтобы удалить набор, вы можете перейти в меню набора и выбрать удалить набор.');
|
||||
|
||||
DELETE FROM `module_string` WHERE `module` = 'mod-transmog';
|
||||
DELETE FROM `module_string_locale` WHERE `module` = 'mod-transmog';
|
||||
INSERT INTO `module_string` (`module`, `id`, `string`) VALUES
|
||||
-- Transmog result strings
|
||||
('mod-transmog', 1, 'Item successfully transmogrified.'),
|
||||
('mod-transmog', 2, 'Equipment slot is empty.'),
|
||||
('mod-transmog', 3, 'Invalid source item selected.'),
|
||||
('mod-transmog', 4, 'Source item does not exist.'),
|
||||
('mod-transmog', 5, 'Destination item does not exist.'),
|
||||
('mod-transmog', 6, 'Selected items are invalid.'),
|
||||
('mod-transmog', 7, 'You don''t have enough money.'),
|
||||
('mod-transmog', 8, 'You don''t have enough tokens.'),
|
||||
('mod-transmog', 9, 'All your transmogrifications were removed.'),
|
||||
('mod-transmog', 10, 'No transmogrification found.'),
|
||||
('mod-transmog', 11, 'Invalid name inserted.'),
|
||||
-- Command strings
|
||||
('mod-transmog', 12, 'Showing transmogrified items, relog to update the current area.'),
|
||||
('mod-transmog', 13, 'Hiding transmogrified items, relog to update the current area.'),
|
||||
('mod-transmog', 14, 'The selected item is not suitable for transmogrification.'),
|
||||
('mod-transmog', 15, 'The selected item cannot be used for transmogrification of the target player.'),
|
||||
('mod-transmog', 16, 'Performing transmog appearance sync...'),
|
||||
('mod-transmog', 17, 'Appearance sync complete.'),
|
||||
('mod-transmog', 18, 'The transmog NPC will now display available appearances as a vendor interface, allowing preview. \nDISCLAIMER: If you have too many appearances, some will not be displayed due to a client limitation. In that case, disable this option.'),
|
||||
('mod-transmog', 19, 'The transmog NPC will now display available appearances as gossip list.'),
|
||||
-- Gossip/UI strings
|
||||
('mod-transmog', 20, 'How does transmogrification work?'),
|
||||
('mod-transmog', 21, 'Manage sets'),
|
||||
('mod-transmog', 22, 'Remove all transmogrifications'),
|
||||
('mod-transmog', 23, 'Remove transmogrifications from all equipped items?'),
|
||||
('mod-transmog', 24, 'Update menu'),
|
||||
('mod-transmog', 25, 'How do sets work?'),
|
||||
('mod-transmog', 26, 'Save set'),
|
||||
('mod-transmog', 27, 'Back...'),
|
||||
('mod-transmog', 28, 'Use this set'),
|
||||
('mod-transmog', 29, 'Using this set for transmogrify will bind transmogrified items to you and make them non-refundable and non-tradeable.\nDo you wish to continue?\n\n'),
|
||||
('mod-transmog', 30, 'Delete set'),
|
||||
('mod-transmog', 31, 'Are you sure you want to delete '),
|
||||
('mod-transmog', 32, 'Insert set name'),
|
||||
('mod-transmog', 33, 'Search...'),
|
||||
('mod-transmog', 34, 'Searching for: '),
|
||||
('mod-transmog', 35, 'Search for what item?'),
|
||||
('mod-transmog', 36, 'You are hiding the item in this slot.\nDo you wish to continue?\n\n'),
|
||||
('mod-transmog', 37, 'Hide Slot'),
|
||||
('mod-transmog', 38, 'Remove transmogrification from the slot?'),
|
||||
('mod-transmog', 39, 'Using this item for transmogrify will bind it to you and make it non-refundable and non-tradeable.\nDo you wish to continue?\n\n'),
|
||||
('mod-transmog', 40, 'Previous Page'),
|
||||
('mod-transmog', 41, 'Next Page'),
|
||||
('mod-transmog', 42, 'has been added to your appearance collection.'),
|
||||
-- Disclaimer strings
|
||||
('mod-transmog', 43, '|cFF4DB3FFSet bonuses won''t appear in the item tooltip while transmogrified, but they are still fully active.\nTo stop seeing this notice, type |cFFFFFFFF.transmog disclaimer off|cFF4DB3FF.|r'),
|
||||
('mod-transmog', 44, 'Set bonus disclaimer enabled.'),
|
||||
('mod-transmog', 45, 'Set bonus disclaimer disabled.');
|
||||
|
||||
INSERT INTO `module_string_locale` (`module`, `id`, `locale`, `string`) VALUES
|
||||
-- ID 1: OK
|
||||
('mod-transmog', 1, 'koKR', '성공적으로 형상변환된 아이템'),
|
||||
('mod-transmog', 1, 'frFR', 'Objet transmogrifié avec succès'),
|
||||
('mod-transmog', 1, 'deDE', 'Gegenstand erfolgreich transmogrifiziert'),
|
||||
('mod-transmog', 1, 'zhCN', '物品变形成功'),
|
||||
('mod-transmog', 1, 'zhTW', '物品變身成功。'),
|
||||
('mod-transmog', 1, 'esES', 'Objeto transfigurado con éxito'),
|
||||
('mod-transmog', 1, 'esMX', 'Objeto transfigurado con éxito'),
|
||||
('mod-transmog', 1, 'ruRU', 'Предмет успешно трансмогрифицирован'),
|
||||
-- ID 2: INVALID_SLOT
|
||||
('mod-transmog', 2, 'koKR', '장비 슬롯이 비어 있습니다.'),
|
||||
('mod-transmog', 2, 'frFR', 'L''emplacement d''équipement est vide.'),
|
||||
('mod-transmog', 2, 'deDE', 'Der Ausrüstungsplatz ist leer.'),
|
||||
('mod-transmog', 2, 'zhCN', '装备槽是空的。'),
|
||||
('mod-transmog', 2, 'zhTW', '裝備欄位是空的。'),
|
||||
('mod-transmog', 2, 'esES', 'La ranura de equipo está vacía.'),
|
||||
('mod-transmog', 2, 'esMX', 'La ranura de equipo está vacía.'),
|
||||
('mod-transmog', 2, 'ruRU', 'Слот снаряжения пуст.'),
|
||||
-- ID 3: INVALID_SRC_ENTRY
|
||||
('mod-transmog', 3, 'koKR', '선택한 소스 요소가 잘못되었습니다.'),
|
||||
('mod-transmog', 3, 'frFR', 'Élément source sélectionné non valide.'),
|
||||
('mod-transmog', 3, 'deDE', 'Ungültiges ausgewähltes Quellelement.'),
|
||||
('mod-transmog', 3, 'zhCN', '所选源元素无效。'),
|
||||
('mod-transmog', 3, 'zhTW', '選擇的來源物品無效。'),
|
||||
('mod-transmog', 3, 'esES', 'Elemento fuente seleccionado no válido.'),
|
||||
('mod-transmog', 3, 'esMX', 'Elemento fuente seleccionado no válido.'),
|
||||
('mod-transmog', 3, 'ruRU', 'Недопустимый выбранный исходный элемент.'),
|
||||
-- ID 4: MISSING_SRC_ITEM
|
||||
('mod-transmog', 4, 'koKR', '소스 요소가 존재하지 않습니다.'),
|
||||
('mod-transmog', 4, 'frFR', 'L''élément source n''existe pas.'),
|
||||
('mod-transmog', 4, 'deDE', 'Das Quellelement existiert nicht.'),
|
||||
('mod-transmog', 4, 'zhCN', '源元素不存在。'),
|
||||
('mod-transmog', 4, 'zhTW', '來源物品不存在。'),
|
||||
('mod-transmog', 4, 'esES', 'El elemento de origen no existe.'),
|
||||
('mod-transmog', 4, 'esMX', 'El elemento de origen no existe.'),
|
||||
('mod-transmog', 4, 'ruRU', 'Исходный элемент не существует.'),
|
||||
-- ID 5: MISSING_DEST_ITEM
|
||||
('mod-transmog', 5, 'koKR', '대상 요소가 존재하지 않습니다.'),
|
||||
('mod-transmog', 5, 'frFR', 'L''élément cible n''existe pas.'),
|
||||
('mod-transmog', 5, 'deDE', 'Das Zielelement existiert nicht.'),
|
||||
('mod-transmog', 5, 'zhCN', '目标元素不存在。'),
|
||||
('mod-transmog', 5, 'zhTW', '目標物品不存在。'),
|
||||
('mod-transmog', 5, 'esES', 'El elemento de destino no existe.'),
|
||||
('mod-transmog', 5, 'esMX', 'El elemento de destino no existe.'),
|
||||
('mod-transmog', 5, 'ruRU', 'Целевой элемент не существует.'),
|
||||
-- ID 6: INVALID_ITEMS
|
||||
('mod-transmog', 6, 'koKR', '선택한 항목이 잘못되었습니다.'),
|
||||
('mod-transmog', 6, 'frFR', 'Les éléments sélectionnés ne sont pas valides'),
|
||||
('mod-transmog', 6, 'deDE', 'Die ausgewählten Elemente sind ungültig'),
|
||||
('mod-transmog', 6, 'zhCN', '所选项目无效'),
|
||||
('mod-transmog', 6, 'zhTW', '所選物品無效。'),
|
||||
('mod-transmog', 6, 'esES', 'Los elementos seleccionados no son válidos'),
|
||||
('mod-transmog', 6, 'esMX', 'Los elementos seleccionados no son válidos'),
|
||||
('mod-transmog', 6, 'ruRU', 'Выбранные элементы недействительны'),
|
||||
-- ID 7: NOT_ENOUGH_MONEY
|
||||
('mod-transmog', 7, 'koKR', '당신은 돈이 충분하지 않습니다.'),
|
||||
('mod-transmog', 7, 'frFR', 'Vous n''avez pas assez d''argent.'),
|
||||
('mod-transmog', 7, 'deDE', 'Du hast nicht genug Geld.'),
|
||||
('mod-transmog', 7, 'zhCN', '你没有足够的钱。'),
|
||||
('mod-transmog', 7, 'zhTW', '你沒有足夠的金錢。'),
|
||||
('mod-transmog', 7, 'esES', 'No tienes suficiente dinero.'),
|
||||
('mod-transmog', 7, 'esMX', 'No tienes suficiente dinero.'),
|
||||
('mod-transmog', 7, 'ruRU', 'У вас недостаточно денег.'),
|
||||
-- ID 8: NOT_ENOUGH_TOKENS
|
||||
('mod-transmog', 8, 'koKR', '칩이 충분하지 않습니다.'),
|
||||
('mod-transmog', 8, 'frFR', 'Vous n''avez pas assez de jetons.'),
|
||||
('mod-transmog', 8, 'deDE', 'Du hast nicht genug Chips.'),
|
||||
('mod-transmog', 8, 'zhCN', '你的筹码不够。'),
|
||||
('mod-transmog', 8, 'zhTW', '你沒有足夠的代幣。'),
|
||||
('mod-transmog', 8, 'esES', 'No tienes suficientes fichas.'),
|
||||
('mod-transmog', 8, 'esMX', 'No tienes suficientes fichas.'),
|
||||
('mod-transmog', 8, 'ruRU', 'У вас недостаточно фишек.'),
|
||||
-- ID 9: UNTRANSMOG_OK
|
||||
('mod-transmog', 9, 'koKR', '모든 형상변환을 제거했습니다.'),
|
||||
('mod-transmog', 9, 'frFR', 'Suppression de toutes vos transmogrifications'),
|
||||
('mod-transmog', 9, 'deDE', 'Alle deine Transmogrifikationen wurden entfernt'),
|
||||
('mod-transmog', 9, 'zhCN', '删除了你所有的变形'),
|
||||
('mod-transmog', 9, 'zhTW', '你的所有變身效果都被移除了。'),
|
||||
('mod-transmog', 9, 'esES', 'Se eliminaron todas tus transfiguraciones'),
|
||||
('mod-transmog', 9, 'esMX', 'Se eliminaron todas tus transfiguraciones'),
|
||||
('mod-transmog', 9, 'ruRU', 'Удалены все ваши трансмогрификации'),
|
||||
-- ID 10: UNTRANSMOG_NO_TRANSMOGS
|
||||
('mod-transmog', 10, 'koKR', '변형이 없습니다.'),
|
||||
('mod-transmog', 10, 'frFR', 'Aucune transfiguration trouvée.'),
|
||||
('mod-transmog', 10, 'deDE', 'Keine Verwandlung gefunden.'),
|
||||
('mod-transmog', 10, 'zhCN', '没有发现变形。'),
|
||||
('mod-transmog', 10, 'zhTW', '找不到變身效果。'),
|
||||
('mod-transmog', 10, 'esES', 'No se encontró transfiguración.'),
|
||||
('mod-transmog', 10, 'esMX', 'No se encontró transfiguración.'),
|
||||
('mod-transmog', 10, 'ruRU', 'Трансфигурация не найдена.'),
|
||||
-- ID 11: PRESET_ERR_INVALID_NAME
|
||||
('mod-transmog', 11, 'koKR', '삽입된 이름이 잘못되었습니다.'),
|
||||
('mod-transmog', 11, 'frFR', 'Nom inséré non valide.'),
|
||||
('mod-transmog', 11, 'deDE', 'Ungültiger eingegebener Name.'),
|
||||
('mod-transmog', 11, 'zhCN', '插入的名称无效。'),
|
||||
('mod-transmog', 11, 'zhTW', '插入的名稱無效。'),
|
||||
('mod-transmog', 11, 'esES', 'Nombre insertado no válido.'),
|
||||
('mod-transmog', 11, 'esMX', 'Nombre insertado no válido.'),
|
||||
('mod-transmog', 11, 'ruRU', 'Недопустимое вставленное имя.'),
|
||||
-- ID 12: CMD_SHOW
|
||||
('mod-transmog', 12, 'koKR', '형상변환된 아이템이 표시되며, 현재 영역을 새로고침하려면 다시 로그인하세요.'),
|
||||
('mod-transmog', 12, 'frFR', 'En affichant les objets transmogrifiés, reconnectez-vous pour actualiser la zone actuelle.'),
|
||||
('mod-transmog', 12, 'deDE', 'Transmogrifizierte Gegenstände werden angezeigt. Melden Sie sich erneut an, um den aktuellen Bereich zu aktualisieren.'),
|
||||
('mod-transmog', 12, 'zhCN', '显示已变形物品,重新登录即可刷新当前区域。'),
|
||||
('mod-transmog', 12, 'zhTW', '顯示已變身的物品,重新登錄以更新當前區域。'),
|
||||
('mod-transmog', 12, 'esES', 'Mostrando elementos transfigurados, vuelva a iniciar sesión para actualizar el área actual.'),
|
||||
('mod-transmog', 12, 'esMX', 'Mostrando elementos transfigurados, vuelva a iniciar sesión para actualizar el área actual.'),
|
||||
('mod-transmog', 12, 'ruRU', 'Отображение трансмогрифицированных предметов. Войдите в систему еще раз, чтобы обновить текущую область.'),
|
||||
-- ID 13: CMD_HIDE
|
||||
('mod-transmog', 13, 'koKR', '형상변환된 아이템을 숨기고 다시 로그인하여 현재 영역을 새로 고칩니다.'),
|
||||
('mod-transmog', 13, 'frFR', 'Masquez les objets transmogrifiés, reconnectez-vous pour actualiser la zone actuelle.'),
|
||||
('mod-transmog', 13, 'deDE', 'Transmogrifizierte Gegenstände ausblenden, erneut anmelden, um den aktuellen Bereich zu aktualisieren.'),
|
||||
('mod-transmog', 13, 'zhCN', '隐藏变形物品,重新登录以刷新当前区域。'),
|
||||
('mod-transmog', 13, 'zhTW', '隱藏已變身的物品,重新登錄以更新當前區域。'),
|
||||
('mod-transmog', 13, 'esES', 'Ocultar elementos transfigurados, volver a iniciar sesión para actualizar el área actual.'),
|
||||
('mod-transmog', 13, 'esMX', 'Ocultar elementos transfigurados, volver a iniciar sesión para actualizar el área actual.'),
|
||||
('mod-transmog', 13, 'ruRU', 'Скройте трансмогрифицированные предметы, войдите в систему, чтобы обновить текущую область.'),
|
||||
-- ID 14: CMD_ADD_UNSUITABLE
|
||||
('mod-transmog', 14, 'koKR', '선택한 항목은 변형에 적합하지 않습니다.'),
|
||||
('mod-transmog', 14, 'frFR', 'L''objet sélectionné ne convient pas à la métamorphose.'),
|
||||
('mod-transmog', 14, 'deDE', 'Der ausgewählte Gegenstand ist nicht für die Verwandlung geeignet.'),
|
||||
('mod-transmog', 14, 'zhCN', '所选项目不适合变形。'),
|
||||
('mod-transmog', 14, 'zhTW', '所選物品不適合進行變身。'),
|
||||
('mod-transmog', 14, 'esES', 'El elemento seleccionado no es adecuado para la transfiguración.'),
|
||||
('mod-transmog', 14, 'esMX', 'El elemento seleccionado no es adecuado para la transfiguración.'),
|
||||
('mod-transmog', 14, 'ruRU', 'Выбранный предмет не подходит для преображения.'),
|
||||
-- ID 15: CMD_ADD_FORBIDDEN
|
||||
('mod-transmog', 15, 'koKR', '선택한 아이템은 대상 플레이어의 형상변환에 사용할 수 없습니다.'),
|
||||
('mod-transmog', 15, 'frFR', 'L''objet sélectionné ne peut pas être utilisé pour la transmogrification du joueur ciblé'),
|
||||
('mod-transmog', 15, 'deDE', 'Der ausgewählte Gegenstand kann nicht für die Transmogrifizierung des Zielspielers verwendet werden'),
|
||||
('mod-transmog', 15, 'zhCN', '所选物品不能用于目标玩家的变身'),
|
||||
('mod-transmog', 15, 'zhTW', '所選物品不能用於目標玩家的變身效果。'),
|
||||
('mod-transmog', 15, 'esES', 'El elemento seleccionado no se puede usar para la transfiguración del jugador objetivo'),
|
||||
('mod-transmog', 15, 'esMX', 'El elemento seleccionado no se puede usar para la transfiguración del jugador objetivo'),
|
||||
('mod-transmog', 15, 'ruRU', 'Выбранный предмет нельзя использовать для трансмогрификации целевого игрока.'),
|
||||
-- ID 16: CMD_BEGIN_SYNC
|
||||
('mod-transmog', 16, 'koKR', '형상변환 모양 동기화 수행 중...'),
|
||||
('mod-transmog', 16, 'frFR', 'Exécution de la synchronisation de l''apparence de transmogrification...'),
|
||||
('mod-transmog', 16, 'deDE', 'Synchronisierung des Transmog-Erscheinungsbilds wird durchgeführt ...'),
|
||||
('mod-transmog', 16, 'zhCN', '正在执行 Transmog 外观同步...'),
|
||||
('mod-transmog', 16, 'zhTW', '正在執行外觀同步變身操作...'),
|
||||
('mod-transmog', 16, 'esES', 'Realizando sincronización de apariencia de transfiguración...'),
|
||||
('mod-transmog', 16, 'esMX', 'Realizando sincronización de apariencia de transfiguración...'),
|
||||
('mod-transmog', 16, 'ruRU', 'Выполнение синхронизации внешнего вида Transmog...'),
|
||||
-- ID 17: CMD_COMPLETE_SYNC
|
||||
('mod-transmog', 17, 'koKR', '전체 모양 동기화'),
|
||||
('mod-transmog', 17, 'frFR', 'Synchronisation complète de l''apparence'),
|
||||
('mod-transmog', 17, 'deDE', 'Vollständige Synchronisierung des Erscheinungsbilds'),
|
||||
('mod-transmog', 17, 'zhCN', '完全外观同步'),
|
||||
('mod-transmog', 17, 'zhTW', '外觀同步變身操作完成。'),
|
||||
('mod-transmog', 17, 'esES', 'Sincronización de apariencia completa'),
|
||||
('mod-transmog', 17, 'esMX', 'Sincronización de apariencia completa'),
|
||||
('mod-transmog', 17, 'ruRU', 'Полная синхронизация внешнего вида'),
|
||||
-- ID 20: HOWWORKS
|
||||
('mod-transmog', 20, 'koKR', '형상변환은 어떻게 작동합니까?'),
|
||||
('mod-transmog', 20, 'frFR', 'Comment fonctionne la transmogrification ?'),
|
||||
('mod-transmog', 20, 'deDE', 'Wie funktioniert Transmogrifizierung?'),
|
||||
('mod-transmog', 20, 'zhCN', '变形术是如何运作的?'),
|
||||
('mod-transmog', 20, 'zhTW', '幻化是如何運作的?'),
|
||||
('mod-transmog', 20, 'esES', '¿Cómo funciona la transfiguración?'),
|
||||
('mod-transmog', 20, 'esMX', '¿Cómo funciona la transfiguración?'),
|
||||
('mod-transmog', 20, 'ruRU', 'Как работает трансмогрификация?'),
|
||||
-- ID 21: MANAGESETS
|
||||
('mod-transmog', 21, 'koKR', '세트 관리'),
|
||||
('mod-transmog', 21, 'frFR', 'Gérer les ensembles'),
|
||||
('mod-transmog', 21, 'deDE', 'Sets verwalten'),
|
||||
('mod-transmog', 21, 'zhCN', '管理套装'),
|
||||
('mod-transmog', 21, 'zhTW', '管理套裝'),
|
||||
('mod-transmog', 21, 'esES', 'Administrar conjuntos'),
|
||||
('mod-transmog', 21, 'esMX', 'Administrar conjuntos'),
|
||||
('mod-transmog', 21, 'ruRU', 'Управление комплектами'),
|
||||
-- ID 22: REMOVETRANSMOG
|
||||
('mod-transmog', 22, 'koKR', '모든 변형 제거'),
|
||||
('mod-transmog', 22, 'frFR', 'Supprimer toutes les transmogrifications'),
|
||||
('mod-transmog', 22, 'deDE', 'Alle Transmogrifikationen entfernen'),
|
||||
('mod-transmog', 22, 'zhCN', '移除所有幻化'),
|
||||
('mod-transmog', 22, 'zhTW', '移除所有幻化'),
|
||||
('mod-transmog', 22, 'esES', 'Eliminar todas las transfiguraciones'),
|
||||
('mod-transmog', 22, 'esMX', 'Eliminar todas las transfiguraciones'),
|
||||
('mod-transmog', 22, 'ruRU', 'Удалить все трансмогрификации'),
|
||||
-- ID 23: REMOVETRANSMOG_ASK
|
||||
('mod-transmog', 23, 'koKR', '장착한 모든 아이템의 변형을 제거합니까?'),
|
||||
('mod-transmog', 23, 'frFR', 'Supprimer les transmogrifications de tous les objets équipés ?'),
|
||||
('mod-transmog', 23, 'deDE', 'Transmogrifikationen von allen ausgerüsteten Gegenständen entfernen?'),
|
||||
('mod-transmog', 23, 'zhCN', '是否要从所有已装备的物品中移除幻化?'),
|
||||
('mod-transmog', 23, 'zhTW', '從所有已裝備物品中移除幻化?'),
|
||||
('mod-transmog', 23, 'esES', '¿Eliminar las transfiguraciones de todos los objetos equipados?'),
|
||||
('mod-transmog', 23, 'esMX', '¿Eliminar las transfiguraciones de todos los objetos equipados?'),
|
||||
('mod-transmog', 23, 'ruRU', 'Удалить трансмогрификации со всех экипированных предметов?'),
|
||||
-- ID 24: UPDATEMENU
|
||||
('mod-transmog', 24, 'koKR', '메뉴 업데이트'),
|
||||
('mod-transmog', 24, 'frFR', 'Mettre à jour le menu'),
|
||||
('mod-transmog', 24, 'deDE', 'Menü aktualisieren'),
|
||||
('mod-transmog', 24, 'zhCN', '更新菜单'),
|
||||
('mod-transmog', 24, 'zhTW', '更新選單'),
|
||||
('mod-transmog', 24, 'esES', 'Actualizar menú'),
|
||||
('mod-transmog', 24, 'esMX', 'Actualizar menú'),
|
||||
('mod-transmog', 24, 'ruRU', 'Обновить меню'),
|
||||
-- ID 25: HOWSETSWORK
|
||||
('mod-transmog', 25, 'koKR', '세트는 어떻게 작동합니까?'),
|
||||
('mod-transmog', 25, 'frFR', 'Comment fonctionnent les ensembles ?'),
|
||||
('mod-transmog', 25, 'deDE', 'Wie funktionieren Sets?'),
|
||||
('mod-transmog', 25, 'zhCN', '套装是如何运作的?'),
|
||||
('mod-transmog', 25, 'zhTW', '套裝如何運作?'),
|
||||
('mod-transmog', 25, 'esES', '¿Cómo funcionan los conjuntos?'),
|
||||
('mod-transmog', 25, 'esMX', '¿Cómo funcionan los conjuntos?'),
|
||||
('mod-transmog', 25, 'ruRU', 'Как работают комплекты?'),
|
||||
-- ID 26: SAVESET
|
||||
('mod-transmog', 26, 'koKR', '세트 저장'),
|
||||
('mod-transmog', 26, 'frFR', 'Sauvegarder l''ensemble'),
|
||||
('mod-transmog', 26, 'deDE', 'Set speichern'),
|
||||
('mod-transmog', 26, 'zhCN', '保存套装'),
|
||||
('mod-transmog', 26, 'zhTW', '儲存套裝'),
|
||||
('mod-transmog', 26, 'esES', 'Guardar conjunto'),
|
||||
('mod-transmog', 26, 'esMX', 'Guardar conjunto'),
|
||||
('mod-transmog', 26, 'ruRU', 'Сохранить комплект'),
|
||||
-- ID 27: BACK
|
||||
('mod-transmog', 27, 'koKR', '뒤로...'),
|
||||
('mod-transmog', 27, 'frFR', 'Retour...'),
|
||||
('mod-transmog', 27, 'deDE', 'Zurück...'),
|
||||
('mod-transmog', 27, 'zhCN', '返回...'),
|
||||
('mod-transmog', 27, 'zhTW', '返回...'),
|
||||
('mod-transmog', 27, 'esES', 'Atrás...'),
|
||||
('mod-transmog', 27, 'esMX', 'Atrás...'),
|
||||
('mod-transmog', 27, 'ruRU', 'Назад...'),
|
||||
-- ID 28: USESET
|
||||
('mod-transmog', 28, 'koKR', '이 세트를 사용'),
|
||||
('mod-transmog', 28, 'frFR', 'Utiliser cet ensemble'),
|
||||
('mod-transmog', 28, 'deDE', 'Dieses Set verwenden'),
|
||||
('mod-transmog', 28, 'zhCN', '使用此套装'),
|
||||
('mod-transmog', 28, 'zhTW', '使用此套裝'),
|
||||
('mod-transmog', 28, 'esES', 'Usar este conjunto'),
|
||||
('mod-transmog', 28, 'esMX', 'Usar este conjunto'),
|
||||
('mod-transmog', 28, 'ruRU', 'Использовать этот комплект'),
|
||||
-- ID 29: CONFIRM_USESET
|
||||
('mod-transmog', 29, 'koKR', '이 세트를 변형에 사용하면 변형된 아이템이 계정에 제한되어 환불 및 거래가 불가능합니다.\n계속하시겠습니까?\n\n'),
|
||||
('mod-transmog', 29, 'frFR', 'En utilisant cet ensemble pour la transmogrification, les objets transmogrifiés seront liés à votre personnage et deviendront non remboursables et non échangeables.\nVoulez-vous continuer ?\n\n'),
|
||||
('mod-transmog', 29, 'deDE', 'Wenn du dieses Set für die Transmogrifikation verwendest, werden die transmogrifizierten Gegenstände an dich gebunden und können nicht erstattet oder gehandelt werden.\nMöchtest du fortfahren?\n\n'),
|
||||
('mod-transmog', 29, 'zhCN', '将此套装用于幻化将使幻化后的物品与您绑定,并使其不可退还和不可交易。\n您是否要继续?\n\n'),
|
||||
('mod-transmog', 29, 'zhTW', '使用此套裝進行幻化將使幻化後的物品與您綁定,並使其無法退款和無法交易。\n您是否希望繼續?\n\n'),
|
||||
('mod-transmog', 29, 'esES', 'Usar este conjunto para transfigurar vinculará los objetos transfigurados a ti y los volverá no reembolsables y no intercambiables.\n¿Deseas continuar?\n\n'),
|
||||
('mod-transmog', 29, 'esMX', 'Usar este conjunto para transfigurar vinculará los objetos transfigurados a ti y los volverá no reembolsables y no intercambiables.\n¿Deseas continuar?\n\n'),
|
||||
('mod-transmog', 29, 'ruRU', 'Использование этого комплекта для трансмогрификации привяжет трансмогрифицированные предметы к вам и сделает их неподлежащими возврату и обмену.\nЖелаете продолжить?\n\n'),
|
||||
-- ID 30: DELETESET
|
||||
('mod-transmog', 30, 'koKR', '세트 삭제'),
|
||||
('mod-transmog', 30, 'frFR', 'Supprimer l''ensemble'),
|
||||
('mod-transmog', 30, 'deDE', 'Set löschen'),
|
||||
('mod-transmog', 30, 'zhCN', '删除套装'),
|
||||
('mod-transmog', 30, 'zhTW', '刪除套裝'),
|
||||
('mod-transmog', 30, 'esES', 'Eliminar conjunto'),
|
||||
('mod-transmog', 30, 'esMX', 'Eliminar conjunto'),
|
||||
('mod-transmog', 30, 'ruRU', 'Удалить комплект'),
|
||||
-- ID 31: CONFIRM_DELETESET
|
||||
('mod-transmog', 31, 'koKR', '을(를) 삭제하시겠습니까 '),
|
||||
('mod-transmog', 31, 'frFR', 'Êtes-vous sûr de vouloir supprimer '),
|
||||
('mod-transmog', 31, 'deDE', 'Möchten Sie wirklich löschen '),
|
||||
('mod-transmog', 31, 'zhCN', '您确定要删除吗 '),
|
||||
('mod-transmog', 31, 'zhTW', '您確定要刪除 '),
|
||||
('mod-transmog', 31, 'esES', '¿Estás seguro de que quieres eliminar '),
|
||||
('mod-transmog', 31, 'esMX', '¿Estás seguro de que quieres eliminar '),
|
||||
('mod-transmog', 31, 'ruRU', 'Вы уверены, что хотите удалить '),
|
||||
-- ID 32: INSERTSETNAME
|
||||
('mod-transmog', 32, 'koKR', '세트 이름 입력'),
|
||||
('mod-transmog', 32, 'frFR', 'Insérer le nom de l''ensemble'),
|
||||
('mod-transmog', 32, 'deDE', 'Set-Namen einfügen'),
|
||||
('mod-transmog', 32, 'zhCN', '插入套装名称'),
|
||||
('mod-transmog', 32, 'zhTW', '輸入套裝名稱'),
|
||||
('mod-transmog', 32, 'esES', 'Insertar nombre del conjunto'),
|
||||
('mod-transmog', 32, 'esMX', 'Insertar nombre del conjunto'),
|
||||
('mod-transmog', 32, 'ruRU', 'Введите имя комплекта'),
|
||||
-- ID 33: SEARCH
|
||||
('mod-transmog', 33, 'koKR', '검색...'),
|
||||
('mod-transmog', 33, 'frFR', 'Rechercher...'),
|
||||
('mod-transmog', 33, 'deDE', 'Suche...'),
|
||||
('mod-transmog', 33, 'zhCN', '搜索...'),
|
||||
('mod-transmog', 33, 'zhTW', '搜索...'),
|
||||
('mod-transmog', 33, 'esES', 'Buscar...'),
|
||||
('mod-transmog', 33, 'esMX', 'Buscar...'),
|
||||
('mod-transmog', 33, 'ruRU', 'Поиск...'),
|
||||
-- ID 34: SEARCHING_FOR
|
||||
('mod-transmog', 34, 'koKR', '검색 중: '),
|
||||
('mod-transmog', 34, 'frFR', 'Recherche en cours: '),
|
||||
('mod-transmog', 34, 'deDE', 'Suche nach: '),
|
||||
('mod-transmog', 34, 'zhCN', '正在搜索: '),
|
||||
('mod-transmog', 34, 'zhTW', '正在搜尋:'),
|
||||
('mod-transmog', 34, 'esES', 'Buscando:'),
|
||||
('mod-transmog', 34, 'esMX', 'Buscando: '),
|
||||
('mod-transmog', 34, 'ruRU', 'Поиск: '),
|
||||
-- ID 35: SEARCH_FOR_ITEM
|
||||
('mod-transmog', 35, 'koKR', '어떤 아이템을 찾으시겠습니까?'),
|
||||
('mod-transmog', 35, 'frFR', 'Rechercher quel objet ?'),
|
||||
('mod-transmog', 35, 'deDE', 'Nach welchem Gegenstand suchen?'),
|
||||
('mod-transmog', 35, 'zhCN', '搜索哪个物品?'),
|
||||
('mod-transmog', 35, 'zhTW', '搜索哪個物品?'),
|
||||
('mod-transmog', 35, 'esES', '¿Buscar un objeto?'),
|
||||
('mod-transmog', 35, 'esMX', '¿Buscar un objeto?'),
|
||||
('mod-transmog', 35, 'ruRU', 'Поиск предмета:'),
|
||||
-- ID 36: CONFIRM_HIDE_ITEM
|
||||
('mod-transmog', 36, 'koKR', '이 슬롯에 아이템을 감추고 있습니다.\n계속하시겠습니까?\n\n'),
|
||||
('mod-transmog', 36, 'frFR', 'Vous masquez l''objet dans cet emplacement.\nVoulez-vous continuer ?\n\n'),
|
||||
('mod-transmog', 36, 'deDE', 'Du versteckst das Item in diesem Slot.\nMöchtest du fortfahren?\n\n'),
|
||||
('mod-transmog', 36, 'zhCN', '您正在隐藏此槽中的物品。\n您是否要继续?\n\n'),
|
||||
('mod-transmog', 36, 'zhTW', '您正在隱藏此槽中的物品。\n您是否希望繼續?\n\n'),
|
||||
('mod-transmog', 36, 'esES', 'Estás ocultando el objeto en esta ranura.\n¿Deseas continuar?\n\n'),
|
||||
('mod-transmog', 36, 'esMX', 'Estás ocultando el objeto en esta ranura.\n¿Deseas continuar?\n\n'),
|
||||
('mod-transmog', 36, 'ruRU', 'Вы скрываете предмет в этом слоте.\nЖелаете продолжить?\n\n'),
|
||||
-- ID 37: HIDESLOT
|
||||
('mod-transmog', 37, 'koKR', '슬롯 숨기기'),
|
||||
('mod-transmog', 37, 'frFR', 'Cacher l''emplacement'),
|
||||
('mod-transmog', 37, 'deDE', 'Slot verbergen'),
|
||||
('mod-transmog', 37, 'zhCN', '隐藏槽位'),
|
||||
('mod-transmog', 37, 'zhTW', '隱藏槽位'),
|
||||
('mod-transmog', 37, 'esES', 'Ocultar ranura'),
|
||||
('mod-transmog', 37, 'esMX', 'Ocultar ranura'),
|
||||
('mod-transmog', 37, 'ruRU', 'Скрыть слот'),
|
||||
-- ID 38: REMOVETRANSMOG_SLOT
|
||||
('mod-transmog', 38, 'koKR', '해당 슬롯의 형상변환을 제거합니까?'),
|
||||
('mod-transmog', 38, 'frFR', 'Supprimer la transmogrification de l''emplacement ?'),
|
||||
('mod-transmog', 38, 'deDE', 'Transmogrifikation aus dem Slot entfernen?'),
|
||||
('mod-transmog', 38, 'zhCN', '是否要从该槽位中移除幻化?'),
|
||||
('mod-transmog', 38, 'zhTW', '從該槽位移除幻化?'),
|
||||
('mod-transmog', 38, 'esES', '¿Eliminar la transfiguración del espacio?'),
|
||||
('mod-transmog', 38, 'esMX', '¿Eliminar la transfiguración del espacio?'),
|
||||
('mod-transmog', 38, 'ruRU', 'Удалить трансмогрификацию из ячейки?'),
|
||||
-- ID 39: CONFIRM_USEITEM
|
||||
('mod-transmog', 39, 'koKR', '이 아이템을 변형에 사용하면 계정에 제한되어 환불 및 거래가 불가능하게 됩니다.\n계속하시겠습니까?\n\n'),
|
||||
('mod-transmog', 39, 'frFR', 'En utilisant cet objet pour la transmogrification, il sera lié à votre personnage et deviendra non remboursable et non échangeable.\nVoulez-vous continuer ?\n\n'),
|
||||
('mod-transmog', 39, 'deDE', 'Wenn du diesen Gegenstand für die Transmogrifikation verwendest, wird er an dich gebunden und kann nicht erstattet oder gehandelt werden.\nMöchtest du fortfahren?\n\n'),
|
||||
('mod-transmog', 39, 'zhCN', '将此物品用于幻化将使其与您绑定,并使其不可退还和不可交易。\n您是否要继续?\n\n'),
|
||||
('mod-transmog', 39, 'zhTW', '使用此物品進行幻化將使其與您綁定,並使其無法退款和無法交易。\n您是否希望繼續?\n\n'),
|
||||
('mod-transmog', 39, 'esES', 'Usar este objeto para transfigurar lo vinculará a ti y lo volverá no reembolsable y no intercambiable.\n¿Deseas continuar?\n\n'),
|
||||
('mod-transmog', 39, 'esMX', 'Usar este objeto para transfigurar lo vinculará a ti y lo volverá no reembolsable y no intercambiable.\n¿Deseas continuar?\n\n'),
|
||||
('mod-transmog', 39, 'ruRU', 'Использование этого предмета для трансмогрификации привяжет его к вам и сделает его неподлежащим возврату и обмену.\nЖелаете продолжить?\n\n'),
|
||||
-- ID 40: PREVIOUS_PAGE
|
||||
('mod-transmog', 40, 'koKR', '이전 페이지'),
|
||||
('mod-transmog', 40, 'frFR', 'Page précédente'),
|
||||
('mod-transmog', 40, 'deDE', 'Vorherige Seite'),
|
||||
('mod-transmog', 40, 'zhCN', '上一页'),
|
||||
('mod-transmog', 40, 'zhTW', '上一頁'),
|
||||
('mod-transmog', 40, 'esES', 'Página anterior'),
|
||||
('mod-transmog', 40, 'esMX', 'Página anterior'),
|
||||
('mod-transmog', 40, 'ruRU', 'Предыдущая страница'),
|
||||
-- ID 41: NEXT_PAGE
|
||||
('mod-transmog', 41, 'koKR', '다음 페이지'),
|
||||
('mod-transmog', 41, 'frFR', 'Page suivante'),
|
||||
('mod-transmog', 41, 'deDE', 'Nächste Seite'),
|
||||
('mod-transmog', 41, 'zhCN', '下一页'),
|
||||
('mod-transmog', 41, 'zhTW', '下一頁'),
|
||||
('mod-transmog', 41, 'esES', 'Página siguiente'),
|
||||
('mod-transmog', 41, 'esMX', 'Página siguiente'),
|
||||
('mod-transmog', 41, 'ruRU', 'Следующая страница'),
|
||||
-- ID 42: ADDED_APPEARANCE
|
||||
('mod-transmog', 42, 'koKR', '이(가) 외형 컬렉션에 추가되었습니다.'),
|
||||
('mod-transmog', 42, 'frFR', 'a été ajouté(e) à votre collection d''apparences.'),
|
||||
('mod-transmog', 42, 'deDE', 'wurde deiner Transmog-Sammlung hinzugefügt.'),
|
||||
('mod-transmog', 42, 'zhCN', '已添加到外观收藏中。'),
|
||||
('mod-transmog', 42, 'zhTW', '已加入您的外觀收藏。'),
|
||||
('mod-transmog', 42, 'esES', 'se ha añadido a tu colección de apariencias.'),
|
||||
('mod-transmog', 42, 'esMX', 'se ha agregado a tu colección de apariencias.'),
|
||||
('mod-transmog', 42, 'ruRU', 'был добавлен в вашу коллекцию обликов.'),
|
||||
|
||||
('mod-transmog', 43, 'koKR', '|cFF4DB3FF변형 중에는 아이템 툴팁에 세트 보너스가 표시되지 않지만, 여전히 완전히 활성화되어 있습니다.\n이 알림을 중지하려면 |cFFFFFFFF.transmog disclaimer off|cFF4DB3FF 을 입력하세요.|r'),
|
||||
('mod-transmog', 43, 'frFR', '|cFF4DB3FFLes bonus de set n''apparaîtront pas dans l''info-bulle de l''objet lors de la transmogrification, mais ils restent pleinement actifs.\nPour arrêter d''afficher cette notice, tapez |cFFFFFFFF.transmog disclaimer off|cFF4DB3FF.|r'),
|
||||
('mod-transmog', 43, 'deDE', '|cFF4DB3FFSetboni werden in der Gegenstandsbeschreibung während der Transmogrifizierung nicht angezeigt, sind aber weiterhin voll aktiv.\nUm diesen Hinweis zu deaktivieren, gib |cFFFFFFFF.transmog disclaimer off|cFF4DB3FF ein.|r'),
|
||||
('mod-transmog', 43, 'zhCN', '|cFF4DB3FF幻化后物品提示中不会显示套装加成,但套装加成仍然完全有效。\n若要停止显示此提示,请输入 |cFFFFFFFF.transmog disclaimer off|cFF4DB3FF。|r'),
|
||||
('mod-transmog', 43, 'zhTW', '|cFF4DB3FF幻化後物品提示中不會顯示套裝加成,但套裝加成仍然完全有效。\n若要停止顯示此提示,請輸入 |cFFFFFFFF.transmog disclaimer off|cFF4DB3FF。|r'),
|
||||
('mod-transmog', 43, 'esES', '|cFF4DB3FFLas bonificaciones de conjunto no aparecerán en la descripción del objeto mientras esté transfigurado, pero siguen activas.\nPara dejar de ver este aviso, escribe |cFFFFFFFF.transmog disclaimer off|cFF4DB3FF.|r'),
|
||||
('mod-transmog', 43, 'esMX', '|cFF4DB3FFLas bonificaciones de conjunto no aparecerán en la descripción del objeto mientras esté transfigurado, pero siguen activas.\nPara dejar de ver este aviso, escribe |cFFFFFFFF.transmog disclaimer off|cFF4DB3FF.|r'),
|
||||
('mod-transmog', 43, 'ruRU', '|cFF4DB3FFБонусы набора не будут отображаться в подсказке предмета при трансмогрификации, но они по-прежнему полностью активны.\nЧтобы скрыть это уведомление, введите |cFFFFFFFF.transmog disclaimer off|cFF4DB3FF.|r'),
|
||||
|
||||
('mod-transmog', 44, 'koKR', '세트 보너스 알림이 활성화되었습니다.'),
|
||||
('mod-transmog', 44, 'frFR', 'Avertissement de bonus de set activé.'),
|
||||
('mod-transmog', 44, 'deDE', 'Setbonus-Hinweis aktiviert.'),
|
||||
('mod-transmog', 44, 'zhCN', '套装加成提示已启用。'),
|
||||
('mod-transmog', 44, 'zhTW', '套裝加成提示已啟用。'),
|
||||
('mod-transmog', 44, 'esES', 'Aviso de bonificación de conjunto activado.'),
|
||||
('mod-transmog', 44, 'esMX', 'Aviso de bonificación de conjunto activado.'),
|
||||
('mod-transmog', 44, 'ruRU', 'Уведомление о бонусах набора включено.'),
|
||||
|
||||
('mod-transmog', 45, 'koKR', '세트 보너스 알림이 비활성화되었습니다.'),
|
||||
('mod-transmog', 45, 'frFR', 'Avertissement de bonus de set désactivé.'),
|
||||
('mod-transmog', 45, 'deDE', 'Setbonus-Hinweis deaktiviert.'),
|
||||
('mod-transmog', 45, 'zhCN', '套装加成提示已禁用。'),
|
||||
('mod-transmog', 45, 'zhTW', '套裝加成提示已禁用。'),
|
||||
('mod-transmog', 45, 'esES', 'Aviso de bonificación de conjunto desactivado.'),
|
||||
('mod-transmog', 45, 'esMX', 'Aviso de bonificación de conjunto desactivado.'),
|
||||
('mod-transmog', 45, 'ruRU', 'Уведомление о бонусах набора отключено.');
|
||||
|
||||
DELETE FROM `command` WHERE `name` IN ('transmog', 'transmog add', 'transmog sync', 'transmog add set', 'transmog portable', 'transmog interface', 'transmog disclaimer');
|
||||
INSERT INTO `command` (`name`, `security`, `help`) VALUES
|
||||
('transmog', 0, 'Syntax: .transmog <on/off>\nAllows seeing transmogrified items and the transmogrifier NPC.'),
|
||||
('transmog add', 1, 'Syntax: .transmog add $player $item\nAdds an item to a player\'s appearance collection.'),
|
||||
('transmog sync', 0, 'Syntax: .transmog sync\nSyncs transmog addon appearances with the server.'),
|
||||
('transmog add set', 1, 'Syntax: .transmog add set $player $itemSet\nAdds items of an item set to a player\'s appearance collection.'),
|
||||
('transmog portable', 1, 'Syntax: .transmog portable \nSummons the Ethereal Warpweaver, a portable version of the transmogrification NPC.'),
|
||||
('transmog interface', 1, 'Syntax: .transmog interface <on/off>\nEnables transmogrifier "vendor" interface, allowing appearance previews.\nDISCLAIMER: If you have too many appearances, some will not be displayed due to a client limitation. In that case, disable this option.'),
|
||||
('transmog disclaimer', 0, 'Syntax: .transmog disclaimer <on/off>\nToggles the set bonus disclaimer notice shown when transmogrifying set items.');
|
||||
+445
@@ -0,0 +1,445 @@
|
||||
-- Migrate transmog strings from acore_string (global IDs 11100-11121) to module_string.
|
||||
-- Also migrates hardcoded gossip strings from C++ to module_string.
|
||||
DELETE FROM `acore_string` WHERE `entry` BETWEEN 11100 AND 11121;
|
||||
|
||||
DELETE FROM `module_string` WHERE `module` = 'mod-transmog';
|
||||
DELETE FROM `module_string_locale` WHERE `module` = 'mod-transmog';
|
||||
INSERT INTO `module_string` (`module`, `id`, `string`) VALUES
|
||||
-- Transmog result strings
|
||||
('mod-transmog', 1, 'Item successfully transmogrified.'),
|
||||
('mod-transmog', 2, 'Equipment slot is empty.'),
|
||||
('mod-transmog', 3, 'Invalid source item selected.'),
|
||||
('mod-transmog', 4, 'Source item does not exist.'),
|
||||
('mod-transmog', 5, 'Destination item does not exist.'),
|
||||
('mod-transmog', 6, 'Selected items are invalid.'),
|
||||
('mod-transmog', 7, 'You don''t have enough money.'),
|
||||
('mod-transmog', 8, 'You don''t have enough tokens.'),
|
||||
('mod-transmog', 9, 'All your transmogrifications were removed.'),
|
||||
('mod-transmog', 10, 'No transmogrification found.'),
|
||||
('mod-transmog', 11, 'Invalid name inserted.'),
|
||||
-- Command strings
|
||||
('mod-transmog', 12, 'Showing transmogrified items, relog to update the current area.'),
|
||||
('mod-transmog', 13, 'Hiding transmogrified items, relog to update the current area.'),
|
||||
('mod-transmog', 14, 'The selected item is not suitable for transmogrification.'),
|
||||
('mod-transmog', 15, 'The selected item cannot be used for transmogrification of the target player.'),
|
||||
('mod-transmog', 16, 'Performing transmog appearance sync...'),
|
||||
('mod-transmog', 17, 'Appearance sync complete.'),
|
||||
('mod-transmog', 18, 'The transmog NPC will now display available appearances as a vendor interface, allowing preview. \nDISCLAIMER: If you have too many appearances, some will not be displayed due to a client limitation. In that case, disable this option.'),
|
||||
('mod-transmog', 19, 'The transmog NPC will now display available appearances as gossip list.'),
|
||||
-- Gossip/UI strings
|
||||
('mod-transmog', 20, 'How does transmogrification work?'),
|
||||
('mod-transmog', 21, 'Manage sets'),
|
||||
('mod-transmog', 22, 'Remove all transmogrifications'),
|
||||
('mod-transmog', 23, 'Remove transmogrifications from all equipped items?'),
|
||||
('mod-transmog', 24, 'Update menu'),
|
||||
('mod-transmog', 25, 'How do sets work?'),
|
||||
('mod-transmog', 26, 'Save set'),
|
||||
('mod-transmog', 27, 'Back...'),
|
||||
('mod-transmog', 28, 'Use this set'),
|
||||
('mod-transmog', 29, 'Using this set for transmogrify will bind transmogrified items to you and make them non-refundable and non-tradeable.\nDo you wish to continue?\n\n'),
|
||||
('mod-transmog', 30, 'Delete set'),
|
||||
('mod-transmog', 31, 'Are you sure you want to delete '),
|
||||
('mod-transmog', 32, 'Insert set name'),
|
||||
('mod-transmog', 33, 'Search...'),
|
||||
('mod-transmog', 34, 'Searching for: '),
|
||||
('mod-transmog', 35, 'Search for what item?'),
|
||||
('mod-transmog', 36, 'You are hiding the item in this slot.\nDo you wish to continue?\n\n'),
|
||||
('mod-transmog', 37, 'Hide Slot'),
|
||||
('mod-transmog', 38, 'Remove transmogrification from the slot?'),
|
||||
('mod-transmog', 39, 'Using this item for transmogrify will bind it to you and make it non-refundable and non-tradeable.\nDo you wish to continue?\n\n'),
|
||||
('mod-transmog', 40, 'Previous Page'),
|
||||
('mod-transmog', 41, 'Next Page'),
|
||||
('mod-transmog', 42, 'has been added to your appearance collection.'),
|
||||
-- Disclaimer strings
|
||||
('mod-transmog', 43, '|cFF4DB3FFSet bonuses won''t appear in the item tooltip while transmogrified, but they are still fully active.\nTo stop seeing this notice, type |cFFFFFFFF.transmog disclaimer off|cFF4DB3FF.|r'),
|
||||
('mod-transmog', 44, 'Set bonus disclaimer enabled.'),
|
||||
('mod-transmog', 45, 'Set bonus disclaimer disabled.');
|
||||
|
||||
INSERT INTO `module_string_locale` (`module`, `id`, `locale`, `string`) VALUES
|
||||
-- ID 1: OK
|
||||
('mod-transmog', 1, 'koKR', '성공적으로 형상변환된 아이템'),
|
||||
('mod-transmog', 1, 'frFR', 'Objet transmogrifié avec succès'),
|
||||
('mod-transmog', 1, 'deDE', 'Gegenstand erfolgreich transmogrifiziert'),
|
||||
('mod-transmog', 1, 'zhCN', '物品变形成功'),
|
||||
('mod-transmog', 1, 'zhTW', '物品變身成功。'),
|
||||
('mod-transmog', 1, 'esES', 'Objeto transfigurado con éxito'),
|
||||
('mod-transmog', 1, 'esMX', 'Objeto transfigurado con éxito'),
|
||||
('mod-transmog', 1, 'ruRU', 'Предмет успешно трансмогрифицирован'),
|
||||
-- ID 2: INVALID_SLOT
|
||||
('mod-transmog', 2, 'koKR', '장비 슬롯이 비어 있습니다.'),
|
||||
('mod-transmog', 2, 'frFR', 'L''emplacement d''équipement est vide.'),
|
||||
('mod-transmog', 2, 'deDE', 'Der Ausrüstungsplatz ist leer.'),
|
||||
('mod-transmog', 2, 'zhCN', '装备槽是空的。'),
|
||||
('mod-transmog', 2, 'zhTW', '裝備欄位是空的。'),
|
||||
('mod-transmog', 2, 'esES', 'La ranura de equipo está vacía.'),
|
||||
('mod-transmog', 2, 'esMX', 'La ranura de equipo está vacía.'),
|
||||
('mod-transmog', 2, 'ruRU', 'Слот снаряжения пуст.'),
|
||||
-- ID 3: INVALID_SRC_ENTRY
|
||||
('mod-transmog', 3, 'koKR', '선택한 소스 요소가 잘못되었습니다.'),
|
||||
('mod-transmog', 3, 'frFR', 'Élément source sélectionné non valide.'),
|
||||
('mod-transmog', 3, 'deDE', 'Ungültiges ausgewähltes Quellelement.'),
|
||||
('mod-transmog', 3, 'zhCN', '所选源元素无效。'),
|
||||
('mod-transmog', 3, 'zhTW', '選擇的來源物品無效。'),
|
||||
('mod-transmog', 3, 'esES', 'Elemento fuente seleccionado no válido.'),
|
||||
('mod-transmog', 3, 'esMX', 'Elemento fuente seleccionado no válido.'),
|
||||
('mod-transmog', 3, 'ruRU', 'Недопустимый выбранный исходный элемент.'),
|
||||
-- ID 4: MISSING_SRC_ITEM
|
||||
('mod-transmog', 4, 'koKR', '소스 요소가 존재하지 않습니다.'),
|
||||
('mod-transmog', 4, 'frFR', 'L''élément source n''existe pas.'),
|
||||
('mod-transmog', 4, 'deDE', 'Das Quellelement existiert nicht.'),
|
||||
('mod-transmog', 4, 'zhCN', '源元素不存在。'),
|
||||
('mod-transmog', 4, 'zhTW', '來源物品不存在。'),
|
||||
('mod-transmog', 4, 'esES', 'El elemento de origen no existe.'),
|
||||
('mod-transmog', 4, 'esMX', 'El elemento de origen no existe.'),
|
||||
('mod-transmog', 4, 'ruRU', 'Исходный элемент не существует.'),
|
||||
-- ID 5: MISSING_DEST_ITEM
|
||||
('mod-transmog', 5, 'koKR', '대상 요소가 존재하지 않습니다.'),
|
||||
('mod-transmog', 5, 'frFR', 'L''élément cible n''existe pas.'),
|
||||
('mod-transmog', 5, 'deDE', 'Das Zielelement existiert nicht.'),
|
||||
('mod-transmog', 5, 'zhCN', '目标元素不存在。'),
|
||||
('mod-transmog', 5, 'zhTW', '目標物品不存在。'),
|
||||
('mod-transmog', 5, 'esES', 'El elemento de destino no existe.'),
|
||||
('mod-transmog', 5, 'esMX', 'El elemento de destino no existe.'),
|
||||
('mod-transmog', 5, 'ruRU', 'Целевой элемент не существует.'),
|
||||
-- ID 6: INVALID_ITEMS
|
||||
('mod-transmog', 6, 'koKR', '선택한 항목이 잘못되었습니다.'),
|
||||
('mod-transmog', 6, 'frFR', 'Les éléments sélectionnés ne sont pas valides'),
|
||||
('mod-transmog', 6, 'deDE', 'Die ausgewählten Elemente sind ungültig'),
|
||||
('mod-transmog', 6, 'zhCN', '所选项目无效'),
|
||||
('mod-transmog', 6, 'zhTW', '所選物品無效。'),
|
||||
('mod-transmog', 6, 'esES', 'Los elementos seleccionados no son válidos'),
|
||||
('mod-transmog', 6, 'esMX', 'Los elementos seleccionados no son válidos'),
|
||||
('mod-transmog', 6, 'ruRU', 'Выбранные элементы недействительны'),
|
||||
-- ID 7: NOT_ENOUGH_MONEY
|
||||
('mod-transmog', 7, 'koKR', '당신은 돈이 충분하지 않습니다.'),
|
||||
('mod-transmog', 7, 'frFR', 'Vous n''avez pas assez d''argent.'),
|
||||
('mod-transmog', 7, 'deDE', 'Du hast nicht genug Geld.'),
|
||||
('mod-transmog', 7, 'zhCN', '你没有足够的钱。'),
|
||||
('mod-transmog', 7, 'zhTW', '你沒有足夠的金錢。'),
|
||||
('mod-transmog', 7, 'esES', 'No tienes suficiente dinero.'),
|
||||
('mod-transmog', 7, 'esMX', 'No tienes suficiente dinero.'),
|
||||
('mod-transmog', 7, 'ruRU', 'У вас недостаточно денег.'),
|
||||
-- ID 8: NOT_ENOUGH_TOKENS
|
||||
('mod-transmog', 8, 'koKR', '칩이 충분하지 않습니다.'),
|
||||
('mod-transmog', 8, 'frFR', 'Vous n''avez pas assez de jetons.'),
|
||||
('mod-transmog', 8, 'deDE', 'Du hast nicht genug Chips.'),
|
||||
('mod-transmog', 8, 'zhCN', '你的筹码不够。'),
|
||||
('mod-transmog', 8, 'zhTW', '你沒有足夠的代幣。'),
|
||||
('mod-transmog', 8, 'esES', 'No tienes suficientes fichas.'),
|
||||
('mod-transmog', 8, 'esMX', 'No tienes suficientes fichas.'),
|
||||
('mod-transmog', 8, 'ruRU', 'У вас недостаточно фишек.'),
|
||||
-- ID 9: UNTRANSMOG_OK
|
||||
('mod-transmog', 9, 'koKR', '모든 형상변환을 제거했습니다.'),
|
||||
('mod-transmog', 9, 'frFR', 'Suppression de toutes vos transmogrifications'),
|
||||
('mod-transmog', 9, 'deDE', 'Alle deine Transmogrifikationen wurden entfernt'),
|
||||
('mod-transmog', 9, 'zhCN', '删除了你所有的变形'),
|
||||
('mod-transmog', 9, 'zhTW', '你的所有變身效果都被移除了。'),
|
||||
('mod-transmog', 9, 'esES', 'Se eliminaron todas tus transfiguraciones'),
|
||||
('mod-transmog', 9, 'esMX', 'Se eliminaron todas tus transfiguraciones'),
|
||||
('mod-transmog', 9, 'ruRU', 'Удалены все ваши трансмогрификации'),
|
||||
-- ID 10: UNTRANSMOG_NO_TRANSMOGS
|
||||
('mod-transmog', 10, 'koKR', '변형이 없습니다.'),
|
||||
('mod-transmog', 10, 'frFR', 'Aucune transfiguration trouvée.'),
|
||||
('mod-transmog', 10, 'deDE', 'Keine Verwandlung gefunden.'),
|
||||
('mod-transmog', 10, 'zhCN', '没有发现变形。'),
|
||||
('mod-transmog', 10, 'zhTW', '找不到變身效果。'),
|
||||
('mod-transmog', 10, 'esES', 'No se encontró transfiguración.'),
|
||||
('mod-transmog', 10, 'esMX', 'No se encontró transfiguración.'),
|
||||
('mod-transmog', 10, 'ruRU', 'Трансфигурация не найдена.'),
|
||||
-- ID 11: PRESET_ERR_INVALID_NAME
|
||||
('mod-transmog', 11, 'koKR', '삽입된 이름이 잘못되었습니다.'),
|
||||
('mod-transmog', 11, 'frFR', 'Nom inséré non valide.'),
|
||||
('mod-transmog', 11, 'deDE', 'Ungültiger eingegebener Name.'),
|
||||
('mod-transmog', 11, 'zhCN', '插入的名称无效。'),
|
||||
('mod-transmog', 11, 'zhTW', '插入的名稱無效。'),
|
||||
('mod-transmog', 11, 'esES', 'Nombre insertado no válido.'),
|
||||
('mod-transmog', 11, 'esMX', 'Nombre insertado no válido.'),
|
||||
('mod-transmog', 11, 'ruRU', 'Недопустимое вставленное имя.'),
|
||||
-- ID 12: CMD_SHOW
|
||||
('mod-transmog', 12, 'koKR', '형상변환된 아이템이 표시되며, 현재 영역을 새로고침하려면 다시 로그인하세요.'),
|
||||
('mod-transmog', 12, 'frFR', 'En affichant les objets transmogrifiés, reconnectez-vous pour actualiser la zone actuelle.'),
|
||||
('mod-transmog', 12, 'deDE', 'Transmogrifizierte Gegenstände werden angezeigt. Melden Sie sich erneut an, um den aktuellen Bereich zu aktualisieren.'),
|
||||
('mod-transmog', 12, 'zhCN', '显示已变形物品,重新登录即可刷新当前区域。'),
|
||||
('mod-transmog', 12, 'zhTW', '顯示已變身的物品,重新登錄以更新當前區域。'),
|
||||
('mod-transmog', 12, 'esES', 'Mostrando elementos transfigurados, vuelva a iniciar sesión para actualizar el área actual.'),
|
||||
('mod-transmog', 12, 'esMX', 'Mostrando elementos transfigurados, vuelva a iniciar sesión para actualizar el área actual.'),
|
||||
('mod-transmog', 12, 'ruRU', 'Отображение трансмогрифицированных предметов. Войдите в систему еще раз, чтобы обновить текущую область.'),
|
||||
-- ID 13: CMD_HIDE
|
||||
('mod-transmog', 13, 'koKR', '형상변환된 아이템을 숨기고 다시 로그인하여 현재 영역을 새로 고칩니다.'),
|
||||
('mod-transmog', 13, 'frFR', 'Masquez les objets transmogrifiés, reconnectez-vous pour actualiser la zone actuelle.'),
|
||||
('mod-transmog', 13, 'deDE', 'Transmogrifizierte Gegenstände ausblenden, erneut anmelden, um den aktuellen Bereich zu aktualisieren.'),
|
||||
('mod-transmog', 13, 'zhCN', '隐藏变形物品,重新登录以刷新当前区域。'),
|
||||
('mod-transmog', 13, 'zhTW', '隱藏已變身的物品,重新登錄以更新當前區域。'),
|
||||
('mod-transmog', 13, 'esES', 'Ocultar elementos transfigurados, volver a iniciar sesión para actualizar el área actual.'),
|
||||
('mod-transmog', 13, 'esMX', 'Ocultar elementos transfigurados, volver a iniciar sesión para actualizar el área actual.'),
|
||||
('mod-transmog', 13, 'ruRU', 'Скройте трансмогрифицированные предметы, войдите в систему, чтобы обновить текущую область.'),
|
||||
-- ID 14: CMD_ADD_UNSUITABLE
|
||||
('mod-transmog', 14, 'koKR', '선택한 항목은 변형에 적합하지 않습니다.'),
|
||||
('mod-transmog', 14, 'frFR', 'L''objet sélectionné ne convient pas à la métamorphose.'),
|
||||
('mod-transmog', 14, 'deDE', 'Der ausgewählte Gegenstand ist nicht für die Verwandlung geeignet.'),
|
||||
('mod-transmog', 14, 'zhCN', '所选项目不适合变形。'),
|
||||
('mod-transmog', 14, 'zhTW', '所選物品不適合進行變身。'),
|
||||
('mod-transmog', 14, 'esES', 'El elemento seleccionado no es adecuado para la transfiguración.'),
|
||||
('mod-transmog', 14, 'esMX', 'El elemento seleccionado no es adecuado para la transfiguración.'),
|
||||
('mod-transmog', 14, 'ruRU', 'Выбранный предмет не подходит для преображения.'),
|
||||
-- ID 15: CMD_ADD_FORBIDDEN
|
||||
('mod-transmog', 15, 'koKR', '선택한 아이템은 대상 플레이어의 형상변환에 사용할 수 없습니다.'),
|
||||
('mod-transmog', 15, 'frFR', 'L''objet sélectionné ne peut pas être utilisé pour la transmogrification du joueur ciblé'),
|
||||
('mod-transmog', 15, 'deDE', 'Der ausgewählte Gegenstand kann nicht für die Transmogrifizierung des Zielspielers verwendet werden'),
|
||||
('mod-transmog', 15, 'zhCN', '所选物品不能用于目标玩家的变身'),
|
||||
('mod-transmog', 15, 'zhTW', '所選物品不能用於目標玩家的變身效果。'),
|
||||
('mod-transmog', 15, 'esES', 'El elemento seleccionado no se puede usar para la transfiguración del jugador objetivo'),
|
||||
('mod-transmog', 15, 'esMX', 'El elemento seleccionado no se puede usar para la transfiguración del jugador objetivo'),
|
||||
('mod-transmog', 15, 'ruRU', 'Выбранный предмет нельзя использовать для трансмогрификации целевого игрока.'),
|
||||
-- ID 16: CMD_BEGIN_SYNC
|
||||
('mod-transmog', 16, 'koKR', '형상변환 모양 동기화 수행 중...'),
|
||||
('mod-transmog', 16, 'frFR', 'Exécution de la synchronisation de l''apparence de transmogrification...'),
|
||||
('mod-transmog', 16, 'deDE', 'Synchronisierung des Transmog-Erscheinungsbilds wird durchgeführt ...'),
|
||||
('mod-transmog', 16, 'zhCN', '正在执行 Transmog 外观同步...'),
|
||||
('mod-transmog', 16, 'zhTW', '正在執行外觀同步變身操作...'),
|
||||
('mod-transmog', 16, 'esES', 'Realizando sincronización de apariencia de transfiguración...'),
|
||||
('mod-transmog', 16, 'esMX', 'Realizando sincronización de apariencia de transfiguración...'),
|
||||
('mod-transmog', 16, 'ruRU', 'Выполнение синхронизации внешнего вида Transmog...'),
|
||||
-- ID 17: CMD_COMPLETE_SYNC
|
||||
('mod-transmog', 17, 'koKR', '전체 모양 동기화'),
|
||||
('mod-transmog', 17, 'frFR', 'Synchronisation complète de l''apparence'),
|
||||
('mod-transmog', 17, 'deDE', 'Vollständige Synchronisierung des Erscheinungsbilds'),
|
||||
('mod-transmog', 17, 'zhCN', '完全外观同步'),
|
||||
('mod-transmog', 17, 'zhTW', '外觀同步變身操作完成。'),
|
||||
('mod-transmog', 17, 'esES', 'Sincronización de apariencia completa'),
|
||||
('mod-transmog', 17, 'esMX', 'Sincronización de apariencia completa'),
|
||||
('mod-transmog', 17, 'ruRU', 'Полная синхронизация внешнего вида'),
|
||||
-- ID 20: HOWWORKS
|
||||
('mod-transmog', 20, 'koKR', '형상변환은 어떻게 작동합니까?'),
|
||||
('mod-transmog', 20, 'frFR', 'Comment fonctionne la transmogrification ?'),
|
||||
('mod-transmog', 20, 'deDE', 'Wie funktioniert Transmogrifizierung?'),
|
||||
('mod-transmog', 20, 'zhCN', '变形术是如何运作的?'),
|
||||
('mod-transmog', 20, 'zhTW', '幻化是如何運作的?'),
|
||||
('mod-transmog', 20, 'esES', '¿Cómo funciona la transfiguración?'),
|
||||
('mod-transmog', 20, 'esMX', '¿Cómo funciona la transfiguración?'),
|
||||
('mod-transmog', 20, 'ruRU', 'Как работает трансмогрификация?'),
|
||||
-- ID 21: MANAGESETS
|
||||
('mod-transmog', 21, 'koKR', '세트 관리'),
|
||||
('mod-transmog', 21, 'frFR', 'Gérer les ensembles'),
|
||||
('mod-transmog', 21, 'deDE', 'Sets verwalten'),
|
||||
('mod-transmog', 21, 'zhCN', '管理套装'),
|
||||
('mod-transmog', 21, 'zhTW', '管理套裝'),
|
||||
('mod-transmog', 21, 'esES', 'Administrar conjuntos'),
|
||||
('mod-transmog', 21, 'esMX', 'Administrar conjuntos'),
|
||||
('mod-transmog', 21, 'ruRU', 'Управление комплектами'),
|
||||
-- ID 22: REMOVETRANSMOG
|
||||
('mod-transmog', 22, 'koKR', '모든 변형 제거'),
|
||||
('mod-transmog', 22, 'frFR', 'Supprimer toutes les transmogrifications'),
|
||||
('mod-transmog', 22, 'deDE', 'Alle Transmogrifikationen entfernen'),
|
||||
('mod-transmog', 22, 'zhCN', '移除所有幻化'),
|
||||
('mod-transmog', 22, 'zhTW', '移除所有幻化'),
|
||||
('mod-transmog', 22, 'esES', 'Eliminar todas las transfiguraciones'),
|
||||
('mod-transmog', 22, 'esMX', 'Eliminar todas las transfiguraciones'),
|
||||
('mod-transmog', 22, 'ruRU', 'Удалить все трансмогрификации'),
|
||||
-- ID 23: REMOVETRANSMOG_ASK
|
||||
('mod-transmog', 23, 'koKR', '장착한 모든 아이템의 변형을 제거합니까?'),
|
||||
('mod-transmog', 23, 'frFR', 'Supprimer les transmogrifications de tous les objets équipés ?'),
|
||||
('mod-transmog', 23, 'deDE', 'Transmogrifikationen von allen ausgerüsteten Gegenständen entfernen?'),
|
||||
('mod-transmog', 23, 'zhCN', '是否要从所有已装备的物品中移除幻化?'),
|
||||
('mod-transmog', 23, 'zhTW', '從所有已裝備物品中移除幻化?'),
|
||||
('mod-transmog', 23, 'esES', '¿Eliminar las transfiguraciones de todos los objetos equipados?'),
|
||||
('mod-transmog', 23, 'esMX', '¿Eliminar las transfiguraciones de todos los objetos equipados?'),
|
||||
('mod-transmog', 23, 'ruRU', 'Удалить трансмогрификации со всех экипированных предметов?'),
|
||||
-- ID 24: UPDATEMENU
|
||||
('mod-transmog', 24, 'koKR', '메뉴 업데이트'),
|
||||
('mod-transmog', 24, 'frFR', 'Mettre à jour le menu'),
|
||||
('mod-transmog', 24, 'deDE', 'Menü aktualisieren'),
|
||||
('mod-transmog', 24, 'zhCN', '更新菜单'),
|
||||
('mod-transmog', 24, 'zhTW', '更新選單'),
|
||||
('mod-transmog', 24, 'esES', 'Actualizar menú'),
|
||||
('mod-transmog', 24, 'esMX', 'Actualizar menú'),
|
||||
('mod-transmog', 24, 'ruRU', 'Обновить меню'),
|
||||
-- ID 25: HOWSETSWORK
|
||||
('mod-transmog', 25, 'koKR', '세트는 어떻게 작동합니까?'),
|
||||
('mod-transmog', 25, 'frFR', 'Comment fonctionnent les ensembles ?'),
|
||||
('mod-transmog', 25, 'deDE', 'Wie funktionieren Sets?'),
|
||||
('mod-transmog', 25, 'zhCN', '套装是如何运作的?'),
|
||||
('mod-transmog', 25, 'zhTW', '套裝如何運作?'),
|
||||
('mod-transmog', 25, 'esES', '¿Cómo funcionan los conjuntos?'),
|
||||
('mod-transmog', 25, 'esMX', '¿Cómo funcionan los conjuntos?'),
|
||||
('mod-transmog', 25, 'ruRU', 'Как работают комплекты?'),
|
||||
-- ID 26: SAVESET
|
||||
('mod-transmog', 26, 'koKR', '세트 저장'),
|
||||
('mod-transmog', 26, 'frFR', 'Sauvegarder l''ensemble'),
|
||||
('mod-transmog', 26, 'deDE', 'Set speichern'),
|
||||
('mod-transmog', 26, 'zhCN', '保存套装'),
|
||||
('mod-transmog', 26, 'zhTW', '儲存套裝'),
|
||||
('mod-transmog', 26, 'esES', 'Guardar conjunto'),
|
||||
('mod-transmog', 26, 'esMX', 'Guardar conjunto'),
|
||||
('mod-transmog', 26, 'ruRU', 'Сохранить комплект'),
|
||||
-- ID 27: BACK
|
||||
('mod-transmog', 27, 'koKR', '뒤로...'),
|
||||
('mod-transmog', 27, 'frFR', 'Retour...'),
|
||||
('mod-transmog', 27, 'deDE', 'Zurück...'),
|
||||
('mod-transmog', 27, 'zhCN', '返回...'),
|
||||
('mod-transmog', 27, 'zhTW', '返回...'),
|
||||
('mod-transmog', 27, 'esES', 'Atrás...'),
|
||||
('mod-transmog', 27, 'esMX', 'Atrás...'),
|
||||
('mod-transmog', 27, 'ruRU', 'Назад...'),
|
||||
-- ID 28: USESET
|
||||
('mod-transmog', 28, 'koKR', '이 세트를 사용'),
|
||||
('mod-transmog', 28, 'frFR', 'Utiliser cet ensemble'),
|
||||
('mod-transmog', 28, 'deDE', 'Dieses Set verwenden'),
|
||||
('mod-transmog', 28, 'zhCN', '使用此套装'),
|
||||
('mod-transmog', 28, 'zhTW', '使用此套裝'),
|
||||
('mod-transmog', 28, 'esES', 'Usar este conjunto'),
|
||||
('mod-transmog', 28, 'esMX', 'Usar este conjunto'),
|
||||
('mod-transmog', 28, 'ruRU', 'Использовать этот комплект'),
|
||||
-- ID 29: CONFIRM_USESET
|
||||
('mod-transmog', 29, 'koKR', '이 세트를 변형에 사용하면 변형된 아이템이 계정에 제한되어 환불 및 거래가 불가능합니다.\n계속하시겠습니까?\n\n'),
|
||||
('mod-transmog', 29, 'frFR', 'En utilisant cet ensemble pour la transmogrification, les objets transmogrifiés seront liés à votre personnage et deviendront non remboursables et non échangeables.\nVoulez-vous continuer ?\n\n'),
|
||||
('mod-transmog', 29, 'deDE', 'Wenn du dieses Set für die Transmogrifikation verwendest, werden die transmogrifizierten Gegenstände an dich gebunden und können nicht erstattet oder gehandelt werden.\nMöchtest du fortfahren?\n\n'),
|
||||
('mod-transmog', 29, 'zhCN', '将此套装用于幻化将使幻化后的物品与您绑定,并使其不可退还和不可交易。\n您是否要继续?\n\n'),
|
||||
('mod-transmog', 29, 'zhTW', '使用此套裝進行幻化將使幻化後的物品與您綁定,並使其無法退款和無法交易。\n您是否希望繼續?\n\n'),
|
||||
('mod-transmog', 29, 'esES', 'Usar este conjunto para transfigurar vinculará los objetos transfigurados a ti y los volverá no reembolsables y no intercambiables.\n¿Deseas continuar?\n\n'),
|
||||
('mod-transmog', 29, 'esMX', 'Usar este conjunto para transfigurar vinculará los objetos transfigurados a ti y los volverá no reembolsables y no intercambiables.\n¿Deseas continuar?\n\n'),
|
||||
('mod-transmog', 29, 'ruRU', 'Использование этого комплекта для трансмогрификации привяжет трансмогрифицированные предметы к вам и сделает их неподлежащими возврату и обмену.\nЖелаете продолжить?\n\n'),
|
||||
-- ID 30: DELETESET
|
||||
('mod-transmog', 30, 'koKR', '세트 삭제'),
|
||||
('mod-transmog', 30, 'frFR', 'Supprimer l''ensemble'),
|
||||
('mod-transmog', 30, 'deDE', 'Set löschen'),
|
||||
('mod-transmog', 30, 'zhCN', '删除套装'),
|
||||
('mod-transmog', 30, 'zhTW', '刪除套裝'),
|
||||
('mod-transmog', 30, 'esES', 'Eliminar conjunto'),
|
||||
('mod-transmog', 30, 'esMX', 'Eliminar conjunto'),
|
||||
('mod-transmog', 30, 'ruRU', 'Удалить комплект'),
|
||||
-- ID 31: CONFIRM_DELETESET
|
||||
('mod-transmog', 31, 'koKR', '을(를) 삭제하시겠습니까 '),
|
||||
('mod-transmog', 31, 'frFR', 'Êtes-vous sûr de vouloir supprimer '),
|
||||
('mod-transmog', 31, 'deDE', 'Möchten Sie wirklich löschen '),
|
||||
('mod-transmog', 31, 'zhCN', '您确定要删除吗 '),
|
||||
('mod-transmog', 31, 'zhTW', '您確定要刪除 '),
|
||||
('mod-transmog', 31, 'esES', '¿Estás seguro de que quieres eliminar '),
|
||||
('mod-transmog', 31, 'esMX', '¿Estás seguro de que quieres eliminar '),
|
||||
('mod-transmog', 31, 'ruRU', 'Вы уверены, что хотите удалить '),
|
||||
-- ID 32: INSERTSETNAME
|
||||
('mod-transmog', 32, 'koKR', '세트 이름 입력'),
|
||||
('mod-transmog', 32, 'frFR', 'Insérer le nom de l''ensemble'),
|
||||
('mod-transmog', 32, 'deDE', 'Set-Namen einfügen'),
|
||||
('mod-transmog', 32, 'zhCN', '插入套装名称'),
|
||||
('mod-transmog', 32, 'zhTW', '輸入套裝名稱'),
|
||||
('mod-transmog', 32, 'esES', 'Insertar nombre del conjunto'),
|
||||
('mod-transmog', 32, 'esMX', 'Insertar nombre del conjunto'),
|
||||
('mod-transmog', 32, 'ruRU', 'Введите имя комплекта'),
|
||||
-- ID 33: SEARCH
|
||||
('mod-transmog', 33, 'koKR', '검색...'),
|
||||
('mod-transmog', 33, 'frFR', 'Rechercher...'),
|
||||
('mod-transmog', 33, 'deDE', 'Suche...'),
|
||||
('mod-transmog', 33, 'zhCN', '搜索...'),
|
||||
('mod-transmog', 33, 'zhTW', '搜索...'),
|
||||
('mod-transmog', 33, 'esES', 'Buscar...'),
|
||||
('mod-transmog', 33, 'esMX', 'Buscar...'),
|
||||
('mod-transmog', 33, 'ruRU', 'Поиск...'),
|
||||
-- ID 34: SEARCHING_FOR
|
||||
('mod-transmog', 34, 'koKR', '검색 중: '),
|
||||
('mod-transmog', 34, 'frFR', 'Recherche en cours: '),
|
||||
('mod-transmog', 34, 'deDE', 'Suche nach: '),
|
||||
('mod-transmog', 34, 'zhCN', '正在搜索: '),
|
||||
('mod-transmog', 34, 'zhTW', '正在搜尋:'),
|
||||
('mod-transmog', 34, 'esES', 'Buscando:'),
|
||||
('mod-transmog', 34, 'esMX', 'Buscando: '),
|
||||
('mod-transmog', 34, 'ruRU', 'Поиск: '),
|
||||
-- ID 35: SEARCH_FOR_ITEM
|
||||
('mod-transmog', 35, 'koKR', '어떤 아이템을 찾으시겠습니까?'),
|
||||
('mod-transmog', 35, 'frFR', 'Rechercher quel objet ?'),
|
||||
('mod-transmog', 35, 'deDE', 'Nach welchem Gegenstand suchen?'),
|
||||
('mod-transmog', 35, 'zhCN', '搜索哪个物品?'),
|
||||
('mod-transmog', 35, 'zhTW', '搜索哪個物品?'),
|
||||
('mod-transmog', 35, 'esES', '¿Buscar un objeto?'),
|
||||
('mod-transmog', 35, 'esMX', '¿Buscar un objeto?'),
|
||||
('mod-transmog', 35, 'ruRU', 'Поиск предмета:'),
|
||||
-- ID 36: CONFIRM_HIDE_ITEM
|
||||
('mod-transmog', 36, 'koKR', '이 슬롯에 아이템을 감추고 있습니다.\n계속하시겠습니까?\n\n'),
|
||||
('mod-transmog', 36, 'frFR', 'Vous masquez l''objet dans cet emplacement.\nVoulez-vous continuer ?\n\n'),
|
||||
('mod-transmog', 36, 'deDE', 'Du versteckst das Item in diesem Slot.\nMöchtest du fortfahren?\n\n'),
|
||||
('mod-transmog', 36, 'zhCN', '您正在隐藏此槽中的物品。\n您是否要继续?\n\n'),
|
||||
('mod-transmog', 36, 'zhTW', '您正在隱藏此槽中的物品。\n您是否希望繼續?\n\n'),
|
||||
('mod-transmog', 36, 'esES', 'Estás ocultando el objeto en esta ranura.\n¿Deseas continuar?\n\n'),
|
||||
('mod-transmog', 36, 'esMX', 'Estás ocultando el objeto en esta ranura.\n¿Deseas continuar?\n\n'),
|
||||
('mod-transmog', 36, 'ruRU', 'Вы скрываете предмет в этом слоте.\nЖелаете продолжить?\n\n'),
|
||||
-- ID 37: HIDESLOT
|
||||
('mod-transmog', 37, 'koKR', '슬롯 숨기기'),
|
||||
('mod-transmog', 37, 'frFR', 'Cacher l''emplacement'),
|
||||
('mod-transmog', 37, 'deDE', 'Slot verbergen'),
|
||||
('mod-transmog', 37, 'zhCN', '隐藏槽位'),
|
||||
('mod-transmog', 37, 'zhTW', '隱藏槽位'),
|
||||
('mod-transmog', 37, 'esES', 'Ocultar ranura'),
|
||||
('mod-transmog', 37, 'esMX', 'Ocultar ranura'),
|
||||
('mod-transmog', 37, 'ruRU', 'Скрыть слот'),
|
||||
-- ID 38: REMOVETRANSMOG_SLOT
|
||||
('mod-transmog', 38, 'koKR', '해당 슬롯의 형상변환을 제거합니까?'),
|
||||
('mod-transmog', 38, 'frFR', 'Supprimer la transmogrification de l''emplacement ?'),
|
||||
('mod-transmog', 38, 'deDE', 'Transmogrifikation aus dem Slot entfernen?'),
|
||||
('mod-transmog', 38, 'zhCN', '是否要从该槽位中移除幻化?'),
|
||||
('mod-transmog', 38, 'zhTW', '從該槽位移除幻化?'),
|
||||
('mod-transmog', 38, 'esES', '¿Eliminar la transfiguración del espacio?'),
|
||||
('mod-transmog', 38, 'esMX', '¿Eliminar la transfiguración del espacio?'),
|
||||
('mod-transmog', 38, 'ruRU', 'Удалить трансмогрификацию из ячейки?'),
|
||||
-- ID 39: CONFIRM_USEITEM
|
||||
('mod-transmog', 39, 'koKR', '이 아이템을 변형에 사용하면 계정에 제한되어 환불 및 거래가 불가능하게 됩니다.\n계속하시겠습니까?\n\n'),
|
||||
('mod-transmog', 39, 'frFR', 'En utilisant cet objet pour la transmogrification, il sera lié à votre personnage et deviendra non remboursable et non échangeable.\nVoulez-vous continuer ?\n\n'),
|
||||
('mod-transmog', 39, 'deDE', 'Wenn du diesen Gegenstand für die Transmogrifikation verwendest, wird er an dich gebunden und kann nicht erstattet oder gehandelt werden.\nMöchtest du fortfahren?\n\n'),
|
||||
('mod-transmog', 39, 'zhCN', '将此物品用于幻化将使其与您绑定,并使其不可退还和不可交易。\n您是否要继续?\n\n'),
|
||||
('mod-transmog', 39, 'zhTW', '使用此物品進行幻化將使其與您綁定,並使其無法退款和無法交易。\n您是否希望繼續?\n\n'),
|
||||
('mod-transmog', 39, 'esES', 'Usar este objeto para transfigurar lo vinculará a ti y lo volverá no reembolsable y no intercambiable.\n¿Deseas continuar?\n\n'),
|
||||
('mod-transmog', 39, 'esMX', 'Usar este objeto para transfigurar lo vinculará a ti y lo volverá no reembolsable y no intercambiable.\n¿Deseas continuar?\n\n'),
|
||||
('mod-transmog', 39, 'ruRU', 'Использование этого предмета для трансмогрификации привяжет его к вам и сделает его неподлежащим возврату и обмену.\nЖелаете продолжить?\n\n'),
|
||||
-- ID 40: PREVIOUS_PAGE
|
||||
('mod-transmog', 40, 'koKR', '이전 페이지'),
|
||||
('mod-transmog', 40, 'frFR', 'Page précédente'),
|
||||
('mod-transmog', 40, 'deDE', 'Vorherige Seite'),
|
||||
('mod-transmog', 40, 'zhCN', '上一页'),
|
||||
('mod-transmog', 40, 'zhTW', '上一頁'),
|
||||
('mod-transmog', 40, 'esES', 'Página anterior'),
|
||||
('mod-transmog', 40, 'esMX', 'Página anterior'),
|
||||
('mod-transmog', 40, 'ruRU', 'Предыдущая страница'),
|
||||
-- ID 41: NEXT_PAGE
|
||||
('mod-transmog', 41, 'koKR', '다음 페이지'),
|
||||
('mod-transmog', 41, 'frFR', 'Page suivante'),
|
||||
('mod-transmog', 41, 'deDE', 'Nächste Seite'),
|
||||
('mod-transmog', 41, 'zhCN', '下一页'),
|
||||
('mod-transmog', 41, 'zhTW', '下一頁'),
|
||||
('mod-transmog', 41, 'esES', 'Página siguiente'),
|
||||
('mod-transmog', 41, 'esMX', 'Página siguiente'),
|
||||
('mod-transmog', 41, 'ruRU', 'Следующая страница'),
|
||||
-- ID 42: ADDED_APPEARANCE
|
||||
('mod-transmog', 42, 'koKR', '이(가) 외형 컬렉션에 추가되었습니다.'),
|
||||
('mod-transmog', 42, 'frFR', 'a été ajouté(e) à votre collection d''apparences.'),
|
||||
('mod-transmog', 42, 'deDE', 'wurde deiner Transmog-Sammlung hinzugefügt.'),
|
||||
('mod-transmog', 42, 'zhCN', '已添加到外观收藏中。'),
|
||||
('mod-transmog', 42, 'zhTW', '已加入您的外觀收藏。'),
|
||||
('mod-transmog', 42, 'esES', 'se ha añadido a tu colección de apariencias.'),
|
||||
('mod-transmog', 42, 'esMX', 'se ha agregado a tu colección de apariencias.'),
|
||||
('mod-transmog', 42, 'ruRU', 'был добавлен в вашу коллекцию обликов.'),
|
||||
|
||||
('mod-transmog', 43, 'koKR', '|cFF4DB3FF변형 중에는 아이템 툴팁에 세트 보너스가 표시되지 않지만, 여전히 완전히 활성화되어 있습니다.\n이 알림을 중지하려면 |cFFFFFFFF.transmog disclaimer off|cFF4DB3FF 을 입력하세요.|r'),
|
||||
('mod-transmog', 43, 'frFR', '|cFF4DB3FFLes bonus de set n''apparaîtront pas dans l''info-bulle de l''objet lors de la transmogrification, mais ils restent pleinement actifs.\nPour arrêter d''afficher cette notice, tapez |cFFFFFFFF.transmog disclaimer off|cFF4DB3FF.|r'),
|
||||
('mod-transmog', 43, 'deDE', '|cFF4DB3FFSetboni werden in der Gegenstandsbeschreibung während der Transmogrifizierung nicht angezeigt, sind aber weiterhin voll aktiv.\nUm diesen Hinweis zu deaktivieren, gib |cFFFFFFFF.transmog disclaimer off|cFF4DB3FF ein.|r'),
|
||||
('mod-transmog', 43, 'zhCN', '|cFF4DB3FF幻化后物品提示中不会显示套装加成,但套装加成仍然完全有效。\n若要停止显示此提示,请输入 |cFFFFFFFF.transmog disclaimer off|cFF4DB3FF。|r'),
|
||||
('mod-transmog', 43, 'zhTW', '|cFF4DB3FF幻化後物品提示中不會顯示套裝加成,但套裝加成仍然完全有效。\n若要停止顯示此提示,請輸入 |cFFFFFFFF.transmog disclaimer off|cFF4DB3FF。|r'),
|
||||
('mod-transmog', 43, 'esES', '|cFF4DB3FFLas bonificaciones de conjunto no aparecerán en la descripción del objeto mientras esté transfigurado, pero siguen activas.\nPara dejar de ver este aviso, escribe |cFFFFFFFF.transmog disclaimer off|cFF4DB3FF.|r'),
|
||||
('mod-transmog', 43, 'esMX', '|cFF4DB3FFLas bonificaciones de conjunto no aparecerán en la descripción del objeto mientras esté transfigurado, pero siguen activas.\nPara dejar de ver este aviso, escribe |cFFFFFFFF.transmog disclaimer off|cFF4DB3FF.|r'),
|
||||
('mod-transmog', 43, 'ruRU', '|cFF4DB3FFБонусы набора не будут отображаться в подсказке предмета при трансмогрификации, но они по-прежнему полностью активны.\nЧтобы скрыть это уведомление, введите |cFFFFFFFF.transmog disclaimer off|cFF4DB3FF.|r'),
|
||||
|
||||
('mod-transmog', 44, 'koKR', '세트 보너스 알림이 활성화되었습니다.'),
|
||||
('mod-transmog', 44, 'frFR', 'Avertissement de bonus de set activé.'),
|
||||
('mod-transmog', 44, 'deDE', 'Setbonus-Hinweis aktiviert.'),
|
||||
('mod-transmog', 44, 'zhCN', '套装加成提示已启用。'),
|
||||
('mod-transmog', 44, 'zhTW', '套裝加成提示已啟用。'),
|
||||
('mod-transmog', 44, 'esES', 'Aviso de bonificación de conjunto activado.'),
|
||||
('mod-transmog', 44, 'esMX', 'Aviso de bonificación de conjunto activado.'),
|
||||
('mod-transmog', 44, 'ruRU', 'Уведомление о бонусах набора включено.'),
|
||||
|
||||
('mod-transmog', 45, 'koKR', '세트 보너스 알림이 비활성화되었습니다.'),
|
||||
('mod-transmog', 45, 'frFR', 'Avertissement de bonus de set désactivé.'),
|
||||
('mod-transmog', 45, 'deDE', 'Setbonus-Hinweis deaktiviert.'),
|
||||
('mod-transmog', 45, 'zhCN', '套装加成提示已禁用。'),
|
||||
('mod-transmog', 45, 'zhTW', '套裝加成提示已禁用。'),
|
||||
('mod-transmog', 45, 'esES', 'Aviso de bonificación de conjunto desactivado.'),
|
||||
('mod-transmog', 45, 'esMX', 'Aviso de bonificación de conjunto desactivado.'),
|
||||
('mod-transmog', 45, 'ruRU', 'Уведомление о бонусах набора отключено.');
|
||||
@@ -0,0 +1 @@
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
|
||||
@@ -0,0 +1,35 @@
|
||||
-- Set bonus disclaimer strings and command (entries 11119-11121)
|
||||
DELETE FROM `acore_string` WHERE `entry` BETWEEN 11119 AND 11121;
|
||||
INSERT INTO `acore_string` (`entry`, `content_default`, `locale_koKR`, `locale_frFR`, `locale_deDE`, `locale_zhCN`, `locale_zhTW`, `locale_esES`, `locale_esMX`, `locale_ruRU`)
|
||||
VALUES
|
||||
(11119, '|cFF4DB3FFSet bonuses won''t appear in the item tooltip while transmogrified, but they are still fully active.\nTo stop seeing this notice, type |cFFFFFFFF.transmog disclaimer off|cFF4DB3FF.|r',
|
||||
'|cFF4DB3FF변형 중에는 아이템 툴팁에 세트 보너스가 표시되지 않지만, 여전히 완전히 활성화되어 있습니다.\n이 알림을 중지하려면 |cFFFFFFFF.transmog disclaimer off|cFF4DB3FF 을 입력하세요.|r',
|
||||
'|cFF4DB3FFLes bonus de set n''apparaîtront pas dans l''info-bulle de l''objet lors de la transmogrification, mais ils restent pleinement actifs.\nPour arrêter d''afficher cette notice, tapez |cFFFFFFFF.transmog disclaimer off|cFF4DB3FF.|r',
|
||||
'|cFF4DB3FFSetboni werden in der Gegenstandsbeschreibung während der Transmogrifizierung nicht angezeigt, sind aber weiterhin voll aktiv.\nUm diesen Hinweis zu deaktivieren, gib |cFFFFFFFF.transmog disclaimer off|cFF4DB3FF ein.|r',
|
||||
'|cFF4DB3FF幻化后物品提示中不会显示套装加成,但套装加成仍然完全有效。\n若要停止显示此提示,请输入 |cFFFFFFFF.transmog disclaimer off|cFF4DB3FF。|r',
|
||||
'|cFF4DB3FF幻化後物品提示中不會顯示套裝加成,但套裝加成仍然完全有效。\n若要停止顯示此提示,請輸入 |cFFFFFFFF.transmog disclaimer off|cFF4DB3FF。|r',
|
||||
'|cFF4DB3FFLas bonificaciones de conjunto no aparecerán en la descripción del objeto mientras esté transfigurado, pero siguen activas.\nPara dejar de ver este aviso, escribe |cFFFFFFFF.transmog disclaimer off|cFF4DB3FF.|r',
|
||||
'|cFF4DB3FFLas bonificaciones de conjunto no aparecerán en la descripción del objeto mientras esté transfigurado, pero siguen activas.\nPara dejar de ver este aviso, escribe |cFFFFFFFF.transmog disclaimer off|cFF4DB3FF.|r',
|
||||
'|cFF4DB3FFБонусы набора не будут отображаться в подсказке предмета при трансмогрификации, но они по-прежнему полностью активны.\nЧтобы скрыть это уведомление, введите |cFFFFFFFF.transmog disclaimer off|cFF4DB3FF.|r'),
|
||||
(11120, 'Set bonus disclaimer enabled.',
|
||||
'세트 보너스 알림이 활성화되었습니다.',
|
||||
'Avertissement de bonus de set activé.',
|
||||
'Setbonus-Hinweis aktiviert.',
|
||||
'套装加成提示已启用。',
|
||||
'套裝加成提示已啟用。',
|
||||
'Aviso de bonificación de conjunto activado.',
|
||||
'Aviso de bonificación de conjunto activado.',
|
||||
'Уведомление о бонусах набора включено.'),
|
||||
(11121, 'Set bonus disclaimer disabled.',
|
||||
'세트 보너스 알림이 비활성화되었습니다.',
|
||||
'Avertissement de bonus de set désactivé.',
|
||||
'Setbonus-Hinweis deaktiviert.',
|
||||
'套装加成提示已禁用。',
|
||||
'套裝加成提示已禁用。',
|
||||
'Aviso de bonificación de conjunto desactivado.',
|
||||
'Aviso de bonificación de conjunto desactivado.',
|
||||
'Уведомление о бонусах набора отключено.');
|
||||
|
||||
DELETE FROM `command` WHERE `name` = 'transmog disclaimer';
|
||||
INSERT INTO `command` (`name`, `security`, `help`) VALUES
|
||||
('transmog disclaimer', 0, 'Syntax: .transmog disclaimer <on/off>\nToggles the set bonus disclaimer notice shown when transmogrifying set items.');
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 28 KiB |
@@ -0,0 +1,9 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
TRANSM_PATH_ROOT="$( cd "$( dirname "${BASH_SOURCE[0]}" )/" && pwd )"
|
||||
|
||||
source $TRANSM_PATH_ROOT"/conf/conf.sh.dist"
|
||||
|
||||
if [ -f $TRANSM_PATH_ROOT"/conf/conf.sh" ]; then
|
||||
source $TRANSM_PATH_ROOT"/conf/conf.sh"
|
||||
fi
|
||||
@@ -0,0 +1,4 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
## Set a local git commit template
|
||||
git config --local commit.template ".git_commit_template.txt" ;
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,318 @@
|
||||
#ifndef DEF_TRANSMOGRIFICATION_H
|
||||
#define DEF_TRANSMOGRIFICATION_H
|
||||
|
||||
#include "Player.h"
|
||||
#include "Config.h"
|
||||
#include "ScriptMgr.h"
|
||||
#include "ScriptedGossip.h"
|
||||
#include "GameEventMgr.h"
|
||||
#include "Item.h"
|
||||
#include "ScriptMgr.h"
|
||||
#include "Chat.h"
|
||||
#include "ItemTemplate.h"
|
||||
#include "QuestDef.h"
|
||||
#include "ItemTemplate.h"
|
||||
#include <unordered_map>
|
||||
#include <unordered_set>
|
||||
#include <vector>
|
||||
|
||||
#define PRESETS // comment this line to disable preset feature totally
|
||||
#define HIDDEN_ITEM_ID 1 // used for hidden transmog - do not use a valid equipment ID
|
||||
#define MAX_OPTIONS 25 // do not alter
|
||||
#define MAX_SEARCH_STRING_LENGTH 50
|
||||
|
||||
class Item;
|
||||
class Player;
|
||||
class WorldSession;
|
||||
struct ItemTemplate;
|
||||
|
||||
enum TransmogSettings
|
||||
{
|
||||
SETTING_HIDE_TRANSMOG = 0,
|
||||
SETTING_RETROACTIVE_CHECK = 1,
|
||||
SETTING_VENDOR_INTERFACE = 2,
|
||||
SETTING_HIDE_SET_DISCLAIMER = 3,
|
||||
|
||||
// Subscriptions
|
||||
SETTING_TRANSMOG_MEMBERSHIP_LEVEL = 0
|
||||
};
|
||||
|
||||
enum MixedWeaponSettings
|
||||
{
|
||||
MIXED_WEAPONS_STRICT = 0,
|
||||
MIXED_WEAPONS_MODERN = 1,
|
||||
MIXED_WEAPONS_LOOSE = 2
|
||||
};
|
||||
|
||||
enum TransmogStrings : uint32
|
||||
{
|
||||
// Transmog result strings
|
||||
LANG_TRANSMOG_OK = 1,
|
||||
LANG_TRANSMOG_INVALID_SLOT = 2,
|
||||
LANG_TRANSMOG_INVALID_SRC_ENTRY = 3,
|
||||
LANG_TRANSMOG_MISSING_SRC_ITEM = 4,
|
||||
LANG_TRANSMOG_MISSING_DEST_ITEM = 5,
|
||||
LANG_TRANSMOG_INVALID_ITEMS = 6,
|
||||
LANG_TRANSMOG_NOT_ENOUGH_MONEY = 7,
|
||||
LANG_TRANSMOG_NOT_ENOUGH_TOKENS = 8,
|
||||
LANG_TRANSMOG_UNTRANSMOG_OK = 9,
|
||||
LANG_TRANSMOG_UNTRANSMOG_NO_TRANSMOGS = 10,
|
||||
LANG_TRANSMOG_PRESET_ERR_INVALID_NAME = 11,
|
||||
// Command strings
|
||||
LANG_TRANSMOG_CMD_SHOW = 12,
|
||||
LANG_TRANSMOG_CMD_HIDE = 13,
|
||||
LANG_TRANSMOG_CMD_ADD_UNSUITABLE = 14,
|
||||
LANG_TRANSMOG_CMD_ADD_FORBIDDEN = 15,
|
||||
LANG_TRANSMOG_CMD_BEGIN_SYNC = 16,
|
||||
LANG_TRANSMOG_CMD_COMPLETE_SYNC = 17,
|
||||
LANG_TRANSMOG_CMD_VENDOR_INTERFACE_ENABLE = 18,
|
||||
LANG_TRANSMOG_CMD_VENDOR_INTERFACE_DISABLE = 19,
|
||||
// Gossip/UI strings
|
||||
LANG_TRANSMOG_HOWWORKS = 20,
|
||||
LANG_TRANSMOG_MANAGESETS = 21,
|
||||
LANG_TRANSMOG_REMOVETRANSMOG = 22,
|
||||
LANG_TRANSMOG_REMOVETRANSMOG_ASK = 23,
|
||||
LANG_TRANSMOG_UPDATEMENU = 24,
|
||||
LANG_TRANSMOG_HOWSETSWORK = 25,
|
||||
LANG_TRANSMOG_SAVESET = 26,
|
||||
LANG_TRANSMOG_BACK = 27,
|
||||
LANG_TRANSMOG_USESET = 28,
|
||||
LANG_TRANSMOG_CONFIRM_USESET = 29,
|
||||
LANG_TRANSMOG_DELETESET = 30,
|
||||
LANG_TRANSMOG_CONFIRM_DELETESET = 31,
|
||||
LANG_TRANSMOG_INSERTSETNAME = 32,
|
||||
LANG_TRANSMOG_SEARCH = 33,
|
||||
LANG_TRANSMOG_SEARCHING_FOR = 34,
|
||||
LANG_TRANSMOG_SEARCH_FOR_ITEM = 35,
|
||||
LANG_TRANSMOG_CONFIRM_HIDE_ITEM = 36,
|
||||
LANG_TRANSMOG_HIDESLOT = 37,
|
||||
LANG_TRANSMOG_REMOVETRANSMOG_SLOT = 38,
|
||||
LANG_TRANSMOG_CONFIRM_USEITEM = 39,
|
||||
LANG_TRANSMOG_PREVIOUS_PAGE = 40,
|
||||
LANG_TRANSMOG_NEXT_PAGE = 41,
|
||||
LANG_TRANSMOG_ADDED_APPEARANCE = 42,
|
||||
// Disclaimer strings
|
||||
LANG_TRANSMOG_SET_DISCLAIMER = 43,
|
||||
LANG_TRANSMOG_CMD_DISCLAIMER_ON = 44,
|
||||
LANG_TRANSMOG_CMD_DISCLAIMER_OFF = 45,
|
||||
};
|
||||
|
||||
enum ArmorClassSpellIDs
|
||||
{
|
||||
SPELL_PLATE = 750,
|
||||
SPELL_MAIL = 8737,
|
||||
SPELL_LEATHER = 9077,
|
||||
SPELL_CLOTH = 9078
|
||||
};
|
||||
|
||||
const uint32 AllArmorSpellIds[4] =
|
||||
{
|
||||
SPELL_PLATE,
|
||||
SPELL_MAIL,
|
||||
SPELL_LEATHER,
|
||||
SPELL_CLOTH
|
||||
};
|
||||
|
||||
const uint32 AllArmorTiers[4] =
|
||||
{
|
||||
ITEM_SUBCLASS_ARMOR_PLATE,
|
||||
ITEM_SUBCLASS_ARMOR_MAIL,
|
||||
ITEM_SUBCLASS_ARMOR_LEATHER,
|
||||
ITEM_SUBCLASS_ARMOR_CLOTH
|
||||
};
|
||||
|
||||
enum PlusFeatures
|
||||
{
|
||||
PLUS_FEATURE_GREY_ITEMS,
|
||||
PLUS_FEATURE_LEGENDARY_ITEMS,
|
||||
PLUS_FEATURE_PET,
|
||||
PLUS_FEATURE_SKIP_LEVEL_REQ
|
||||
};
|
||||
|
||||
const uint32 TMOG_VENDOR_CREATURE_ID = 190010;
|
||||
|
||||
class Transmogrification
|
||||
{
|
||||
public:
|
||||
static Transmogrification* instance();
|
||||
|
||||
typedef std::unordered_map<ObjectGuid, ObjectGuid> transmogData;
|
||||
typedef std::unordered_map<ObjectGuid, uint32> transmog2Data;
|
||||
typedef std::unordered_map<ObjectGuid, transmog2Data> transmogMap;
|
||||
typedef std::unordered_map<uint32, std::unordered_set<uint32>> collectionCacheMap;
|
||||
typedef std::unordered_map<uint32, std::string> searchStringMap;
|
||||
typedef std::unordered_map<uint32, std::vector<uint32>> transmogPlusData;
|
||||
typedef std::unordered_map<ObjectGuid, uint8> selectedSlotMap;
|
||||
|
||||
transmogPlusData plusDataMap;
|
||||
transmogMap entryMap; // entryMap[pGUID][iGUID] = entry
|
||||
transmogData dataMap; // dataMap[iGUID] = pGUID
|
||||
collectionCacheMap collectionCache;
|
||||
selectedSlotMap selectionCache;
|
||||
|
||||
#ifdef PRESETS
|
||||
bool EnableSetInfo;
|
||||
uint32 SetNpcText;
|
||||
|
||||
typedef std::map<uint8, uint32> slotMap;
|
||||
typedef std::map<uint8, slotMap> presetData;
|
||||
typedef std::unordered_map<ObjectGuid, presetData> presetDataMap;
|
||||
presetDataMap presetById; // presetById[pGUID][presetID][slot] = entry
|
||||
typedef std::map<uint8, std::string> presetIdMap;
|
||||
typedef std::unordered_map<ObjectGuid, presetIdMap> presetNameMap;
|
||||
presetNameMap presetByName; // presetByName[pGUID][presetID] = presetName
|
||||
searchStringMap searchStringByPlayer;
|
||||
|
||||
void PresetTransmog(Player* player, Item* itemTransmogrified, uint32 fakeEntry, uint8 slot);
|
||||
|
||||
bool EnableSets;
|
||||
uint8 MaxSets;
|
||||
float SetCostModifier;
|
||||
int32 SetCopperCost;
|
||||
|
||||
bool GetEnableSets() const;
|
||||
uint8 GetMaxSets() const;
|
||||
float GetSetCostModifier() const;
|
||||
int32 GetSetCopperCost() const;
|
||||
|
||||
void LoadPlayerSets(ObjectGuid pGUID);
|
||||
void UnloadPlayerSets(ObjectGuid pGUID);
|
||||
void LoadCollections();
|
||||
#endif
|
||||
|
||||
bool EnableTransmogInfo;
|
||||
uint32 TransmogNpcText;
|
||||
|
||||
// Use IsAllowed() and IsNotAllowed()
|
||||
// these are thread unsafe, but assumed to be static data so it should be safe
|
||||
std::set<uint32> Allowed;
|
||||
std::set<uint32> NotAllowed;
|
||||
|
||||
float ScaledCostModifier;
|
||||
int32 CopperCost;
|
||||
|
||||
bool RequireToken;
|
||||
uint32 TokenEntry;
|
||||
uint32 TokenAmount;
|
||||
|
||||
bool AllowPoor;
|
||||
bool AllowCommon;
|
||||
bool AllowUncommon;
|
||||
bool AllowRare;
|
||||
bool AllowEpic;
|
||||
bool AllowLegendary;
|
||||
bool AllowArtifact;
|
||||
bool AllowHeirloom;
|
||||
bool AllowTradeable;
|
||||
|
||||
bool AllowMixedArmorTypes;
|
||||
bool AllowLowerTiers;
|
||||
bool AllowMixedOffhandArmorTypes;
|
||||
bool AllowMixedWeaponHandedness;
|
||||
bool AllowFishingPoles;
|
||||
|
||||
uint8 AllowMixedWeaponTypes;
|
||||
|
||||
bool IgnoreReqRace;
|
||||
bool IgnoreReqClass;
|
||||
bool IgnoreReqSkill;
|
||||
bool IgnoreReqSpell;
|
||||
bool IgnoreReqLevel;
|
||||
bool IgnoreReqEvent;
|
||||
bool IgnoreReqStats;
|
||||
|
||||
bool UseCollectionSystem;
|
||||
bool UseVendorInterface;
|
||||
|
||||
bool AllowHiddenTransmog;
|
||||
bool HiddenTransmogIsFree;
|
||||
|
||||
bool TrackUnusableItems;
|
||||
bool RetroActiveAppearances;
|
||||
bool ResetRetroActiveAppearances;
|
||||
bool ShowSetDisclaimer;
|
||||
|
||||
bool IsTransmogEnabled;
|
||||
bool IsPortableNPCEnabled;
|
||||
|
||||
bool IsAllowed(uint32 entry) const;
|
||||
bool IsNotAllowed(uint32 entry) const;
|
||||
bool IsAllowedQuality(uint32 quality, ObjectGuid const & playerGuid) const;
|
||||
bool IsRangedWeapon(uint32 Class, uint32 SubClass) const;
|
||||
bool CanNeverTransmog(ItemTemplate const* itemTemplate);
|
||||
|
||||
void LoadConfig(bool reload); // thread unsafe
|
||||
|
||||
std::string GetItemIcon(uint32 entry, uint32 width, uint32 height, int x, int y) const;
|
||||
std::string GetSlotIcon(uint8 slot, uint32 width, uint32 height, int x, int y) const;
|
||||
const char * GetSlotName(uint8 slot, WorldSession* session) const;
|
||||
std::string GetItemLink(Item* item, WorldSession* session) const;
|
||||
std::string GetItemLink(uint32 entry, WorldSession* session) const;
|
||||
uint32 GetFakeEntry(ObjectGuid itemGUID) const;
|
||||
void UpdateItem(Player* player, Item* item) const;
|
||||
void DeleteFakeEntry(Player* player, uint8 slot, Item* itemTransmogrified, CharacterDatabaseTransaction* trans = nullptr);
|
||||
void SetFakeEntry(Player* player, uint32 newEntry, uint8 slot, Item* itemTransmogrified);
|
||||
bool AddCollectedAppearance(uint32 accountId, uint32 itemId);
|
||||
|
||||
TransmogStrings Transmogrify(Player* player, ObjectGuid itemGUID, uint8 slot, /*uint32 newEntry, */bool no_cost = false);
|
||||
TransmogStrings Transmogrify(Player* player, uint32 itemEntry, uint8 slot, /*uint32 newEntry, */bool no_cost = false);
|
||||
TransmogStrings Transmogrify(Player* player, Item* itemTransmogrifier, uint8 slot, /*uint32 newEntry, */bool no_cost = false, bool hidden_transmog = false);
|
||||
bool CanTransmogrifyItemWithItem(Player* player, ItemTemplate const* destination, ItemTemplate const* source) const;
|
||||
bool SuitableForTransmogrification(Player* player, ItemTemplate const* proto) const;
|
||||
bool SuitableForTransmogrification(ObjectGuid guid, ItemTemplate const* proto) const;
|
||||
bool IsItemTransmogrifiable(ItemTemplate const* proto, ObjectGuid const &playerGuid) const;
|
||||
uint32 GetSpecialPrice(ItemTemplate const* proto) const;
|
||||
|
||||
void DeleteFakeFromDB(ObjectGuid::LowType itemLowGuid, CharacterDatabaseTransaction* trans = nullptr);
|
||||
float GetScaledCostModifier() const;
|
||||
int32 GetCopperCost() const;
|
||||
|
||||
bool GetRequireToken() const;
|
||||
uint32 GetTokenEntry() const;
|
||||
uint32 GetTokenAmount() const;
|
||||
|
||||
bool GetAllowMixedArmorTypes() const;
|
||||
bool GetAllowLowerTiers() const;
|
||||
bool GetAllowMixedOffhandArmorTypes() const;
|
||||
uint8 GetAllowMixedWeaponTypes() const;
|
||||
|
||||
// Config
|
||||
bool GetEnableTransmogInfo() const;
|
||||
uint32 GetTransmogNpcText() const;
|
||||
bool GetEnableSetInfo() const;
|
||||
uint32 GetSetNpcText() const;
|
||||
bool GetAllowTradeable() const;
|
||||
|
||||
bool GetUseCollectionSystem() const;
|
||||
bool GetUseVendorInterface() const;
|
||||
bool GetAllowHiddenTransmog() const;
|
||||
bool GetHiddenTransmogIsFree() const;
|
||||
bool GetTrackUnusableItems() const;
|
||||
bool EnableRetroActiveAppearances() const;
|
||||
bool EnableResetRetroActiveAppearances() const;
|
||||
[[nodiscard]] bool IsEnabled() const;
|
||||
|
||||
bool IsValidOffhandArmor(uint32 subclass, uint32 invType) const;
|
||||
bool IsTieredArmorSubclass(uint32 subclass) const;
|
||||
|
||||
uint32 GetHighestAvailableForPlayer(Player* player) const;
|
||||
uint32 GetHighestAvailableForPlayer(int playerGuid) const;
|
||||
|
||||
bool TierAvailable(Player* player, int playerGuid, uint32 tierSpell) const;
|
||||
|
||||
bool IsInvTypeMismatchAllowed (const ItemTemplate *source, const ItemTemplate *target) const;
|
||||
bool IsSubclassMismatchAllowed (Player *player, const ItemTemplate *source, const ItemTemplate *target) const;
|
||||
|
||||
// Transmog Plus
|
||||
bool IsTransmogPlusEnabled;
|
||||
[[nodiscard]] bool IsPlusFeatureEligible(ObjectGuid const& playerGuid, uint32 feature) const;
|
||||
[[nodiscard]] uint32 GetPlayerMembershipLevel(Player* player) const { return player->GetPlayerSetting("acore_cms_subscriptions", SETTING_TRANSMOG_MEMBERSHIP_LEVEL).value; };
|
||||
[[nodiscard]] bool IgnoreLevelRequirement(ObjectGuid const& playerGuid) const { return IgnoreReqLevel || IsPlusFeatureEligible(playerGuid, PLUS_FEATURE_SKIP_LEVEL_REQ); }
|
||||
|
||||
uint32 PetSpellId;
|
||||
uint32 PetEntry;
|
||||
[[nodiscard]] bool IsTransmogVendor(uint32 entry) const { return entry == TMOG_VENDOR_CREATURE_ID || entry == PetEntry; };
|
||||
};
|
||||
#define sTransmogrification Transmogrification::instance()
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,350 @@
|
||||
/*
|
||||
* This file is part of the AzerothCore Project. See AUTHORS file for Copyright information
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify it
|
||||
* under the terms of the GNU Affero General Public License as published by the
|
||||
* Free Software Foundation; either version 3 of the License, or (at your
|
||||
* option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for
|
||||
* more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License along
|
||||
* with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include "Chat.h"
|
||||
#include "ObjectMgr.h"
|
||||
#include "Player.h"
|
||||
#include "ScriptMgr.h"
|
||||
#include "Transmogrification.h"
|
||||
#include "Tokenize.h"
|
||||
#include "DatabaseEnv.h"
|
||||
#include "SpellMgr.h"
|
||||
|
||||
using namespace Acore::ChatCommands;
|
||||
|
||||
class transmog_commandscript : public CommandScript
|
||||
{
|
||||
public:
|
||||
transmog_commandscript() : CommandScript("transmog_commandscript") { }
|
||||
|
||||
ChatCommandTable GetCommands() const override
|
||||
{
|
||||
static ChatCommandTable addCollectionTable =
|
||||
{
|
||||
{ "set", HandleAddTransmogItemSet, SEC_MODERATOR, Console::Yes },
|
||||
{ "", HandleAddTransmogItem, SEC_MODERATOR, Console::Yes },
|
||||
};
|
||||
|
||||
static ChatCommandTable transmogTable =
|
||||
{
|
||||
{ "add", addCollectionTable },
|
||||
{ "", HandleDisableTransMogVisual, SEC_PLAYER, Console::No },
|
||||
{ "sync", HandleSyncTransMogCommand, SEC_PLAYER, Console::No },
|
||||
{ "portable", HandleTransmogPortableCommand, SEC_PLAYER, Console::No },
|
||||
{ "interface", HandleInterfaceOption, SEC_PLAYER, Console::No },
|
||||
{ "disclaimer", HandleDisclaimerOption, SEC_PLAYER, Console::No },
|
||||
{ "reload", HandleReloadTransmogConfig, SEC_ADMINISTRATOR, Console::Yes}
|
||||
};
|
||||
|
||||
static ChatCommandTable commandTable =
|
||||
{
|
||||
{ "transmog", transmogTable },
|
||||
};
|
||||
|
||||
return commandTable;
|
||||
}
|
||||
|
||||
static bool HandleSyncTransMogCommand(ChatHandler* handler)
|
||||
{
|
||||
Player* player = handler->GetPlayer();
|
||||
uint32 accountId = player->GetSession()->GetAccountId();
|
||||
handler->PSendModuleSysMessage("mod-transmog", LANG_TRANSMOG_CMD_BEGIN_SYNC);
|
||||
|
||||
for (uint32 itemId : sTransmogrification->collectionCache[accountId])
|
||||
handler->PSendSysMessage("TRANSMOG_SYNC:{}", itemId);
|
||||
|
||||
handler->PSendModuleSysMessage("mod-transmog", LANG_TRANSMOG_CMD_COMPLETE_SYNC);
|
||||
return true;
|
||||
}
|
||||
|
||||
static bool HandleDisableTransMogVisual(ChatHandler* handler, bool hide)
|
||||
{
|
||||
Player* player = handler->GetPlayer();
|
||||
|
||||
if (hide)
|
||||
{
|
||||
player->UpdatePlayerSetting("mod-transmog", SETTING_HIDE_TRANSMOG, 0);
|
||||
handler->PSendModuleSysMessage("mod-transmog", LANG_TRANSMOG_CMD_SHOW);
|
||||
}
|
||||
else
|
||||
{
|
||||
player->UpdatePlayerSetting("mod-transmog", SETTING_HIDE_TRANSMOG, 1);
|
||||
handler->PSendModuleSysMessage("mod-transmog", LANG_TRANSMOG_CMD_HIDE);
|
||||
}
|
||||
|
||||
player->UpdateObjectVisibility();
|
||||
return true;
|
||||
}
|
||||
|
||||
static bool HandleAddTransmogItem(ChatHandler* handler, Optional<PlayerIdentifier> player, ItemTemplate const* itemTemplate)
|
||||
{
|
||||
if (!sTransmogrification->GetUseCollectionSystem())
|
||||
return true;
|
||||
|
||||
if (!sObjectMgr->GetItemTemplate(itemTemplate->ItemId))
|
||||
{
|
||||
handler->PSendSysMessage(LANG_COMMAND_ITEMIDINVALID, itemTemplate->ItemId);
|
||||
handler->SetSentErrorMessage(true);
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!player)
|
||||
player = PlayerIdentifier::FromTargetOrSelf(handler);
|
||||
|
||||
if (!player)
|
||||
return false;
|
||||
|
||||
Player* target = player->GetConnectedPlayer();
|
||||
bool isNotConsole = handler->GetSession();
|
||||
bool suitableForTransmog;
|
||||
|
||||
if (target)
|
||||
suitableForTransmog = sTransmogrification->SuitableForTransmogrification(target, itemTemplate);
|
||||
else
|
||||
suitableForTransmog = sTransmogrification->SuitableForTransmogrification(player->GetGUID(), itemTemplate);
|
||||
|
||||
if (!sTransmogrification->GetTrackUnusableItems() && !suitableForTransmog)
|
||||
{
|
||||
handler->PSendModuleSysMessage("mod-transmog", LANG_TRANSMOG_CMD_ADD_UNSUITABLE);
|
||||
handler->SetSentErrorMessage(true);
|
||||
return true;
|
||||
}
|
||||
|
||||
if (itemTemplate->Class != ITEM_CLASS_ARMOR && itemTemplate->Class != ITEM_CLASS_WEAPON)
|
||||
{
|
||||
handler->PSendModuleSysMessage("mod-transmog", LANG_TRANSMOG_CMD_ADD_FORBIDDEN);
|
||||
handler->SetSentErrorMessage(true);
|
||||
return true;
|
||||
}
|
||||
|
||||
auto guid = player->GetGUID();
|
||||
uint32 accountId = sCharacterCache->GetCharacterAccountIdByGuid(guid);
|
||||
uint32 itemId = itemTemplate->ItemId;
|
||||
|
||||
std::stringstream tempStream;
|
||||
tempStream << std::hex << ItemQualityColors[itemTemplate->Quality];
|
||||
std::string itemQuality = tempStream.str();
|
||||
std::string itemName = itemTemplate->Name1;
|
||||
|
||||
if (target) {
|
||||
// get locale item name
|
||||
int loc_idex = target->GetSession()->GetSessionDbLocaleIndex();
|
||||
if (ItemLocale const* il = sObjectMgr->GetItemLocale(itemId))
|
||||
ObjectMgr::GetLocaleString(il->Name, loc_idex, itemName);
|
||||
}
|
||||
|
||||
std::string playerName = player->GetName();
|
||||
std::string nameLink = handler->playerLink(playerName);
|
||||
|
||||
if (sTransmogrification->AddCollectedAppearance(accountId, itemId))
|
||||
{
|
||||
// Notify target of new item in appearance collection
|
||||
if (target && !(target->GetPlayerSetting("mod-transmog", SETTING_HIDE_TRANSMOG).value) && !sTransmogrification->CanNeverTransmog(itemTemplate))
|
||||
ChatHandler(target->GetSession()).PSendSysMessage(R"(|c{}|Hitem:{}:0:0:0:0:0:0:0:0|h[{}]|h|r has been added to your appearance collection.)", itemQuality.c_str(), itemId, itemName.c_str());
|
||||
|
||||
// Feedback of successful command execution to GM
|
||||
if (isNotConsole && target != handler->GetPlayer())
|
||||
handler->PSendSysMessage(R"(|c{}|Hitem:{}:0:0:0:0:0:0:0:0|h[{}]|h|r has been added to the appearance collection of Player {}.)", itemQuality.c_str(), itemId, itemName.c_str(), nameLink);
|
||||
|
||||
CharacterDatabase.Execute("INSERT INTO custom_unlocked_appearances (account_id, item_template_id) VALUES ({}, {})", accountId, itemId);
|
||||
}
|
||||
else
|
||||
{
|
||||
// Feedback of failed command execution to GM
|
||||
if (isNotConsole)
|
||||
{
|
||||
handler->PSendSysMessage(R"(Player {} already has item |c{}|Hitem:{}:0:0:0:0:0:0:0:0|h[{}]|h|r in the appearance collection.)", nameLink, itemQuality.c_str(), itemId, itemName.c_str());
|
||||
handler->SetSentErrorMessage(true);
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
static bool HandleAddTransmogItemSet(ChatHandler* handler, Optional<PlayerIdentifier> player, Variant<Hyperlink<itemset>, uint32> itemSetId)
|
||||
{
|
||||
if (!sTransmogrification->GetUseCollectionSystem())
|
||||
return true;
|
||||
|
||||
if (!*itemSetId)
|
||||
{
|
||||
handler->PSendSysMessage(LANG_NO_ITEMS_FROM_ITEMSET_FOUND, uint32(itemSetId));
|
||||
handler->SetSentErrorMessage(true);
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!player)
|
||||
player = PlayerIdentifier::FromTargetOrSelf(handler);
|
||||
|
||||
if (!player)
|
||||
return false;
|
||||
|
||||
Player* target = player->GetConnectedPlayer();
|
||||
ItemSetEntry const* set = sItemSetStore.LookupEntry(uint32(itemSetId));
|
||||
bool isNotConsole = handler->GetSession();
|
||||
|
||||
if (!set)
|
||||
{
|
||||
handler->PSendSysMessage(LANG_NO_ITEMS_FROM_ITEMSET_FOUND, uint32(itemSetId));
|
||||
handler->SetSentErrorMessage(true);
|
||||
return false;
|
||||
}
|
||||
|
||||
auto guid = player->GetGUID();
|
||||
CharacterCacheEntry const* playerData = sCharacterCache->GetCharacterCacheByGuid(guid);
|
||||
if (!playerData)
|
||||
return false;
|
||||
|
||||
bool added = false;
|
||||
uint32 error = 0; // holds a TransmogStrings id, 0 = no error
|
||||
uint32 itemId;
|
||||
uint32 accountId = playerData->AccountId;
|
||||
|
||||
for (uint32 i = 0; i < MAX_ITEM_SET_ITEMS; ++i)
|
||||
{
|
||||
itemId = set->itemId[i];
|
||||
if (itemId)
|
||||
{
|
||||
ItemTemplate const* itemTemplate = sObjectMgr->GetItemTemplate(itemId);
|
||||
if (itemTemplate)
|
||||
{
|
||||
if (!sTransmogrification->GetTrackUnusableItems() && (
|
||||
(target && !sTransmogrification->SuitableForTransmogrification(target, itemTemplate)) ||
|
||||
!sTransmogrification->SuitableForTransmogrification(guid, itemTemplate)
|
||||
))
|
||||
{
|
||||
error = LANG_TRANSMOG_CMD_ADD_UNSUITABLE;
|
||||
continue;
|
||||
}
|
||||
if (itemTemplate->Class != ITEM_CLASS_ARMOR && itemTemplate->Class != ITEM_CLASS_WEAPON)
|
||||
{
|
||||
error = LANG_TRANSMOG_CMD_ADD_FORBIDDEN;
|
||||
continue;
|
||||
}
|
||||
|
||||
if (sTransmogrification->AddCollectedAppearance(accountId, itemId))
|
||||
{
|
||||
CharacterDatabase.Execute("INSERT INTO custom_unlocked_appearances (account_id, item_template_id) VALUES ({}, {})", accountId, itemId);
|
||||
added = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!added && error > 0)
|
||||
{
|
||||
handler->PSendModuleSysMessage("mod-transmog", error);
|
||||
handler->SetSentErrorMessage(true);
|
||||
return true;
|
||||
}
|
||||
|
||||
int locale = handler->GetSessionDbcLocale();
|
||||
std::string setName = set->name[locale];
|
||||
std::string nameLink = handler->playerLink(player->GetName());
|
||||
|
||||
// Feedback of command execution to GM
|
||||
if (isNotConsole)
|
||||
{
|
||||
// Failed command execution
|
||||
if (!added)
|
||||
{
|
||||
handler->PSendSysMessage("Player {} already has ItemSet |cffffffff|Hitemset:{}|h[{} {}]|h|r in the appearance collection.", nameLink, uint32(itemSetId), setName.c_str(), localeNames[locale]);
|
||||
handler->SetSentErrorMessage(true);
|
||||
return true;
|
||||
}
|
||||
|
||||
// Successful command execution
|
||||
if (target != handler->GetPlayer())
|
||||
handler->PSendSysMessage("ItemSet |cffffffff|Hitemset:{}|h[{} {}]|h|r has been added to the appearance collection of Player {}.", uint32(itemSetId), setName.c_str(), localeNames[locale], nameLink);
|
||||
}
|
||||
|
||||
// Notify target of new item in appearance collection
|
||||
if (target && !(target->GetPlayerSetting("mod-transmog", SETTING_HIDE_TRANSMOG).value))
|
||||
ChatHandler(target->GetSession()).PSendSysMessage("ItemSet |cffffffff|Hitemset:%d|h[{} {}]|h|r has been added to your appearance collection.", uint32(itemSetId), setName.c_str(), localeNames[locale]);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
static bool HandleTransmogPortableCommand(ChatHandler* handler)
|
||||
{
|
||||
if (!sTransmogrification->IsPortableNPCEnabled)
|
||||
{
|
||||
handler->SendErrorMessage("The portable transmogrification NPC is disabled.");
|
||||
return true;
|
||||
}
|
||||
|
||||
if (!sTransmogrification->IsTransmogPlusEnabled)
|
||||
{
|
||||
handler->SendErrorMessage("The portable transmogrification NPC is a plus feature. Plus features are currently disabled.");
|
||||
return true;
|
||||
}
|
||||
|
||||
Player* player = PlayerIdentifier::FromSelf(handler)->GetConnectedPlayer();
|
||||
|
||||
if (!sTransmogrification->IsPlusFeatureEligible(player->GetGUID(), PLUS_FEATURE_PET))
|
||||
{
|
||||
handler->SendErrorMessage("You are not eligible for the portable transmogrification NPC. Please check your subscription level.");
|
||||
return true;
|
||||
}
|
||||
|
||||
if (!sSpellMgr->GetSpellInfo(sTransmogrification->PetSpellId))
|
||||
{
|
||||
handler->SendErrorMessage("The portable transmogrification NPC spell is not available.");
|
||||
return true;
|
||||
}
|
||||
|
||||
player->CastSpell((Unit*)nullptr, sTransmogrification->PetSpellId, true);
|
||||
return true;
|
||||
};
|
||||
|
||||
static bool HandleInterfaceOption(ChatHandler* handler, bool enable)
|
||||
{
|
||||
handler->GetPlayer()->UpdatePlayerSetting("mod-transmog", SETTING_VENDOR_INTERFACE, enable);
|
||||
handler->PSendModuleSysMessage("mod-transmog", enable ? LANG_TRANSMOG_CMD_VENDOR_INTERFACE_ENABLE : LANG_TRANSMOG_CMD_VENDOR_INTERFACE_DISABLE);
|
||||
return true;
|
||||
}
|
||||
|
||||
static bool HandleDisclaimerOption(ChatHandler* handler, bool enable)
|
||||
{
|
||||
Player* player = handler->GetPlayer();
|
||||
if (enable)
|
||||
{
|
||||
player->UpdatePlayerSetting("mod-transmog", SETTING_HIDE_SET_DISCLAIMER, 0);
|
||||
handler->PSendModuleSysMessage("mod-transmog", LANG_TRANSMOG_CMD_DISCLAIMER_ON);
|
||||
}
|
||||
else
|
||||
{
|
||||
player->UpdatePlayerSetting("mod-transmog", SETTING_HIDE_SET_DISCLAIMER, 1);
|
||||
handler->PSendModuleSysMessage("mod-transmog", LANG_TRANSMOG_CMD_DISCLAIMER_OFF);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
static bool HandleReloadTransmogConfig(ChatHandler* handler)
|
||||
{
|
||||
sTransmogrification->LoadConfig(true);
|
||||
handler->SendSysMessage("Transmog configs reloaded.");
|
||||
sTransmogrification->LoadCollections();
|
||||
handler->SendSysMessage("Transmog collections reloaded.");
|
||||
return true;
|
||||
}
|
||||
};
|
||||
|
||||
void AddSC_transmog_commandscript()
|
||||
{
|
||||
new transmog_commandscript();
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
/*
|
||||
* Copyright (C) 2016+ AzerothCore <www.azerothcore.org>, released under GNU AGPL v3 license: https://github.com/azerothcore/azerothcore-wotlk/blob/master/LICENSE-AGPL3
|
||||
* Copyright (C) 2021+ WarheadCore <https://github.com/WarheadCore>
|
||||
*/
|
||||
|
||||
// From SC
|
||||
void AddSC_Transmog();
|
||||
void AddSC_transmog_commandscript();
|
||||
|
||||
// Add all
|
||||
void Addmod_transmogScripts()
|
||||
{
|
||||
AddSC_Transmog();
|
||||
AddSC_transmog_commandscript();
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user