|
| 1 | +from django.db import models |
| 2 | +#from django.core.validators import MinValueValidator, MaxValueValidator |
| 3 | + |
| 4 | +class Dice(models.Model): |
| 5 | + string = models.CharField(max_length=50, null=True) |
| 6 | + quantity = models.IntegerField(default=1) |
| 7 | + sides = models.IntegerField(default=2) |
| 8 | + offset = models.IntegerField(default=0) |
| 9 | + |
| 10 | + def __str__(self): |
| 11 | + if self.offset < 0: |
| 12 | + return str(self.quantity) + 'd' + str(self.sides) + ' - ' + str((-1)*self.offset) |
| 13 | + elif self.offset == 0: |
| 14 | + return str(self.quantity) + 'd' + str(self.sides) |
| 15 | + elif self.offset > 0: |
| 16 | + return str(self.quantity) + 'd' + str(self.sides) + ' + ' + str(self.offset) |
| 17 | + |
| 18 | + |
| 19 | +class Event(models.Model): |
| 20 | + name = models.CharField(max_length=50) |
| 21 | + dice = models.ForeignKey(Dice, null=True, on_delete=models.CASCADE) |
| 22 | + rerollevent = models.ForeignKey('self', null=True, on_delete=models.CASCADE, related_name='RerollEvent') |
| 23 | + nextevent = models.ForeignKey('self', null=True, on_delete=models.CASCADE, related_name='NextEvent') |
| 24 | + |
| 25 | + def __str__(self): |
| 26 | + return self.name |
| 27 | + |
| 28 | + |
| 29 | +class EventRoll(models.Model): |
| 30 | + roll = models.IntegerField(null=True) |
| 31 | + outcome = models.CharField(max_length=300, null=True) |
| 32 | + npc = models.CharField(max_length=50, null=True) |
| 33 | + rerollcount = models.IntegerField(default=1) |
| 34 | + mainevent = models.ForeignKey(Event, null=True, on_delete=models.CASCADE, related_name='MainEvent') |
| 35 | + rollevent = models.ForeignKey(Event, null=True, on_delete=models.CASCADE, related_name='RollEvent') |
| 36 | + |
| 37 | + def __str__(self): |
| 38 | + if self.outcome: |
| 39 | + return self.mainevent.name + ' (' + str(self.roll) + '): ' + self.outcome |
| 40 | + elif self.rollevent: |
| 41 | + return self.mainevent.name + ' (' + str(self.roll) + ') -> ' + self.rollevent.name |
| 42 | + else: |
| 43 | + return self.mainevent.name + ' (' + str(self.roll) + ')' |
| 44 | + |
| 45 | +class NPCEvent(models.Model): |
| 46 | + current = models.ForeignKey(Event, null=True, on_delete=models.CASCADE, related_name='CurrentNPCEvent') |
| 47 | + next = models.ForeignKey(Event, null=True, on_delete=models.CASCADE, related_name='NextNPCEvent') |
| 48 | + |
| 49 | + def __str__(self): |
| 50 | + return self.current.name + ' -> ' + self.next.name |
| 51 | + |
| 52 | + |
| 53 | +class Statistic(models.Model): |
| 54 | + name = models.CharField(max_length=50, unique=True) |
| 55 | + minimum = models.IntegerField(null=True) |
| 56 | + maximum = models.IntegerField(null=True) |
| 57 | + |
| 58 | + def __str__(self): |
| 59 | + return self.name + ' (' + str(self.minimum) + '->' + str(self.maximum) + ')' |
| 60 | + |
| 61 | + |
| 62 | +class Skill(models.Model): |
| 63 | + name = models.CharField(max_length=50) |
| 64 | + minimum = models.IntegerField() |
| 65 | + maximum = models.IntegerField() |
| 66 | + statistic = models.ForeignKey(Statistic, null=True, on_delete=models.CASCADE) |
| 67 | + |
| 68 | + def __str__(self): |
| 69 | + return '[' + self.statistic.name + '] ' + self.name + ' (' + str(self.minimum) + '->' + str(self.maximum) + ')' |
| 70 | + |
| 71 | + |
| 72 | +class Role(models.Model): |
| 73 | + name = models.CharField(max_length=50) |
| 74 | + special_skills = models.ManyToManyField(Skill, related_name='SpecialSkill') |
| 75 | + common_skills = models.ManyToManyField(Skill, related_name='CommonSkill') |
| 76 | + |
| 77 | + def __str__(self): |
| 78 | + return self.name |
| 79 | + |
| 80 | + |
| 81 | +class Character(models.Model): |
| 82 | + name = models.CharField(default='', unique=True, max_length=50) |
| 83 | + role = models.ForeignKey(Role, null=True, on_delete=models.CASCADE) |
| 84 | + stat_points = models.IntegerField(default=0) |
| 85 | + role_points = models.IntegerField(default=0) |
| 86 | + other_points = models.IntegerField(default=0) |
| 87 | + |
| 88 | + def __str__(self): |
| 89 | + return self.role.name + ': ' + self.name |
| 90 | + |
| 91 | + |
| 92 | +class CharacterEventRoll(models.Model): |
| 93 | + character = models.ForeignKey(Character, null=True, on_delete=models.CASCADE) |
| 94 | + eventroll = models.ForeignKey(EventRoll, null=True, on_delete=models.CASCADE) |
| 95 | + |
| 96 | + def __str__(self): |
| 97 | + return str(self.eventroll) |
| 98 | + |
| 99 | + |
| 100 | +class NPCEventRoll(models.Model): |
| 101 | + npc = models.ForeignKey(Character, null=True, on_delete=models.CASCADE, related_name='NPC') |
| 102 | + character = models.ForeignKey(Character, null=True, on_delete=models.CASCADE, related_name='PlayerCharacter') |
| 103 | + eventroll = models.ForeignKey(EventRoll, null=True, on_delete=models.CASCADE) |
| 104 | + |
| 105 | + def __str__(self): |
| 106 | + # return str(self.npc) + ': ' + str(self.eventroll) |
| 107 | + return str(self.eventroll) |
| 108 | + |
| 109 | + |
| 110 | +class CharacterStatistic(models.Model): |
| 111 | + character = models.ForeignKey(Character, null=True, on_delete=models.CASCADE) |
| 112 | + statistic = models.ForeignKey(Statistic, null=True, on_delete=models.CASCADE) |
| 113 | + current = models.IntegerField(blank=True) |
| 114 | + |
| 115 | + def __str__(self): |
| 116 | + return self.statistic.name + ': ' + str(self.current) |
| 117 | + |
| 118 | + |
| 119 | +class CharacterSkill(models.Model): |
| 120 | + character = models.ForeignKey(Character, null=True, on_delete=models.CASCADE) |
| 121 | + skill = models.ForeignKey(Skill, null=True, on_delete=models.CASCADE) |
| 122 | + current = models.IntegerField(blank=True) |
| 123 | + |
| 124 | + def __str__(self): |
| 125 | + return '[' + self.skill.statistic.name + '] ' + self.skill.name + ': ' + str(self.current) |
| 126 | + |
0 commit comments