b8cd6bac0c
3.4.3 (54261) es WotLK Classic, no el WotLK retail/clásico (3.3.5a=12340). La etiqueta ahora diferencia: 12340->'WotLK', 3.4.x->'WotLK Classic', 15595->'Cataclysm', 4.4.x->'Cataclysm Classic'. Nova WoW -> 'WotLK Classic'. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
96 lines
3.5 KiB
Python
96 lines
3.5 KiB
Python
from django.db import models
|
|
from django_ckeditor_5.fields import CKEditor5Field
|
|
|
|
|
|
def expansion_from_gamebuild(gamebuild):
|
|
"""Etiqueta de expansión a partir del build del cliente.
|
|
|
|
Distingue el retail antiguo del relanzamiento WoW Classic:
|
|
- 12340 -> 'WotLK' (3.3.5a, retail/privado clásico)
|
|
- 44832..54261 -> 'WotLK Classic' (3.4.x; 3.4.3 = 54261)
|
|
- 15595 -> 'Cataclysm' (4.3.4 retail)
|
|
- 54332..60000 -> 'Cataclysm Classic' (4.4.x)
|
|
WotLK Classic llega a 3.4.3=54261 y Cataclysm Classic empieza en 4.4.0=54332,
|
|
están muy pegados: de ahí el corte en 54261. Nova WoW corre 3.4.3 -> WotLK Classic.
|
|
"""
|
|
if gamebuild is None:
|
|
return 'Unknown'
|
|
if gamebuild == 12340:
|
|
return 'WotLK'
|
|
if 44000 <= gamebuild <= 54261:
|
|
return 'WotLK Classic'
|
|
if gamebuild == 15595:
|
|
return 'Cataclysm'
|
|
if 54262 <= gamebuild <= 60000:
|
|
return 'Cataclysm Classic'
|
|
return 'Unknown'
|
|
|
|
|
|
class Noticia(models.Model):
|
|
titulo = models.CharField(max_length=200)
|
|
contenido = CKEditor5Field('Contenido', config_name='default')
|
|
fecha_publicacion = models.DateTimeField(auto_now=True) # Cambiado a DateTimeField
|
|
fecha_fin_evento = models.DateField(null=True, blank=True)
|
|
enlace = models.URLField(max_length=200, blank=True, null=True)
|
|
|
|
def __str__(self):
|
|
return self.titulo
|
|
|
|
class MaintenanceMode(models.Model):
|
|
is_active = models.BooleanField(default=False)
|
|
|
|
def __str__(self):
|
|
return "Maintenance Mode"
|
|
|
|
class ClienteCategoria(models.Model):
|
|
nombre = models.CharField(max_length=100)
|
|
descripcion = models.CharField(max_length=200, blank=True, null=True)
|
|
|
|
def __str__(self):
|
|
return self.nombre
|
|
|
|
class SistemaOperativo(models.Model):
|
|
categoria = models.ForeignKey(ClienteCategoria, related_name='sistemas_operativos', on_delete=models.CASCADE)
|
|
nombre = models.CharField(max_length=100)
|
|
url_descarga = models.URLField()
|
|
|
|
def __str__(self):
|
|
return f"{self.nombre} - {self.categoria.nombre}"
|
|
|
|
class ServerSelection(models.Model):
|
|
server_id = models.IntegerField()
|
|
name = models.CharField(max_length=100)
|
|
address = models.CharField(max_length=100)
|
|
port = models.IntegerField()
|
|
gamebuild = models.IntegerField()
|
|
|
|
@property
|
|
def expansion(self):
|
|
return expansion_from_gamebuild(self.gamebuild)
|
|
|
|
def __str__(self):
|
|
return f"{self.name} ({self.expansion})"
|
|
|
|
class DownloadClientPage(models.Model):
|
|
title = models.CharField(max_length=255, default="Descarga del cliente")
|
|
content = CKEditor5Field('Contenido', config_name='default')
|
|
mac_instructions = CKEditor5Field('Instrucciones para macOS', blank=True, null=True, config_name='default')
|
|
updated_at = models.DateTimeField(auto_now=True)
|
|
|
|
def __str__(self):
|
|
return self.title
|
|
|
|
class ContentCreator(models.Model):
|
|
title = models.CharField(max_length=200)
|
|
description = CKEditor5Field('Descripción', config_name='default')
|
|
content_type = models.CharField(max_length=60, default="Contenido general")
|
|
subtitle = models.CharField(max_length=60, default="Nova WoW")
|
|
youtube_video_url = models.URLField(max_length=300, blank=True, null=True)
|
|
avatar_image_url = models.URLField(max_length=300, blank=True, null=True)
|
|
youtube_channel_url = models.URLField(max_length=300, blank=True, null=True)
|
|
facebook_page_url = models.URLField(max_length=300, blank=True, null=True)
|
|
updated_at = models.DateTimeField(auto_now=True)
|
|
|
|
def __str__(self):
|
|
return self.title
|