Merge branch 'master-fix-combat' into 'master'

Fix: regression combat

See merge request LeRatierBretonnien/foundryvtt-reve-de-dragon!262
This commit is contained in:
Leratier Bretonnien 2021-06-01 04:34:22 +00:00
commit 66bcc51102
6 changed files with 128 additions and 25 deletions

BIN
fonts/goudyacc.woff Normal file

Binary file not shown.

BIN
icons/heures/de-heures.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.3 KiB

View File

@ -197,7 +197,7 @@ export class RdDCombatManager extends Combat {
let competences = items.filter(it => it.type == 'competence');
actions = actions.concat(RdDCombatManager.finalizeArmeList(armes, competences, actorData.data.carac));
if (actorData.data.attributs.hautrevant.value){
if (actorData.data.attributs.hautrevant.value) {
actions.push({ name: "Draconic", data: { initOnly: true, competence: "Draconic" } });
}
}
@ -364,6 +364,8 @@ export class RdDCombat {
return RdDCombat.onMsgEncaisser(sockmsg.data);
case "msg_defense":
return RdDCombat.onMsgDefense(sockmsg.data);
case "msg_combat_passearme":
return RdDCombat.onMsgPasseArme(sockmsg.data);
}
}
@ -434,9 +436,31 @@ export class RdDCombat {
return undefined;
}
static messagePasseArme(data) {
game.socket.emit("system.foundryvtt-reve-de-dragon", { msg: "msg_combat_passearme", data: data });
RdDCombat.onMsgPasseArme(data);
}
static onMsgPasseArme(data) {
switch (data.actionPasseArme) {
case "store-attaque":
game.system.rdd.combatStore.attaques[data.id] = data.rollData;
break;
case "store-defense":
game.system.rdd.combatStore.defenses[data.id] = data.rollData;
break;
case "delete-attaque":
delete game.system.rdd.combatStore.attaques[data.id];
break;
case "delete-defense":
delete game.system.rdd.combatStore.defenses[data.id];
break;
}
}
/* -------------------------------------------- */
static _storeAttaque(attackerId, attackerRoll) {
game.system.rdd.combatStore.attaques[attackerId] = duplicate(attackerRoll);
RdDCombat.messagePasseArme({ actionPasseArme: "store-attaque", id: attackerId, rollData: attackerRoll });
}
/* -------------------------------------------- */
@ -446,12 +470,12 @@ export class RdDCombat {
/* -------------------------------------------- */
static _deleteAttaque(attackerId) {
delete game.system.rdd.combatStore.attaques[attackerId];
RdDCombat.messagePasseArme({ actionPasseArme: "delete-attaque", id: attackerId });
}
/* -------------------------------------------- */
static _storeDefense(defenderRoll) {
game.system.rdd.combatStore.defenses[defenderRoll.passeArme] = duplicate(defenderRoll);
static _storeDefense(passeArme, defenderRoll) {
RdDCombat.messagePasseArme({ actionPasseArme: "store-defense", id: passeArme, rollData: defenderRoll });
}
/* -------------------------------------------- */
@ -461,7 +485,7 @@ export class RdDCombat {
/* -------------------------------------------- */
static _deleteDefense(passeArme) {
delete game.system.rdd.combatStore.defenses[passeArme];
RdDCombat.messagePasseArme({ actionPasseArme: "delete-defense", id: passeArme });
}
/* -------------------------------------------- */
@ -497,20 +521,18 @@ export class RdDCombat {
/* -------------------------------------------- */
static onMsgDefense(msg) {
let defenderToken = canvas.tokens.get(msg.defenderTokenId);
if (defenderToken) {
if (!game.user.isGM && !game.user.character) { // vérification / sanity check
ui.notifications.error("Le joueur " + game.user.name + " n'est connecté à aucun personnage. Impossible de continuer.");
return;
}
if (Misc.isElectedUser()) {
const rddCombat = RdDCombat.createForAttackerAndDefender(msg.attackerId, msg.defenderTokenId);
if (rddCombat) {
const defenderRoll = msg.defenderRoll;
RdDCombat._storeAttaque(msg.attackerId, defenderRoll.attackerRoll);
RdDCombat._storeDefense(defenderRoll);
rddCombat.removeChatMessageActionsPasseArme(defenderRoll.passeArme);
rddCombat._chatMessageDefense(msg.paramChatDefense);
}
if (!game.user.isGM && !game.user.character) { // vérification / sanity check
ui.notifications.error("Le joueur " + game.user.name + " n'est connecté à aucun personnage. Impossible de continuer.");
return;
}
if (defenderToken && Misc.isElectedUser()) {
const rddCombat = RdDCombat.createForAttackerAndDefender(msg.attackerId, msg.defenderTokenId);
if (rddCombat) {
const defenderRoll = msg.defenderRoll;
RdDCombat._storeAttaque(msg.attackerId, defenderRoll.attackerRoll);
RdDCombat._storeDefense(defenderRoll.passeArme, defenderRoll);
rddCombat.removeChatMessageActionsPasseArme(defenderRoll.passeArme);
rddCombat._chatMessageDefense(msg.paramChatDefense);
}
}
}
@ -773,7 +795,7 @@ export class RdDCombat {
let defenderRoll = { attackerRoll: attackerRoll, passeArme: attackerRoll.passeArme, show: {} }
// Save rollData for defender
RdDCombat._storeAttaque(this.attackerId, attackerRoll);
RdDCombat._storeDefense(defenderRoll)
RdDCombat._storeDefense(defenderRoll.passeArme, defenderRoll);
attackerRoll.show = {
cible: this.target ? this.defender.data.name : 'la cible',
@ -1009,7 +1031,7 @@ export class RdDCombat {
this.removeChatMessageActionsPasseArme(defenderRoll.passeArme);
this._sendMessageDefense(defenderRoll.attackerRoll, defenderRoll, { defense: true });
RdDCombat._storeDefense(defenderRoll);
RdDCombat._storeDefense(defenderRoll.passeArme, defenderRoll);
}
/* -------------------------------------------- */
@ -1081,7 +1103,7 @@ export class RdDCombat {
this.removeChatMessageActionsPasseArme(defenderRoll.passeArme);
this._sendMessageDefense(defenderRoll.attackerRoll, defenderRoll, { defense: true })
RdDCombat._storeDefense(defenderRoll);
RdDCombat._storeDefense(defenderRoll.passeArme, defenderRoll);
}
/* -------------------------------------------- */

View File

@ -0,0 +1,81 @@
des centaines de graines emportées par le vent
des cheminées de fées
des cristaux de neige étincelants au soleil
des feux follets dans la nuit
des fumeroles s'échappant de fissures dans le sol
des grêlons de la taille d'un oeuf de pigeon
des lichens à l'assaut d'une souche
des mirages sur l'horizon
des nuages accrochées aux flancs d'une montagne
des nuées dans le ciel nocturne
des plumes duveteuses accrochées dans les fougères
des roches sculptées par l'érosion
des signes comme gravés à même la pierre évoquant la langue des Dragons
des silhouettes imprécises dans la brume
des sons de flûtes provenant du sous bois
des traces de fossiles dans une roche
des uages noirs qui moutonnent juste avant la pluie
des veinures aux reflets métalliques dans la roche
des voiles d'aurores boréales tombant dans le ciel nocturne
des éclairs zébrant le ciel à l'horizon
l'entrelacs des branches d'un arbre millénaire
l'écoulement d'une chute l'eau
l'écume sur les vagues salées
la brillance d'étoiles alignées
la coloration verte des flammes
la course hypnotique des balles d'un jongleur
la formation de givre sur une étendue d'eau
la lueur du crépuscule sur les cimes à l'horizon
la lune rouge sang
la rosée dans une toile d'araignée
la teinte rouge de la lune à travers les nuages
le faisceau d'ondes causé par un insecte aquatique
le mouvement de grains de sable poussés par le vent
le mouvement de vagues battant le rivage
le mouvement régulier des pales d'un moulin à vent
le rythme de l'eau qui emporte les aubes d'un moulin
le soleil masqué par un passage de nuages
le tableau abstrait de tâches sur le sol
les cicatrices et boutons du visage d'un malade
les colorations violacées et oranges du ciel matinal
les figures de la rouille sur un vieux casque
les filaments d'une fleur carnivore enlaçant un insecte
les rayons du soleil couchant
les reflets d'eau à travers les plantes aquatiques
les remous cascadant dun torrent tels un liquide en ébullition dans une marmite de gigant
les restes d'un mur antique
les vagues du vent dans les herbes hautes
un arbre mort fendu par la foudre
un arc-en-ciel double
un arc-en-ciel très lumineux
un cadavre d'animal inconnu
un dragon de nuages prenant son envol
un empilement de pierres
un enfant sautant dans les flaques d'eau
un fantôme de poussière étincellant au soleil
un geyser projetant eau et vapeur à la face des Dragons
un manche d'outil poli par l'usure
un moustique gorgé de sang
un nid d'oiseau inconnu
un nuage d'insectes assombrissant le ciel
un panache de fumée volcaniques s'élevant à l'horizon
un parterre de fleurs
un prairie brumeuse
un rideau de pluie éclairé d'un rai de lumière diffus
un tourbillon dans l'eau
un tourbillon de poussière
un vol d'oiseaux migrateurs alignés traçant des lettres dans le ciel
une braise attisée par le vent
une coloration bleutée de la lune
une concrétion rocheuse évoquant une cascade figée
une fine couche de terre craquelée par le soleil
une forme animale évoquée par les courbes d'une écorce
une gerbe d'étincelles échappant du feu
une mante religieuse dévorrant son male
une mue de lézard
une nuée chaotique d'oiseaux tourbillonnant dans le vent
une ondée illuminée tombant tel un voile
une phosphorescence dans l'eau
une tornade dans le lointain
une étoile filante
une étrange disposition d'ossements sur le sol

View File

@ -2,7 +2,7 @@
"name": "foundryvtt-reve-de-dragon",
"title": "Rêve de Dragon",
"description": "Rêve de Dragon RPG for FoundryVTT",
"version": "1.3.61",
"version": "1.3.62",
"manifestPlusVersion": "1.0.0",
"minimumCoreVersion": "0.7.5",
"compatibleCoreVersion": "0.7.9",

BIN
tokens.rar Normal file

Binary file not shown.