Skip to content

Commit

Permalink
Merge pull request Arakne#300 from vincent4vx/feature-effect-kill-and…
Browse files Browse the repository at this point in the history
…-replace-by-invocation

feat(fight): Handle kill and replace by invocation effect Arakne#27
  • Loading branch information
vincent4vx authored Jul 23, 2023
2 parents 812ea27 + 184e92f commit fee2784
Show file tree
Hide file tree
Showing 7 changed files with 471 additions and 5 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -45,9 +45,14 @@ private int max(FighterData fighter) {
return fighter.characteristics().get(Characteristic.MAX_SUMMONED_CREATURES);
}

@Override
public boolean check(Turn turn, Castable castable, BattlefieldCell target) {
final ActiveFighter fighter = turn.fighter();
/**
* Check if the invoker can summon another creature
*
* @param fighter the invoker
*
* @return true if the invoker can summon another creature, false otherwise
*/
public boolean check(ActiveFighter fighter) {
final int max = max(fighter);
final int actual = (int) fight.turnList().fighters().stream() // Iterate only on active fighters (i.e. in turn list)
.filter(other -> fighter.equals(other.invoker()))
Expand All @@ -57,6 +62,11 @@ public boolean check(Turn turn, Castable castable, BattlefieldCell target) {
return max > actual;
}

@Override
public boolean check(Turn turn, Castable castable, BattlefieldCell target) {
return check(turn.fighter());
}

@Override
public @Nullable Error validate(Turn turn, Castable castable, BattlefieldCell target) {
return check(turn, castable, target) ? null : Error.cantCastMaxSummonedCreaturesReached(max(turn.fighter()));
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,96 @@
/*
* This file is part of Araknemu.
*
* Araknemu is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Araknemu is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with Araknemu. If not, see <https://www.gnu.org/licenses/>.
*
* Copyright (c) 2017-2023 Vincent Quatrevieux
*/

package fr.quatrevieux.araknemu.game.fight.castable.effect.handler.invocations;

import fr.quatrevieux.araknemu.game.fight.Fight;
import fr.quatrevieux.araknemu.game.fight.castable.BaseCastScope;
import fr.quatrevieux.araknemu.game.fight.castable.FightCastScope;
import fr.quatrevieux.araknemu.game.fight.castable.effect.handler.EffectHandler;
import fr.quatrevieux.araknemu.game.fight.fighter.Fighter;
import fr.quatrevieux.araknemu.game.fight.fighter.FighterFactory;
import fr.quatrevieux.araknemu.game.fight.fighter.PlayableFighter;
import fr.quatrevieux.araknemu.game.fight.fighter.invocation.InvocationFighter;
import fr.quatrevieux.araknemu.game.fight.map.FightCell;
import fr.quatrevieux.araknemu.game.monster.MonsterService;
import fr.quatrevieux.araknemu.game.spell.effect.SpellEffect;
import fr.quatrevieux.araknemu.network.game.out.fight.action.ActionEffect;
import fr.quatrevieux.araknemu.network.game.out.fight.turn.FighterTurnOrder;

/**
* Kill targets and replace them by invocation
*
* A new fighter will be created and added to fight and timeline (turn list)
* If the caster has reached the invocation limit, this effect will only kill the targets
*
* Effect parameters :
* - #1 (min) : monster id
* - #2 (max) : grade number
*
* @see InvocationFighter Invoked fighter
*/
public final class KillAndReplaceByInvocationHandler implements EffectHandler {
private final MonsterService monsterService;
private final FighterFactory fighterFactory;
private final Fight fight;
private final InvocationCountValidator validator;

public KillAndReplaceByInvocationHandler(MonsterService monsterService, FighterFactory fighterFactory, Fight fight) {
this.monsterService = monsterService;
this.fighterFactory = fighterFactory;
this.fight = fight;
this.validator = new InvocationCountValidator(fight);
}

@Override
public void handle(FightCastScope cast, BaseCastScope<Fighter, FightCell>.EffectScope effect) {
final Fighter caster = cast.caster();

for (Fighter target : effect.targets()) {
final FightCell cell = target.cell();

target.life().kill(caster);

if (validator.check(caster)) {
addInvocation(caster, effect.effect(), cell);
}
}
}

@Override
public void buff(FightCastScope cast, BaseCastScope<Fighter, FightCell>.EffectScope effect) {
throw new UnsupportedOperationException("Cannot use KillAndReplaceByInvocation as a buff");
}

private void addInvocation(Fighter caster, SpellEffect effect, FightCell target) {
final PlayableFighter invocation = fighterFactory.generate(id -> new InvocationFighter(
id,
monsterService.load(effect.min()).get(effect.max()),
caster.team(),
caster
));

fight.fighters().joinTurnList(invocation, target);

invocation.init();

fight.send(ActionEffect.addInvocation(caster, invocation));
fight.send(ActionEffect.packet(caster, new FighterTurnOrder(fight.turnList())));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@
import fr.quatrevieux.araknemu.game.fight.Fight;
import fr.quatrevieux.araknemu.game.fight.castable.effect.EffectsHandler;
import fr.quatrevieux.araknemu.game.fight.castable.effect.handler.invocations.CreateDoubleHandler;
import fr.quatrevieux.araknemu.game.fight.castable.effect.handler.invocations.KillAndReplaceByInvocationHandler;
import fr.quatrevieux.araknemu.game.fight.castable.effect.handler.invocations.MonsterInvocationHandler;
import fr.quatrevieux.araknemu.game.fight.castable.effect.handler.invocations.StaticInvocationHandler;
import fr.quatrevieux.araknemu.game.fight.fighter.FighterFactory;
Expand All @@ -48,6 +49,7 @@ public MonsterInvocationModule(MonsterService monsterService, FighterFactory fig
public void effects(EffectsHandler handler) {
handler.register(180, new CreateDoubleHandler(fighterFactory, fight));
handler.register(181, new MonsterInvocationHandler(monsterService, fighterFactory, fight));
handler.register(405, new KillAndReplaceByInvocationHandler(monsterService, fighterFactory, fight));

handler.register(185, new StaticInvocationHandler(monsterService, fighterFactory, fight));
}
Expand Down
11 changes: 9 additions & 2 deletions src/test/java/fr/quatrevieux/araknemu/game/GameDataSet.java
Original file line number Diff line number Diff line change
Expand Up @@ -555,6 +555,7 @@ public GameDataSet pushFunctionalSpells() throws SQLException, ContainerExceptio
"(349, 'Spirit Element', 3000, '11,0,0', '99,11,20,,0,0,1d10+10||5|1|2|0|30|true|true|false|false|0|1|0|2|Pa||18;19;3;1;41|0|false', '96,11,20,,0,0,1d10+10||5|1|2|0|30|true|true|false|false|0|1|0|2|Pa||18;19;3;1;41|0|false', '97,11,20,,0,0,1d10+10||5|1|2|0|30|true|true|false|false|0|1|0|2|Pa||18;19;3;1;41|0|false', '98,11,20,,0,0,1d10+10||5|1|2|0|30|true|true|false|false|0|1|0|2|Pa||18;19;3;1;41|0|false', '100,11,20,,0,0,1d10+10||5|1|2|0|30|true|true|false|false|0|1|0|2|Pa||18;19;3;1;41|0|false', '', '')",
"(693, 'Karcham', 0, '0,-1,1', '50,,,,0,0||6|1|1|0|100|true|false|false|false|0|0|0|0|Pa||11;18;19;3;1;41|17|false', '50,,,,0,0||5|1|1|0|100|true|false|false|false|0|0|0|0|Pa||11;18;19;3;1;41|17|false', '50,,,,0,0||4|1|1|0|100|true|false|false|false|0|0|0|0|Pa||11;18;19;3;1;41|17|false', '50,,,,0,0||3|1|1|0|100|true|false|false|false|0|0|0|0|Pa||11;18;19;3;1;41|17|false', '50,,,,0,0||2|1|1|0|100|true|false|false|false|0|0|0|0|Pa||11;18;19;3;1;41|17|false', '50,,,,0,0||1|1|1|0|100|true|false|false|false|0|0|0|0|Pa||11;18;19;3;1;41|117|false', '')",
"(696, 'Chamrak', 1200, '30,-1,1', '51,,,,0,0||6|1|1|0|100|true|false|true|false|0|0|0|0|Pa|3|18;19;1;41|31|false', '51,,,,0,0||5|1|2|0|100|true|false|true|false|0|0|0|0|Pa|3|18;19;1;41|31|false', '51,,,,0,0||4|1|3|0|100|true|false|true|false|0|0|0|0|Pa|3|18;19;1;41|31|false', '51,,,,0,0||3|1|4|0|100|true|false|true|false|0|0|0|0|Pa|3|18;19;1;41|31|false', '51,,,,0,0||2|1|5|0|100|true|false|true|false|0|0|0|0|Pa|3|18;19;1;41|31|false', '51,,,,0,0||1|1|6|0|100|true|false|true|false|0|0|0|0|Pa|3|18;19;1;41|131|false', '')",
"(780, 'Fauche', 0, '0,0,1', '405,788,1,,0,33;405,789,1,,0,33;405,790,1,,0,33||4|1|1|0|50|true|true|false|false|0|0|0|0|PaPaPa||18;19;3;1;41|0|false', '405,788,2,,0,33;405,789,2,,0,33;405,790,2,,0,33||4|1|1|0|50|true|true|false|false|0|0|0|0|PaPaPa||18;19;3;1;41|0|false', '405,788,3,,0,33;405,789,3,,0,33;405,790,3,,0,33||4|1|1|0|50|true|true|false|false|0|0|0|0|PaPaPa||18;19;3;1;41|0|false', '405,788,4,,0,33;405,789,4,,0,33;405,790,4,,0,33||4|1|1|0|50|true|true|false|false|0|0|0|0|PaPaPa||18;19;3;1;41|0|false', '405,788,5,,0,33;405,789,5,,0,33;405,790,5,,0,33||4|1|1|0|50|true|true|false|false|0|0|0|0|PaPaPa||18;19;3;1;41|0|false', '', '')",
}, ",") + ";"
);

Expand Down Expand Up @@ -951,7 +952,10 @@ public GameDataSet pushMonsterTemplateInvocations() throws SQLException, Contain
connection.query(
"INSERT OR IGNORE INTO `MONSTER_TEMPLATE` (`MONSTER_ID`, `MONSTER_NAME`, `GFXID`, `COLORS`, `AI`, `CHARACTERISTICS`, `LIFE_POINTS`, `INITIATIVES`, `SPELLS`) VALUES " +
"(36, 'Bouftou', 1566, '-1,-1,-1', 'AGGRESSIVE', '1@v:p;1f:-c;17:6;1b:-1i;s:f;t:f;a:2g;c:1s;f:2g;d:2g;e:26;8:5;9:3;|2@v:u;1f:-a;17:7;1b:-1d;s:g;t:g;a:2l;c:21;f:2l;d:2l;e:2b;8:5;9:3;|3@v:13;1f:-9;17:8;1b:-18;s:h;t:h;a:2q;c:26;f:2q;d:2q;e:2b;8:5;9:3;|4@v:18;1f:-8;17:9;1b:-13;s:i;t:i;a:2v;c:2l;f:2v;d:2v;e:2b;8:5;9:3;|5@v:1d;1f:-7;17:a;1b:-u;s:k;t:k;a:34;c:2q;f:34;d:34;e:2g;8:5;9:4;|6@v:1i;1f:-6;17:c;1b:-p;s:p;t:p;a:4m;c:4m;f:4m;d:7q;e:7q;8:6;9:4;', '30|40|50|60|70|140', '12|15|20|21|23|25', '2000@1;202@1;1709@1|2000@2;202@2;1709@2|2000@3;202@3;1709@3|2000@4;202@4;1709@4|2000@5;202@5;1709@5|2000@6;1709@6')," +
"(282, 'Arbre', 1183, '-1,-1,-1', 'AGGRESSIVE', '1@v:u;13:u;1f:u;17:-k;1b:-k;a:2g;f:2g;d:2g;|2@v:13;13:13;1f:13;17:-j;1b:-j;a:2l;f:2l;d:2l;|3@v:18;13:18;1f:18;17:-i;1b:-i;a:2q;f:2q;d:2q;|4@v:1n;13:1n;1f:1n;17:1n;1b:-1d;a:2v;f:2v;d:2v;|5@v:1n;13:1n;1f:1n;17:1n;1b:-1d;a:34;f:34;d:34;|6@v:1n;13:1n;1f:1n;17:p;1b:-p;s:-p;t:-p;a:au;f:au;d:au;', '100|150|200|250|300|350', '1|1|1|1|1|1', '|||||')"
"(282, 'Arbre', 1183, '-1,-1,-1', 'AGGRESSIVE', '1@v:u;13:u;1f:u;17:-k;1b:-k;a:2g;f:2g;d:2g;|2@v:13;13:13;1f:13;17:-j;1b:-j;a:2l;f:2l;d:2l;|3@v:18;13:18;1f:18;17:-i;1b:-i;a:2q;f:2q;d:2q;|4@v:1n;13:1n;1f:1n;17:1n;1b:-1d;a:2v;f:2v;d:2v;|5@v:1n;13:1n;1f:1n;17:1n;1b:-1d;a:34;f:34;d:34;|6@v:1n;13:1n;1f:1n;17:p;1b:-p;s:-p;t:-p;a:au;f:au;d:au;', '100|150|200|250|300|350', '1|1|1|1|1|1', '|||||')," +
"(788, 'fantôme d Aventurier Ardent', 1193, '-1,-1,-1', 'AGGRESSIVE', '100@v:a;13:-j;1f:34;17:-j;1b:34;s:r;t:m;a:2g;f:2g;d:2g;8:7;9:3;|110@v:b;13:-i;1f:34;17:-i;1b:34;s:v;t:r;a:2l;f:2l;d:2l;8:7;9:3;|120@v:c;13:-h;1f:34;17:-h;1b:34;s:12;t:v;a:2q;f:2q;d:2q;8:7;9:3;|130@v:d;13:-g;1f:34;17:-g;1b:34;s:16;t:14;a:2v;f:2v;d:2v;8:7;9:3;|140@v:e;13:-f;1f:34;17:-f;1b:34;s:19;t:18;a:34;f:34;d:34;8:7;9:3;', '2350|2450|2550|2650|2750', '1|1|1|1|1', '152@1;288@1;4@1;156@1|152@2;288@2;4@2;156@2|152@3;288@3;4@3;156@3|152@4;288@4;4@4;156@4|152@5;288@5;4@5;156@5')," +
"(789, 'fantôme d Aventurier Arepo', 1194, '-1,-1,-1', 'AGGRESSIVE', '100@v:a;13:-j;1f:34;17:34;1b:-j;s:1u;t:d;a:2g;f:2g;d:2g;8:8;9:3;|105@v:b;13:-i;1f:34;17:34;1b:-i;s:25;t:j;a:2l;f:2l;d:2l;8:8;9:3;|110@v:c;13:-h;1f:34;17:34;1b:-h;s:2c;t:p;a:2q;f:2q;d:2q;8:8;9:3;|115@v:d;13:-g;1f:34;17:34;1b:-g;s:2j;t:v;a:2v;f:2v;d:2v;8:8;9:3;|120@v:e;13:-f;1f:34;17:34;1b:-f;s:2q;t:15;a:34;f:34;d:34;8:8;9:3;', '1300|1350|1400|1450|1500', '1|1|1|1|1', '37@1;24@1;21@1;33@1;38@1|37@2;24@2;21@2;33@2;38@2|37@3;24@3;21@3;33@3;38@3|37@4;24@4;21@4;33@4;38@4|37@5;24@5;21@5;33@5;38@5')," +
"(790, 'fantôme d Aventurier Brave', 1195, '-1,-1,-1', 'AGGRESSIVE', '100@v:a;13:34;1f:-t;17:-t;1b:34;s:a;t:h;a:2g;f:2g;d:2g;8:8;9:3;|105@v:c;13:34;1f:-s;17:-s;1b:34;s:g;t:n;a:2l;f:2l;d:2l;8:8;9:3;|110@v:e;13:34;1f:-r;17:-r;1b:34;s:m;t:t;a:2q;f:2q;d:2q;8:8;9:3;|115@v:g;13:34;1f:-q;17:-q;1b:34;s:s;t:13;a:2v;f:2v;d:2v;8:8;9:3;|120@v:i;13:34;1f:-p;17:-p;1b:34;s:12;t:19;a:34;f:34;d:34;8:8;9:3;', '1200|1250|1300|1350|1400', '1|1|1|1|1', '4@1;178@1;171@1;460@1|4@2;178@2;171@2;460@2|4@3;178@3;171@3;460@3|4@4;178@4;171@4;460@4|4@5;178@5;171@5;460@5')"
);

use(MonsterRewardData.class, MonsterRewardItem.class);
Expand All @@ -972,7 +976,10 @@ public GameDataSet pushMonsterSpellsInvocations() throws SQLException, Container
connection.query(
"INSERT OR IGNORE INTO `SPELL` (`SPELL_ID`, `SPELL_NAME`, `SPELL_SPRITE`, `SPELL_SPRITE_ARG`, `SPELL_LVL_1`, `SPELL_LVL_2`, `SPELL_LVL_3`, `SPELL_LVL_4`, `SPELL_LVL_5`, `SPELL_LVL_6`, `SPELL_TARGET`) VALUES\n" +
"(1709, 'Contusion', 0, '0,1,1', '100,5,7,,0,0,1d3+4;950,,,7,1,0|100,10,,,0,0,0d0+10;950,,,7,1,0|4|1|1|50|100|false|true|false|false|0|0|0|3|PaPaPaPa||18;19;3;1;41|0|false', '100,7,9,,0,0,1d3+6;950,,,7,1,0|100,12,,,0,0,0d0+12;950,,,7,1,0|4|1|1|50|100|false|true|false|false|0|0|0|3|PaPaPaPa||18;19;3;1;41|0|false', '100,9,11,,0,0,1d3+8;950,,,7,1,0|100,14,,,0,0,0d0+14;950,,,7,1,0|4|1|1|50|100|false|true|false|false|0|0|0|3|PaPaPaPa||18;19;3;1;41|0|false', '100,11,13,,0,0,1d3+10;950,,,7,1,0|100,16,,,0,0,0d0+16;950,,,7,1,0|4|1|1|50|100|false|true|false|false|0|0|0|3|PaPaPaPa||18;19;3;1;41|0|false', '100,12,14,,0,0,1d3+11;950,,,7,1,0|100,17,,,0,0,0d0+17;950,,,7,1,0|4|1|1|50|100|false|true|false|false|0|0|0|3|PaPaPaPa||18;19;3;1;41|0|false', '100,13,15,,0,0,1d3+12;950,,,7,1,0|100,18,,,0,0,0d0+18;950,,,7,1,0|4|1|1|50|100|false|true|false|false|0|0|0|3|PaPaPaPa||18;19;3;1;41|0|false', '')," +
"(2000, 'Morsure du Bouftou', 0, '0,1,1', '100,4,7,,0,0,1d4+3|100,10,,,0,0,0d0+10|4|1|1|50|100|false|true|false|false|0|3|0|0|PaPa||18;19;3;1;41|0|false', '100,6,9,,0,0,1d4+5|100,12,,,0,0,0d0+12|4|1|1|50|100|false|true|false|false|0|3|0|0|PaPa||18;19;3;1;41|0|false', '100,8,11,,0,0,1d4+7|100,14,,,0,0,0d0+14|4|1|1|50|100|false|true|false|false|0|3|0|0|PaPa||18;19;3;1;41|0|false', '100,10,13,,0,0,1d4+9|100,16,,,0,0,0d0+16|4|1|1|50|100|false|true|false|false|0|3|0|0|PaPa||18;19;3;1;41|0|false', '100,11,14,,0,0,1d4+10|100,17,,,0,0,0d0+17|4|1|1|50|100|false|true|false|false|0|3|0|0|PaPa||18;19;3;1;41|0|false', '100,12,15,,0,0,1d4+11|100,18,,,0,0,0d0+18|4|1|1|50|100|false|true|false|false|0|3|0|0|PaPa||18;19;3;1;41|0|false', '')"
"(2000, 'Morsure du Bouftou', 0, '0,1,1', '100,4,7,,0,0,1d4+3|100,10,,,0,0,0d0+10|4|1|1|50|100|false|true|false|false|0|3|0|0|PaPa||18;19;3;1;41|0|false', '100,6,9,,0,0,1d4+5|100,12,,,0,0,0d0+12|4|1|1|50|100|false|true|false|false|0|3|0|0|PaPa||18;19;3;1;41|0|false', '100,8,11,,0,0,1d4+7|100,14,,,0,0,0d0+14|4|1|1|50|100|false|true|false|false|0|3|0|0|PaPa||18;19;3;1;41|0|false', '100,10,13,,0,0,1d4+9|100,16,,,0,0,0d0+16|4|1|1|50|100|false|true|false|false|0|3|0|0|PaPa||18;19;3;1;41|0|false', '100,11,14,,0,0,1d4+10|100,17,,,0,0,0d0+17|4|1|1|50|100|false|true|false|false|0|3|0|0|PaPa||18;19;3;1;41|0|false', '100,12,15,,0,0,1d4+11|100,18,,,0,0,0d0+18|4|1|1|50|100|false|true|false|false|0|3|0|0|PaPa||18;19;3;1;41|0|false', '')," +
"(288, 'Aspiration', 2050, '20,0,1', '6,2,,,0,0|6,3,,,0,0|4|0|4|10|20|true|true|false|false|0|0|1|0|PaPa||18;19;3;1;41|0|false', '6,3,,,0,0|6,4,,,0,0|4|0|4|10|20|true|true|false|false|0|0|1|0|PaPa||18;19;3;1;41|0|false', '6,3,,,0,0|6,4,,,0,0|4|0|5|10|20|true|true|false|false|0|0|1|0|PaPa||18;19;3;1;41|0|false', '6,4,,,0,0|6,5,,,0,0|4|0|5|10|20|true|true|false|false|0|0|1|0|PaPa||18;19;3;1;41|0|false', '6,4,,,0,0|6,5,,,0,0|3|0|6|10|20|true|true|false|false|0|0|1|0|PaPa||18;19;3;1;41|0|false', '', '')," +
"(152, 'Epée du Jugement', 809, '21,0,1', '98,1,27,,0,0,1d27+0;91,1,3,,0,0,1d3+0;94,1,3,,0,0,1d3+0|98,1,32,,0,0,1d32+0;91,4,,,0,0,0d0+4;94,4,,,0,0,0d0+4|6|1|3|50|100|false|false|false|false|0|0|0|0|PaPaPaPaPaPa||18;19;3;1;41|42|false', '98,1,30,,0,0,1d30+0;91,1,3,,0,0,1d3+0;94,1,3,,0,0,1d3+0|98,1,35,,0,0,1d35+0;91,4,,,0,0,0d0+4;94,4,,,0,0,0d0+4|6|1|3|50|100|false|false|false|false|0|0|0|0|PaPaPaPaPaPa||18;19;3;1;41|42|false', '98,1,35,,0,0,1d35+0;91,1,3,,0,0,1d3+0;94,1,3,,0,0,1d3+0|98,1,40,,0,0,1d40+0;91,4,,,0,0,0d0+4;94,4,,,0,0,0d0+4|6|1|3|45|100|false|false|false|false|0|0|0|0|PaPaPaPaPaPa||18;19;3;1;41|42|false', '98,1,35,,0,0,1d35+0;91,1,3,,0,0,1d3+0;94,1,3,,0,0,1d3+0|98,1,40,,0,0,1d40+0;91,4,,,0,0,0d0+4;94,4,,,0,0,0d0+4|5|1|3|45|100|false|false|false|false|0|0|0|0|PaPaPaPaPaPa||18;19;3;1;41|42|false', '98,1,40,,0,0,1d40+0;91,1,3,,0,0,1d3+0;94,1,3,,0,0,1d3+0|98,1,45,,0,0,1d45+0;91,4,,,0,0,0d0+4;94,4,,,0,0,0d0+4|5|1|3|40|100|false|false|false|false|0|0|0|0|PaPaPaPaPaPa||18;19;3;1;41|42|false', '98,1,40,,0,0,1d40+0;91,1,3,,0,0,1d3+0;94,1,3,,0,0,1d3+0|98,1,45,,0,0,1d45+0;91,4,,,0,0,0d0+4;94,4,,,0,0,0d0+4|4|1|3|40|100|false|false|false|false|0|0|0|0|PaPaPaPaPaPa||18;19;3;1;41|142|false', '')," +
"(156, 'Tempête de Puissance', 811, '11,2,1', '99,21,25,,0,0,1d5+20|99,26,30,,0,0,1d5+25|4|3|4|50|100|false|true|false|false|0|0|3|0|PaPa||18;19;3;1;41|60|false', '99,24,28,,0,0,1d5+23|99,29,33,,0,0,1d5+28|4|3|4|50|100|false|true|false|false|0|0|3|0|PaPa||18;19;3;1;41|60|false', '99,27,31,,0,0,1d5+26|99,32,36,,0,0,1d5+31|4|3|4|50|100|false|true|false|false|0|0|3|0|PaPa||18;19;3;1;41|60|false', '99,31,35,,0,0,1d5+30|99,36,40,,0,0,1d5+35|3|3|4|50|100|false|true|false|false|0|0|3|0|PaPa||18;19;3;1;41|60|false', '99,36,40,,0,0,1d5+35|99,41,45,,0,0,1d5+40|3|3|4|50|100|false|true|false|false|0|0|3|0|PaPa||18;19;3;1;41|60|false', '99,36,40,,0,0,1d5+35|99,41,45,,0,0,1d5+40|3|3|5|45|100|false|true|false|false|0|0|3|0|PaPa||18;19;3;1;41|160|false', '')"
);

return this;
Expand Down
Loading

0 comments on commit fee2784

Please sign in to comment.