Compare commits
13 Commits
5d30482ce3
...
bol-v12.1.
Author | SHA1 | Date | |
---|---|---|---|
819548567b | |||
133f7aa428 | |||
ed68c17304 | |||
e6bdc427f2 | |||
321052fd33 | |||
165a18e897 | |||
7ed9265a26 | |||
ae43c7c920 | |||
20ab9a17a4 | |||
5de40d4998 | |||
c7c26c0033 | |||
5c4c6d73ee | |||
1a0049a3f5 |
@ -24,6 +24,7 @@ Les livres du jeu sont nécessaires pour jouer, et sont disponibles ici : http:/
|
||||
Barbarians of Lemuria, Mythic edition, est un jeu de Simon Washbourne
|
||||
|
||||
Auteur : Simon Washbourne.
|
||||
|
||||
## Crédits de la version française
|
||||
|
||||
Barbarians of Lemuria, le jeu de rôle de Sword & Sorcery, est une publication des éditions Ludospherik, tous droits réservés.
|
||||
|
@ -1,5 +1,12 @@
|
||||
Changes :
|
||||
|
||||
# v12.1.0
|
||||
|
||||
- Gestion des Hordes
|
||||
- Ajout de la traduction Espagnole
|
||||
- Nouvelles clés de traduction
|
||||
- Petites amélioration diverses
|
||||
|
||||
# v11.1.2
|
||||
|
||||
- Ajout des traductions manquantes en anglais
|
||||
@ -17,11 +24,11 @@ Changes :
|
||||
- Correction sur l'encaissement sans armure
|
||||
- Ajout d'une note d'explication sur l'initiative
|
||||
|
||||
|
||||
# v11.0.8
|
||||
|
||||
- Correction sur les malus de bouclier (blocage)
|
||||
- Corrrection sur le malus d'init des boucliers qui était mal affiché dans la fiche d'item
|
||||
|
||||
# v10.4.0
|
||||
|
||||
- Ajout de la gestion d'effets
|
||||
|
21
css/bol.css
21
css/bol.css
@ -803,6 +803,18 @@ body.system-bol img#logo {
|
||||
max-width: calc(250px - 10px);
|
||||
margin-right: 10px;
|
||||
}
|
||||
.sheet-profile-img {
|
||||
cursor: pointer;
|
||||
border: none;
|
||||
background-color: #EEE;
|
||||
height: auto;
|
||||
width: 96px;
|
||||
height: 96px;
|
||||
min-width: 96px;
|
||||
min-height: 96px;
|
||||
max-width: 96px;
|
||||
margin-right: 10px;
|
||||
}
|
||||
.bol.sheet.actor .window-content form .main .sheet-body {
|
||||
overflow: hidden;
|
||||
}
|
||||
@ -937,6 +949,7 @@ body.system-bol img#logo {
|
||||
min-height: 400px;
|
||||
}
|
||||
.bol.sheet.item h1 input.itemname {
|
||||
margin-top: 32px;
|
||||
font-family: "Wolfsbane2Expanded", cursive;
|
||||
}
|
||||
.bol.sheet.item .item-properties {
|
||||
@ -1037,7 +1050,7 @@ body.system-bol img#logo {
|
||||
flex-direction: column;
|
||||
position: absolute;
|
||||
top: 2.75rem;
|
||||
right: 4rem;
|
||||
right: 16rem;
|
||||
}
|
||||
.tokenhudext.right {
|
||||
justify-content: flex-start;
|
||||
@ -1051,9 +1064,10 @@ body.system-bol img#logo {
|
||||
.tokenhudext.right2 {
|
||||
justify-content: flex-start;
|
||||
flex-direction: column;
|
||||
/*transform: translate(0, -30%);*/
|
||||
position: absolute;
|
||||
top: -4rem;
|
||||
left: 12rem;
|
||||
left: 11rem;
|
||||
}
|
||||
.control-icon.tokenhudicon {
|
||||
width: fit-content;
|
||||
@ -1083,3 +1097,6 @@ body.system-bol img#logo {
|
||||
.character-summary-rollable {
|
||||
text-decoration: underline;
|
||||
}
|
||||
.activated-green {
|
||||
color: darkgreen;
|
||||
}
|
129
lang/en.json
129
lang/en.json
@ -1,10 +1,19 @@
|
||||
{
|
||||
"ACTOR.TypeCharacter": "Character",
|
||||
"ACTOR.TypeEncounter": "Encounter",
|
||||
"ITEM.TypeItem": "Item",
|
||||
"ITEM.TypeFeature": "Feature",
|
||||
"ITEM.TypeWeapon": "Weapon",
|
||||
"ITEM.TypeArmor": "Armor",
|
||||
"TYPES": {
|
||||
"Actor": {
|
||||
"character": "PC",
|
||||
"encounter": "NPC",
|
||||
"npc": "NPC",
|
||||
"vehicle": "Vehicle",
|
||||
"horde": "Horde"
|
||||
},
|
||||
"Item": {
|
||||
"item": "Object",
|
||||
"feature": "Trait",
|
||||
"weapon": "Weapon",
|
||||
"armure": "Armor"
|
||||
}
|
||||
},
|
||||
|
||||
"BOL.attributes.vigor": "Strength",
|
||||
"BOL.attributes.halfvigor" : "Half-Strength",
|
||||
@ -46,6 +55,9 @@
|
||||
"BOL.ui.horoscopesMalus": "Horoscopes (Malus)",
|
||||
"BOL.ui.groupHoroscope": "Horoscrope de Groupe de ",
|
||||
|
||||
"BOL.ui.rabble": "Rabble",
|
||||
"BOL.ui.tough": "Tough",
|
||||
"BOL.ui.villain": "Villain",
|
||||
"BOL.ui.properties": "Properties",
|
||||
"BOL.ui.description": "Description",
|
||||
"BOL.ui.actions": "Actions",
|
||||
@ -164,10 +176,57 @@
|
||||
"BOL.ui.armorAgiMalus": "Armor+Shield Modifier (Agi)",
|
||||
"BOL.ui.armorInitMalus": "Armor Modifier (Init)",
|
||||
"BOL.ui.attackValue": "Attack Value",
|
||||
"BOL.ui.attackModifier": "Attack Modifier",
|
||||
"BOL.ui.weaponbonus": "Cette arme bénéficie déja d'un Dé de Bonus (Arme Favorite prise en compte, par exemple)",
|
||||
"BOL.ui.initMalus": "Init malus",
|
||||
"BOL.ui.isspecial": "Spécial ?",
|
||||
"BOL.ui.createEquipment": "Create Equipment",
|
||||
"BOL.ui.creature": "Creature",
|
||||
"BOL.ui.undead": "Undead",
|
||||
"BOL.ui.daemon": "Daemon",
|
||||
"BOL.ui.attributaptitude": "Attribut ou Aptitude",
|
||||
"BOL.ui.always": "Tout les jets (ie toujours)",
|
||||
"BOL.ui.effectbonusmalus": "Bonus ou Malus à appliquer",
|
||||
"BOL.ui.boleffects": "Effects (automatic)",
|
||||
"BOL.ui.modifier": "Modifier",
|
||||
"BOL.ui.effects": "Ongoing effects",
|
||||
"BOL.ui.pcname": "PCs",
|
||||
"BOL.ui.npcname": "NPCs",
|
||||
"BOL.ui.pclistbutton": "Compact view",
|
||||
"BOL.ui.noactorfound": "Unknown NPC. The NPC must be known in the world to be displayed here.",
|
||||
"BOL.ui.deletetitle": "Delete",
|
||||
"BOL.ui.confirmdelete": "Are you sure to delete this item ?",
|
||||
"BOL.ui.nomorealchemypoints": "No more Creation Point !",
|
||||
"BOL.ui.armornoformula": "The Armor {protect.name} has no protection formula !",
|
||||
"BOL.ui.selectactor": "Select the actors to apply the macro",
|
||||
"BOL.ui.itemnotfound": "Impossible to find the object of this macro",
|
||||
"BOL.ui.noinit": "No initiative recorded. Roll initiative from the actor's sheet.",
|
||||
"BOL.ui.warninitiative": "No available initiative. Roll Initiative for this combat.",
|
||||
"BOL.ui.isspecial": "Special ?",
|
||||
"BOL.ui.createEquipment": "Create an equipment",
|
||||
"BOL.ui.astrology": "Astrology and Horoscope",
|
||||
"BOL.ui.astrologyMinor": "Build a Minor Horoscope",
|
||||
"BOL.ui.astrologyMajor": "Build a Major Horoscope",
|
||||
"BOL.ui.astrologyMajorGroup": "Build a Major Group Horoscope",
|
||||
"BOL.ui.makeHoroscope": "Build a Horoscope",
|
||||
"BOL.ui.astrologerRank": "Astrologer Rank",
|
||||
"BOL.ui.horoscopeCost": "Astrology Points cost",
|
||||
"BOL.ui.minor": "Minor",
|
||||
"BOL.ui.major": "Major",
|
||||
"BOL.ui.majorgroup": "Group Major",
|
||||
"BOL.ui.horoscopeGroup": "Group Horoscope",
|
||||
"BOL.ui.horoscopeDiceRemaining": "Remaining Dice",
|
||||
"BOL.ui.horoscopeDiceMax": "Max Dice",
|
||||
"BOL.ui.astrologyNoPoints": "You do not have enough Astrology Points!",
|
||||
"BOL.ui.newEquipment": "New equipment",
|
||||
"BOL.ui.newNaturalWeapon": "Natural weapon",
|
||||
"BOL.ui.newNaturalProtection": "Natural protection",
|
||||
"BOL.ui.createNaturalWeapon": "Create a natural weapon",
|
||||
"BOL.ui.createNaturalProtection": "Create a natural protection",
|
||||
"BOL.ui.hordeSize": "Horde size",
|
||||
"BOL.ui.hordeAttack": "Horde attack",
|
||||
"BOL.ui.hordeName": "Name of the Horde",
|
||||
"BOL.ui.criticallegend": "Legendary Success",
|
||||
"BOL.ui.hordeHP": "Horde Vitality (1 member)",
|
||||
"BOL.ui.hordehp": "Horde Vitality (total)",
|
||||
|
||||
"BOL.featureCategory.origins": "Origins",
|
||||
"BOL.featureCategory.races": "Races",
|
||||
@ -185,6 +244,11 @@
|
||||
"BOL.featureSubtypes.language": "Language",
|
||||
"BOL.featureSubtypes.gods": "Faith & Gods",
|
||||
"BOL.featureSubtypes.fightOption": "Combat Option",
|
||||
"BOL.featureSubtypes.effect": "Effect",
|
||||
"BOL.featureSubtypes.effects": "Effects",
|
||||
"BOL.featureSubtypes.boleffect": "Effect",
|
||||
"BOL.featureSubtypes.horoscope": "Horoscope",
|
||||
"BOL.featureSubtypes.xplog": "XP Journal",
|
||||
|
||||
"BOL.bougette.nomoney": "Nothing",
|
||||
"BOL.bougette.tolive": "To live",
|
||||
@ -209,6 +273,7 @@
|
||||
"BOL.itemCategory.other": "Other",
|
||||
"BOL.itemCategory.capacity" : "Capacity",
|
||||
"BOL.itemCategory.alchemy": "Alchemy",
|
||||
"BOL.itemCategory.vehicleweapon": "Vehicle weapon",
|
||||
|
||||
"BOL.combatCategory.protections": "Protections",
|
||||
"BOL.combatCategory.shields": "Shields",
|
||||
@ -408,11 +473,14 @@
|
||||
"BOL.chat.rolldamage": "Roll for damages",
|
||||
"BOL.chat.rolldamage6": "Roll for damages +6",
|
||||
"BOL.chat.rolldamage12": "Roll for damages +12 (1 HP)",
|
||||
"BOL.chat.rolldamage12Legend": "Roll for damages +12",
|
||||
"BOL.chat.damageresult": "Damages of {name} : {total}",
|
||||
"BOL.chat.damagetarget": "Target : {target}",
|
||||
"BOL.chat.applydamagetotarget": "Apply damages to the target",
|
||||
"BOL.chat.fightoption": "Combat options",
|
||||
"BOL.chat.reroll": "Reroll (1 HP)",
|
||||
"BOL.chat.heroicreminder": "In addition of the actions below, you can : <ul><li>Carnage : Do a second free attack on the same opponent</li><li>Precise : 1 Malus Die on your opponent on a chosen location</li><li>Disarm</li><li>Rabble Massacre</li><li>Prone : Push your opponent on the ground (max +1 size)</li></ul>If you spent 1 Hero Point in addition, all these effects can be doubled.",
|
||||
"BOL.chat.legendaryreminder": "In addition of the actions below, you can twice the following actions: <ul><li>Carnage : Do a second free attack on the same opponent</li><li>Precise : 1 Malus Die on your opponent on a chosen location</li><li>Disarm</li><li>Rabble Massacre</li><li>Prone : Push your opponent on the ground (max +1 size)</li></ul>",
|
||||
"BOL.chat.toheroic": "Convert to Mighty success (1 HP)",
|
||||
"BOL.chat.tolegend": "Convert to Legendary succes (1 HP)",
|
||||
"BOL.chat.hurttitle": "{name} is going to receive {damageTotal} damages !",
|
||||
@ -430,6 +498,51 @@
|
||||
"BOL.chat.spell": "Spell",
|
||||
"BOL.chat.spellcost": "Power Points cost",
|
||||
"BOL.chat.spellremaining": "Remaining Power Points",
|
||||
"BOL.chat.nodamagesummary": "No damage ....",
|
||||
"BOL.chat.damageresume": "{name} as taken wounds ...",
|
||||
"BOL.chat.fumblemessage": "If you accept the consequences of a fumble (GM choice), you can get 1 additionnal Hero Point.",
|
||||
"BOL.chat.rangeinfo": "Range/Throw of {attackerName} to {defenderName}",
|
||||
"BOL.chat.rangeweaponinfo": "Weapon : {weaponName} - Base range {weaponRange}",
|
||||
"BOL.chat.rangeout": "Modifier : Out of range",
|
||||
"BOL.chat.range0": "Modifier : Point blank (+1)",
|
||||
"BOL.chat.range1": "Modifier : Short Range (0)",
|
||||
"BOL.chat.range2": "Modifier : Middle Range (-1)",
|
||||
"BOL.chat.range3": "Modifier : Long Range (-2)",
|
||||
"BOL.chat.range4": "Modifier : Very Long Range (-4)",
|
||||
"BOL.chat.range5": "Modifier : Extrem Range (-6)",
|
||||
"BOL.chat.range6": "Modifier : Max Range (-8)",
|
||||
"BOL.chat.rangeprefix": "Evaluated distance : ",
|
||||
"BOL.chat.rangevisible": "Line of sight is cleared between tokens.",
|
||||
"BOL.chat.rangenotvisible": "Line of sight is blocked between tokens.",
|
||||
"BOL.chat.rangetitle": "GM Information",
|
||||
"BOL.chat.weaponreroll1": "As a reminder, this weapon re-roll 1 whend rolling for damage.",
|
||||
"BOL.chat.rollbougette": "Budget roll",
|
||||
"BOL.chat.bougettesuccess": "Your budget remains unchanged !",
|
||||
"BOL.chat.bougettefailure": "You spent too much money, your budget is going down by one level...",
|
||||
"BOL.chat.initiative": "Initiative rank (10 to 1)",
|
||||
"BOL.chat.horoscope": "Horoscope",
|
||||
"BOL.chat.horoscopepoints": "Cost : {points} Astrology Points",
|
||||
"BOL.chat.horoscopeminorsuccess": "Your minor horoscope is a success : change the horoscope name in your sheet. You will benefit of 1 Bonus Die for the given situation.",
|
||||
"BOL.chat.horoscopeminorfailure": "Your minor horoscope mineur isa failure : change the horoscope name in your sheet. Vous will suffer 1 Malus Die for the given situation.",
|
||||
"BOL.chat.horoscopemajorsuccess": "Your major horoscope is a success : {horoscopeName} gets 1 new Hero Point for this adventure. This point has been automatically added.",
|
||||
"BOL.chat.horoscopemajorfailure": "Your major horoscope is a failure : {horoscopeName} looses 1 Hero Point for this adventure. This point has been automatically substracted.",
|
||||
"BOL.chat.horoscopemajorgroupsuccess": "Your major group horoscope majeur is a success. Your and your party gets {careerBonus} Bonus Dice during this adventure.",
|
||||
"BOL.chat.horoscopemajorgroupfailure": "Your major group horoscope is a failure. You and your party suffers {careerBonus} Malus Dice durig this adventure.",
|
||||
"BOL.chat.usedhoroscope": "Horoscope has been used",
|
||||
"BOL.chat.horoscopedeleted": "The Horoscopes used are deleted automatically.",
|
||||
"BOL.chat.criticaloptions": "Critical success !! You can (select 1 option) :",
|
||||
"BOL.chat.criticalcarnage": "Dual attack : you gain 1 free attack. This second attack can't benefit from a Hero/Villain Point.",
|
||||
"BOL.chat.criticalplus6": "Devastating : damage +6 aux dommages (cf button below).",
|
||||
"BOL.chat.criticalprecise": "Precise : You hit to harm your opponent. Describe what your are doing, and if the GM agree, your opponent will suffer 1 Malus Die for the relevant actions.",
|
||||
"BOL.chat.criticalunarm": "Disarm : Si your opponnent has a weapon in hand, you disarm him.",
|
||||
"BOL.chat.criticalrabble": "Rabble Massacre : If you fight against rabble, damages results indicate the amount of rabble you kill.",
|
||||
"BOL.chat.criticalpush": "Prone : If the size allow it, you push your opponent on the ground. He suffer 1 Malus Die for all his actions during the next round.",
|
||||
"BOL.chat.criticalup": "Transform to Legendary : If you spent 1 Hero Point/Villain, you can transform this Heroic success into a Legendary success.You can the choose 2 options in this list above.",
|
||||
"BOL.chat.criticalinfo": "This is an Heroic success ! Choose your options and effects !",
|
||||
"BOL.chat.criticallegendaryinfo": "This is a Legendary succes ! Choisissez vos options et effets !",
|
||||
"BOL.chat.criticalbuttonjournal": "Legendary/Heroic Success",
|
||||
"BOL.chat.nodamage": "Do not apply damages",
|
||||
"BOL.chat.armorRoll": "Armor roll",
|
||||
|
||||
"BOL.dialog.soeasy": "So easy (+4)",
|
||||
"BOL.dialog.veryeasy": "Very easy (+2)",
|
||||
|
596
lang/es.json
Normal file
596
lang/es.json
Normal file
@ -0,0 +1,596 @@
|
||||
{
|
||||
"TYPES": {
|
||||
"Actor": {
|
||||
"character": "PJ",
|
||||
"encounter": "PNJ",
|
||||
"npc": "PNJ",
|
||||
"vehicle": "Vehículo"
|
||||
},
|
||||
"Item": {
|
||||
"item": "Objeto",
|
||||
"feature": "Rasgo",
|
||||
"weapon": "Arma",
|
||||
"armure": "Armadura"
|
||||
}
|
||||
},
|
||||
|
||||
"BOL.attributes.vigor": "Fuerza",
|
||||
"BOL.attributes.halfvigor" : "Media-Fuerza",
|
||||
"BOL.attributes.agility": "Agilidad",
|
||||
"BOL.attributes.mind": "Mente",
|
||||
"BOL.attributes.appeal": "Atractivo",
|
||||
"BOL.aptitudes.init": "Iniciativa",
|
||||
"BOL.aptitudes.melee": "Melé",
|
||||
"BOL.aptitudes.ranged": "Distancia",
|
||||
"BOL.aptitudes.def": "Defensa",
|
||||
"BOL.aptitudes.prot": "Protección",
|
||||
"BOL.resources.hp": "Vitalidad",
|
||||
"BOL.resources.hero": "Héroe",
|
||||
"BOL.resources.faith": "Fe",
|
||||
"BOL.resources.creation": "Creación",
|
||||
"BOL.resources.power": "Poder",
|
||||
"BOL.resources.villainy": "Villano",
|
||||
"BOL.resources.alchemypoints": "Puntos Alquimia",
|
||||
"BOL.traits.xp": "Experiencia",
|
||||
|
||||
"BOL.ui.tab.stats": "Atributos",
|
||||
"BOL.ui.tab.combat": "Combate",
|
||||
"BOL.ui.tab.actions": "Acciones",
|
||||
"BOL.ui.tab.features": "Rasgos",
|
||||
"BOL.ui.tab.equipment": "Equipo",
|
||||
"BOL.ui.tab.description": "Descripción",
|
||||
"BOL.ui.tab.details": "Detalles",
|
||||
"BOL.ui.tab.spellalchemy": "Alquimia",
|
||||
"BOL.ui.tab.astrologer": "Astrólogo",
|
||||
|
||||
"BOL.ui.astrologerPoints": "Puntos Astrología",
|
||||
"BOL.ui.astrologerPointsLabel": "Puntos Astrología actuales",
|
||||
"BOL.ui.ishoroscopemajor": "¿Horóscopo Mayor (ej del grupo)?",
|
||||
"BOL.ui.answer": "Respuesta",
|
||||
"BOL.ui.horoscopefavorable": "Favorable (1dB)",
|
||||
"BOL.ui.horoscopeunfavorable": "Desfavorable (1dM)",
|
||||
"BOL.ui.horoscopes": "Horóscopos",
|
||||
"BOL.ui.horoscopesBonus": "Horóscopos (Ventaja)",
|
||||
"BOL.ui.horoscopesMalus": "Horóscopos (Desventaja)",
|
||||
"BOL.ui.groupHoroscope": "Horóscropo de Grupo de ",
|
||||
|
||||
"BOL.ui.rabble": "Chusma",
|
||||
"BOL.ui.tough": "Matones",
|
||||
"BOL.ui.villain": "Villanos",
|
||||
"BOL.ui.properties": "Propiedades",
|
||||
"BOL.ui.description": "Descripción",
|
||||
"BOL.ui.actions": "Acciones",
|
||||
"BOL.ui.capacities": "Capacidad",
|
||||
"BOL.ui.damages": "Daño",
|
||||
"BOL.ui.details": "Detalles",
|
||||
"BOL.ui.category": "Categoría",
|
||||
"BOL.ui.subcategory": "Sub-Categoría",
|
||||
"BOL.ui.type": "Tipo",
|
||||
"BOL.ui.subtype": "Subtipo",
|
||||
"BOL.ui.attribute" : "Atributo",
|
||||
"BOL.ui.aptitude" : "Habilidad",
|
||||
"BOL.ui.advantages" : "Ventaja/Desventaja",
|
||||
"BOL.ui.modifiers": "Modificador",
|
||||
"BOL.ui.item": "Objeto",
|
||||
"BOL.ui.edit": "Editar",
|
||||
"BOL.ui.unequip": "Quitar",
|
||||
"BOL.ui.equip": "Equipar",
|
||||
"BOL.ui.delete": "Borrar",
|
||||
"BOL.ui.roll" : "Tirar",
|
||||
"BOL.ui.equipment" : "Equipo",
|
||||
"BOL.ui.equipmentProperties" : "Propiedades Equipo",
|
||||
"BOL.ui.weaponAttack" : "Ataque Arma",
|
||||
"BOL.ui.weaponProperties" : "Propiedades Arma",
|
||||
"BOL.ui.protectionProperties" : "Propiedades Protección",
|
||||
"BOL.ui.magicalProperties" : "Propiedades Mágicas",
|
||||
"BOL.ui.alchemyProperties": "Propiedades Alquimia",
|
||||
"BOL.ui.armor" : "Armadura",
|
||||
"BOL.ui.reach" : "Alcance",
|
||||
"BOL.ui.weapon" : "Arma",
|
||||
"BOL.ui.melee" : "Melé",
|
||||
"BOL.ui.ranged" : "Distancia",
|
||||
"BOL.ui.protection" : "Protección",
|
||||
"BOL.ui.shield" : "Escudo",
|
||||
"BOL.ui.blocking" : "Bloqueo",
|
||||
"BOL.ui.range" : "Alcance",
|
||||
"BOL.ui.quantity" : "Cantidad",
|
||||
"BOL.ui.qty" : "Cant.",
|
||||
"BOL.ui.slot" : "Hueco",
|
||||
"BOL.ui.weight" : "Peso",
|
||||
"BOL.ui.price": "Precio",
|
||||
"BOL.ui.cancel": "Cancelar",
|
||||
"BOL.ui.submit": "OK",
|
||||
"BOL.ui.attributeCheck" : "Tirada Atributo",
|
||||
"BOL.ui.aptitudeCheck" : "Tirada Habilidad",
|
||||
"BOL.ui.weaponCheck" : "Tirada Arma",
|
||||
"BOL.ui.spellCheck" : "Tirada Conjuro",
|
||||
"BOL.ui.careers" : "Oficios",
|
||||
"BOL.ui.boons" : "Ventaja",
|
||||
"BOL.ui.flaws" : "Desventaja",
|
||||
"BOL.ui.rank" : "Rango",
|
||||
"BOL.ui.success" : "Éxito",
|
||||
"BOL.ui.failure" : "Fallo",
|
||||
"BOL.ui.fumble" : "Pifia",
|
||||
"BOL.ui.critical" : "Éxito Asombroso",
|
||||
"BOL.ui.criticallegend" : "Éxito Legendario",
|
||||
"BOL.ui.maneuvers" : "Maniobras",
|
||||
"BOL.ui.stacksize" : "Tamaño Pila (máx)",
|
||||
"BOL.ui.weapons" : "Armas",
|
||||
"BOL.ui.protections" : "Protección",
|
||||
"BOL.ui.ammos" : "Munición",
|
||||
"BOL.ui.containers" : "Contenedor",
|
||||
"BOL.ui.treasure" : "Tesoro",
|
||||
"BOL.ui.vehicles" : "Vehículo/Montura",
|
||||
"BOL.ui.misc" : "Varios",
|
||||
"BOL.ui.vehicleProperties" : "Propiedades Vehículo",
|
||||
"BOL.ui.speed" : "Velocidad",
|
||||
"BOL.ui.noWeaponName" : "Nombre Arma",
|
||||
"BOL.ui.targetDefence": "Defensa",
|
||||
"BOL.ui.applyShieldMalus": "Aplicar Mod. Escudo",
|
||||
"BOL.ui.shieldMalus": "Mod. Escudo",
|
||||
"BOL.ui.defenseScore": "Valor Defensa",
|
||||
"BOL.ui.defender": "Defensor",
|
||||
"BOL.ui.difficulty": "Dificultad",
|
||||
"BOL.ui.spellProperties": "Propiedades Conjuro",
|
||||
"BOL.ui.duration": "Duración",
|
||||
"BOL.ui.spellkeep": "Mantenimiento",
|
||||
"BOL.ui.concentrate": "Concentración",
|
||||
"BOL.ui.registerInit": "Registrar Inic.",
|
||||
"BOL.ui.isSorcerer": "¿Es Hechicero?",
|
||||
"BOL.ui.isAlchemist": "¿Es Alquimista?",
|
||||
"BOL.ui.isPriest": "¿Es Clérigo/Druida?",
|
||||
"BOL.ui.isAstrologer": "¿Es Astrólogo?",
|
||||
"BOL.ui.circle": "Círculo",
|
||||
"BOL.ui.spells": "Conjuros",
|
||||
"BOL.ui.focusSpell": "Lanzar conjuro",
|
||||
"BOL.ui.sorcererRank" : "Rango Hechicero",
|
||||
"BOL.ui.alchemistRank": "Rango Alquimista",
|
||||
"BOL.ui.mandatoryconditions": "Condiciones obligatorias",
|
||||
"BOL.ui.optionnalconditions": "Condiciones opcionales",
|
||||
"BOL.ui.ppcost": "Coste Puntos Poder",
|
||||
"BOL.ui.ppAvailable": "Puntos Poder Disponibles",
|
||||
"BOL.ui.pccost": "Coste Puntos Creación",
|
||||
"BOL.ui.pcnow": "Puntos Creación Actuales",
|
||||
"BOL.ui.alchemyType": "Tipo",
|
||||
"BOL.ui.alchemy": "Alquimia",
|
||||
"BOL.ui.makeAlchemy": "Realizar Alquimia",
|
||||
"BOL.ui.alchemyCostTotal": "Coste Total Puntos Alquimia",
|
||||
"BOL.ui.alchemyInvest": "Invertir Puntos Alquimia",
|
||||
"BOL.ui.alchemyCurrent": "Puntos Alquimia actuales en Objeto",
|
||||
"BOL.ui.advance": "Estado",
|
||||
"BOL.ui.isadvantage": "¿Da un dado ventaja?",
|
||||
"BOL.ui.bonusmalus": "Ventaja/desventaja adicional",
|
||||
"BOL.ui.nbdices": "Número Dados",
|
||||
"BOL.ui.totalmod": "Mod. Total",
|
||||
"BOL.ui.rangeModifiers": "Mod. distancia",
|
||||
"BOL.ui.money": "Dinero",
|
||||
"BOL.ui.moneyTitle": "Tesoro",
|
||||
"BOL.ui.fightOption": "Opciones Combate",
|
||||
"BOL.ui.none": "Ninguno",
|
||||
"BOL.ui.fightOptionType": "Tipo Opción Combate",
|
||||
"BOL.ui.activated": "Activado",
|
||||
"BOL.ui.deactivated": "Desactivado",
|
||||
"BOL.ui.status": "Estado",
|
||||
"BOL.ui.toactivated": "Activo",
|
||||
"BOL.ui.todeactivated": "Inactivo",
|
||||
"BOL.ui.armorAgiMalus": "Mod. Armadura+Escudo (Agi)",
|
||||
"BOL.ui.armorInitMalus": "Mod. Armadura (Inic)",
|
||||
"BOL.ui.attackValue": "Valor Ataque",
|
||||
"BOL.ui.attackModifier": "Mod. Ataque",
|
||||
"BOL.ui.weaponbonus": "Esta arma se beneficia de un Dado de ventaja (ej Arma Personal)",
|
||||
"BOL.ui.initMalus": "Desventaja Inic.",
|
||||
"BOL.ui.creature": "Criatura",
|
||||
"BOL.ui.undead": "No-muerto",
|
||||
"BOL.ui.daemon": "Demonio",
|
||||
"BOL.ui.attributaptitude": "Atributo o Habilidad",
|
||||
"BOL.ui.always": "Todos (ej siempre)",
|
||||
"BOL.ui.effectbonusmalus": "Ventaja o Desventaja a aplicar",
|
||||
"BOL.ui.boleffects": "Efectos (automático)",
|
||||
"BOL.ui.modifier": "Modificador",
|
||||
"BOL.ui.effects": "Efectos Activos",
|
||||
"BOL.ui.pcname": "PCs",
|
||||
"BOL.ui.npcname": "NPCs",
|
||||
"BOL.ui.pclistbutton": "Vista compacta",
|
||||
"BOL.ui.noactorfound": "PNJ Desconocido. El PNJ debe ser conocido en el mundo de juego para poder mostrase.",
|
||||
"BOL.ui.deletetitle": "Borrar",
|
||||
"BOL.ui.confirmdelete": "¿Seguro que quieres borrar este objeto?",
|
||||
"BOL.ui.nomorealchemypoints": "¡Sin Puntos de Creación!",
|
||||
"BOL.ui.armornoformula": "La Armadura {protect.name} no dispone de fórmula de protección!",
|
||||
"BOL.ui.selectactor": "Selecciona un actora para aplicar la macro",
|
||||
"BOL.ui.itemnotfound": "Imposible encontrar el objeto de esta macro",
|
||||
"BOL.ui.noinit": "Sin iniciativa. Tira por iniciativa desde la hoja del actor.",
|
||||
"BOL.ui.warninitiative": "Iniciativa no disponible. Tira Iniciativa para este combate.",
|
||||
"BOL.ui.isspecial": "¿Especial?",
|
||||
"BOL.ui.createEquipment": "Crear equipo",
|
||||
"BOL.ui.astrology": "Astrología",
|
||||
"BOL.ui.astrologyMinor": "Crear Horóscopo Menor",
|
||||
"BOL.ui.astrologyMajor": "Crear Horóscopo Mayor",
|
||||
"BOL.ui.astrologyMajorGroup": "Crear Grupo Horóscopo Mayor",
|
||||
"BOL.ui.makeHoroscope": "Crear Horóscopo",
|
||||
"BOL.ui.astrologerRank": "Rango Astrólogo",
|
||||
"BOL.ui.horoscopeCost": "Coste Puntos Astrología",
|
||||
"BOL.ui.minor": "Menor",
|
||||
"BOL.ui.major": "Mayor",
|
||||
"BOL.ui.majorgroup": "Grupo Mayor",
|
||||
"BOL.ui.horoscopeGroup": "Grupo Horóscopo",
|
||||
"BOL.ui.horoscopeDiceRemaining": "Dados Restantes",
|
||||
"BOL.ui.horoscopeDiceMax": "Dado Máx",
|
||||
"BOL.ui.astrologyNoPoints": "¡No dispones de suficientes Puntos Astrología!",
|
||||
"BOL.ui.newEquipment": "Nuevo equipo",
|
||||
"BOL.ui.newNaturalWeapon": "Arma natural",
|
||||
"BOL.ui.newNaturalProtection": "Protección natural",
|
||||
"BOL.ui.createNaturalWeapon": "Crear un arma natural",
|
||||
"BOL.ui.createNaturalProtection": "Crear una protección natural",
|
||||
|
||||
"BOL.featureCategory.origins": "Origen",
|
||||
"BOL.featureCategory.races": "Raza",
|
||||
"BOL.featureCategory.careers": "Oficios",
|
||||
"BOL.featureCategory.boons": "Ventajas",
|
||||
"BOL.featureCategory.flaws": "Desventajas",
|
||||
"BOL.featureCategory.languages": "Idiomas",
|
||||
"BOL.featureCategory.fightoptions": "Opciones Combate",
|
||||
|
||||
"BOL.featureSubtypes.origin": "Origen",
|
||||
"BOL.featureSubtypes.race": "Raza",
|
||||
"BOL.featureSubtypes.career": "Oficio",
|
||||
"BOL.featureSubtypes.boon": "Ventaja",
|
||||
"BOL.featureSubtypes.flaw": "Desventaja",
|
||||
"BOL.featureSubtypes.language": "Idioma",
|
||||
"BOL.featureSubtypes.gods": "Dioses",
|
||||
"BOL.featureSubtypes.fightOption": "Opción Combate",
|
||||
"BOL.featureSubtypes.effect": "Efecto",
|
||||
"BOL.featureSubtypes.effects": "Efectos",
|
||||
"BOL.featureSubtypes.boleffect": "Efecto",
|
||||
"BOL.featureSubtypes.horoscope": "Horóscopo",
|
||||
"BOL.featureSubtypes.xplog": "Diario PX",
|
||||
|
||||
"BOL.bougette.nomoney": "Nada",
|
||||
"BOL.bougette.tolive": "Vivir justo",
|
||||
"BOL.bougette.easylife": "Vida simple",
|
||||
"BOL.bougette.luxury" : "Vida lujosa",
|
||||
"BOL.bougette.rich": "¡Rico!",
|
||||
|
||||
"BOL.fightOptionTypes.armor": "Ataque Armadura",
|
||||
"BOL.fightOptionTypes.intrepid": "Ataque Total",
|
||||
"BOL.fightOptionTypes.twoweaponsdef": "Dos Armas (Defensa)",
|
||||
"BOL.fightOptionTypes.twoweaponsatt": "Dos Armas (Ataque)",
|
||||
"BOL.fightOptionTypes.fulldefense": "Defensa Total",
|
||||
"BOL.fightOptionTypes.defense": "Posición Defensiva",
|
||||
"BOL.fightOptionTypes.attack": "Posición Ofensiva",
|
||||
"BOL.fightOptionTypes.other": "Otro",
|
||||
|
||||
"BOL.itemCategory.object": "Objeto",
|
||||
"BOL.itemCategory.equipment": "Equipo",
|
||||
"BOL.itemCategory.consumable": "Consumible",
|
||||
"BOL.itemCategory.spell": "Conjuro",
|
||||
"BOL.itemCategory.vehicle": "Montura/Vehículo",
|
||||
"BOL.itemCategory.other": "Otro",
|
||||
"BOL.itemCategory.capacity" : "Capacidad",
|
||||
"BOL.itemCategory.alchemy": "Alquimia",
|
||||
"BOL.itemCategory.vehicleweapon": "Arma Vehicular",
|
||||
|
||||
"BOL.combatCategory.protections": "Protecciones",
|
||||
"BOL.combatCategory.shields": "Escudos",
|
||||
"BOL.combatCategory.melee": "Melé",
|
||||
"BOL.combatCategory.ranged": "Distancia",
|
||||
"BOL.combatCategory.fightOptions": "Opciones combate",
|
||||
"BOL.combatCategory.natural": "Armas Naturales",
|
||||
|
||||
"BOL.equipmentCategory.weapon": "Arma",
|
||||
"BOL.equipmentCategory.armor": "Armadura",
|
||||
"BOL.equipmentCategory.protection": "Protección",
|
||||
"BOL.equipmentCategory.shield": "Escudo",
|
||||
"BOL.equipmentCategory.helm": "Casco",
|
||||
"BOL.equipmentCategory.jewel": "Joya",
|
||||
"BOL.equipmentCategory.scroll": "Pergamino",
|
||||
"BOL.equipmentCategory.ammunition": "Munición",
|
||||
"BOL.equipmentCategory.container": "Contenedor",
|
||||
"BOL.equipmentCategory.currency": "Moneda",
|
||||
"BOL.equipmentCategory.other": "Otro",
|
||||
|
||||
"BOL.protectionCategory.armor": "Armadura",
|
||||
"BOL.protectionCategory.shield": "Escudo",
|
||||
"BOL.protectionCategory.helm": "Casco",
|
||||
"BOL.protectionCategory.other": "Otro",
|
||||
|
||||
"BOL.spellItem.charm": "Truco",
|
||||
"BOL.spellItem.circle1": "Primer Círculo",
|
||||
"BOL.spellItem.circle2": "Segundo Círculo",
|
||||
"BOL.spellItem.circle3": "Tercer Círculo",
|
||||
|
||||
"BOL.alchemyItem.common": "Común",
|
||||
"BOL.alchemyItem.scarce": "Escaso",
|
||||
"BOL.alchemyItem.legend": "Legendario",
|
||||
"BOL.alchemyItem.mythic": "Mítico",
|
||||
|
||||
"BOL.weaponCategory.melee": "Melé",
|
||||
"BOL.weaponCategory.ranged": "Distancia",
|
||||
"BOL.weaponCategory.other": "Otro",
|
||||
|
||||
"BOL.itemProperty.damageMultiplier": "Multiplicador Daño",
|
||||
"BOL.itemProperty.attackBonusDice": "Dado Ventaja Ataque",
|
||||
"BOL.itemProperty.equipable": "Equipable",
|
||||
"BOL.itemProperty.protection": "Protección",
|
||||
"BOL.itemProperty.blocking": "Bloqueo",
|
||||
"BOL.itemProperty.magical": "Mágico",
|
||||
"BOL.itemProperty.concealable": "Ocultable",
|
||||
"BOL.itemProperty.2H": "Arma 2M",
|
||||
"BOL.itemProperty.helm": "Casco",
|
||||
"BOL.itemProperty.improvised": "Improvisada",
|
||||
"BOL.itemProperty.shield": "Escudo",
|
||||
"BOL.itemProperty.melee": "Melé",
|
||||
"BOL.itemProperty.throwable": "Arrojadiza",
|
||||
"BOL.itemProperty.ignoreshield": "Ignora Escudo",
|
||||
"BOL.itemProperty.bashing": "Golpea",
|
||||
"BOL.itemProperty.stackable": "Apilable",
|
||||
"BOL.itemProperty.ranged": "Distancia",
|
||||
"BOL.itemProperty.weapon": "Arma",
|
||||
"BOL.itemProperty.reloadable": "Recargable",
|
||||
"BOL.itemProperty.worn": "Equipada",
|
||||
"BOL.itemProperty.spell" : "Conjuro",
|
||||
"BOL.itemProperty.armor" : "Armadura",
|
||||
"BOL.itemProperty.consumable" : "Consumible",
|
||||
"BOL.itemProperty.bow" : "Arco",
|
||||
"BOL.itemProperty.crossbow" : "Ballesta",
|
||||
"BOL.itemProperty.throwing" : "Arrojadiza",
|
||||
"BOL.itemProperty.activable" : "Activable",
|
||||
"BOL.itemProperty.powder" : "Polvo",
|
||||
"BOL.itemProperty.attackAttribute" : "Ataque (Atributo)",
|
||||
"BOL.itemProperty.attackAptitude" : "Ataque (Habilidad)",
|
||||
"BOL.itemProperty.attackModifiers" : "Ataque (Modificadores)",
|
||||
"BOL.itemProperty.attackReroll1" : "Ataque (Relanzar 1s)",
|
||||
"BOL.itemProperty.damage" : "Daño",
|
||||
"BOL.itemProperty.damageModifiers" : "Daño (Modificador)",
|
||||
"BOL.itemProperty.damageAttribute" : "Daño (Atributo)",
|
||||
"BOL.itemProperty.damageSpecial" : "Damage (Especial)",
|
||||
"BOL.itemProperty.damageReroll1" : "Relanzar 1s",
|
||||
"BOL.itemProperty.range" : "Alcance (en m)",
|
||||
"BOL.itemProperty.soakFormula": "Absorver (Fórmula)",
|
||||
"BOL.itemProperty.soakModifiers": "Absorver (Modificador)",
|
||||
"BOL.itemProperty.soakValue": "Absorver (Valor Defecto)",
|
||||
"BOL.itemProperty.armorQuality": "Calidad Armadura",
|
||||
"BOL.itemProperty.blockingMalus" : "Mod. Bloqueo",
|
||||
"BOL.itemProperty.blockingAttacksBlocked" : "Ataques bloqueados",
|
||||
"BOL.itemProperty.blocking1Attack" : "Bloquea 1 ataque",
|
||||
"BOL.itemProperty.blockingAllAttacks" : "Bloquea todos ataques",
|
||||
"BOL.itemProperty.slot" : "Hueco",
|
||||
"BOL.itemProperty.reload": "Recarga (Acción)",
|
||||
"BOL.itemProperty.weaponSize" : "Tamaño Arma",
|
||||
"BOL.itemProperty.difficulty": "Dificultad",
|
||||
"BOL.itemProperty.natural": "Arma natural",
|
||||
"BOL.itemProperty.onlymodifier": "Sólo modificador (ej criatura)",
|
||||
|
||||
"BOL.itemStat.quantity": "Cantidad",
|
||||
"BOL.itemStat.weight": "Peso",
|
||||
"BOL.itemStat.price": "Precio",
|
||||
"BOL.itemStat.range": "Alcance",
|
||||
"BOL.itemStat.damage": "Daño",
|
||||
"BOL.itemStat.reload": "Recargar (Acción)",
|
||||
"BOL.itemStat.soak": "Absorver",
|
||||
"BOL.itemStat.blocking": "Bloqueo",
|
||||
"BOL.itemStat.modifiers": "Modificadores",
|
||||
|
||||
"BOL.weaponSize.unarmed" : "Desarmado",
|
||||
"BOL.weaponSize.improvised" : "Improvisada",
|
||||
"BOL.weaponSize.light" : "Ligera",
|
||||
"BOL.weaponSize.medium" : "Mediana",
|
||||
"BOL.weaponSize.heavy" : "Pesada",
|
||||
|
||||
"BOL.itemModifiers.init": "Mod. (Iniciativa)",
|
||||
"BOL.itemModifiers.social": "Mod. (Social)",
|
||||
"BOL.itemModifiers.agility": "Mod. (Agilidad)",
|
||||
"BOL.itemModifiers.powercost": "Mod. (Coste adicional en PP)",
|
||||
|
||||
"BOL.itemBlocking.malus": "Modificador",
|
||||
"BOL.itemBlocking.nbAttacksPerRound": "Agilidad",
|
||||
|
||||
"BOL.soakFormula.none" : "-",
|
||||
"BOL.soakFormula.light" : "Ligero (Cancela d6-3 daño)",
|
||||
"BOL.soakFormula.medium" : "Mediano (Cancela d6-2 daño)",
|
||||
"BOL.soakFormula.heavy" : "Pesado (Cancela d6-1 daño)",
|
||||
|
||||
"BOL.armorQuality.none" : "-",
|
||||
"BOL.armorQuality.light" : "Ligera",
|
||||
"BOL.armorQuality.lightQ" : "Ligera Calidad",
|
||||
"BOL.armorQuality.lightSup" : "Ligera Superior",
|
||||
"BOL.armorQuality.lightLeg" : "Ligera Legendaria",
|
||||
"BOL.armorQuality.medium" : "Mediana",
|
||||
"BOL.armorQuality.mediumQ" : "Mediana Calidad",
|
||||
"BOL.armorQuality.mediumSup" : "Mediana Superior",
|
||||
"BOL.armorQuality.mediumLeg" : "Mediana Legendaria",
|
||||
"BOL.armorQuality.heavy" : "Pesada",
|
||||
"BOL.armorQuality.heavyQ" : "Pesada Calidad",
|
||||
"BOL.armorQuality.heavySup" : "Pesada Superior",
|
||||
"BOL.armorQuality.heavyLeg" : "Pesada Legendaria",
|
||||
|
||||
"BOL.equipmentSlots.none" : "-",
|
||||
"BOL.equipmentSlots.head" : "Cabeza",
|
||||
"BOL.equipmentSlots.neck" : "Cuello",
|
||||
"BOL.equipmentSlots.shoulders" : "Ombros",
|
||||
"BOL.equipmentSlots.body" : "Cuerpo",
|
||||
"BOL.equipmentSlots.rhand" : "Mano derecha",
|
||||
"BOL.equipmentSlots.lhand" : "Mano izquierda",
|
||||
"BOL.equipmentSlots.2hands" : "2 manos",
|
||||
"BOL.equipmentSlots.rarm" : "Brazo derecho",
|
||||
"BOL.equipmentSlots.larm" : "Brazo izquierdo",
|
||||
"BOL.equipmentSlots.chest" : "Pecho",
|
||||
"BOL.equipmentSlots.belt" : "Cintura",
|
||||
"BOL.equipmentSlots.legs" : "Piernas",
|
||||
"BOL.equipmentSlots.feet" : "Pies",
|
||||
"BOL.equipmentSlots.finder" : "Dedo",
|
||||
"BOL.equipmentSlots.ear" : "Oreja",
|
||||
|
||||
"BOL.vehicleCategory.mount" : "Montura terrestre",
|
||||
"BOL.vehicleCategory.flying" : "Montura voladora",
|
||||
"BOL.vehicleCategory.boat" : "Bote",
|
||||
"BOL.vehicleCategory.other" : "Otro",
|
||||
|
||||
|
||||
"BOL.range.PointBlank": "Quemarropa",
|
||||
"BOL.range.Short": "Corta",
|
||||
"BOL.range.Medium": "Media",
|
||||
"BOL.range.Long": "Larga",
|
||||
"BOL.range.VeryLong": "Distante",
|
||||
"BOL.range.Extreme": "Extrema",
|
||||
"BOL.range.Maximum": "Límite",
|
||||
|
||||
"BOL.notification.MacroMultipleTokensSelected": "¡Has seleccionado varios tokens!",
|
||||
"BOL.notification.MacroNoActorAvailable": "¡No se pudo marcar el actor como objetivo!",
|
||||
"BOL.notification.MacroNoTokenSelected": "¡Debes seleccionar un token!",
|
||||
|
||||
"BOL.size.tiny": "Minúsculo",
|
||||
"BOL.size.verysmall": "Muy pequeño",
|
||||
"BOL.size.small" : "Pequeño",
|
||||
"BOL.size.medium" : "Mediano",
|
||||
"BOL.size.large" : "Grande",
|
||||
"BOL.size.verylarge": "Muy Grande",
|
||||
"BOL.size.huge" : "Monstruoso",
|
||||
"BOL.size.massive" : "Monumental",
|
||||
"BOL.size.enormous": "Enorme",
|
||||
"BOL.size.gigantic": "Gigante",
|
||||
"BOL.size.immense": "Inmenso",
|
||||
"BOL.size.colossal": "Colosal",
|
||||
|
||||
"BOL.chat.fightactive": "¡Activa la opción de combate {foName} este asalto!",
|
||||
"BOL.chat.fightunactive": "¡Desactiva la opción de combate {foName} este asalto!",
|
||||
"BOL.chat.isdead": "¡{name} esta muerto!",
|
||||
"BOL.chat.epitaph": "¡Guardar el honor de su nombre y su memoria!",
|
||||
"BOL.chat.vitalityzero": "Vitalidad de {name} es {hp}: ¡va a caer inconsciente!",
|
||||
"BOL.chat.vitalityheroism": "Puedes gastar 1 Punto Héroe para levantarte en 1 asalto.",
|
||||
"BOL.chat.vitalityheroismhint": "En este caso, tu vitalidad se incrementa a su máximo dividido por 2.",
|
||||
"BOL.chat.vitalitydying": "Vitalidad de {name} es {hp}! Se esta muriendo...",
|
||||
"BOL.chat.vitalitydyingheroism": "Puedes gastar 1 Punto Héroe para Desafiar la Muerte.",
|
||||
"BOL.chat.alchemytitle": "Receta alquímica: {name}",
|
||||
"BOL.chat.alchemypoints": "Coste Puntos Creación: {pcCostCurrent}",
|
||||
"BOL.chat.alchemysuccess": "¡La receta alquímica es un éxito!<br>Crea el objeto/efecto relevante en el inventario.<br>El estadio se reinicia.",
|
||||
"BOL.chat.alchemyfailure": "¡La receta alquímica ha fallado!<br>El estadio se reinicia.",
|
||||
"BOL.chat.rolldamage": "Tirada de daño",
|
||||
"BOL.chat.rolldamage6": "Tirada de daño +6",
|
||||
"BOL.chat.rolldamage12": "Tirada de daño +12 (1 PH)",
|
||||
"BOL.chat.damageresult": "Daño {name}: {total}",
|
||||
"BOL.chat.damagetarget": "Objetivo: {target}",
|
||||
"BOL.chat.applydamagetotarget": "Aplicar daño al objetivo",
|
||||
"BOL.chat.fightoption": "Opciones de combate",
|
||||
"BOL.chat.reroll": "Relanzar (1 PH)",
|
||||
"BOL.chat.heroicreminder": "Adicionalmente a las acciones abajo puedes: <ul><li>Carnicería: 1 ataque adicional al mismo oponente</li><li>Golpe Preciso: 1 Dado desventaja para oponente en localización</li><li>Desarme</li><li>Asesino de Chusma</li><li>Derribado: empujas oponente al suelo (máx +1 tamaño)</li></ul>Si gastas 1 Punto Heroe adicional, todos estos efectos pueden doblarse.",
|
||||
"BOL.chat.toheroic": "Convertir en éxito Asombroso (1 PH)",
|
||||
"BOL.chat.tolegend": "Convertir en éxito Legendario (1 PH)",
|
||||
"BOL.chat.hurttitle": "¡{name} va a recibir {damageTotal} daño!",
|
||||
"BOL.chat.armordefault": "Este ataque atraviesa armadura: la armadura no se utiliza para reducir daño.",
|
||||
"BOL.chat.witharmor": "Impacto con armadura",
|
||||
"BOL.chat.withoutarmor": "Impacto sin armadura",
|
||||
"BOL.chat.shakeoff": "Sacudirse las Heridas (1 PH)",
|
||||
"BOL.chat.splinteredshield": "Sacrificar Escudo/Arma {name} (1 PH)",
|
||||
"BOL.chat.nodamage": "Sin daño",
|
||||
"BOL.chat.damagesummary": "{name} recibe daño",
|
||||
"BOL.chat.protectvalue": "Protección armadura",
|
||||
"BOL.chat.noprotectvalue": "¡Sin armadura!",
|
||||
"BOL.chat.heroreducedamage": "Un Punto de Héroe se ha gastado, para reducir el daño en {total}.",
|
||||
"BOL.chat.herosplintered": "No recibes daño gracias a sacrificar el escudo/arma {weaponHero.name}. ¡El escudo/arma se ha destruido! y un PH se ha gastado.",
|
||||
"BOL.chat.finaldamage": "Daño Final: ¡{finalDamage} de daño!",
|
||||
"BOL.chat.spell": "Conjuro",
|
||||
"BOL.chat.spellcost": "Coste Puntos Poder",
|
||||
"BOL.chat.spellremaining": "Puntos Poder restantes",
|
||||
"BOL.chat.nodamagesummary": "Sin daño ....",
|
||||
"BOL.chat.damageresume": "{name} recibe heridas ...",
|
||||
"BOL.chat.fumblemessage": "Si aceptas un fallo calamitoso (DJ escoje consecuencia), puedes ganar 1 Punto Héroe adicional.",
|
||||
"BOL.chat.rangeinfo": "Disparo de {attackerName} a {defenderName}",
|
||||
"BOL.chat.rangeweaponinfo": "Arma: {weaponName} - Alcance base {weaponRange}",
|
||||
"BOL.chat.rangeout": "Mod: Fuera de alcance",
|
||||
"BOL.chat.range0": "Mod: Quemarropa (+1)",
|
||||
"BOL.chat.range1": "Mod: Alcance Corto (0)",
|
||||
"BOL.chat.range2": "Mod: Alcance Medio (-1)",
|
||||
"BOL.chat.range3": "Mod: Alcance Largo (-2)",
|
||||
"BOL.chat.range4": "Mod: Alcance Distante (-4)",
|
||||
"BOL.chat.range5": "Mod: Alcance Extremo (-6)",
|
||||
"BOL.chat.range6": "Mod: Alcance Límite (-8)",
|
||||
"BOL.chat.rangeprefix": "Distancia calculada: ",
|
||||
"BOL.chat.rangevisible": "Linea de visión limpia entre tokens.",
|
||||
"BOL.chat.rangenotvisible": "Linea de visión bloqueada entre tokens.",
|
||||
"BOL.chat.rangetitle": "Información DJ",
|
||||
"BOL.chat.weaponreroll1": "Recordatorio, este arma vuelve a tirar los 1s en daño.",
|
||||
"BOL.chat.rollbougette": "Tirada moneda",
|
||||
"BOL.chat.bougettesuccess": "¡Tus fondos monetarios no varían!",
|
||||
"BOL.chat.bougettefailure": "Has gastado demasiado dinero, tu balance se decrementa un nivel...",
|
||||
"BOL.chat.initiative": "Rango iniciativa (10 a 1)",
|
||||
"BOL.chat.horoscope": "Horóscopo",
|
||||
"BOL.chat.horoscopepoints": "Coste: {points} Puntos Astrología",
|
||||
"BOL.chat.horoscopeminorsuccess": "Éxito horóscopo menor: cambia el nombre del horóscopo en la hoja. Te beneficias de 1 Dado Ventaja en la situación.",
|
||||
"BOL.chat.horoscopeminorfailure": "Fallo horóscopo menor: cambia el nombre del horóscopo en la hoja. Sufres 1 Dado Desventaja en la situación.",
|
||||
"BOL.chat.horoscopemajorsuccess": "Éxito horóscopo mayor: {horoscopeName} consigue 1 Punto Héroe en esta aventura. El punto ha sido añadido automáticamente.",
|
||||
"BOL.chat.horoscopemajorfailure": "Fallo horóscopo mayor: {horoscopeName} pierde 1 Punto Héroe en esta aventura. El punto ha sido reducido automáticamente.",
|
||||
"BOL.chat.horoscopemajorgroupsuccess": "Éxito en tu grupo de horóscopo mayor. Tu y tus compañeros ganáis {careerBonus} Dado Ventaja durante esta aventura.",
|
||||
"BOL.chat.horoscopemajorgroupfailure": "Fallo en tu grupo de horóscopo mayor. Tu y tus compañeros sufrís {careerBonus} Dado Desventaja durante esta aventura.",
|
||||
"BOL.chat.usedhoroscope": "Se ha utilizado Horóscopo",
|
||||
"BOL.chat.horoscopedeleted": "Los horóscopos utilizados son borrados automáticamente.",
|
||||
"BOL.chat.criticaloptions": "¡Éxito Asombroso! Selecciona 1 opción:",
|
||||
"BOL.chat.criticalcarnage": "Carnicería: ganas 1 ataque adicional. Este segundo ataque no se puede beneficiar de Puntos Héroe/Villano.",
|
||||
"BOL.chat.criticalplus6": "Golpe Devastador: añade +6 al daño causado (botón abajo).",
|
||||
"BOL.chat.criticalprecise": "Golpe Preciso: impactas y dañas a tu oponente. Describe lo que haces (DJ de acuerdo), tu oponente sufre 1 Dado Desventaja en acciones relevantes.",
|
||||
"BOL.chat.criticalunarm": "Desarme: si su oponente lleva algún arma, puede decidir desarmarlo en lugar de hacerle daño.",
|
||||
"BOL.chat.criticalrabble": "Asesino de Chusma: si luchas contra Chusma, el daño resultante se convierte en el número de enemigos que derrotas.",
|
||||
"BOL.chat.criticalpush": "Derribado: si el tamaño lo permite, empujas oponente al suelo. Sufre un 1 Dado Desventaja en todas sus acciones el siguiente asalto.",
|
||||
"BOL.chat.criticalup": "Transforma en Legendario: si gastas 1 Punto Héroe/Villano transformas el éxito Asombroso en Legendario. Selecciona 2 opciones de la lista.",
|
||||
"BOL.chat.criticalinfo": "¡Esto es un éxito Asombroso o Legendario! Escoge tus opciones y efectos",
|
||||
"BOL.chat.criticalbuttonjournal": "Éxito Asombroso/Legendario",
|
||||
"BOL.chat.armorRoll": "Tirada de Armadura",
|
||||
|
||||
"BOL.dialog.soeasy": "Demasiado fácil (+4)",
|
||||
"BOL.dialog.veryeasy": "Muy fácil (+2)",
|
||||
"BOL.dialog.easy": "Fácil (+1)",
|
||||
"BOL.dialog.moderate": "Moderado (0)",
|
||||
"BOL.dialog.hard": "Difícil (-1)",
|
||||
"BOL.dialog.tough": "Duro (-2)",
|
||||
"BOL.dialog.demanding": "Exigente (-4)",
|
||||
"BOL.dialog.formidable": "Formidable (-6)",
|
||||
"BOL.dialog.heroic": "Heroica (-8)",
|
||||
"BOL.dialog.mythic": "Mítica (-10)",
|
||||
"BOL.dialog.divine": "Divina (-12)",
|
||||
|
||||
"BOL.dialog.pointblank": "Quemarropa (+1)",
|
||||
"BOL.dialog.close": "Corta (0)",
|
||||
"BOL.dialog.medium": "Media (-1))",
|
||||
"BOL.dialog.long": "Larga (-2)",
|
||||
"BOL.dialog.distant": "Distante (-4)",
|
||||
"BOL.dialog.extreme": "Extrema (-6)",
|
||||
"BOL.dialog.utmost": "Límite (-8)",
|
||||
|
||||
"BOL.ui.name": "Nombre",
|
||||
"BOL.ui.xp": "Experiencia",
|
||||
"BOL.ui.xpspent": "Consumida",
|
||||
"BOL.ui.xptotal": "Total",
|
||||
"BOL.ui.biosize": "Tamaño",
|
||||
"BOL.ui.bioweight": "Peso",
|
||||
"BOL.ui.bioage": "Edad",
|
||||
"BOL.ui.biohair": "Pelo",
|
||||
"BOL.ui.bioeyes": "Ojos",
|
||||
"BOL.ui.biosigns": "Marcas",
|
||||
"BOL.ui.biodescription": "Descripción",
|
||||
"BOL.ui.bionotes": "Notas",
|
||||
|
||||
"BOL.chat.welcome1": "Bienvenidos a Bárbaros de Lemuria (Ludospherik)",
|
||||
"BOL.chat.welcome2": "Para jugar es necesario usar el manual, que lo podéis conseguir aquí: https://www.ludospherik-editions.com/en_gb/",
|
||||
"BOL.chat.welcome3": "Los mapas incluidos tienen autorización de Guillaume Tavernier y Ludospherik. ¡Nuestro agradecimiento!",
|
||||
"BOL.chat.welcome4": "Todo el soporte para el sistema es a través del servidor Discord: https://discord.gg/pPSDNJk",
|
||||
"BOL.chat.welcome5": "¡Buena partida en Lemuria!",
|
||||
"BOL.chat.welcome6": "",
|
||||
|
||||
"BOL.settings.rollArmor": "Tiradas de armadura",
|
||||
"BOL.settings.rollArmorTooltip": "Tiradas de armadura, si no esta activo usará el valor fijo",
|
||||
"BOL.settings.useBougette": "Utilizar Bougette (regla casera francesa)",
|
||||
"BOL.settings.useBougetteTooltip": "Utilizar valor Bougette (Monedero), descrito en Annales Lemurienne de LeRatierBretonnien (https://www.lahiette.com/leratierbretonnien/)",
|
||||
"BOL.settings.removeDead": "Automáticamente eliminar PNJs muertos al final del asalto",
|
||||
"BOL.settings.removeDeadTooltip": "Automáticamente eliminar PNJs, cuando la Vitalidad es menor de 0 al final de cada asalto",
|
||||
"BOL.settings.diceFormula": "Fórmula de Dados",
|
||||
"BOL.settings.diceFormulaTooltip": "Fórmula general de dados (2d6 por defecto)",
|
||||
"BOL.settings.diceSuccessValue" : "Valor éxito",
|
||||
"BOL.settings.diceSuccessValueTooltip": "Valor del umbral para el éxito (9 por defecto en 2d6)",
|
||||
"BOL.settings.diceCriticalValue" : "Valor éxito crítico",
|
||||
"BOL.settings.diceCriticalValueTooltip": "Valor del umbral mínimo para el éxito crítico (12 por defecto en 2d6)",
|
||||
"BOL.settings.diceCriticalFailure" : "Valor fallo crítico",
|
||||
"BOL.settings.diceCriticalFailureTooltip": "Valor del umbral máximo para el fallo crítico (2 por defecto en 2d6)",
|
||||
"BOL.settings.defaultLogoActorSheetPath" : "Logo para la Hoja",
|
||||
"BOL.settings.defaultLogoPathActorSheetTooltip": "Hubicación del logo para la hoja del Actor (346x200, por defecto: /systems/bol/ui/logo.webp)",
|
||||
"BOL.settings.defaultLogoTopLeftPath" : "Logo esquina superior izquierda",
|
||||
"BOL.settings.defaultLogoTopLeftPathTooltip": "Hubicación logo ventana principal superior izquierda (718x416, por defecto: /systems/bol/ui/logo2.webp)"
|
||||
}
|
47
lang/fr.json
47
lang/fr.json
@ -2,8 +2,10 @@
|
||||
"TYPES": {
|
||||
"Actor": {
|
||||
"character": "Personnage",
|
||||
"encounter": "PNJ",
|
||||
"npc": "PNJ",
|
||||
"vehicle": "Véhicule"
|
||||
"vehicle": "Véhicule",
|
||||
"horde": "Horde"
|
||||
},
|
||||
"Item": {
|
||||
"item": "Objet",
|
||||
@ -139,6 +141,12 @@
|
||||
"BOL.ui.registerInit": "Enregistrer comme Init. de combat",
|
||||
"BOL.ui.initMalus": "Malus d'initiative",
|
||||
"BOL.ui.magicnewrules": "Règles supplémentaires (cf. supplément fan-made Sorcellerie!)",
|
||||
"BOL.ui.other":"Autre",
|
||||
"BOL.ui.career":"Carrière",
|
||||
"BOL.ui.boon":"Avantage",
|
||||
"BOL.ui.flaw":"Désanvatage",
|
||||
"BOL.ui.cost":"Cout XP",
|
||||
"BOL.ui.date":"Date",
|
||||
|
||||
"BOL.ui.isSorcerer": "Carrière de Sorcier ?",
|
||||
"BOL.ui.isAlchemist": "Carrière d'Alchimiste ?",
|
||||
@ -196,12 +204,15 @@
|
||||
"BOL.ui.armorAgiMalus": "Malus d'Armure+Bouclier (Agi)",
|
||||
"BOL.ui.armorInitMalus": "Malus d'Armure (Init)",
|
||||
"BOL.ui.attackValue": "Valeur d'attaque",
|
||||
"BOL.ui.attackModifier": "Attaque",
|
||||
"BOL.ui.vehicleWeapons": "Armes de véhicules",
|
||||
"BOL.ui.hullDamage": "D.coque",
|
||||
"BOL.ui.crewDamage": "D.équipage",
|
||||
"BOL.ui.fireDamage": "Feu ?",
|
||||
"BOL.ui.weaponbonus": "Cette arme bénéficie déja d'un Dé de Bonus (Arme Favorite prise en compte, par exemple)",
|
||||
"BOL.ui.creature": "Creature",
|
||||
"BOL.ui.creature": "Créature",
|
||||
"BOL.ui.undead": "Mort vivant",
|
||||
"BOL.ui.daemon": "Démon",
|
||||
"BOL.ui.rabble": "Piétaille",
|
||||
"BOL.ui.tough": "Coriace",
|
||||
"BOL.ui.villain": "Rival",
|
||||
@ -225,7 +236,17 @@
|
||||
"BOL.ui.warninitiative": "Votre initiative n'est pas disponible. Effectuez un jet d'Initiative pour ce combat.",
|
||||
"BOL.ui.isspecial": "Spéciale ?",
|
||||
"BOL.ui.createEquipment": "Créer un Equipement",
|
||||
|
||||
"BOL.ui.newEquipment": "Nouvel équipement",
|
||||
"BOL.ui.newNaturalWeapon": "Arme naturelle",
|
||||
"BOL.ui.newNaturalProtection": "Protection naturelle",
|
||||
"BOL.ui.createNaturalWeapon": "Créer une arme naturelle",
|
||||
"BOL.ui.createNaturalProtection": "Créer une protection naturelle",
|
||||
"BOL.ui.hordeSize": "Taille de la horde",
|
||||
"BOL.ui.hordeAttack": "Attaque de Horde",
|
||||
"BOL.ui.hordeName": "Nom de la Horde",
|
||||
"BOL.ui.hordeHP": "Vitalité (1 membre)",
|
||||
"BOL.ui.hordehp": "Vitalité (total)",
|
||||
|
||||
"BOL.featureCategory.origins": "Origines",
|
||||
"BOL.featureCategory.races": "Races",
|
||||
"BOL.featureCategory.careers": "Carrières",
|
||||
@ -251,6 +272,7 @@
|
||||
"BOL.featureSubtypes.effects": "Effets",
|
||||
"BOL.featureSubtypes.boleffect": "Effet",
|
||||
"BOL.featureSubtypes.horoscope": "Horoscope",
|
||||
"BOL.featureSubtypes.xplog": "Log d'XP",
|
||||
|
||||
"BOL.fightOptionTypes.armor": "Attaque au défaut d'armure",
|
||||
"BOL.fightOptionTypes.intrepid": "Attaque intrépide",
|
||||
@ -479,12 +501,14 @@
|
||||
"BOL.chat.rolldamage": "Lancer les dommages",
|
||||
"BOL.chat.rolldamage6": "Lancer les dommages +6",
|
||||
"BOL.chat.rolldamage12": "Dommages +12 (1 Pt. d'Heroisme)",
|
||||
"BOL.chat.rolldamage12Legend": "Dommages +12",
|
||||
"BOL.chat.damageresult": "Dommages de {name} : {total}",
|
||||
"BOL.chat.damagetarget": "Cible : {target}",
|
||||
"BOL.chat.applydamagetotarget": "Appliquer les dommages à la cible",
|
||||
"BOL.chat.fightoption": "Option de combat",
|
||||
"BOL.chat.reroll": "Relancer (1 P. Heroisme)",
|
||||
"BOL.chat.heroicreminder": "En plus des actions indiquées sur les boutons ci-dessous, vous pouvez : <ul><li>Carnage : Attaquer une seconde fois le même adversaire</li><li>Coup précis : Un dé de malus à votre adversaire sur une localisation choisie</li><li>Désarmement</li><li>Massacrer la piétaille</li><li>Renversement : Renversez votre adversaire (1 taille de plus max)</li></ul>Si vous dépensez un Point d'Héroisme en plus, tout ces effets peuvent être doublés",
|
||||
"BOL.chat.legendaryreminder": "En plus des actions indiquées sur les boutons ci-dessous, vous pouvez effectuer 2 actions parmis: <ul><li>Carnage : Attaquer une seconde fois le même adversaire</li><li>Coup précis : Un dé de malus à votre adversaire sur une localisation choisie</li><li>Désarmement</li><li>Massacrer la piétaille</li><li>Renversement : Renversez votre adversaire (1 taille de plus max)</li></ul>",
|
||||
"BOL.chat.toheroic": "Transformer en succés Héroïque (1 P. Héroisme/Vilainie)",
|
||||
"BOL.chat.tolegend": "Transformer en succes Légendaire (1 P. Heroisme/Vilainie)",
|
||||
"BOL.chat.hurttitle": "{name} va encaisser {damageTotal} dégats !",
|
||||
@ -542,9 +566,10 @@
|
||||
"BOL.chat.criticalrabble": "Massacrer la piétaille : Si vous combattez de la Piétaille, les résultats des dommages indiquent le nombre d'adversaires mis hors de combat.",
|
||||
"BOL.chat.criticalpush": "Renversement : Si la taille le permet, vous poussez votre adversaire au sol, il souffrira d'1 Dé de Malus pour toutes ses actions au round suivant.",
|
||||
"BOL.chat.criticalup": "Transformer en Légendaire : En dépensant 1 point d'Héroisme/Vilainie, vous pouvez transformer ce Succès Héroïque en Légendaire, qui vous permet de prendre 2 options dans la liste ci-dessus (cf. bouton pour un +12 aux dommages par exemple).",
|
||||
"BOL.chat.criticalinfo": "C'est un succès Héroïque ou Légendaire ! Choisissez vos options et effets !",
|
||||
"BOL.chat.criticalinfo": "C'est un succès Héroïque ! Choisissez vos options et effets !",
|
||||
"BOL.chat.criticallegendaryinfo": "C'est un succès Légendaire ! Choisissez vos options et effets !",
|
||||
"BOL.chat.criticalbuttonjournal": "Succès Héroïque/Légendaire",
|
||||
|
||||
|
||||
"BOL.chat.losshp": "{name} a perdu {lossHP} points de Vitalité. Si il se repose quelques minutes, il peut récupérer {recupHP} points de Vitalité.",
|
||||
"BOL.chat.applyrecup": "Récupérer pendant quelques minutes (+{recupHP} Vitalité)",
|
||||
"BOL.chat.inforecup": "{name} vient de récupérer {recupHP} points de Vitalité après quelques minutes de repos.",
|
||||
@ -581,6 +606,8 @@
|
||||
"BOL.ui.biosigns": "Signes distinctifs",
|
||||
"BOL.ui.biodescription": "Description",
|
||||
"BOL.ui.bionotes": "Notes",
|
||||
"BOL.ui.xplog":"Journal d'XP",
|
||||
"BOL.ui.value":"Valeur",
|
||||
|
||||
"BOL.chat.welcome1": "Bienvenue dans Barbarians of Lemuria (Ludospherik version)",
|
||||
"BOL.chat.welcome2": "Les livres nécessaires pour jouer sont disponibles sur le site de <a href='http://www.ludospherik.fr/content/14-barbarians-of-lemuria'>l'éditeur Ludospherik.</a>",
|
||||
@ -589,6 +616,11 @@
|
||||
"BOL.chat.welcome5": "Consulter l'aide en ligne pour plus d'informations : @UUID[Compendium.bol.aides-de-jeu.97rugQOtiwt8zPfQ]{Aide du Jeu}.",
|
||||
"BOL.chat.welcome6": "Bon jeu en Lemurie !",
|
||||
"BOL.chat.nodamage": "Ne pas appliquer les dommages",
|
||||
"BOL.chat.pcwarning": "Attention ! Aucun personnage n'est relié au joueur !",
|
||||
"BOL.chat.pcwarningmsg": "<b>ATTENTION</b> Le joueur n'est relié à aucun personnage !",
|
||||
"BOL.chat.pcnotlinked": "Le token du personnage joueur n'est pas relié à l'acteur",
|
||||
"BOL.chat.pcnotlinkedmsg": "<b>ATTENTION</b> Le token du personnage joueur n'est pas relié à l'acteur !",
|
||||
"BOL.chat.armorRoll": "Jet d'armure",
|
||||
|
||||
"BOL.settings.rollArmor": "Effectuer des jets pour les armures",
|
||||
"BOL.settings.rollArmorTooltip": "Effectue un jet de dés pour les armures (valeur fixe si désactivé)",
|
||||
@ -607,5 +639,8 @@
|
||||
"BOL.settings.defaultLogoActorSheetPath" : "Chemin du logo des fiches de perso",
|
||||
"BOL.settings.defaultLogoPathActorSheetTooltip": "Vous pouvez changer le logo BoL des fiches de perso, pour jouer dans un autre univers (idéalement 346 x 200, défaut : /systems/bol/ui/logo.webp)",
|
||||
"BOL.settings.defaultLogoTopLeftPath" : "Chemin du logo haut gauche",
|
||||
"BOL.settings.defaultLogoTopLeftPathTooltip": "Vous pouvez changer le logo BoL en haut à gauche de chaque écran (idéalement 718 x 416, défaut : /systems/bol/ui/logo2.webp)"
|
||||
"BOL.settings.defaultLogoTopLeftPathTooltip": "Vous pouvez changer le logo BoL en haut à gauche de chaque écran (idéalement 718 x 416, défaut : /systems/bol/ui/logo2.webp)",
|
||||
|
||||
"EFFECT.StatusProne": "A terre",
|
||||
"EFFECT.StatusDead": "Mort"
|
||||
}
|
@ -9,7 +9,7 @@ export class BoLActorSheet extends ActorSheet {
|
||||
|
||||
/** @override */
|
||||
static get defaultOptions() {
|
||||
return mergeObject(super.defaultOptions, {
|
||||
return foundry.utils.mergeObject(super.defaultOptions, {
|
||||
classes: ["bol", "sheet", "actor"],
|
||||
template: "systems/bol/templates/actor/actor-sheet.hbs",
|
||||
width: 860,
|
||||
@ -27,7 +27,7 @@ export class BoLActorSheet extends ActorSheet {
|
||||
|
||||
function onLoad() {
|
||||
let logoSheet = BoLUtility.getLogoActorSheet()
|
||||
$(".bol-actor-form").css("backgroundImage",`url(${logoSheet})`)
|
||||
$(".bol-actor-form").css("backgroundImage", `url(${logoSheet})`)
|
||||
}
|
||||
// Setup everything onload
|
||||
$(function () { onLoad(); });
|
||||
@ -47,10 +47,19 @@ export class BoLActorSheet extends ActorSheet {
|
||||
// Equip/Unequip item
|
||||
html.find('.item-equip').click(this._onToggleEquip.bind(this));
|
||||
|
||||
html.find('.create_item').click(ev => {
|
||||
this.actor.createEmbeddedDocuments('Item', [{ name: "Nouvel Equipement", type: "item" }], { renderSheet: true });
|
||||
html.find('.create-item').click(ev => {
|
||||
this.actor.createEmbeddedDocuments('Item', [{ name: game.i18n.localize("BOL.ui.newEquipment"), type: "item" }], { renderSheet: true });
|
||||
});
|
||||
|
||||
html.find('.create-natural-weapon').click(ev => {
|
||||
let system = foundry.utils.duplicate(game.bol.config.defaultNaturalWeapon)
|
||||
this.actor.createEmbeddedDocuments('Item', [{ name: game.i18n.localize("BOL.ui.newNaturalWeapon"), type: "item", system }], { renderSheet: true });
|
||||
});
|
||||
html.find('.create-natural-protection').click(ev => {
|
||||
let system = foundry.utils.duplicate(game.bol.config.defaultNaturalProtection)
|
||||
this.actor.createEmbeddedDocuments('Item', [{ name: game.i18n.localize("BOL.ui.newNaturalProtection"), type: "item", system }], { renderSheet: true });
|
||||
});
|
||||
|
||||
html.find(".toggle-fight-option").click((ev) => {
|
||||
const li = $(ev.currentTarget).parents(".item")
|
||||
this.actor.toggleFightOption(li.data("itemId"))
|
||||
@ -122,8 +131,8 @@ export class BoLActorSheet extends ActorSheet {
|
||||
/** @override */
|
||||
async getData(options) {
|
||||
const data = super.getData(options)
|
||||
const actorData = duplicate(data)
|
||||
let formData = duplicate(data)
|
||||
const actorData = foundry.utils.duplicate(data)
|
||||
let formData = foundry.utils.duplicate(data)
|
||||
|
||||
formData.config = game.bol.config
|
||||
formData.data = actorData
|
||||
@ -147,6 +156,7 @@ export class BoLActorSheet extends ActorSheet {
|
||||
formData.fightoptions = this.actor.fightoptions
|
||||
formData.ammos = this.actor.ammos
|
||||
formData.misc = this.actor.misc
|
||||
formData.xplog = this.actor.xplog
|
||||
formData.combat = this.actor.buildCombat()
|
||||
formData.initiativeRank = this.actor.getInitiativeRank()
|
||||
//formData.combatCreature = this.actor.buildCombatCreature()
|
||||
@ -155,12 +165,13 @@ export class BoLActorSheet extends ActorSheet {
|
||||
formData.options = this.options
|
||||
formData.owner = this.document.isOwner
|
||||
formData.editScore = this.options.editScore
|
||||
formData.useBougette = (this.actor.type == "character" && BoLUtility.getUseBougette()) || false
|
||||
formData.useBougette = (this.actor.type == "character" && BoLUtility.getUseBougette()) || false
|
||||
formData.bougette = this.actor.getBougette()
|
||||
formData.charType = this.actor.getCharType()
|
||||
formData.villainy = this.actor.getVillainy()
|
||||
formData.biography = await TextEditor.enrichHTML(this.object.system.details?.biography || "", {async: true})
|
||||
formData.notes = await TextEditor.enrichHTML(this.object.system.details.notes || "", {async: true})
|
||||
formData.villainy = this.actor.getVillainy()
|
||||
formData.isUndead = this.actor.isUndead()
|
||||
formData.biography = await TextEditor.enrichHTML(this.object.system.details?.biography || "", { async: true })
|
||||
formData.notes = await TextEditor.enrichHTML(this.object.system.details.notes || "", { async: true })
|
||||
formData.isSorcerer = this.actor.isSorcerer()
|
||||
formData.isAlchemist = this.actor.isAlchemist()
|
||||
formData.isAstrologer = this.actor.isAstrologer()
|
||||
@ -186,7 +197,7 @@ export class BoLActorSheet extends ActorSheet {
|
||||
// Get the type of item to create.
|
||||
const type = header.dataset.type;
|
||||
// Grab any data associated with this control.
|
||||
const data = duplicate(header.dataset);
|
||||
const data = foundry.utils.duplicate(header.dataset);
|
||||
// Initialize a default name.
|
||||
const name = `New ${type.capitalize()}`;
|
||||
// Prepare the item object.
|
||||
@ -248,22 +259,22 @@ export class BoLActorSheet extends ActorSheet {
|
||||
case "attributexp":
|
||||
this.actor.incAttributeXP(dataset.key)
|
||||
break;
|
||||
case "bougette":
|
||||
this.actor.rollBougette()
|
||||
break;
|
||||
case "careerxp":
|
||||
this.actor.incCareerXP( li.data("item-id"))
|
||||
this.actor.incCareerXP(li.data("item-id"))
|
||||
break;
|
||||
case "horoscope-minor":
|
||||
BoLRoll.horoscopeCheck(this.actor, event, "minor")
|
||||
break
|
||||
case "horoscope-major":
|
||||
BoLRoll.horoscopeCheck(this.actor, event, "major")
|
||||
break
|
||||
break
|
||||
case "horoscope-major-group":
|
||||
BoLRoll.horoscopeCheck(this.actor, event, "majorgroup")
|
||||
break
|
||||
|
||||
break
|
||||
case "bougette":
|
||||
this.actor.rollBougette()
|
||||
break;
|
||||
|
||||
default: break;
|
||||
}
|
||||
}
|
||||
|
@ -7,6 +7,35 @@ import { BoLUtility } from "../system/bol-utility.js";
|
||||
*/
|
||||
export class BoLActor extends Actor {
|
||||
|
||||
static async create(data, options) {
|
||||
|
||||
// Case of compendium global import
|
||||
if (data instanceof Array) {
|
||||
return super.create(data, options);
|
||||
}
|
||||
// If the created actor has items (only applicable to duplicated actors) bypass the new actor creation logic
|
||||
if (data.items) {
|
||||
let actor = super.create(data, options);
|
||||
return actor;
|
||||
}
|
||||
|
||||
if (data.type == 'horde') {
|
||||
let weapon = {
|
||||
name: game.i18n.localize("BOL.ui.hordeAttack"), type: "item",
|
||||
img: "ui/icons/attaque_melee.webp",
|
||||
system: foundry.utils.duplicate(game.bol.config.defaultNaturalWeapon)
|
||||
}
|
||||
weapon.system.properties.attackModifiers = 1
|
||||
weapon.system.properties.damage = "1d6M"
|
||||
data.items = [weapon]
|
||||
|
||||
data.img = "systems/bol/ui/icons/icon-horde-token.webp"
|
||||
data.prototypeToken = { texture: "systems/bol/ui/icons/icon-horde-token.webp" }
|
||||
}
|
||||
|
||||
return super.create(data, options);
|
||||
}
|
||||
|
||||
/** @override */
|
||||
prepareData() {
|
||||
|
||||
@ -18,19 +47,44 @@ export class BoLActor extends Actor {
|
||||
this.chartype = 'tough'
|
||||
this.villainy = true
|
||||
}
|
||||
if (this.type == "horde") {
|
||||
let weapon = this.items.find(i => i.type === "item" && i.system.subtype === "weapon")
|
||||
// Check if the horde attack is inline with the hordesize
|
||||
if (weapon?.system?.properties?.attackModifiers != this.system.hordesize) {
|
||||
this.updateEmbeddedDocuments('Item', [{ _id: weapon.id, 'system.properties.attackModifiers': this.system.hordesize }])
|
||||
}
|
||||
}
|
||||
|
||||
super.prepareData()
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
async _onCreateOperation(documents, operation, user) {
|
||||
await super._onCreateOperation(documents, operation, user);
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
getTokenSizeFromHordeSize(hordeSize) {
|
||||
hordeSize = hordeSize || this.system.hordesize
|
||||
// If size > 50 then max is 50
|
||||
let size = Math.min(hordeSize, 20)
|
||||
// Compute the size of the token from 1 to 5
|
||||
let tokenSize = Math.max((size / 4), 1) // Never below 1
|
||||
return tokenSize
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
async _preCreate(data, options, user) {
|
||||
await super._preCreate(data, options, user);
|
||||
|
||||
// Configure prototype token settings
|
||||
const prototypeToken = {};
|
||||
if (this.type === "character") Object.assign(prototypeToken, {
|
||||
sight: { enabled: true }, actorLink: true, disposition: CONST.TOKEN_DISPOSITIONS.FRIENDLY
|
||||
});
|
||||
this.updateSource({ prototypeToken });
|
||||
if (this.type === "character") {
|
||||
Object.assign(prototypeToken, {
|
||||
sight: { enabled: true }, actorLink: true, disposition: CONST.TOKEN_DISPOSITIONS.FRIENDLY
|
||||
});
|
||||
this.updateSource({ prototypeToken });
|
||||
}
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
@ -38,10 +92,7 @@ export class BoLActor extends Actor {
|
||||
if (this.type === 'character') {
|
||||
return true
|
||||
}
|
||||
if (this.type === 'encounter' && this.chartype == "adversary") {
|
||||
return true
|
||||
}
|
||||
return false
|
||||
return (this.type === 'encounter' && this.chartype == "adversary")
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
@ -54,10 +105,10 @@ export class BoLActor extends Actor {
|
||||
|
||||
/* -------------------------------------------- */
|
||||
getVillainy() {
|
||||
if (this.type === 'encounter' && this.chartype == "adversary") {
|
||||
return true
|
||||
}
|
||||
return false
|
||||
return (this.type === 'encounter' && this.chartype == "adversary")
|
||||
}
|
||||
isUndead() {
|
||||
return (this.type == "encounter" && this.system.isundead)
|
||||
}
|
||||
/* -------------------------------------------- */
|
||||
getInitiativeMalus() {
|
||||
@ -69,7 +120,7 @@ export class BoLActor extends Actor {
|
||||
/* -------------------------------------------- */
|
||||
getBougette() {
|
||||
if (this.type == "character") {
|
||||
let b = duplicate(this.system.bougette)
|
||||
let b = foundry.utils.duplicate(this.system.bougette)
|
||||
b.label = game.i18n.localize(game.bol.config.bougetteState[String(this.system.bougette.value)])
|
||||
b.diceImg = "icons/dice/" + game.bol.config.bougetteDice[String(this.system.bougette.value)] + "black.svg"
|
||||
return b
|
||||
@ -80,7 +131,7 @@ export class BoLActor extends Actor {
|
||||
/* -------------------------------------------- */
|
||||
async rollBougette() {
|
||||
if (this.type == "character") {
|
||||
let attribute = duplicate(this.system.attributes.vigor)
|
||||
let attribute = foundry.utils.duplicate(this.system.attributes.vigor)
|
||||
let rollData = BoLRoll.getCommonRollData(this, "bougette", attribute, undefined)
|
||||
rollData.formula = game.bol.config.bougetteDice[String(this.system.bougette.value)]
|
||||
let r = new BoLDefaultRoll(rollData)
|
||||
@ -91,7 +142,7 @@ export class BoLActor extends Actor {
|
||||
/* -------------------------------------------- */
|
||||
decBougette() {
|
||||
if (this.type == "character") {
|
||||
let bougette = duplicate(this.system.bougette)
|
||||
let bougette = foundry.utils.duplicate(this.system.bougette)
|
||||
bougette.value = Math.max(Number(bougette.value) - 1, 0)
|
||||
this.update({ 'system.bougette': bougette })
|
||||
}
|
||||
@ -145,7 +196,7 @@ export class BoLActor extends Actor {
|
||||
}
|
||||
}
|
||||
get attributes() {
|
||||
let attrList = duplicate(Object.values(this.system.attributes))
|
||||
let attrList = foundry.utils.duplicate(Object.values(this.system.attributes))
|
||||
this.addEffectModifiers(attrList, "system.attributes.")
|
||||
return attrList
|
||||
}
|
||||
@ -199,21 +250,40 @@ export class BoLActor extends Actor {
|
||||
getActiveFightOption() {
|
||||
let it = this.items.find(i => i.type === "feature" && i.system.subtype === "fightoption" && i.system.properties.activated)
|
||||
if (it) {
|
||||
return duplicate(it)
|
||||
return foundry.utils.duplicate(it)
|
||||
}
|
||||
return undefined
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
addXPLog(type, name, cost, value) {
|
||||
let xplog = {
|
||||
name: "XP : " + game.i18n.localize(type), type: "feature",
|
||||
img: "icons/magic/symbols/chevron-elipse-circle-blue.webp",
|
||||
system: {
|
||||
subtype: "xplog", properties: {
|
||||
xptype: type,
|
||||
xpdate: new Date().toLocaleDateString(),
|
||||
xpname: name,
|
||||
xpcost: cost,
|
||||
xpvalue: value
|
||||
}
|
||||
}
|
||||
}
|
||||
this.createEmbeddedDocuments('Item', [xplog])
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
incAttributeXP(key) {
|
||||
let attr = duplicate(this.system.attributes[key])
|
||||
let attr = foundry.utils.duplicate(this.system.attributes[key])
|
||||
if (attr) {
|
||||
let nextXP = (attr.value == -1) ? 2 : attr.value + (attr.value + 1)
|
||||
let xp = duplicate(this.system.xp)
|
||||
let xp = foundry.utils.duplicate(this.system.xp)
|
||||
if (xp.total - xp.spent >= nextXP) {
|
||||
attr.value += 1
|
||||
xp.spent += nextXP
|
||||
this.update({ [`system.attributes.${key}`]: attr, [`system.xp`]: xp })
|
||||
this.addXPLog("attribute", key, nextXP, attr.value)
|
||||
} else {
|
||||
ui.notifications.warn("Pas assez de points d'expérience !")
|
||||
}
|
||||
@ -222,14 +292,15 @@ export class BoLActor extends Actor {
|
||||
|
||||
/* -------------------------------------------- */
|
||||
incAptitudeXP(key) {
|
||||
let apt = duplicate(this.system.aptitudes[key])
|
||||
let apt = foundry.utils.duplicate(this.system.aptitudes[key])
|
||||
if (apt) {
|
||||
let nextXP = (apt.value == -1) ? 1 : apt.value + 2
|
||||
let xp = duplicate(this.system.xp)
|
||||
let xp = foundry.utils.duplicate(this.system.xp)
|
||||
if (xp.total - xp.spent >= nextXP) {
|
||||
apt.value += 1
|
||||
xp.spent += nextXP
|
||||
this.update({ [`system.aptitudes.${key}`]: apt, [`system.xp`]: xp })
|
||||
this.addXPLog("aptitude", key, nextXP, apt.value)
|
||||
} else {
|
||||
ui.notifications.warn("Pas assez de points d'expérience !")
|
||||
}
|
||||
@ -239,13 +310,14 @@ export class BoLActor extends Actor {
|
||||
incCareerXP(itemId) {
|
||||
let career = this.items.get(itemId)
|
||||
if (career) {
|
||||
career = duplicate(career)
|
||||
career = foundry.utils.duplicate(career)
|
||||
let nextXP = career.system.rank + 1
|
||||
let xp = duplicate(this.system.xp)
|
||||
let xp = foundry.utils.duplicate(this.system.xp)
|
||||
if (xp.total - xp.spent >= nextXP) {
|
||||
xp.spent += nextXP
|
||||
this.update({ [`system.xp`]: xp })
|
||||
this.updateEmbeddedDocuments('Item', [{ _id: career._id, 'system.rank': career.system.rank + 1 }])
|
||||
this.addXPLog("career", career.name, nextXP, career.system.rank + 1)
|
||||
} else {
|
||||
ui.notifications.warn("Pas assez de points d'expérience !")
|
||||
}
|
||||
@ -259,7 +331,7 @@ export class BoLActor extends Actor {
|
||||
let updates = []
|
||||
|
||||
if (fightOption) {
|
||||
fightOption = duplicate(fightOption)
|
||||
fightOption = foundry.utils.duplicate(fightOption)
|
||||
if (fightOption.system.properties.activated) {
|
||||
state = false
|
||||
} else {
|
||||
@ -298,17 +370,20 @@ export class BoLActor extends Actor {
|
||||
get boleffects() {
|
||||
return this.items.filter(i => i.type === "feature" && i.system.subtype === "boleffect")
|
||||
}
|
||||
get xplog() {
|
||||
return this.items.filter(i => i.type === "feature" && i.system.subtype === "xplog")
|
||||
}
|
||||
get horoscopes() {
|
||||
return this.items.filter(i => i.type === "feature" && i.system.subtype === "horoscope")
|
||||
}
|
||||
get boons() {
|
||||
return duplicate(this.items.filter(i => i.type === "feature" && i.system.subtype === "boon") || []);
|
||||
return foundry.utils.duplicate(this.items.filter(i => i.type === "feature" && i.system.subtype === "boon") || []);
|
||||
}
|
||||
get flaws() {
|
||||
return duplicate(this.items.filter(i => i.type === "feature" && i.system.subtype === "flaw") || []);
|
||||
return foundry.utils.duplicate(this.items.filter(i => i.type === "feature" && i.system.subtype === "flaw") || []);
|
||||
}
|
||||
get careers() {
|
||||
return duplicate(this.items.filter(i => i.type === "feature" && i.system.subtype === "career") || [])
|
||||
return foundry.utils.duplicate(this.items.filter(i => i.type === "feature" && i.system.subtype === "career") || [])
|
||||
}
|
||||
get origins() {
|
||||
return this.items.filter(i => i.type === "feature" && i.system.subtype === "origin");
|
||||
@ -390,31 +465,23 @@ export class BoLActor extends Actor {
|
||||
|
||||
get bonusBoons() {
|
||||
let boons = this.items.filter(i => i.type === "feature" && i.system.subtype === "boon" && i.system.properties.isbonusdice)
|
||||
return duplicate(boons || [])
|
||||
return foundry.utils.duplicate(boons || [])
|
||||
}
|
||||
get malusFlaws() {
|
||||
return duplicate(this.items.filter(i => i.type === "feature" && i.system.subtype === "flaw" && i.system.properties.ismalusdice) || []);
|
||||
return foundry.utils.duplicate(this.items.filter(i => i.type === "feature" && i.system.subtype === "flaw" && i.system.properties.ismalusdice) || []);
|
||||
}
|
||||
|
||||
isSorcerer() {
|
||||
if (this.careers.find(item => item.system.properties.sorcerer == true))
|
||||
return true
|
||||
return false
|
||||
return (this.careers.find(item => item.system.properties.sorcerer))
|
||||
}
|
||||
isAlchemist() {
|
||||
if (this.careers.find(item => item.system.properties.alchemist == true))
|
||||
return true
|
||||
return false
|
||||
return (this.careers.find(item => item.system.properties.alchemist))
|
||||
}
|
||||
isAstrologer() {
|
||||
if (this.careers.find(item => item.system.properties.astrologer == true))
|
||||
return true
|
||||
return false
|
||||
return (this.careers.find(item => item.system.properties.astrologer))
|
||||
}
|
||||
isPriest() {
|
||||
if (this.careers.find(item => item.system.properties.priest == true))
|
||||
return true
|
||||
return false
|
||||
return (this.careers.find(item => item.system.properties.priest))
|
||||
}
|
||||
|
||||
/*-------------------------------------------- */
|
||||
@ -484,7 +551,7 @@ export class BoLActor extends Actor {
|
||||
|
||||
/*-------------------------------------------- */
|
||||
spentAstrologyPoints(points) {
|
||||
let astrology = duplicate(this.system.resources.astrologypoints)
|
||||
let astrology = foundry.utils.duplicate(this.system.resources.astrologypoints)
|
||||
astrology.value -= points
|
||||
astrology.value = Math.max(astrology.value, 0)
|
||||
this.update({ 'system.resources.astrologypoints': astrology })
|
||||
@ -535,8 +602,8 @@ export class BoLActor extends Actor {
|
||||
rollData.horoscopeName = actorHoroscope.name
|
||||
}
|
||||
if (rollData.horoscopeType == "majorgroup") {
|
||||
let rID = randomID(16)
|
||||
let horoscopes = duplicate(game.settings.get("bol", "horoscope-group"))
|
||||
let rID = foundry.utils.randomID(16)
|
||||
let horoscopes = foundry.utils.duplicate(game.settings.get("bol", "horoscope-group"))
|
||||
horoscopes[rID] = {
|
||||
id: rID,
|
||||
name: game.i18n.localize("BOL.ui.groupHoroscope") + this.name,
|
||||
@ -568,7 +635,7 @@ export class BoLActor extends Actor {
|
||||
async spendAlchemyPoint(alchemyId, pcCost) {
|
||||
let alchemy = this.items.get(alchemyId)
|
||||
if (alchemy) {
|
||||
pcCost = Number(pcCost) ?? 0
|
||||
pcCost = Number(pcCost) || 0
|
||||
if (this.system.resources.alchemypoints.value >= pcCost) {
|
||||
let newPC = this.system.resources.alchemypoints.value - pcCost
|
||||
newPC = (newPC < 0) ? 0 : newPC
|
||||
@ -582,7 +649,7 @@ export class BoLActor extends Actor {
|
||||
}
|
||||
/*-------------------------------------------- */
|
||||
getAstrologerBonus() {
|
||||
let astrologer = this.careers.find(item => item.system.properties.astrologer == true)
|
||||
let astrologer = this.careers.find(item => item.system.properties.astrologer)
|
||||
if (astrologer) {
|
||||
return astrologer.system.rank
|
||||
}
|
||||
@ -590,7 +657,7 @@ export class BoLActor extends Actor {
|
||||
}
|
||||
/*-------------------------------------------- */
|
||||
getAlchemistBonus() {
|
||||
let sorcerer = this.careers.find(item => item.system.properties.alchemist == true)
|
||||
let sorcerer = this.careers.find(item => item.system.properties.alchemist)
|
||||
if (sorcerer) {
|
||||
return sorcerer.system.rank
|
||||
}
|
||||
@ -598,7 +665,7 @@ export class BoLActor extends Actor {
|
||||
}
|
||||
/*-------------------------------------------- */
|
||||
getSorcererBonus() {
|
||||
let sorcerer = this.careers.find(item => item.system.properties.sorcerer == true)
|
||||
let sorcerer = this.careers.find(item => item.system.properties.sorcerer)
|
||||
if (sorcerer) {
|
||||
return sorcerer.system.rank
|
||||
}
|
||||
@ -629,7 +696,7 @@ export class BoLActor extends Actor {
|
||||
resources['power'] = this.system.resources.power
|
||||
}
|
||||
if (this.system.chartype == 'adversary') {
|
||||
resources['hero'] = duplicate(this.system.resources.hero)
|
||||
resources['hero'] = foundry.utils.duplicate(this.system.resources.hero)
|
||||
resources['hero'].label = "BOL.resources.villainy"
|
||||
}
|
||||
} else {
|
||||
@ -775,17 +842,17 @@ export class BoLActor extends Actor {
|
||||
let lastHP = await this.getFlag("world", hpID)
|
||||
if (lastHP != this.system.resources.hp.value && game.user.isGM) { // Only GM sends this
|
||||
await this.setFlag("world", hpID, this.system.resources.hp.value)
|
||||
let prone = this.effects.find(ef => ef.label == "EFFECT.StatusProne")
|
||||
let dead = this.effects.find(ef => ef.label == "EFFECT.StatusDead")
|
||||
let prone = this.effects.find(ef => ef.name == game.i18n.localize("EFFECT.StatusProne"))
|
||||
let dead = this.effects.find(ef => ef.name == game.i18n.localize("EFFECT.StatusDead"))
|
||||
if (this.system.resources.hp.value <= 0) {
|
||||
if (!prone) {
|
||||
await this.createEmbeddedDocuments("ActiveEffect", [
|
||||
{ label: 'EFFECT.StatusProne', icon: 'icons/svg/falling.svg', flags: { core: { statusId: 'prone' } } }
|
||||
{ name: game.i18n.localize('EFFECT.StatusProne'), icon: 'icons/svg/falling.svg', statuses: 'prone' }
|
||||
])
|
||||
}
|
||||
if (this.system.resources.hp.value < -5 && !dead) {
|
||||
await this.createEmbeddedDocuments("ActiveEffect", [
|
||||
{ label: 'EFFECT.StatusDead', icon: 'icons/svg/skull.svg', flags: { core: { statusId: 'dead' } } }
|
||||
{ name: game.i18n.localize('EFFECT.StatusDead'), icon: 'icons/svg/skull.svg', statuses: 'dead' }
|
||||
])
|
||||
}
|
||||
ChatMessage.create({
|
||||
@ -812,7 +879,7 @@ export class BoLActor extends Actor {
|
||||
|
||||
/*-------------------------------------------- */
|
||||
storeVitaliteCombat() {
|
||||
this.setFlag("world", "vitalite-before-combat", duplicate(this.system.resources.hp))
|
||||
this.setFlag("world", "vitalite-before-combat", foundry.utils.duplicate(this.system.resources.hp))
|
||||
}
|
||||
/*-------------------------------------------- */
|
||||
async displayRecuperation() {
|
||||
@ -836,7 +903,7 @@ export class BoLActor extends Actor {
|
||||
}
|
||||
/*-------------------------------------------- */
|
||||
async applyRecuperation(recupHP) {
|
||||
let hp = duplicate(this.system.resources.hp)
|
||||
let hp = foundry.utils.duplicate(this.system.resources.hp)
|
||||
//console.log("RECUP !!!!", hp, recupHP)
|
||||
hp.value += Number(recupHP)
|
||||
hp.value = Math.min(hp.value, hp.max)
|
||||
@ -864,10 +931,7 @@ export class BoLActor extends Actor {
|
||||
checkNumeric(myObject) {
|
||||
if (myObject) {
|
||||
for (let key in myObject) {
|
||||
if (myObject[key].value === null) {
|
||||
myObject[key].value = 0
|
||||
}
|
||||
if (myObject[key].value === NaN) {
|
||||
if (myObject[key].value === null || isNaN(myObject[key].value)) {
|
||||
myObject[key].value = 0
|
||||
}
|
||||
}
|
||||
@ -885,11 +949,39 @@ export class BoLActor extends Actor {
|
||||
if (data.system?.resources) {
|
||||
this.checkNumeric(data.system.resources)
|
||||
}
|
||||
// Apply changes in Horde size to Token width/height
|
||||
if (this.type == "horde") {
|
||||
if (data?.system?.hordesize) { // If horde size is changed}
|
||||
let newHP = data.system.hordesize * this.system.hordebasehp
|
||||
if (newHP != this.system.resources.hp.value) {
|
||||
data.system.resources = { hp: { value: newHP, max: newHP } } // Update HP
|
||||
}
|
||||
let tokenSize = this.getTokenSizeFromHordeSize(data?.system?.hordesize)
|
||||
if (this.isToken && (tokenSize !== this.token.width)) {
|
||||
this.token.update({ width: tokenSize, height: tokenSize })
|
||||
} else {
|
||||
if (tokenSize && (tokenSize !== this.prototypeToken.width)) {
|
||||
if (!foundry.utils.hasProperty(data, "prototypeToken.width")) {
|
||||
data.prototypeToken ||= {};
|
||||
data.prototypeToken.height = tokenSize;
|
||||
data.prototypeToken.width = tokenSize;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if (data?.system?.hordebasehp) {
|
||||
let newHP = this.system.hordesize * data.system.hordebasehp
|
||||
if (newHP != this.system.resources.hp.value) {
|
||||
data.system.resources = { hp: { value: newHP, max: newHP } }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
super._preUpdate(data, options, userId)
|
||||
}
|
||||
|
||||
/*-------------------------------------------- */
|
||||
getInitiativeRank(rollData = undefined, isCombat = false, combatData) {
|
||||
getInitiativeRank(rollData = undefined, isCombat = false, combatData = undefined) {
|
||||
let fvttInit = 4 // Pietaille par defaut
|
||||
if (this.type == 'character') {
|
||||
fvttInit = 5
|
||||
@ -955,8 +1047,15 @@ export class BoLActor extends Actor {
|
||||
}
|
||||
/*-------------------------------------------- */
|
||||
async sufferDamage(damage) {
|
||||
let updates = {}
|
||||
let newHP = this.system.resources.hp.value - damage
|
||||
await this.update({ 'system.resources.hp.value': newHP })
|
||||
updates['system.resources.hp.value'] = newHP
|
||||
if (this.type == "horde") {
|
||||
let newSize = Math.ceil(newHP / this.system.hordebasehp)
|
||||
updates['system.hordesize'] = newSize
|
||||
}
|
||||
await this.update(updates)
|
||||
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
@ -987,20 +1086,21 @@ export class BoLActor extends Actor {
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
rollProtection(itemId) {
|
||||
let armor = duplicate(this.items.get(itemId))
|
||||
async rollProtection(itemId) {
|
||||
let armor = foundry.utils.duplicate(this.items.get(itemId))
|
||||
if (armor) {
|
||||
let armorFormula = "max(" + armor.system.properties.soak.formula + ", 0)"
|
||||
let rollArmor = new Roll(armorFormula)
|
||||
rollArmor.roll({ async: false }).toMessage()
|
||||
await rollArmor.roll()
|
||||
rollArmor.toMessage()
|
||||
}
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
rollWeaponDamage(itemId) {
|
||||
let weapon = duplicate(this.items.get(itemId))
|
||||
let weapon = foundry.utils.duplicate(this.items.get(itemId))
|
||||
if (weapon) {
|
||||
let r = new BoLDefaultRoll({ id: randomID(16), isSuccess: true, mode: "weapon", weapon: weapon, actorId: this.id, actor: this })
|
||||
let r = new BoLDefaultRoll({ id: foundry.utils.randomID(16), isSuccess: true, mode: "weapon", weapon: weapon, actorId: this.id, actor: this })
|
||||
r.setSuccess(true)
|
||||
r.rollDamage()
|
||||
}
|
||||
@ -1010,7 +1110,7 @@ export class BoLActor extends Actor {
|
||||
toggleEquipItem(item) {
|
||||
const equipable = item.system.properties.equipable;
|
||||
if (equipable) {
|
||||
let itemData = duplicate(item);
|
||||
let itemData = foundry.utils.duplicate(item);
|
||||
itemData.system.worn = !itemData.system.worn;
|
||||
return item.update(itemData);
|
||||
}
|
||||
|
217
module/actor/horde-sheet.js
Normal file
217
module/actor/horde-sheet.js
Normal file
@ -0,0 +1,217 @@
|
||||
/**
|
||||
* Extend the basic ActorSheet with some very simple modifications
|
||||
* @extends {ActorSheet}
|
||||
*/
|
||||
import { BoLRoll } from "../controllers/bol-rolls.js";
|
||||
import { BoLUtility } from "../system/bol-utility.js";
|
||||
|
||||
export class BoLHordeSheet extends ActorSheet {
|
||||
|
||||
/** @override */
|
||||
static get defaultOptions() {
|
||||
return foundry.utils.mergeObject(super.defaultOptions, {
|
||||
classes: ["bol", "sheet", "actor"],
|
||||
template: "systems/bol/templates/actor/horde-sheet.hbs",
|
||||
width: 860,
|
||||
height: 600,
|
||||
dragDrop: [{ dragSelector: ".items-list .item", dropSelector: null }],
|
||||
tabs: [{ navSelector: ".sheet-tabs", contentSelector: ".sheet-body", initial: "stats" }]
|
||||
});
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
|
||||
/** @override */
|
||||
activateListeners(html) {
|
||||
super.activateListeners(html);
|
||||
|
||||
function onLoad() {
|
||||
let logoSheet = BoLUtility.getLogoActorSheet()
|
||||
$(".bol-actor-form").css("backgroundImage",`url(${logoSheet})`)
|
||||
}
|
||||
// Setup everything onload
|
||||
$(function () { onLoad(); });
|
||||
|
||||
// Everything below here is only needed if the sheet is editable
|
||||
if (!this.options.editable) return;
|
||||
|
||||
// Add Inventory Item
|
||||
html.find('.item-create').click(this._onItemCreate.bind(this));
|
||||
|
||||
// Update Inventory Item
|
||||
html.find('.item-edit').click(ev => {
|
||||
const li = $(ev.currentTarget).parents(".item");
|
||||
const item = this.actor.items.get(li.data("itemId"));
|
||||
item.sheet.render(true);
|
||||
})
|
||||
// Equip/Unequip item
|
||||
html.find('.item-equip').click(this._onToggleEquip.bind(this));
|
||||
|
||||
html.find('.create_item').click(ev => {
|
||||
this.actor.createEmbeddedDocuments('Item', [{ name: "Nouvel Equipement", type: "item" }], { renderSheet: true });
|
||||
});
|
||||
|
||||
// Incr./Decr. career ranks
|
||||
html.find(".inc-dec-btns").click((ev) => {
|
||||
const li = $(ev.currentTarget).parents(".item");
|
||||
if (li) {
|
||||
const item = this.actor.items.get(li.data("itemId"));
|
||||
if (item) {
|
||||
const dataset = ev.currentTarget.dataset;
|
||||
const operator = dataset.operator;
|
||||
const target = dataset.target;
|
||||
const incr = parseInt(dataset.incr)
|
||||
const min = parseInt(dataset.min)
|
||||
const max = parseInt(dataset.max) || 10000
|
||||
let value = eval("item." + target)
|
||||
value = value || 0
|
||||
//console.log("IncDec", item, target, value, operator, min, max)
|
||||
if (operator === "minus") {
|
||||
if (value >= min + incr) value -= incr;
|
||||
else value = min;
|
||||
}
|
||||
if (operator === "plus") {
|
||||
if (value <= max - incr) value += incr;
|
||||
else value = max;
|
||||
}
|
||||
let update = { [`${target}`]: value };
|
||||
item.update(update);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
// Delete Inventory Item
|
||||
html.find('.item-delete').click(ev => {
|
||||
Dialog.confirm({
|
||||
title: "Suppression",
|
||||
content: `Vous êtes sûr de vouloir supprimer cet item ?`,
|
||||
yes: () => {
|
||||
const li = $(ev.currentTarget).parents(".item");
|
||||
this.actor.deleteEmbeddedDocuments("Item", [li.data("itemId")])
|
||||
li.slideUp(200, () => this.render(false));
|
||||
},
|
||||
no: () => { },
|
||||
defaultYes: false,
|
||||
});
|
||||
});
|
||||
|
||||
// Rollable abilities.
|
||||
html.find('.rollable').click(this._onRoll.bind(this));
|
||||
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
|
||||
/** @override */
|
||||
async getData(options) {
|
||||
const data = super.getData(options)
|
||||
let formData = foundry.utils.duplicate(data)
|
||||
|
||||
formData.config = game.bol.config
|
||||
formData.name = this.actor.name
|
||||
formData.img = this.actor.img
|
||||
formData.system = foundry.utils.duplicate(this.actor.system)
|
||||
formData.isGM = game.user.isGM
|
||||
formData.options = this.options
|
||||
formData.owner = this.document.isOwner
|
||||
formData.editScore = this.options.editScore
|
||||
formData.description = await TextEditor.enrichHTML(this.actor.system.description, {async: true})
|
||||
|
||||
formData.isGM = game.user.isGM
|
||||
|
||||
console.log("HORDE", formData)
|
||||
return formData;
|
||||
}
|
||||
/* -------------------------------------------- */
|
||||
|
||||
/**
|
||||
* Handle creating a new Owned Item for the actor using initial data defined in the HTML dataset
|
||||
* @param {Event} event The originating click event
|
||||
* @private
|
||||
*/
|
||||
_onItemCreate(event) {
|
||||
event.preventDefault();
|
||||
const header = event.currentTarget;
|
||||
// Get the type of item to create.
|
||||
const type = header.dataset.type;
|
||||
// Grab any data associated with this control.
|
||||
const data = foundry.utils.duplicate(header.dataset);
|
||||
// Initialize a default name.
|
||||
const name = `New ${type.capitalize()}`;
|
||||
// Prepare the item object.
|
||||
const itemData = {
|
||||
name: name,
|
||||
type: type,
|
||||
data: data
|
||||
};
|
||||
// Remove the type from the dataset since it's in the itemData.type prop.
|
||||
delete itemData.data["type"];
|
||||
|
||||
// Finally, create the item!
|
||||
return this.actor.createEmbeddedDocuments("Item", [itemData]);
|
||||
}
|
||||
|
||||
_onToggleEquip(event) {
|
||||
event.preventDefault();
|
||||
const li = $(event.currentTarget).closest(".item");
|
||||
const item = this.actor.items.get(li.data("itemId"));
|
||||
return this.actor.toggleEquipItem(item);
|
||||
}
|
||||
|
||||
/**
|
||||
* Handle clickable rolls.
|
||||
* @param {Event} event The originating click event
|
||||
* @private
|
||||
*/
|
||||
_onRoll(event) {
|
||||
event.preventDefault();
|
||||
const element = event.currentTarget
|
||||
const dataset = element.dataset
|
||||
const rollType = dataset.rollType
|
||||
const li = $(event.currentTarget).closest(".item")
|
||||
switch (rollType) {
|
||||
case "attribute":
|
||||
BoLRoll.attributeCheck(this.actor, dataset.key, event)
|
||||
break;
|
||||
case "aptitude":
|
||||
BoLRoll.aptitudeCheck(this.actor, dataset.key, event)
|
||||
break;
|
||||
case "weapon":
|
||||
BoLRoll.weaponCheck(this.actor, event)
|
||||
break;
|
||||
case "spell":
|
||||
BoLRoll.spellCheck(this.actor, event)
|
||||
break;
|
||||
case "alchemy":
|
||||
BoLRoll.alchemyCheck(this.actor, event)
|
||||
break;
|
||||
case "protection":
|
||||
this.actor.rollProtection(li.data("item-id"))
|
||||
break;
|
||||
case "damage":
|
||||
this.actor.rollWeaponDamage(li.data("item-id"))
|
||||
break;
|
||||
case "aptitudexp":
|
||||
this.actor.incAptitudeXP(dataset.key)
|
||||
break;
|
||||
case "attributexp":
|
||||
this.actor.incAttributeXP(dataset.key)
|
||||
break;
|
||||
case "careerxp":
|
||||
this.actor.incCareerXP( li.data("item-id"))
|
||||
break;
|
||||
|
||||
default: break;
|
||||
}
|
||||
}
|
||||
|
||||
/** @override */
|
||||
setPosition(options = {}) {
|
||||
const position = super.setPosition(options);
|
||||
const sheetBody = this.element.find(".sheet-body");
|
||||
const bodyHeight = position.height - 192;
|
||||
sheetBody.css("height", bodyHeight);
|
||||
return position;
|
||||
}
|
||||
}
|
@ -9,7 +9,7 @@ export class BoLVehicleSheet extends ActorSheet {
|
||||
|
||||
/** @override */
|
||||
static get defaultOptions() {
|
||||
return mergeObject(super.defaultOptions, {
|
||||
return foundry.utils.mergeObject(super.defaultOptions, {
|
||||
classes: ["bol", "sheet", "actor"],
|
||||
template: "systems/bol/templates/actor/vehicle-sheet.hbs",
|
||||
width: 860,
|
||||
@ -116,13 +116,12 @@ export class BoLVehicleSheet extends ActorSheet {
|
||||
/** @override */
|
||||
async getData(options) {
|
||||
const data = super.getData(options)
|
||||
const actorData = duplicate(data)
|
||||
let formData = duplicate(data)
|
||||
let formData = foundry.utils.duplicate(data)
|
||||
|
||||
formData.config = game.bol.config
|
||||
formData.name = this.actor.name
|
||||
formData.img = this.actor.img
|
||||
formData.system = duplicate(this.actor.system)
|
||||
formData.system = foundry.utils.duplicate(this.actor.system)
|
||||
formData.weapons = this.actor.vehicleWeapons
|
||||
formData.isGM = game.user.isGM
|
||||
formData.options = this.options
|
||||
@ -148,7 +147,7 @@ export class BoLVehicleSheet extends ActorSheet {
|
||||
// Get the type of item to create.
|
||||
const type = header.dataset.type;
|
||||
// Grab any data associated with this control.
|
||||
const data = duplicate(header.dataset);
|
||||
const data = foundry.utils.duplicate(header.dataset);
|
||||
// Initialize a default name.
|
||||
const name = `New ${type.capitalize()}`;
|
||||
// Prepare the item object.
|
||||
|
@ -3,6 +3,7 @@
|
||||
import { BoLActor } from "./actor/actor.js"
|
||||
import { BoLActorSheet } from "./actor/actor-sheet.js"
|
||||
import { BoLVehicleSheet } from "./actor/vehicle-sheet.js"
|
||||
import { BoLHordeSheet } from "./actor/horde-sheet.js"
|
||||
import { BoLItem } from "./item/item.js"
|
||||
import { BoLItemSheet } from "./item/item-sheet.js"
|
||||
import { System, BOL } from "./system/config.js"
|
||||
@ -14,9 +15,8 @@ import { BoLUtility } from "./system/bol-utility.js"
|
||||
import { BoLCombatManager } from "./system/bol-combat.js"
|
||||
import { BoLTokenHud } from "./system/bol-action-hud.js"
|
||||
import { BoLHotbar } from "./system/bol-hotbar.js"
|
||||
import { BoLAdventureGenerator } from "./system/bol-adventure-generator.js"
|
||||
import { BoLCommands} from "./system/bol-commands.js"
|
||||
import { BoLCharacterSummary} from "./system/bol-character-summary.js"
|
||||
import { BoLCommands } from "./system/bol-commands.js"
|
||||
import { BoLRoll } from "./controllers/bol-rolls.js"
|
||||
|
||||
/* -------------------------------------------- */
|
||||
Hooks.once('init', async function () {
|
||||
@ -25,10 +25,12 @@ Hooks.once('init', async function () {
|
||||
BoLActor,
|
||||
BoLItem,
|
||||
BoLHotbar,
|
||||
BoLRoll,
|
||||
BoLUtility,
|
||||
macros: Macros,
|
||||
config: BOL
|
||||
};
|
||||
|
||||
|
||||
// Game socket
|
||||
game.socket.on("system.bol", sockmsg => {
|
||||
BoLUtility.onSocketMessage(sockmsg);
|
||||
@ -53,6 +55,7 @@ Hooks.once('init', async function () {
|
||||
Actors.unregisterSheet("core", ActorSheet);
|
||||
Actors.registerSheet("bol", BoLActorSheet, { types: ["character", "encounter"], makeDefault: true })
|
||||
Actors.registerSheet("bol", BoLVehicleSheet, { types: ["vehicle"], makeDefault: true })
|
||||
Actors.registerSheet("bol", BoLHordeSheet, { types: ["horde"], makeDefault: true })
|
||||
|
||||
Items.unregisterSheet("core", ItemSheet);
|
||||
Items.registerSheet("bol", BoLItemSheet, { makeDefault: true });
|
||||
@ -62,8 +65,7 @@ Hooks.once('init', async function () {
|
||||
BoLTokenHud.init()
|
||||
BoLHotbar.init()
|
||||
BoLCommands.init()
|
||||
BoLAdventureGenerator.init()
|
||||
|
||||
|
||||
// Preload Handlebars Templates
|
||||
await preloadHandlebarsTemplates();
|
||||
|
||||
@ -75,57 +77,52 @@ Hooks.once('init', async function () {
|
||||
|
||||
});
|
||||
|
||||
/* -------------------------------------------- */
|
||||
// Register world usage statistics
|
||||
function registerUsageCount( registerKey ) {
|
||||
if ( game.user.isGM ) {
|
||||
game.settings.register(registerKey, "world-key", {
|
||||
name: "Unique world key",
|
||||
scope: "world",
|
||||
config: false,
|
||||
default: "",
|
||||
type: String
|
||||
});
|
||||
|
||||
let worldKey = game.settings.get(registerKey, "world-key")
|
||||
if ( worldKey == undefined || worldKey == "" ) {
|
||||
worldKey = randomID(32)
|
||||
game.settings.set(registerKey, "world-key", worldKey )
|
||||
}
|
||||
// Simple API counter
|
||||
let regURL = `https://www.uberwald.me/fvtt_appcount/count.php?name="${registerKey}"&worldKey="${worldKey}"&version="${game.release.generation}.${game.release.build}"&system="${game.system.id}"&systemversion="${game.system.version}"`
|
||||
//$.ajaxSetup({
|
||||
//headers: { 'Access-Control-Allow-Origin': '*' }
|
||||
//})
|
||||
$.ajax(regURL)
|
||||
}
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
function welcomeMessage() {
|
||||
ChatMessage.create({
|
||||
user: game.user.id,
|
||||
whisper: [game.user.id],
|
||||
content: `<div id="welcome-message-pegasus"><span class="rdd-roll-part">
|
||||
content: `<div id="welcome-message-bol"><span class="rdd-roll-part">
|
||||
<strong>` + game.i18n.localize("BOL.chat.welcome1") + `</strong><p>` +
|
||||
game.i18n.localize("BOL.chat.welcome2") + "<p>" +
|
||||
game.i18n.localize("BOL.chat.welcome3") + "<p>" +
|
||||
game.i18n.localize("BOL.chat.welcome4") + "</p>" +
|
||||
game.i18n.localize("BOL.chat.welcome5") + "<br>" +
|
||||
game.i18n.localize("BOL.chat.welcome6")
|
||||
} )
|
||||
game.i18n.localize("BOL.chat.welcome2") + "<p>" +
|
||||
game.i18n.localize("BOL.chat.welcome3") + "<p>" +
|
||||
game.i18n.localize("BOL.chat.welcome4") + "</p>" +
|
||||
game.i18n.localize("BOL.chat.welcome5") + "<br>" +
|
||||
game.i18n.localize("BOL.chat.welcome6")
|
||||
})
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
Hooks.once('ready', async function () {
|
||||
|
||||
BoLUtility.ready()
|
||||
BoLCharacterSummary.ready()
|
||||
|
||||
registerUsageCount(game.system.id)
|
||||
|
||||
import("https://www.uberwald.me/fvtt_appcount/count-class-ready.js").then(moduleCounter=>{
|
||||
console.log("ClassCounter loaded", moduleCounter)
|
||||
moduleCounter.ClassCounter.registerUsageCount()
|
||||
}).catch(err=>
|
||||
console.log("No stats available, giving up.")
|
||||
)
|
||||
|
||||
welcomeMessage()
|
||||
|
||||
// User warning
|
||||
if (!game.user.isGM && game.user.character == undefined) {
|
||||
ui.notifications.info(game.i18n.localize("BOL.chat.pcwarning"));
|
||||
ChatMessage.create({
|
||||
content: game.i18n.localize("BOL.chat.pcwarningmsg") + game.user.name,
|
||||
user: game.user._id
|
||||
});
|
||||
}
|
||||
if (!game.user.isGM && game.user.character && !game.user.character.prototypeToken.actorLink) {
|
||||
ui.notifications.info(game.i18n.localize("BOL.chat.pcnotlinked"));
|
||||
ChatMessage.create({
|
||||
content: game.i18n.localize("BOL.chat.pcnotlinkedmsg") + game.user.name,
|
||||
user: game.user._id
|
||||
});
|
||||
}
|
||||
|
||||
})
|
||||
|
||||
|
||||
|
@ -19,11 +19,9 @@ export class BoLRoll {
|
||||
static updateApplicableEffects(rollData) {
|
||||
let appEffects = []
|
||||
for (let effect of rollData.bolEffects) {
|
||||
if (effect.system.properties.identifier == "always") {
|
||||
appEffects.push(effect)
|
||||
} else if (effect.system.properties.identifier.includes(rollData.attribute.key)) {
|
||||
appEffects.push(effect)
|
||||
} else if (rollData.aptitude && effect.system.properties.identifier.includes(rollData.aptitude.key)) {
|
||||
if ( (effect.system.properties.identifier == "always") ||
|
||||
(effect.system.properties.identifier.includes(rollData.attribute.key)) ||
|
||||
(rollData.aptitude && effect.system.properties.identifier.includes(rollData.aptitude.key)) ){
|
||||
appEffects.push(effect)
|
||||
}
|
||||
}
|
||||
@ -62,10 +60,10 @@ export class BoLRoll {
|
||||
armorInitMalus: actor.getArmorInitMalus(),
|
||||
horoscopeBonusList: actor.getHoroscopesBonus(),
|
||||
horoscopeMalusList: actor.getHoroscopesMalus(),
|
||||
config: game.bol.config,
|
||||
adv: "0",
|
||||
mod: 0,
|
||||
modRanged: 0,
|
||||
aptValue: 0,
|
||||
bolEffects: actor.boleffects,
|
||||
horoscopeGroupList: this.buildHoroscopeGroupList()
|
||||
}
|
||||
@ -78,7 +76,7 @@ export class BoLRoll {
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static attributeCheck(actor, key, event, combatData) {
|
||||
static attributeCheck(actor, key="vigor", event=undefined, combatData=undefined) {
|
||||
|
||||
let attribute = eval(`actor.system.attributes.${key}`)
|
||||
|
||||
@ -91,7 +89,7 @@ export class BoLRoll {
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static aptitudeCheck(actor, key, event, combatData) {
|
||||
static aptitudeCheck(actor, key="init", event=undefined, combatData=undefined) {
|
||||
|
||||
let aptitude = eval(`actor.system.aptitudes.${key}`)
|
||||
let attrKey = this.getDefaultAttribute(key)
|
||||
@ -185,7 +183,7 @@ export class BoLRoll {
|
||||
ui.notifications.warn("Unable to find weapon !")
|
||||
return
|
||||
}
|
||||
weapon = duplicate(weapon)
|
||||
weapon = foundry.utils.duplicate(weapon)
|
||||
return this.weaponCheckWithWeapon(actor, weapon)
|
||||
}
|
||||
|
||||
@ -197,7 +195,7 @@ export class BoLRoll {
|
||||
ui.notifications.warn("Unable to find Alchemy !");
|
||||
return;
|
||||
}
|
||||
alchemy = duplicate(alchemy)
|
||||
alchemy = foundry.utils.duplicate(alchemy)
|
||||
let alchemyData = alchemy.system
|
||||
if (alchemyData.properties.pccurrent < alchemyData.properties.pccost) {
|
||||
ui.notifications.warn("Pas assez de Points de Création investis dans la Préparation !")
|
||||
@ -271,7 +269,7 @@ export class BoLRoll {
|
||||
ui.notifications.warn("Impossible de trouver ce sort !")
|
||||
return
|
||||
}
|
||||
spell = duplicate(spell)
|
||||
spell = foundry.utils.duplicate(spell)
|
||||
return this.spellCheckWithSpell(actor, spell)
|
||||
}
|
||||
|
||||
@ -404,7 +402,7 @@ export class BoLRoll {
|
||||
html.find('#attr').change((event) => {
|
||||
let attrKey = event.currentTarget.value
|
||||
let actor = BoLUtility.getActorFromRollData(this.rollData)
|
||||
this.rollData.attribute = duplicate(actor.system.attributes[attrKey])
|
||||
this.rollData.attribute = foundry.utils.duplicate(actor.system.attributes[attrKey])
|
||||
this.rollData.attrValue = actor.system.attributes[attrKey].value
|
||||
this.rollData.bolApplicableEffects = this.updateApplicableEffects(this.rollData)
|
||||
this.updateTotalDice()
|
||||
@ -412,7 +410,7 @@ export class BoLRoll {
|
||||
html.find('#apt').change((event) => {
|
||||
let aptKey = event.currentTarget.value
|
||||
let actor = BoLUtility.getActorFromRollData(this.rollData)
|
||||
this.rollData.aptitude = duplicate(actor.system.aptitudes[aptKey])
|
||||
this.rollData.aptitude = foundry.utils.duplicate(actor.system.aptitudes[aptKey])
|
||||
this.rollData.aptValue = actor.system.aptitudes[aptKey].value
|
||||
this.rollData.bolApplicableEffects = this.updateApplicableEffects(this.rollData)
|
||||
this.updateTotalDice()
|
||||
@ -455,7 +453,7 @@ export class BoLRoll {
|
||||
html.find('#horoscope-bonus-applied').change((event) => {
|
||||
this.rollData.selectedHoroscope = []
|
||||
for (let option of event.currentTarget.selectedOptions) {
|
||||
this.rollData.selectedHoroscope.push(duplicate(this.rollData.horoscopeBonusList[Number(option.index)]))
|
||||
this.rollData.selectedHoroscope.push(foundry.utils.duplicate(this.rollData.horoscopeBonusList[Number(option.index)]))
|
||||
}
|
||||
let horoscopes = $('#horoscope-bonus-applied').val()
|
||||
this.rollData.horoscopeBonus = (!horoscopes || horoscopes.length == 0) ? 0 : horoscopes.length
|
||||
@ -465,7 +463,7 @@ export class BoLRoll {
|
||||
html.find('#horoscope-malus-applied').change((event) => {
|
||||
this.rollData.selectedHoroscope = []
|
||||
for (let option of event.currentTarget.selectedOptions) {
|
||||
this.rollData.selectedHoroscope.push(duplicate(this.rollData.horoscopeBonusList[Number(option.index)]))
|
||||
this.rollData.selectedHoroscope.push(foundry.utils.duplicate(this.rollData.horoscopeBonusList[Number(option.index)]))
|
||||
}
|
||||
let horoscopes = $('#horoscope-malus-applied').val()
|
||||
this.rollData.horoscopeMalus = (!horoscopes || horoscopes.length == 0) ? 0 : horoscopes.length
|
||||
@ -533,7 +531,7 @@ export class BoLRoll {
|
||||
rollData.careerBonus = rollData.careerBonus ?? 0
|
||||
rollData.modRanged = rollData.modRanged ?? 0
|
||||
rollData.mod = rollData.mod ?? 0
|
||||
rollData.id = randomID(16)
|
||||
rollData.id = foundry.utils.randomID(16)
|
||||
rollData.weaponModifier = 0
|
||||
rollData.attackBonusDice = false
|
||||
rollData.armorMalus = 0
|
||||
@ -570,6 +568,7 @@ export class BoLRoll {
|
||||
icon: '<i class="fas fa-check"></i>',
|
||||
label: game.i18n.localize("BOL.ui.submit"),
|
||||
callback: (html) => {
|
||||
console.log("Submit Roll!!!!");
|
||||
if (rollData.mode == 'spell' && rollData.ppCurrent < rollData.ppCost) { // Check PP available
|
||||
ui.notifications.warn("Pas assez de Points de Pouvoir !")
|
||||
return
|
||||
@ -619,29 +618,40 @@ export class BoLDefaultRoll {
|
||||
if (this.rollData.applyId) {
|
||||
BoLUtility.cleanupButtons(this.rollData.applyId)
|
||||
}
|
||||
this.rollData.optionsId = randomID(16)
|
||||
this.rollData.applyId = randomID(16)
|
||||
this.rollData.optionsId = foundry.utils.randomID(16)
|
||||
this.rollData.applyId = foundry.utils.randomID(16)
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
async roll() {
|
||||
|
||||
const r = new Roll(this.rollData.formula)
|
||||
//console.log("Roll formula", this.rollData.formula)
|
||||
await r.roll({ "async": false })
|
||||
await r.roll()
|
||||
|
||||
let diceData = BoLUtility.getDiceData()
|
||||
//console.log("DICEDATA", diceData)
|
||||
const activeDice = r.terms[0].results.filter(r => r.active)
|
||||
const diceTotal = activeDice.map(r => r.result).reduce((a, b) => a + b)
|
||||
this.rollData.roll = r
|
||||
this.rollData.isSuccess = (r.total >= diceData.successValue)
|
||||
this.rollData.isCritical = (diceTotal >= diceData.criticalSuccessValue)
|
||||
this.rollData.isRealCritical = (diceTotal >= diceData.criticalSuccessValue)
|
||||
this.rollData.isHeroic = (diceTotal >= diceData.criticalSuccessValue)
|
||||
this.rollData.isLegendary = false
|
||||
this.rollData.isFumble = (diceTotal <= diceData.criticalFailureValue)
|
||||
this.rollData.isFailure = !this.rollData.isSuccess
|
||||
if ( this.rollData.isFumble ) {
|
||||
this.rollData.isSuccess = false
|
||||
this.rollData.isCritical = false
|
||||
this.rollData.isRealCritical = false
|
||||
this.rollData.isHeroic = false
|
||||
this.rollData.isFailure = true
|
||||
} else {
|
||||
this.rollData.isCritical = (diceTotal >= diceData.criticalSuccessValue)
|
||||
if ( this.rollData.isCritical) {
|
||||
this.rollData.isSuccess = true
|
||||
} else {
|
||||
this.rollData.isSuccess = (r.total >= diceData.successValue)
|
||||
}
|
||||
this.rollData.isRealCritical = (diceTotal >= diceData.criticalSuccessValue)
|
||||
this.rollData.isHeroic = (diceTotal >= diceData.criticalSuccessValue)
|
||||
this.rollData.isFailure = !this.rollData.isSuccess
|
||||
}
|
||||
this.rollData.isLegendary = false
|
||||
|
||||
let actor = BoLUtility.getActorFromRollData(this.rollData)
|
||||
if (this.rollData.reroll == undefined) {
|
||||
@ -652,7 +662,7 @@ export class BoLDefaultRoll {
|
||||
this.rollData.initiativeRank = actor.getInitiativeRank(this.rollData)
|
||||
if (this.rollData.combatData) { // If combatData present
|
||||
let combat = game.combats.get(this.rollData.combatData.combatId)
|
||||
console.log("SET INIT!!!!!", this.rollData.initiativeRank)
|
||||
//console.log("SET INIT!!!!!", this.rollData.initiativeRank)
|
||||
combat.setInitiative(this.rollData.combatData.combatantId, this.rollData.initiativeRank)
|
||||
}
|
||||
}
|
||||
@ -691,7 +701,7 @@ export class BoLDefaultRoll {
|
||||
flavor: msgFlavor,
|
||||
speaker: ChatMessage.getSpeaker({ actor: actor }),
|
||||
})
|
||||
this.rollData.roll = duplicate(this.rollData.roll) // Remove object, keep data (v111 ready)
|
||||
this.rollData.roll = foundry.utils.duplicate(this.rollData.roll) // Remove object, keep data (v111 ready)
|
||||
msg.setFlag("world", "bol-roll-data", this.rollData)
|
||||
})
|
||||
}
|
||||
@ -744,7 +754,7 @@ export class BoLDefaultRoll {
|
||||
speaker: ChatMessage.getSpeaker({ actor: actor }),
|
||||
flags: { msgType: "default" }
|
||||
})
|
||||
this.rollData.damageRoll = duplicate(this.rollData.damageRoll)
|
||||
this.rollData.damageRoll = foundry.utils.duplicate(this.rollData.damageRoll)
|
||||
this.rollData.actor = undefined // Cleanup
|
||||
msg.setFlag("world", "bol-roll-data", this.rollData)
|
||||
})
|
||||
@ -768,8 +778,12 @@ export class BoLDefaultRoll {
|
||||
if (this.rollData.damageMode == 'damage-plus-6') {
|
||||
bonusDmg = 6
|
||||
}
|
||||
if (this.rollData.damageMode == 'damage-plus-12') {
|
||||
if (this.rollData.damageMode == 'damage-plus-12' || this.rollData.damageMode == 'damage-plus-12-legend') {
|
||||
bonusDmg = 12
|
||||
if (this.rollData.damageMode == 'damage-plus-12') { // In this case, the hero point is used (ie shortcut)
|
||||
let actor = BoLUtility.getActorFromRollData(this.rollData)
|
||||
actor.subHeroPoints(1)
|
||||
}
|
||||
}
|
||||
let attrDamageValue = this.getDamageAttributeValue(this.rollData.weapon.system.properties.damageAttribute)
|
||||
let weaponFormula = BoLUtility.getDamageFormula(this.rollData.weapon.system, this.rollData.fightOption)
|
||||
@ -779,7 +793,7 @@ export class BoLDefaultRoll {
|
||||
//console.log("Formula", weaponFormula, damageFormula, this.rollData.weapon.data.data.properties.damage)
|
||||
this.rollData.damageFormula = damageFormula
|
||||
this.rollData.damageRoll = new Roll(damageFormula)
|
||||
await this.rollData.damageRoll.roll({ "async": false })
|
||||
await this.rollData.damageRoll.roll()
|
||||
this.rollData.damageTotal = this.rollData.damageRoll.total
|
||||
console.log("DAMAGE !!!", damageFormula, attrDamageValue, this.rollData)
|
||||
}
|
||||
|
@ -8,7 +8,7 @@ export class BoLItemSheet extends ItemSheet {
|
||||
|
||||
/** @override */
|
||||
static get defaultOptions() {
|
||||
return mergeObject(super.defaultOptions, {
|
||||
return foundry.utils.mergeObject(super.defaultOptions, {
|
||||
classes: ["bol", "sheet", "item"],
|
||||
template: "systems/bol/templates/item/item-sheet.hbs",
|
||||
width: 650,
|
||||
@ -21,14 +21,16 @@ export class BoLItemSheet extends ItemSheet {
|
||||
/** @override */
|
||||
async getData(options) {
|
||||
const data = super.getData(options)
|
||||
let itemData = duplicate(data.document)
|
||||
let itemData = foundry.utils.duplicate(data.document)
|
||||
data.config = game.bol.config
|
||||
data.item = itemData
|
||||
data.category = itemData.system.category
|
||||
data.isGM = game.user.isGM;
|
||||
data.itemProperties = this.item.itemProperties;
|
||||
data.description = await TextEditor.enrichHTML(this.object.system.description, { async: true })
|
||||
|
||||
if (data.document.actor) {
|
||||
data.careers = data.document.actor.careers
|
||||
}
|
||||
// Dynamic default data fix/adapt
|
||||
if (itemData.type == "item") {
|
||||
if (!itemData.system.category) {
|
||||
@ -76,7 +78,7 @@ export class BoLItemSheet extends ItemSheet {
|
||||
|
||||
/* -------------------------------------------- */
|
||||
postItem() {
|
||||
let chatData = duplicate(this.item)
|
||||
let chatData = foundry.utils.duplicate(this.item)
|
||||
if (this.actor) {
|
||||
chatData.actor = { id: this.actor.id };
|
||||
}
|
||||
|
@ -1,620 +0,0 @@
|
||||
{
|
||||
"titre1": [
|
||||
{
|
||||
"prefix": "la",
|
||||
"name": "Prophétie"
|
||||
},
|
||||
{
|
||||
"prefix": "les",
|
||||
"name": "Grottes",
|
||||
"isLieu": true
|
||||
},
|
||||
{
|
||||
"prefix": "les",
|
||||
"name": "Collines",
|
||||
"isLieu": true
|
||||
},
|
||||
{
|
||||
"prefix": "les",
|
||||
"name": "Voleurs",
|
||||
"isEnnemi": true,
|
||||
"isCarriere": true
|
||||
},
|
||||
{
|
||||
"prefix": "les",
|
||||
"name": "Sorcier(s)",
|
||||
"isEnnemi": true,
|
||||
"isCarriere": true
|
||||
},
|
||||
{
|
||||
"prefix": "la",
|
||||
"name": "Bataille"
|
||||
},
|
||||
{
|
||||
"prefix": "la",
|
||||
"name": "Légende"
|
||||
},
|
||||
{
|
||||
"prefix": "la",
|
||||
"name": "Tour",
|
||||
"isLieu": true
|
||||
},
|
||||
{
|
||||
"prefix": "l'",
|
||||
"name": "Ile",
|
||||
"isLieu": true
|
||||
},
|
||||
{
|
||||
"prefix": "les",
|
||||
"name": "Pirates",
|
||||
"isEnnemi": true,
|
||||
"isCarriere": true
|
||||
},
|
||||
{
|
||||
"prefix": "les",
|
||||
"name": "Druide(s)",
|
||||
"isEnnemi": true,
|
||||
"isCarriere": true
|
||||
},
|
||||
{
|
||||
"prefix": "le",
|
||||
"name": "Navire",
|
||||
"isCarriere": false
|
||||
},
|
||||
{
|
||||
"prefix": "la",
|
||||
"name": "Couronne",
|
||||
"isObjet": true
|
||||
},
|
||||
{
|
||||
"prefix": "la",
|
||||
"name": "Cité",
|
||||
"isLieu": true
|
||||
},
|
||||
{
|
||||
"prefix": "le",
|
||||
"name": "Désert",
|
||||
"isLieu": true
|
||||
},
|
||||
{
|
||||
"prefix": "les",
|
||||
"name": "Bête(s)",
|
||||
"isEnnemi": true,
|
||||
"isLieu": false
|
||||
},
|
||||
{
|
||||
"prefix": "les",
|
||||
"name": "Démon(s)",
|
||||
"isEnnemi": true,
|
||||
"isLieu": false
|
||||
},
|
||||
{
|
||||
"prefix": "le",
|
||||
"name": "Trésor",
|
||||
"isObjet": true
|
||||
},
|
||||
{
|
||||
"prefix": "l'",
|
||||
"name": "Epée",
|
||||
"isObjet": true
|
||||
},
|
||||
{
|
||||
"prefix": "l'",
|
||||
"name": "Arène",
|
||||
"isLieu": true
|
||||
},
|
||||
{
|
||||
"prefix": "les",
|
||||
"name": "Marais",
|
||||
"isLieu": true
|
||||
},
|
||||
{
|
||||
"prefix": "les",
|
||||
"name": "Seigneur(s)",
|
||||
"isEnnemi": true,
|
||||
"isLieu": false
|
||||
},
|
||||
{
|
||||
"prefix": "les",
|
||||
"name": "Assassin(s)",
|
||||
"isEnnemi": true,
|
||||
"isCarriere": true
|
||||
},
|
||||
{
|
||||
"prefix": "le",
|
||||
"name": "Culte",
|
||||
"isEnnemi": true,
|
||||
"isCarriere": false
|
||||
},
|
||||
{
|
||||
"prefix": "le",
|
||||
"name": "Secret",
|
||||
"isCarriere": false
|
||||
},
|
||||
{
|
||||
"prefix": "le",
|
||||
"name": "Palais",
|
||||
"isLieu": true
|
||||
},
|
||||
{
|
||||
"prefix": "la",
|
||||
"name": "Mer",
|
||||
"isLieu": true
|
||||
},
|
||||
{
|
||||
"prefix": "les",
|
||||
"name": "Barbares",
|
||||
"isEnnemi": true,
|
||||
"isCarriere": true
|
||||
},
|
||||
{
|
||||
"prefix": "le",
|
||||
"name": "Manuscrit",
|
||||
"isObjet": true
|
||||
},
|
||||
{
|
||||
"prefix": "les",
|
||||
"name": "Plaines",
|
||||
"isLieu": true
|
||||
},
|
||||
{
|
||||
"prefix": "le",
|
||||
"name": "Sang",
|
||||
"isLieu": false
|
||||
},
|
||||
{
|
||||
"prefix": "la",
|
||||
"name": "Tombe",
|
||||
"isLieu": true
|
||||
},
|
||||
{
|
||||
"prefix": "la",
|
||||
"name": "Forêt",
|
||||
"isLieu": true
|
||||
},
|
||||
{
|
||||
"prefix": "les",
|
||||
"name": "Esclaves",
|
||||
"isEnnemi": true,
|
||||
"isCarriere": true
|
||||
},
|
||||
{
|
||||
"prefix": "les",
|
||||
"name": "Mendiant(s)",
|
||||
"isEnnemi": true,
|
||||
"isCarriere": true
|
||||
},
|
||||
{
|
||||
"prefix": "les",
|
||||
"name": "Montagnes",
|
||||
"isCarriereLieu": true
|
||||
}
|
||||
],
|
||||
"titre2": [
|
||||
{
|
||||
"prefix": "du",
|
||||
"name": "mal"
|
||||
},
|
||||
{
|
||||
"prefix": "et le",
|
||||
"name": "Roi Maussade",
|
||||
"isEnnemi": true
|
||||
},
|
||||
{
|
||||
"prefix": "et la",
|
||||
"name": "pestilence",
|
||||
"isEnnemi": false
|
||||
},
|
||||
{
|
||||
"prefix": "de",
|
||||
"name": "Malakut",
|
||||
"isLieu": true
|
||||
},
|
||||
{
|
||||
"prefix": "d'",
|
||||
"name": "Halakh",
|
||||
"isLieu": true
|
||||
},
|
||||
{
|
||||
"prefix": "d'",
|
||||
"name": "Hyrdral",
|
||||
"isLieu": true
|
||||
},
|
||||
{
|
||||
"prefix": "des",
|
||||
"name": "esprits abandonnés",
|
||||
"isEnnemi": true
|
||||
},
|
||||
{
|
||||
"prefix": "du",
|
||||
"name": "chaos",
|
||||
"isEnnemi": true
|
||||
},
|
||||
{
|
||||
"prefix": "de la",
|
||||
"name": "folie",
|
||||
"isEnnemi": false
|
||||
},
|
||||
{
|
||||
"prefix": "de",
|
||||
"name": "Satarla",
|
||||
"isLieu": true
|
||||
},
|
||||
{
|
||||
"prefix": "d'",
|
||||
"name": "Urceb",
|
||||
"isLieu": true
|
||||
},
|
||||
{
|
||||
"prefix": "des",
|
||||
"name": "Terres Désolées",
|
||||
"isLieu": true
|
||||
},
|
||||
{
|
||||
"prefix": "de la",
|
||||
"name": "mort",
|
||||
"isLieu": false
|
||||
},
|
||||
{
|
||||
"prefix": "des",
|
||||
"name": "idoles impies",
|
||||
"isObjet": true
|
||||
},
|
||||
{
|
||||
"prefix": "des",
|
||||
"name": "ténèbres",
|
||||
"isObjet": false
|
||||
},
|
||||
{
|
||||
"prefix": "de",
|
||||
"name": "Parsool",
|
||||
"isLieu": true
|
||||
},
|
||||
{
|
||||
"prefix": "de",
|
||||
"name": "Qiddesh",
|
||||
"isLieu": true
|
||||
},
|
||||
{
|
||||
"prefix": "de",
|
||||
"name": "Kasht",
|
||||
"isLieu": true
|
||||
},
|
||||
{
|
||||
"prefix": "de la ",
|
||||
"name": "falalité",
|
||||
"isLieu": false
|
||||
},
|
||||
{
|
||||
"prefix": "du",
|
||||
"name": "Nécromant",
|
||||
"isEnnemi": true
|
||||
},
|
||||
{
|
||||
"prefix": "du",
|
||||
"name": "Néant",
|
||||
"isEnnemi": false
|
||||
},
|
||||
{
|
||||
"prefix": "de",
|
||||
"name": "Lysor",
|
||||
"isLieu": true
|
||||
},
|
||||
{
|
||||
"prefix": "d'",
|
||||
"name": "Oosal",
|
||||
"isLieu": true
|
||||
},
|
||||
{
|
||||
"prefix": "de",
|
||||
"name": "Thulé",
|
||||
"isLieu": true
|
||||
},
|
||||
{
|
||||
"prefix": "du",
|
||||
"name": "désespoir",
|
||||
"isLieu": false
|
||||
},
|
||||
{
|
||||
"prefix": "du",
|
||||
"name": "Dieu Bouffi",
|
||||
"isEnnemi": true
|
||||
},
|
||||
{
|
||||
"prefix": "du",
|
||||
"name": "silence",
|
||||
"isEnnemi": false
|
||||
},
|
||||
{
|
||||
"prefix": "de",
|
||||
"name": "Tyrus",
|
||||
"isLieu": true
|
||||
},
|
||||
{
|
||||
"prefix": "d'",
|
||||
"name": "Ygddar",
|
||||
"isLieu": true
|
||||
},
|
||||
{
|
||||
"prefix": "de",
|
||||
"name": "la Côte de Feu",
|
||||
"isLieu": true
|
||||
},
|
||||
{
|
||||
"prefix": "des",
|
||||
"name": "ombres cruelles",
|
||||
"isLieu": false
|
||||
},
|
||||
{
|
||||
"prefix": "de la",
|
||||
"name": "poussière écarlate",
|
||||
"isLieu": false
|
||||
},
|
||||
{
|
||||
"prefix": "du",
|
||||
"name": "destin",
|
||||
"isLieu": false
|
||||
},
|
||||
{
|
||||
"prefix": "du",
|
||||
"name": "Valgard",
|
||||
"isLieu": true
|
||||
},
|
||||
{
|
||||
"prefix": "de",
|
||||
"name": "Qeb",
|
||||
"isLieu": true
|
||||
},
|
||||
{
|
||||
"prefix": "de",
|
||||
"name": "la Mer Inconnue",
|
||||
"isLieu": true
|
||||
}
|
||||
],
|
||||
"mission": [
|
||||
{
|
||||
"name": "d’attaquer un lieu."
|
||||
},
|
||||
{
|
||||
"name": "de détruire un certain objet."
|
||||
},
|
||||
{
|
||||
"name": "de kidnapper quelqu’un."
|
||||
},
|
||||
{
|
||||
"name": "d’obtenir une certaine chose."
|
||||
},
|
||||
{
|
||||
"name": "d’explorer un lieu."
|
||||
},
|
||||
{
|
||||
"name": "de sauver une personne."
|
||||
},
|
||||
{
|
||||
"name": "d’échapper à quelqu’un."
|
||||
},
|
||||
{
|
||||
"name": "de fuir un lieu."
|
||||
},
|
||||
{
|
||||
"name": "de trouver une personne."
|
||||
},
|
||||
{
|
||||
"name": "de trouver un lieu."
|
||||
},
|
||||
{
|
||||
"name": "de trouver chose."
|
||||
},
|
||||
{
|
||||
"name": "de protéger une personne."
|
||||
},
|
||||
{
|
||||
"name": "de protéger un lieu."
|
||||
},
|
||||
{
|
||||
"name": "de protéger chose."
|
||||
},
|
||||
{
|
||||
"name": "de dérober une certaine chose."
|
||||
},
|
||||
{
|
||||
"name": "de tuer une personne."
|
||||
},
|
||||
{
|
||||
"name": "de détruire une chose."
|
||||
},
|
||||
{
|
||||
"name": "d’escorter une personne."
|
||||
},
|
||||
{
|
||||
"name": "de transporter une chose."
|
||||
}
|
||||
],
|
||||
"carriere": [
|
||||
"Noble",
|
||||
"Acrobate",
|
||||
"Sorcier",
|
||||
"Alchimiste",
|
||||
"Esclave",
|
||||
"Courtisane",
|
||||
"Médecin",
|
||||
"Marin",
|
||||
"Érudit",
|
||||
"Mendiant",
|
||||
"Scribe",
|
||||
"Poète",
|
||||
"Forgeron",
|
||||
"Prêtre",
|
||||
"Danseur",
|
||||
"Marchand",
|
||||
"Pilote des airs",
|
||||
"Fermier"
|
||||
],
|
||||
"lieux1": [
|
||||
"Palais",
|
||||
"Donjon",
|
||||
"Ruines",
|
||||
"Sanctuaire",
|
||||
"Crypte",
|
||||
"Forteresse",
|
||||
"Tombeau",
|
||||
"Grottes",
|
||||
"Tour",
|
||||
"Antre",
|
||||
"Île",
|
||||
"Montagne"
|
||||
],
|
||||
"lieux2": [
|
||||
"de la mort.",
|
||||
"de la destruction.",
|
||||
"du désespoir.",
|
||||
"des morts-vivants.",
|
||||
"du sage.",
|
||||
"de l'or.",
|
||||
"de la tempête.",
|
||||
"de la terreur.",
|
||||
"descannibales.",
|
||||
"du désespoir.",
|
||||
"des Rois-Sorciers.",
|
||||
"des âmes perdues."
|
||||
],
|
||||
"objets1": [
|
||||
"Livre",
|
||||
"Anneau",
|
||||
"Coupe",
|
||||
"Joyau",
|
||||
"Casque",
|
||||
"Parchemin",
|
||||
"Couronne",
|
||||
"Sceau",
|
||||
"Cristal",
|
||||
"Crâne",
|
||||
"Épée",
|
||||
"Bâton"
|
||||
],
|
||||
"objets2": [
|
||||
"des sept sceaux.",
|
||||
"de l'éternelle douleur.",
|
||||
"du sang bouillonnant.",
|
||||
"de la mort hideuse.",
|
||||
"du pouvoir suprême.",
|
||||
"du serpent sournois.",
|
||||
"du plaisir infini.",
|
||||
"de la richesse illusoire.",
|
||||
"de la cruelle trahison.",
|
||||
"du froid funeste.",
|
||||
"des spectres inapaisés.",
|
||||
"du mystère."
|
||||
],
|
||||
"motivation": [
|
||||
"c’est le genre de choses que fait Krongar.",
|
||||
"sinon il finira en prison.",
|
||||
"il est victime d’un chantage.",
|
||||
"il a trouvé une carte.",
|
||||
"il a été maudit.",
|
||||
"il a eu une vision (peut-être un soir de beuverie).",
|
||||
"il a été engagé pour le faire.",
|
||||
"il a surpris une conversation.",
|
||||
"il a lu quelque chose dans un ancien manuscrit.",
|
||||
"il est tombé accidentellement dans cette affaire.",
|
||||
"il cherche à assouvir une vengeance.",
|
||||
"il a ,été dupé."
|
||||
],
|
||||
"rival": [
|
||||
"un poète obsédé.",
|
||||
"un prince (esse) guerrier.",
|
||||
"un ministre corrompu.",
|
||||
"un sectateur fanatique.",
|
||||
"un noble arrogant.",
|
||||
"un étrange alchimiste.",
|
||||
"un sorcier maléfique.",
|
||||
"un druide cruel.",
|
||||
"un marchand cupide.",
|
||||
"un brigand sans foi ni loi.",
|
||||
"un démon sanguinaire.",
|
||||
"un fantôme errant."
|
||||
],
|
||||
"dieu": [
|
||||
"Tharungozoth",
|
||||
"Yrzlak",
|
||||
"Dyr",
|
||||
"Knothakon",
|
||||
"Hadron",
|
||||
"Shazzadion",
|
||||
"Chiomalla",
|
||||
"Sa’Tel",
|
||||
"Morgazzon",
|
||||
"Hurm",
|
||||
"Afyra",
|
||||
"Grondil",
|
||||
"Zaggath",
|
||||
"Zalkyr",
|
||||
"Fillana",
|
||||
"Lilandra",
|
||||
"Zylidith",
|
||||
"Quathoomar",
|
||||
"Iondal",
|
||||
"Piandra",
|
||||
"Nemmereth",
|
||||
"Charkond",
|
||||
"Karyzon",
|
||||
"Zarymphyxos",
|
||||
"Kryphondus"
|
||||
],
|
||||
"complique1": [
|
||||
"c’est toujours comme ça avec Krongar !",
|
||||
"la situation réveille chez Krongar des peurs ancestrales.",
|
||||
"un usurier et ses hommes de main veulent récupérer leur argent.",
|
||||
"une grave épidémie ravage la région.",
|
||||
"Krongar est traqué pour un crime passé.",
|
||||
"les actions d’un groupe de rebelles rendent la région peu sûre.",
|
||||
"des hordes de guerriers envahissent la région pour la conquérir",
|
||||
"un(e) ancien(ne) admirateur (trice) éconduit(e) cherche à se venger.",
|
||||
"la loi locale est très sévère et interdit une chose nécessaire à l’accomplissement de la mission.",
|
||||
"un(e) admirateur (trice) inattendu(e) déclare son amour.",
|
||||
"un rival qui fut défait autrefois réapparaît et met son grain de sel.",
|
||||
"la folie de Morgazzon fait des ravages dans la région."
|
||||
],
|
||||
"obstacle": [
|
||||
"d’un ancien secret.",
|
||||
"d’un long voyage.",
|
||||
"d’une malédiction.",
|
||||
"d’un voleur rusé.",
|
||||
"d’une forte troupe de soldats.",
|
||||
"d’un énorme monstre.",
|
||||
"d’une horde de monstres.",
|
||||
"d’un manque de temps.",
|
||||
"de gardes et de pièges magiques.",
|
||||
"d’une catastrophe naturelle sur le point de se produire.",
|
||||
"d’une énigme à résoudre.",
|
||||
"d’une bataille à gagner."
|
||||
],
|
||||
"retournement": [
|
||||
"L’ennemi est en fait Krongar lui-même, venu d’une autre réalité !",
|
||||
"Toute cette histoire était un piège machiavélique !",
|
||||
"L’ennemi est en fait un vieil ami ou un allié qui a comploté dans l’ombre !",
|
||||
"Krongar est contraint de s’associer à un rival pour accomplir la mission !",
|
||||
"Tout ce qui semblait ordinaire se révèle en fait surnaturel !",
|
||||
"L’ennemi est en fait le père, la mère, le frère ou la sœur de Krongar !",
|
||||
"Une toute autre mission attend en fait notre héros !",
|
||||
"Parfois, il n’y a pas de retournement de situation !",
|
||||
"i la mission est accomplie, cela entraînera de terribles répercussions !",
|
||||
"Le destin offre à Krongar une chance d’améliorer les choses, et il est renvoyé dans le temps au début de l’aventure. La saga recommence, mais cette fois sans retournement de situation !",
|
||||
"Un ami ou un allié a trahi Krongar !",
|
||||
"Les dieux sont furieux et lui imposent d'autres tâches"
|
||||
],
|
||||
"recompense": [
|
||||
"Rien du tout ! On s’est joué de lui !",
|
||||
"Beaucoup moins qu’escompté.",
|
||||
"Beaucoup moins qu’escompté, mais il gagne au moins la reconnaissance d’une personne haut placée.",
|
||||
"Beaucoup moins qu’escompté, mais il est marqué par les dieux (avantage).",
|
||||
"La récompense escomptée.",
|
||||
"La récompense escomptée, et il est marqué par les dieux (avantage).",
|
||||
"La récompense escomptée, ainsi que la reconnaissance d’une personne haut placée.",
|
||||
"Plus qu’escompté.",
|
||||
"Plus qu’escompté, ainsi que la reconnaissance d’une personne haut placée.",
|
||||
"Plus qu’escompté, et il est marqué par les dieux (avantage).",
|
||||
"Plus qu’escompté, ainsi que la reconnaissance d’une personne haut placée, et il est marqué par les dieux (avantage).",
|
||||
"Une promotion... Longue vie au roi Krongar !"
|
||||
]
|
||||
}
|
@ -33,9 +33,9 @@ export class BoLTokenHud {
|
||||
let action = hudData.actionsList[actionIndex]
|
||||
const actionItem = actor.items.get(action._id)
|
||||
if (actionItem.system.subtype == "weapon") {
|
||||
BoLRoll.weaponCheckWithWeapon(hudData.actor, duplicate(actionItem))
|
||||
BoLRoll.weaponCheckWithWeapon(hudData.actor, foundry.utils.duplicate(actionItem))
|
||||
} else if (actionItem.system.subtype == "fightoption") {
|
||||
let chatData = duplicate(actionItem)
|
||||
let chatData = foundry.utils.duplicate(actionItem)
|
||||
if (actionItem.actor) {
|
||||
chatData.actor = { id: actionItem.actor._id };
|
||||
}
|
||||
|
@ -1,86 +0,0 @@
|
||||
/* -------------------------------------------- */
|
||||
import { BoLUtility } from "./bol-utility.js";
|
||||
|
||||
/* -------------------------------------------- */
|
||||
export class BoLAdventureGenerator {
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static async init() {
|
||||
this.adventureData = await fetchJsonWithTimeout("systems/bol/module/system/adventure_data.json")
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static async createAdventure() {
|
||||
let roll1 = new Roll("1d" + this.adventureData.titre1.length).evaluate({ async: false })
|
||||
let roll2 = new Roll("1d" + this.adventureData.titre2.length).evaluate({ async: false })
|
||||
|
||||
let p1 = this.adventureData.titre1[roll1.result - 1]
|
||||
let p2 = this.adventureData.titre2[roll2.result - 1]
|
||||
|
||||
let story = {}
|
||||
story.title = "Krongar et " + p1.prefix + " " + p1.name + " " + p2.prefix + " " + p2.name
|
||||
|
||||
let rollM = new Roll("1d" + this.adventureData.mission.length).evaluate({ async: false })
|
||||
story.mission = "La mission de Krongar est de " + this.adventureData.mission[rollM.result - 1].name
|
||||
|
||||
if (!p1.isCarriere && !p2.isCarriere) {
|
||||
let rollC = new Roll("1d" + this.adventureData.carriere.length).evaluate({ async: false })
|
||||
story.carriere = "Une carrière : " + this.adventureData.carriere[rollC.result - 1]
|
||||
}
|
||||
|
||||
if (!p1.isLieu && !p2.isLieu) {
|
||||
let rollL1 = new Roll("1d" + this.adventureData.lieux1.length).evaluate({ async: false })
|
||||
let rollL2 = new Roll("1d" + this.adventureData.lieux2.length).evaluate({ async: false })
|
||||
story.lieu = "Un lieu : " + this.adventureData.lieux1[rollL1.result - 1] + " " + this.adventureData.lieux2[rollL2.result - 1]
|
||||
}
|
||||
|
||||
if (!p1.isObjet && !p2.isObjet) {
|
||||
let rollO1 = new Roll("1d" + this.adventureData.objets1.length).evaluate({ async: false })
|
||||
let rollO2 = new Roll("1d" + this.adventureData.objets2.length).evaluate({ async: false })
|
||||
story.objet = "Un objet : " + this.adventureData.objets1[rollO1.result - 1] + " " + this.adventureData.objets2[rollO2.result - 1]
|
||||
}
|
||||
|
||||
let rollMOT = new Roll("1d" + this.adventureData.motivation.length).evaluate({ async: false })
|
||||
story.motivation = "Krongar entreprend cette mission parce que " + this.adventureData.motivation[rollMOT.result - 1]
|
||||
|
||||
if (!p1.isEnnemi && !p2.isEnnemi) {
|
||||
let rollE = new Roll("1d" + this.adventureData.rival.length).evaluate({ async: false })
|
||||
story.rival = "Un rival : " + this.adventureData.rival[rollE.result - 1]
|
||||
}
|
||||
|
||||
let rollDieu = new Roll("1d6").evaluate({ async: false })
|
||||
if (rollDieu.result == 6) {
|
||||
rollDieu = new Roll("1d" + this.adventureData.dieu.length).evaluate({ async: false })
|
||||
story.dieu = "Un Dieu est impliqué : " + this.adventureData.dieu[rollDieu.result - 1]
|
||||
}
|
||||
|
||||
let rollComp = new Roll("1d6").evaluate({ async: false })
|
||||
if (rollComp.result >= 5) {
|
||||
rollComp = new Roll("1d" + this.adventureData.complique1.length).evaluate({ async: false })
|
||||
story.complication = "Une complication : " + this.adventureData.complique1[rollComp.result - 1]
|
||||
}
|
||||
|
||||
let rollObs = new Roll("1d6").evaluate({ async: false })
|
||||
if (rollObs.result >= 5) {
|
||||
rollObs = new Roll("1d" + this.adventureData.obstacle.length).evaluate({ async: false })
|
||||
story.obstacle = "Un obstacle : " + this.adventureData.obstacle[rollObs.result - 1]
|
||||
}
|
||||
|
||||
let rollRet = new Roll("1d6").evaluate({ async: false })
|
||||
if (rollRet.result == 6) {
|
||||
rollRet = new Roll("1d" + this.adventureData.retournement.length).evaluate({ async: false })
|
||||
story.retournement = "Un retournement : " + this.adventureData.retournement[rollRet.result - 1]
|
||||
}
|
||||
|
||||
let rollRec = new Roll("1d" + this.adventureData.recompense.length).evaluate({ async: false })
|
||||
story.recompense = "Pour sa peine, Krongar reçoit " + this.adventureData.recompense[rollRec.result - 1]
|
||||
|
||||
ChatMessage.create({
|
||||
alias: this.name,
|
||||
whisper: BoLUtility.getUsers(user => user.isGM),
|
||||
content: await renderTemplate('systems/bol/templates/chat/chat-adventure-result.hbs',
|
||||
{ name: "Aventure !", img: "icons/commodities/gems/gem-cluster-red.webp", story : story})
|
||||
})
|
||||
|
||||
}
|
||||
}
|
@ -40,14 +40,14 @@ export class BoLCalendar extends Application {
|
||||
constructor() {
|
||||
super();
|
||||
// position
|
||||
this.calendarPos = duplicate(game.settings.get("bol", "calendar-pos"));
|
||||
this.calendarPos = foundry.utils.duplicate(game.settings.get("bol", "calendar-pos"));
|
||||
if (this.calendarPos == undefined || this.calendarPos.top == undefined) {
|
||||
this.calendrierPos = BoLCalendar.createCalendarPos()
|
||||
game.settings.set("bol", "calendar-pos", this.calendarPos)
|
||||
}
|
||||
|
||||
// Calendar
|
||||
this.calendar = duplicate(game.settings.get("bol", "calendar") ?? BoLCalendar.getCalendar(0));
|
||||
this.calendar = foundry.utils.duplicate(game.settings.get("bol", "calendar") ?? BoLCalendar.getCalendar(0));
|
||||
this.calendar.year = this.calendar.year || 900
|
||||
this.calendar.month = 0
|
||||
|
||||
@ -58,7 +58,7 @@ export class BoLCalendar extends Application {
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static get defaultOptions() {
|
||||
return mergeObject(super.defaultOptions, {
|
||||
return foundry.utils.mergeObject(super.defaultOptions, {
|
||||
template: "systems/bol/templates/calendar-template.html",
|
||||
popOut: false,
|
||||
resizable: false
|
||||
@ -95,11 +95,11 @@ export class BoLCalendar extends Application {
|
||||
this.calendar.hour -= 24
|
||||
await this.incrementDay()
|
||||
}
|
||||
game.settings.set("bol", "calendar", duplicate(this.calendar));
|
||||
game.settings.set("bol", "calendar", foundry.utils.duplicate(this.calendar));
|
||||
// Notification aux joueurs // TODO: replace with Hook on game settings update
|
||||
game.socket.emit(SYSTEM_SOCKET_ID, {
|
||||
msg: "msg_sync_time",
|
||||
data: duplicate(this.calendrier)
|
||||
data: foundry.utils.duplicate(this.calendrier)
|
||||
});
|
||||
}
|
||||
|
||||
@ -112,7 +112,7 @@ export class BoLCalendar extends Application {
|
||||
|
||||
/* -------------------------------------------- */
|
||||
syncPlayerTime(calendrier) {
|
||||
this.calendrier = duplicate(calendrier); // Local copy update
|
||||
this.calendrier = foundry.utils.duplicate(calendrier); // Local copy update
|
||||
this.updateDisplay();
|
||||
}
|
||||
|
||||
@ -123,7 +123,7 @@ export class BoLCalendar extends Application {
|
||||
}
|
||||
this.calendrier.heureRdD = indexHeure;
|
||||
this.calendrier.minutesRelative = 0;
|
||||
game.settings.set(SYSTEM_RDD, "calendrier", duplicate(this.calendrier));
|
||||
game.settings.set(SYSTEM_RDD, "calendrier", foundry.utils.duplicate(this.calendrier));
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
@ -312,13 +312,13 @@ export class BoLCalendar extends Application {
|
||||
this.calendrier.jour = Number(calendrierData.jourMois) - 1;
|
||||
this.calendrier.moisRdD = RdDCalendrier.getChiffreFromSigne(calendrierData.moisKey);
|
||||
this.calendrier.heureRdD = RdDCalendrier.getChiffreFromSigne(calendrierData.heureKey);
|
||||
game.settings.set(SYSTEM_RDD, "calendrier", duplicate(this.calendrier));
|
||||
game.settings.set(SYSTEM_RDD, "calendrier", foundry.utils.duplicate(this.calendrier));
|
||||
|
||||
await this.rebuildListeNombreAstral();
|
||||
|
||||
game.socket.emit(SYSTEM_SOCKET_ID, {
|
||||
msg: "msg_sync_time",
|
||||
data: duplicate(this.calendrier)
|
||||
data: foundry.utils.duplicate(this.calendrier)
|
||||
});
|
||||
|
||||
this.updateDisplay();
|
||||
@ -326,7 +326,7 @@ export class BoLCalendar extends Application {
|
||||
|
||||
/* -------------------------------------------- */
|
||||
async showCalendarEditor() {
|
||||
let calendrierData = duplicate(this.fillCalendrierData());
|
||||
let calendrierData = foundry.utils.duplicate(this.fillCalendrierData());
|
||||
if (this.editeur == undefined) {
|
||||
calendrierData.jourMoisOptions = RdDCalendrier.buildJoursMois();
|
||||
calendrierData.heuresOptions = [0, 1];
|
||||
@ -344,7 +344,7 @@ export class BoLCalendar extends Application {
|
||||
|
||||
/* -------------------------------------------- */
|
||||
async showAstrologieEditor() {
|
||||
let calendrierData = duplicate(this.fillCalendrierData());
|
||||
let calendrierData = foundry.utils.duplicate(this.fillCalendrierData());
|
||||
let astrologieArray = [];
|
||||
this.listeNombreAstral = this.listeNombreAstral || [];
|
||||
for (let astralData of this.listeNombreAstral) {
|
||||
@ -353,7 +353,7 @@ export class BoLCalendar extends Application {
|
||||
let actor = game.actors.get(vf.actorId);
|
||||
vf.actorName = (actor) ? actor.name : "Inconnu";
|
||||
}
|
||||
astrologieArray.push(duplicate(astralData));
|
||||
astrologieArray.push(foundry.utils.duplicate(astralData));
|
||||
}
|
||||
let heuresParActeur = {};
|
||||
for (let actor of game.actors) {
|
||||
@ -448,7 +448,7 @@ export class BoLCalendar extends Application {
|
||||
game.system.rdd.calendrier.calendrierPos.top = yPos;
|
||||
game.system.rdd.calendrier.calendrierPos.left = xPos;
|
||||
if (game.user.isGM) {
|
||||
game.settings.set(SYSTEM_RDD, "calendrier-pos", duplicate(game.system.rdd.calendrier.calendrierPos));
|
||||
game.settings.set(SYSTEM_RDD, "calendrier-pos", foundry.utils.duplicate(game.system.rdd.calendrier.calendrierPos));
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -456,7 +456,7 @@ export class BoLCalendar extends Application {
|
||||
game.system.rdd.calendrier.calendrierPos.top = 200;
|
||||
game.system.rdd.calendrier.calendrierPos.left = 200;
|
||||
if (game.user.isGM) {
|
||||
game.settings.set(SYSTEM_RDD, "calendrier-pos", duplicate(game.system.rdd.calendrier.calendrierPos));
|
||||
game.settings.set(SYSTEM_RDD, "calendrier-pos", foundry.utils.duplicate(game.system.rdd.calendrier.calendrierPos));
|
||||
}
|
||||
this.setPos(game.system.rdd.calendrier.calendrierPos);
|
||||
}
|
||||
|
@ -1,162 +0,0 @@
|
||||
/* -------------------------------------------- */
|
||||
import { BoLUtility } from "./bol-utility.js";
|
||||
import { BoLRoll } from "../controllers/bol-rolls.js";
|
||||
|
||||
/* -------------------------------------------- */
|
||||
export class BoLCharacterSummary extends Application {
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static displayPCSummary(){
|
||||
game.bol.charSummary.render(true)
|
||||
}
|
||||
/* -------------------------------------------- */
|
||||
updatePCSummary(){
|
||||
if ( this.rendered) {
|
||||
this.render(true)
|
||||
}
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static createSummaryPos() {
|
||||
return { top: 200, left: 200 };
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static ready() {
|
||||
if ( !game.user.isGM ) { // Uniquement si GM
|
||||
return
|
||||
}
|
||||
let charSummary = new BoLCharacterSummary()
|
||||
game.bol.charSummary = charSummary
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
constructor() {
|
||||
super();
|
||||
//game.settings.set("world", "character-summary-data", {npcList: [], x:0, y:0})
|
||||
this.settings = game.settings.get("world", "character-summary-data")
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static get defaultOptions() {
|
||||
return mergeObject(super.defaultOptions, {
|
||||
template: "systems/bol/templates/apps/character-summary-template.html",
|
||||
popOut: true,
|
||||
resizable: true,
|
||||
dragDrop: [{ dragSelector: ".items-list .item", dropSelector: null }],
|
||||
classes: ["bol", "dialog"], width: 820, height: 'fit-content'
|
||||
})
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
getData() {
|
||||
let formData = super.getData();
|
||||
|
||||
formData.pcs = game.actors.filter( ac => ac.type == "character" && ac.hasPlayerOwner )
|
||||
formData.npcs = []
|
||||
let newList = []
|
||||
let toUpdate = false
|
||||
for( let actorId of this.settings.npcList ) {
|
||||
let actor = game.actors.get(actorId)
|
||||
if (actor) {
|
||||
formData.npcs.push( actor )
|
||||
newList.push(actorId)
|
||||
} else {
|
||||
toUpdate = true
|
||||
}
|
||||
}
|
||||
formData.config = game.bol.config
|
||||
formData.horoscopeGroupList = game.settings.get("bol", "horoscope-group")
|
||||
|
||||
if ( toUpdate ) {
|
||||
this.settings.npcList = newList
|
||||
//console.log("Going to update ...", this.settings)
|
||||
game.settings.set("world", "character-summary-data", this.settings)
|
||||
}
|
||||
|
||||
return formData
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
updateNPC() {
|
||||
game.settings.set("world", "character-summary-data", game.bol.charSummary.settings)
|
||||
game.bol.charSummary.close()
|
||||
setTimeout( function() { game.bol.charSummary.render(true)}, 500)
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
async _onDrop(event) {
|
||||
//console.log("Dragged data are : ", dragData)
|
||||
let data = event.dataTransfer.getData('text/plain')
|
||||
let dataItem = JSON.parse( data)
|
||||
let actor = fromUuidSync(dataItem.uuid)
|
||||
if (actor) {
|
||||
game.bol.charSummary.settings.npcList.push( actor.id )
|
||||
game.bol.charSummary.updateNPC()
|
||||
|
||||
} else {
|
||||
ui.notifications.warn( game.i18n.localize("BOL.ui.noactorfound") )
|
||||
}
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
/** @override */
|
||||
async activateListeners(html) {
|
||||
super.activateListeners(html);
|
||||
|
||||
html.find('.actor-open').click((event) => {
|
||||
const li = $(event.currentTarget).parents(".item")
|
||||
const actor = game.actors.get(li.data("actor-id"))
|
||||
actor.sheet.render(true)
|
||||
})
|
||||
|
||||
html.find('.summary-roll').click((event) => {
|
||||
const li = $(event.currentTarget).parents(".item")
|
||||
const actor = game.actors.get(li.data("actor-id"))
|
||||
let type = $(event.currentTarget).data("type")
|
||||
let key = $(event.currentTarget).data("key")
|
||||
if ( type == "attribute") {
|
||||
BoLRoll.attributeCheck(actor, key, event)
|
||||
} else if (type == "aptitude") {
|
||||
BoLRoll.aptitudeCheck(actor, key, event)
|
||||
}
|
||||
})
|
||||
|
||||
html.find('.actor-delete').click(event => {
|
||||
const li = $(event.currentTarget).parents(".item");
|
||||
let actorId = li.data("actor-id")
|
||||
let newList = game.bol.charSummary.settings.npcList.filter(id => id != actorId)
|
||||
game.bol.charSummary.settings.npcList = newList
|
||||
game.bol.charSummary.updateNPC()
|
||||
})
|
||||
|
||||
html.find('#horoscope-group-edit-available').change(event => {
|
||||
const horoId = $(event.currentTarget).data("horo-id")
|
||||
let newValue = event.currentTarget.value
|
||||
let horoscopes = duplicate(game.settings.get("bol", "horoscope-group"))
|
||||
if ( horoId && horoscopes[horoId]) {
|
||||
horoscopes[horoId].availableDice = Number(newValue)
|
||||
if (newValue <= 0) {
|
||||
horoscopes[horoId] = undefined
|
||||
}
|
||||
game.settings.set("bol", "horoscope-group", horoscopes)
|
||||
setTimeout(function() { BoLUtility.updateSheets()}, 800 )
|
||||
}
|
||||
})
|
||||
|
||||
html.find('#horoscope-group-edit-max').change(event => {
|
||||
const horoId = $(event.currentTarget).data("horo-id")
|
||||
let newValue = event.currentTarget.value
|
||||
let horoscopes = duplicate(game.settings.get("bol", "horoscope-group"))
|
||||
if ( horoId && horoscopes[horoId]) {
|
||||
horoscopes[horoId].maxDice = Number(newValue)
|
||||
if (newValue <= 0) {
|
||||
horoscopes[horoId] = undefined
|
||||
}
|
||||
game.settings.set("bol", "horoscope-group", horoscopes)
|
||||
setTimeout(function() { BoLUtility.updateSheets()}, 800 )
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
}
|
@ -21,12 +21,12 @@ export class BoLCombatManager extends Combat {
|
||||
// Structure input data
|
||||
ids = typeof ids === "string" ? [ids] : ids;
|
||||
// Get initiative malus from tough/adversary
|
||||
let malusInit = 0
|
||||
let malusInit = 0
|
||||
for (let combatant of this.combatants) {
|
||||
malusInit = Math.max(malusInit, combatant.actor.getInitiativeMalus())
|
||||
}
|
||||
// calculate initiative
|
||||
for (let cId = 0; cId < ids.length; cId++) {
|
||||
for (let cId = 0; cId < ids.length; cId++) {
|
||||
const combatant = this.combatants.get(ids[cId])
|
||||
let fvttInit = combatant.actor.getInitiativeRank(false, true, { combatId: this.id, combatantId: combatant.id, malusInit })
|
||||
fvttInit += (cId / 100)
|
||||
@ -39,17 +39,25 @@ export class BoLCombatManager extends Combat {
|
||||
if (game.user.isGM) {
|
||||
let combatants = this.combatants.contents
|
||||
let autoRemoveDead = game.settings.get("bol", "auto-remove-dead") // Optionnal auto-removal of dead char.
|
||||
let updates = []
|
||||
for (let c of combatants) {
|
||||
//let actor = game.actors.get(c.actorId)
|
||||
if (c.actor.type == "horde") {
|
||||
let actor = game.actors.get(c.actorId)
|
||||
updates.push({ _id: c.id, name: actor.name + " (" + actor.system.hordesize + ")" })
|
||||
}
|
||||
c.actor.clearRoundModifiers()
|
||||
let toRemove = []
|
||||
if (autoRemoveDead && c.actor.type == "encounter" && (c.actor.system.chartype == "tough" || c.actor.system.chartype == "creature" || c.actor.system.chartype == "base") && c.actor.system.resources.hp.value <= 0) {
|
||||
if (autoRemoveDead && c.actor.type == "encounter" &&
|
||||
(c.actor.system.chartype == "tough" || c.actor.system.chartype == "creature" || c.actor.system.chartype == "base") && c.actor.system.resources.hp.value <= 0) {
|
||||
toRemove.push(c.id || c._id)
|
||||
}
|
||||
//console.log("REM", autoRemoveDead, toRemove, c.actor)
|
||||
if (toRemove.length > 0) {
|
||||
this.deleteEmbeddedDocuments('Combatant', toRemove)
|
||||
}
|
||||
if (updates.length > 0) {
|
||||
this.updateEmbeddedDocuments('Combatant', updates)
|
||||
}
|
||||
}
|
||||
}
|
||||
super.nextRound()
|
||||
@ -58,11 +66,19 @@ export class BoLCombatManager extends Combat {
|
||||
/************************************************************************************/
|
||||
startCombat() {
|
||||
if (game.user.isGM) {
|
||||
let updates = []
|
||||
let combatants = this.combatants.contents
|
||||
for (let c of combatants) {
|
||||
let actor = game.actors.get(c.actorId)
|
||||
actor.storeVitaliteCombat()
|
||||
if (c.actor.type == "horde") {
|
||||
let actor = game.actors.get(c.actorId)
|
||||
updates.push({ _id: c.id, name: actor.name + " (" + actor.system.hordesize + ")" })
|
||||
}
|
||||
}
|
||||
if (updates.length > 0) {
|
||||
this.updateEmbeddedDocuments('Combatant', updates)
|
||||
}
|
||||
}
|
||||
return super.startCombat()
|
||||
}
|
||||
|
@ -1,6 +1,3 @@
|
||||
/* -------------------------------------------- */
|
||||
import { BoLAdventureGenerator } from "./bol-adventure-generator.js"
|
||||
import { BoLCharacterSummary } from "./bol-character-summary.js"
|
||||
|
||||
/* -------------------------------------------- */
|
||||
export class BoLCommands {
|
||||
@ -8,8 +5,6 @@ export class BoLCommands {
|
||||
static init() {
|
||||
if (!game.bol.commands) {
|
||||
const bolCommands = new BoLCommands()
|
||||
bolCommands.registerCommand({ path: ["/adventure"], func: (content, msg, params) => BoLAdventureGenerator.createAdventure(), descr: "Nouvelle idée d'aventure!" });
|
||||
bolCommands.registerCommand({ path: ["/pcview"], func: (content, msg, params) => BoLCharacterSummary.displayPCSummary(), descr: "Affiche la liste des PJs!" });
|
||||
game.bol.commands = bolCommands
|
||||
}
|
||||
|
||||
@ -88,7 +83,7 @@ export class BoLCommands {
|
||||
console.log("===> Processing command")
|
||||
let command = commandsTable[name];
|
||||
path = path + name + " ";
|
||||
if (command && command.subTable) {
|
||||
if (command?.subTable) {
|
||||
if (params[0]) {
|
||||
return this._processCommand(command.subTable, params[0], params.slice(1), content, msg, path)
|
||||
}
|
||||
@ -97,9 +92,9 @@ export class BoLCommands {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
if (command && command.func) {
|
||||
if (command?.func) {
|
||||
const result = command.func(content, msg, params);
|
||||
if (result == false) {
|
||||
if (!result) {
|
||||
BoLCommands._chatAnswer(msg, command.descr);
|
||||
}
|
||||
return true;
|
||||
|
@ -136,6 +136,10 @@ export class BoLUtility {
|
||||
this.successValue = Number(game.settings.get("bol", "dice-success-value"))
|
||||
this.criticalSuccessValue = Number(game.settings.get("bol", "dice-critical-success-value"))
|
||||
this.criticalFailureValue = Number(game.settings.get("bol", "dice-critical-failure-value"))
|
||||
|
||||
// Update the effect modifiers
|
||||
game.bol.config.effectIdentifiers = foundry.utils.mergeObject(game.bol.config.effectIdentifiers, game.bol.config.attackAttributes)
|
||||
game.bol.config.effectIdentifiers = foundry.utils.mergeObject(game.bol.config.effectIdentifiers, game.bol.config.aptitudes)
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
@ -196,7 +200,7 @@ export class BoLUtility {
|
||||
//$("#logo").attr("src", this.getLogoTopLeft() )
|
||||
$("#logo").css("content", `url(${this.getLogoTopLeft()})`)
|
||||
|
||||
CONFIG.statusEffects = duplicate(game.bol.config.statusEffects)
|
||||
CONFIG.statusEffects = foundry.utils.duplicate(game.bol.config.statusEffects)
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
@ -234,7 +238,7 @@ export class BoLUtility {
|
||||
|
||||
renderTemplate('systems/bol/templates/item/post-item.hbs', chatData).then(html => {
|
||||
let chatOptions = BoLUtility.chatDataSetup(html);
|
||||
ChatMessage.create(chatOptions, "selfroll")
|
||||
ChatMessage.create(chatOptions)
|
||||
});
|
||||
}
|
||||
/* -------------------------------------------- */
|
||||
@ -311,7 +315,7 @@ export class BoLUtility {
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static blindMessageToGM(chatOptions) {
|
||||
let chatGM = duplicate(chatOptions);
|
||||
let chatGM = foundry.utils.duplicate(chatOptions);
|
||||
chatGM.whisper = this.getUsers(user => user.isGM);
|
||||
chatGM.content = "Blind message of " + game.user.name + "<br>" + chatOptions.content;
|
||||
console.log("blindMessageToGM", chatGM);
|
||||
@ -323,7 +327,7 @@ export class BoLUtility {
|
||||
if (rollData.targetId) {
|
||||
// Broadcast to GM or process it directly in case of GM defense
|
||||
if (!game.user.isGM) {
|
||||
game.socket.emit("system.bol", { name: "msg_attack_success", data: duplicate(rollData) })
|
||||
game.socket.emit("system.bol", { name: "msg_attack_success", data: foundry.utils.duplicate(rollData) })
|
||||
} else {
|
||||
BoLUtility.processAttackSuccess(rollData)
|
||||
}
|
||||
@ -337,7 +341,7 @@ export class BoLUtility {
|
||||
// If the user is the message author or the actor owner, proceed
|
||||
const actor = game.actors.get(data.message.speaker.actor)
|
||||
//console.log("FOUND 1!!! ", actor)
|
||||
if (actor && actor.isOwner) return
|
||||
if (actor?.isOwner) return
|
||||
else if (game.user.isGM || data.author.id === game.user.id) return
|
||||
|
||||
const divButtons = chatCard.find('.actions-section')
|
||||
@ -354,7 +358,7 @@ export class BoLUtility {
|
||||
/* -------------------------------------------- */
|
||||
static requestInitRoll(actorId, combatData) {
|
||||
let actor = game.actors.get(actorId)
|
||||
if (actor && actor.isOwner) {
|
||||
if (actor?.isOwner) {
|
||||
ui.notifications.info(game.i18n.localize("BOL.ui.warninitiative"))
|
||||
BoLRoll.aptitudeCheck(actor, "init", undefined, combatData)
|
||||
}
|
||||
@ -447,7 +451,7 @@ export class BoLUtility {
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static async processDamageHandling(attackId, defenseMode, weaponId = -1, msgId) {
|
||||
static async processDamageHandling(attackId, defenseMode, weaponId, msgId) {
|
||||
if (!game.user.isGM) {
|
||||
return
|
||||
}
|
||||
@ -457,7 +461,7 @@ export class BoLUtility {
|
||||
|
||||
console.log("Damage Handling", attackId, defenseMode, weaponId)
|
||||
// Only GM process this
|
||||
if (rollData && rollData.defenderId) {
|
||||
if (rollData?.defenderId) {
|
||||
if (rollData.defenseDone || defenseMode == 'damage-not-applied') {
|
||||
return
|
||||
} // ?? Why ???
|
||||
@ -469,11 +473,15 @@ export class BoLUtility {
|
||||
if (defenseMode == 'damage-with-armor') {
|
||||
let armorFormula = defender.getArmorFormula()
|
||||
rollData.rollArmor = new Roll(armorFormula)
|
||||
rollData.rollArmor.roll({ async: false })
|
||||
await rollData.rollArmor.roll()
|
||||
let msg = await rollData.rollArmor.toMessage({ flavor: "BOL.chat.armorRoll : " + armorFormula });
|
||||
if ( game.dice3d) { // wait animation end when DsN is there
|
||||
await game.dice3d.waitFor3DAnimationByMessageID(msg.id);
|
||||
}
|
||||
rollData.armorProtect = (rollData.rollArmor.total < 0) ? 0 : rollData.rollArmor.total
|
||||
rollData.finalDamage = rollData.damageTotal - rollData.armorProtect
|
||||
rollData.finalDamage = (rollData.finalDamage < 0) ? 0 : rollData.finalDamage
|
||||
defender.sufferDamage(rollData.finalDamage)
|
||||
await defender.sufferDamage(rollData.finalDamage)
|
||||
console.log("Armor roll -> result ", rollData)
|
||||
}
|
||||
if (defenseMode == 'damage-without-armor') {
|
||||
@ -483,19 +491,19 @@ export class BoLUtility {
|
||||
if (defenseMode == 'hero-reduce-damage') {
|
||||
let armorFormula = defender.getArmorFormula()
|
||||
rollData.rollArmor = new Roll(armorFormula)
|
||||
rollData.rollArmor.roll({ async: false })
|
||||
await rollData.rollArmor.roll()
|
||||
rollData.armorProtect = (rollData.rollArmor.total < 0) ? 0 : rollData.rollArmor.total
|
||||
rollData.rollHero = new Roll("1d6")
|
||||
rollData.rollHero.roll({ async: false })
|
||||
await rollData.rollHero.roll()
|
||||
rollData.finalDamage = rollData.damageTotal - rollData.rollHero.total - rollData.armorProtect
|
||||
rollData.finalDamage = (rollData.finalDamage < 0) ? 0 : rollData.finalDamage
|
||||
defender.sufferDamage(rollData.finalDamage)
|
||||
await defender.sufferDamage(rollData.finalDamage)
|
||||
defender.subHeroPoints(1)
|
||||
}
|
||||
if (defenseMode == 'hero-in-extremis') {
|
||||
rollData.finalDamage = 0;
|
||||
rollData.weaponHero = defender.weapons.find(item => item._id == weaponId);
|
||||
defender.deleteEmbeddedDocuments("Item", [weaponId]);
|
||||
await defender.deleteEmbeddedDocuments("Item", [weaponId]);
|
||||
}
|
||||
|
||||
let defenderUser
|
||||
@ -668,7 +676,6 @@ export class BoLUtility {
|
||||
let res = myReg.exec(damageString)
|
||||
let nbDice = parseInt(res[1])
|
||||
let postForm = 'kh' + nbDice
|
||||
let modIndex = 3
|
||||
// Upgrade damage if needed
|
||||
if (upgradeDamage && (!res[3] || res[3] == "")) {
|
||||
res[3] = "B" // Upgrade to bonus
|
||||
@ -680,22 +687,18 @@ export class BoLUtility {
|
||||
if (res[3] == 'M') {
|
||||
postForm = 'kl' + nbDice
|
||||
nbDice++
|
||||
modIndex = 4
|
||||
}
|
||||
if (res[3] == 'MM') {
|
||||
postForm = 'kl' + nbDice
|
||||
nbDice += 2
|
||||
modIndex = 4
|
||||
}
|
||||
if (res[3] == 'B') {
|
||||
postForm = 'kh' + nbDice
|
||||
nbDice++
|
||||
modIndex = 4
|
||||
}
|
||||
if (res[3] == 'BB') {
|
||||
postForm = 'kh' + nbDice
|
||||
nbDice += 2
|
||||
modIndex = 4
|
||||
}
|
||||
}
|
||||
formula = "(" + nbDice + "d" + res[2] + reroll + postForm + "+" + modifier + ") *" + multiplier
|
||||
@ -742,8 +745,8 @@ export class BoLUtility {
|
||||
/* -------------------------------------------- */
|
||||
static removeGroupHoroscope(rollData) {
|
||||
let horo = rollData.horoscopeGroupList[rollData.selectedGroupHoroscopeIndex]
|
||||
let horoscopes = duplicate(game.settings.get("bol", "horoscope-group"))
|
||||
let toChange = duplicate(horoscopes[horo.id])
|
||||
let horoscopes = foundry.utils.duplicate(game.settings.get("bol", "horoscope-group"))
|
||||
let toChange = foundry.utils.duplicate(horoscopes[horo.id])
|
||||
toChange.availableDice -= horo.nbDice // Remove the dice
|
||||
if (toChange.availableDice <= 0) {
|
||||
horoscopes[horo.id] = undefined
|
||||
|
@ -10,14 +10,15 @@ System.debugMode = true;
|
||||
export const BOL = {};
|
||||
|
||||
BOL.damageValues = {
|
||||
"1": "1",
|
||||
"2": "2",
|
||||
"3": "3",
|
||||
"d3" : "d3",
|
||||
"d6M" : "d6M (Malus)",
|
||||
"d6" : "d6",
|
||||
"d6B" : "d6B (Bonus)",
|
||||
"d6BB" : "d6B + dé bonus",
|
||||
"0": "0",
|
||||
"1": "1",
|
||||
"2": "2",
|
||||
"3": "3",
|
||||
"d3": "d3",
|
||||
"d6M": "d6M (Malus)",
|
||||
"d6": "d6",
|
||||
"d6B": "d6B (Bonus)",
|
||||
"d6BB": "d6B + dé bonus",
|
||||
}
|
||||
|
||||
BOL.damageMultiplier = {
|
||||
@ -31,6 +32,15 @@ BOL.damageMultiplier = {
|
||||
"8": "x8"
|
||||
}
|
||||
|
||||
BOL.listTypes = {
|
||||
"attribute": "BOL.ui.attribute",
|
||||
"aptitude": "BOL.ui.aptitude",
|
||||
"career": "BOL.ui.career",
|
||||
"boon": "BOL.ui.boon",
|
||||
"flaw": "BOL.ui.flaw",
|
||||
"other": "BOL.ui.other"
|
||||
}
|
||||
|
||||
BOL.spellType = {
|
||||
"0": "BOL.spellItem.charm",
|
||||
"1": "BOL.spellItem.circle1",
|
||||
@ -46,125 +56,125 @@ BOL.alchemyType = {
|
||||
}
|
||||
|
||||
BOL.equipmentSlots = {
|
||||
"none" : "BOL.equipmentSlots.none",
|
||||
"head" : "BOL.equipmentSlots.head",
|
||||
"neck" : "BOL.equipmentSlots.neck",
|
||||
"shoulders" : "BOL.equipmentSlots.shoulders",
|
||||
"body" : "BOL.equipmentSlots.body",
|
||||
"rhand" : "BOL.equipmentSlots.rhand",
|
||||
"lhand" : "BOL.equipmentSlots.lhand",
|
||||
"2hands" : "BOL.equipmentSlots.2hands",
|
||||
"rarm" : "BOL.equipmentSlots.rarm",
|
||||
"larm" : "BOL.equipmentSlots.larm",
|
||||
"chest" : "BOL.equipmentSlots.chest",
|
||||
"belt" : "BOL.equipmentSlots.belt",
|
||||
"legs" : "BOL.equipmentSlots.legs",
|
||||
"feet" : "BOL.equipmentSlots.feet",
|
||||
"finder" : "BOL.equipmentSlots.finder",
|
||||
"ear" : "BOL.equipmentSlots.ear"
|
||||
"none": "BOL.equipmentSlots.none",
|
||||
"head": "BOL.equipmentSlots.head",
|
||||
"neck": "BOL.equipmentSlots.neck",
|
||||
"shoulders": "BOL.equipmentSlots.shoulders",
|
||||
"body": "BOL.equipmentSlots.body",
|
||||
"rhand": "BOL.equipmentSlots.rhand",
|
||||
"lhand": "BOL.equipmentSlots.lhand",
|
||||
"2hands": "BOL.equipmentSlots.2hands",
|
||||
"rarm": "BOL.equipmentSlots.rarm",
|
||||
"larm": "BOL.equipmentSlots.larm",
|
||||
"chest": "BOL.equipmentSlots.chest",
|
||||
"belt": "BOL.equipmentSlots.belt",
|
||||
"legs": "BOL.equipmentSlots.legs",
|
||||
"feet": "BOL.equipmentSlots.feet",
|
||||
"finder": "BOL.equipmentSlots.finder",
|
||||
"ear": "BOL.equipmentSlots.ear"
|
||||
}
|
||||
|
||||
BOL.armorQualities = {
|
||||
"none" : "BOL.armorQuality.none",
|
||||
"light" : "BOL.armorQuality.light",
|
||||
"lightQ" : "BOL.armorQuality.lightQ",
|
||||
"lightSup" : "BOL.armorQuality.lightSup",
|
||||
"lightLeg" : "BOL.armorQuality.lightLeg",
|
||||
"medium" : "BOL.armorQuality.medium",
|
||||
"mediumQ" : "BOL.armorQuality.mediumQ",
|
||||
"mediumSup" : "BOL.armorQuality.mediumSup",
|
||||
"mediumLeg" : "BOL.armorQuality.mediumLeg",
|
||||
"heavy" : "BOL.armorQuality.heavy",
|
||||
"heavyQ" : "BOL.armorQuality.heavyQ",
|
||||
"heavySup" : "BOL.armorQuality.heavySup",
|
||||
"heavyLeg" : "BOL.armorQuality.heavyLeg"
|
||||
"none": "BOL.armorQuality.none",
|
||||
"light": "BOL.armorQuality.light",
|
||||
"lightQ": "BOL.armorQuality.lightQ",
|
||||
"lightSup": "BOL.armorQuality.lightSup",
|
||||
"lightLeg": "BOL.armorQuality.lightLeg",
|
||||
"medium": "BOL.armorQuality.medium",
|
||||
"mediumQ": "BOL.armorQuality.mediumQ",
|
||||
"mediumSup": "BOL.armorQuality.mediumSup",
|
||||
"mediumLeg": "BOL.armorQuality.mediumLeg",
|
||||
"heavy": "BOL.armorQuality.heavy",
|
||||
"heavyQ": "BOL.armorQuality.heavyQ",
|
||||
"heavySup": "BOL.armorQuality.heavySup",
|
||||
"heavyLeg": "BOL.armorQuality.heavyLeg"
|
||||
}
|
||||
|
||||
BOL.soakFormulas = {
|
||||
"none" : "0",
|
||||
"light" : "1d6-3",
|
||||
"lightQ" : "1d6r1-3",
|
||||
"lightSup" : "1d6-2",
|
||||
"lightLeg" : "2d6kh1-2",
|
||||
"medium" : "1d6-2",
|
||||
"mediumQ" : "1d6r1-2",
|
||||
"mediumSup" : "1d6-1",
|
||||
"mediumLeg" : "2d6kh1-1",
|
||||
"heavy" : "1d6-1",
|
||||
"heavyQ" : "1d6r1-1",
|
||||
"heavySup" : "1d6",
|
||||
"heavyLeg" : "2d6kh1"
|
||||
"none": "0",
|
||||
"light": "1d6-3",
|
||||
"lightQ": "1d6r1-3",
|
||||
"lightSup": "1d6-2",
|
||||
"lightLeg": "2d6kh1-2",
|
||||
"medium": "1d6-2",
|
||||
"mediumQ": "1d6r1-2",
|
||||
"mediumSup": "1d6-1",
|
||||
"mediumLeg": "2d6kh1-1",
|
||||
"heavy": "1d6-1",
|
||||
"heavyQ": "1d6r1-1",
|
||||
"heavySup": "1d6",
|
||||
"heavyLeg": "2d6kh1"
|
||||
}
|
||||
|
||||
BOL.attackAttributes = {
|
||||
"vigor" : "BOL.attributes.vigor",
|
||||
"agility" : "BOL.attributes.agility",
|
||||
"mind" : "BOL.attributes.mind",
|
||||
"appeal" : "BOL.attributes.appeal"
|
||||
"vigor": "BOL.attributes.vigor",
|
||||
"agility": "BOL.attributes.agility",
|
||||
"mind": "BOL.attributes.mind",
|
||||
"appeal": "BOL.attributes.appeal"
|
||||
}
|
||||
|
||||
BOL.attackAptitudes = {
|
||||
"melee" : "BOL.aptitudes.melee",
|
||||
"ranged" : "BOL.aptitudes.ranged"
|
||||
"melee": "BOL.aptitudes.melee",
|
||||
"ranged": "BOL.aptitudes.ranged"
|
||||
}
|
||||
|
||||
BOL.aptitudes = {
|
||||
"melee" : "BOL.aptitudes.melee",
|
||||
"ranged" : "BOL.aptitudes.ranged",
|
||||
"init" : "BOL.aptitudes.init",
|
||||
"def" : "BOL.aptitudes.def"
|
||||
"melee": "BOL.aptitudes.melee",
|
||||
"ranged": "BOL.aptitudes.ranged",
|
||||
"init": "BOL.aptitudes.init",
|
||||
"def": "BOL.aptitudes.def"
|
||||
}
|
||||
|
||||
BOL.resources = {
|
||||
"hp" : "BOL.resources.hp",
|
||||
"hero" : "BOL.resources.hero",
|
||||
"faith" : "BOL.resources.faith",
|
||||
"power" : "BOL.resources.power",
|
||||
"alchemypoints" : "BOL.resources.alchemypoints"
|
||||
"hp": "BOL.resources.hp",
|
||||
"hero": "BOL.resources.hero",
|
||||
"faith": "BOL.resources.faith",
|
||||
"power": "BOL.resources.power",
|
||||
"alchemypoints": "BOL.resources.alchemypoints"
|
||||
}
|
||||
|
||||
BOL.weaponSizes = {
|
||||
"unarmed" : "BOL.weaponSize.unarmed",
|
||||
"improvised" : "BOL.weaponSize.improvised",
|
||||
"light" : "BOL.weaponSize.light",
|
||||
"medium" : "BOL.weaponSize.medium",
|
||||
"heavy" : "BOL.weaponSize.heavy"
|
||||
"unarmed": "BOL.weaponSize.unarmed",
|
||||
"improvised": "BOL.weaponSize.improvised",
|
||||
"light": "BOL.weaponSize.light",
|
||||
"medium": "BOL.weaponSize.medium",
|
||||
"heavy": "BOL.weaponSize.heavy"
|
||||
}
|
||||
|
||||
BOL.damageAttributes = {
|
||||
"zero" : "0",
|
||||
"vigor" : "BOL.attributes.vigor",
|
||||
"half-vigor" : "BOL.attributes.halfvigor"
|
||||
"zero": "0",
|
||||
"vigor": "BOL.attributes.vigor",
|
||||
"half-vigor": "BOL.attributes.halfvigor"
|
||||
}
|
||||
|
||||
BOL.itemCategories = {
|
||||
"equipment" : "BOL.itemCategory.equipment",
|
||||
"capacity" : "BOL.itemCategory.capacity",
|
||||
"spell" : "BOL.itemCategory.spell",
|
||||
"alchemy" : "BOL.itemCategory.alchemy",
|
||||
"vehicle" : "BOL.itemCategory.vehicle",
|
||||
"vehicleweapon": "BOL.itemCategory.vehicleweapon",
|
||||
"other" : "BOL.itemCategory.other"
|
||||
"equipment": "BOL.itemCategory.equipment",
|
||||
"capacity": "BOL.itemCategory.capacity",
|
||||
"spell": "BOL.itemCategory.spell",
|
||||
"alchemy": "BOL.itemCategory.alchemy",
|
||||
"vehicle": "BOL.itemCategory.vehicle",
|
||||
"vehicleweapon": "BOL.itemCategory.vehicleweapon",
|
||||
"other": "BOL.itemCategory.other"
|
||||
}
|
||||
|
||||
BOL.itemSubtypes = {
|
||||
"armor" : "BOL.equipmentCategory.armor",
|
||||
"weapon" : "BOL.equipmentCategory.weapon",
|
||||
"shield" : "BOL.equipmentCategory.shield",
|
||||
"helm" : "BOL.equipmentCategory.helm",
|
||||
"jewel" : "BOL.equipmentCategory.jewel",
|
||||
"scroll" : "BOL.equipmentCategory.scroll",
|
||||
"container" : "BOL.equipmentCategory.container",
|
||||
"ammunition" : "BOL.equipmentCategory.ammunition",
|
||||
"currency" : "BOL.equipmentCategory.currency",
|
||||
"other" : "BOL.equipmentCategory.other"
|
||||
"armor": "BOL.equipmentCategory.armor",
|
||||
"weapon": "BOL.equipmentCategory.weapon",
|
||||
"shield": "BOL.equipmentCategory.shield",
|
||||
"helm": "BOL.equipmentCategory.helm",
|
||||
"jewel": "BOL.equipmentCategory.jewel",
|
||||
"scroll": "BOL.equipmentCategory.scroll",
|
||||
"container": "BOL.equipmentCategory.container",
|
||||
"ammunition": "BOL.equipmentCategory.ammunition",
|
||||
"currency": "BOL.equipmentCategory.currency",
|
||||
"other": "BOL.equipmentCategory.other"
|
||||
}
|
||||
|
||||
BOL.vehicleSubtypes = {
|
||||
"mount" : "BOL.vehicleCategory.mount",
|
||||
"flying" : "BOL.vehicleCategory.flying",
|
||||
"boat" : "BOL.vehicleCategory.boat",
|
||||
"other" : "BOL.vehicleCategory.other"
|
||||
"mount": "BOL.vehicleCategory.mount",
|
||||
"flying": "BOL.vehicleCategory.flying",
|
||||
"boat": "BOL.vehicleCategory.boat",
|
||||
"other": "BOL.vehicleCategory.other"
|
||||
}
|
||||
|
||||
// BOL.equipmentCategories = {
|
||||
@ -180,97 +190,153 @@ BOL.vehicleSubtypes = {
|
||||
// "other" : "BOL.equipmentCategory.other"
|
||||
// }
|
||||
|
||||
BOL.rangeModifiers = {
|
||||
"1": "BOL.dialog.pointblank",
|
||||
"0": "BOL.dialog.close",
|
||||
"-1": "BOL.dialog.medium",
|
||||
"-2": "BOL.dialog.long",
|
||||
"-4": "BOL.dialog.distant",
|
||||
"-6": "BOL.dialog.extreme",
|
||||
"-8": "BOL.dialog.utmost"
|
||||
}
|
||||
|
||||
BOL.difficultyModifiers = {
|
||||
"4": "BOL.dialog.soeasy",
|
||||
"2": "BOL.dialog.veryeasy",
|
||||
"1": "BOL.dialog.easy",
|
||||
"0": "BOL.dialog.moderate",
|
||||
"-1": "BOL.dialog.hard",
|
||||
"-2": "BOL.dialog.tough",
|
||||
"-4": "BOL.dialog.demanding",
|
||||
"-6": "BOL.dialog.formidable",
|
||||
"-8": "BOL.dialog.heroic",
|
||||
"-10": "BOL.dialog.mythic",
|
||||
"-12": "BOL.dialog.divine"
|
||||
}
|
||||
|
||||
BOL.alchemyModifiers = {
|
||||
"2": "BOL.dialog.veryeasy",
|
||||
"1": "BOL.dialog.easy",
|
||||
"0": "BOL.dialog.moderate",
|
||||
"-1": "BOL.dialog.hard",
|
||||
"-2": "BOL.dialog.tough",
|
||||
"-4": "BOL.dialog.demanding",
|
||||
"-6": "BOL.dialog.formidable",
|
||||
"-8": "BOL.dialog.heroic",
|
||||
}
|
||||
BOL.spellModifiers = BOL.alchemyModifiers
|
||||
|
||||
BOL.spellMandatoryConditions = {
|
||||
"1": "1",
|
||||
"2": "2",
|
||||
"3": "3",
|
||||
"4": "4"
|
||||
}
|
||||
BOL.spellOptionnalConditions = {
|
||||
"1": "1",
|
||||
"2": "2",
|
||||
"3": "3",
|
||||
"4": "4",
|
||||
"5": "5",
|
||||
"6": "6",
|
||||
"7": "7",
|
||||
"8": "8"
|
||||
}
|
||||
BOL.effectIdentifiers = {
|
||||
"always": "BOL.ui.always",
|
||||
}
|
||||
BOL.protectionCategories = {
|
||||
"armor" : "BOL.protectionCategory.armor",
|
||||
"shield" : "BOL.protectionCategory.shield",
|
||||
"helm" : "BOL.protectionCategory.helm",
|
||||
"other" : "BOL.protectionCategory.other"
|
||||
"armor": "BOL.protectionCategory.armor",
|
||||
"shield": "BOL.protectionCategory.shield",
|
||||
"helm": "BOL.protectionCategory.helm",
|
||||
"other": "BOL.protectionCategory.other"
|
||||
}
|
||||
|
||||
BOL.weaponCategories = {
|
||||
"melee" : "BOL.weaponCategory.melee",
|
||||
"ranged" : "BOL.weaponCategory.ranged",
|
||||
"other" : "BOL.weaponCategory.other"
|
||||
"melee": "BOL.weaponCategory.melee",
|
||||
"ranged": "BOL.weaponCategory.ranged",
|
||||
"other": "BOL.weaponCategory.other"
|
||||
}
|
||||
|
||||
BOL.itemProperties1 = {
|
||||
"equipable" : "BOL.itemProperty.equipable",
|
||||
"protection" : "BOL.itemProperty.protection",
|
||||
"magical" : "BOL.itemProperty.magical",
|
||||
"worn" : "BOL.itemProperty.worn",
|
||||
"equipable": "BOL.itemProperty.equipable",
|
||||
"protection": "BOL.itemProperty.protection",
|
||||
"magical": "BOL.itemProperty.magical",
|
||||
"worn": "BOL.itemProperty.worn",
|
||||
}
|
||||
|
||||
BOL.itemProperties2 = {
|
||||
"equipable" : "BOL.itemProperty.equipable",
|
||||
"protection" : "BOL.itemProperty.protection",
|
||||
"blocking" : "BOL.itemProperty.blocking",
|
||||
"magical" : "BOL.itemProperty.magical",
|
||||
"concealable" : "BOL.itemProperty.concealable",
|
||||
"2H" : "BOL.itemProperty.2H",
|
||||
"helm" : "BOL.itemProperty.helm",
|
||||
"improvised" : "BOL.itemProperty.improvised",
|
||||
"shield" : "BOL.itemProperty.shield",
|
||||
"melee" : "BOL.itemProperty.melee",
|
||||
"throwable" : "BOL.itemProperty.throwable",
|
||||
"ignoreshield" : "BOL.itemProperty.ignoreshield",
|
||||
"bashing" : "BOL.itemProperty.bashing",
|
||||
"stackable" : "BOL.itemProperty.stackable",
|
||||
"ranged" : "BOL.itemProperty.ranged",
|
||||
"weapon" : "BOL.itemProperty.weapon",
|
||||
"reloadable" : "BOL.itemProperty.reloadable",
|
||||
"worn" : "BOL.itemProperty.worn",
|
||||
"spell" : "BOL.itemProperty.spell",
|
||||
"armor" : "BOL.itemProperty.armor",
|
||||
"consumable" : "BOL.itemProperty.consumable",
|
||||
"bow" : "BOL.itemProperty.bow",
|
||||
"crossbow" : "BOL.itemProperty.crossbow",
|
||||
"throwing" : "BOL.itemProperty.throwing",
|
||||
"activable" : "BOL.itemProperty.activable",
|
||||
"powder" : "BOL.itemProperty.powder",
|
||||
"damage" : "BOL.itemProperty.damage",
|
||||
"difficulty": "BOL.itemProperty.difficulty"
|
||||
"equipable": "BOL.itemProperty.equipable",
|
||||
"protection": "BOL.itemProperty.protection",
|
||||
"blocking": "BOL.itemProperty.blocking",
|
||||
"magical": "BOL.itemProperty.magical",
|
||||
"concealable": "BOL.itemProperty.concealable",
|
||||
"2H": "BOL.itemProperty.2H",
|
||||
"helm": "BOL.itemProperty.helm",
|
||||
"improvised": "BOL.itemProperty.improvised",
|
||||
"shield": "BOL.itemProperty.shield",
|
||||
"melee": "BOL.itemProperty.melee",
|
||||
"throwable": "BOL.itemProperty.throwable",
|
||||
"ignoreshield": "BOL.itemProperty.ignoreshield",
|
||||
"bashing": "BOL.itemProperty.bashing",
|
||||
"stackable": "BOL.itemProperty.stackable",
|
||||
"ranged": "BOL.itemProperty.ranged",
|
||||
"weapon": "BOL.itemProperty.weapon",
|
||||
"reloadable": "BOL.itemProperty.reloadable",
|
||||
"worn": "BOL.itemProperty.worn",
|
||||
"spell": "BOL.itemProperty.spell",
|
||||
"armor": "BOL.itemProperty.armor",
|
||||
"consumable": "BOL.itemProperty.consumable",
|
||||
"bow": "BOL.itemProperty.bow",
|
||||
"crossbow": "BOL.itemProperty.crossbow",
|
||||
"throwing": "BOL.itemProperty.throwing",
|
||||
"activable": "BOL.itemProperty.activable",
|
||||
"powder": "BOL.itemProperty.powder",
|
||||
"damage": "BOL.itemProperty.damage",
|
||||
"difficulty": "BOL.itemProperty.difficulty"
|
||||
}
|
||||
|
||||
BOL.itemStats = {
|
||||
"quantity" : "BOL.itemStat.quantity",
|
||||
"weight" : "BOL.itemStat.weight",
|
||||
"price" : "BOL.itemStat.price",
|
||||
"range" : "BOL.itemStat.range",
|
||||
"damage" : "BOL.itemStat.damage",
|
||||
"reload" : "BOL.itemStat.reload",
|
||||
"soak" : "BOL.itemStat.soak",
|
||||
"blocking" : "BOL.itemStat.blocking",
|
||||
"modifiers" : "BOL.itemStat.modifiers"
|
||||
"quantity": "BOL.itemStat.quantity",
|
||||
"weight": "BOL.itemStat.weight",
|
||||
"price": "BOL.itemStat.price",
|
||||
"range": "BOL.itemStat.range",
|
||||
"damage": "BOL.itemStat.damage",
|
||||
"reload": "BOL.itemStat.reload",
|
||||
"soak": "BOL.itemStat.soak",
|
||||
"blocking": "BOL.itemStat.blocking",
|
||||
"modifiers": "BOL.itemStat.modifiers"
|
||||
}
|
||||
|
||||
BOL.itemModifiers = {
|
||||
"init" : "BOL.itemModifiers.init",
|
||||
"social" : "BOL.itemModifiers.social",
|
||||
"agility" : "BOL.itemModifiers.agility",
|
||||
"powercost" : "BOL.itemModifiers.powercost"
|
||||
"init": "BOL.itemModifiers.init",
|
||||
"social": "BOL.itemModifiers.social",
|
||||
"agility": "BOL.itemModifiers.agility",
|
||||
"powercost": "BOL.itemModifiers.powercost"
|
||||
}
|
||||
|
||||
BOL.itemBlocking = {
|
||||
"malus" : "BOL.itemBlocking.malus",
|
||||
"nbAttacksPerRound" : "BOL.itemBlocking.nbAttacksPerRound"
|
||||
"malus": "BOL.itemBlocking.malus",
|
||||
"nbAttacksPerRound": "BOL.itemBlocking.nbAttacksPerRound"
|
||||
}
|
||||
|
||||
BOL.itemSoak = {
|
||||
"formula" : "BOL.itemSoak.formula",
|
||||
"value" : "BOL.itemSoak.value"
|
||||
"formula": "BOL.itemSoak.formula",
|
||||
"value": "BOL.itemSoak.value"
|
||||
}
|
||||
|
||||
BOL.featureSubtypes = {
|
||||
"origin" : "BOL.featureSubtypes.origin",
|
||||
"race" : "BOL.featureSubtypes.race",
|
||||
"career" : "BOL.featureSubtypes.career",
|
||||
"boon" : "BOL.featureSubtypes.boon",
|
||||
"flaw" : "BOL.featureSubtypes.flaw",
|
||||
"language" : "BOL.featureSubtypes.language",
|
||||
"godsfaith" : "BOL.featureSubtypes.gods",
|
||||
"fightoption" : "BOL.featureSubtypes.fightOption",
|
||||
"boleffect": "BOL.featureSubtypes.effect",
|
||||
"horoscope": "BOL.featureSubtypes.horoscope",
|
||||
"origin": "BOL.featureSubtypes.origin",
|
||||
"race": "BOL.featureSubtypes.race",
|
||||
"career": "BOL.featureSubtypes.career",
|
||||
"boon": "BOL.featureSubtypes.boon",
|
||||
"flaw": "BOL.featureSubtypes.flaw",
|
||||
"language": "BOL.featureSubtypes.language",
|
||||
"godsfaith": "BOL.featureSubtypes.gods",
|
||||
"fightoption": "BOL.featureSubtypes.fightOption",
|
||||
"boleffect": "BOL.featureSubtypes.effect",
|
||||
"horoscope": "BOL.featureSubtypes.horoscope",
|
||||
"xplog": "BOL.featureSubtypes.xplog",
|
||||
}
|
||||
|
||||
BOL.fightOptionTypes = {
|
||||
@ -285,17 +351,17 @@ BOL.fightOptionTypes = {
|
||||
}
|
||||
|
||||
BOL.itemIcons = {
|
||||
"item": "icons/containers/chest/chest-worn-oak-tan.webp",
|
||||
"capacity": "icons/sundries/scrolls/scroll-plain-tan-red.webp",
|
||||
"species": "icons/environment/people/group.webp",
|
||||
"profile": "icons/sundries/documents/blueprint-axe.webp",
|
||||
"path": "icons/sundries/books/book-embossed-gold-red.webp"
|
||||
"item": "icons/containers/chest/chest-worn-oak-tan.webp",
|
||||
"feature": "icons/sundries/scrolls/scroll-plain-tan-red.webp",
|
||||
"species": "icons/environment/people/group.webp",
|
||||
"profile": "icons/sundries/documents/blueprint-axe.webp",
|
||||
"path": "icons/sundries/books/book-embossed-gold-red.webp"
|
||||
}
|
||||
|
||||
BOL.actorIcons = {
|
||||
"npc": "icons/environment/people/commoner.webp",
|
||||
"encounter": "icons/svg/mystery-man-black.svg",
|
||||
"loot": "icons/containers/bags/sack-simple-leather-brown.webp"
|
||||
"npc": "icons/environment/people/commoner.webp",
|
||||
"encounter": "icons/svg/mystery-man-black.svg",
|
||||
"loot": "icons/containers/bags/sack-simple-leather-brown.webp"
|
||||
}
|
||||
|
||||
BOL.bougetteState = {
|
||||
@ -314,18 +380,18 @@ BOL.bougetteDice = {
|
||||
}
|
||||
|
||||
BOL.creatureSize = {
|
||||
"tiny": {order: 1, label: "BOL.size.tiny"},
|
||||
"verysmall": {order: 2, label: "BOL.size.verysmall"},
|
||||
"small": {order: 3, label: "BOL.size.small"},
|
||||
"medium": {order: 4, label: "BOL.size.medium"},
|
||||
"large": {order: 5, label: "BOL.size.large"},
|
||||
"verylarge": {order: 6, label: "BOL.size.verylarge"},
|
||||
"huge": {order: 7, label: "BOL.size.huge"},
|
||||
"massive": {order: 8, label: "BOL.size.massive"},
|
||||
"enormous": {order: 9, label: "BOL.size.enormous"},
|
||||
"gigantic": {order: 10, label: "BOL.size.gigantic"},
|
||||
"immense": {order: 11, label: "BOL.size.immense"},
|
||||
"colossal": {order: 12, label: "BOL.size.colossal"}
|
||||
"tiny": { order: 1, label: "BOL.size.tiny" },
|
||||
"verysmall": { order: 2, label: "BOL.size.verysmall" },
|
||||
"small": { order: 3, label: "BOL.size.small" },
|
||||
"medium": { order: 4, label: "BOL.size.medium" },
|
||||
"large": { order: 5, label: "BOL.size.large" },
|
||||
"verylarge": { order: 6, label: "BOL.size.verylarge" },
|
||||
"huge": { order: 7, label: "BOL.size.huge" },
|
||||
"massive": { order: 8, label: "BOL.size.massive" },
|
||||
"enormous": { order: 9, label: "BOL.size.enormous" },
|
||||
"gigantic": { order: 10, label: "BOL.size.gigantic" },
|
||||
"immense": { order: 11, label: "BOL.size.immense" },
|
||||
"colossal": { order: 12, label: "BOL.size.colossal" }
|
||||
}
|
||||
|
||||
BOL.horoscopeAnswer = {
|
||||
@ -352,110 +418,251 @@ BOL.bolEffectModifier = {
|
||||
|
||||
BOL.statusEffects = [
|
||||
{
|
||||
"id": "dead",
|
||||
"label": "EFFECT.StatusDead",
|
||||
"icon": "icons/svg/skull.svg"
|
||||
"id": "dead",
|
||||
"label": "EFFECT.StatusDead",
|
||||
"icon": "icons/svg/skull.svg"
|
||||
},
|
||||
{
|
||||
"id": "unconscious",
|
||||
"label": "EFFECT.StatusUnconscious",
|
||||
"icon": "icons/svg/unconscious.svg"
|
||||
"id": "unconscious",
|
||||
"label": "EFFECT.StatusUnconscious",
|
||||
"icon": "icons/svg/unconscious.svg"
|
||||
},
|
||||
{
|
||||
"id": "sleep",
|
||||
"label": "EFFECT.StatusAsleep",
|
||||
"icon": "icons/svg/sleep.svg"
|
||||
"id": "sleep",
|
||||
"label": "EFFECT.StatusAsleep",
|
||||
"icon": "icons/svg/sleep.svg"
|
||||
},
|
||||
{
|
||||
"id": "stun",
|
||||
"label": "EFFECT.StatusStunned",
|
||||
"icon": "icons/svg/daze.svg"
|
||||
"id": "stun",
|
||||
"label": "EFFECT.StatusStunned",
|
||||
"icon": "icons/svg/daze.svg"
|
||||
},
|
||||
{
|
||||
"id": "prone",
|
||||
"label": "EFFECT.StatusProne",
|
||||
"icon": "icons/svg/falling.svg"
|
||||
"id": "prone",
|
||||
"label": "EFFECT.StatusProne",
|
||||
"icon": "icons/svg/falling.svg"
|
||||
},
|
||||
{
|
||||
"id": "restrain",
|
||||
"label": "EFFECT.StatusRestrained",
|
||||
"icon": "icons/svg/net.svg"
|
||||
"id": "restrain",
|
||||
"label": "EFFECT.StatusRestrained",
|
||||
"icon": "icons/svg/net.svg"
|
||||
},
|
||||
{
|
||||
"id": "paralysis",
|
||||
"label": "EFFECT.StatusParalysis",
|
||||
"icon": "icons/svg/paralysis.svg"
|
||||
"id": "paralysis",
|
||||
"label": "EFFECT.StatusParalysis",
|
||||
"icon": "icons/svg/paralysis.svg"
|
||||
},
|
||||
{
|
||||
"id": "fly",
|
||||
"label": "EFFECT.StatusFlying",
|
||||
"icon": "icons/svg/wing.svg"
|
||||
"id": "fly",
|
||||
"label": "EFFECT.StatusFlying",
|
||||
"icon": "icons/svg/wing.svg"
|
||||
},
|
||||
{
|
||||
"id": "blind",
|
||||
"label": "EFFECT.StatusBlind",
|
||||
"icon": "icons/svg/blind.svg"
|
||||
"id": "blind",
|
||||
"label": "EFFECT.StatusBlind",
|
||||
"icon": "icons/svg/blind.svg"
|
||||
},
|
||||
{
|
||||
"id": "deaf",
|
||||
"label": "EFFECT.StatusDeaf",
|
||||
"icon": "icons/svg/deaf.svg"
|
||||
"id": "deaf",
|
||||
"label": "EFFECT.StatusDeaf",
|
||||
"icon": "icons/svg/deaf.svg"
|
||||
},
|
||||
{
|
||||
"id": "silence",
|
||||
"label": "EFFECT.StatusSilenced",
|
||||
"icon": "icons/svg/silenced.svg"
|
||||
"id": "silence",
|
||||
"label": "EFFECT.StatusSilenced",
|
||||
"icon": "icons/svg/silenced.svg"
|
||||
},
|
||||
{
|
||||
"id": "fear",
|
||||
"label": "EFFECT.StatusFear",
|
||||
"icon": "icons/svg/terror.svg"
|
||||
"id": "fear",
|
||||
"label": "EFFECT.StatusFear",
|
||||
"icon": "icons/svg/terror.svg"
|
||||
},
|
||||
{
|
||||
"id": "burning",
|
||||
"label": "EFFECT.StatusBurning",
|
||||
"icon": "icons/svg/fire.svg"
|
||||
"id": "burning",
|
||||
"label": "EFFECT.StatusBurning",
|
||||
"icon": "icons/svg/fire.svg"
|
||||
},
|
||||
{
|
||||
"id": "frozen",
|
||||
"label": "EFFECT.StatusFrozen",
|
||||
"icon": "icons/svg/frozen.svg"
|
||||
"id": "frozen",
|
||||
"label": "EFFECT.StatusFrozen",
|
||||
"icon": "icons/svg/frozen.svg"
|
||||
},
|
||||
{
|
||||
"id": "shock",
|
||||
"label": "EFFECT.StatusShocked",
|
||||
"icon": "icons/svg/lightning.svg"
|
||||
"id": "shock",
|
||||
"label": "EFFECT.StatusShocked",
|
||||
"icon": "icons/svg/lightning.svg"
|
||||
},
|
||||
{
|
||||
"id": "disease",
|
||||
"label": "EFFECT.StatusDisease",
|
||||
"icon": "icons/svg/biohazard.svg"
|
||||
"id": "disease",
|
||||
"label": "EFFECT.StatusDisease",
|
||||
"icon": "icons/svg/biohazard.svg"
|
||||
},
|
||||
{
|
||||
"id": "poison",
|
||||
"label": "EFFECT.StatusPoison",
|
||||
"icon": "icons/svg/poison.svg"
|
||||
"id": "poison",
|
||||
"label": "EFFECT.StatusPoison",
|
||||
"icon": "icons/svg/poison.svg"
|
||||
},
|
||||
{
|
||||
"id": "curse",
|
||||
"label": "EFFECT.StatusCursed",
|
||||
"icon": "icons/svg/sun.svg"
|
||||
"id": "curse",
|
||||
"label": "EFFECT.StatusCursed",
|
||||
"icon": "icons/svg/sun.svg"
|
||||
},
|
||||
{
|
||||
"id": "invisible",
|
||||
"label": "EFFECT.StatusInvisible",
|
||||
"icon": "icons/svg/invisible.svg"
|
||||
"id": "invisible",
|
||||
"label": "EFFECT.StatusInvisible",
|
||||
"icon": "icons/svg/invisible.svg"
|
||||
},
|
||||
{
|
||||
"id": "target",
|
||||
"label": "EFFECT.StatusTarget",
|
||||
"icon": "icons/svg/target.svg"
|
||||
"id": "target",
|
||||
"label": "EFFECT.StatusTarget",
|
||||
"icon": "icons/svg/target.svg"
|
||||
},
|
||||
{
|
||||
"id": "eye",
|
||||
"label": "EFFECT.StatusMarked",
|
||||
"icon": "icons/svg/eye.svg"
|
||||
"id": "eye",
|
||||
"label": "EFFECT.StatusMarked",
|
||||
"icon": "icons/svg/eye.svg"
|
||||
}
|
||||
]
|
||||
|
||||
BOL.defaultNaturalWeapon = {
|
||||
"category": "equipment",
|
||||
"subtype": "weapon",
|
||||
"description": "",
|
||||
"properties": {
|
||||
"ranged": false,
|
||||
"melee": false,
|
||||
"spell": false,
|
||||
"protection": false,
|
||||
"weapon": true,
|
||||
"armor": false,
|
||||
"helm": false,
|
||||
"shield": false,
|
||||
"equipable": false,
|
||||
"consumable": false,
|
||||
"magical": false,
|
||||
"2H": false,
|
||||
"reloadable": false,
|
||||
"bow": false,
|
||||
"crossbow": false,
|
||||
"throwing": false,
|
||||
"stackable": false,
|
||||
"natural": true,
|
||||
"concealable": false,
|
||||
"ignoreshield": false,
|
||||
"attackBonusDice": false,
|
||||
"onlymodifier": true,
|
||||
"attackAttribute": "vigor",
|
||||
"attackAptitude": "melee",
|
||||
"attackModifiers": 1,
|
||||
"weaponSize": "unarmed",
|
||||
"damage": "d6B",
|
||||
"damageAttribute": "",
|
||||
"damageModifiers": null,
|
||||
"damageMultiplier": "1",
|
||||
"damageReroll1": false
|
||||
},
|
||||
"quantity": 1,
|
||||
"weight": 0,
|
||||
"price": 0,
|
||||
"worn": false
|
||||
}
|
||||
|
||||
BOL.defaultHordeAttack = {
|
||||
"category": "equipment",
|
||||
"subtype": "weapon",
|
||||
"description": "",
|
||||
"properties": {
|
||||
"ranged": false,
|
||||
"melee": true,
|
||||
"spell": false,
|
||||
"protection": false,
|
||||
"weapon": true,
|
||||
"armor": false,
|
||||
"helm": false,
|
||||
"shield": false,
|
||||
"equipable": false,
|
||||
"consumable": false,
|
||||
"magical": false,
|
||||
"2H": false,
|
||||
"reloadable": false,
|
||||
"bow": false,
|
||||
"crossbow": false,
|
||||
"throwing": false,
|
||||
"stackable": false,
|
||||
"natural": true,
|
||||
"concealable": false,
|
||||
"ignoreshield": false,
|
||||
"attackBonusDice": false,
|
||||
"onlymodifier": true,
|
||||
"attackAttribute": "vigor",
|
||||
"attackAptitude": "melee",
|
||||
"attackModifiers": 1,
|
||||
"weaponSize": "unarmed",
|
||||
"damage": "d6M",
|
||||
"damageAttribute": "",
|
||||
"damageModifiers": null,
|
||||
"damageMultiplier": "1",
|
||||
"damageReroll1": false
|
||||
},
|
||||
"quantity": 1,
|
||||
"weight": 0,
|
||||
"price": 0,
|
||||
"worn": false
|
||||
}
|
||||
|
||||
BOL.defaultNaturalProtection = {
|
||||
"category": "equipment",
|
||||
"subtype": "armor",
|
||||
"description": "",
|
||||
"properties": {
|
||||
"ranged": false,
|
||||
"melee": false,
|
||||
"spell": false,
|
||||
"protection": true,
|
||||
"weapon": false,
|
||||
"armor": true,
|
||||
"helm": false,
|
||||
"shield": false,
|
||||
"equipable": true,
|
||||
"consumable": false,
|
||||
"magical": false,
|
||||
"2H": false,
|
||||
"reloadable": false,
|
||||
"bow": false,
|
||||
"crossbow": false,
|
||||
"throwing": false,
|
||||
"stackable": false,
|
||||
"natural": true,
|
||||
"concealable": false,
|
||||
"ignoreshield": false,
|
||||
"attackBonusDice": false,
|
||||
"onlymodifier": true,
|
||||
"attackAttribute": "vigor",
|
||||
"attackAptitude": "melee",
|
||||
"attackModifiers": 1,
|
||||
"weaponSize": "unarmed",
|
||||
"damage": "d6B",
|
||||
"damageAttribute": "vigor",
|
||||
"damageModifiers": null,
|
||||
"damageMultiplier": "1",
|
||||
"damageReroll1": false,
|
||||
"modifiers": {
|
||||
"init": null,
|
||||
"agility": null,
|
||||
"powercost": null,
|
||||
"social": false
|
||||
},
|
||||
"armorQuality": "none",
|
||||
"soak": {
|
||||
"formula": "",
|
||||
"value": 1
|
||||
},
|
||||
"slot": "none"
|
||||
},
|
||||
"quantity": 1,
|
||||
"weight": 0,
|
||||
"price": 0,
|
||||
"worn": true
|
||||
}
|
||||
|
||||
BOL.debug = false;
|
@ -10,7 +10,7 @@ export const registerHandlebarsHelpers = function () {
|
||||
|
||||
Handlebars.registerHelper('isEmpty', function (list) {
|
||||
if (list) return list.length == 0;
|
||||
else return 0;
|
||||
else return false;
|
||||
});
|
||||
|
||||
Handlebars.registerHelper('notEmpty', function (list) {
|
||||
@ -64,8 +64,8 @@ export const registerHandlebarsHelpers = function () {
|
||||
})
|
||||
|
||||
Handlebars.registerHelper('for', function (from, to, incr, block) {
|
||||
var accum = '';
|
||||
for (var i = from; i < to; i += incr)
|
||||
let accum = '';
|
||||
for (let i = from; i < to; i += incr)
|
||||
accum += block.fn(i);
|
||||
return accum;
|
||||
})
|
||||
@ -79,7 +79,7 @@ export const registerHandlebarsHelpers = function () {
|
||||
Handlebars.registerHelper('countKeys', function (obj) {
|
||||
return Object.keys(obj).length;
|
||||
})
|
||||
|
||||
|
||||
Handlebars.registerHelper('isEnabled', function (configKey) {
|
||||
return game.settings.get("bol", configKey);
|
||||
})
|
||||
@ -89,8 +89,8 @@ export const registerHandlebarsHelpers = function () {
|
||||
|
||||
// If you need to add Handlebars helpers, here are a few useful examples:
|
||||
Handlebars.registerHelper('concat', function () {
|
||||
var outStr = '';
|
||||
for (var arg in arguments) {
|
||||
let outStr = '';
|
||||
for (let arg in arguments) {
|
||||
if (typeof arguments[arg] != 'object') {
|
||||
outStr += arguments[arg];
|
||||
}
|
||||
@ -108,16 +108,15 @@ export const registerHandlebarsHelpers = function () {
|
||||
return parseInt(a) - parseInt(b);
|
||||
})
|
||||
Handlebars.registerHelper('abbrev2', function (a) {
|
||||
return a.substring(0,2);
|
||||
return a.substring(0, 2);
|
||||
})
|
||||
Handlebars.registerHelper('abbrev3', function (a) {
|
||||
return a.substring(0,3);
|
||||
return a.substring(0, 3);
|
||||
})
|
||||
Handlebars.registerHelper('valueAtIndex', function (arr, idx) {
|
||||
return arr[idx];
|
||||
})
|
||||
Handlebars.registerHelper('includesKey', function (items, type, key) {
|
||||
// console.log(items);
|
||||
return items.filter(i => i.type === type).map(i => i.system.key).includes(key);
|
||||
})
|
||||
Handlebars.registerHelper('includes', function (array, val) {
|
||||
@ -128,10 +127,7 @@ export const registerHandlebarsHelpers = function () {
|
||||
})
|
||||
Handlebars.registerHelper('isOwnerOrGM', function (actor) {
|
||||
console.log("Testing actor", actor.isOwner, game.userId)
|
||||
if (actor.isOwner || game.isGM) {
|
||||
return true
|
||||
}
|
||||
return false
|
||||
return actor.isOwner || game.isGM;
|
||||
})
|
||||
Handlebars.registerHelper('upperFirst', function (text) {
|
||||
if (typeof text !== 'string') return text
|
||||
@ -141,6 +137,16 @@ export const registerHandlebarsHelpers = function () {
|
||||
if (typeof text !== 'string') return text
|
||||
return text.charAt(0).toUpperCase()
|
||||
})
|
||||
Handlebars.registerHelper('isCreature', function (key) {
|
||||
return key == "creature" || key == "daemon";
|
||||
})
|
||||
|
||||
// Handle v12 removal of this helper
|
||||
Handlebars.registerHelper('select', function (selected, options) {
|
||||
const escapedValue = RegExp.escape(Handlebars.escapeExpression(selected));
|
||||
const rgx = new RegExp(' value=[\"\']' + escapedValue + '[\"\']');
|
||||
const html = options.fn(this);
|
||||
return html.replace(rgx, "$& selected");
|
||||
});
|
||||
|
||||
}
|
@ -29,18 +29,6 @@ export default function registerHooks() {
|
||||
if (data.type == "Item") {
|
||||
let item = data.data;
|
||||
console.log(item);
|
||||
// let command = `let onlyDamage = false;\nlet customLabel = "";\nlet skillDescription = "";\nlet dmgDescription = "";\n\nif (event) {\n if (event.shiftKey) onlyDamage = true;\n}\n\ngame.cof.macros.rollItemMacro("${item._id}", "${item.name}", "${item.type}", 0, 0, 0, onlyDamage, customLabel, skillDescription, dmgDescription);`;
|
||||
|
||||
// let macro = game.macros.entities.find(m => (m.name === item.name) && (m.command === command));
|
||||
// if (!macro) {
|
||||
// macro = await Macro.create({
|
||||
// name: item.name,
|
||||
// type : "script",
|
||||
// img: item.img,
|
||||
// command : command
|
||||
// }, {displaySheet: false})
|
||||
// }
|
||||
// game.user.assignHotbarMacro(macro, slot);
|
||||
}
|
||||
// Create a macro to open the actor sheet of the actor dropped on the hotbar
|
||||
else if (data.type == "Actor") {
|
||||
|
@ -22,6 +22,7 @@ export const preloadHandlebarsTemplates = async function () {
|
||||
"systems/bol/templates/actor/parts/tabs/vehicle-stats.hbs",
|
||||
"systems/bol/templates/actor/parts/tabs/vehicle-description.hbs",
|
||||
"systems/bol/templates/actor/parts/tabs/vehicle-weapons.hbs",
|
||||
"systems/bol/templates/actor/parts/tabs/horde-description.hbs",
|
||||
// ITEMS
|
||||
"systems/bol/templates/item/parts/item-header.hbs",
|
||||
"systems/bol/templates/item/parts/properties/feature-properties.hbs",
|
||||
@ -43,6 +44,7 @@ export const preloadHandlebarsTemplates = async function () {
|
||||
"systems/bol/templates/item/parts/properties/feature/fightoption-properties.hbs",
|
||||
"systems/bol/templates/item/parts/properties/item/weapon-vehicle-properties.hbs",
|
||||
"systems/bol/templates/item/parts/properties/feature/horoscope-properties.hbs",
|
||||
"systems/bol/templates/item/parts/properties/feature/xplog-properties.hbs",
|
||||
|
||||
// DIALOGS
|
||||
"systems/bol/templates/chat/rolls/attack-damage-card.hbs",
|
||||
|
Binary file not shown.
BIN
packs/aides-de-jeu/000294.ldb
Normal file
BIN
packs/aides-de-jeu/000294.ldb
Normal file
Binary file not shown.
@ -1 +1 @@
|
||||
MANIFEST-000107
|
||||
MANIFEST-000407
|
||||
|
@ -1,8 +1,8 @@
|
||||
2023/12/04-21:16:34.430277 7f84f7fff6c0 Recovering log #105
|
||||
2023/12/04-21:16:34.440834 7f84f7fff6c0 Delete type=3 #103
|
||||
2023/12/04-21:16:34.440885 7f84f7fff6c0 Delete type=0 #105
|
||||
2023/12/04-21:29:36.294789 7f84f5ffb6c0 Level-0 table #110: started
|
||||
2023/12/04-21:29:36.294815 7f84f5ffb6c0 Level-0 table #110: 0 bytes OK
|
||||
2023/12/04-21:29:36.301173 7f84f5ffb6c0 Delete type=0 #108
|
||||
2023/12/04-21:29:36.301317 7f84f5ffb6c0 Manual compaction at level-0 from '!journal!3xJg1rCxnWvEmoxS' @ 72057594037927935 : 1 .. '!journal.pages!Yl1RKQb0BjVUtilk.kNb9ZrMbgONi1mlE' @ 0 : 0; will stop at (end)
|
||||
2023/12/04-21:29:36.301343 7f84f5ffb6c0 Manual compaction at level-1 from '!journal!3xJg1rCxnWvEmoxS' @ 72057594037927935 : 1 .. '!journal.pages!Yl1RKQb0BjVUtilk.kNb9ZrMbgONi1mlE' @ 0 : 0; will stop at (end)
|
||||
2024/09/12-22:38:53.970077 7f25eea006c0 Recovering log #405
|
||||
2024/09/12-22:38:53.982296 7f25eea006c0 Delete type=3 #403
|
||||
2024/09/12-22:38:53.982396 7f25eea006c0 Delete type=0 #405
|
||||
2024/09/12-22:42:42.719126 7f25eda006c0 Level-0 table #410: started
|
||||
2024/09/12-22:42:42.719171 7f25eda006c0 Level-0 table #410: 0 bytes OK
|
||||
2024/09/12-22:42:42.725570 7f25eda006c0 Delete type=0 #408
|
||||
2024/09/12-22:42:42.725738 7f25eda006c0 Manual compaction at level-0 from '!journal!3xJg1rCxnWvEmoxS' @ 72057594037927935 : 1 .. '!journal.pages!veAAxCtCKcFIsnln.0kUgZspxXO7VS8bd' @ 0 : 0; will stop at (end)
|
||||
2024/09/12-22:42:42.725784 7f25eda006c0 Manual compaction at level-1 from '!journal!3xJg1rCxnWvEmoxS' @ 72057594037927935 : 1 .. '!journal.pages!veAAxCtCKcFIsnln.0kUgZspxXO7VS8bd' @ 0 : 0; will stop at (end)
|
||||
|
@ -1,8 +1,8 @@
|
||||
2023/10/28-18:46:58.144165 7f5610ff96c0 Recovering log #101
|
||||
2023/10/28-18:46:58.154293 7f5610ff96c0 Delete type=3 #99
|
||||
2023/10/28-18:46:58.154395 7f5610ff96c0 Delete type=0 #101
|
||||
2023/10/28-18:47:32.356263 7f56037fe6c0 Level-0 table #106: started
|
||||
2023/10/28-18:47:32.356293 7f56037fe6c0 Level-0 table #106: 0 bytes OK
|
||||
2023/10/28-18:47:32.362824 7f56037fe6c0 Delete type=0 #104
|
||||
2023/10/28-18:47:32.375967 7f56037fe6c0 Manual compaction at level-0 from '!journal!3xJg1rCxnWvEmoxS' @ 72057594037927935 : 1 .. '!journal.pages!Yl1RKQb0BjVUtilk.kNb9ZrMbgONi1mlE' @ 0 : 0; will stop at (end)
|
||||
2023/10/28-18:47:32.376034 7f56037fe6c0 Manual compaction at level-1 from '!journal!3xJg1rCxnWvEmoxS' @ 72057594037927935 : 1 .. '!journal.pages!Yl1RKQb0BjVUtilk.kNb9ZrMbgONi1mlE' @ 0 : 0; will stop at (end)
|
||||
2024/09/12-09:45:32.427852 7f25eea006c0 Recovering log #401
|
||||
2024/09/12-09:45:32.437849 7f25eea006c0 Delete type=3 #399
|
||||
2024/09/12-09:45:32.437908 7f25eea006c0 Delete type=0 #401
|
||||
2024/09/12-09:50:36.103159 7f25eda006c0 Level-0 table #406: started
|
||||
2024/09/12-09:50:36.103188 7f25eda006c0 Level-0 table #406: 0 bytes OK
|
||||
2024/09/12-09:50:36.110495 7f25eda006c0 Delete type=0 #404
|
||||
2024/09/12-09:50:36.110872 7f25eda006c0 Manual compaction at level-0 from '!journal!3xJg1rCxnWvEmoxS' @ 72057594037927935 : 1 .. '!journal.pages!veAAxCtCKcFIsnln.0kUgZspxXO7VS8bd' @ 0 : 0; will stop at (end)
|
||||
2024/09/12-09:50:36.110976 7f25eda006c0 Manual compaction at level-1 from '!journal!3xJg1rCxnWvEmoxS' @ 72057594037927935 : 1 .. '!journal.pages!veAAxCtCKcFIsnln.0kUgZspxXO7VS8bd' @ 0 : 0; will stop at (end)
|
||||
|
Binary file not shown.
BIN
packs/aides-de-jeu/MANIFEST-000407
Normal file
BIN
packs/aides-de-jeu/MANIFEST-000407
Normal file
Binary file not shown.
Binary file not shown.
BIN
packs/armors/000200.ldb
Normal file
BIN
packs/armors/000200.ldb
Normal file
Binary file not shown.
@ -1 +1 @@
|
||||
MANIFEST-000014
|
||||
MANIFEST-000313
|
||||
|
@ -1,8 +1,8 @@
|
||||
2023/12/04-21:16:34.402100 7f84f6ffd6c0 Recovering log #12
|
||||
2023/12/04-21:16:34.413052 7f84f6ffd6c0 Delete type=3 #10
|
||||
2023/12/04-21:16:34.413101 7f84f6ffd6c0 Delete type=0 #12
|
||||
2023/12/04-21:29:36.274254 7f84f5ffb6c0 Level-0 table #17: started
|
||||
2023/12/04-21:29:36.274306 7f84f5ffb6c0 Level-0 table #17: 0 bytes OK
|
||||
2023/12/04-21:29:36.281091 7f84f5ffb6c0 Delete type=0 #15
|
||||
2023/12/04-21:29:36.301284 7f84f5ffb6c0 Manual compaction at level-0 from '!items!G3dZTHIabA3LA1hY' @ 72057594037927935 : 1 .. '!items!xhEcsi3WHjbt2ro9' @ 0 : 0; will stop at (end)
|
||||
2023/12/04-21:29:36.301326 7f84f5ffb6c0 Manual compaction at level-1 from '!items!G3dZTHIabA3LA1hY' @ 72057594037927935 : 1 .. '!items!xhEcsi3WHjbt2ro9' @ 0 : 0; will stop at (end)
|
||||
2024/09/12-22:38:53.934728 7f25f4c006c0 Recovering log #311
|
||||
2024/09/12-22:38:53.947433 7f25f4c006c0 Delete type=3 #309
|
||||
2024/09/12-22:38:53.947544 7f25f4c006c0 Delete type=0 #311
|
||||
2024/09/12-22:42:42.699365 7f25eda006c0 Level-0 table #316: started
|
||||
2024/09/12-22:42:42.699403 7f25eda006c0 Level-0 table #316: 0 bytes OK
|
||||
2024/09/12-22:42:42.705522 7f25eda006c0 Delete type=0 #314
|
||||
2024/09/12-22:42:42.725703 7f25eda006c0 Manual compaction at level-0 from '!items!G3dZTHIabA3LA1hY' @ 72057594037927935 : 1 .. '!items!xhEcsi3WHjbt2ro9' @ 0 : 0; will stop at (end)
|
||||
2024/09/12-22:42:42.725745 7f25eda006c0 Manual compaction at level-1 from '!items!G3dZTHIabA3LA1hY' @ 72057594037927935 : 1 .. '!items!xhEcsi3WHjbt2ro9' @ 0 : 0; will stop at (end)
|
||||
|
@ -1,8 +1,8 @@
|
||||
2023/10/28-18:46:58.118619 7f5603fff6c0 Recovering log #8
|
||||
2023/10/28-18:46:58.129553 7f5603fff6c0 Delete type=3 #6
|
||||
2023/10/28-18:46:58.129618 7f5603fff6c0 Delete type=0 #8
|
||||
2023/10/28-18:47:32.323904 7f56037fe6c0 Level-0 table #13: started
|
||||
2023/10/28-18:47:32.323933 7f56037fe6c0 Level-0 table #13: 0 bytes OK
|
||||
2023/10/28-18:47:32.329984 7f56037fe6c0 Delete type=0 #11
|
||||
2023/10/28-18:47:32.349515 7f56037fe6c0 Manual compaction at level-0 from '!items!G3dZTHIabA3LA1hY' @ 72057594037927935 : 1 .. '!items!xhEcsi3WHjbt2ro9' @ 0 : 0; will stop at (end)
|
||||
2023/10/28-18:47:32.349581 7f56037fe6c0 Manual compaction at level-1 from '!items!G3dZTHIabA3LA1hY' @ 72057594037927935 : 1 .. '!items!xhEcsi3WHjbt2ro9' @ 0 : 0; will stop at (end)
|
||||
2024/09/12-09:45:32.401300 7f25efe006c0 Recovering log #307
|
||||
2024/09/12-09:45:32.411529 7f25efe006c0 Delete type=3 #305
|
||||
2024/09/12-09:45:32.411608 7f25efe006c0 Delete type=0 #307
|
||||
2024/09/12-09:50:36.082865 7f25eda006c0 Level-0 table #312: started
|
||||
2024/09/12-09:50:36.082893 7f25eda006c0 Level-0 table #312: 0 bytes OK
|
||||
2024/09/12-09:50:36.090233 7f25eda006c0 Delete type=0 #310
|
||||
2024/09/12-09:50:36.110780 7f25eda006c0 Manual compaction at level-0 from '!items!G3dZTHIabA3LA1hY' @ 72057594037927935 : 1 .. '!items!xhEcsi3WHjbt2ro9' @ 0 : 0; will stop at (end)
|
||||
2024/09/12-09:50:36.110897 7f25eda006c0 Manual compaction at level-1 from '!items!G3dZTHIabA3LA1hY' @ 72057594037927935 : 1 .. '!items!xhEcsi3WHjbt2ro9' @ 0 : 0; will stop at (end)
|
||||
|
Binary file not shown.
BIN
packs/armors/MANIFEST-000313
Normal file
BIN
packs/armors/MANIFEST-000313
Normal file
Binary file not shown.
Binary file not shown.
BIN
packs/boons/000294.ldb
Normal file
BIN
packs/boons/000294.ldb
Normal file
Binary file not shown.
@ -1 +1 @@
|
||||
MANIFEST-000106
|
||||
MANIFEST-000407
|
||||
|
@ -1,8 +1,8 @@
|
||||
2023/12/04-21:16:34.244782 7f84f6ffd6c0 Recovering log #104
|
||||
2023/12/04-21:16:34.255803 7f84f6ffd6c0 Delete type=3 #102
|
||||
2023/12/04-21:16:34.255859 7f84f6ffd6c0 Delete type=0 #104
|
||||
2023/12/04-21:29:36.227120 7f84f5ffb6c0 Level-0 table #109: started
|
||||
2023/12/04-21:29:36.227155 7f84f5ffb6c0 Level-0 table #109: 0 bytes OK
|
||||
2023/12/04-21:29:36.233490 7f84f5ffb6c0 Delete type=0 #107
|
||||
2023/12/04-21:29:36.247612 7f84f5ffb6c0 Manual compaction at level-0 from '!items!039ZF3E3MtAGwbiX' @ 72057594037927935 : 1 .. '!items!zgspy1QKaxdEetEw' @ 0 : 0; will stop at (end)
|
||||
2023/12/04-21:29:36.247638 7f84f5ffb6c0 Manual compaction at level-1 from '!items!039ZF3E3MtAGwbiX' @ 72057594037927935 : 1 .. '!items!zgspy1QKaxdEetEw' @ 0 : 0; will stop at (end)
|
||||
2024/09/12-22:38:53.788249 7f25f4c006c0 Recovering log #405
|
||||
2024/09/12-22:38:53.800311 7f25f4c006c0 Delete type=3 #403
|
||||
2024/09/12-22:38:53.800582 7f25f4c006c0 Delete type=0 #405
|
||||
2024/09/12-22:42:42.640434 7f25eda006c0 Level-0 table #410: started
|
||||
2024/09/12-22:42:42.640516 7f25eda006c0 Level-0 table #410: 0 bytes OK
|
||||
2024/09/12-22:42:42.647688 7f25eda006c0 Delete type=0 #408
|
||||
2024/09/12-22:42:42.668731 7f25eda006c0 Manual compaction at level-0 from '!items!039ZF3E3MtAGwbiX' @ 72057594037927935 : 1 .. '!items!zgspy1QKaxdEetEw' @ 0 : 0; will stop at (end)
|
||||
2024/09/12-22:42:42.668779 7f25eda006c0 Manual compaction at level-1 from '!items!039ZF3E3MtAGwbiX' @ 72057594037927935 : 1 .. '!items!zgspy1QKaxdEetEw' @ 0 : 0; will stop at (end)
|
||||
|
@ -1,8 +1,8 @@
|
||||
2023/10/28-18:46:58.021346 7f5603fff6c0 Recovering log #100
|
||||
2023/10/28-18:46:58.032316 7f5603fff6c0 Delete type=3 #98
|
||||
2023/10/28-18:46:58.032370 7f5603fff6c0 Delete type=0 #100
|
||||
2023/10/28-18:47:32.275625 7f56037fe6c0 Level-0 table #105: started
|
||||
2023/10/28-18:47:32.275699 7f56037fe6c0 Level-0 table #105: 0 bytes OK
|
||||
2023/10/28-18:47:32.281755 7f56037fe6c0 Delete type=0 #103
|
||||
2023/10/28-18:47:32.288117 7f56037fe6c0 Manual compaction at level-0 from '!items!039ZF3E3MtAGwbiX' @ 72057594037927935 : 1 .. '!items!zgspy1QKaxdEetEw' @ 0 : 0; will stop at (end)
|
||||
2023/10/28-18:47:32.298397 7f56037fe6c0 Manual compaction at level-1 from '!items!039ZF3E3MtAGwbiX' @ 72057594037927935 : 1 .. '!items!zgspy1QKaxdEetEw' @ 0 : 0; will stop at (end)
|
||||
2024/09/12-09:45:32.295259 7f25efe006c0 Recovering log #401
|
||||
2024/09/12-09:45:32.306146 7f25efe006c0 Delete type=3 #399
|
||||
2024/09/12-09:45:32.306221 7f25efe006c0 Delete type=0 #401
|
||||
2024/09/12-09:50:36.045097 7f25eda006c0 Level-0 table #406: started
|
||||
2024/09/12-09:50:36.045124 7f25eda006c0 Level-0 table #406: 0 bytes OK
|
||||
2024/09/12-09:50:36.051371 7f25eda006c0 Delete type=0 #404
|
||||
2024/09/12-09:50:36.057645 7f25eda006c0 Manual compaction at level-0 from '!items!039ZF3E3MtAGwbiX' @ 72057594037927935 : 1 .. '!items!zgspy1QKaxdEetEw' @ 0 : 0; will stop at (end)
|
||||
2024/09/12-09:50:36.057725 7f25eda006c0 Manual compaction at level-1 from '!items!039ZF3E3MtAGwbiX' @ 72057594037927935 : 1 .. '!items!zgspy1QKaxdEetEw' @ 0 : 0; will stop at (end)
|
||||
|
Binary file not shown.
BIN
packs/boons/MANIFEST-000407
Normal file
BIN
packs/boons/MANIFEST-000407
Normal file
Binary file not shown.
Binary file not shown.
BIN
packs/boonsflawscreatures/000294.ldb
Normal file
BIN
packs/boonsflawscreatures/000294.ldb
Normal file
Binary file not shown.
@ -1 +1 @@
|
||||
MANIFEST-000106
|
||||
MANIFEST-000407
|
||||
|
@ -1,8 +1,8 @@
|
||||
2023/12/04-21:16:34.258787 7f84f77fe6c0 Recovering log #104
|
||||
2023/12/04-21:16:34.268652 7f84f77fe6c0 Delete type=3 #102
|
||||
2023/12/04-21:16:34.268705 7f84f77fe6c0 Delete type=0 #104
|
||||
2023/12/04-21:29:36.233597 7f84f5ffb6c0 Level-0 table #109: started
|
||||
2023/12/04-21:29:36.233621 7f84f5ffb6c0 Level-0 table #109: 0 bytes OK
|
||||
2023/12/04-21:29:36.239701 7f84f5ffb6c0 Delete type=0 #107
|
||||
2023/12/04-21:29:36.247623 7f84f5ffb6c0 Manual compaction at level-0 from '!items!CoqlfsDV1gL5swbK' @ 72057594037927935 : 1 .. '!items!yofwG0YrsL902G77' @ 0 : 0; will stop at (end)
|
||||
2023/12/04-21:29:36.247651 7f84f5ffb6c0 Manual compaction at level-1 from '!items!CoqlfsDV1gL5swbK' @ 72057594037927935 : 1 .. '!items!yofwG0YrsL902G77' @ 0 : 0; will stop at (end)
|
||||
2024/09/12-22:38:53.805528 7f25ef4006c0 Recovering log #405
|
||||
2024/09/12-22:38:53.816302 7f25ef4006c0 Delete type=3 #403
|
||||
2024/09/12-22:38:53.816406 7f25ef4006c0 Delete type=0 #405
|
||||
2024/09/12-22:42:42.654478 7f25eda006c0 Level-0 table #410: started
|
||||
2024/09/12-22:42:42.654519 7f25eda006c0 Level-0 table #410: 0 bytes OK
|
||||
2024/09/12-22:42:42.660807 7f25eda006c0 Delete type=0 #408
|
||||
2024/09/12-22:42:42.668759 7f25eda006c0 Manual compaction at level-0 from '!items!CoqlfsDV1gL5swbK' @ 72057594037927935 : 1 .. '!items!yofwG0YrsL902G77' @ 0 : 0; will stop at (end)
|
||||
2024/09/12-22:42:42.668796 7f25eda006c0 Manual compaction at level-1 from '!items!CoqlfsDV1gL5swbK' @ 72057594037927935 : 1 .. '!items!yofwG0YrsL902G77' @ 0 : 0; will stop at (end)
|
||||
|
@ -1,8 +1,8 @@
|
||||
2023/10/28-18:46:58.033991 7f5611ffb6c0 Recovering log #100
|
||||
2023/10/28-18:46:58.043491 7f5611ffb6c0 Delete type=3 #98
|
||||
2023/10/28-18:46:58.043553 7f5611ffb6c0 Delete type=0 #100
|
||||
2023/10/28-18:47:32.281934 7f56037fe6c0 Level-0 table #105: started
|
||||
2023/10/28-18:47:32.281973 7f56037fe6c0 Level-0 table #105: 0 bytes OK
|
||||
2023/10/28-18:47:32.287993 7f56037fe6c0 Delete type=0 #103
|
||||
2023/10/28-18:47:32.298372 7f56037fe6c0 Manual compaction at level-0 from '!items!CoqlfsDV1gL5swbK' @ 72057594037927935 : 1 .. '!items!yofwG0YrsL902G77' @ 0 : 0; will stop at (end)
|
||||
2023/10/28-18:47:32.298448 7f56037fe6c0 Manual compaction at level-1 from '!items!CoqlfsDV1gL5swbK' @ 72057594037927935 : 1 .. '!items!yofwG0YrsL902G77' @ 0 : 0; will stop at (end)
|
||||
2024/09/12-09:45:32.310129 7f25f4c006c0 Recovering log #401
|
||||
2024/09/12-09:45:32.320731 7f25f4c006c0 Delete type=3 #399
|
||||
2024/09/12-09:45:32.320830 7f25f4c006c0 Delete type=0 #401
|
||||
2024/09/12-09:50:36.033550 7f25eda006c0 Level-0 table #406: started
|
||||
2024/09/12-09:50:36.033588 7f25eda006c0 Level-0 table #406: 0 bytes OK
|
||||
2024/09/12-09:50:36.039266 7f25eda006c0 Delete type=0 #404
|
||||
2024/09/12-09:50:36.057599 7f25eda006c0 Manual compaction at level-0 from '!items!CoqlfsDV1gL5swbK' @ 72057594037927935 : 1 .. '!items!yofwG0YrsL902G77' @ 0 : 0; will stop at (end)
|
||||
2024/09/12-09:50:36.057695 7f25eda006c0 Manual compaction at level-1 from '!items!CoqlfsDV1gL5swbK' @ 72057594037927935 : 1 .. '!items!yofwG0YrsL902G77' @ 0 : 0; will stop at (end)
|
||||
|
Binary file not shown.
BIN
packs/boonsflawscreatures/MANIFEST-000407
Normal file
BIN
packs/boonsflawscreatures/MANIFEST-000407
Normal file
Binary file not shown.
Binary file not shown.
BIN
packs/careers/000294.ldb
Normal file
BIN
packs/careers/000294.ldb
Normal file
Binary file not shown.
@ -1 +1 @@
|
||||
MANIFEST-000106
|
||||
MANIFEST-000407
|
||||
|
@ -1,8 +1,8 @@
|
||||
2023/12/04-21:16:34.285844 7f84f67fc6c0 Recovering log #104
|
||||
2023/12/04-21:16:34.295915 7f84f67fc6c0 Delete type=3 #102
|
||||
2023/12/04-21:16:34.295974 7f84f67fc6c0 Delete type=0 #104
|
||||
2023/12/04-21:29:36.267733 7f84f5ffb6c0 Level-0 table #109: started
|
||||
2023/12/04-21:29:36.267761 7f84f5ffb6c0 Level-0 table #109: 0 bytes OK
|
||||
2023/12/04-21:29:36.273875 7f84f5ffb6c0 Delete type=0 #107
|
||||
2023/12/04-21:29:36.274078 7f84f5ffb6c0 Manual compaction at level-0 from '!items!4S4xAfMXGnuU0O1a' @ 72057594037927935 : 1 .. '!items!zxY3sW0iCJBvwjOS' @ 0 : 0; will stop at (end)
|
||||
2023/12/04-21:29:36.274142 7f84f5ffb6c0 Manual compaction at level-1 from '!items!4S4xAfMXGnuU0O1a' @ 72057594037927935 : 1 .. '!items!zxY3sW0iCJBvwjOS' @ 0 : 0; will stop at (end)
|
||||
2024/09/12-22:38:53.840310 7f25efe006c0 Recovering log #405
|
||||
2024/09/12-22:38:53.852677 7f25efe006c0 Delete type=3 #403
|
||||
2024/09/12-22:38:53.852769 7f25efe006c0 Delete type=0 #405
|
||||
2024/09/12-22:42:42.660981 7f25eda006c0 Level-0 table #410: started
|
||||
2024/09/12-22:42:42.661021 7f25eda006c0 Level-0 table #410: 0 bytes OK
|
||||
2024/09/12-22:42:42.668582 7f25eda006c0 Delete type=0 #408
|
||||
2024/09/12-22:42:42.668771 7f25eda006c0 Manual compaction at level-0 from '!items!4S4xAfMXGnuU0O1a' @ 72057594037927935 : 1 .. '!items!zxY3sW0iCJBvwjOS' @ 0 : 0; will stop at (end)
|
||||
2024/09/12-22:42:42.668804 7f25eda006c0 Manual compaction at level-1 from '!items!4S4xAfMXGnuU0O1a' @ 72057594037927935 : 1 .. '!items!zxY3sW0iCJBvwjOS' @ 0 : 0; will stop at (end)
|
||||
|
@ -1,8 +1,8 @@
|
||||
2023/10/28-18:46:58.057967 7f56117fa6c0 Recovering log #100
|
||||
2023/10/28-18:46:58.068576 7f56117fa6c0 Delete type=3 #98
|
||||
2023/10/28-18:46:58.068630 7f56117fa6c0 Delete type=0 #100
|
||||
2023/10/28-18:47:32.298557 7f56037fe6c0 Level-0 table #105: started
|
||||
2023/10/28-18:47:32.298612 7f56037fe6c0 Level-0 table #105: 0 bytes OK
|
||||
2023/10/28-18:47:32.304559 7f56037fe6c0 Delete type=0 #103
|
||||
2023/10/28-18:47:32.323741 7f56037fe6c0 Manual compaction at level-0 from '!items!4S4xAfMXGnuU0O1a' @ 72057594037927935 : 1 .. '!items!zxY3sW0iCJBvwjOS' @ 0 : 0; will stop at (end)
|
||||
2023/10/28-18:47:32.323783 7f56037fe6c0 Manual compaction at level-1 from '!items!4S4xAfMXGnuU0O1a' @ 72057594037927935 : 1 .. '!items!zxY3sW0iCJBvwjOS' @ 0 : 0; will stop at (end)
|
||||
2024/09/12-09:45:32.336593 7f25ef4006c0 Recovering log #401
|
||||
2024/09/12-09:45:32.347205 7f25ef4006c0 Delete type=3 #399
|
||||
2024/09/12-09:45:32.347263 7f25ef4006c0 Delete type=0 #401
|
||||
2024/09/12-09:50:36.039384 7f25eda006c0 Level-0 table #406: started
|
||||
2024/09/12-09:50:36.039412 7f25eda006c0 Level-0 table #406: 0 bytes OK
|
||||
2024/09/12-09:50:36.044990 7f25eda006c0 Delete type=0 #404
|
||||
2024/09/12-09:50:36.057626 7f25eda006c0 Manual compaction at level-0 from '!items!4S4xAfMXGnuU0O1a' @ 72057594037927935 : 1 .. '!items!zxY3sW0iCJBvwjOS' @ 0 : 0; will stop at (end)
|
||||
2024/09/12-09:50:36.057710 7f25eda006c0 Manual compaction at level-1 from '!items!4S4xAfMXGnuU0O1a' @ 72057594037927935 : 1 .. '!items!zxY3sW0iCJBvwjOS' @ 0 : 0; will stop at (end)
|
||||
|
Binary file not shown.
BIN
packs/careers/MANIFEST-000407
Normal file
BIN
packs/careers/MANIFEST-000407
Normal file
Binary file not shown.
Binary file not shown.
BIN
packs/cartes/000122.ldb
Normal file
BIN
packs/cartes/000122.ldb
Normal file
Binary file not shown.
@ -1 +1 @@
|
||||
MANIFEST-000106
|
||||
MANIFEST-000283
|
||||
|
@ -1,8 +1,8 @@
|
||||
2023/12/04-21:16:34.444268 7f84f67fc6c0 Recovering log #104
|
||||
2023/12/04-21:16:34.454337 7f84f67fc6c0 Delete type=3 #102
|
||||
2023/12/04-21:16:34.454390 7f84f67fc6c0 Delete type=0 #104
|
||||
2023/12/04-21:29:36.307716 7f84f5ffb6c0 Level-0 table #109: started
|
||||
2023/12/04-21:29:36.307782 7f84f5ffb6c0 Level-0 table #109: 0 bytes OK
|
||||
2023/12/04-21:29:36.314556 7f84f5ffb6c0 Delete type=0 #107
|
||||
2023/12/04-21:29:36.327965 7f84f5ffb6c0 Manual compaction at level-0 from '!scenes!1ZDXKpKixS12xzW3' @ 72057594037927935 : 1 .. '!scenes.tiles!78gEyXvSfBJi9iL1.rJglQmZXB0eRIL8y' @ 0 : 0; will stop at (end)
|
||||
2023/12/04-21:29:36.328032 7f84f5ffb6c0 Manual compaction at level-1 from '!scenes!1ZDXKpKixS12xzW3' @ 72057594037927935 : 1 .. '!scenes.tiles!78gEyXvSfBJi9iL1.rJglQmZXB0eRIL8y' @ 0 : 0; will stop at (end)
|
||||
2024/07/08-22:24:33.833224 7fb8320006c0 Recovering log #281
|
||||
2024/07/08-22:24:33.895807 7fb8320006c0 Delete type=3 #279
|
||||
2024/07/08-22:24:33.895934 7fb8320006c0 Delete type=0 #281
|
||||
2024/07/08-22:24:52.466387 7fb82be006c0 Level-0 table #286: started
|
||||
2024/07/08-22:24:52.466440 7fb82be006c0 Level-0 table #286: 0 bytes OK
|
||||
2024/07/08-22:24:52.472857 7fb82be006c0 Delete type=0 #284
|
||||
2024/07/08-22:24:52.480332 7fb82be006c0 Manual compaction at level-0 from '!scenes!1ZDXKpKixS12xzW3' @ 72057594037927935 : 1 .. '!scenes.tiles!78gEyXvSfBJi9iL1.rJglQmZXB0eRIL8y' @ 0 : 0; will stop at (end)
|
||||
2024/07/08-22:24:52.480427 7fb82be006c0 Manual compaction at level-1 from '!scenes!1ZDXKpKixS12xzW3' @ 72057594037927935 : 1 .. '!scenes.tiles!78gEyXvSfBJi9iL1.rJglQmZXB0eRIL8y' @ 0 : 0; will stop at (end)
|
||||
|
@ -1,8 +1,8 @@
|
||||
2023/10/28-18:46:58.157567 7f56117fa6c0 Recovering log #100
|
||||
2023/10/28-18:46:58.168362 7f56117fa6c0 Delete type=3 #98
|
||||
2023/10/28-18:46:58.168445 7f56117fa6c0 Delete type=0 #100
|
||||
2023/10/28-18:47:32.362933 7f56037fe6c0 Level-0 table #105: started
|
||||
2023/10/28-18:47:32.362962 7f56037fe6c0 Level-0 table #105: 0 bytes OK
|
||||
2023/10/28-18:47:32.369115 7f56037fe6c0 Delete type=0 #103
|
||||
2023/10/28-18:47:32.375986 7f56037fe6c0 Manual compaction at level-0 from '!scenes!1ZDXKpKixS12xzW3' @ 72057594037927935 : 1 .. '!scenes.tiles!78gEyXvSfBJi9iL1.rJglQmZXB0eRIL8y' @ 0 : 0; will stop at (end)
|
||||
2023/10/28-18:47:32.376049 7f56037fe6c0 Manual compaction at level-1 from '!scenes!1ZDXKpKixS12xzW3' @ 72057594037927935 : 1 .. '!scenes.tiles!78gEyXvSfBJi9iL1.rJglQmZXB0eRIL8y' @ 0 : 0; will stop at (end)
|
||||
2024/07/08-22:22:58.298438 7fb832a006c0 Recovering log #277
|
||||
2024/07/08-22:22:58.309146 7fb832a006c0 Delete type=3 #275
|
||||
2024/07/08-22:22:58.309315 7fb832a006c0 Delete type=0 #277
|
||||
2024/07/08-22:24:02.597516 7fb82be006c0 Level-0 table #282: started
|
||||
2024/07/08-22:24:02.597563 7fb82be006c0 Level-0 table #282: 0 bytes OK
|
||||
2024/07/08-22:24:02.685456 7fb82be006c0 Delete type=0 #280
|
||||
2024/07/08-22:24:02.775806 7fb82be006c0 Manual compaction at level-0 from '!scenes!1ZDXKpKixS12xzW3' @ 72057594037927935 : 1 .. '!scenes.tiles!78gEyXvSfBJi9iL1.rJglQmZXB0eRIL8y' @ 0 : 0; will stop at (end)
|
||||
2024/07/08-22:24:02.775850 7fb82be006c0 Manual compaction at level-1 from '!scenes!1ZDXKpKixS12xzW3' @ 72057594037927935 : 1 .. '!scenes.tiles!78gEyXvSfBJi9iL1.rJglQmZXB0eRIL8y' @ 0 : 0; will stop at (end)
|
||||
|
Binary file not shown.
BIN
packs/cartes/MANIFEST-000283
Normal file
BIN
packs/cartes/MANIFEST-000283
Normal file
Binary file not shown.
Binary file not shown.
BIN
packs/creatures/000203.ldb
Normal file
BIN
packs/creatures/000203.ldb
Normal file
Binary file not shown.
@ -1 +1 @@
|
||||
MANIFEST-000106
|
||||
MANIFEST-000208
|
||||
|
@ -1,8 +1,8 @@
|
||||
2023/12/04-21:16:34.555441 7f84f77fe6c0 Recovering log #104
|
||||
2023/12/04-21:16:34.566877 7f84f77fe6c0 Delete type=3 #102
|
||||
2023/12/04-21:16:34.566941 7f84f77fe6c0 Delete type=0 #104
|
||||
2023/12/04-21:29:36.355366 7f84f5ffb6c0 Level-0 table #109: started
|
||||
2023/12/04-21:29:36.355392 7f84f5ffb6c0 Level-0 table #109: 0 bytes OK
|
||||
2023/12/04-21:29:36.362705 7f84f5ffb6c0 Delete type=0 #107
|
||||
2023/12/04-21:29:36.362912 7f84f5ffb6c0 Manual compaction at level-0 from '!actors!1QGaindSWLCT4QXD' @ 72057594037927935 : 1 .. '!actors.items!yGlDTCiMiaH4vJTH.mvXGkWoCcRGjUpYV' @ 0 : 0; will stop at (end)
|
||||
2023/12/04-21:29:36.362955 7f84f5ffb6c0 Manual compaction at level-1 from '!actors!1QGaindSWLCT4QXD' @ 72057594037927935 : 1 .. '!actors.items!yGlDTCiMiaH4vJTH.mvXGkWoCcRGjUpYV' @ 0 : 0; will stop at (end)
|
||||
2024/02/23-23:05:36.345111 7fe93a0006c0 Recovering log #206
|
||||
2024/02/23-23:05:36.355350 7fe93a0006c0 Delete type=3 #204
|
||||
2024/02/23-23:05:36.355397 7fe93a0006c0 Delete type=0 #206
|
||||
2024/02/23-23:11:16.411887 7fe9336006c0 Level-0 table #211: started
|
||||
2024/02/23-23:11:16.411923 7fe9336006c0 Level-0 table #211: 0 bytes OK
|
||||
2024/02/23-23:11:16.418695 7fe9336006c0 Delete type=0 #209
|
||||
2024/02/23-23:11:16.419070 7fe9336006c0 Manual compaction at level-0 from '!actors!1QGaindSWLCT4QXD' @ 72057594037927935 : 1 .. '!actors.items!yGlDTCiMiaH4vJTH.mvXGkWoCcRGjUpYV' @ 0 : 0; will stop at (end)
|
||||
2024/02/23-23:11:16.419088 7fe9336006c0 Manual compaction at level-1 from '!actors!1QGaindSWLCT4QXD' @ 72057594037927935 : 1 .. '!actors.items!yGlDTCiMiaH4vJTH.mvXGkWoCcRGjUpYV' @ 0 : 0; will stop at (end)
|
||||
|
@ -1,8 +1,8 @@
|
||||
2023/10/28-18:46:58.256101 7f5611ffb6c0 Recovering log #100
|
||||
2023/10/28-18:46:58.266925 7f5611ffb6c0 Delete type=3 #98
|
||||
2023/10/28-18:46:58.267031 7f5611ffb6c0 Delete type=0 #100
|
||||
2023/10/28-18:47:32.403078 7f56037fe6c0 Level-0 table #105: started
|
||||
2023/10/28-18:47:32.403107 7f56037fe6c0 Level-0 table #105: 0 bytes OK
|
||||
2023/10/28-18:47:32.410392 7f56037fe6c0 Delete type=0 #103
|
||||
2023/10/28-18:47:32.416800 7f56037fe6c0 Manual compaction at level-0 from '!actors!1QGaindSWLCT4QXD' @ 72057594037927935 : 1 .. '!actors.items!yGlDTCiMiaH4vJTH.mvXGkWoCcRGjUpYV' @ 0 : 0; will stop at (end)
|
||||
2023/10/28-18:47:32.416838 7f56037fe6c0 Manual compaction at level-1 from '!actors!1QGaindSWLCT4QXD' @ 72057594037927935 : 1 .. '!actors.items!yGlDTCiMiaH4vJTH.mvXGkWoCcRGjUpYV' @ 0 : 0; will stop at (end)
|
||||
2024/02/22-16:41:06.582756 7fe93be006c0 Recovering log #201
|
||||
2024/02/22-16:41:06.592273 7fe93be006c0 Delete type=3 #199
|
||||
2024/02/22-16:41:06.592326 7fe93be006c0 Delete type=0 #201
|
||||
2024/02/22-17:53:02.294923 7fe9336006c0 Level-0 table #207: started
|
||||
2024/02/22-17:53:02.294959 7fe9336006c0 Level-0 table #207: 0 bytes OK
|
||||
2024/02/22-17:53:02.313594 7fe9336006c0 Delete type=0 #205
|
||||
2024/02/22-17:53:02.322132 7fe9336006c0 Manual compaction at level-0 from '!actors!1QGaindSWLCT4QXD' @ 72057594037927935 : 1 .. '!actors.items!yGlDTCiMiaH4vJTH.mvXGkWoCcRGjUpYV' @ 0 : 0; will stop at (end)
|
||||
2024/02/22-17:53:02.322180 7fe9336006c0 Manual compaction at level-1 from '!actors!1QGaindSWLCT4QXD' @ 72057594037927935 : 1 .. '!actors.items!yGlDTCiMiaH4vJTH.mvXGkWoCcRGjUpYV' @ 0 : 0; will stop at (end)
|
||||
|
Binary file not shown.
BIN
packs/creatures/MANIFEST-000208
Normal file
BIN
packs/creatures/MANIFEST-000208
Normal file
Binary file not shown.
Binary file not shown.
BIN
packs/effets-exemples/000292.ldb
Normal file
BIN
packs/effets-exemples/000292.ldb
Normal file
Binary file not shown.
@ -1 +1 @@
|
||||
MANIFEST-000106
|
||||
MANIFEST-000405
|
||||
|
@ -1,8 +1,8 @@
|
||||
2023/12/04-21:16:34.543411 7f84f6ffd6c0 Recovering log #104
|
||||
2023/12/04-21:16:34.553517 7f84f6ffd6c0 Delete type=3 #102
|
||||
2023/12/04-21:16:34.553574 7f84f6ffd6c0 Delete type=0 #104
|
||||
2023/12/04-21:29:36.348547 7f84f5ffb6c0 Level-0 table #109: started
|
||||
2023/12/04-21:29:36.348582 7f84f5ffb6c0 Level-0 table #109: 0 bytes OK
|
||||
2023/12/04-21:29:36.355093 7f84f5ffb6c0 Delete type=0 #107
|
||||
2023/12/04-21:29:36.355262 7f84f5ffb6c0 Manual compaction at level-0 from '!items!6fTZ6hOKR4pWbWOe' @ 72057594037927935 : 1 .. '!items!zwSNMO9HpiqUCMt8' @ 0 : 0; will stop at (end)
|
||||
2023/12/04-21:29:36.355296 7f84f5ffb6c0 Manual compaction at level-1 from '!items!6fTZ6hOKR4pWbWOe' @ 72057594037927935 : 1 .. '!items!zwSNMO9HpiqUCMt8' @ 0 : 0; will stop at (end)
|
||||
2024/09/12-22:38:54.083170 7f25ef4006c0 Recovering log #403
|
||||
2024/09/12-22:38:54.094709 7f25ef4006c0 Delete type=3 #401
|
||||
2024/09/12-22:38:54.094800 7f25ef4006c0 Delete type=0 #403
|
||||
2024/09/12-22:42:42.762852 7f25eda006c0 Level-0 table #408: started
|
||||
2024/09/12-22:42:42.762884 7f25eda006c0 Level-0 table #408: 0 bytes OK
|
||||
2024/09/12-22:42:42.770096 7f25eda006c0 Delete type=0 #406
|
||||
2024/09/12-22:42:42.787677 7f25eda006c0 Manual compaction at level-0 from '!items!6fTZ6hOKR4pWbWOe' @ 72057594037927935 : 1 .. '!items!zwSNMO9HpiqUCMt8' @ 0 : 0; will stop at (end)
|
||||
2024/09/12-22:42:42.787711 7f25eda006c0 Manual compaction at level-1 from '!items!6fTZ6hOKR4pWbWOe' @ 72057594037927935 : 1 .. '!items!zwSNMO9HpiqUCMt8' @ 0 : 0; will stop at (end)
|
||||
|
@ -1,8 +1,8 @@
|
||||
2023/10/28-18:46:58.244978 7f5603fff6c0 Recovering log #100
|
||||
2023/10/28-18:46:58.254318 7f5603fff6c0 Delete type=3 #98
|
||||
2023/10/28-18:46:58.254370 7f5603fff6c0 Delete type=0 #100
|
||||
2023/10/28-18:47:32.410495 7f56037fe6c0 Level-0 table #105: started
|
||||
2023/10/28-18:47:32.410517 7f56037fe6c0 Level-0 table #105: 0 bytes OK
|
||||
2023/10/28-18:47:32.416657 7f56037fe6c0 Delete type=0 #103
|
||||
2023/10/28-18:47:32.416814 7f56037fe6c0 Manual compaction at level-0 from '!items!6fTZ6hOKR4pWbWOe' @ 72057594037927935 : 1 .. '!items!zwSNMO9HpiqUCMt8' @ 0 : 0; will stop at (end)
|
||||
2023/10/28-18:47:32.416846 7f56037fe6c0 Manual compaction at level-1 from '!items!6fTZ6hOKR4pWbWOe' @ 72057594037927935 : 1 .. '!items!zwSNMO9HpiqUCMt8' @ 0 : 0; will stop at (end)
|
||||
2024/09/12-09:45:32.520585 7f25f4c006c0 Recovering log #399
|
||||
2024/09/12-09:45:32.540463 7f25f4c006c0 Delete type=3 #397
|
||||
2024/09/12-09:45:32.540543 7f25f4c006c0 Delete type=0 #399
|
||||
2024/09/12-09:50:36.138195 7f25eda006c0 Level-0 table #404: started
|
||||
2024/09/12-09:50:36.138235 7f25eda006c0 Level-0 table #404: 0 bytes OK
|
||||
2024/09/12-09:50:36.145251 7f25eda006c0 Delete type=0 #402
|
||||
2024/09/12-09:50:36.168914 7f25eda006c0 Manual compaction at level-0 from '!items!6fTZ6hOKR4pWbWOe' @ 72057594037927935 : 1 .. '!items!zwSNMO9HpiqUCMt8' @ 0 : 0; will stop at (end)
|
||||
2024/09/12-09:50:36.168987 7f25eda006c0 Manual compaction at level-1 from '!items!6fTZ6hOKR4pWbWOe' @ 72057594037927935 : 1 .. '!items!zwSNMO9HpiqUCMt8' @ 0 : 0; will stop at (end)
|
||||
|
Binary file not shown.
BIN
packs/effets-exemples/MANIFEST-000405
Normal file
BIN
packs/effets-exemples/MANIFEST-000405
Normal file
Binary file not shown.
Binary file not shown.
BIN
packs/equipment/000295.ldb
Normal file
BIN
packs/equipment/000295.ldb
Normal file
Binary file not shown.
@ -1 +1 @@
|
||||
MANIFEST-000108
|
||||
MANIFEST-000408
|
||||
|
@ -1,8 +1,8 @@
|
||||
2023/12/04-21:16:34.326886 7f84f7fff6c0 Recovering log #106
|
||||
2023/12/04-21:16:34.337231 7f84f7fff6c0 Delete type=3 #104
|
||||
2023/12/04-21:16:34.337341 7f84f7fff6c0 Delete type=0 #106
|
||||
2023/12/04-21:29:36.247774 7f84f5ffb6c0 Level-0 table #111: started
|
||||
2023/12/04-21:29:36.247806 7f84f5ffb6c0 Level-0 table #111: 0 bytes OK
|
||||
2023/12/04-21:29:36.253805 7f84f5ffb6c0 Delete type=0 #109
|
||||
2023/12/04-21:29:36.274024 7f84f5ffb6c0 Manual compaction at level-0 from '!items!0ErhyqifZLDCmMfT' @ 72057594037927935 : 1 .. '!items!yE8UH6YAgNGjKDEu' @ 0 : 0; will stop at (end)
|
||||
2023/12/04-21:29:36.274096 7f84f5ffb6c0 Manual compaction at level-1 from '!items!0ErhyqifZLDCmMfT' @ 72057594037927935 : 1 .. '!items!yE8UH6YAgNGjKDEu' @ 0 : 0; will stop at (end)
|
||||
2024/09/12-22:38:53.895694 7f25eea006c0 Recovering log #406
|
||||
2024/09/12-22:38:53.908795 7f25eea006c0 Delete type=3 #404
|
||||
2024/09/12-22:38:53.908936 7f25eea006c0 Delete type=0 #406
|
||||
2024/09/12-22:42:42.683293 7f25eda006c0 Level-0 table #411: started
|
||||
2024/09/12-22:42:42.683318 7f25eda006c0 Level-0 table #411: 0 bytes OK
|
||||
2024/09/12-22:42:42.690892 7f25eda006c0 Delete type=0 #409
|
||||
2024/09/12-22:42:42.699091 7f25eda006c0 Manual compaction at level-0 from '!items!0ErhyqifZLDCmMfT' @ 72057594037927935 : 1 .. '!items!yE8UH6YAgNGjKDEu' @ 0 : 0; will stop at (end)
|
||||
2024/09/12-22:42:42.699149 7f25eda006c0 Manual compaction at level-1 from '!items!0ErhyqifZLDCmMfT' @ 72057594037927935 : 1 .. '!items!yE8UH6YAgNGjKDEu' @ 0 : 0; will stop at (end)
|
||||
|
@ -1,8 +1,8 @@
|
||||
2023/10/28-18:46:58.094686 7f5610ff96c0 Recovering log #102
|
||||
2023/10/28-18:46:58.104878 7f5610ff96c0 Delete type=3 #100
|
||||
2023/10/28-18:46:58.104944 7f5610ff96c0 Delete type=0 #102
|
||||
2023/10/28-18:47:32.336166 7f56037fe6c0 Level-0 table #107: started
|
||||
2023/10/28-18:47:32.336197 7f56037fe6c0 Level-0 table #107: 0 bytes OK
|
||||
2023/10/28-18:47:32.342982 7f56037fe6c0 Delete type=0 #105
|
||||
2023/10/28-18:47:32.349554 7f56037fe6c0 Manual compaction at level-0 from '!items!0ErhyqifZLDCmMfT' @ 72057594037927935 : 1 .. '!items!yE8UH6YAgNGjKDEu' @ 0 : 0; will stop at (end)
|
||||
2023/10/28-18:47:32.349606 7f56037fe6c0 Manual compaction at level-1 from '!items!0ErhyqifZLDCmMfT' @ 72057594037927935 : 1 .. '!items!yE8UH6YAgNGjKDEu' @ 0 : 0; will stop at (end)
|
||||
2024/09/12-09:45:32.374751 7f25eea006c0 Recovering log #402
|
||||
2024/09/12-09:45:32.385764 7f25eea006c0 Delete type=3 #400
|
||||
2024/09/12-09:45:32.385832 7f25eea006c0 Delete type=0 #402
|
||||
2024/09/12-09:50:36.070382 7f25eda006c0 Level-0 table #407: started
|
||||
2024/09/12-09:50:36.070408 7f25eda006c0 Level-0 table #407: 0 bytes OK
|
||||
2024/09/12-09:50:36.076675 7f25eda006c0 Delete type=0 #405
|
||||
2024/09/12-09:50:36.082735 7f25eda006c0 Manual compaction at level-0 from '!items!0ErhyqifZLDCmMfT' @ 72057594037927935 : 1 .. '!items!yE8UH6YAgNGjKDEu' @ 0 : 0; will stop at (end)
|
||||
2024/09/12-09:50:36.082778 7f25eda006c0 Manual compaction at level-1 from '!items!0ErhyqifZLDCmMfT' @ 72057594037927935 : 1 .. '!items!yE8UH6YAgNGjKDEu' @ 0 : 0; will stop at (end)
|
||||
|
Binary file not shown.
BIN
packs/equipment/MANIFEST-000408
Normal file
BIN
packs/equipment/MANIFEST-000408
Normal file
Binary file not shown.
Binary file not shown.
BIN
packs/fightoptions/000293.ldb
Normal file
BIN
packs/fightoptions/000293.ldb
Normal file
Binary file not shown.
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user