mirror of
https://github.com/OMGeeky/andors-trail.git
synced 2026-01-20 10:31:28 +01:00
Refactor: Moved all code that does parsing of resource files into separate namespace, and into specialized reusable parser classes.
Refactor: Changed property "searchTag" if objects of type ItemType into property "id", because that is what it is used for. git-svn-id: https://andors-trail.googlecode.com/svn/trunk@159 08aca716-68be-ccc6-4d58-36f5abd142ac
This commit is contained in:
@@ -2,12 +2,12 @@
|
||||
|
||||
<resources>
|
||||
<string name="itemlist_money">
|
||||
[searchTag|iconID|name|category|displaytype|hasManualPrice|baseMarketCost|hasEquipEffect|equip_boostMaxHP|equip_boostMaxAP|equip_moveCostPenalty|equip_attackCost|equip_attackChance|equip_criticalChance|equip_criticalMultiplier|equip_attackDamage_Min|equip_attackDamage_Max|equip_blockChance|equip_damageResistance|equip_conditions[condition|magnitude|]|hasUseEffect|use_boostHP_Min|use_boostHP_Max|use_boostAP_Min|use_boostAP_Max|use_conditionsSource[condition|magnitude|duration|chance|]|hasHitEffect|hit_boostHP_Min|hit_boostHP_Max|hit_boostAP_Min|hit_boostAP_Max|hit_conditionsSource[condition|magnitude|duration|chance|]|hit_conditionsTarget[condition|magnitude|duration|chance|]|hasKillEffect|kill_boostHP_Min|kill_boostHP_Max|kill_boostAP_Min|kill_boostAP_Max|kill_conditionsSource[condition|magnitude|duration|chance|]|];
|
||||
[id|iconID|name|category|displaytype|hasManualPrice|baseMarketCost|hasEquipEffect|equip_boostMaxHP|equip_boostMaxAP|equip_moveCostPenalty|equip_attackCost|equip_attackChance|equip_criticalChance|equip_criticalMultiplier|equip_attackDamage_Min|equip_attackDamage_Max|equip_blockChance|equip_damageResistance|equip_conditions[condition|magnitude|]|hasUseEffect|use_boostHP_Min|use_boostHP_Max|use_boostAP_Min|use_boostAP_Max|use_conditionsSource[condition|magnitude|duration|chance|]|hasHitEffect|hit_boostHP_Min|hit_boostHP_Max|hit_boostAP_Min|hit_boostAP_Max|hit_conditionsSource[condition|magnitude|duration|chance|]|hit_conditionsTarget[condition|magnitude|duration|chance|]|hasKillEffect|kill_boostHP_Min|kill_boostHP_Max|kill_boostAP_Min|kill_boostAP_Max|kill_conditionsSource[condition|magnitude|duration|chance|]|];
|
||||
{gold|items_misc:10|Goldmünzen|30||1|1|||||||||||||||||||||||||||||||||};
|
||||
</string>
|
||||
|
||||
<string name="itemlist_weapons">
|
||||
[searchTag|iconID|name|category|displaytype|hasManualPrice|baseMarketCost|hasEquipEffect|equip_boostMaxHP|equip_boostMaxAP|equip_moveCostPenalty|equip_attackCost|equip_attackChance|equip_criticalChance|equip_criticalMultiplier|equip_attackDamage_Min|equip_attackDamage_Max|equip_blockChance|equip_damageResistance|equip_conditions[condition|magnitude|]|hasUseEffect|use_boostHP_Min|use_boostHP_Max|use_boostAP_Min|use_boostAP_Max|use_conditionsSource[condition|magnitude|duration|chance|]|hasHitEffect|hit_boostHP_Min|hit_boostHP_Max|hit_boostAP_Min|hit_boostAP_Max|hit_conditionsSource[condition|magnitude|duration|chance|]|hit_conditionsTarget[condition|magnitude|duration|chance|]|hasKillEffect|kill_boostHP_Min|kill_boostHP_Max|kill_boostAP_Min|kill_boostAP_Max|kill_conditionsSource[condition|magnitude|duration|chance|]|];
|
||||
[id|iconID|name|category|displaytype|hasManualPrice|baseMarketCost|hasEquipEffect|equip_boostMaxHP|equip_boostMaxAP|equip_moveCostPenalty|equip_attackCost|equip_attackChance|equip_criticalChance|equip_criticalMultiplier|equip_attackDamage_Min|equip_attackDamage_Max|equip_blockChance|equip_damageResistance|equip_conditions[condition|magnitude|]|hasUseEffect|use_boostHP_Min|use_boostHP_Max|use_boostAP_Min|use_boostAP_Max|use_conditionsSource[condition|magnitude|duration|chance|]|hasHitEffect|hit_boostHP_Min|hit_boostHP_Max|hit_boostAP_Min|hit_boostAP_Max|hit_conditionsSource[condition|magnitude|duration|chance|]|hit_conditionsTarget[condition|magnitude|duration|chance|]|hasKillEffect|kill_boostHP_Min|kill_boostHP_Max|kill_boostAP_Min|kill_boostAP_Max|kill_conditionsSource[condition|magnitude|duration|chance|]|];
|
||||
{club1|items_weapons:42|Holzknüppel|0|||7|1||||5|10|||0|1|||||||||||||||||||||||};
|
||||
{club3|items_weapons:44|Eisenknüppel|0|||253|1||||6|5|||2|7|||||||||||||||||||||||};
|
||||
{ironsword0|items_weapons:0|Eisenschwert|0|||12|1||||5|10|||0|1|||||||||||||||||||||||};
|
||||
@@ -28,7 +28,7 @@
|
||||
</string>
|
||||
|
||||
<string name="itemlist_rings">
|
||||
[searchTag|iconID|name|category|displaytype|hasManualPrice|baseMarketCost|hasEquipEffect|equip_boostMaxHP|equip_boostMaxAP|equip_moveCostPenalty|equip_attackCost|equip_attackChance|equip_criticalChance|equip_criticalMultiplier|equip_attackDamage_Min|equip_attackDamage_Max|equip_blockChance|equip_damageResistance|equip_conditions[condition|magnitude|]|hasUseEffect|use_boostHP_Min|use_boostHP_Max|use_boostAP_Min|use_boostAP_Max|use_conditionsSource[condition|magnitude|duration|chance|]|hasHitEffect|hit_boostHP_Min|hit_boostHP_Max|hit_boostAP_Min|hit_boostAP_Max|hit_conditionsSource[condition|magnitude|duration|chance|]|hit_conditionsTarget[condition|magnitude|duration|chance|]|hasKillEffect|kill_boostHP_Min|kill_boostHP_Max|kill_boostAP_Min|kill_boostAP_Max|kill_conditionsSource[condition|magnitude|duration|chance|]|];
|
||||
[id|iconID|name|category|displaytype|hasManualPrice|baseMarketCost|hasEquipEffect|equip_boostMaxHP|equip_boostMaxAP|equip_moveCostPenalty|equip_attackCost|equip_attackChance|equip_criticalChance|equip_criticalMultiplier|equip_attackDamage_Min|equip_attackDamage_Max|equip_blockChance|equip_damageResistance|equip_conditions[condition|magnitude|]|hasUseEffect|use_boostHP_Min|use_boostHP_Max|use_boostAP_Min|use_boostAP_Max|use_conditionsSource[condition|magnitude|duration|chance|]|hasHitEffect|hit_boostHP_Min|hit_boostHP_Max|hit_boostAP_Min|hit_boostAP_Max|hit_conditionsSource[condition|magnitude|duration|chance|]|hit_conditionsTarget[condition|magnitude|duration|chance|]|hasKillEffect|kill_boostHP_Min|kill_boostHP_Max|kill_boostAP_Min|kill_boostAP_Max|kill_conditionsSource[condition|magnitude|duration|chance|]|];
|
||||
{ring_dmg1|items_jewelry:0|Angriffsring +1|7|||215|1||||||||1|1|||||||||||||||||||||||};
|
||||
{ring_dmg2|items_jewelry:1|Angriffsring +2|7|||398|1||||||||2|2|||||||||||||||||||||||};
|
||||
{ring_dmg5|items_jewelry:2|Angriffsring +5|7|4||2014|1||||||||5|5|||||||||||||||||||||||};
|
||||
@@ -42,14 +42,14 @@
|
||||
</string>
|
||||
|
||||
<string name="itemlist_necklaces">
|
||||
[searchTag|iconID|name|category|displaytype|hasManualPrice|baseMarketCost|hasEquipEffect|equip_boostMaxHP|equip_boostMaxAP|equip_moveCostPenalty|equip_attackCost|equip_attackChance|equip_criticalChance|equip_criticalMultiplier|equip_attackDamage_Min|equip_attackDamage_Max|equip_blockChance|equip_damageResistance|equip_conditions[condition|magnitude|]|hasUseEffect|use_boostHP_Min|use_boostHP_Max|use_boostAP_Min|use_boostAP_Max|use_conditionsSource[condition|magnitude|duration|chance|]|hasHitEffect|hit_boostHP_Min|hit_boostHP_Max|hit_boostAP_Min|hit_boostAP_Max|hit_conditionsSource[condition|magnitude|duration|chance|]|hit_conditionsTarget[condition|magnitude|duration|chance|]|hasKillEffect|kill_boostHP_Min|kill_boostHP_Max|kill_boostAP_Min|kill_boostAP_Max|kill_conditionsSource[condition|magnitude|duration|chance|]|];
|
||||
[id|iconID|name|category|displaytype|hasManualPrice|baseMarketCost|hasEquipEffect|equip_boostMaxHP|equip_boostMaxAP|equip_moveCostPenalty|equip_attackCost|equip_attackChance|equip_criticalChance|equip_criticalMultiplier|equip_attackDamage_Min|equip_attackDamage_Max|equip_blockChance|equip_damageResistance|equip_conditions[condition|magnitude|]|hasUseEffect|use_boostHP_Min|use_boostHP_Max|use_boostAP_Min|use_boostAP_Max|use_conditionsSource[condition|magnitude|duration|chance|]|hasHitEffect|hit_boostHP_Min|hit_boostHP_Max|hit_boostAP_Min|hit_boostAP_Max|hit_conditionsSource[condition|magnitude|duration|chance|]|hit_conditionsTarget[condition|magnitude|duration|chance|]|hasKillEffect|kill_boostHP_Min|kill_boostHP_Max|kill_boostAP_Min|kill_boostAP_Max|kill_conditionsSource[condition|magnitude|duration|chance|]|];
|
||||
{jewel_fallhaven|items_jewelry:6|Juwel von Fallhaven|6|4||3125|1||||-1||||||||||||||||||||||||||||};
|
||||
{necklace_shield1|items_jewelry:7|Schildkette|6|4||935|1||||||||||9||||||||||||||||||||||};
|
||||
{necklace_shield2|items_jewelry:7|Schildkette|6|4||1255|1||||||||||12||||||||||||||||||||||};
|
||||
</string>
|
||||
|
||||
<string name="itemlist_armour">
|
||||
[searchTag|iconID|name|category|displaytype|hasManualPrice|baseMarketCost|hasEquipEffect|equip_boostMaxHP|equip_boostMaxAP|equip_moveCostPenalty|equip_attackCost|equip_attackChance|equip_criticalChance|equip_criticalMultiplier|equip_attackDamage_Min|equip_attackDamage_Max|equip_blockChance|equip_damageResistance|equip_conditions[condition|magnitude|]|hasUseEffect|use_boostHP_Min|use_boostHP_Max|use_boostAP_Min|use_boostAP_Max|use_conditionsSource[condition|magnitude|duration|chance|]|hasHitEffect|hit_boostHP_Min|hit_boostHP_Max|hit_boostAP_Min|hit_boostAP_Max|hit_conditionsSource[condition|magnitude|duration|chance|]|hit_conditionsTarget[condition|magnitude|duration|chance|]|hasKillEffect|kill_boostHP_Min|kill_boostHP_Max|kill_boostAP_Min|kill_boostAP_Max|kill_conditionsSource[condition|magnitude|duration|chance|]|];
|
||||
[id|iconID|name|category|displaytype|hasManualPrice|baseMarketCost|hasEquipEffect|equip_boostMaxHP|equip_boostMaxAP|equip_moveCostPenalty|equip_attackCost|equip_attackChance|equip_criticalChance|equip_criticalMultiplier|equip_attackDamage_Min|equip_attackDamage_Max|equip_blockChance|equip_damageResistance|equip_conditions[condition|magnitude|]|hasUseEffect|use_boostHP_Min|use_boostHP_Max|use_boostAP_Min|use_boostAP_Max|use_conditionsSource[condition|magnitude|duration|chance|]|hasHitEffect|hit_boostHP_Min|hit_boostHP_Max|hit_boostAP_Min|hit_boostAP_Max|hit_conditionsSource[condition|magnitude|duration|chance|]|hit_conditionsTarget[condition|magnitude|duration|chance|]|hasKillEffect|kill_boostHP_Min|kill_boostHP_Max|kill_boostAP_Min|kill_boostAP_Max|kill_conditionsSource[condition|magnitude|duration|chance|]|];
|
||||
{shirt1|items_armours:14|Stoffhemd|3|||16|1||||||||||2||||||||||||||||||||||};
|
||||
{shirt2|items_armours:14|Feines Hemd|3|||72|1||||||||||5||||||||||||||||||||||};
|
||||
{shirt_dmgresist|items_armours:15|Gehärtetes Lederhemd|3|4||1633|1||||||||||5|1|||||||||||||||||||||};
|
||||
@@ -78,7 +78,7 @@
|
||||
</string>
|
||||
|
||||
<string name="itemlist_food">
|
||||
[searchTag|iconID|name|category|displaytype|hasManualPrice|baseMarketCost|hasEquipEffect|equip_boostMaxHP|equip_boostMaxAP|equip_moveCostPenalty|equip_attackCost|equip_attackChance|equip_criticalChance|equip_criticalMultiplier|equip_attackDamage_Min|equip_attackDamage_Max|equip_blockChance|equip_damageResistance|equip_conditions[condition|magnitude|]|hasUseEffect|use_boostHP_Min|use_boostHP_Max|use_boostAP_Min|use_boostAP_Max|use_conditionsSource[condition|magnitude|duration|chance|]|hasHitEffect|hit_boostHP_Min|hit_boostHP_Max|hit_boostAP_Min|hit_boostAP_Max|hit_conditionsSource[condition|magnitude|duration|chance|]|hit_conditionsTarget[condition|magnitude|duration|chance|]|hasKillEffect|kill_boostHP_Min|kill_boostHP_Max|kill_boostAP_Min|kill_boostAP_Max|kill_conditionsSource[condition|magnitude|duration|chance|]|];
|
||||
[id|iconID|name|category|displaytype|hasManualPrice|baseMarketCost|hasEquipEffect|equip_boostMaxHP|equip_boostMaxAP|equip_moveCostPenalty|equip_attackCost|equip_attackChance|equip_criticalChance|equip_criticalMultiplier|equip_attackDamage_Min|equip_attackDamage_Max|equip_blockChance|equip_damageResistance|equip_conditions[condition|magnitude|]|hasUseEffect|use_boostHP_Min|use_boostHP_Max|use_boostAP_Min|use_boostAP_Max|use_conditionsSource[condition|magnitude|duration|chance|]|hasHitEffect|hit_boostHP_Min|hit_boostHP_Max|hit_boostAP_Min|hit_boostAP_Max|hit_conditionsSource[condition|magnitude|duration|chance|]|hit_conditionsTarget[condition|magnitude|duration|chance|]|hasKillEffect|kill_boostHP_Min|kill_boostHP_Max|kill_boostAP_Min|kill_boostAP_Max|kill_conditionsSource[condition|magnitude|duration|chance|]|];
|
||||
{apple_green|items_consumables:2|Grüner Apfel|21|||9||||||||||||||1|4|4|||||||||||||||||};
|
||||
{apple_red|items_consumables:3|Roter Apfel|21|||15||||||||||||||1|6|6|||||||||||||||||};
|
||||
{meat|items_consumables:25|Fleisch|21||1|29||||||||||||||1|12|12|||||||||||||||||};
|
||||
@@ -93,7 +93,7 @@
|
||||
</string>
|
||||
|
||||
<string name="itemlist_potions">
|
||||
[searchTag|iconID|name|category|displaytype|hasManualPrice|baseMarketCost|hasEquipEffect|equip_boostMaxHP|equip_boostMaxAP|equip_moveCostPenalty|equip_attackCost|equip_attackChance|equip_criticalChance|equip_criticalMultiplier|equip_attackDamage_Min|equip_attackDamage_Max|equip_blockChance|equip_damageResistance|equip_conditions[condition|magnitude|]|hasUseEffect|use_boostHP_Min|use_boostHP_Max|use_boostAP_Min|use_boostAP_Max|use_conditionsSource[condition|magnitude|duration|chance|]|hasHitEffect|hit_boostHP_Min|hit_boostHP_Max|hit_boostAP_Min|hit_boostAP_Max|hit_conditionsSource[condition|magnitude|duration|chance|]|hit_conditionsTarget[condition|magnitude|duration|chance|]|hasKillEffect|kill_boostHP_Min|kill_boostHP_Max|kill_boostAP_Min|kill_boostAP_Max|kill_conditionsSource[condition|magnitude|duration|chance|]|];
|
||||
[id|iconID|name|category|displaytype|hasManualPrice|baseMarketCost|hasEquipEffect|equip_boostMaxHP|equip_boostMaxAP|equip_moveCostPenalty|equip_attackCost|equip_attackChance|equip_criticalChance|equip_criticalMultiplier|equip_attackDamage_Min|equip_attackDamage_Max|equip_blockChance|equip_damageResistance|equip_conditions[condition|magnitude|]|hasUseEffect|use_boostHP_Min|use_boostHP_Max|use_boostAP_Min|use_boostAP_Max|use_conditionsSource[condition|magnitude|duration|chance|]|hasHitEffect|hit_boostHP_Min|hit_boostHP_Max|hit_boostAP_Min|hit_boostAP_Max|hit_conditionsSource[condition|magnitude|duration|chance|]|hit_conditionsTarget[condition|magnitude|duration|chance|]|hasKillEffect|kill_boostHP_Min|kill_boostHP_Max|kill_boostAP_Min|kill_boostAP_Max|kill_conditionsSource[condition|magnitude|duration|chance|]|];
|
||||
{vial_empty1|items_consumables:56|Leeres Glasröhrchen|31||1|2|||||||||||||||||||||||||||||||||};
|
||||
{vial_empty2|items_consumables:57|Leere Ampulle|31||1|4|||||||||||||||||||||||||||||||||};
|
||||
{vial_empty3|items_consumables:59|Leeres Fläschchen|31||1|6|||||||||||||||||||||||||||||||||};
|
||||
@@ -109,7 +109,7 @@
|
||||
</string>
|
||||
|
||||
<string name="itemlist_animal">
|
||||
[searchTag|iconID|name|category|displaytype|hasManualPrice|baseMarketCost|hasEquipEffect|equip_boostMaxHP|equip_boostMaxAP|equip_moveCostPenalty|equip_attackCost|equip_attackChance|equip_criticalChance|equip_criticalMultiplier|equip_attackDamage_Min|equip_attackDamage_Max|equip_blockChance|equip_damageResistance|equip_conditions[condition|magnitude|]|hasUseEffect|use_boostHP_Min|use_boostHP_Max|use_boostAP_Min|use_boostAP_Max|use_conditionsSource[condition|magnitude|duration|chance|]|hasHitEffect|hit_boostHP_Min|hit_boostHP_Max|hit_boostAP_Min|hit_boostAP_Max|hit_conditionsSource[condition|magnitude|duration|chance|]|hit_conditionsTarget[condition|magnitude|duration|chance|]|hasKillEffect|kill_boostHP_Min|kill_boostHP_Max|kill_boostAP_Min|kill_boostAP_Max|kill_conditionsSource[condition|magnitude|duration|chance|]|];
|
||||
[id|iconID|name|category|displaytype|hasManualPrice|baseMarketCost|hasEquipEffect|equip_boostMaxHP|equip_boostMaxAP|equip_moveCostPenalty|equip_attackCost|equip_attackChance|equip_criticalChance|equip_criticalMultiplier|equip_attackDamage_Min|equip_attackDamage_Max|equip_blockChance|equip_damageResistance|equip_conditions[condition|magnitude|]|hasUseEffect|use_boostHP_Min|use_boostHP_Max|use_boostAP_Min|use_boostAP_Max|use_conditionsSource[condition|magnitude|duration|chance|]|hasHitEffect|hit_boostHP_Min|hit_boostHP_Max|hit_boostAP_Min|hit_boostAP_Max|hit_conditionsSource[condition|magnitude|duration|chance|]|hit_conditionsTarget[condition|magnitude|duration|chance|]|hasKillEffect|kill_boostHP_Min|kill_boostHP_Max|kill_boostAP_Min|kill_boostAP_Max|kill_conditionsSource[condition|magnitude|duration|chance|]|];
|
||||
{hair|items_misc:48|Tierhaar|31||1|2|||||||||||||||||||||||||||||||||};
|
||||
{insectwing|items_misc:52|Insektenflügel|31||1|3|||||||||||||||||||||||||||||||||};
|
||||
{bone|items_misc:44|Knochen|31||1|2|||||||||||||||||||||||||||||||||};
|
||||
@@ -124,7 +124,7 @@
|
||||
</string>
|
||||
|
||||
<string name="itemlist_junk">
|
||||
[searchTag|iconID|name|category|displaytype|hasManualPrice|baseMarketCost|hasEquipEffect|equip_boostMaxHP|equip_boostMaxAP|equip_moveCostPenalty|equip_attackCost|equip_attackChance|equip_criticalChance|equip_criticalMultiplier|equip_attackDamage_Min|equip_attackDamage_Max|equip_blockChance|equip_damageResistance|equip_conditions[condition|magnitude|]|hasUseEffect|use_boostHP_Min|use_boostHP_Max|use_boostAP_Min|use_boostAP_Max|use_conditionsSource[condition|magnitude|duration|chance|]|hasHitEffect|hit_boostHP_Min|hit_boostHP_Max|hit_boostAP_Min|hit_boostAP_Max|hit_conditionsSource[condition|magnitude|duration|chance|]|hit_conditionsTarget[condition|magnitude|duration|chance|]|hasKillEffect|kill_boostHP_Min|kill_boostHP_Max|kill_boostAP_Min|kill_boostAP_Max|kill_conditionsSource[condition|magnitude|duration|chance|]|];
|
||||
[id|iconID|name|category|displaytype|hasManualPrice|baseMarketCost|hasEquipEffect|equip_boostMaxHP|equip_boostMaxAP|equip_moveCostPenalty|equip_attackCost|equip_attackChance|equip_criticalChance|equip_criticalMultiplier|equip_attackDamage_Min|equip_attackDamage_Max|equip_blockChance|equip_damageResistance|equip_conditions[condition|magnitude|]|hasUseEffect|use_boostHP_Min|use_boostHP_Max|use_boostAP_Min|use_boostAP_Max|use_conditionsSource[condition|magnitude|duration|chance|]|hasHitEffect|hit_boostHP_Min|hit_boostHP_Max|hit_boostAP_Min|hit_boostAP_Max|hit_conditionsSource[condition|magnitude|duration|chance|]|hit_conditionsTarget[condition|magnitude|duration|chance|]|hasKillEffect|kill_boostHP_Min|kill_boostHP_Max|kill_boostAP_Min|kill_boostAP_Max|kill_conditionsSource[condition|magnitude|duration|chance|]|];
|
||||
{clay|actorconditions_1:9|Lehmklumpen|31||1|1|||||||||||||||||||||||||||||||||};
|
||||
{rock|items_misc:28|Kleiner Stein|31||1|1|||||||||||||||||||||||||||||||||};
|
||||
{gem1|items_misc:0|Glaskristall|31||1|2|||||||||||||||||||||||||||||||||};
|
||||
@@ -137,7 +137,7 @@
|
||||
</string>
|
||||
|
||||
<string name="itemlist_quest">
|
||||
[searchTag|iconID|name|category|displaytype|hasManualPrice|baseMarketCost|hasEquipEffect|equip_boostMaxHP|equip_boostMaxAP|equip_moveCostPenalty|equip_attackCost|equip_attackChance|equip_criticalChance|equip_criticalMultiplier|equip_attackDamage_Min|equip_attackDamage_Max|equip_blockChance|equip_damageResistance|equip_conditions[condition|magnitude|]|hasUseEffect|use_boostHP_Min|use_boostHP_Max|use_boostAP_Min|use_boostAP_Max|use_conditionsSource[condition|magnitude|duration|chance|]|hasHitEffect|hit_boostHP_Min|hit_boostHP_Max|hit_boostAP_Min|hit_boostAP_Max|hit_conditionsSource[condition|magnitude|duration|chance|]|hit_conditionsTarget[condition|magnitude|duration|chance|]|hasKillEffect|kill_boostHP_Min|kill_boostHP_Max|kill_boostAP_Min|kill_boostAP_Max|kill_conditionsSource[condition|magnitude|duration|chance|]|];
|
||||
[id|iconID|name|category|displaytype|hasManualPrice|baseMarketCost|hasEquipEffect|equip_boostMaxHP|equip_boostMaxAP|equip_moveCostPenalty|equip_attackCost|equip_attackChance|equip_criticalChance|equip_criticalMultiplier|equip_attackDamage_Min|equip_attackDamage_Max|equip_blockChance|equip_damageResistance|equip_conditions[condition|magnitude|]|hasUseEffect|use_boostHP_Min|use_boostHP_Max|use_boostAP_Min|use_boostAP_Max|use_conditionsSource[condition|magnitude|duration|chance|]|hasHitEffect|hit_boostHP_Min|hit_boostHP_Max|hit_boostAP_Min|hit_boostAP_Max|hit_conditionsSource[condition|magnitude|duration|chance|]|hit_conditionsTarget[condition|magnitude|duration|chance|]|hasKillEffect|kill_boostHP_Min|kill_boostHP_Max|kill_boostAP_Min|kill_boostAP_Max|kill_conditionsSource[condition|magnitude|duration|chance|]|];
|
||||
{tail_caverat|items_misc:38|Schwanz einer Höhlenratte|31|1|1|0|||||||||||||||||||||||||||||||||};
|
||||
{tail_trainingrat|items_misc:38|Kleiner Rattenschwanz|31|1|1|0|||||||||||||||||||||||||||||||||};
|
||||
{rest|items_consumables:33|Trank der Wiederherstellung|20|1|1|0||||||||||||||1|99|99|||||||||||||||||};
|
||||
@@ -159,7 +159,7 @@
|
||||
</string>
|
||||
|
||||
<string name="itemlist_v068">
|
||||
[searchTag|iconID|name|category|displaytype|hasManualPrice|baseMarketCost|hasEquipEffect|equip_boostMaxHP|equip_boostMaxAP|equip_moveCostPenalty|equip_attackCost|equip_attackChance|equip_criticalChance|equip_criticalMultiplier|equip_attackDamage_Min|equip_attackDamage_Max|equip_blockChance|equip_damageResistance|equip_conditions[condition|magnitude|]|hasUseEffect|use_boostHP_Min|use_boostHP_Max|use_boostAP_Min|use_boostAP_Max|use_conditionsSource[condition|magnitude|duration|chance|]|hasHitEffect|hit_boostHP_Min|hit_boostHP_Max|hit_boostAP_Min|hit_boostAP_Max|hit_conditionsSource[condition|magnitude|duration|chance|]|hit_conditionsTarget[condition|magnitude|duration|chance|]|hasKillEffect|kill_boostHP_Min|kill_boostHP_Max|kill_boostAP_Min|kill_boostAP_Max|kill_conditionsSource[condition|magnitude|duration|chance|]|];
|
||||
[id|iconID|name|category|displaytype|hasManualPrice|baseMarketCost|hasEquipEffect|equip_boostMaxHP|equip_boostMaxAP|equip_moveCostPenalty|equip_attackCost|equip_attackChance|equip_criticalChance|equip_criticalMultiplier|equip_attackDamage_Min|equip_attackDamage_Max|equip_blockChance|equip_damageResistance|equip_conditions[condition|magnitude|]|hasUseEffect|use_boostHP_Min|use_boostHP_Max|use_boostAP_Min|use_boostAP_Max|use_conditionsSource[condition|magnitude|duration|chance|]|hasHitEffect|hit_boostHP_Min|hit_boostHP_Max|hit_boostAP_Min|hit_boostAP_Max|hit_conditionsSource[condition|magnitude|duration|chance|]|hit_conditionsTarget[condition|magnitude|duration|chance|]|hasKillEffect|kill_boostHP_Min|kill_boostHP_Max|kill_boostAP_Min|kill_boostAP_Max|kill_conditionsSource[condition|magnitude|duration|chance|]|];
|
||||
{armor_chain1|items_armours:17|Rostige Kettenrüstung|3|||3629|1|||||-9|||||20||||||||||||||||||||||};
|
||||
{armor_chain2|items_armours:17|Einfache Kettenrüstung|3|||4191|1|||||-10|||||22||||||||||||||||||||||};
|
||||
{hat_leather1|items_armours:24|Gehärtete Lederkappe|2|||261|1|||||-2|||||7||||||||||||||||||||||};
|
||||
@@ -178,7 +178,7 @@
|
||||
</string>
|
||||
|
||||
<string name="itemlist_v069">
|
||||
[searchTag|iconID|name|category|displaytype|hasManualPrice|baseMarketCost|hasEquipEffect|equip_boostMaxHP|equip_boostMaxAP|equip_moveCostPenalty|equip_attackCost|equip_attackChance|equip_criticalChance|equip_criticalMultiplier|equip_attackDamage_Min|equip_attackDamage_Max|equip_blockChance|equip_damageResistance|equip_conditions[condition|magnitude|]|hasUseEffect|use_boostHP_Min|use_boostHP_Max|use_boostAP_Min|use_boostAP_Max|use_conditionsSource[condition|magnitude|duration|chance|]|hasHitEffect|hit_boostHP_Min|hit_boostHP_Max|hit_boostAP_Min|hit_boostAP_Max|hit_conditionsSource[condition|magnitude|duration|chance|]|hit_conditionsTarget[condition|magnitude|duration|chance|]|hasKillEffect|kill_boostHP_Min|kill_boostHP_Max|kill_boostAP_Min|kill_boostAP_Max|kill_conditionsSource[condition|magnitude|duration|chance|]|];
|
||||
[id|iconID|name|category|displaytype|hasManualPrice|baseMarketCost|hasEquipEffect|equip_boostMaxHP|equip_boostMaxAP|equip_moveCostPenalty|equip_attackCost|equip_attackChance|equip_criticalChance|equip_criticalMultiplier|equip_attackDamage_Min|equip_attackDamage_Max|equip_blockChance|equip_damageResistance|equip_conditions[condition|magnitude|]|hasUseEffect|use_boostHP_Min|use_boostHP_Max|use_boostAP_Min|use_boostAP_Max|use_conditionsSource[condition|magnitude|duration|chance|]|hasHitEffect|hit_boostHP_Min|hit_boostHP_Max|hit_boostAP_Min|hit_boostAP_Max|hit_conditionsSource[condition|magnitude|duration|chance|]|hit_conditionsTarget[condition|magnitude|duration|chance|]|hasKillEffect|kill_boostHP_Min|kill_boostHP_Max|kill_boostAP_Min|kill_boostAP_Max|kill_conditionsSource[condition|magnitude|duration|chance|]|];
|
||||
{rapier_lifesteal|items_weapons:71|Vampirdegen|0|2|1|0|1|5|||5|21|||1|6||||||||||1|0|3|||||1|3|3||||};
|
||||
{dagger_barbed|items_weapons:17|Spitzdolch|0|3|1|0|1||||4|15|||0|0|5|||||||||1||||||{{bleeding_wound|1|5|50|}}|||||||};
|
||||
{elytharan_redeemer|items_weapons:70|Elytharanischer Erlöser|0|2|1|0|1||2||5|25|||3|8|5||{{bless|1|}}|0|||||||||||||||||||};
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<resources>
|
||||
<string name="itemlist_money">
|
||||
[searchTag|iconID|name|category|displaytype|hasManualPrice|baseMarketCost|hasEquipEffect|equip_boostMaxHP|equip_boostMaxAP|equip_moveCostPenalty|equip_attackCost|equip_attackChance|equip_criticalChance|equip_criticalMultiplier|equip_attackDamage_Min|equip_attackDamage_Max|equip_blockChance|equip_damageResistance|equip_conditions[condition|magnitude|]|hasUseEffect|use_boostHP_Min|use_boostHP_Max|use_boostAP_Min|use_boostAP_Max|use_conditionsSource[condition|magnitude|duration|chance|]|hasHitEffect|hit_boostHP_Min|hit_boostHP_Max|hit_boostAP_Min|hit_boostAP_Max|hit_conditionsSource[condition|magnitude|duration|chance|]|hit_conditionsTarget[condition|magnitude|duration|chance|]|hasKillEffect|kill_boostHP_Min|kill_boostHP_Max|kill_boostAP_Min|kill_boostAP_Max|kill_conditionsSource[condition|magnitude|duration|chance|]|];
|
||||
[id|iconID|name|category|displaytype|hasManualPrice|baseMarketCost|hasEquipEffect|equip_boostMaxHP|equip_boostMaxAP|equip_moveCostPenalty|equip_attackCost|equip_attackChance|equip_criticalChance|equip_criticalMultiplier|equip_attackDamage_Min|equip_attackDamage_Max|equip_blockChance|equip_damageResistance|equip_conditions[condition|magnitude|]|hasUseEffect|use_boostHP_Min|use_boostHP_Max|use_boostAP_Min|use_boostAP_Max|use_conditionsSource[condition|magnitude|duration|chance|]|hasHitEffect|hit_boostHP_Min|hit_boostHP_Max|hit_boostAP_Min|hit_boostAP_Max|hit_conditionsSource[condition|magnitude|duration|chance|]|hit_conditionsTarget[condition|magnitude|duration|chance|]|hasKillEffect|kill_boostHP_Min|kill_boostHP_Max|kill_boostAP_Min|kill_boostAP_Max|kill_conditionsSource[condition|magnitude|duration|chance|]|];
|
||||
{gold|items_misc:10|Pièces d\'or|30||1|1|||||||||||||||||||||||||||||||||};
|
||||
</string>
|
||||
|
||||
<string name="itemlist_weapons">
|
||||
[searchTag|iconID|name|category|displaytype|hasManualPrice|baseMarketCost|hasEquipEffect|equip_boostMaxHP|equip_boostMaxAP|equip_moveCostPenalty|equip_attackCost|equip_attackChance|equip_criticalChance|equip_criticalMultiplier|equip_attackDamage_Min|equip_attackDamage_Max|equip_blockChance|equip_damageResistance|equip_conditions[condition|magnitude|]|hasUseEffect|use_boostHP_Min|use_boostHP_Max|use_boostAP_Min|use_boostAP_Max|use_conditionsSource[condition|magnitude|duration|chance|]|hasHitEffect|hit_boostHP_Min|hit_boostHP_Max|hit_boostAP_Min|hit_boostAP_Max|hit_conditionsSource[condition|magnitude|duration|chance|]|hit_conditionsTarget[condition|magnitude|duration|chance|]|hasKillEffect|kill_boostHP_Min|kill_boostHP_Max|kill_boostAP_Min|kill_boostAP_Max|kill_conditionsSource[condition|magnitude|duration|chance|]|];
|
||||
[id|iconID|name|category|displaytype|hasManualPrice|baseMarketCost|hasEquipEffect|equip_boostMaxHP|equip_boostMaxAP|equip_moveCostPenalty|equip_attackCost|equip_attackChance|equip_criticalChance|equip_criticalMultiplier|equip_attackDamage_Min|equip_attackDamage_Max|equip_blockChance|equip_damageResistance|equip_conditions[condition|magnitude|]|hasUseEffect|use_boostHP_Min|use_boostHP_Max|use_boostAP_Min|use_boostAP_Max|use_conditionsSource[condition|magnitude|duration|chance|]|hasHitEffect|hit_boostHP_Min|hit_boostHP_Max|hit_boostAP_Min|hit_boostAP_Max|hit_conditionsSource[condition|magnitude|duration|chance|]|hit_conditionsTarget[condition|magnitude|duration|chance|]|hasKillEffect|kill_boostHP_Min|kill_boostHP_Max|kill_boostAP_Min|kill_boostAP_Max|kill_conditionsSource[condition|magnitude|duration|chance|]|];
|
||||
{club1|items_weapons:42|Massue en bois|0|||7|1||||5|10|||0|1|||||||||||||||||||||||};
|
||||
{club3|items_weapons:44|Bâton en fer|0|||253|1||||6|5|||2|7|||||||||||||||||||||||};
|
||||
{ironsword0|items_weapons:0|Épée en fer|0|||12|1||||5|10|||0|1|||||||||||||||||||||||};
|
||||
@@ -27,7 +27,7 @@
|
||||
</string>
|
||||
|
||||
<string name="itemlist_rings">
|
||||
[searchTag|iconID|name|category|displaytype|hasManualPrice|baseMarketCost|hasEquipEffect|equip_boostMaxHP|equip_boostMaxAP|equip_moveCostPenalty|equip_attackCost|equip_attackChance|equip_criticalChance|equip_criticalMultiplier|equip_attackDamage_Min|equip_attackDamage_Max|equip_blockChance|equip_damageResistance|equip_conditions[condition|magnitude|]|hasUseEffect|use_boostHP_Min|use_boostHP_Max|use_boostAP_Min|use_boostAP_Max|use_conditionsSource[condition|magnitude|duration|chance|]|hasHitEffect|hit_boostHP_Min|hit_boostHP_Max|hit_boostAP_Min|hit_boostAP_Max|hit_conditionsSource[condition|magnitude|duration|chance|]|hit_conditionsTarget[condition|magnitude|duration|chance|]|hasKillEffect|kill_boostHP_Min|kill_boostHP_Max|kill_boostAP_Min|kill_boostAP_Max|kill_conditionsSource[condition|magnitude|duration|chance|]|];
|
||||
[id|iconID|name|category|displaytype|hasManualPrice|baseMarketCost|hasEquipEffect|equip_boostMaxHP|equip_boostMaxAP|equip_moveCostPenalty|equip_attackCost|equip_attackChance|equip_criticalChance|equip_criticalMultiplier|equip_attackDamage_Min|equip_attackDamage_Max|equip_blockChance|equip_damageResistance|equip_conditions[condition|magnitude|]|hasUseEffect|use_boostHP_Min|use_boostHP_Max|use_boostAP_Min|use_boostAP_Max|use_conditionsSource[condition|magnitude|duration|chance|]|hasHitEffect|hit_boostHP_Min|hit_boostHP_Max|hit_boostAP_Min|hit_boostAP_Max|hit_conditionsSource[condition|magnitude|duration|chance|]|hit_conditionsTarget[condition|magnitude|duration|chance|]|hasKillEffect|kill_boostHP_Min|kill_boostHP_Max|kill_boostAP_Min|kill_boostAP_Max|kill_conditionsSource[condition|magnitude|duration|chance|]|];
|
||||
{ring_dmg1|items_jewelry:0|Anneau de dommage +1|7|||215|1||||||||1|1|||||||||||||||||||||||};
|
||||
{ring_dmg2|items_jewelry:1|Anneau de dommage +2|7|||398|1||||||||2|2|||||||||||||||||||||||};
|
||||
{ring_dmg5|items_jewelry:2|Anneau de dommage +5|7|4||2014|1||||||||5|5|||||||||||||||||||||||};
|
||||
@@ -41,14 +41,14 @@
|
||||
</string>
|
||||
|
||||
<string name="itemlist_necklaces">
|
||||
[searchTag|iconID|name|category|displaytype|hasManualPrice|baseMarketCost|hasEquipEffect|equip_boostMaxHP|equip_boostMaxAP|equip_moveCostPenalty|equip_attackCost|equip_attackChance|equip_criticalChance|equip_criticalMultiplier|equip_attackDamage_Min|equip_attackDamage_Max|equip_blockChance|equip_damageResistance|equip_conditions[condition|magnitude|]|hasUseEffect|use_boostHP_Min|use_boostHP_Max|use_boostAP_Min|use_boostAP_Max|use_conditionsSource[condition|magnitude|duration|chance|]|hasHitEffect|hit_boostHP_Min|hit_boostHP_Max|hit_boostAP_Min|hit_boostAP_Max|hit_conditionsSource[condition|magnitude|duration|chance|]|hit_conditionsTarget[condition|magnitude|duration|chance|]|hasKillEffect|kill_boostHP_Min|kill_boostHP_Max|kill_boostAP_Min|kill_boostAP_Max|kill_conditionsSource[condition|magnitude|duration|chance|]|];
|
||||
[id|iconID|name|category|displaytype|hasManualPrice|baseMarketCost|hasEquipEffect|equip_boostMaxHP|equip_boostMaxAP|equip_moveCostPenalty|equip_attackCost|equip_attackChance|equip_criticalChance|equip_criticalMultiplier|equip_attackDamage_Min|equip_attackDamage_Max|equip_blockChance|equip_damageResistance|equip_conditions[condition|magnitude|]|hasUseEffect|use_boostHP_Min|use_boostHP_Max|use_boostAP_Min|use_boostAP_Max|use_conditionsSource[condition|magnitude|duration|chance|]|hasHitEffect|hit_boostHP_Min|hit_boostHP_Max|hit_boostAP_Min|hit_boostAP_Max|hit_conditionsSource[condition|magnitude|duration|chance|]|hit_conditionsTarget[condition|magnitude|duration|chance|]|hasKillEffect|kill_boostHP_Min|kill_boostHP_Max|kill_boostAP_Min|kill_boostAP_Max|kill_conditionsSource[condition|magnitude|duration|chance|]|];
|
||||
{jewel_fallhaven|items_jewelry:6|Joyau de Fallhaven|6|4||3125|1||||-1||||||||||||||||||||||||||||};
|
||||
{necklace_shield1|items_jewelry:7|Collier de protection|6|4||935|1||||||||||9||||||||||||||||||||||};
|
||||
{necklace_shield2|items_jewelry:7|Collier de protection|6|4||1255|1||||||||||12||||||||||||||||||||||};
|
||||
</string>
|
||||
|
||||
<string name="itemlist_armour">
|
||||
[searchTag|iconID|name|category|displaytype|hasManualPrice|baseMarketCost|hasEquipEffect|equip_boostMaxHP|equip_boostMaxAP|equip_moveCostPenalty|equip_attackCost|equip_attackChance|equip_criticalChance|equip_criticalMultiplier|equip_attackDamage_Min|equip_attackDamage_Max|equip_blockChance|equip_damageResistance|equip_conditions[condition|magnitude|]|hasUseEffect|use_boostHP_Min|use_boostHP_Max|use_boostAP_Min|use_boostAP_Max|use_conditionsSource[condition|magnitude|duration|chance|]|hasHitEffect|hit_boostHP_Min|hit_boostHP_Max|hit_boostAP_Min|hit_boostAP_Max|hit_conditionsSource[condition|magnitude|duration|chance|]|hit_conditionsTarget[condition|magnitude|duration|chance|]|hasKillEffect|kill_boostHP_Min|kill_boostHP_Max|kill_boostAP_Min|kill_boostAP_Max|kill_conditionsSource[condition|magnitude|duration|chance|]|];
|
||||
[id|iconID|name|category|displaytype|hasManualPrice|baseMarketCost|hasEquipEffect|equip_boostMaxHP|equip_boostMaxAP|equip_moveCostPenalty|equip_attackCost|equip_attackChance|equip_criticalChance|equip_criticalMultiplier|equip_attackDamage_Min|equip_attackDamage_Max|equip_blockChance|equip_damageResistance|equip_conditions[condition|magnitude|]|hasUseEffect|use_boostHP_Min|use_boostHP_Max|use_boostAP_Min|use_boostAP_Max|use_conditionsSource[condition|magnitude|duration|chance|]|hasHitEffect|hit_boostHP_Min|hit_boostHP_Max|hit_boostAP_Min|hit_boostAP_Max|hit_conditionsSource[condition|magnitude|duration|chance|]|hit_conditionsTarget[condition|magnitude|duration|chance|]|hasKillEffect|kill_boostHP_Min|kill_boostHP_Max|kill_boostAP_Min|kill_boostAP_Max|kill_conditionsSource[condition|magnitude|duration|chance|]|];
|
||||
{shirt1|items_armours:14|Chemise|3|||16|1||||||||||2||||||||||||||||||||||};
|
||||
{shirt2|items_armours:14|Chemise fine|3|||72|1||||||||||5||||||||||||||||||||||};
|
||||
{shirt_dmgresist|items_armours:15|Chemise de cuir durci|3|4||1633|1||||||||||5|1|||||||||||||||||||||};
|
||||
@@ -77,7 +77,7 @@
|
||||
</string>
|
||||
|
||||
<string name="itemlist_food">
|
||||
[searchTag|iconID|name|category|displaytype|hasManualPrice|baseMarketCost|hasEquipEffect|equip_boostMaxHP|equip_boostMaxAP|equip_moveCostPenalty|equip_attackCost|equip_attackChance|equip_criticalChance|equip_criticalMultiplier|equip_attackDamage_Min|equip_attackDamage_Max|equip_blockChance|equip_damageResistance|equip_conditions[condition|magnitude|]|hasUseEffect|use_boostHP_Min|use_boostHP_Max|use_boostAP_Min|use_boostAP_Max|use_conditionsSource[condition|magnitude|duration|chance|]|hasHitEffect|hit_boostHP_Min|hit_boostHP_Max|hit_boostAP_Min|hit_boostAP_Max|hit_conditionsSource[condition|magnitude|duration|chance|]|hit_conditionsTarget[condition|magnitude|duration|chance|]|hasKillEffect|kill_boostHP_Min|kill_boostHP_Max|kill_boostAP_Min|kill_boostAP_Max|kill_conditionsSource[condition|magnitude|duration|chance|]|];
|
||||
[id|iconID|name|category|displaytype|hasManualPrice|baseMarketCost|hasEquipEffect|equip_boostMaxHP|equip_boostMaxAP|equip_moveCostPenalty|equip_attackCost|equip_attackChance|equip_criticalChance|equip_criticalMultiplier|equip_attackDamage_Min|equip_attackDamage_Max|equip_blockChance|equip_damageResistance|equip_conditions[condition|magnitude|]|hasUseEffect|use_boostHP_Min|use_boostHP_Max|use_boostAP_Min|use_boostAP_Max|use_conditionsSource[condition|magnitude|duration|chance|]|hasHitEffect|hit_boostHP_Min|hit_boostHP_Max|hit_boostAP_Min|hit_boostAP_Max|hit_conditionsSource[condition|magnitude|duration|chance|]|hit_conditionsTarget[condition|magnitude|duration|chance|]|hasKillEffect|kill_boostHP_Min|kill_boostHP_Max|kill_boostAP_Min|kill_boostAP_Max|kill_conditionsSource[condition|magnitude|duration|chance|]|];
|
||||
{apple_green|items_consumables:2|Pomme verte|21|||9||||||||||||||1|4|4|||||||||||||||||};
|
||||
{apple_red|items_consumables:3|Pomme rouge|21|||15||||||||||||||1|6|6|||||||||||||||||};
|
||||
{meat|items_consumables:25|Viande|21||1|29||||||||||||||1|12|12|||||||||||||||||};
|
||||
@@ -92,7 +92,7 @@
|
||||
</string>
|
||||
|
||||
<string name="itemlist_potions">
|
||||
[searchTag|iconID|name|category|displaytype|hasManualPrice|baseMarketCost|hasEquipEffect|equip_boostMaxHP|equip_boostMaxAP|equip_moveCostPenalty|equip_attackCost|equip_attackChance|equip_criticalChance|equip_criticalMultiplier|equip_attackDamage_Min|equip_attackDamage_Max|equip_blockChance|equip_damageResistance|equip_conditions[condition|magnitude|]|hasUseEffect|use_boostHP_Min|use_boostHP_Max|use_boostAP_Min|use_boostAP_Max|use_conditionsSource[condition|magnitude|duration|chance|]|hasHitEffect|hit_boostHP_Min|hit_boostHP_Max|hit_boostAP_Min|hit_boostAP_Max|hit_conditionsSource[condition|magnitude|duration|chance|]|hit_conditionsTarget[condition|magnitude|duration|chance|]|hasKillEffect|kill_boostHP_Min|kill_boostHP_Max|kill_boostAP_Min|kill_boostAP_Max|kill_conditionsSource[condition|magnitude|duration|chance|]|];
|
||||
[id|iconID|name|category|displaytype|hasManualPrice|baseMarketCost|hasEquipEffect|equip_boostMaxHP|equip_boostMaxAP|equip_moveCostPenalty|equip_attackCost|equip_attackChance|equip_criticalChance|equip_criticalMultiplier|equip_attackDamage_Min|equip_attackDamage_Max|equip_blockChance|equip_damageResistance|equip_conditions[condition|magnitude|]|hasUseEffect|use_boostHP_Min|use_boostHP_Max|use_boostAP_Min|use_boostAP_Max|use_conditionsSource[condition|magnitude|duration|chance|]|hasHitEffect|hit_boostHP_Min|hit_boostHP_Max|hit_boostAP_Min|hit_boostAP_Max|hit_conditionsSource[condition|magnitude|duration|chance|]|hit_conditionsTarget[condition|magnitude|duration|chance|]|hasKillEffect|kill_boostHP_Min|kill_boostHP_Max|kill_boostAP_Min|kill_boostAP_Max|kill_conditionsSource[condition|magnitude|duration|chance|]|];
|
||||
{vial_empty1|items_consumables:56|Petit flacon vide|31||1|2|||||||||||||||||||||||||||||||||};
|
||||
{vial_empty2|items_consumables:57|Flacon vide|31||1|4|||||||||||||||||||||||||||||||||};
|
||||
{vial_empty3|items_consumables:59|Flasque vide|31||1|6|||||||||||||||||||||||||||||||||};
|
||||
@@ -108,7 +108,7 @@
|
||||
</string>
|
||||
|
||||
<string name="itemlist_animal">
|
||||
[searchTag|iconID|name|category|displaytype|hasManualPrice|baseMarketCost|hasEquipEffect|equip_boostMaxHP|equip_boostMaxAP|equip_moveCostPenalty|equip_attackCost|equip_attackChance|equip_criticalChance|equip_criticalMultiplier|equip_attackDamage_Min|equip_attackDamage_Max|equip_blockChance|equip_damageResistance|equip_conditions[condition|magnitude|]|hasUseEffect|use_boostHP_Min|use_boostHP_Max|use_boostAP_Min|use_boostAP_Max|use_conditionsSource[condition|magnitude|duration|chance|]|hasHitEffect|hit_boostHP_Min|hit_boostHP_Max|hit_boostAP_Min|hit_boostAP_Max|hit_conditionsSource[condition|magnitude|duration|chance|]|hit_conditionsTarget[condition|magnitude|duration|chance|]|hasKillEffect|kill_boostHP_Min|kill_boostHP_Max|kill_boostAP_Min|kill_boostAP_Max|kill_conditionsSource[condition|magnitude|duration|chance|]|];
|
||||
[id|iconID|name|category|displaytype|hasManualPrice|baseMarketCost|hasEquipEffect|equip_boostMaxHP|equip_boostMaxAP|equip_moveCostPenalty|equip_attackCost|equip_attackChance|equip_criticalChance|equip_criticalMultiplier|equip_attackDamage_Min|equip_attackDamage_Max|equip_blockChance|equip_damageResistance|equip_conditions[condition|magnitude|]|hasUseEffect|use_boostHP_Min|use_boostHP_Max|use_boostAP_Min|use_boostAP_Max|use_conditionsSource[condition|magnitude|duration|chance|]|hasHitEffect|hit_boostHP_Min|hit_boostHP_Max|hit_boostAP_Min|hit_boostAP_Max|hit_conditionsSource[condition|magnitude|duration|chance|]|hit_conditionsTarget[condition|magnitude|duration|chance|]|hasKillEffect|kill_boostHP_Min|kill_boostHP_Max|kill_boostAP_Min|kill_boostAP_Max|kill_conditionsSource[condition|magnitude|duration|chance|]|];
|
||||
{hair|items_misc:48|Pelage d\'animal|31||1|2|||||||||||||||||||||||||||||||||};
|
||||
{insectwing|items_misc:52|Aile d\'insecte|31||1|3|||||||||||||||||||||||||||||||||};
|
||||
{bone|items_misc:44|Os|31||1|2|||||||||||||||||||||||||||||||||};
|
||||
@@ -123,7 +123,7 @@
|
||||
</string>
|
||||
|
||||
<string name="itemlist_junk">
|
||||
[searchTag|iconID|name|category|displaytype|hasManualPrice|baseMarketCost|hasEquipEffect|equip_boostMaxHP|equip_boostMaxAP|equip_moveCostPenalty|equip_attackCost|equip_attackChance|equip_criticalChance|equip_criticalMultiplier|equip_attackDamage_Min|equip_attackDamage_Max|equip_blockChance|equip_damageResistance|equip_conditions[condition|magnitude|]|hasUseEffect|use_boostHP_Min|use_boostHP_Max|use_boostAP_Min|use_boostAP_Max|use_conditionsSource[condition|magnitude|duration|chance|]|hasHitEffect|hit_boostHP_Min|hit_boostHP_Max|hit_boostAP_Min|hit_boostAP_Max|hit_conditionsSource[condition|magnitude|duration|chance|]|hit_conditionsTarget[condition|magnitude|duration|chance|]|hasKillEffect|kill_boostHP_Min|kill_boostHP_Max|kill_boostAP_Min|kill_boostAP_Max|kill_conditionsSource[condition|magnitude|duration|chance|]|];
|
||||
[id|iconID|name|category|displaytype|hasManualPrice|baseMarketCost|hasEquipEffect|equip_boostMaxHP|equip_boostMaxAP|equip_moveCostPenalty|equip_attackCost|equip_attackChance|equip_criticalChance|equip_criticalMultiplier|equip_attackDamage_Min|equip_attackDamage_Max|equip_blockChance|equip_damageResistance|equip_conditions[condition|magnitude|]|hasUseEffect|use_boostHP_Min|use_boostHP_Max|use_boostAP_Min|use_boostAP_Max|use_conditionsSource[condition|magnitude|duration|chance|]|hasHitEffect|hit_boostHP_Min|hit_boostHP_Max|hit_boostAP_Min|hit_boostAP_Max|hit_conditionsSource[condition|magnitude|duration|chance|]|hit_conditionsTarget[condition|magnitude|duration|chance|]|hasKillEffect|kill_boostHP_Min|kill_boostHP_Max|kill_boostAP_Min|kill_boostAP_Max|kill_conditionsSource[condition|magnitude|duration|chance|]|];
|
||||
{clay|actorconditions_1:9|Motte d\'argile|31||1|1|||||||||||||||||||||||||||||||||};
|
||||
{rock|items_misc:28|Petit caillou|31||1|1|||||||||||||||||||||||||||||||||};
|
||||
{gem1|items_misc:0|Gemme en verre|31||1|2|||||||||||||||||||||||||||||||||};
|
||||
@@ -136,7 +136,7 @@
|
||||
</string>
|
||||
|
||||
<string name="itemlist_quest">
|
||||
[searchTag|iconID|name|category|displaytype|hasManualPrice|baseMarketCost|hasEquipEffect|equip_boostMaxHP|equip_boostMaxAP|equip_moveCostPenalty|equip_attackCost|equip_attackChance|equip_criticalChance|equip_criticalMultiplier|equip_attackDamage_Min|equip_attackDamage_Max|equip_blockChance|equip_damageResistance|equip_conditions[condition|magnitude|]|hasUseEffect|use_boostHP_Min|use_boostHP_Max|use_boostAP_Min|use_boostAP_Max|use_conditionsSource[condition|magnitude|duration|chance|]|hasHitEffect|hit_boostHP_Min|hit_boostHP_Max|hit_boostAP_Min|hit_boostAP_Max|hit_conditionsSource[condition|magnitude|duration|chance|]|hit_conditionsTarget[condition|magnitude|duration|chance|]|hasKillEffect|kill_boostHP_Min|kill_boostHP_Max|kill_boostAP_Min|kill_boostAP_Max|kill_conditionsSource[condition|magnitude|duration|chance|]|];
|
||||
[id|iconID|name|category|displaytype|hasManualPrice|baseMarketCost|hasEquipEffect|equip_boostMaxHP|equip_boostMaxAP|equip_moveCostPenalty|equip_attackCost|equip_attackChance|equip_criticalChance|equip_criticalMultiplier|equip_attackDamage_Min|equip_attackDamage_Max|equip_blockChance|equip_damageResistance|equip_conditions[condition|magnitude|]|hasUseEffect|use_boostHP_Min|use_boostHP_Max|use_boostAP_Min|use_boostAP_Max|use_conditionsSource[condition|magnitude|duration|chance|]|hasHitEffect|hit_boostHP_Min|hit_boostHP_Max|hit_boostAP_Min|hit_boostAP_Max|hit_conditionsSource[condition|magnitude|duration|chance|]|hit_conditionsTarget[condition|magnitude|duration|chance|]|hasKillEffect|kill_boostHP_Min|kill_boostHP_Max|kill_boostAP_Min|kill_boostAP_Max|kill_conditionsSource[condition|magnitude|duration|chance|]|];
|
||||
{tail_caverat|items_misc:38|Queue de rat des caves|31|1|1|0|||||||||||||||||||||||||||||||||};
|
||||
{tail_trainingrat|items_misc:38|Queue de petit rat|31|1|1|0|||||||||||||||||||||||||||||||||};
|
||||
{rest|items_consumables:33|Potion de restauration|20|1|1|0||||||||||||||1|99|99|||||||||||||||||};
|
||||
@@ -158,7 +158,7 @@
|
||||
</string>
|
||||
|
||||
<string name="itemlist_v068">
|
||||
[searchTag|iconID|name|category|displaytype|hasManualPrice|baseMarketCost|hasEquipEffect|equip_boostMaxHP|equip_boostMaxAP|equip_moveCostPenalty|equip_attackCost|equip_attackChance|equip_criticalChance|equip_criticalMultiplier|equip_attackDamage_Min|equip_attackDamage_Max|equip_blockChance|equip_damageResistance|equip_conditions[condition|magnitude|]|hasUseEffect|use_boostHP_Min|use_boostHP_Max|use_boostAP_Min|use_boostAP_Max|use_conditionsSource[condition|magnitude|duration|chance|]|hasHitEffect|hit_boostHP_Min|hit_boostHP_Max|hit_boostAP_Min|hit_boostAP_Max|hit_conditionsSource[condition|magnitude|duration|chance|]|hit_conditionsTarget[condition|magnitude|duration|chance|]|hasKillEffect|kill_boostHP_Min|kill_boostHP_Max|kill_boostAP_Min|kill_boostAP_Max|kill_conditionsSource[condition|magnitude|duration|chance|]|];
|
||||
[id|iconID|name|category|displaytype|hasManualPrice|baseMarketCost|hasEquipEffect|equip_boostMaxHP|equip_boostMaxAP|equip_moveCostPenalty|equip_attackCost|equip_attackChance|equip_criticalChance|equip_criticalMultiplier|equip_attackDamage_Min|equip_attackDamage_Max|equip_blockChance|equip_damageResistance|equip_conditions[condition|magnitude|]|hasUseEffect|use_boostHP_Min|use_boostHP_Max|use_boostAP_Min|use_boostAP_Max|use_conditionsSource[condition|magnitude|duration|chance|]|hasHitEffect|hit_boostHP_Min|hit_boostHP_Max|hit_boostAP_Min|hit_boostAP_Max|hit_conditionsSource[condition|magnitude|duration|chance|]|hit_conditionsTarget[condition|magnitude|duration|chance|]|hasKillEffect|kill_boostHP_Min|kill_boostHP_Max|kill_boostAP_Min|kill_boostAP_Max|kill_conditionsSource[condition|magnitude|duration|chance|]|];
|
||||
{armor_chain1|items_armours:17|Cotte de mailles rouillée|3|||3629|1|||||-9|||||20||||||||||||||||||||||};
|
||||
{armor_chain2|items_armours:17|Cotte de mailles ordinaire|3|||4191|1|||||-10|||||22||||||||||||||||||||||};
|
||||
{hat_leather1|items_armours:24|Casquette de cuir durci|2|||261|1|||||-2|||||7||||||||||||||||||||||};
|
||||
@@ -177,7 +177,7 @@
|
||||
</string>
|
||||
|
||||
<string name="itemlist_v069">
|
||||
[searchTag|iconID|name|category|displaytype|hasManualPrice|baseMarketCost|hasEquipEffect|equip_boostMaxHP|equip_boostMaxAP|equip_moveCostPenalty|equip_attackCost|equip_attackChance|equip_criticalChance|equip_criticalMultiplier|equip_attackDamage_Min|equip_attackDamage_Max|equip_blockChance|equip_damageResistance|equip_conditions[condition|magnitude|]|hasUseEffect|use_boostHP_Min|use_boostHP_Max|use_boostAP_Min|use_boostAP_Max|use_conditionsSource[condition|magnitude|duration|chance|]|hasHitEffect|hit_boostHP_Min|hit_boostHP_Max|hit_boostAP_Min|hit_boostAP_Max|hit_conditionsSource[condition|magnitude|duration|chance|]|hit_conditionsTarget[condition|magnitude|duration|chance|]|hasKillEffect|kill_boostHP_Min|kill_boostHP_Max|kill_boostAP_Min|kill_boostAP_Max|kill_conditionsSource[condition|magnitude|duration|chance|]|];
|
||||
[id|iconID|name|category|displaytype|hasManualPrice|baseMarketCost|hasEquipEffect|equip_boostMaxHP|equip_boostMaxAP|equip_moveCostPenalty|equip_attackCost|equip_attackChance|equip_criticalChance|equip_criticalMultiplier|equip_attackDamage_Min|equip_attackDamage_Max|equip_blockChance|equip_damageResistance|equip_conditions[condition|magnitude|]|hasUseEffect|use_boostHP_Min|use_boostHP_Max|use_boostAP_Min|use_boostAP_Max|use_conditionsSource[condition|magnitude|duration|chance|]|hasHitEffect|hit_boostHP_Min|hit_boostHP_Max|hit_boostAP_Min|hit_boostAP_Max|hit_conditionsSource[condition|magnitude|duration|chance|]|hit_conditionsTarget[condition|magnitude|duration|chance|]|hasKillEffect|kill_boostHP_Min|kill_boostHP_Max|kill_boostAP_Min|kill_boostAP_Max|kill_conditionsSource[condition|magnitude|duration|chance|]|];
|
||||
{rapier_lifesteal|items_weapons:71|Rapière voleuse de vie|0|2|1|0|1|5|||5|21|||1|6||||||||||1|0|3|||||1|3|3||||};
|
||||
{dagger_barbed|items_weapons:17|Dague dentelée|0|3|1|0|1||||4|15|||0|0|5|||||||||1||||||{{bleeding_wound|1|5|50|}}|||||||};
|
||||
{elytharan_redeemer|items_weapons:70|Rédempteur d\'Elytharan|0|2|1|0|1||2||5|25|||3|8|5||{{bless|1|}}|0|||||||||||||||||||};
|
||||
@@ -207,14 +207,14 @@
|
||||
</string>
|
||||
|
||||
<string name="itemlist_v069_2">
|
||||
[searchTag|iconID|name|category|displaytype|hasManualPrice|baseMarketCost|hasEquipEffect|equip_boostMaxHP|equip_boostMaxAP|equip_moveCostPenalty|equip_attackCost|equip_attackChance|equip_criticalChance|equip_criticalMultiplier|equip_attackDamage_Min|equip_attackDamage_Max|equip_blockChance|equip_damageResistance|equip_conditions[condition|magnitude|]|hasUseEffect|use_boostHP_Min|use_boostHP_Max|use_boostAP_Min|use_boostAP_Max|use_conditionsSource[condition|magnitude|duration|chance|]|hasHitEffect|hit_boostHP_Min|hit_boostHP_Max|hit_boostAP_Min|hit_boostAP_Max|hit_conditionsSource[condition|magnitude|duration|chance|]|hit_conditionsTarget[condition|magnitude|duration|chance|]|hasKillEffect|kill_boostHP_Min|kill_boostHP_Max|kill_boostAP_Min|kill_boostAP_Max|kill_conditionsSource[condition|magnitude|duration|chance|]|];
|
||||
[id|iconID|name|category|displaytype|hasManualPrice|baseMarketCost|hasEquipEffect|equip_boostMaxHP|equip_boostMaxAP|equip_moveCostPenalty|equip_attackCost|equip_attackChance|equip_criticalChance|equip_criticalMultiplier|equip_attackDamage_Min|equip_attackDamage_Max|equip_blockChance|equip_damageResistance|equip_conditions[condition|magnitude|]|hasUseEffect|use_boostHP_Min|use_boostHP_Max|use_boostAP_Min|use_boostAP_Max|use_conditionsSource[condition|magnitude|duration|chance|]|hasHitEffect|hit_boostHP_Min|hit_boostHP_Max|hit_boostAP_Min|hit_boostAP_Max|hit_conditionsSource[condition|magnitude|duration|chance|]|hit_conditionsTarget[condition|magnitude|duration|chance|]|hasKillEffect|kill_boostHP_Min|kill_boostHP_Max|kill_boostAP_Min|kill_boostAP_Max|kill_conditionsSource[condition|magnitude|duration|chance|]|];
|
||||
{rusted_iron_sword|items_weapons:0|Épée en fer rouillée|0|||52|1||||5|10|||1|2|||||||||||||||||||||||};
|
||||
{broken_buckler|items_armours:0|Bouclier de bois brisé|1|||120|1|||||-5|||||1||||||||||||||||||||||};
|
||||
{used_gloves|items_armours:35|Gants tâchés de sang|4|||56|1||||||||||1||||||||||||||||||||||};
|
||||
</string>
|
||||
|
||||
<string name="itemlist_v069_questitems">
|
||||
[searchTag|iconID|name|category|displaytype|hasManualPrice|baseMarketCost|hasEquipEffect|equip_boostMaxHP|equip_boostMaxAP|equip_moveCostPenalty|equip_attackCost|equip_attackChance|equip_criticalChance|equip_criticalMultiplier|equip_attackDamage_Min|equip_attackDamage_Max|equip_blockChance|equip_damageResistance|equip_conditions[condition|magnitude|]|hasUseEffect|use_boostHP_Min|use_boostHP_Max|use_boostAP_Min|use_boostAP_Max|use_conditionsSource[condition|magnitude|duration|chance|]|hasHitEffect|hit_boostHP_Min|hit_boostHP_Max|hit_boostAP_Min|hit_boostAP_Max|hit_conditionsSource[condition|magnitude|duration|chance|]|hit_conditionsTarget[condition|magnitude|duration|chance|]|hasKillEffect|kill_boostHP_Min|kill_boostHP_Max|kill_boostAP_Min|kill_boostAP_Max|kill_conditionsSource[condition|magnitude|duration|chance|]|];
|
||||
[id|iconID|name|category|displaytype|hasManualPrice|baseMarketCost|hasEquipEffect|equip_boostMaxHP|equip_boostMaxAP|equip_moveCostPenalty|equip_attackCost|equip_attackChance|equip_criticalChance|equip_criticalMultiplier|equip_attackDamage_Min|equip_attackDamage_Max|equip_blockChance|equip_damageResistance|equip_conditions[condition|magnitude|]|hasUseEffect|use_boostHP_Min|use_boostHP_Max|use_boostAP_Min|use_boostAP_Max|use_conditionsSource[condition|magnitude|duration|chance|]|hasHitEffect|hit_boostHP_Min|hit_boostHP_Max|hit_boostAP_Min|hit_boostAP_Max|hit_conditionsSource[condition|magnitude|duration|chance|]|hit_conditionsTarget[condition|magnitude|duration|chance|]|hasKillEffect|kill_boostHP_Min|kill_boostHP_Max|kill_boostAP_Min|kill_boostAP_Max|kill_conditionsSource[condition|magnitude|duration|chance|]|];
|
||||
{bwm_claws|items_misc:47|Griffe de wyrm blanche|31||1|35|||||||||||||||||||||||||||||||||};
|
||||
{bwm_permit|items_books:8|Laisser-passer falsifié de Blackwater|31|1|1|0|||||||||||||||||||||||||||||||||};
|
||||
{bjorgur_dagger|items_weapons:14|Dague de famille de Bjorgur|0|1|1|0|1||||5||||||||||||||||||||||||||||};
|
||||
|
||||
@@ -2,12 +2,12 @@
|
||||
|
||||
<resources>
|
||||
<string name="itemlist_money">
|
||||
[searchTag|iconID|name|category|displaytype|hasManualPrice|baseMarketCost|hasEquipEffect|equip_boostMaxHP|equip_boostMaxAP|equip_moveCostPenalty|equip_attackCost|equip_attackChance|equip_criticalChance|equip_criticalMultiplier|equip_attackDamage_Min|equip_attackDamage_Max|equip_blockChance|equip_damageResistance|equip_conditions[condition|magnitude|]|hasUseEffect|use_boostHP_Min|use_boostHP_Max|use_boostAP_Min|use_boostAP_Max|use_conditionsSource[condition|magnitude|duration|chance|]|hasHitEffect|hit_boostHP_Min|hit_boostHP_Max|hit_boostAP_Min|hit_boostAP_Max|hit_conditionsSource[condition|magnitude|duration|chance|]|hit_conditionsTarget[condition|magnitude|duration|chance|]|hasKillEffect|kill_boostHP_Min|kill_boostHP_Max|kill_boostAP_Min|kill_boostAP_Max|kill_conditionsSource[condition|magnitude|duration|chance|]|];
|
||||
[id|iconID|name|category|displaytype|hasManualPrice|baseMarketCost|hasEquipEffect|equip_boostMaxHP|equip_boostMaxAP|equip_moveCostPenalty|equip_attackCost|equip_attackChance|equip_criticalChance|equip_criticalMultiplier|equip_attackDamage_Min|equip_attackDamage_Max|equip_blockChance|equip_damageResistance|equip_conditions[condition|magnitude|]|hasUseEffect|use_boostHP_Min|use_boostHP_Max|use_boostAP_Min|use_boostAP_Max|use_conditionsSource[condition|magnitude|duration|chance|]|hasHitEffect|hit_boostHP_Min|hit_boostHP_Max|hit_boostAP_Min|hit_boostAP_Max|hit_conditionsSource[condition|magnitude|duration|chance|]|hit_conditionsTarget[condition|magnitude|duration|chance|]|hasKillEffect|kill_boostHP_Min|kill_boostHP_Max|kill_boostAP_Min|kill_boostAP_Max|kill_conditionsSource[condition|magnitude|duration|chance|]|];
|
||||
{gold|items_misc:10|Monete d\'oro|30||1|1|||||||||||||||||||||||||||||||||};
|
||||
</string>
|
||||
|
||||
<string name="itemlist_weapons">
|
||||
[searchTag|iconID|name|category|displaytype|hasManualPrice|baseMarketCost|hasEquipEffect|equip_boostMaxHP|equip_boostMaxAP|equip_moveCostPenalty|equip_attackCost|equip_attackChance|equip_criticalChance|equip_criticalMultiplier|equip_attackDamage_Min|equip_attackDamage_Max|equip_blockChance|equip_damageResistance|equip_conditions[condition|magnitude|]|hasUseEffect|use_boostHP_Min|use_boostHP_Max|use_boostAP_Min|use_boostAP_Max|use_conditionsSource[condition|magnitude|duration|chance|]|hasHitEffect|hit_boostHP_Min|hit_boostHP_Max|hit_boostAP_Min|hit_boostAP_Max|hit_conditionsSource[condition|magnitude|duration|chance|]|hit_conditionsTarget[condition|magnitude|duration|chance|]|hasKillEffect|kill_boostHP_Min|kill_boostHP_Max|kill_boostAP_Min|kill_boostAP_Max|kill_conditionsSource[condition|magnitude|duration|chance|]|];
|
||||
[id|iconID|name|category|displaytype|hasManualPrice|baseMarketCost|hasEquipEffect|equip_boostMaxHP|equip_boostMaxAP|equip_moveCostPenalty|equip_attackCost|equip_attackChance|equip_criticalChance|equip_criticalMultiplier|equip_attackDamage_Min|equip_attackDamage_Max|equip_blockChance|equip_damageResistance|equip_conditions[condition|magnitude|]|hasUseEffect|use_boostHP_Min|use_boostHP_Max|use_boostAP_Min|use_boostAP_Max|use_conditionsSource[condition|magnitude|duration|chance|]|hasHitEffect|hit_boostHP_Min|hit_boostHP_Max|hit_boostAP_Min|hit_boostAP_Max|hit_conditionsSource[condition|magnitude|duration|chance|]|hit_conditionsTarget[condition|magnitude|duration|chance|]|hasKillEffect|kill_boostHP_Min|kill_boostHP_Max|kill_boostAP_Min|kill_boostAP_Max|kill_conditionsSource[condition|magnitude|duration|chance|]|];
|
||||
{club1|items_weapons:42|Clava|0|||7|1||||5|10|||0|1|||||||||||||||||||||||};
|
||||
{club3|items_weapons:44|Mazza di ferro|0|||253|1||||6|5|||2|7|||||||||||||||||||||||};
|
||||
{ironsword0|items_weapons:0|Spada di ferro|0|||12|1||||5|10|||0|1|||||||||||||||||||||||};
|
||||
@@ -28,7 +28,7 @@
|
||||
</string>
|
||||
|
||||
<string name="itemlist_rings">
|
||||
[searchTag|iconID|name|category|displaytype|hasManualPrice|baseMarketCost|hasEquipEffect|equip_boostMaxHP|equip_boostMaxAP|equip_moveCostPenalty|equip_attackCost|equip_attackChance|equip_criticalChance|equip_criticalMultiplier|equip_attackDamage_Min|equip_attackDamage_Max|equip_blockChance|equip_damageResistance|equip_conditions[condition|magnitude|]|hasUseEffect|use_boostHP_Min|use_boostHP_Max|use_boostAP_Min|use_boostAP_Max|use_conditionsSource[condition|magnitude|duration|chance|]|hasHitEffect|hit_boostHP_Min|hit_boostHP_Max|hit_boostAP_Min|hit_boostAP_Max|hit_conditionsSource[condition|magnitude|duration|chance|]|hit_conditionsTarget[condition|magnitude|duration|chance|]|hasKillEffect|kill_boostHP_Min|kill_boostHP_Max|kill_boostAP_Min|kill_boostAP_Max|kill_conditionsSource[condition|magnitude|duration|chance|]|];
|
||||
[id|iconID|name|category|displaytype|hasManualPrice|baseMarketCost|hasEquipEffect|equip_boostMaxHP|equip_boostMaxAP|equip_moveCostPenalty|equip_attackCost|equip_attackChance|equip_criticalChance|equip_criticalMultiplier|equip_attackDamage_Min|equip_attackDamage_Max|equip_blockChance|equip_damageResistance|equip_conditions[condition|magnitude|]|hasUseEffect|use_boostHP_Min|use_boostHP_Max|use_boostAP_Min|use_boostAP_Max|use_conditionsSource[condition|magnitude|duration|chance|]|hasHitEffect|hit_boostHP_Min|hit_boostHP_Max|hit_boostAP_Min|hit_boostAP_Max|hit_conditionsSource[condition|magnitude|duration|chance|]|hit_conditionsTarget[condition|magnitude|duration|chance|]|hasKillEffect|kill_boostHP_Min|kill_boostHP_Max|kill_boostAP_Min|kill_boostAP_Max|kill_conditionsSource[condition|magnitude|duration|chance|]|];
|
||||
{ring_dmg1|items_jewelry:0|Anello del danno +1|7|||215|1||||||||1|1|||||||||||||||||||||||};
|
||||
{ring_dmg2|items_jewelry:1|Anello del danno +2|7|||398|1||||||||2|2|||||||||||||||||||||||};
|
||||
{ring_dmg5|items_jewelry:2|Anello del danno +5|7|4||2014|1||||||||5|5|||||||||||||||||||||||};
|
||||
@@ -42,14 +42,14 @@
|
||||
</string>
|
||||
|
||||
<string name="itemlist_necklaces">
|
||||
[searchTag|iconID|name|category|displaytype|hasManualPrice|baseMarketCost|hasEquipEffect|equip_boostMaxHP|equip_boostMaxAP|equip_moveCostPenalty|equip_attackCost|equip_attackChance|equip_criticalChance|equip_criticalMultiplier|equip_attackDamage_Min|equip_attackDamage_Max|equip_blockChance|equip_damageResistance|equip_conditions[condition|magnitude|]|hasUseEffect|use_boostHP_Min|use_boostHP_Max|use_boostAP_Min|use_boostAP_Max|use_conditionsSource[condition|magnitude|duration|chance|]|hasHitEffect|hit_boostHP_Min|hit_boostHP_Max|hit_boostAP_Min|hit_boostAP_Max|hit_conditionsSource[condition|magnitude|duration|chance|]|hit_conditionsTarget[condition|magnitude|duration|chance|]|hasKillEffect|kill_boostHP_Min|kill_boostHP_Max|kill_boostAP_Min|kill_boostAP_Max|kill_conditionsSource[condition|magnitude|duration|chance|]|];
|
||||
[id|iconID|name|category|displaytype|hasManualPrice|baseMarketCost|hasEquipEffect|equip_boostMaxHP|equip_boostMaxAP|equip_moveCostPenalty|equip_attackCost|equip_attackChance|equip_criticalChance|equip_criticalMultiplier|equip_attackDamage_Min|equip_attackDamage_Max|equip_blockChance|equip_damageResistance|equip_conditions[condition|magnitude|]|hasUseEffect|use_boostHP_Min|use_boostHP_Max|use_boostAP_Min|use_boostAP_Max|use_conditionsSource[condition|magnitude|duration|chance|]|hasHitEffect|hit_boostHP_Min|hit_boostHP_Max|hit_boostAP_Min|hit_boostAP_Max|hit_conditionsSource[condition|magnitude|duration|chance|]|hit_conditionsTarget[condition|magnitude|duration|chance|]|hasKillEffect|kill_boostHP_Min|kill_boostHP_Max|kill_boostAP_Min|kill_boostAP_Max|kill_conditionsSource[condition|magnitude|duration|chance|]|];
|
||||
{jewel_fallhaven|items_jewelry:6|Gemma di Fallhaven|6|4||3125|1||||-1||||||||||||||||||||||||||||};
|
||||
{necklace_shield1|items_jewelry:7|Collana protettiva|6|4||935|1||||||||||9||||||||||||||||||||||};
|
||||
{necklace_shield2|items_jewelry:7|Collana protettiva|6|4||1255|1||||||||||12||||||||||||||||||||||};
|
||||
</string>
|
||||
|
||||
<string name="itemlist_armour">
|
||||
[searchTag|iconID|name|category|displaytype|hasManualPrice|baseMarketCost|hasEquipEffect|equip_boostMaxHP|equip_boostMaxAP|equip_moveCostPenalty|equip_attackCost|equip_attackChance|equip_criticalChance|equip_criticalMultiplier|equip_attackDamage_Min|equip_attackDamage_Max|equip_blockChance|equip_damageResistance|equip_conditions[condition|magnitude|]|hasUseEffect|use_boostHP_Min|use_boostHP_Max|use_boostAP_Min|use_boostAP_Max|use_conditionsSource[condition|magnitude|duration|chance|]|hasHitEffect|hit_boostHP_Min|hit_boostHP_Max|hit_boostAP_Min|hit_boostAP_Max|hit_conditionsSource[condition|magnitude|duration|chance|]|hit_conditionsTarget[condition|magnitude|duration|chance|]|hasKillEffect|kill_boostHP_Min|kill_boostHP_Max|kill_boostAP_Min|kill_boostAP_Max|kill_conditionsSource[condition|magnitude|duration|chance|]|];
|
||||
[id|iconID|name|category|displaytype|hasManualPrice|baseMarketCost|hasEquipEffect|equip_boostMaxHP|equip_boostMaxAP|equip_moveCostPenalty|equip_attackCost|equip_attackChance|equip_criticalChance|equip_criticalMultiplier|equip_attackDamage_Min|equip_attackDamage_Max|equip_blockChance|equip_damageResistance|equip_conditions[condition|magnitude|]|hasUseEffect|use_boostHP_Min|use_boostHP_Max|use_boostAP_Min|use_boostAP_Max|use_conditionsSource[condition|magnitude|duration|chance|]|hasHitEffect|hit_boostHP_Min|hit_boostHP_Max|hit_boostAP_Min|hit_boostAP_Max|hit_conditionsSource[condition|magnitude|duration|chance|]|hit_conditionsTarget[condition|magnitude|duration|chance|]|hasKillEffect|kill_boostHP_Min|kill_boostHP_Max|kill_boostAP_Min|kill_boostAP_Max|kill_conditionsSource[condition|magnitude|duration|chance|]|];
|
||||
{shirt1|items_armours:14|Camicia di stoffa|3|||16|1||||||||||2||||||||||||||||||||||};
|
||||
{shirt2|items_armours:14|Camicia pregiata|3|||72|1||||||||||5||||||||||||||||||||||};
|
||||
{shirt_dmgresist|items_armours:15|Camicia di pelle indurita|3|4||1633|1||||||||||5|1|||||||||||||||||||||};
|
||||
@@ -78,7 +78,7 @@
|
||||
</string>
|
||||
|
||||
<string name="itemlist_food">
|
||||
[searchTag|iconID|name|category|displaytype|hasManualPrice|baseMarketCost|hasEquipEffect|equip_boostMaxHP|equip_boostMaxAP|equip_moveCostPenalty|equip_attackCost|equip_attackChance|equip_criticalChance|equip_criticalMultiplier|equip_attackDamage_Min|equip_attackDamage_Max|equip_blockChance|equip_damageResistance|equip_conditions[condition|magnitude|]|hasUseEffect|use_boostHP_Min|use_boostHP_Max|use_boostAP_Min|use_boostAP_Max|use_conditionsSource[condition|magnitude|duration|chance|]|hasHitEffect|hit_boostHP_Min|hit_boostHP_Max|hit_boostAP_Min|hit_boostAP_Max|hit_conditionsSource[condition|magnitude|duration|chance|]|hit_conditionsTarget[condition|magnitude|duration|chance|]|hasKillEffect|kill_boostHP_Min|kill_boostHP_Max|kill_boostAP_Min|kill_boostAP_Max|kill_conditionsSource[condition|magnitude|duration|chance|]|];
|
||||
[id|iconID|name|category|displaytype|hasManualPrice|baseMarketCost|hasEquipEffect|equip_boostMaxHP|equip_boostMaxAP|equip_moveCostPenalty|equip_attackCost|equip_attackChance|equip_criticalChance|equip_criticalMultiplier|equip_attackDamage_Min|equip_attackDamage_Max|equip_blockChance|equip_damageResistance|equip_conditions[condition|magnitude|]|hasUseEffect|use_boostHP_Min|use_boostHP_Max|use_boostAP_Min|use_boostAP_Max|use_conditionsSource[condition|magnitude|duration|chance|]|hasHitEffect|hit_boostHP_Min|hit_boostHP_Max|hit_boostAP_Min|hit_boostAP_Max|hit_conditionsSource[condition|magnitude|duration|chance|]|hit_conditionsTarget[condition|magnitude|duration|chance|]|hasKillEffect|kill_boostHP_Min|kill_boostHP_Max|kill_boostAP_Min|kill_boostAP_Max|kill_conditionsSource[condition|magnitude|duration|chance|]|];
|
||||
{apple_green|items_consumables:2|Mela verde|21|||9||||||||||||||1|4|4|||||||||||||||||};
|
||||
{apple_red|items_consumables:3|Mela rossa|21|||15||||||||||||||1|6|6|||||||||||||||||};
|
||||
{meat|items_consumables:25|Carne|21||1|29||||||||||||||1|12|12|||||||||||||||||};
|
||||
@@ -93,7 +93,7 @@
|
||||
</string>
|
||||
|
||||
<string name="itemlist_potions">
|
||||
[searchTag|iconID|name|category|displaytype|hasManualPrice|baseMarketCost|hasEquipEffect|equip_boostMaxHP|equip_boostMaxAP|equip_moveCostPenalty|equip_attackCost|equip_attackChance|equip_criticalChance|equip_criticalMultiplier|equip_attackDamage_Min|equip_attackDamage_Max|equip_blockChance|equip_damageResistance|equip_conditions[condition|magnitude|]|hasUseEffect|use_boostHP_Min|use_boostHP_Max|use_boostAP_Min|use_boostAP_Max|use_conditionsSource[condition|magnitude|duration|chance|]|hasHitEffect|hit_boostHP_Min|hit_boostHP_Max|hit_boostAP_Min|hit_boostAP_Max|hit_conditionsSource[condition|magnitude|duration|chance|]|hit_conditionsTarget[condition|magnitude|duration|chance|]|hasKillEffect|kill_boostHP_Min|kill_boostHP_Max|kill_boostAP_Min|kill_boostAP_Max|kill_conditionsSource[condition|magnitude|duration|chance|]|];
|
||||
[id|iconID|name|category|displaytype|hasManualPrice|baseMarketCost|hasEquipEffect|equip_boostMaxHP|equip_boostMaxAP|equip_moveCostPenalty|equip_attackCost|equip_attackChance|equip_criticalChance|equip_criticalMultiplier|equip_attackDamage_Min|equip_attackDamage_Max|equip_blockChance|equip_damageResistance|equip_conditions[condition|magnitude|]|hasUseEffect|use_boostHP_Min|use_boostHP_Max|use_boostAP_Min|use_boostAP_Max|use_conditionsSource[condition|magnitude|duration|chance|]|hasHitEffect|hit_boostHP_Min|hit_boostHP_Max|hit_boostAP_Min|hit_boostAP_Max|hit_conditionsSource[condition|magnitude|duration|chance|]|hit_conditionsTarget[condition|magnitude|duration|chance|]|hasKillEffect|kill_boostHP_Min|kill_boostHP_Max|kill_boostAP_Min|kill_boostAP_Max|kill_conditionsSource[condition|magnitude|duration|chance|]|];
|
||||
{vial_empty1|items_consumables:56|Piccola fiala vuota|31||1|2|||||||||||||||||||||||||||||||||};
|
||||
{vial_empty2|items_consumables:57|Fiala vuota|31||1|4|||||||||||||||||||||||||||||||||};
|
||||
{vial_empty3|items_consumables:59|Fiasco vuoto|31||1|6|||||||||||||||||||||||||||||||||};
|
||||
@@ -109,7 +109,7 @@
|
||||
</string>
|
||||
|
||||
<string name="itemlist_animal">
|
||||
[searchTag|iconID|name|category|displaytype|hasManualPrice|baseMarketCost|hasEquipEffect|equip_boostMaxHP|equip_boostMaxAP|equip_moveCostPenalty|equip_attackCost|equip_attackChance|equip_criticalChance|equip_criticalMultiplier|equip_attackDamage_Min|equip_attackDamage_Max|equip_blockChance|equip_damageResistance|equip_conditions[condition|magnitude|]|hasUseEffect|use_boostHP_Min|use_boostHP_Max|use_boostAP_Min|use_boostAP_Max|use_conditionsSource[condition|magnitude|duration|chance|]|hasHitEffect|hit_boostHP_Min|hit_boostHP_Max|hit_boostAP_Min|hit_boostAP_Max|hit_conditionsSource[condition|magnitude|duration|chance|]|hit_conditionsTarget[condition|magnitude|duration|chance|]|hasKillEffect|kill_boostHP_Min|kill_boostHP_Max|kill_boostAP_Min|kill_boostAP_Max|kill_conditionsSource[condition|magnitude|duration|chance|]|];
|
||||
[id|iconID|name|category|displaytype|hasManualPrice|baseMarketCost|hasEquipEffect|equip_boostMaxHP|equip_boostMaxAP|equip_moveCostPenalty|equip_attackCost|equip_attackChance|equip_criticalChance|equip_criticalMultiplier|equip_attackDamage_Min|equip_attackDamage_Max|equip_blockChance|equip_damageResistance|equip_conditions[condition|magnitude|]|hasUseEffect|use_boostHP_Min|use_boostHP_Max|use_boostAP_Min|use_boostAP_Max|use_conditionsSource[condition|magnitude|duration|chance|]|hasHitEffect|hit_boostHP_Min|hit_boostHP_Max|hit_boostAP_Min|hit_boostAP_Max|hit_conditionsSource[condition|magnitude|duration|chance|]|hit_conditionsTarget[condition|magnitude|duration|chance|]|hasKillEffect|kill_boostHP_Min|kill_boostHP_Max|kill_boostAP_Min|kill_boostAP_Max|kill_conditionsSource[condition|magnitude|duration|chance|]|];
|
||||
{hair|items_misc:48|Pelliccia|31||1|2|||||||||||||||||||||||||||||||||};
|
||||
{insectwing|items_misc:52|Ala d\’insetto|31||1|3|||||||||||||||||||||||||||||||||};
|
||||
{bone|items_misc:44|Osso|31||1|2|||||||||||||||||||||||||||||||||};
|
||||
@@ -124,7 +124,7 @@
|
||||
</string>
|
||||
|
||||
<string name="itemlist_junk">
|
||||
[searchTag|iconID|name|category|displaytype|hasManualPrice|baseMarketCost|hasEquipEffect|equip_boostMaxHP|equip_boostMaxAP|equip_moveCostPenalty|equip_attackCost|equip_attackChance|equip_criticalChance|equip_criticalMultiplier|equip_attackDamage_Min|equip_attackDamage_Max|equip_blockChance|equip_damageResistance|equip_conditions[condition|magnitude|]|hasUseEffect|use_boostHP_Min|use_boostHP_Max|use_boostAP_Min|use_boostAP_Max|use_conditionsSource[condition|magnitude|duration|chance|]|hasHitEffect|hit_boostHP_Min|hit_boostHP_Max|hit_boostAP_Min|hit_boostAP_Max|hit_conditionsSource[condition|magnitude|duration|chance|]|hit_conditionsTarget[condition|magnitude|duration|chance|]|hasKillEffect|kill_boostHP_Min|kill_boostHP_Max|kill_boostAP_Min|kill_boostAP_Max|kill_conditionsSource[condition|magnitude|duration|chance|]|];
|
||||
[id|iconID|name|category|displaytype|hasManualPrice|baseMarketCost|hasEquipEffect|equip_boostMaxHP|equip_boostMaxAP|equip_moveCostPenalty|equip_attackCost|equip_attackChance|equip_criticalChance|equip_criticalMultiplier|equip_attackDamage_Min|equip_attackDamage_Max|equip_blockChance|equip_damageResistance|equip_conditions[condition|magnitude|]|hasUseEffect|use_boostHP_Min|use_boostHP_Max|use_boostAP_Min|use_boostAP_Max|use_conditionsSource[condition|magnitude|duration|chance|]|hasHitEffect|hit_boostHP_Min|hit_boostHP_Max|hit_boostAP_Min|hit_boostAP_Max|hit_conditionsSource[condition|magnitude|duration|chance|]|hit_conditionsTarget[condition|magnitude|duration|chance|]|hasKillEffect|kill_boostHP_Min|kill_boostHP_Max|kill_boostAP_Min|kill_boostAP_Max|kill_conditionsSource[condition|magnitude|duration|chance|]|];
|
||||
{clay|actorconditions_1:9|Blocco di argilla|31||1|1|||||||||||||||||||||||||||||||||};
|
||||
{rock|items_misc:28|Piccola pietra|31||1|1|||||||||||||||||||||||||||||||||};
|
||||
{gem1|items_misc:0|Gemma di vetro|31||1|2|||||||||||||||||||||||||||||||||};
|
||||
@@ -137,7 +137,7 @@
|
||||
</string>
|
||||
|
||||
<string name="itemlist_quest">
|
||||
[searchTag|iconID|name|category|displaytype|hasManualPrice|baseMarketCost|hasEquipEffect|equip_boostMaxHP|equip_boostMaxAP|equip_moveCostPenalty|equip_attackCost|equip_attackChance|equip_criticalChance|equip_criticalMultiplier|equip_attackDamage_Min|equip_attackDamage_Max|equip_blockChance|equip_damageResistance|equip_conditions[condition|magnitude|]|hasUseEffect|use_boostHP_Min|use_boostHP_Max|use_boostAP_Min|use_boostAP_Max|use_conditionsSource[condition|magnitude|duration|chance|]|hasHitEffect|hit_boostHP_Min|hit_boostHP_Max|hit_boostAP_Min|hit_boostAP_Max|hit_conditionsSource[condition|magnitude|duration|chance|]|hit_conditionsTarget[condition|magnitude|duration|chance|]|hasKillEffect|kill_boostHP_Min|kill_boostHP_Max|kill_boostAP_Min|kill_boostAP_Max|kill_conditionsSource[condition|magnitude|duration|chance|]|];
|
||||
[id|iconID|name|category|displaytype|hasManualPrice|baseMarketCost|hasEquipEffect|equip_boostMaxHP|equip_boostMaxAP|equip_moveCostPenalty|equip_attackCost|equip_attackChance|equip_criticalChance|equip_criticalMultiplier|equip_attackDamage_Min|equip_attackDamage_Max|equip_blockChance|equip_damageResistance|equip_conditions[condition|magnitude|]|hasUseEffect|use_boostHP_Min|use_boostHP_Max|use_boostAP_Min|use_boostAP_Max|use_conditionsSource[condition|magnitude|duration|chance|]|hasHitEffect|hit_boostHP_Min|hit_boostHP_Max|hit_boostAP_Min|hit_boostAP_Max|hit_conditionsSource[condition|magnitude|duration|chance|]|hit_conditionsTarget[condition|magnitude|duration|chance|]|hasKillEffect|kill_boostHP_Min|kill_boostHP_Max|kill_boostAP_Min|kill_boostAP_Max|kill_conditionsSource[condition|magnitude|duration|chance|]|];
|
||||
{tail_caverat|items_misc:38|Coda di ratto delle caverne|31|1|1|0|||||||||||||||||||||||||||||||||};
|
||||
{tail_trainingrat|items_misc:38|Coda di ratto piccolo|31|1|1|0|||||||||||||||||||||||||||||||||};
|
||||
{rest|items_consumables:33|Pozione di ripristino|20|1|1|0||||||||||||||1|99|99|||||||||||||||||};
|
||||
@@ -159,7 +159,7 @@
|
||||
</string>
|
||||
|
||||
<string name="itemlist_v068">
|
||||
[searchTag|iconID|name|category|displaytype|hasManualPrice|baseMarketCost|hasEquipEffect|equip_boostMaxHP|equip_boostMaxAP|equip_moveCostPenalty|equip_attackCost|equip_attackChance|equip_criticalChance|equip_criticalMultiplier|equip_attackDamage_Min|equip_attackDamage_Max|equip_blockChance|equip_damageResistance|equip_conditions[condition|magnitude|]|hasUseEffect|use_boostHP_Min|use_boostHP_Max|use_boostAP_Min|use_boostAP_Max|use_conditionsSource[condition|magnitude|duration|chance|]|hasHitEffect|hit_boostHP_Min|hit_boostHP_Max|hit_boostAP_Min|hit_boostAP_Max|hit_conditionsSource[condition|magnitude|duration|chance|]|hit_conditionsTarget[condition|magnitude|duration|chance|]|hasKillEffect|kill_boostHP_Min|kill_boostHP_Max|kill_boostAP_Min|kill_boostAP_Max|kill_conditionsSource[condition|magnitude|duration|chance|]|];
|
||||
[id|iconID|name|category|displaytype|hasManualPrice|baseMarketCost|hasEquipEffect|equip_boostMaxHP|equip_boostMaxAP|equip_moveCostPenalty|equip_attackCost|equip_attackChance|equip_criticalChance|equip_criticalMultiplier|equip_attackDamage_Min|equip_attackDamage_Max|equip_blockChance|equip_damageResistance|equip_conditions[condition|magnitude|]|hasUseEffect|use_boostHP_Min|use_boostHP_Max|use_boostAP_Min|use_boostAP_Max|use_conditionsSource[condition|magnitude|duration|chance|]|hasHitEffect|hit_boostHP_Min|hit_boostHP_Max|hit_boostAP_Min|hit_boostAP_Max|hit_conditionsSource[condition|magnitude|duration|chance|]|hit_conditionsTarget[condition|magnitude|duration|chance|]|hasKillEffect|kill_boostHP_Min|kill_boostHP_Max|kill_boostAP_Min|kill_boostAP_Max|kill_conditionsSource[condition|magnitude|duration|chance|]|];
|
||||
{armor_chain1|items_armours:17|Corazza di maglia arrugginita|3|||3629|1|||||-9|||||20||||||||||||||||||||||};
|
||||
{armor_chain2|items_armours:17|Corazza di maglia|3|||4191|1|||||-10|||||22||||||||||||||||||||||};
|
||||
{hat_leather1|items_armours:24|Capello di pelle indurita|2|||261|1|||||-2|||||7||||||||||||||||||||||};
|
||||
|
||||
@@ -2,12 +2,12 @@
|
||||
|
||||
<resources>
|
||||
<string name="itemlist_money">
|
||||
[searchTag|iconID|name|category|displaytype|hasManualPrice|baseMarketCost|hasEquipEffect|equip_boostMaxHP|equip_boostMaxAP|equip_moveCostPenalty|equip_attackCost|equip_attackChance|equip_criticalChance|equip_criticalMultiplier|equip_attackDamage_Min|equip_attackDamage_Max|equip_blockChance|equip_damageResistance|equip_conditions[condition|magnitude|]|hasUseEffect|use_boostHP_Min|use_boostHP_Max|use_boostAP_Min|use_boostAP_Max|use_conditionsSource[condition|magnitude|duration|chance|]|hasHitEffect|hit_boostHP_Min|hit_boostHP_Max|hit_boostAP_Min|hit_boostAP_Max|hit_conditionsSource[condition|magnitude|duration|chance|]|hit_conditionsTarget[condition|magnitude|duration|chance|]|hasKillEffect|kill_boostHP_Min|kill_boostHP_Max|kill_boostAP_Min|kill_boostAP_Max|kill_conditionsSource[condition|magnitude|duration|chance|]|];
|
||||
[id|iconID|name|category|displaytype|hasManualPrice|baseMarketCost|hasEquipEffect|equip_boostMaxHP|equip_boostMaxAP|equip_moveCostPenalty|equip_attackCost|equip_attackChance|equip_criticalChance|equip_criticalMultiplier|equip_attackDamage_Min|equip_attackDamage_Max|equip_blockChance|equip_damageResistance|equip_conditions[condition|magnitude|]|hasUseEffect|use_boostHP_Min|use_boostHP_Max|use_boostAP_Min|use_boostAP_Max|use_conditionsSource[condition|magnitude|duration|chance|]|hasHitEffect|hit_boostHP_Min|hit_boostHP_Max|hit_boostAP_Min|hit_boostAP_Max|hit_conditionsSource[condition|magnitude|duration|chance|]|hit_conditionsTarget[condition|magnitude|duration|chance|]|hasKillEffect|kill_boostHP_Min|kill_boostHP_Max|kill_boostAP_Min|kill_boostAP_Max|kill_conditionsSource[condition|magnitude|duration|chance|]|];
|
||||
{gold|items_misc:10|Золото|30||1|1|||||||||||||||||||||||||||||||||};
|
||||
</string>
|
||||
|
||||
<string name="itemlist_weapons">
|
||||
[searchTag|iconID|name|category|displaytype|hasManualPrice|baseMarketCost|hasEquipEffect|equip_boostMaxHP|equip_boostMaxAP|equip_moveCostPenalty|equip_attackCost|equip_attackChance|equip_criticalChance|equip_criticalMultiplier|equip_attackDamage_Min|equip_attackDamage_Max|equip_blockChance|equip_damageResistance|equip_conditions[condition|magnitude|]|hasUseEffect|use_boostHP_Min|use_boostHP_Max|use_boostAP_Min|use_boostAP_Max|use_conditionsSource[condition|magnitude|duration|chance|]|hasHitEffect|hit_boostHP_Min|hit_boostHP_Max|hit_boostAP_Min|hit_boostAP_Max|hit_conditionsSource[condition|magnitude|duration|chance|]|hit_conditionsTarget[condition|magnitude|duration|chance|]|hasKillEffect|kill_boostHP_Min|kill_boostHP_Max|kill_boostAP_Min|kill_boostAP_Max|kill_conditionsSource[condition|magnitude|duration|chance|]|];
|
||||
[id|iconID|name|category|displaytype|hasManualPrice|baseMarketCost|hasEquipEffect|equip_boostMaxHP|equip_boostMaxAP|equip_moveCostPenalty|equip_attackCost|equip_attackChance|equip_criticalChance|equip_criticalMultiplier|equip_attackDamage_Min|equip_attackDamage_Max|equip_blockChance|equip_damageResistance|equip_conditions[condition|magnitude|]|hasUseEffect|use_boostHP_Min|use_boostHP_Max|use_boostAP_Min|use_boostAP_Max|use_conditionsSource[condition|magnitude|duration|chance|]|hasHitEffect|hit_boostHP_Min|hit_boostHP_Max|hit_boostAP_Min|hit_boostAP_Max|hit_conditionsSource[condition|magnitude|duration|chance|]|hit_conditionsTarget[condition|magnitude|duration|chance|]|hasKillEffect|kill_boostHP_Min|kill_boostHP_Max|kill_boostAP_Min|kill_boostAP_Max|kill_conditionsSource[condition|magnitude|duration|chance|]|];
|
||||
{club1|items_weapons:42|Деревянная дубина|0|||7|1||||5|10|||0|1|||||||||||||||||||||||};
|
||||
{club3|items_weapons:44|Палица|0|||253|1||||6|5|||2|7|||||||||||||||||||||||};
|
||||
{ironsword0|items_weapons:0|Железный меч|0|||12|1||||5|10|||0|1|||||||||||||||||||||||};
|
||||
@@ -28,7 +28,7 @@
|
||||
</string>
|
||||
|
||||
<string name="itemlist_rings">
|
||||
[searchTag|iconID|name|category|displaytype|hasManualPrice|baseMarketCost|hasEquipEffect|equip_boostMaxHP|equip_boostMaxAP|equip_moveCostPenalty|equip_attackCost|equip_attackChance|equip_criticalChance|equip_criticalMultiplier|equip_attackDamage_Min|equip_attackDamage_Max|equip_blockChance|equip_damageResistance|equip_conditions[condition|magnitude|]|hasUseEffect|use_boostHP_Min|use_boostHP_Max|use_boostAP_Min|use_boostAP_Max|use_conditionsSource[condition|magnitude|duration|chance|]|hasHitEffect|hit_boostHP_Min|hit_boostHP_Max|hit_boostAP_Min|hit_boostAP_Max|hit_conditionsSource[condition|magnitude|duration|chance|]|hit_conditionsTarget[condition|magnitude|duration|chance|]|hasKillEffect|kill_boostHP_Min|kill_boostHP_Max|kill_boostAP_Min|kill_boostAP_Max|kill_conditionsSource[condition|magnitude|duration|chance|]|];
|
||||
[id|iconID|name|category|displaytype|hasManualPrice|baseMarketCost|hasEquipEffect|equip_boostMaxHP|equip_boostMaxAP|equip_moveCostPenalty|equip_attackCost|equip_attackChance|equip_criticalChance|equip_criticalMultiplier|equip_attackDamage_Min|equip_attackDamage_Max|equip_blockChance|equip_damageResistance|equip_conditions[condition|magnitude|]|hasUseEffect|use_boostHP_Min|use_boostHP_Max|use_boostAP_Min|use_boostAP_Max|use_conditionsSource[condition|magnitude|duration|chance|]|hasHitEffect|hit_boostHP_Min|hit_boostHP_Max|hit_boostAP_Min|hit_boostAP_Max|hit_conditionsSource[condition|magnitude|duration|chance|]|hit_conditionsTarget[condition|magnitude|duration|chance|]|hasKillEffect|kill_boostHP_Min|kill_boostHP_Max|kill_boostAP_Min|kill_boostAP_Max|kill_conditionsSource[condition|magnitude|duration|chance|]|];
|
||||
{ring_dmg1|items_jewelry:0|Кольцо урона +1|7|||215|1||||||||1|1|||||||||||||||||||||||};
|
||||
{ring_dmg2|items_jewelry:1|Кольцо урона +2|7|||398|1||||||||2|2|||||||||||||||||||||||};
|
||||
{ring_dmg5|items_jewelry:2|Кольцо урона +5|7|4||2014|1||||||||5|5|||||||||||||||||||||||};
|
||||
@@ -42,14 +42,14 @@
|
||||
</string>
|
||||
|
||||
<string name="itemlist_necklaces">
|
||||
[searchTag|iconID|name|category|displaytype|hasManualPrice|baseMarketCost|hasEquipEffect|equip_boostMaxHP|equip_boostMaxAP|equip_moveCostPenalty|equip_attackCost|equip_attackChance|equip_criticalChance|equip_criticalMultiplier|equip_attackDamage_Min|equip_attackDamage_Max|equip_blockChance|equip_damageResistance|equip_conditions[condition|magnitude|]|hasUseEffect|use_boostHP_Min|use_boostHP_Max|use_boostAP_Min|use_boostAP_Max|use_conditionsSource[condition|magnitude|duration|chance|]|hasHitEffect|hit_boostHP_Min|hit_boostHP_Max|hit_boostAP_Min|hit_boostAP_Max|hit_conditionsSource[condition|magnitude|duration|chance|]|hit_conditionsTarget[condition|magnitude|duration|chance|]|hasKillEffect|kill_boostHP_Min|kill_boostHP_Max|kill_boostAP_Min|kill_boostAP_Max|kill_conditionsSource[condition|magnitude|duration|chance|]|];
|
||||
[id|iconID|name|category|displaytype|hasManualPrice|baseMarketCost|hasEquipEffect|equip_boostMaxHP|equip_boostMaxAP|equip_moveCostPenalty|equip_attackCost|equip_attackChance|equip_criticalChance|equip_criticalMultiplier|equip_attackDamage_Min|equip_attackDamage_Max|equip_blockChance|equip_damageResistance|equip_conditions[condition|magnitude|]|hasUseEffect|use_boostHP_Min|use_boostHP_Max|use_boostAP_Min|use_boostAP_Max|use_conditionsSource[condition|magnitude|duration|chance|]|hasHitEffect|hit_boostHP_Min|hit_boostHP_Max|hit_boostAP_Min|hit_boostAP_Max|hit_conditionsSource[condition|magnitude|duration|chance|]|hit_conditionsTarget[condition|magnitude|duration|chance|]|hasKillEffect|kill_boostHP_Min|kill_boostHP_Max|kill_boostAP_Min|kill_boostAP_Max|kill_conditionsSource[condition|magnitude|duration|chance|]|];
|
||||
{jewel_fallhaven|items_jewelry:6|Жемчужина Фоллхейвена|6|4||3125|1||||-1||||||||||||||||||||||||||||};
|
||||
{necklace_shield1|items_jewelry:7|Защитное ожерелье|6|4||935|1||||||||||9||||||||||||||||||||||};
|
||||
{necklace_shield2|items_jewelry:7|Защитное ожерелье|6|4||1255|1||||||||||12||||||||||||||||||||||};
|
||||
</string>
|
||||
|
||||
<string name="itemlist_armour">
|
||||
[searchTag|iconID|name|category|displaytype|hasManualPrice|baseMarketCost|hasEquipEffect|equip_boostMaxHP|equip_boostMaxAP|equip_moveCostPenalty|equip_attackCost|equip_attackChance|equip_criticalChance|equip_criticalMultiplier|equip_attackDamage_Min|equip_attackDamage_Max|equip_blockChance|equip_damageResistance|equip_conditions[condition|magnitude|]|hasUseEffect|use_boostHP_Min|use_boostHP_Max|use_boostAP_Min|use_boostAP_Max|use_conditionsSource[condition|magnitude|duration|chance|]|hasHitEffect|hit_boostHP_Min|hit_boostHP_Max|hit_boostAP_Min|hit_boostAP_Max|hit_conditionsSource[condition|magnitude|duration|chance|]|hit_conditionsTarget[condition|magnitude|duration|chance|]|hasKillEffect|kill_boostHP_Min|kill_boostHP_Max|kill_boostAP_Min|kill_boostAP_Max|kill_conditionsSource[condition|magnitude|duration|chance|]|];
|
||||
[id|iconID|name|category|displaytype|hasManualPrice|baseMarketCost|hasEquipEffect|equip_boostMaxHP|equip_boostMaxAP|equip_moveCostPenalty|equip_attackCost|equip_attackChance|equip_criticalChance|equip_criticalMultiplier|equip_attackDamage_Min|equip_attackDamage_Max|equip_blockChance|equip_damageResistance|equip_conditions[condition|magnitude|]|hasUseEffect|use_boostHP_Min|use_boostHP_Max|use_boostAP_Min|use_boostAP_Max|use_conditionsSource[condition|magnitude|duration|chance|]|hasHitEffect|hit_boostHP_Min|hit_boostHP_Max|hit_boostAP_Min|hit_boostAP_Max|hit_conditionsSource[condition|magnitude|duration|chance|]|hit_conditionsTarget[condition|magnitude|duration|chance|]|hasKillEffect|kill_boostHP_Min|kill_boostHP_Max|kill_boostAP_Min|kill_boostAP_Max|kill_conditionsSource[condition|magnitude|duration|chance|]|];
|
||||
{shirt1|items_armours:14|Рубаха|3|||16|1||||||||||2||||||||||||||||||||||};
|
||||
{shirt2|items_armours:14|Красивая рубаха|3|||72|1||||||||||5||||||||||||||||||||||};
|
||||
{shirt_dmgresist|items_armours:15|Кожаная рубаха|3|4||1633|1||||||||||5|1|||||||||||||||||||||};
|
||||
@@ -78,7 +78,7 @@
|
||||
</string>
|
||||
|
||||
<string name="itemlist_junk">
|
||||
[searchTag|iconID|name|category|displaytype|hasManualPrice|baseMarketCost|hasEquipEffect|equip_boostMaxHP|equip_boostMaxAP|equip_moveCostPenalty|equip_attackCost|equip_attackChance|equip_criticalChance|equip_criticalMultiplier|equip_attackDamage_Min|equip_attackDamage_Max|equip_blockChance|equip_damageResistance|equip_conditions[condition|magnitude|]|hasUseEffect|use_boostHP_Min|use_boostHP_Max|use_boostAP_Min|use_boostAP_Max|use_conditionsSource[condition|magnitude|duration|chance|]|hasHitEffect|hit_boostHP_Min|hit_boostHP_Max|hit_boostAP_Min|hit_boostAP_Max|hit_conditionsSource[condition|magnitude|duration|chance|]|hit_conditionsTarget[condition|magnitude|duration|chance|]|hasKillEffect|kill_boostHP_Min|kill_boostHP_Max|kill_boostAP_Min|kill_boostAP_Max|kill_conditionsSource[condition|magnitude|duration|chance|]|];
|
||||
[id|iconID|name|category|displaytype|hasManualPrice|baseMarketCost|hasEquipEffect|equip_boostMaxHP|equip_boostMaxAP|equip_moveCostPenalty|equip_attackCost|equip_attackChance|equip_criticalChance|equip_criticalMultiplier|equip_attackDamage_Min|equip_attackDamage_Max|equip_blockChance|equip_damageResistance|equip_conditions[condition|magnitude|]|hasUseEffect|use_boostHP_Min|use_boostHP_Max|use_boostAP_Min|use_boostAP_Max|use_conditionsSource[condition|magnitude|duration|chance|]|hasHitEffect|hit_boostHP_Min|hit_boostHP_Max|hit_boostAP_Min|hit_boostAP_Max|hit_conditionsSource[condition|magnitude|duration|chance|]|hit_conditionsTarget[condition|magnitude|duration|chance|]|hasKillEffect|kill_boostHP_Min|kill_boostHP_Max|kill_boostAP_Min|kill_boostAP_Max|kill_conditionsSource[condition|magnitude|duration|chance|]|];
|
||||
{clay|actorconditions_1:9|Комок глины|31||1|1|||||||||||||||||||||||||||||||||};
|
||||
{rock|items_misc:28|Камушек|31||1|1|||||||||||||||||||||||||||||||||};
|
||||
{gem1|items_misc:0|Сваровски|31||1|2|||||||||||||||||||||||||||||||||};
|
||||
|
||||
@@ -2,12 +2,12 @@
|
||||
|
||||
<resources>
|
||||
<string name="itemlist_money">
|
||||
[searchTag|iconID|name|category|displaytype|hasManualPrice|baseMarketCost|hasEquipEffect|equip_boostMaxHP|equip_boostMaxAP|equip_moveCostPenalty|equip_attackCost|equip_attackChance|equip_criticalChance|equip_criticalMultiplier|equip_attackDamage_Min|equip_attackDamage_Max|equip_blockChance|equip_damageResistance|equip_conditions[condition|magnitude|]|hasUseEffect|use_boostHP_Min|use_boostHP_Max|use_boostAP_Min|use_boostAP_Max|use_conditionsSource[condition|magnitude|duration|chance|]|hasHitEffect|hit_boostHP_Min|hit_boostHP_Max|hit_boostAP_Min|hit_boostAP_Max|hit_conditionsSource[condition|magnitude|duration|chance|]|hit_conditionsTarget[condition|magnitude|duration|chance|]|hasKillEffect|kill_boostHP_Min|kill_boostHP_Max|kill_boostAP_Min|kill_boostAP_Max|kill_conditionsSource[condition|magnitude|duration|chance|]|];
|
||||
[id|iconID|name|category|displaytype|hasManualPrice|baseMarketCost|hasEquipEffect|equip_boostMaxHP|equip_boostMaxAP|equip_moveCostPenalty|equip_attackCost|equip_attackChance|equip_criticalChance|equip_criticalMultiplier|equip_attackDamage_Min|equip_attackDamage_Max|equip_blockChance|equip_damageResistance|equip_conditions[condition|magnitude|]|hasUseEffect|use_boostHP_Min|use_boostHP_Max|use_boostAP_Min|use_boostAP_Max|use_conditionsSource[condition|magnitude|duration|chance|]|hasHitEffect|hit_boostHP_Min|hit_boostHP_Max|hit_boostAP_Min|hit_boostAP_Max|hit_conditionsSource[condition|magnitude|duration|chance|]|hit_conditionsTarget[condition|magnitude|duration|chance|]|hasKillEffect|kill_boostHP_Min|kill_boostHP_Max|kill_boostAP_Min|kill_boostAP_Max|kill_conditionsSource[condition|magnitude|duration|chance|]|];
|
||||
{gold|items_misc:10|Gold coins|30||1|1|||||||||||||||||||||||||||||||||};
|
||||
</string>
|
||||
|
||||
<string name="itemlist_weapons">
|
||||
[searchTag|iconID|name|category|displaytype|hasManualPrice|baseMarketCost|hasEquipEffect|equip_boostMaxHP|equip_boostMaxAP|equip_moveCostPenalty|equip_attackCost|equip_attackChance|equip_criticalChance|equip_criticalMultiplier|equip_attackDamage_Min|equip_attackDamage_Max|equip_blockChance|equip_damageResistance|equip_conditions[condition|magnitude|]|hasUseEffect|use_boostHP_Min|use_boostHP_Max|use_boostAP_Min|use_boostAP_Max|use_conditionsSource[condition|magnitude|duration|chance|]|hasHitEffect|hit_boostHP_Min|hit_boostHP_Max|hit_boostAP_Min|hit_boostAP_Max|hit_conditionsSource[condition|magnitude|duration|chance|]|hit_conditionsTarget[condition|magnitude|duration|chance|]|hasKillEffect|kill_boostHP_Min|kill_boostHP_Max|kill_boostAP_Min|kill_boostAP_Max|kill_conditionsSource[condition|magnitude|duration|chance|]|];
|
||||
[id|iconID|name|category|displaytype|hasManualPrice|baseMarketCost|hasEquipEffect|equip_boostMaxHP|equip_boostMaxAP|equip_moveCostPenalty|equip_attackCost|equip_attackChance|equip_criticalChance|equip_criticalMultiplier|equip_attackDamage_Min|equip_attackDamage_Max|equip_blockChance|equip_damageResistance|equip_conditions[condition|magnitude|]|hasUseEffect|use_boostHP_Min|use_boostHP_Max|use_boostAP_Min|use_boostAP_Max|use_conditionsSource[condition|magnitude|duration|chance|]|hasHitEffect|hit_boostHP_Min|hit_boostHP_Max|hit_boostAP_Min|hit_boostAP_Max|hit_conditionsSource[condition|magnitude|duration|chance|]|hit_conditionsTarget[condition|magnitude|duration|chance|]|hasKillEffect|kill_boostHP_Min|kill_boostHP_Max|kill_boostAP_Min|kill_boostAP_Max|kill_conditionsSource[condition|magnitude|duration|chance|]|];
|
||||
{club1|items_weapons:42|Wooden club|0|||7|1||||5|10|||0|1|||||||||||||||||||||||};
|
||||
{club3|items_weapons:44|Iron club|0|||253|1||||6|5|||2|7|||||||||||||||||||||||};
|
||||
{ironsword0|items_weapons:0|Crude iron sword|0|||12|1||||5|10|||0|1|||||||||||||||||||||||};
|
||||
@@ -28,7 +28,7 @@
|
||||
</string>
|
||||
|
||||
<string name="itemlist_rings">
|
||||
[searchTag|iconID|name|category|displaytype|hasManualPrice|baseMarketCost|hasEquipEffect|equip_boostMaxHP|equip_boostMaxAP|equip_moveCostPenalty|equip_attackCost|equip_attackChance|equip_criticalChance|equip_criticalMultiplier|equip_attackDamage_Min|equip_attackDamage_Max|equip_blockChance|equip_damageResistance|equip_conditions[condition|magnitude|]|hasUseEffect|use_boostHP_Min|use_boostHP_Max|use_boostAP_Min|use_boostAP_Max|use_conditionsSource[condition|magnitude|duration|chance|]|hasHitEffect|hit_boostHP_Min|hit_boostHP_Max|hit_boostAP_Min|hit_boostAP_Max|hit_conditionsSource[condition|magnitude|duration|chance|]|hit_conditionsTarget[condition|magnitude|duration|chance|]|hasKillEffect|kill_boostHP_Min|kill_boostHP_Max|kill_boostAP_Min|kill_boostAP_Max|kill_conditionsSource[condition|magnitude|duration|chance|]|];
|
||||
[id|iconID|name|category|displaytype|hasManualPrice|baseMarketCost|hasEquipEffect|equip_boostMaxHP|equip_boostMaxAP|equip_moveCostPenalty|equip_attackCost|equip_attackChance|equip_criticalChance|equip_criticalMultiplier|equip_attackDamage_Min|equip_attackDamage_Max|equip_blockChance|equip_damageResistance|equip_conditions[condition|magnitude|]|hasUseEffect|use_boostHP_Min|use_boostHP_Max|use_boostAP_Min|use_boostAP_Max|use_conditionsSource[condition|magnitude|duration|chance|]|hasHitEffect|hit_boostHP_Min|hit_boostHP_Max|hit_boostAP_Min|hit_boostAP_Max|hit_conditionsSource[condition|magnitude|duration|chance|]|hit_conditionsTarget[condition|magnitude|duration|chance|]|hasKillEffect|kill_boostHP_Min|kill_boostHP_Max|kill_boostAP_Min|kill_boostAP_Max|kill_conditionsSource[condition|magnitude|duration|chance|]|];
|
||||
{ring_dmg1|items_jewelry:0|Ring of damage +1|7|||215|1||||||||1|1|||||||||||||||||||||||};
|
||||
{ring_dmg2|items_jewelry:1|Ring of damage +2|7|||398|1||||||||2|2|||||||||||||||||||||||};
|
||||
{ring_dmg5|items_jewelry:2|Ring of damage +5|7|4||2014|1||||||||5|5|||||||||||||||||||||||};
|
||||
@@ -42,14 +42,14 @@
|
||||
</string>
|
||||
|
||||
<string name="itemlist_necklaces">
|
||||
[searchTag|iconID|name|category|displaytype|hasManualPrice|baseMarketCost|hasEquipEffect|equip_boostMaxHP|equip_boostMaxAP|equip_moveCostPenalty|equip_attackCost|equip_attackChance|equip_criticalChance|equip_criticalMultiplier|equip_attackDamage_Min|equip_attackDamage_Max|equip_blockChance|equip_damageResistance|equip_conditions[condition|magnitude|]|hasUseEffect|use_boostHP_Min|use_boostHP_Max|use_boostAP_Min|use_boostAP_Max|use_conditionsSource[condition|magnitude|duration|chance|]|hasHitEffect|hit_boostHP_Min|hit_boostHP_Max|hit_boostAP_Min|hit_boostAP_Max|hit_conditionsSource[condition|magnitude|duration|chance|]|hit_conditionsTarget[condition|magnitude|duration|chance|]|hasKillEffect|kill_boostHP_Min|kill_boostHP_Max|kill_boostAP_Min|kill_boostAP_Max|kill_conditionsSource[condition|magnitude|duration|chance|]|];
|
||||
[id|iconID|name|category|displaytype|hasManualPrice|baseMarketCost|hasEquipEffect|equip_boostMaxHP|equip_boostMaxAP|equip_moveCostPenalty|equip_attackCost|equip_attackChance|equip_criticalChance|equip_criticalMultiplier|equip_attackDamage_Min|equip_attackDamage_Max|equip_blockChance|equip_damageResistance|equip_conditions[condition|magnitude|]|hasUseEffect|use_boostHP_Min|use_boostHP_Max|use_boostAP_Min|use_boostAP_Max|use_conditionsSource[condition|magnitude|duration|chance|]|hasHitEffect|hit_boostHP_Min|hit_boostHP_Max|hit_boostAP_Min|hit_boostAP_Max|hit_conditionsSource[condition|magnitude|duration|chance|]|hit_conditionsTarget[condition|magnitude|duration|chance|]|hasKillEffect|kill_boostHP_Min|kill_boostHP_Max|kill_boostAP_Min|kill_boostAP_Max|kill_conditionsSource[condition|magnitude|duration|chance|]|];
|
||||
{jewel_fallhaven|items_jewelry:6|Jewel of Fallhaven|6|4||3125|1||||-1||||||||||||||||||||||||||||};
|
||||
{necklace_shield1|items_jewelry:7|Necklace of the guardian|6|4||935|1||||||||||9||||||||||||||||||||||};
|
||||
{necklace_shield2|items_jewelry:7|Shielding necklace|6|4||1255|1||||||||||12||||||||||||||||||||||};
|
||||
</string>
|
||||
|
||||
<string name="itemlist_armour">
|
||||
[searchTag|iconID|name|category|displaytype|hasManualPrice|baseMarketCost|hasEquipEffect|equip_boostMaxHP|equip_boostMaxAP|equip_moveCostPenalty|equip_attackCost|equip_attackChance|equip_criticalChance|equip_criticalMultiplier|equip_attackDamage_Min|equip_attackDamage_Max|equip_blockChance|equip_damageResistance|equip_conditions[condition|magnitude|]|hasUseEffect|use_boostHP_Min|use_boostHP_Max|use_boostAP_Min|use_boostAP_Max|use_conditionsSource[condition|magnitude|duration|chance|]|hasHitEffect|hit_boostHP_Min|hit_boostHP_Max|hit_boostAP_Min|hit_boostAP_Max|hit_conditionsSource[condition|magnitude|duration|chance|]|hit_conditionsTarget[condition|magnitude|duration|chance|]|hasKillEffect|kill_boostHP_Min|kill_boostHP_Max|kill_boostAP_Min|kill_boostAP_Max|kill_conditionsSource[condition|magnitude|duration|chance|]|];
|
||||
[id|iconID|name|category|displaytype|hasManualPrice|baseMarketCost|hasEquipEffect|equip_boostMaxHP|equip_boostMaxAP|equip_moveCostPenalty|equip_attackCost|equip_attackChance|equip_criticalChance|equip_criticalMultiplier|equip_attackDamage_Min|equip_attackDamage_Max|equip_blockChance|equip_damageResistance|equip_conditions[condition|magnitude|]|hasUseEffect|use_boostHP_Min|use_boostHP_Max|use_boostAP_Min|use_boostAP_Max|use_conditionsSource[condition|magnitude|duration|chance|]|hasHitEffect|hit_boostHP_Min|hit_boostHP_Max|hit_boostAP_Min|hit_boostAP_Max|hit_conditionsSource[condition|magnitude|duration|chance|]|hit_conditionsTarget[condition|magnitude|duration|chance|]|hasKillEffect|kill_boostHP_Min|kill_boostHP_Max|kill_boostAP_Min|kill_boostAP_Max|kill_conditionsSource[condition|magnitude|duration|chance|]|];
|
||||
{shirt1|items_armours:14|Cloth shirt|3|||16|1||||||||||2||||||||||||||||||||||};
|
||||
{shirt2|items_armours:14|Fine shirt|3|||72|1||||||||||5||||||||||||||||||||||};
|
||||
{shirt_dmgresist|items_armours:15|Hardened leather shirt|3|4||1633|1||||||||||5|1|||||||||||||||||||||};
|
||||
@@ -78,7 +78,7 @@
|
||||
</string>
|
||||
|
||||
<string name="itemlist_food">
|
||||
[searchTag|iconID|name|category|displaytype|hasManualPrice|baseMarketCost|hasEquipEffect|equip_boostMaxHP|equip_boostMaxAP|equip_moveCostPenalty|equip_attackCost|equip_attackChance|equip_criticalChance|equip_criticalMultiplier|equip_attackDamage_Min|equip_attackDamage_Max|equip_blockChance|equip_damageResistance|equip_conditions[condition|magnitude|]|hasUseEffect|use_boostHP_Min|use_boostHP_Max|use_boostAP_Min|use_boostAP_Max|use_conditionsSource[condition|magnitude|duration|chance|]|hasHitEffect|hit_boostHP_Min|hit_boostHP_Max|hit_boostAP_Min|hit_boostAP_Max|hit_conditionsSource[condition|magnitude|duration|chance|]|hit_conditionsTarget[condition|magnitude|duration|chance|]|hasKillEffect|kill_boostHP_Min|kill_boostHP_Max|kill_boostAP_Min|kill_boostAP_Max|kill_conditionsSource[condition|magnitude|duration|chance|]|];
|
||||
[id|iconID|name|category|displaytype|hasManualPrice|baseMarketCost|hasEquipEffect|equip_boostMaxHP|equip_boostMaxAP|equip_moveCostPenalty|equip_attackCost|equip_attackChance|equip_criticalChance|equip_criticalMultiplier|equip_attackDamage_Min|equip_attackDamage_Max|equip_blockChance|equip_damageResistance|equip_conditions[condition|magnitude|]|hasUseEffect|use_boostHP_Min|use_boostHP_Max|use_boostAP_Min|use_boostAP_Max|use_conditionsSource[condition|magnitude|duration|chance|]|hasHitEffect|hit_boostHP_Min|hit_boostHP_Max|hit_boostAP_Min|hit_boostAP_Max|hit_conditionsSource[condition|magnitude|duration|chance|]|hit_conditionsTarget[condition|magnitude|duration|chance|]|hasKillEffect|kill_boostHP_Min|kill_boostHP_Max|kill_boostAP_Min|kill_boostAP_Max|kill_conditionsSource[condition|magnitude|duration|chance|]|];
|
||||
{apple_green|items_consumables:2|Green apple|21|||9||||||||||||||1|4|4|||||||||||||||||};
|
||||
{apple_red|items_consumables:3|Red apple|21|||15||||||||||||||1|6|6|||||||||||||||||};
|
||||
{meat|items_consumables:25|Meat|21||1|29||||||||||||||1|12|12|||||||||||||||||};
|
||||
@@ -93,7 +93,7 @@
|
||||
</string>
|
||||
|
||||
<string name="itemlist_potions">
|
||||
[searchTag|iconID|name|category|displaytype|hasManualPrice|baseMarketCost|hasEquipEffect|equip_boostMaxHP|equip_boostMaxAP|equip_moveCostPenalty|equip_attackCost|equip_attackChance|equip_criticalChance|equip_criticalMultiplier|equip_attackDamage_Min|equip_attackDamage_Max|equip_blockChance|equip_damageResistance|equip_conditions[condition|magnitude|]|hasUseEffect|use_boostHP_Min|use_boostHP_Max|use_boostAP_Min|use_boostAP_Max|use_conditionsSource[condition|magnitude|duration|chance|]|hasHitEffect|hit_boostHP_Min|hit_boostHP_Max|hit_boostAP_Min|hit_boostAP_Max|hit_conditionsSource[condition|magnitude|duration|chance|]|hit_conditionsTarget[condition|magnitude|duration|chance|]|hasKillEffect|kill_boostHP_Min|kill_boostHP_Max|kill_boostAP_Min|kill_boostAP_Max|kill_conditionsSource[condition|magnitude|duration|chance|]|];
|
||||
[id|iconID|name|category|displaytype|hasManualPrice|baseMarketCost|hasEquipEffect|equip_boostMaxHP|equip_boostMaxAP|equip_moveCostPenalty|equip_attackCost|equip_attackChance|equip_criticalChance|equip_criticalMultiplier|equip_attackDamage_Min|equip_attackDamage_Max|equip_blockChance|equip_damageResistance|equip_conditions[condition|magnitude|]|hasUseEffect|use_boostHP_Min|use_boostHP_Max|use_boostAP_Min|use_boostAP_Max|use_conditionsSource[condition|magnitude|duration|chance|]|hasHitEffect|hit_boostHP_Min|hit_boostHP_Max|hit_boostAP_Min|hit_boostAP_Max|hit_conditionsSource[condition|magnitude|duration|chance|]|hit_conditionsTarget[condition|magnitude|duration|chance|]|hasKillEffect|kill_boostHP_Min|kill_boostHP_Max|kill_boostAP_Min|kill_boostAP_Max|kill_conditionsSource[condition|magnitude|duration|chance|]|];
|
||||
{vial_empty1|items_consumables:56|Small empty vial|31||1|2|||||||||||||||||||||||||||||||||};
|
||||
{vial_empty2|items_consumables:57|Empty vial|31||1|4|||||||||||||||||||||||||||||||||};
|
||||
{vial_empty3|items_consumables:59|Empty flask|31||1|6|||||||||||||||||||||||||||||||||};
|
||||
@@ -109,7 +109,7 @@
|
||||
</string>
|
||||
|
||||
<string name="itemlist_animal">
|
||||
[searchTag|iconID|name|category|displaytype|hasManualPrice|baseMarketCost|hasEquipEffect|equip_boostMaxHP|equip_boostMaxAP|equip_moveCostPenalty|equip_attackCost|equip_attackChance|equip_criticalChance|equip_criticalMultiplier|equip_attackDamage_Min|equip_attackDamage_Max|equip_blockChance|equip_damageResistance|equip_conditions[condition|magnitude|]|hasUseEffect|use_boostHP_Min|use_boostHP_Max|use_boostAP_Min|use_boostAP_Max|use_conditionsSource[condition|magnitude|duration|chance|]|hasHitEffect|hit_boostHP_Min|hit_boostHP_Max|hit_boostAP_Min|hit_boostAP_Max|hit_conditionsSource[condition|magnitude|duration|chance|]|hit_conditionsTarget[condition|magnitude|duration|chance|]|hasKillEffect|kill_boostHP_Min|kill_boostHP_Max|kill_boostAP_Min|kill_boostAP_Max|kill_conditionsSource[condition|magnitude|duration|chance|]|];
|
||||
[id|iconID|name|category|displaytype|hasManualPrice|baseMarketCost|hasEquipEffect|equip_boostMaxHP|equip_boostMaxAP|equip_moveCostPenalty|equip_attackCost|equip_attackChance|equip_criticalChance|equip_criticalMultiplier|equip_attackDamage_Min|equip_attackDamage_Max|equip_blockChance|equip_damageResistance|equip_conditions[condition|magnitude|]|hasUseEffect|use_boostHP_Min|use_boostHP_Max|use_boostAP_Min|use_boostAP_Max|use_conditionsSource[condition|magnitude|duration|chance|]|hasHitEffect|hit_boostHP_Min|hit_boostHP_Max|hit_boostAP_Min|hit_boostAP_Max|hit_conditionsSource[condition|magnitude|duration|chance|]|hit_conditionsTarget[condition|magnitude|duration|chance|]|hasKillEffect|kill_boostHP_Min|kill_boostHP_Max|kill_boostAP_Min|kill_boostAP_Max|kill_conditionsSource[condition|magnitude|duration|chance|]|];
|
||||
{hair|items_misc:48|Animal hair|31||1|2|||||||||||||||||||||||||||||||||};
|
||||
{insectwing|items_misc:52|Insect wing|31||1|3|||||||||||||||||||||||||||||||||};
|
||||
{bone|items_misc:44|Bone|31||1|2|||||||||||||||||||||||||||||||||};
|
||||
@@ -124,7 +124,7 @@
|
||||
</string>
|
||||
|
||||
<string name="itemlist_junk">
|
||||
[searchTag|iconID|name|category|displaytype|hasManualPrice|baseMarketCost|hasEquipEffect|equip_boostMaxHP|equip_boostMaxAP|equip_moveCostPenalty|equip_attackCost|equip_attackChance|equip_criticalChance|equip_criticalMultiplier|equip_attackDamage_Min|equip_attackDamage_Max|equip_blockChance|equip_damageResistance|equip_conditions[condition|magnitude|]|hasUseEffect|use_boostHP_Min|use_boostHP_Max|use_boostAP_Min|use_boostAP_Max|use_conditionsSource[condition|magnitude|duration|chance|]|hasHitEffect|hit_boostHP_Min|hit_boostHP_Max|hit_boostAP_Min|hit_boostAP_Max|hit_conditionsSource[condition|magnitude|duration|chance|]|hit_conditionsTarget[condition|magnitude|duration|chance|]|hasKillEffect|kill_boostHP_Min|kill_boostHP_Max|kill_boostAP_Min|kill_boostAP_Max|kill_conditionsSource[condition|magnitude|duration|chance|]|];
|
||||
[id|iconID|name|category|displaytype|hasManualPrice|baseMarketCost|hasEquipEffect|equip_boostMaxHP|equip_boostMaxAP|equip_moveCostPenalty|equip_attackCost|equip_attackChance|equip_criticalChance|equip_criticalMultiplier|equip_attackDamage_Min|equip_attackDamage_Max|equip_blockChance|equip_damageResistance|equip_conditions[condition|magnitude|]|hasUseEffect|use_boostHP_Min|use_boostHP_Max|use_boostAP_Min|use_boostAP_Max|use_conditionsSource[condition|magnitude|duration|chance|]|hasHitEffect|hit_boostHP_Min|hit_boostHP_Max|hit_boostAP_Min|hit_boostAP_Max|hit_conditionsSource[condition|magnitude|duration|chance|]|hit_conditionsTarget[condition|magnitude|duration|chance|]|hasKillEffect|kill_boostHP_Min|kill_boostHP_Max|kill_boostAP_Min|kill_boostAP_Max|kill_conditionsSource[condition|magnitude|duration|chance|]|];
|
||||
{clay|actorconditions_1:9|Lump of clay|31||1|1|||||||||||||||||||||||||||||||||};
|
||||
{rock|items_misc:28|Small rock|31||1|1|||||||||||||||||||||||||||||||||};
|
||||
{gem1|items_misc:0|Glass gem|31||1|2|||||||||||||||||||||||||||||||||};
|
||||
@@ -137,7 +137,7 @@
|
||||
</string>
|
||||
|
||||
<string name="itemlist_quest">
|
||||
[searchTag|iconID|name|category|displaytype|hasManualPrice|baseMarketCost|hasEquipEffect|equip_boostMaxHP|equip_boostMaxAP|equip_moveCostPenalty|equip_attackCost|equip_attackChance|equip_criticalChance|equip_criticalMultiplier|equip_attackDamage_Min|equip_attackDamage_Max|equip_blockChance|equip_damageResistance|equip_conditions[condition|magnitude|]|hasUseEffect|use_boostHP_Min|use_boostHP_Max|use_boostAP_Min|use_boostAP_Max|use_conditionsSource[condition|magnitude|duration|chance|]|hasHitEffect|hit_boostHP_Min|hit_boostHP_Max|hit_boostAP_Min|hit_boostAP_Max|hit_conditionsSource[condition|magnitude|duration|chance|]|hit_conditionsTarget[condition|magnitude|duration|chance|]|hasKillEffect|kill_boostHP_Min|kill_boostHP_Max|kill_boostAP_Min|kill_boostAP_Max|kill_conditionsSource[condition|magnitude|duration|chance|]|];
|
||||
[id|iconID|name|category|displaytype|hasManualPrice|baseMarketCost|hasEquipEffect|equip_boostMaxHP|equip_boostMaxAP|equip_moveCostPenalty|equip_attackCost|equip_attackChance|equip_criticalChance|equip_criticalMultiplier|equip_attackDamage_Min|equip_attackDamage_Max|equip_blockChance|equip_damageResistance|equip_conditions[condition|magnitude|]|hasUseEffect|use_boostHP_Min|use_boostHP_Max|use_boostAP_Min|use_boostAP_Max|use_conditionsSource[condition|magnitude|duration|chance|]|hasHitEffect|hit_boostHP_Min|hit_boostHP_Max|hit_boostAP_Min|hit_boostAP_Max|hit_conditionsSource[condition|magnitude|duration|chance|]|hit_conditionsTarget[condition|magnitude|duration|chance|]|hasKillEffect|kill_boostHP_Min|kill_boostHP_Max|kill_boostAP_Min|kill_boostAP_Max|kill_conditionsSource[condition|magnitude|duration|chance|]|];
|
||||
{tail_caverat|items_misc:38|Cave rat tail|31|1|1|0|||||||||||||||||||||||||||||||||};
|
||||
{tail_trainingrat|items_misc:38|Small rat tail|31|1|1|0|||||||||||||||||||||||||||||||||};
|
||||
{rest|items_consumables:33|Potion of restoration|20|1|1|0||||||||||||||1|99|99|||||||||||||||||};
|
||||
@@ -159,7 +159,7 @@
|
||||
</string>
|
||||
|
||||
<string name="itemlist_v068">
|
||||
[searchTag|iconID|name|category|displaytype|hasManualPrice|baseMarketCost|hasEquipEffect|equip_boostMaxHP|equip_boostMaxAP|equip_moveCostPenalty|equip_attackCost|equip_attackChance|equip_criticalChance|equip_criticalMultiplier|equip_attackDamage_Min|equip_attackDamage_Max|equip_blockChance|equip_damageResistance|equip_conditions[condition|magnitude|]|hasUseEffect|use_boostHP_Min|use_boostHP_Max|use_boostAP_Min|use_boostAP_Max|use_conditionsSource[condition|magnitude|duration|chance|]|hasHitEffect|hit_boostHP_Min|hit_boostHP_Max|hit_boostAP_Min|hit_boostAP_Max|hit_conditionsSource[condition|magnitude|duration|chance|]|hit_conditionsTarget[condition|magnitude|duration|chance|]|hasKillEffect|kill_boostHP_Min|kill_boostHP_Max|kill_boostAP_Min|kill_boostAP_Max|kill_conditionsSource[condition|magnitude|duration|chance|]|];
|
||||
[id|iconID|name|category|displaytype|hasManualPrice|baseMarketCost|hasEquipEffect|equip_boostMaxHP|equip_boostMaxAP|equip_moveCostPenalty|equip_attackCost|equip_attackChance|equip_criticalChance|equip_criticalMultiplier|equip_attackDamage_Min|equip_attackDamage_Max|equip_blockChance|equip_damageResistance|equip_conditions[condition|magnitude|]|hasUseEffect|use_boostHP_Min|use_boostHP_Max|use_boostAP_Min|use_boostAP_Max|use_conditionsSource[condition|magnitude|duration|chance|]|hasHitEffect|hit_boostHP_Min|hit_boostHP_Max|hit_boostAP_Min|hit_boostAP_Max|hit_conditionsSource[condition|magnitude|duration|chance|]|hit_conditionsTarget[condition|magnitude|duration|chance|]|hasKillEffect|kill_boostHP_Min|kill_boostHP_Max|kill_boostAP_Min|kill_boostAP_Max|kill_conditionsSource[condition|magnitude|duration|chance|]|];
|
||||
{armor_chain1|items_armours:17|Rusty chain mail|3|||3629|1|||||-9|||||20||||||||||||||||||||||};
|
||||
{armor_chain2|items_armours:17|Ordinary chain mail|3|||4191|1|||||-10|||||22||||||||||||||||||||||};
|
||||
{hat_leather1|items_armours:24|Ordinary leather cap|2|||261|1|||||-2|||||7||||||||||||||||||||||};
|
||||
@@ -178,7 +178,7 @@
|
||||
</string>
|
||||
|
||||
<string name="itemlist_v069">
|
||||
[searchTag|iconID|name|category|displaytype|hasManualPrice|baseMarketCost|hasEquipEffect|equip_boostMaxHP|equip_boostMaxAP|equip_moveCostPenalty|equip_attackCost|equip_attackChance|equip_criticalChance|equip_criticalMultiplier|equip_attackDamage_Min|equip_attackDamage_Max|equip_blockChance|equip_damageResistance|equip_conditions[condition|magnitude|]|hasUseEffect|use_boostHP_Min|use_boostHP_Max|use_boostAP_Min|use_boostAP_Max|use_conditionsSource[condition|magnitude|duration|chance|]|hasHitEffect|hit_boostHP_Min|hit_boostHP_Max|hit_boostAP_Min|hit_boostAP_Max|hit_conditionsSource[condition|magnitude|duration|chance|]|hit_conditionsTarget[condition|magnitude|duration|chance|]|hasKillEffect|kill_boostHP_Min|kill_boostHP_Max|kill_boostAP_Min|kill_boostAP_Max|kill_conditionsSource[condition|magnitude|duration|chance|]|];
|
||||
[id|iconID|name|category|displaytype|hasManualPrice|baseMarketCost|hasEquipEffect|equip_boostMaxHP|equip_boostMaxAP|equip_moveCostPenalty|equip_attackCost|equip_attackChance|equip_criticalChance|equip_criticalMultiplier|equip_attackDamage_Min|equip_attackDamage_Max|equip_blockChance|equip_damageResistance|equip_conditions[condition|magnitude|]|hasUseEffect|use_boostHP_Min|use_boostHP_Max|use_boostAP_Min|use_boostAP_Max|use_conditionsSource[condition|magnitude|duration|chance|]|hasHitEffect|hit_boostHP_Min|hit_boostHP_Max|hit_boostAP_Min|hit_boostAP_Max|hit_conditionsSource[condition|magnitude|duration|chance|]|hit_conditionsTarget[condition|magnitude|duration|chance|]|hasKillEffect|kill_boostHP_Min|kill_boostHP_Max|kill_boostAP_Min|kill_boostAP_Max|kill_conditionsSource[condition|magnitude|duration|chance|]|];
|
||||
{rapier_lifesteal|items_weapons:71|Rapier of lifesteal|0|2|1|0|1|5|||5|21|||1|6||||||||||1|0|3|||||1|3|3||||};
|
||||
{dagger_barbed|items_weapons:17|Barbed dagger|0|3|1|0|1||||4|15|||0|0|5|||||||||1||||||{{bleeding_wound|1|5|50|}}|||||||};
|
||||
{elytharan_redeemer|items_weapons:70|Elytharan redeemer|0|2|1|0|1||2||5|25|||3|8|5||{{bless|1|}}|0|||||||||||||||||||};
|
||||
@@ -208,14 +208,14 @@
|
||||
</string>
|
||||
|
||||
<string name="itemlist_v069_2">
|
||||
[searchTag|iconID|name|category|displaytype|hasManualPrice|baseMarketCost|hasEquipEffect|equip_boostMaxHP|equip_boostMaxAP|equip_moveCostPenalty|equip_attackCost|equip_attackChance|equip_criticalChance|equip_criticalMultiplier|equip_attackDamage_Min|equip_attackDamage_Max|equip_blockChance|equip_damageResistance|equip_conditions[condition|magnitude|]|hasUseEffect|use_boostHP_Min|use_boostHP_Max|use_boostAP_Min|use_boostAP_Max|use_conditionsSource[condition|magnitude|duration|chance|]|hasHitEffect|hit_boostHP_Min|hit_boostHP_Max|hit_boostAP_Min|hit_boostAP_Max|hit_conditionsSource[condition|magnitude|duration|chance|]|hit_conditionsTarget[condition|magnitude|duration|chance|]|hasKillEffect|kill_boostHP_Min|kill_boostHP_Max|kill_boostAP_Min|kill_boostAP_Max|kill_conditionsSource[condition|magnitude|duration|chance|]|];
|
||||
[id|iconID|name|category|displaytype|hasManualPrice|baseMarketCost|hasEquipEffect|equip_boostMaxHP|equip_boostMaxAP|equip_moveCostPenalty|equip_attackCost|equip_attackChance|equip_criticalChance|equip_criticalMultiplier|equip_attackDamage_Min|equip_attackDamage_Max|equip_blockChance|equip_damageResistance|equip_conditions[condition|magnitude|]|hasUseEffect|use_boostHP_Min|use_boostHP_Max|use_boostAP_Min|use_boostAP_Max|use_conditionsSource[condition|magnitude|duration|chance|]|hasHitEffect|hit_boostHP_Min|hit_boostHP_Max|hit_boostAP_Min|hit_boostAP_Max|hit_conditionsSource[condition|magnitude|duration|chance|]|hit_conditionsTarget[condition|magnitude|duration|chance|]|hasKillEffect|kill_boostHP_Min|kill_boostHP_Max|kill_boostAP_Min|kill_boostAP_Max|kill_conditionsSource[condition|magnitude|duration|chance|]|];
|
||||
{rusted_iron_sword|items_weapons:0|Rusted iron sword|0|||52|1||||5|10|||1|2|||||||||||||||||||||||};
|
||||
{broken_buckler|items_armours:0|Broken wooden buckler|1|||120|1|||||-5|||||1||||||||||||||||||||||};
|
||||
{used_gloves|items_armours:35|Blood-stained gloves|4|||56|1||||||||||1||||||||||||||||||||||};
|
||||
</string>
|
||||
|
||||
<string name="itemlist_v069_questitems">
|
||||
[searchTag|iconID|name|category|displaytype|hasManualPrice|baseMarketCost|hasEquipEffect|equip_boostMaxHP|equip_boostMaxAP|equip_moveCostPenalty|equip_attackCost|equip_attackChance|equip_criticalChance|equip_criticalMultiplier|equip_attackDamage_Min|equip_attackDamage_Max|equip_blockChance|equip_damageResistance|equip_conditions[condition|magnitude|]|hasUseEffect|use_boostHP_Min|use_boostHP_Max|use_boostAP_Min|use_boostAP_Max|use_conditionsSource[condition|magnitude|duration|chance|]|hasHitEffect|hit_boostHP_Min|hit_boostHP_Max|hit_boostAP_Min|hit_boostAP_Max|hit_conditionsSource[condition|magnitude|duration|chance|]|hit_conditionsTarget[condition|magnitude|duration|chance|]|hasKillEffect|kill_boostHP_Min|kill_boostHP_Max|kill_boostAP_Min|kill_boostAP_Max|kill_conditionsSource[condition|magnitude|duration|chance|]|];
|
||||
[id|iconID|name|category|displaytype|hasManualPrice|baseMarketCost|hasEquipEffect|equip_boostMaxHP|equip_boostMaxAP|equip_moveCostPenalty|equip_attackCost|equip_attackChance|equip_criticalChance|equip_criticalMultiplier|equip_attackDamage_Min|equip_attackDamage_Max|equip_blockChance|equip_damageResistance|equip_conditions[condition|magnitude|]|hasUseEffect|use_boostHP_Min|use_boostHP_Max|use_boostAP_Min|use_boostAP_Max|use_conditionsSource[condition|magnitude|duration|chance|]|hasHitEffect|hit_boostHP_Min|hit_boostHP_Max|hit_boostAP_Min|hit_boostAP_Max|hit_conditionsSource[condition|magnitude|duration|chance|]|hit_conditionsTarget[condition|magnitude|duration|chance|]|hasKillEffect|kill_boostHP_Min|kill_boostHP_Max|kill_boostAP_Min|kill_boostAP_Max|kill_conditionsSource[condition|magnitude|duration|chance|]|];
|
||||
{bwm_claws|items_misc:47|White wyrm claw|31||1|35|||||||||||||||||||||||||||||||||};
|
||||
{bwm_permit|items_books:8|Forged papers for Blackwater|31|1|1|0|||||||||||||||||||||||||||||||||};
|
||||
{bjorgur_dagger|items_weapons:14|Bjorgur\'s family dagger|0|1|1|0|1||||5||||||||||||||||||||||||||||};
|
||||
@@ -225,7 +225,7 @@
|
||||
</string>
|
||||
|
||||
<string name="itemlist_v0610_1">
|
||||
[searchTag|iconID|name|category|displaytype|hasManualPrice|baseMarketCost|hasEquipEffect|equip_boostMaxHP|equip_boostMaxAP|equip_moveCostPenalty|equip_attackCost|equip_attackChance|equip_criticalChance|equip_criticalMultiplier|equip_attackDamage_Min|equip_attackDamage_Max|equip_blockChance|equip_damageResistance|equip_conditions[condition|magnitude|]|hasUseEffect|use_boostHP_Min|use_boostHP_Max|use_boostAP_Min|use_boostAP_Max|use_conditionsSource[condition|magnitude|duration|chance|]|hasHitEffect|hit_boostHP_Min|hit_boostHP_Max|hit_boostAP_Min|hit_boostAP_Max|hit_conditionsSource[condition|magnitude|duration|chance|]|hit_conditionsTarget[condition|magnitude|duration|chance|]|hasKillEffect|kill_boostHP_Min|kill_boostHP_Max|kill_boostAP_Min|kill_boostAP_Max|kill_conditionsSource[condition|magnitude|duration|chance|]|];
|
||||
[id|iconID|name|category|displaytype|hasManualPrice|baseMarketCost|hasEquipEffect|equip_boostMaxHP|equip_boostMaxAP|equip_moveCostPenalty|equip_attackCost|equip_attackChance|equip_criticalChance|equip_criticalMultiplier|equip_attackDamage_Min|equip_attackDamage_Max|equip_blockChance|equip_damageResistance|equip_conditions[condition|magnitude|]|hasUseEffect|use_boostHP_Min|use_boostHP_Max|use_boostAP_Min|use_boostAP_Max|use_conditionsSource[condition|magnitude|duration|chance|]|hasHitEffect|hit_boostHP_Min|hit_boostHP_Max|hit_boostAP_Min|hit_boostAP_Max|hit_conditionsSource[condition|magnitude|duration|chance|]|hit_conditionsTarget[condition|magnitude|duration|chance|]|hasKillEffect|kill_boostHP_Min|kill_boostHP_Max|kill_boostAP_Min|kill_boostAP_Max|kill_conditionsSource[condition|magnitude|duration|chance|]|];
|
||||
{dagger_shadow_priests|items_weapons:17|Dagger of the Shadow priests|0|3|1|15|1||||4|20|20|3|1|2|||||||||||||||||||||||};
|
||||
{sword_hard_iron|items_weapons:0|Hardened iron sword|0||0|369|1||||5|15|||2|4|||||||||||||||||||||||};
|
||||
{club_fine_wooden|items_weapons:42|Fine wooden club|0||0|245|1||||5|12|||0|7|||||||||||||||||||||||};
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
</array>
|
||||
|
||||
<string name="itemlist_debug">
|
||||
[searchTag|iconID|name|category|displaytype|hasManualPrice|baseMarketCost|hasEquipEffect|equip_boostMaxHP|equip_boostMaxAP|equip_moveCostPenalty|equip_attackCost|equip_attackChance|equip_criticalChance|equip_criticalMultiplier|equip_attackDamage_Min|equip_attackDamage_Max|equip_blockChance|equip_damageResistance|equip_conditions[condition|magnitude|]|hasUseEffect|use_boostHP_Min|use_boostHP_Max|use_boostAP_Min|use_boostAP_Max|use_conditionsSource[condition|magnitude|duration|chance|]|hasHitEffect|hit_boostHP_Min|hit_boostHP_Max|hit_boostAP_Min|hit_boostAP_Max|hit_conditionsSource[condition|magnitude|duration|chance|]|hit_conditionsTarget[condition|magnitude|duration|chance|]|hasKillEffect|kill_boostHP_Min|kill_boostHP_Max|kill_boostAP_Min|kill_boostAP_Max|kill_conditionsSource[condition|magnitude|duration|chance|]|];
|
||||
[id|iconID|name|category|displaytype|hasManualPrice|baseMarketCost|hasEquipEffect|equip_boostMaxHP|equip_boostMaxAP|equip_moveCostPenalty|equip_attackCost|equip_attackChance|equip_criticalChance|equip_criticalMultiplier|equip_attackDamage_Min|equip_attackDamage_Max|equip_blockChance|equip_damageResistance|equip_conditions[condition|magnitude|]|hasUseEffect|use_boostHP_Min|use_boostHP_Max|use_boostAP_Min|use_boostAP_Max|use_conditionsSource[condition|magnitude|duration|chance|]|hasHitEffect|hit_boostHP_Min|hit_boostHP_Max|hit_boostAP_Min|hit_boostAP_Max|hit_conditionsSource[condition|magnitude|duration|chance|]|hit_conditionsTarget[condition|magnitude|duration|chance|]|hasKillEffect|kill_boostHP_Min|kill_boostHP_Max|kill_boostAP_Min|kill_boostAP_Max|kill_conditionsSource[condition|magnitude|duration|chance|]|];
|
||||
{debug_dagger1|items_weapons:20|Black heart dagger|0|3|1|6|1||||2|100|30|3|5|10|||||||||||||||||||||||};
|
||||
{debug_ring1|items_jewelry:4|Black heart ring|7|1|1|3|1|||||50|||10|10|||||||||||||||||||||||};
|
||||
</string>
|
||||
|
||||
@@ -11,18 +11,15 @@ import com.gpl.rpg.AndorsTrail.AndorsTrailApplication;
|
||||
import com.gpl.rpg.AndorsTrail.R;
|
||||
import com.gpl.rpg.AndorsTrail.context.ViewContext;
|
||||
import com.gpl.rpg.AndorsTrail.context.WorldContext;
|
||||
import com.gpl.rpg.AndorsTrail.model.actor.Player;
|
||||
import com.gpl.rpg.AndorsTrail.model.map.MapObject;
|
||||
import com.gpl.rpg.AndorsTrail.model.quest.QuestProgress;
|
||||
|
||||
public final class DebugInterface {
|
||||
private final ViewContext viewContext;
|
||||
//private final ViewContext viewContext;
|
||||
private final MainActivity mainActivity;
|
||||
private final Resources res;
|
||||
private final WorldContext world;
|
||||
|
||||
public DebugInterface(ViewContext viewContext) {
|
||||
this.viewContext = viewContext;
|
||||
//this.viewContext = viewContext;
|
||||
this.mainActivity = viewContext.mainActivity;
|
||||
this.world = viewContext;
|
||||
this.res = mainActivity.getResources();
|
||||
@@ -62,7 +59,7 @@ public final class DebugInterface {
|
||||
mainActivity.showToast("DEBUG: damagePotential=1", Toast.LENGTH_SHORT);
|
||||
}
|
||||
})*/
|
||||
,new DebugButton("items", new OnClickListener() {
|
||||
/*,new DebugButton("items", new OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View arg0) {
|
||||
world.model.player.inventory.addItem(world.itemTypes.getItemType("elytharan_redeemer"));
|
||||
@@ -80,7 +77,7 @@ public final class DebugInterface {
|
||||
mainActivity.updateStatus();
|
||||
mainActivity.showToast("DEBUG: added items", Toast.LENGTH_SHORT);
|
||||
}
|
||||
})
|
||||
})*/
|
||||
/*new DebugButton("skills++", new OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View arg0) {
|
||||
@@ -96,7 +93,7 @@ public final class DebugInterface {
|
||||
showToast("DEBUG: all skills raised " + N + " levels", Toast.LENGTH_SHORT);
|
||||
}
|
||||
})*/
|
||||
,new DebugButton("bwm", new OnClickListener() {
|
||||
/*,new DebugButton("bwm", new OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View arg0) {
|
||||
Player player = world.model.player;
|
||||
@@ -112,13 +109,13 @@ public final class DebugInterface {
|
||||
|
||||
viewContext.movementController.placePlayerAt(MapObject.MAPEVENT_NEWMAP, "blackwater_mountain45", "south", 0, 0);
|
||||
}
|
||||
})
|
||||
,new DebugButton("prim", new OnClickListener() {
|
||||
})*/
|
||||
/*,new DebugButton("prim", new OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View arg0) {
|
||||
viewContext.movementController.placePlayerAt(MapObject.MAPEVENT_NEWMAP, "blackwater_mountain29", "south", 0, 0);
|
||||
}
|
||||
})
|
||||
})*/
|
||||
/*,new DebugButton("kazaul", new OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View arg0) {
|
||||
|
||||
@@ -89,7 +89,7 @@ public final class HeroinfoActivity_Quests extends Activity {
|
||||
groupList.clear();
|
||||
childList.clear();
|
||||
|
||||
for (Quest q : questCollection.quests) {
|
||||
for (Quest q : questCollection.getAllQuests()) {
|
||||
if (!q.showInLog) continue; // Do not show
|
||||
if (player.hasAnyQuestProgress(q.questID)) {
|
||||
boolean isCompleted = q.isCompleted(player);
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
package com.gpl.rpg.AndorsTrail.conversation;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.Map.Entry;
|
||||
@@ -14,11 +13,7 @@ import com.gpl.rpg.AndorsTrail.model.item.ItemType;
|
||||
import com.gpl.rpg.AndorsTrail.model.item.ItemTypeCollection;
|
||||
import com.gpl.rpg.AndorsTrail.model.map.MapCollection;
|
||||
import com.gpl.rpg.AndorsTrail.model.quest.QuestCollection;
|
||||
import com.gpl.rpg.AndorsTrail.model.quest.QuestProgress;
|
||||
import com.gpl.rpg.AndorsTrail.resource.ResourceFileParser;
|
||||
import com.gpl.rpg.AndorsTrail.resource.ResourceFileParser.ResourceObjectArrayTokenizer;
|
||||
import com.gpl.rpg.AndorsTrail.resource.ResourceFileParser.ResourceObjectFieldParser;
|
||||
import com.gpl.rpg.AndorsTrail.resource.ResourceFileParser.ResourceObjectTokenizer;
|
||||
import com.gpl.rpg.AndorsTrail.resource.parsers.ConversationListParser;
|
||||
import com.gpl.rpg.AndorsTrail.util.L;
|
||||
|
||||
public final class ConversationCollection {
|
||||
@@ -49,72 +44,34 @@ public final class ConversationCollection {
|
||||
return phrases.get(id);
|
||||
}
|
||||
|
||||
private static final ResourceObjectTokenizer conversationResourceTokenizer = new ResourceObjectTokenizer(5);
|
||||
private static final ResourceObjectTokenizer replyResourceTokenizer = new ResourceObjectTokenizer(5);
|
||||
public void initialize(String phraselist) {
|
||||
conversationResourceTokenizer.tokenizeRows(phraselist, new ResourceObjectFieldParser() {
|
||||
@Override
|
||||
public void matchedRow(String[] parts) {
|
||||
// [id|message|progressQuest|rewardDropListID|replies[text|nextPhraseID|requires_Progress|requires_itemID|requires_Quantity|]|];
|
||||
|
||||
final ArrayList<Reply> replies = new ArrayList<Reply>();
|
||||
ResourceObjectArrayTokenizer.tokenize(parts[4], replyResourceTokenizer, new ResourceObjectFieldParser() {
|
||||
@Override
|
||||
public void matchedRow(String[] parts) {
|
||||
replies.add(new Reply(
|
||||
parts[0] // text
|
||||
, parts[1] // nextPhrase
|
||||
, QuestProgress.parseQuestProgress(parts[2]) // requiresProgress
|
||||
, ResourceFileParser.parseNullableString(parts[3]) // requiresItemType
|
||||
, ResourceFileParser.parseInt(parts[4], 0) // requiresItemQuantity
|
||||
));
|
||||
}
|
||||
});
|
||||
|
||||
final Reply[] _replies = replies.toArray(new Reply[replies.size()]);
|
||||
final String phraseID = parts[0];
|
||||
|
||||
if (AndorsTrailApplication.DEVELOPMENT_VALIDATEDATA) {
|
||||
if (phraseID.trim().length() <= 0) {
|
||||
L.log("WARNING: Adding phrase with empty id.");
|
||||
} else if (phrases.get(phraseID) != null) {
|
||||
L.log("WARNING: Phrase \"" + phraseID + "\" may be duplicated.");
|
||||
}
|
||||
|
||||
boolean hasNextReply = false;
|
||||
boolean hasOtherReply = false;
|
||||
for (Reply r : replies) {
|
||||
if (r.text.equalsIgnoreCase(REPLY_NEXT)) hasNextReply = true;
|
||||
else hasOtherReply = true;
|
||||
}
|
||||
if (hasNextReply && hasOtherReply) {
|
||||
L.log("WARNING: Phrase \"" + phraseID + "\" has both a \"" + REPLY_NEXT + "\" reply and some other reply.");
|
||||
}
|
||||
}
|
||||
|
||||
phrases.put(phraseID, new Phrase(
|
||||
ResourceFileParser.parseNullableString(parts[1]) // message
|
||||
, _replies // replies
|
||||
, QuestProgress.parseQuestProgress(parts[2]) // questProgress
|
||||
, ResourceFileParser.parseNullableString(parts[3]) // rewardDroplist
|
||||
));
|
||||
}
|
||||
});
|
||||
public void initialize(ConversationListParser parser, String input) {
|
||||
parser.parseRows(input, phrases);
|
||||
}
|
||||
|
||||
// Selftest method. Not part of the game logic.
|
||||
public void verifyData() {
|
||||
if (AndorsTrailApplication.DEVELOPMENT_VALIDATEDATA) {
|
||||
for (Entry<String, Phrase> e : phrases.entrySet()) {
|
||||
final String phraseID = e.getKey();
|
||||
for (Reply r : e.getValue().replies) {
|
||||
if (!isValidPhraseID(r.nextPhrase)) {
|
||||
L.log("WARNING: Phrase \"" + e.getKey() + "\" has reply to non-existing phrase \"" + r.nextPhrase + "\".");
|
||||
L.log("WARNING: Phrase \"" + phraseID + "\" has reply to non-existing phrase \"" + r.nextPhrase + "\".");
|
||||
} else if (r.nextPhrase == null || r.nextPhrase.length() <= 0) {
|
||||
L.log("WARNING: Phrase \"" + e.getKey() + "\" has a reply that has no nextPhrase.");
|
||||
L.log("WARNING: Phrase \"" + phraseID + "\" has a reply that has no nextPhrase.");
|
||||
} else if (r.nextPhrase.equals(e.getKey())) {
|
||||
L.log("WARNING: Phrase \"" + e.getKey() + "\" has a reply that points to itself.");
|
||||
L.log("WARNING: Phrase \"" + phraseID + "\" has a reply that points to itself.");
|
||||
}
|
||||
}
|
||||
|
||||
boolean hasNextReply = false;
|
||||
boolean hasOtherReply = false;
|
||||
for (Reply r : e.getValue().replies) {
|
||||
if (r.text.equalsIgnoreCase(REPLY_NEXT)) hasNextReply = true;
|
||||
else hasOtherReply = true;
|
||||
}
|
||||
if (hasNextReply && hasOtherReply) {
|
||||
L.log("WARNING: Phrase \"" + phraseID + "\" has both a \"" + REPLY_NEXT + "\" reply and some other reply.");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -148,7 +105,7 @@ public final class ConversationCollection {
|
||||
for (Entry<String, Phrase> e : phrases.entrySet()) {
|
||||
for (Reply r : e.getValue().replies) {
|
||||
if (r.requiresItem()) {
|
||||
if (!droplists.verifyExistsDroplist(r.requiresItemTypeID)) {
|
||||
if (!droplists.verifyExistsDroplistForItem(r.requiresItemTypeID)) {
|
||||
L.log("WARNING: Phrase \"" + e.getKey() + "\" has reply that requires an item that is not dropped by any droplist.");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,58 +1,24 @@
|
||||
package com.gpl.rpg.AndorsTrail.model.ability;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
|
||||
import com.gpl.rpg.AndorsTrail.AndorsTrailApplication;
|
||||
import com.gpl.rpg.AndorsTrail.resource.DynamicTileLoader;
|
||||
import com.gpl.rpg.AndorsTrail.resource.ResourceFileParser;
|
||||
import com.gpl.rpg.AndorsTrail.resource.ResourceFileParser.ResourceObjectFieldParser;
|
||||
import com.gpl.rpg.AndorsTrail.resource.ResourceFileParser.ResourceObjectTokenizer;
|
||||
import com.gpl.rpg.AndorsTrail.resource.parsers.ActorConditionsTypeParser;
|
||||
import com.gpl.rpg.AndorsTrail.util.L;
|
||||
|
||||
public class ActorConditionTypeCollection {
|
||||
private final ArrayList<ActorConditionType> conditionTypes = new ArrayList<ActorConditionType>();
|
||||
private final HashMap<String, ActorConditionType> conditionTypes = new HashMap<String, ActorConditionType>();
|
||||
|
||||
public ActorConditionType getActorConditionType(String conditionTypeID) {
|
||||
for (ActorConditionType t : conditionTypes) {
|
||||
if (t.conditionTypeID.equals(conditionTypeID)) return t;
|
||||
}
|
||||
if (AndorsTrailApplication.DEVELOPMENT_VALIDATEDATA) {
|
||||
L.log("WARNING: Cannot find ActorConditionType \"" + conditionTypeID + "\".");
|
||||
if (!conditionTypes.containsKey(conditionTypeID)) {
|
||||
L.log("WARNING: Cannot find ActorConditionType \"" + conditionTypeID + "\".");
|
||||
}
|
||||
}
|
||||
return null;
|
||||
return conditionTypes.get(conditionTypeID);
|
||||
}
|
||||
|
||||
private static final ResourceObjectTokenizer actorConditionResourceTokenizer = new ResourceObjectTokenizer(29);
|
||||
public void initialize(final DynamicTileLoader tileLoader, String conditionList) {
|
||||
actorConditionResourceTokenizer.tokenizeRows(conditionList, new ResourceObjectFieldParser() {
|
||||
@Override
|
||||
public void matchedRow(String[] parts) {
|
||||
|
||||
final String conditionTypeID = parts[0];
|
||||
if (AndorsTrailApplication.DEVELOPMENT_VALIDATEDATA) {
|
||||
if (conditionTypeID == null || conditionTypeID.length() <= 0) {
|
||||
L.log("OPTIMIZE: ActorConditionType \"" + parts[1] + "\" has empty searchtag.");
|
||||
}
|
||||
for (ActorConditionType t : conditionTypes) {
|
||||
if (t.conditionTypeID.equals(conditionTypeID)) {
|
||||
L.log("OPTIMIZE: ActorConditionType " + conditionTypeID + " is duplicated.");
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
final ActorConditionType actorConditionType = new ActorConditionType(
|
||||
conditionTypeID
|
||||
, parts[1]
|
||||
, ResourceFileParser.parseImageID(tileLoader, parts[2])
|
||||
, Integer.parseInt(parts[3])
|
||||
, ResourceFileParser.parseBoolean(parts[4], false)
|
||||
, ResourceFileParser.parseStatsModifierTraits(parts, 5)
|
||||
, ResourceFileParser.parseStatsModifierTraits(parts, 11)
|
||||
, ResourceFileParser.parseAbilityModifierTraits(parts, 17)
|
||||
);
|
||||
conditionTypes.add(actorConditionType);
|
||||
}
|
||||
});
|
||||
public void initialize(final ActorConditionsTypeParser parser, String input) {
|
||||
parser.parseRows(input, conditionTypes);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -7,19 +7,10 @@ import java.util.HashSet;
|
||||
|
||||
import com.gpl.rpg.AndorsTrail.AndorsTrailApplication;
|
||||
import com.gpl.rpg.AndorsTrail.context.WorldContext;
|
||||
import com.gpl.rpg.AndorsTrail.controller.Constants;
|
||||
import com.gpl.rpg.AndorsTrail.conversation.ConversationCollection;
|
||||
import com.gpl.rpg.AndorsTrail.model.CombatTraits;
|
||||
import com.gpl.rpg.AndorsTrail.model.ability.ActorConditionTypeCollection;
|
||||
import com.gpl.rpg.AndorsTrail.model.item.DropList;
|
||||
import com.gpl.rpg.AndorsTrail.model.item.DropListCollection;
|
||||
import com.gpl.rpg.AndorsTrail.model.item.ItemTraits_OnUse;
|
||||
import com.gpl.rpg.AndorsTrail.resource.DynamicTileLoader;
|
||||
import com.gpl.rpg.AndorsTrail.resource.ResourceFileParser;
|
||||
import com.gpl.rpg.AndorsTrail.resource.ResourceFileParser.ResourceObjectFieldParser;
|
||||
import com.gpl.rpg.AndorsTrail.resource.ResourceFileParser.ResourceObjectTokenizer;
|
||||
import com.gpl.rpg.AndorsTrail.resource.parsers.MonsterTypeParser;
|
||||
import com.gpl.rpg.AndorsTrail.util.L;
|
||||
import com.gpl.rpg.AndorsTrail.util.Size;
|
||||
|
||||
public final class MonsterTypeCollection {
|
||||
private final HashMap<String, MonsterType> monsterTypes = new HashMap<String, MonsterType>();
|
||||
@@ -49,59 +40,9 @@ public final class MonsterTypeCollection {
|
||||
return null;
|
||||
}
|
||||
|
||||
private static final Size size1x1 = new Size(1, 1);
|
||||
private static final ResourceObjectTokenizer monsterResourceTokenizer = new ResourceObjectTokenizer(25);
|
||||
public void initialize(final DropListCollection droplists, final ActorConditionTypeCollection actorConditionTypes, final DynamicTileLoader tileLoader, String monsterlist) {
|
||||
//[iconID|name|tags|size|maxHP|maxAP|moveCost|attackCost|attackChance|criticalChance|criticalMultiplier|attackDamage_Min|attackDamage_Max|blockChance|damageResistance|droplistID|phraseID|
|
||||
// hasHitEffect|onHit_boostHP_Min|onHit_boostHP_Max|onHit_boostAP_Min|onHit_boostAP_Max|onHit_conditionsSource[condition|magnitude|duration|chance|]|onHit_conditionsTarget[condition|magnitude|duration|chance|]|];
|
||||
monsterResourceTokenizer.tokenizeRows(monsterlist, new ResourceObjectFieldParser() {
|
||||
@Override
|
||||
public void matchedRow(String[] parts) {
|
||||
final String monsterTypeId = parts[0];
|
||||
|
||||
if (AndorsTrailApplication.DEVELOPMENT_VALIDATEDATA) {
|
||||
if (monsterTypes.containsKey(monsterTypeId)) {
|
||||
L.log("WARNING: Monster " + monsterTypeId + " is duplicated.");
|
||||
}
|
||||
}
|
||||
|
||||
final int maxHP = ResourceFileParser.parseInt(parts[5], 1);
|
||||
final int maxAP = ResourceFileParser.parseInt(parts[6], 10);
|
||||
final CombatTraits combatTraits = ResourceFileParser.parseCombatTraits(parts, 8);
|
||||
final ItemTraits_OnUse hitEffect = ResourceFileParser.parseItemTraits_OnUse(actorConditionTypes, parts, 18, true);
|
||||
final int exp = getExpectedMonsterExperience(combatTraits, hitEffect, maxHP, maxAP);
|
||||
monsterTypes.put(monsterTypeId, new MonsterType(
|
||||
monsterTypeId
|
||||
, parts[2] // Name
|
||||
, parts[3] // Tags
|
||||
, ResourceFileParser.parseImageID(tileLoader, parts[1])
|
||||
, ResourceFileParser.parseSize(parts[4], size1x1) //TODO: This could be loaded from the tileset size instead.
|
||||
, maxHP // HP
|
||||
, maxAP // AP
|
||||
, ResourceFileParser.parseInt(parts[7], 10) // MoveCost
|
||||
, combatTraits
|
||||
, hitEffect
|
||||
, exp // Exp
|
||||
, droplists.getDropList(parts[16]) // Droplist
|
||||
, ResourceFileParser.parseNullableString(parts[17]) // PhraseID
|
||||
));
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private static float div100(int v) {
|
||||
return (float) v / 100f;
|
||||
}
|
||||
private static int getExpectedMonsterExperience(final CombatTraits t, ItemTraits_OnUse hitEffect, final int maxHP, final int maxAP) {
|
||||
if (t == null) return 0;
|
||||
final float avgAttackHP = t.getAttacksPerTurn(maxAP) * div100(t.attackChance) * t.damagePotential.averagef() * (1 + div100(t.criticalChance) * t.criticalMultiplier);
|
||||
final float avgDefenseHP = maxHP * (1 + div100(t.blockChance)) + Constants.EXP_FACTOR_DAMAGERESISTANCE * t.damageResistance;
|
||||
int attackConditionBonus = 0;
|
||||
if (hitEffect != null && hitEffect.addedConditions_target != null && hitEffect.addedConditions_target.length > 0) {
|
||||
attackConditionBonus += 50;
|
||||
}
|
||||
return (int) Math.ceil((avgAttackHP * 3 + avgDefenseHP) * Constants.EXP_FACTOR_SCALING) + attackConditionBonus;
|
||||
}
|
||||
public void initialize(MonsterTypeParser parser, String input) {
|
||||
parser.parseRows(input, monsterTypes);
|
||||
}
|
||||
|
||||
// Selftest method. Not part of the game logic.
|
||||
public void verifyData(WorldContext world) {
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
package com.gpl.rpg.AndorsTrail.model.item;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.Map.Entry;
|
||||
@@ -8,12 +7,8 @@ import java.util.Map.Entry;
|
||||
import com.gpl.rpg.AndorsTrail.AndorsTrailApplication;
|
||||
import com.gpl.rpg.AndorsTrail.conversation.ConversationCollection;
|
||||
import com.gpl.rpg.AndorsTrail.model.actor.MonsterTypeCollection;
|
||||
import com.gpl.rpg.AndorsTrail.model.item.DropList.DropItem;
|
||||
import com.gpl.rpg.AndorsTrail.model.map.MapCollection;
|
||||
import com.gpl.rpg.AndorsTrail.resource.ResourceFileParser;
|
||||
import com.gpl.rpg.AndorsTrail.resource.ResourceFileParser.ResourceObjectArrayTokenizer;
|
||||
import com.gpl.rpg.AndorsTrail.resource.ResourceFileParser.ResourceObjectFieldParser;
|
||||
import com.gpl.rpg.AndorsTrail.resource.ResourceFileParser.ResourceObjectTokenizer;
|
||||
import com.gpl.rpg.AndorsTrail.resource.parsers.DropListParser;
|
||||
import com.gpl.rpg.AndorsTrail.util.L;
|
||||
|
||||
public final class DropListCollection {
|
||||
@@ -32,49 +27,12 @@ public final class DropListCollection {
|
||||
return droplists.get(droplistID);
|
||||
}
|
||||
|
||||
private static final ResourceObjectTokenizer droplistResourceTokenizer = new ResourceObjectTokenizer(2);
|
||||
private static final ResourceObjectTokenizer droplistItemResourceTokenizer = new ResourceObjectTokenizer(4);
|
||||
public void initialize(final ItemTypeCollection itemTypes, String droplistString) {
|
||||
droplistResourceTokenizer.tokenizeRows(droplistString, new ResourceObjectFieldParser() {
|
||||
@Override
|
||||
public void matchedRow(String[] parts) {
|
||||
// [id|items[itemID|quantity_Min|quantity_Max|chance|]|];
|
||||
|
||||
String droplistID = parts[0];
|
||||
|
||||
final ArrayList<DropItem> items = new ArrayList<DropItem>();
|
||||
ResourceObjectArrayTokenizer.tokenize(parts[1], droplistItemResourceTokenizer, new ResourceObjectFieldParser() {
|
||||
@Override
|
||||
public void matchedRow(String[] parts) {
|
||||
items.add(new DropItem(
|
||||
itemTypes.getItemType(parts[0]) // Itemtype
|
||||
, ResourceFileParser.parseChance(parts[3]) // Chance
|
||||
, ResourceFileParser.parseQuantity(parts[1], parts[2]) // Quantity
|
||||
));
|
||||
}
|
||||
});
|
||||
|
||||
DropItem[] items_ = items.toArray(new DropItem[items.size()]);
|
||||
final DropList droplist = new DropList(items_);
|
||||
if (AndorsTrailApplication.DEVELOPMENT_VALIDATEDATA) {
|
||||
if (droplistID.trim().length() <= 0) {
|
||||
L.log("WARNING: Droplist with empty id.");
|
||||
} else {
|
||||
if (droplists.containsKey(droplistID)) {
|
||||
L.log("OPTIMIZE: Droplist " + droplistID + " is duplicated.");
|
||||
}
|
||||
}
|
||||
if (items.size() <= 0) {
|
||||
L.log("OPTIMIZE: Droplist \"" + droplistID + "\" has no dropped items.");
|
||||
}
|
||||
}
|
||||
droplists.put(droplistID, droplist);
|
||||
}
|
||||
});
|
||||
public void initialize(final DropListParser parser, String input) {
|
||||
parser.parseRows(input, droplists);
|
||||
}
|
||||
|
||||
// Selftest method. Not part of the game logic.
|
||||
public boolean verifyExistsDroplist(String itemTypeID) {
|
||||
public boolean verifyExistsDroplistForItem(String itemTypeID) {
|
||||
if (AndorsTrailApplication.DEVELOPMENT_VALIDATEDATA) {
|
||||
for (DropList d : droplists.values()) {
|
||||
if (d.contains(itemTypeID)) return true;
|
||||
|
||||
@@ -3,18 +3,13 @@ package com.gpl.rpg.AndorsTrail.model.item;
|
||||
import java.util.HashMap;
|
||||
|
||||
import com.gpl.rpg.AndorsTrail.AndorsTrailApplication;
|
||||
import com.gpl.rpg.AndorsTrail.model.ability.ActorConditionTypeCollection;
|
||||
import com.gpl.rpg.AndorsTrail.resource.DynamicTileLoader;
|
||||
import com.gpl.rpg.AndorsTrail.resource.ResourceFileParser;
|
||||
import com.gpl.rpg.AndorsTrail.resource.ResourceFileParser.ResourceObjectFieldParser;
|
||||
import com.gpl.rpg.AndorsTrail.resource.ResourceFileParser.ResourceObjectTokenizer;
|
||||
import com.gpl.rpg.AndorsTrail.resource.parsers.ItemTypeParser;
|
||||
import com.gpl.rpg.AndorsTrail.util.L;
|
||||
|
||||
public final class ItemTypeCollection {
|
||||
private static final String ITEMTYPE_GOLD = "gold";
|
||||
|
||||
private final HashMap<String, ItemType> itemTypes = new HashMap<String, ItemType>();
|
||||
public final HashMap<String, ItemType> TEST_itemTypes = itemTypes;
|
||||
|
||||
public ItemType getItemType(String id) {
|
||||
if (AndorsTrailApplication.DEVELOPMENT_VALIDATEDATA) {
|
||||
@@ -30,95 +25,53 @@ public final class ItemTypeCollection {
|
||||
return itemTypeID.equals(ITEMTYPE_GOLD);
|
||||
}
|
||||
|
||||
private static final ResourceObjectTokenizer itemResourceTokenizer = new ResourceObjectTokenizer(39);
|
||||
public void initialize(final DynamicTileLoader tileLoader, final ActorConditionTypeCollection actorConditionTypes, String itemlist) {
|
||||
itemResourceTokenizer.tokenizeRows(itemlist, new ResourceObjectFieldParser() {
|
||||
@Override
|
||||
public void matchedRow(String[] parts) {
|
||||
final String itemTypeName = parts[2];
|
||||
String id = parts[0];
|
||||
if (id == null || id.length() <= 0) {
|
||||
if (AndorsTrailApplication.DEVELOPMENT_VALIDATEDATA) {
|
||||
L.log("OPTIMIZE: ItemType \"" + itemTypeName + "\" has empty id.");
|
||||
}
|
||||
id = itemTypeName;
|
||||
}
|
||||
|
||||
final ItemTraits_OnEquip equipEffect = ResourceFileParser.parseItemTraits_OnEquip(actorConditionTypes, parts, 7);
|
||||
final ItemTraits_OnUse useEffect = ResourceFileParser.parseItemTraits_OnUse(actorConditionTypes, parts, 20, false);
|
||||
final ItemTraits_OnUse hitEffect = ResourceFileParser.parseItemTraits_OnUse(actorConditionTypes, parts, 26, true);
|
||||
final ItemTraits_OnUse killEffect = ResourceFileParser.parseItemTraits_OnUse(actorConditionTypes, parts, 33, false);
|
||||
|
||||
final int baseMarketCost = Integer.parseInt(parts[6]);
|
||||
final boolean hasManualPrice = ResourceFileParser.parseBoolean(parts[5], false);
|
||||
final ItemType itemType = new ItemType(
|
||||
id
|
||||
, ResourceFileParser.parseImageID(tileLoader, parts[1])
|
||||
, itemTypeName
|
||||
, Integer.parseInt(parts[3]) // category
|
||||
, ResourceFileParser.parseInt(parts[4], ItemType.DISPLAYTYPE_ORDINARY) // Displaytype
|
||||
, hasManualPrice // hasManualPrice
|
||||
, baseMarketCost // Base market cost
|
||||
, equipEffect
|
||||
, useEffect
|
||||
, hitEffect
|
||||
, killEffect
|
||||
);
|
||||
if (AndorsTrailApplication.DEVELOPMENT_VALIDATEDATA) {
|
||||
if (!hasManualPrice) {
|
||||
if (itemType.effects_hit != null || itemType.effects_kill != null) {
|
||||
L.log("OPTIMIZE: Item " + id + " uses automatic pricing, but has kill- or hit effects. Should probably use manual pricing?");
|
||||
}
|
||||
if (itemType.effects_equip == null && itemType.effects_use == null) {
|
||||
L.log("OPTIMIZE: Item " + id + " uses automatic pricing, but has no equip- or use effects. Should probably use manual pricing?");
|
||||
} else if (!itemType.isUsable() && !itemType.isEquippable()) {
|
||||
L.log("OPTIMIZE: Item " + id + " uses automatic pricing, but is neither usable nor equippable. Should probably use manual pricing?");
|
||||
}
|
||||
} else {
|
||||
if (baseMarketCost != 0 && itemType.isQuestItem()) {
|
||||
L.log("OPTIMIZE: Item " + id + " is a quest item, but has a base market price specified.");
|
||||
} else if (baseMarketCost == 0 && itemType.isOrdinaryItem()) {
|
||||
L.log("OPTIMIZE: Item " + id + " does not have a base market price specified (and is an ordinary item).");
|
||||
}
|
||||
}
|
||||
|
||||
if (itemType.isEquippable()) {
|
||||
if (itemType.effects_equip == null && itemType.effects_hit == null && itemType.effects_kill == null ) {
|
||||
L.log("OPTIMIZE: Item " + id + " is equippable, but has no equip effect.");
|
||||
}
|
||||
} else {
|
||||
if (itemType.effects_equip != null || itemType.effects_hit != null || itemType.effects_kill != null ) {
|
||||
L.log("OPTIMIZE: Item " + id + " is not equippable, but has equip, hit or kill effect.");
|
||||
}
|
||||
}
|
||||
if (itemType.isUsable()) {
|
||||
if (itemType.effects_use == null) {
|
||||
L.log("OPTIMIZE: Item " + id + " is usable, but has no use effect.");
|
||||
}
|
||||
} else {
|
||||
if (itemType.effects_use != null) {
|
||||
L.log("OPTIMIZE: Item " + id + " is not usable, but has use effect.");
|
||||
}
|
||||
}
|
||||
}
|
||||
if (AndorsTrailApplication.DEVELOPMENT_VALIDATEDATA) {
|
||||
if (itemTypes.containsKey(id)) {
|
||||
L.log("OPTIMIZE: Item " + id + " may be duplicated.");
|
||||
}
|
||||
}
|
||||
|
||||
itemTypes.put(id, itemType);
|
||||
}
|
||||
});
|
||||
}
|
||||
public void initialize(final ItemTypeParser parser, String input) {
|
||||
parser.parseRows(input, itemTypes);
|
||||
}
|
||||
|
||||
// Selftest method. Not part of the game logic.
|
||||
public void verifyData(DropListCollection dropLists) {
|
||||
if (AndorsTrailApplication.DEVELOPMENT_VALIDATEDATA) {
|
||||
for (ItemType t : itemTypes.values()) {
|
||||
if (dropLists.verifyExistsDroplist(t.id)) continue;
|
||||
//if (conversations.verifyExistsReplyThatRequiresItem(t.id)) continue;
|
||||
L.log("OPTIMIZE: Item " + t.id + " is not dropped by any droplist.");
|
||||
if (!t.hasManualPrice) {
|
||||
if (t.effects_hit != null || t.effects_kill != null) {
|
||||
L.log("OPTIMIZE: Item " + t.id + " uses automatic pricing, but has kill- or hit effects. Should probably use manual pricing?");
|
||||
}
|
||||
if (t.effects_equip == null && t.effects_use == null) {
|
||||
L.log("OPTIMIZE: Item " + t.id + " uses automatic pricing, but has no equip- or use effects. Should probably use manual pricing?");
|
||||
} else if (!t.isUsable() && !t.isEquippable()) {
|
||||
L.log("OPTIMIZE: Item " + t.id + " uses automatic pricing, but is neither usable nor equippable. Should probably use manual pricing?");
|
||||
}
|
||||
} else {
|
||||
if (t.baseMarketCost != 0 && t.isQuestItem()) {
|
||||
L.log("OPTIMIZE: Item " + t.id + " is a quest item, but has a base market price specified.");
|
||||
} else if (t.baseMarketCost == 0 && t.isOrdinaryItem()) {
|
||||
L.log("OPTIMIZE: Item " + t.id + " does not have a base market price specified (and is an ordinary item).");
|
||||
}
|
||||
}
|
||||
|
||||
if (t.isEquippable()) {
|
||||
if (t.effects_equip == null && t.effects_hit == null && t.effects_kill == null ) {
|
||||
L.log("OPTIMIZE: Item " + t.id + " is equippable, but has no equip effect.");
|
||||
}
|
||||
} else {
|
||||
if (t.effects_equip != null || t.effects_hit != null || t.effects_kill != null ) {
|
||||
L.log("OPTIMIZE: Item " + t.id + " is not equippable, but has equip, hit or kill effect.");
|
||||
}
|
||||
}
|
||||
if (t.isUsable()) {
|
||||
if (t.effects_use == null) {
|
||||
L.log("OPTIMIZE: Item " + t.id + " is usable, but has no use effect.");
|
||||
}
|
||||
} else {
|
||||
if (t.effects_use != null) {
|
||||
L.log("OPTIMIZE: Item " + t.id + " is not usable, but has use effect.");
|
||||
}
|
||||
}
|
||||
|
||||
if (!dropLists.verifyExistsDroplistForItem(t.id)) {
|
||||
L.log("OPTIMIZE: Item " + t.id + " is not dropped by any droplist.");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,20 +1,21 @@
|
||||
package com.gpl.rpg.AndorsTrail.model.quest;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.Comparator;
|
||||
import java.util.Collection;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
|
||||
import com.gpl.rpg.AndorsTrail.AndorsTrailApplication;
|
||||
import com.gpl.rpg.AndorsTrail.conversation.ConversationCollection;
|
||||
import com.gpl.rpg.AndorsTrail.resource.ResourceFileParser;
|
||||
import com.gpl.rpg.AndorsTrail.resource.ResourceFileParser.ResourceObjectArrayTokenizer;
|
||||
import com.gpl.rpg.AndorsTrail.resource.ResourceFileParser.ResourceObjectFieldParser;
|
||||
import com.gpl.rpg.AndorsTrail.resource.ResourceFileParser.ResourceObjectTokenizer;
|
||||
import com.gpl.rpg.AndorsTrail.resource.parsers.QuestParser;
|
||||
import com.gpl.rpg.AndorsTrail.util.L;
|
||||
|
||||
public final class QuestCollection {
|
||||
public final ArrayList<Quest> quests = new ArrayList<Quest>();
|
||||
public final class QuestCollection {
|
||||
private final HashMap<String, Quest> quests = new HashMap<String, Quest>();
|
||||
|
||||
public Collection<Quest> getAllQuests() {
|
||||
return quests.values();
|
||||
}
|
||||
|
||||
public QuestLogEntry getQuestLogEntry(final QuestProgress stage) {
|
||||
Quest q = getQuest(stage.questID);
|
||||
if (q == null) return null;
|
||||
@@ -29,93 +30,51 @@ public final class QuestCollection {
|
||||
}
|
||||
|
||||
public Quest getQuest(final String questID) {
|
||||
for (Quest q : quests) {
|
||||
if (q.questID.equals(questID)) {
|
||||
return q;
|
||||
}
|
||||
}
|
||||
if (AndorsTrailApplication.DEVELOPMENT_VALIDATEDATA) {
|
||||
L.log("WARNING: Cannot find quest \"" + questID + "\".");
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
private static final ResourceObjectTokenizer questResourceTokenizer = new ResourceObjectTokenizer(4);
|
||||
private static final ResourceObjectTokenizer questStageResourceTokenizer = new ResourceObjectTokenizer(4);
|
||||
public void initialize(String questlist) {
|
||||
questResourceTokenizer.tokenizeRows(questlist, new ResourceObjectFieldParser() {
|
||||
@Override
|
||||
public void matchedRow(String[] parts) {
|
||||
// [id|name|showInLog|stages[progress|logText|rewardExperience|finishesQuest|]|];
|
||||
|
||||
final ArrayList<QuestLogEntry> stages = new ArrayList<QuestLogEntry>();
|
||||
ResourceObjectArrayTokenizer.tokenize(parts[3], questStageResourceTokenizer, new ResourceObjectFieldParser() {
|
||||
@Override
|
||||
public void matchedRow(String[] parts) {
|
||||
stages.add(new QuestLogEntry(
|
||||
Integer.parseInt(parts[0]) // Progress
|
||||
, parts[1] // Logtext
|
||||
, ResourceFileParser.parseInt(parts[2], 0) // RewardExperience
|
||||
, ResourceFileParser.parseBoolean(parts[3], false) // FinishesQuest
|
||||
));
|
||||
}
|
||||
});
|
||||
Collections.sort(stages, new Comparator<QuestLogEntry>() {
|
||||
@Override
|
||||
public int compare(QuestLogEntry a, QuestLogEntry b) {
|
||||
return a.progress - b.progress;
|
||||
}
|
||||
});
|
||||
|
||||
final QuestLogEntry[] stages_ = stages.toArray(new QuestLogEntry[stages.size()]);
|
||||
final Quest quest = new Quest(
|
||||
parts[0] // questID
|
||||
, parts[1] // name
|
||||
, stages_
|
||||
, ResourceFileParser.parseBoolean(parts[2], false) // showInLog
|
||||
);
|
||||
if (AndorsTrailApplication.DEVELOPMENT_VALIDATEDATA) {
|
||||
if (quest.questID.trim().length() <= 0) {
|
||||
L.log("WARNING: Quest with empty id.");
|
||||
} else {
|
||||
for (Quest q : quests) {
|
||||
if (q.questID.equals(quest.questID)) {
|
||||
L.log("OPTIMIZE: Quest " + quest.questID + " is duplicated.");
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (quest.name.trim().length() <= 0) {
|
||||
L.log("WARNING: Quest \"" + quest.questID + "\" has empty name.");
|
||||
}
|
||||
if (stages.size() <= 0) {
|
||||
L.log("WARNING: Quest \"" + quest.questID + "\" has no log entries.");
|
||||
}
|
||||
boolean hasFinishingEntry = false;
|
||||
for (QuestLogEntry entry : quest.stages) {
|
||||
if (entry.finishesQuest) hasFinishingEntry = true;
|
||||
if (entry.rewardExperience == 1) {
|
||||
L.log("WARNING: Quest \"" + quest.questID + "\" has stage " + entry.progress + " that rewards just 1 exp. Might be malformed resourcefile?");
|
||||
}
|
||||
}
|
||||
if (quest.showInLog) {
|
||||
if (!hasFinishingEntry) {
|
||||
L.log("WARNING: Quest \"" + quest.questID + "\" is shown in log, but has no progress stage that finished the quest.");
|
||||
}
|
||||
}
|
||||
}
|
||||
quests.add(quest);
|
||||
if (!quests.containsKey(questID)) {
|
||||
L.log("WARNING: Cannot find quest \"" + questID + "\".");
|
||||
}
|
||||
});
|
||||
}
|
||||
return quests.get(questID);
|
||||
}
|
||||
|
||||
public void initialize(QuestParser parser, String input) {
|
||||
parser.parseRows(input, quests);
|
||||
}
|
||||
|
||||
|
||||
// Selftest method. Not part of the game logic.
|
||||
public void verifyData() {
|
||||
if (AndorsTrailApplication.DEVELOPMENT_VALIDATEDATA) {
|
||||
for (Quest q : quests.values()) {
|
||||
if (q.name.trim().length() <= 0) {
|
||||
L.log("WARNING: Quest \"" + q.questID + "\" has empty name.");
|
||||
}
|
||||
if (q.stages.length <= 0) {
|
||||
L.log("WARNING: Quest \"" + q.questID + "\" has no log entries.");
|
||||
}
|
||||
boolean hasFinishingEntry = false;
|
||||
for (QuestLogEntry entry : q.stages) {
|
||||
if (entry.finishesQuest) hasFinishingEntry = true;
|
||||
if (entry.rewardExperience == 1) {
|
||||
L.log("WARNING: Quest \"" + q.questID + "\" has stage " + entry.progress + " that rewards just 1 exp. Might be malformed resourcefile?");
|
||||
}
|
||||
}
|
||||
if (q.showInLog) {
|
||||
if (!hasFinishingEntry) {
|
||||
L.log("WARNING: Quest \"" + q.questID + "\" is shown in log, but has no progress stage that finished the quest.");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Selftest method. Not part of the game logic.
|
||||
public void verifyData(ConversationCollection conversations) {
|
||||
if (AndorsTrailApplication.DEVELOPMENT_VALIDATEDATA) {
|
||||
final HashSet<String> suppliedStages = new HashSet<String>();
|
||||
conversations.DEBUG_getSuppliedQuestStages(suppliedStages);
|
||||
for (Quest q : quests) {
|
||||
for (Quest q : quests.values()) {
|
||||
for (QuestLogEntry e : q.stages) {
|
||||
String s = q.questID + ":" + e.progress;
|
||||
if (!suppliedStages.contains(s)) {
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
package com.gpl.rpg.AndorsTrail.model.quest;
|
||||
|
||||
import com.gpl.rpg.AndorsTrail.AndorsTrailApplication;
|
||||
import com.gpl.rpg.AndorsTrail.resource.ResourceFileParser;
|
||||
import com.gpl.rpg.AndorsTrail.resource.parsers.ResourceParserUtils;
|
||||
import com.gpl.rpg.AndorsTrail.util.L;
|
||||
|
||||
public final class QuestProgress {
|
||||
@@ -17,7 +17,7 @@ public final class QuestProgress {
|
||||
String[] parts = v.split(":");
|
||||
int requiresQuestProgress = 0;
|
||||
if (parts.length >= 2) {
|
||||
requiresQuestProgress = ResourceFileParser.parseInt(parts[1], 0);
|
||||
requiresQuestProgress = ResourceParserUtils.parseInt(parts[1], 0);
|
||||
} else if (AndorsTrailApplication.DEVELOPMENT_VALIDATEDATA) {
|
||||
L.log("WARNING: Quest progress \"" + v + "\" does not specify any progress stage.");
|
||||
}
|
||||
|
||||
@@ -0,0 +1,96 @@
|
||||
package com.gpl.rpg.AndorsTrail.resource;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
import android.util.Pair;
|
||||
|
||||
import com.gpl.rpg.AndorsTrail.AndorsTrailApplication;
|
||||
import com.gpl.rpg.AndorsTrail.util.L;
|
||||
|
||||
public class ResourceFileTokenizer {
|
||||
private static final Pattern rowPattern = Pattern.compile("\\{(.+?)\\};", Pattern.MULTILINE | Pattern.DOTALL);
|
||||
private static final String columnSeparator = "\\|";
|
||||
private static final String fieldPattern = "([^\\|]*?|\\{\\s*\\{.*?\\}\\s*\\})" + columnSeparator;
|
||||
private static String repeat(String s, int count) {
|
||||
String result = s;
|
||||
for(int i = 1; i < count; ++i) result += s;
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
private final int columns;
|
||||
private final Pattern pattern;
|
||||
private final String[] parts;
|
||||
|
||||
public ResourceFileTokenizer(int columns) {
|
||||
this.columns = columns;
|
||||
this.pattern = Pattern.compile("^" + repeat(fieldPattern, columns) + "$", Pattern.MULTILINE | Pattern.DOTALL);
|
||||
this.parts = new String[columns];
|
||||
}
|
||||
|
||||
private <T> void tokenizeRows(String input, ArrayList<T> dest, ResourceObjectParser<T> parser) {
|
||||
Matcher rowMatcher = rowPattern.matcher(input);
|
||||
while (rowMatcher.find()) {
|
||||
tokenizeRow(rowMatcher.group(1), dest, parser);
|
||||
}
|
||||
}
|
||||
|
||||
public <T> void tokenizeRows(String input, HashMap<String, T> dest, ResourceObjectParser<Pair<String, T>> parser) {
|
||||
ArrayList<Pair<String, T>> objects = new ArrayList<Pair<String, T>>();
|
||||
tokenizeRows(input, objects, parser);
|
||||
|
||||
for (Pair<String, T> o : objects) {
|
||||
final String id = o.first;
|
||||
if (AndorsTrailApplication.DEVELOPMENT_VALIDATEDATA) {
|
||||
if (id == null || id.length() <= 0) {
|
||||
L.log("WARNING: Entity " + o.second.toString() + " has empty id.");
|
||||
} else if (dest.containsKey(id)) {
|
||||
L.log("WARNING: Entity " + id + " is duplicated.");
|
||||
}
|
||||
}
|
||||
dest.put(id, o.second);
|
||||
}
|
||||
}
|
||||
|
||||
private <T> void tokenizeRow(String input, ArrayList<T> dest, ResourceObjectParser<T> parser) {
|
||||
Matcher groups = pattern.matcher(input);
|
||||
if (!groups.find()) return;
|
||||
if (groups.groupCount() < columns) return;
|
||||
for(int i = 0; i < columns; ++i) {
|
||||
parts[i] = groups.group(i + 1);
|
||||
}
|
||||
T obj = parser.parseRow(parts);
|
||||
if (obj != null) dest.add(obj);
|
||||
}
|
||||
|
||||
|
||||
private static final Pattern outerPattern = Pattern.compile("^\\{(.*)\\}$", Pattern.MULTILINE | Pattern.DOTALL);
|
||||
private static final Pattern innerPattern = Pattern.compile("\\{(.*?)\\}", Pattern.MULTILINE | Pattern.DOTALL);
|
||||
|
||||
public <T> void tokenizeArray(String input, ArrayList<T> dest, ResourceObjectParser<T> parser) {
|
||||
Matcher matcher = outerPattern.matcher(input);
|
||||
if (!matcher.find()) return;
|
||||
|
||||
matcher = innerPattern.matcher(matcher.group(1));
|
||||
while (matcher.find()) {
|
||||
tokenizeRow(matcher.group(1), dest, parser);
|
||||
}
|
||||
}
|
||||
|
||||
public static interface ResourceObjectParser<T> {
|
||||
T parseRow(String[] parts);
|
||||
}
|
||||
|
||||
public static abstract class ResourceParserFor<T> extends ResourceFileTokenizer implements ResourceObjectParser<Pair<String, T>> {
|
||||
public ResourceParserFor(int columns) {
|
||||
super(columns);
|
||||
}
|
||||
|
||||
public void parseRows(String input, HashMap<String, T> dest) {
|
||||
tokenizeRows(input, dest, this);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -4,6 +4,13 @@ import com.gpl.rpg.AndorsTrail.AndorsTrailApplication;
|
||||
import com.gpl.rpg.AndorsTrail.R;
|
||||
import com.gpl.rpg.AndorsTrail.context.WorldContext;
|
||||
import com.gpl.rpg.AndorsTrail.model.map.TMXMapReader;
|
||||
import com.gpl.rpg.AndorsTrail.resource.parsers.ActorConditionsTypeParser;
|
||||
import com.gpl.rpg.AndorsTrail.resource.parsers.ConversationListParser;
|
||||
import com.gpl.rpg.AndorsTrail.resource.parsers.DropListParser;
|
||||
import com.gpl.rpg.AndorsTrail.resource.parsers.ItemTypeParser;
|
||||
import com.gpl.rpg.AndorsTrail.resource.parsers.MonsterTypeParser;
|
||||
import com.gpl.rpg.AndorsTrail.resource.parsers.QuestParser;
|
||||
import com.gpl.rpg.AndorsTrail.util.L;
|
||||
import com.gpl.rpg.AndorsTrail.util.Size;
|
||||
|
||||
import android.content.res.Resources;
|
||||
@@ -21,6 +28,7 @@ public final class ResourceLoader {
|
||||
|
||||
|
||||
public static void loadResources(WorldContext world, Resources r) {
|
||||
long start = System.currentTimeMillis();
|
||||
|
||||
final TileStore tiles = world.tileStore;
|
||||
final int mTileSize = tiles.tileSize;
|
||||
@@ -48,41 +56,49 @@ public final class ResourceLoader {
|
||||
|
||||
// ========================================================================
|
||||
// Load condition types
|
||||
final ActorConditionsTypeParser actorConditionsTypeParser = new ActorConditionsTypeParser(loader);
|
||||
final TypedArray conditionsToLoad = r.obtainTypedArray(actorConditionsResourceId);
|
||||
for (int i = 0; i < conditionsToLoad.length(); ++i) {
|
||||
world.actorConditionsTypes.initialize(loader, conditionsToLoad.getString(i));
|
||||
world.actorConditionsTypes.initialize(actorConditionsTypeParser, conditionsToLoad.getString(i));
|
||||
}
|
||||
|
||||
|
||||
// ========================================================================
|
||||
// Load items
|
||||
final ItemTypeParser itemTypeParser = new ItemTypeParser(loader, world.actorConditionsTypes);
|
||||
final TypedArray itemsToLoad = r.obtainTypedArray(itemsResourceId);
|
||||
for (int i = 0; i < itemsToLoad.length(); ++i) {
|
||||
world.itemTypes.initialize(loader, world.actorConditionsTypes, itemsToLoad.getString(i));
|
||||
world.itemTypes.initialize(itemTypeParser, itemsToLoad.getString(i));
|
||||
}
|
||||
|
||||
|
||||
// ========================================================================
|
||||
// Load droplists
|
||||
final DropListParser dropListParser = new DropListParser(world.itemTypes);
|
||||
final TypedArray droplistsToLoad = r.obtainTypedArray(droplistsResourceId);
|
||||
for (int i = 0; i < droplistsToLoad.length(); ++i) {
|
||||
world.dropLists.initialize(world.itemTypes, droplistsToLoad.getString(i));
|
||||
world.dropLists.initialize(dropListParser, droplistsToLoad.getString(i));
|
||||
}
|
||||
|
||||
|
||||
// ========================================================================
|
||||
// Load quests
|
||||
final QuestParser questParser = new QuestParser();
|
||||
final TypedArray questsToLoad = r.obtainTypedArray(questsResourceId);
|
||||
for (int i = 0; i < questsToLoad.length(); ++i) {
|
||||
world.quests.initialize(questsToLoad.getString(i));
|
||||
world.quests.initialize(questParser, questsToLoad.getString(i));
|
||||
}
|
||||
if (AndorsTrailApplication.DEVELOPMENT_VALIDATEDATA) {
|
||||
world.quests.verifyData();
|
||||
}
|
||||
|
||||
|
||||
// ========================================================================
|
||||
// Load conversations
|
||||
final ConversationListParser conversationListParser = new ConversationListParser();
|
||||
final TypedArray conversationsListsToLoad = r.obtainTypedArray(conversationsListsResourceId);
|
||||
for (int i = 0; i < conversationsListsToLoad.length(); ++i) {
|
||||
world.conversations.initialize(conversationsListsToLoad.getString(i));
|
||||
world.conversations.initialize(conversationListParser, conversationsListsToLoad.getString(i));
|
||||
}
|
||||
if (AndorsTrailApplication.DEVELOPMENT_VALIDATEDATA) {
|
||||
world.conversations.verifyData();
|
||||
@@ -91,9 +107,10 @@ public final class ResourceLoader {
|
||||
|
||||
// ========================================================================
|
||||
// Load monsters
|
||||
final MonsterTypeParser monsterTypeParser = new MonsterTypeParser(world.dropLists, world.actorConditionsTypes, loader);
|
||||
final TypedArray monstersToLoad = r.obtainTypedArray(monstersResourceId);
|
||||
for (int i = 0; i < monstersToLoad.length(); ++i) {
|
||||
world.monsterTypes.initialize(world.dropLists, world.actorConditionsTypes, loader, monstersToLoad.getString(i));
|
||||
world.monsterTypes.initialize(monsterTypeParser, monstersToLoad.getString(i));
|
||||
}
|
||||
|
||||
if (AndorsTrailApplication.DEVELOPMENT_VALIDATEDATA) {
|
||||
@@ -133,9 +150,13 @@ public final class ResourceLoader {
|
||||
if (AndorsTrailApplication.DEVELOPMENT_VALIDATEDATA) {
|
||||
world.verifyData();
|
||||
}
|
||||
|
||||
if (AndorsTrailApplication.DEVELOPMENT_DEBUGMESSAGES) {
|
||||
long duration = System.currentTimeMillis() - start;
|
||||
L.log("ResourceLoader ran for " + duration + " ms.");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private static void prepareTilesets(DynamicTileLoader loader, int mTileSize) {
|
||||
final Size dst_sz1x1 = new Size(mTileSize, mTileSize);
|
||||
final Size dst_sz2x2 = new Size(mTileSize*2, mTileSize*2);
|
||||
|
||||
@@ -0,0 +1,32 @@
|
||||
package com.gpl.rpg.AndorsTrail.resource.parsers;
|
||||
|
||||
import android.util.Pair;
|
||||
|
||||
import com.gpl.rpg.AndorsTrail.model.ability.ActorConditionType;
|
||||
import com.gpl.rpg.AndorsTrail.resource.DynamicTileLoader;
|
||||
import com.gpl.rpg.AndorsTrail.resource.ResourceFileTokenizer.ResourceParserFor;
|
||||
|
||||
public final class ActorConditionsTypeParser extends ResourceParserFor<ActorConditionType> {
|
||||
|
||||
private final DynamicTileLoader tileLoader;
|
||||
|
||||
public ActorConditionsTypeParser(final DynamicTileLoader tileLoader) {
|
||||
super(29);
|
||||
this.tileLoader = tileLoader;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Pair<String, ActorConditionType> parseRow(String[] parts) {
|
||||
final String conditionTypeID = parts[0];
|
||||
return new Pair<String, ActorConditionType>(conditionTypeID, new ActorConditionType(
|
||||
conditionTypeID
|
||||
, parts[1]
|
||||
, ResourceParserUtils.parseImageID(tileLoader, parts[2])
|
||||
, Integer.parseInt(parts[3])
|
||||
, ResourceParserUtils.parseBoolean(parts[4], false)
|
||||
, ResourceParserUtils.parseStatsModifierTraits(parts, 5)
|
||||
, ResourceParserUtils.parseStatsModifierTraits(parts, 11)
|
||||
, ResourceParserUtils.parseAbilityModifierTraits(parts, 17)
|
||||
));
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,48 @@
|
||||
package com.gpl.rpg.AndorsTrail.resource.parsers;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
import android.util.Pair;
|
||||
|
||||
import com.gpl.rpg.AndorsTrail.conversation.Phrase;
|
||||
import com.gpl.rpg.AndorsTrail.conversation.Phrase.Reply;
|
||||
import com.gpl.rpg.AndorsTrail.model.quest.QuestProgress;
|
||||
import com.gpl.rpg.AndorsTrail.resource.ResourceFileTokenizer;
|
||||
import com.gpl.rpg.AndorsTrail.resource.ResourceFileTokenizer.ResourceParserFor;
|
||||
|
||||
public final class ConversationListParser extends ResourceParserFor<Phrase> {
|
||||
|
||||
public ConversationListParser() {
|
||||
super(5);
|
||||
}
|
||||
|
||||
private final ResourceFileTokenizer replyResourceTokenizer = new ResourceFileTokenizer(5);
|
||||
private final ResourceObjectParser<Reply> replyParser = new ResourceObjectParser<Reply>() {
|
||||
@Override
|
||||
public Reply parseRow(String[] parts) {
|
||||
return new Reply(
|
||||
parts[0] // text
|
||||
, parts[1] // nextPhrase
|
||||
, QuestProgress.parseQuestProgress(parts[2]) // requiresProgress
|
||||
, ResourceParserUtils.parseNullableString(parts[3]) // requiresItemType
|
||||
, ResourceParserUtils.parseInt(parts[4], 0) // requiresItemQuantity
|
||||
);
|
||||
}
|
||||
};
|
||||
|
||||
@Override
|
||||
public Pair<String, Phrase> parseRow(String[] parts) {
|
||||
// [id|message|progressQuest|rewardDropListID|replies[text|nextPhraseID|requires_Progress|requires_itemID|requires_Quantity|]|];
|
||||
|
||||
final ArrayList<Reply> replies = new ArrayList<Reply>();
|
||||
replyResourceTokenizer.tokenizeArray(parts[4], replies, replyParser);
|
||||
final Reply[] _replies = replies.toArray(new Reply[replies.size()]);
|
||||
|
||||
return new Pair<String, Phrase>(parts[0], new Phrase(
|
||||
ResourceParserUtils.parseNullableString(parts[1]) // message
|
||||
, _replies // replies
|
||||
, QuestProgress.parseQuestProgress(parts[2]) // questProgress
|
||||
, ResourceParserUtils.parseNullableString(parts[3]) // rewardDroplist
|
||||
));
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,51 @@
|
||||
package com.gpl.rpg.AndorsTrail.resource.parsers;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
import android.util.Pair;
|
||||
|
||||
import com.gpl.rpg.AndorsTrail.AndorsTrailApplication;
|
||||
import com.gpl.rpg.AndorsTrail.model.item.DropList;
|
||||
import com.gpl.rpg.AndorsTrail.model.item.ItemTypeCollection;
|
||||
import com.gpl.rpg.AndorsTrail.model.item.DropList.DropItem;
|
||||
import com.gpl.rpg.AndorsTrail.resource.ResourceFileTokenizer;
|
||||
import com.gpl.rpg.AndorsTrail.resource.ResourceFileTokenizer.ResourceParserFor;
|
||||
import com.gpl.rpg.AndorsTrail.util.L;
|
||||
|
||||
public final class DropListParser extends ResourceParserFor<DropList> {
|
||||
|
||||
private final ResourceFileTokenizer droplistItemResourceTokenizer = new ResourceFileTokenizer(4);
|
||||
private final ResourceObjectParser<DropItem> dropItemParser;
|
||||
|
||||
public DropListParser(final ItemTypeCollection itemTypes) {
|
||||
super(2);
|
||||
this.dropItemParser = new ResourceObjectParser<DropItem>() {
|
||||
@Override
|
||||
public DropItem parseRow(String[] parts) {
|
||||
return new DropItem(
|
||||
itemTypes.getItemType(parts[0]) // Itemtype
|
||||
, ResourceParserUtils.parseChance(parts[3]) // Chance
|
||||
, ResourceParserUtils.parseQuantity(parts[1], parts[2]) // Quantity
|
||||
);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
@Override
|
||||
public Pair<String, DropList> parseRow(String[] parts) {
|
||||
// [id|items[itemID|quantity_Min|quantity_Max|chance|]|];
|
||||
|
||||
String droplistID = parts[0];
|
||||
|
||||
final ArrayList<DropItem> items = new ArrayList<DropItem>();
|
||||
droplistItemResourceTokenizer.tokenizeArray(parts[1], items, dropItemParser);
|
||||
DropItem[] items_ = items.toArray(new DropItem[items.size()]);
|
||||
|
||||
if (AndorsTrailApplication.DEVELOPMENT_VALIDATEDATA) {
|
||||
if (items_.length <= 0) {
|
||||
L.log("OPTIMIZE: Droplist \"" + droplistID + "\" has no dropped items.");
|
||||
}
|
||||
}
|
||||
return new Pair<String, DropList>(droplistID, new DropList(items_));
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,116 @@
|
||||
package com.gpl.rpg.AndorsTrail.resource.parsers;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
import com.gpl.rpg.AndorsTrail.AndorsTrailApplication;
|
||||
import com.gpl.rpg.AndorsTrail.model.CombatTraits;
|
||||
import com.gpl.rpg.AndorsTrail.model.ability.ActorCondition;
|
||||
import com.gpl.rpg.AndorsTrail.model.ability.ActorConditionEffect;
|
||||
import com.gpl.rpg.AndorsTrail.model.ability.ActorConditionTypeCollection;
|
||||
import com.gpl.rpg.AndorsTrail.model.item.ItemTraits_OnEquip;
|
||||
import com.gpl.rpg.AndorsTrail.model.item.ItemTraits_OnUse;
|
||||
import com.gpl.rpg.AndorsTrail.resource.ResourceFileTokenizer;
|
||||
import com.gpl.rpg.AndorsTrail.resource.ResourceFileTokenizer.ResourceObjectParser;
|
||||
import com.gpl.rpg.AndorsTrail.util.ConstRange;
|
||||
import com.gpl.rpg.AndorsTrail.util.L;
|
||||
|
||||
public final class ItemTraitsParser {
|
||||
private final ResourceObjectParser<ActorConditionEffect> actorConditionEffectParser_withDuration;
|
||||
private final ResourceObjectParser<ActorConditionEffect> actorConditionEffectParser_withoutDuration;
|
||||
private final ResourceFileTokenizer tokenize4Fields = new ResourceFileTokenizer(4);
|
||||
private final ResourceFileTokenizer tokenize2Fields = new ResourceFileTokenizer(2);
|
||||
|
||||
public ItemTraitsParser(final ActorConditionTypeCollection actorConditionTypes) {
|
||||
this.actorConditionEffectParser_withDuration = new ResourceObjectParser<ActorConditionEffect>() {
|
||||
@Override
|
||||
public ActorConditionEffect parseRow(String[] parts) {
|
||||
return new ActorConditionEffect(
|
||||
actorConditionTypes.getActorConditionType(parts[0])
|
||||
, ResourceParserUtils.parseInt(parts[1], ActorCondition.MAGNITUDE_REMOVE_ALL)
|
||||
, ResourceParserUtils.parseInt(parts[2], ActorCondition.DURATION_FOREVER)
|
||||
, ResourceParserUtils.parseChance(parts[3])
|
||||
);
|
||||
}
|
||||
};
|
||||
this.actorConditionEffectParser_withoutDuration = new ResourceObjectParser<ActorConditionEffect>() {
|
||||
@Override
|
||||
public ActorConditionEffect parseRow(String[] parts) {
|
||||
return new ActorConditionEffect(
|
||||
actorConditionTypes.getActorConditionType(parts[0])
|
||||
, ResourceParserUtils.parseInt(parts[1], 1)
|
||||
, ActorCondition.DURATION_FOREVER
|
||||
, ResourceParserUtils.always
|
||||
);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
public ItemTraits_OnUse parseItemTraits_OnUse(String[] parts, int startIndex, boolean parseTargetConditions) {
|
||||
boolean hasEffect = ResourceParserUtils.parseBoolean(parts[startIndex], false);
|
||||
if (!hasEffect) return null;
|
||||
|
||||
ConstRange boostCurrentHP = ResourceParserUtils.parseRange(parts[startIndex + 1], parts[startIndex + 2]);
|
||||
ConstRange boostCurrentAP = ResourceParserUtils.parseRange(parts[startIndex + 3], parts[startIndex + 4]);
|
||||
final ArrayList<ActorConditionEffect> addedConditions_source = new ArrayList<ActorConditionEffect>();
|
||||
final ArrayList<ActorConditionEffect> addedConditions_target = new ArrayList<ActorConditionEffect>();
|
||||
tokenize4Fields.tokenizeArray(parts[startIndex + 5], addedConditions_source, actorConditionEffectParser_withDuration);
|
||||
if (parseTargetConditions) {
|
||||
tokenize4Fields.tokenizeArray(parts[startIndex + 6], addedConditions_target, actorConditionEffectParser_withDuration);
|
||||
}
|
||||
if ( boostCurrentHP == null
|
||||
&& boostCurrentAP == null
|
||||
&& addedConditions_source.isEmpty()
|
||||
&& addedConditions_target.isEmpty()
|
||||
) {
|
||||
if (AndorsTrailApplication.DEVELOPMENT_VALIDATEDATA) {
|
||||
L.log("OPTIMIZE: Tried to parseItemTraits_OnUse , where hasEffect=" + parts[startIndex] + ", but all data was empty.");
|
||||
}
|
||||
return null;
|
||||
} else {
|
||||
return new ItemTraits_OnUse(
|
||||
ItemTraits_OnUse.VISUAL_EFFECT_NONE
|
||||
,boostCurrentHP
|
||||
,boostCurrentAP
|
||||
,listToArray(addedConditions_source)
|
||||
,listToArray(addedConditions_target)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
public ItemTraits_OnEquip parseItemTraits_OnEquip(String[] parts, int startIndex) {
|
||||
boolean hasEffect = ResourceParserUtils.parseBoolean(parts[startIndex], false);
|
||||
if (!hasEffect) return null;
|
||||
|
||||
String boostMaxHP = parts[startIndex + 1];
|
||||
String boostMaxAP = parts[startIndex + 2];
|
||||
String moveCostPenalty = parts[startIndex + 3];
|
||||
CombatTraits combatTraits = ResourceParserUtils.parseCombatTraits(parts, startIndex + 4);
|
||||
final ArrayList<ActorConditionEffect> addedConditions = new ArrayList<ActorConditionEffect>();
|
||||
tokenize2Fields.tokenizeArray(parts[startIndex + 12], addedConditions, actorConditionEffectParser_withoutDuration);
|
||||
|
||||
if ( boostMaxHP.length() <= 0
|
||||
&& boostMaxAP.length() <= 0
|
||||
&& moveCostPenalty.length() <= 0
|
||||
&& combatTraits == null
|
||||
&& addedConditions.isEmpty()
|
||||
) {
|
||||
if (AndorsTrailApplication.DEVELOPMENT_VALIDATEDATA) {
|
||||
L.log("OPTIMIZE: Tried to parseItemTraits_OnEquip , where hasEffect=" + parts[startIndex] + ", but all data was empty.");
|
||||
}
|
||||
return null;
|
||||
} else {
|
||||
return new ItemTraits_OnEquip(
|
||||
ResourceParserUtils.parseInt(boostMaxHP, 0)
|
||||
,ResourceParserUtils.parseInt(boostMaxAP, 0)
|
||||
,ResourceParserUtils.parseInt(moveCostPenalty, 0)
|
||||
,combatTraits
|
||||
,listToArray(addedConditions)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
private static ActorConditionEffect[] listToArray(ArrayList<ActorConditionEffect> list) {
|
||||
if (list.isEmpty()) return null;
|
||||
return list.toArray(new ActorConditionEffect[list.size()]);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,49 @@
|
||||
package com.gpl.rpg.AndorsTrail.resource.parsers;
|
||||
|
||||
import android.util.Pair;
|
||||
|
||||
import com.gpl.rpg.AndorsTrail.model.ability.ActorConditionTypeCollection;
|
||||
import com.gpl.rpg.AndorsTrail.model.item.ItemTraits_OnEquip;
|
||||
import com.gpl.rpg.AndorsTrail.model.item.ItemTraits_OnUse;
|
||||
import com.gpl.rpg.AndorsTrail.model.item.ItemType;
|
||||
import com.gpl.rpg.AndorsTrail.resource.DynamicTileLoader;
|
||||
import com.gpl.rpg.AndorsTrail.resource.ResourceFileTokenizer.ResourceParserFor;
|
||||
|
||||
public final class ItemTypeParser extends ResourceParserFor<ItemType> {
|
||||
|
||||
private final DynamicTileLoader tileLoader;
|
||||
private final ItemTraitsParser itemTraitsParser;
|
||||
|
||||
public ItemTypeParser(DynamicTileLoader tileLoader, ActorConditionTypeCollection actorConditionsTypes) {
|
||||
super(39);
|
||||
this.tileLoader = tileLoader;
|
||||
this.itemTraitsParser = new ItemTraitsParser(actorConditionsTypes);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Pair<String, ItemType> parseRow(String[] parts) {
|
||||
final String itemTypeName = parts[2];
|
||||
String id = parts[0];
|
||||
final ItemTraits_OnEquip equipEffect = itemTraitsParser.parseItemTraits_OnEquip(parts, 7);
|
||||
final ItemTraits_OnUse useEffect = itemTraitsParser.parseItemTraits_OnUse(parts, 20, false);
|
||||
final ItemTraits_OnUse hitEffect = itemTraitsParser.parseItemTraits_OnUse(parts, 26, true);
|
||||
final ItemTraits_OnUse killEffect = itemTraitsParser.parseItemTraits_OnUse(parts, 33, false);
|
||||
|
||||
final int baseMarketCost = Integer.parseInt(parts[6]);
|
||||
final boolean hasManualPrice = ResourceParserUtils.parseBoolean(parts[5], false);
|
||||
final ItemType itemType = new ItemType(
|
||||
id
|
||||
, ResourceParserUtils.parseImageID(tileLoader, parts[1])
|
||||
, itemTypeName
|
||||
, Integer.parseInt(parts[3]) // category
|
||||
, ResourceParserUtils.parseInt(parts[4], ItemType.DISPLAYTYPE_ORDINARY) // Displaytype
|
||||
, hasManualPrice // hasManualPrice
|
||||
, baseMarketCost // Base market cost
|
||||
, equipEffect
|
||||
, useEffect
|
||||
, hitEffect
|
||||
, killEffect
|
||||
);
|
||||
return new Pair<String, ItemType>(id, itemType);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,67 @@
|
||||
package com.gpl.rpg.AndorsTrail.resource.parsers;
|
||||
|
||||
import android.util.Pair;
|
||||
|
||||
import com.gpl.rpg.AndorsTrail.controller.Constants;
|
||||
import com.gpl.rpg.AndorsTrail.model.CombatTraits;
|
||||
import com.gpl.rpg.AndorsTrail.model.ability.ActorConditionTypeCollection;
|
||||
import com.gpl.rpg.AndorsTrail.model.actor.MonsterType;
|
||||
import com.gpl.rpg.AndorsTrail.model.item.DropListCollection;
|
||||
import com.gpl.rpg.AndorsTrail.model.item.ItemTraits_OnUse;
|
||||
import com.gpl.rpg.AndorsTrail.resource.DynamicTileLoader;
|
||||
import com.gpl.rpg.AndorsTrail.resource.ResourceFileTokenizer.ResourceParserFor;
|
||||
import com.gpl.rpg.AndorsTrail.util.Size;
|
||||
|
||||
public final class MonsterTypeParser extends ResourceParserFor<MonsterType> {
|
||||
|
||||
private final Size size1x1 = new Size(1, 1);
|
||||
private final DropListCollection droplists;
|
||||
private final ItemTraitsParser itemTraitsParser;
|
||||
private final DynamicTileLoader tileLoader;
|
||||
|
||||
public MonsterTypeParser(final DropListCollection droplists, final ActorConditionTypeCollection actorConditionTypes, final DynamicTileLoader tileLoader) {
|
||||
super(25);
|
||||
this.itemTraitsParser = new ItemTraitsParser(actorConditionTypes);
|
||||
this.droplists = droplists;
|
||||
this.tileLoader = tileLoader;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Pair<String, MonsterType> parseRow(String[] parts) {
|
||||
final String monsterTypeId = parts[0];
|
||||
final int maxHP = ResourceParserUtils.parseInt(parts[5], 1);
|
||||
final int maxAP = ResourceParserUtils.parseInt(parts[6], 10);
|
||||
final CombatTraits combatTraits = ResourceParserUtils.parseCombatTraits(parts, 8);
|
||||
final ItemTraits_OnUse hitEffect = itemTraitsParser.parseItemTraits_OnUse(parts, 18, true);
|
||||
final int exp = getExpectedMonsterExperience(combatTraits, hitEffect, maxHP, maxAP);
|
||||
return new Pair<String, MonsterType>(monsterTypeId, new MonsterType(
|
||||
monsterTypeId
|
||||
, parts[2] // Name
|
||||
, parts[3] // Tags
|
||||
, ResourceParserUtils.parseImageID(tileLoader, parts[1])
|
||||
, ResourceParserUtils.parseSize(parts[4], size1x1) //TODO: This could be loaded from the tileset size instead.
|
||||
, maxHP // HP
|
||||
, maxAP // AP
|
||||
, ResourceParserUtils.parseInt(parts[7], 10) // MoveCost
|
||||
, combatTraits
|
||||
, hitEffect
|
||||
, exp // Exp
|
||||
, droplists.getDropList(parts[16]) // Droplist
|
||||
, ResourceParserUtils.parseNullableString(parts[17]) // PhraseID
|
||||
));
|
||||
}
|
||||
|
||||
private static float div100(int v) {
|
||||
return (float) v / 100f;
|
||||
}
|
||||
private static int getExpectedMonsterExperience(final CombatTraits t, ItemTraits_OnUse hitEffect, final int maxHP, final int maxAP) {
|
||||
if (t == null) return 0;
|
||||
final float avgAttackHP = t.getAttacksPerTurn(maxAP) * div100(t.attackChance) * t.damagePotential.averagef() * (1 + div100(t.criticalChance) * t.criticalMultiplier);
|
||||
final float avgDefenseHP = maxHP * (1 + div100(t.blockChance)) + Constants.EXP_FACTOR_DAMAGERESISTANCE * t.damageResistance;
|
||||
int attackConditionBonus = 0;
|
||||
if (hitEffect != null && hitEffect.addedConditions_target != null && hitEffect.addedConditions_target.length > 0) {
|
||||
attackConditionBonus += 50;
|
||||
}
|
||||
return (int) Math.ceil((avgAttackHP * 3 + avgDefenseHP) * Constants.EXP_FACTOR_SCALING) + attackConditionBonus;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,56 @@
|
||||
package com.gpl.rpg.AndorsTrail.resource.parsers;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.Comparator;
|
||||
|
||||
import android.util.Pair;
|
||||
|
||||
import com.gpl.rpg.AndorsTrail.model.quest.Quest;
|
||||
import com.gpl.rpg.AndorsTrail.model.quest.QuestLogEntry;
|
||||
import com.gpl.rpg.AndorsTrail.resource.ResourceFileTokenizer;
|
||||
import com.gpl.rpg.AndorsTrail.resource.ResourceFileTokenizer.ResourceParserFor;
|
||||
|
||||
public final class QuestParser extends ResourceParserFor<Quest> {
|
||||
|
||||
private final ResourceFileTokenizer questStageResourceTokenizer = new ResourceFileTokenizer(4);
|
||||
private final ResourceObjectParser<QuestLogEntry> questLogEntryParser = new ResourceObjectParser<QuestLogEntry>() {
|
||||
@Override
|
||||
public QuestLogEntry parseRow(String[] parts) {
|
||||
return new QuestLogEntry(
|
||||
Integer.parseInt(parts[0]) // Progress
|
||||
, parts[1] // Logtext
|
||||
, ResourceParserUtils.parseInt(parts[2], 0) // RewardExperience
|
||||
, ResourceParserUtils.parseBoolean(parts[3], false) // FinishesQuest
|
||||
);
|
||||
}
|
||||
};
|
||||
private final Comparator<QuestLogEntry> sortByQuestProgress = new Comparator<QuestLogEntry>() {
|
||||
@Override
|
||||
public int compare(QuestLogEntry a, QuestLogEntry b) {
|
||||
return a.progress - b.progress;
|
||||
}
|
||||
};
|
||||
|
||||
public QuestParser() {
|
||||
super(4);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Pair<String, Quest> parseRow(String[] parts) {
|
||||
// [id|name|showInLog|stages[progress|logText|rewardExperience|finishesQuest|]|];
|
||||
|
||||
final ArrayList<QuestLogEntry> stages = new ArrayList<QuestLogEntry>();
|
||||
questStageResourceTokenizer.tokenizeArray(parts[3], stages, questLogEntryParser);
|
||||
Collections.sort(stages, sortByQuestProgress);
|
||||
final QuestLogEntry[] stages_ = stages.toArray(new QuestLogEntry[stages.size()]);
|
||||
|
||||
final String questID = parts[0];
|
||||
return new Pair<String, Quest>(questID, new Quest(
|
||||
questID // questID
|
||||
, parts[1] // name
|
||||
, stages_
|
||||
, ResourceParserUtils.parseBoolean(parts[2], false) // showInLog
|
||||
));
|
||||
}
|
||||
}
|
||||
@@ -1,30 +1,15 @@
|
||||
package com.gpl.rpg.AndorsTrail.resource;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
package com.gpl.rpg.AndorsTrail.resource.parsers;
|
||||
|
||||
import com.gpl.rpg.AndorsTrail.AndorsTrailApplication;
|
||||
import com.gpl.rpg.AndorsTrail.model.CombatTraits;
|
||||
import com.gpl.rpg.AndorsTrail.model.ability.ActorCondition;
|
||||
import com.gpl.rpg.AndorsTrail.model.ability.ActorConditionEffect;
|
||||
import com.gpl.rpg.AndorsTrail.model.ability.ActorConditionTypeCollection;
|
||||
import com.gpl.rpg.AndorsTrail.model.ability.traits.AbilityModifierTraits;
|
||||
import com.gpl.rpg.AndorsTrail.model.ability.traits.StatsModifierTraits;
|
||||
import com.gpl.rpg.AndorsTrail.model.item.ItemTraits_OnEquip;
|
||||
import com.gpl.rpg.AndorsTrail.model.item.ItemTraits_OnUse;
|
||||
import com.gpl.rpg.AndorsTrail.resource.DynamicTileLoader;
|
||||
import com.gpl.rpg.AndorsTrail.util.ConstRange;
|
||||
import com.gpl.rpg.AndorsTrail.util.L;
|
||||
import com.gpl.rpg.AndorsTrail.util.Size;
|
||||
|
||||
public class ResourceFileParser {
|
||||
private static final Pattern rowPattern = Pattern.compile("\\{(.+?)\\};", Pattern.MULTILINE | Pattern.DOTALL);
|
||||
private static final String columnSeparator = "\\|";
|
||||
private static String repeat(String s, int count) {
|
||||
String result = s;
|
||||
for(int i = 1; i < count; ++i) result += s;
|
||||
return result;
|
||||
}
|
||||
public final class ResourceParserUtils {
|
||||
|
||||
public static int parseImageID(DynamicTileLoader tileLoader, String s) {
|
||||
String[] parts = s.split(":");
|
||||
@@ -175,7 +160,7 @@ public class ResourceFileParser {
|
||||
return parseRange(min, max);
|
||||
}
|
||||
|
||||
private static final ConstRange always = one;
|
||||
public static final ConstRange always = one;
|
||||
private static final ConstRange often = new ConstRange(100, 70);
|
||||
private static final ConstRange animalpart = new ConstRange(100, 30);
|
||||
private static final ConstRange sometimes = new ConstRange(100, 25);
|
||||
@@ -204,155 +189,4 @@ public class ResourceFileParser {
|
||||
}
|
||||
else return new ConstRange(100, parseInt(v, 10));
|
||||
}
|
||||
|
||||
private static ActorConditionEffect parseActorConditionEffect(ActorConditionTypeCollection actorConditionTypes, String[] parts, boolean includeDuration) {
|
||||
if (includeDuration) {
|
||||
return new ActorConditionEffect(
|
||||
actorConditionTypes.getActorConditionType(parts[0])
|
||||
, parseInt(parts[1], ActorCondition.MAGNITUDE_REMOVE_ALL)
|
||||
, parseInt(parts[2], ActorCondition.DURATION_FOREVER)
|
||||
, parseChance(parts[3])
|
||||
);
|
||||
} else {
|
||||
return new ActorConditionEffect(
|
||||
actorConditionTypes.getActorConditionType(parts[0])
|
||||
, parseInt(parts[1], 1)
|
||||
, ActorCondition.DURATION_FOREVER
|
||||
, always
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
private static class ActorConditionTypeArrayAppender implements ResourceObjectFieldParser {
|
||||
private final ActorConditionTypeCollection actorConditionTypes;
|
||||
private final ArrayList<ActorConditionEffect> dest;
|
||||
private final boolean includeDuration;
|
||||
public ActorConditionTypeArrayAppender(ActorConditionTypeCollection actorConditionTypes, ArrayList<ActorConditionEffect> dest, boolean includeDuration) {
|
||||
this.actorConditionTypes = actorConditionTypes;
|
||||
this.dest = dest;
|
||||
this.includeDuration = includeDuration;
|
||||
}
|
||||
@Override
|
||||
public void matchedRow(String[] parts) {
|
||||
ActorConditionEffect a = parseActorConditionEffect(actorConditionTypes, parts, includeDuration);
|
||||
if (a != null) dest.add(a);
|
||||
}
|
||||
}
|
||||
private static final ResourceObjectTokenizer tokenize4Fields = new ResourceObjectTokenizer(4);
|
||||
public static ItemTraits_OnUse parseItemTraits_OnUse(final ActorConditionTypeCollection actorConditionTypes, String[] parts, int startIndex, boolean parseTargetConditions) {
|
||||
boolean hasEffect = parseBoolean(parts[startIndex], false);
|
||||
if (!hasEffect) return null;
|
||||
|
||||
ConstRange boostCurrentHP = parseRange(parts[startIndex + 1], parts[startIndex + 2]);
|
||||
ConstRange boostCurrentAP = parseRange(parts[startIndex + 3], parts[startIndex + 4]);
|
||||
final ArrayList<ActorConditionEffect> addedConditions_source = new ArrayList<ActorConditionEffect>();
|
||||
final ArrayList<ActorConditionEffect> addedConditions_target = new ArrayList<ActorConditionEffect>();
|
||||
ResourceObjectArrayTokenizer.tokenize(parts[startIndex + 5], tokenize4Fields, new ActorConditionTypeArrayAppender(actorConditionTypes, addedConditions_source, true));
|
||||
if (parseTargetConditions) {
|
||||
ResourceObjectArrayTokenizer.tokenize(parts[startIndex + 6], tokenize4Fields, new ActorConditionTypeArrayAppender(actorConditionTypes, addedConditions_target, true));
|
||||
}
|
||||
if ( boostCurrentHP == null
|
||||
&& boostCurrentAP == null
|
||||
&& addedConditions_source.isEmpty()
|
||||
&& addedConditions_target.isEmpty()
|
||||
) {
|
||||
if (AndorsTrailApplication.DEVELOPMENT_VALIDATEDATA) {
|
||||
L.log("OPTIMIZE: Tried to parseItemTraits_OnUse , where hasEffect=" + parts[startIndex] + ", but all data was empty.");
|
||||
}
|
||||
return null;
|
||||
} else {
|
||||
return new ItemTraits_OnUse(
|
||||
ItemTraits_OnUse.VISUAL_EFFECT_NONE
|
||||
,boostCurrentHP
|
||||
,boostCurrentAP
|
||||
,listToArray(addedConditions_source)
|
||||
,listToArray(addedConditions_target)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
private static final ResourceObjectTokenizer tokenize2Fields = new ResourceObjectTokenizer(2);
|
||||
public static ItemTraits_OnEquip parseItemTraits_OnEquip(final ActorConditionTypeCollection actorConditionTypes, String[] parts, int startIndex) {
|
||||
boolean hasEffect = parseBoolean(parts[startIndex], false);
|
||||
if (!hasEffect) return null;
|
||||
|
||||
String boostMaxHP = parts[startIndex + 1];
|
||||
String boostMaxAP = parts[startIndex + 2];
|
||||
String moveCostPenalty = parts[startIndex + 3];
|
||||
CombatTraits combatTraits = parseCombatTraits(parts, startIndex + 4);
|
||||
final ArrayList<ActorConditionEffect> addedConditions = new ArrayList<ActorConditionEffect>();
|
||||
ResourceObjectArrayTokenizer.tokenize(parts[startIndex + 12], tokenize2Fields, new ActorConditionTypeArrayAppender(actorConditionTypes, addedConditions, false));
|
||||
|
||||
if ( boostMaxHP.length() <= 0
|
||||
&& boostMaxAP.length() <= 0
|
||||
&& moveCostPenalty.length() <= 0
|
||||
&& combatTraits == null
|
||||
&& addedConditions.isEmpty()
|
||||
) {
|
||||
if (AndorsTrailApplication.DEVELOPMENT_VALIDATEDATA) {
|
||||
L.log("OPTIMIZE: Tried to parseItemTraits_OnEquip , where hasEffect=" + parts[startIndex] + ", but all data was empty.");
|
||||
}
|
||||
return null;
|
||||
} else {
|
||||
return new ItemTraits_OnEquip(
|
||||
parseInt(boostMaxHP, 0)
|
||||
,parseInt(boostMaxAP, 0)
|
||||
,parseInt(moveCostPenalty, 0)
|
||||
,combatTraits
|
||||
,listToArray(addedConditions)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
public static ActorConditionEffect[] listToArray(ArrayList<ActorConditionEffect> list) {
|
||||
if (list.isEmpty()) return null;
|
||||
return list.toArray(new ActorConditionEffect[list.size()]);
|
||||
}
|
||||
|
||||
public static class ResourceObjectTokenizer {
|
||||
private static final String fieldPattern = "([^\\|]*?|\\{\\s*\\{.*?\\}\\s*\\})" + columnSeparator;
|
||||
|
||||
private final int columns;
|
||||
private final Pattern pattern;
|
||||
private final String[] parts;
|
||||
public ResourceObjectTokenizer(int columns) {
|
||||
this.columns = columns;
|
||||
this.pattern = Pattern.compile("^" + repeat(fieldPattern, columns) + "$", Pattern.MULTILINE | Pattern.DOTALL);
|
||||
this.parts = new String[columns];
|
||||
}
|
||||
public void tokenizeRows(String input, ResourceObjectFieldParser parser) {
|
||||
Matcher rowMatcher = rowPattern.matcher(input);
|
||||
while (rowMatcher.find()) {
|
||||
tokenizeRow(rowMatcher.group(1), parser);
|
||||
}
|
||||
}
|
||||
public void tokenizeRow(String input, ResourceObjectFieldParser parser) {
|
||||
Matcher groups = pattern.matcher(input);
|
||||
if (!groups.find()) return;
|
||||
if (groups.groupCount() < columns) return;
|
||||
for(int i = 0; i < columns; ++i) {
|
||||
parts[i] = groups.group(i + 1);
|
||||
}
|
||||
parser.matchedRow(parts);
|
||||
}
|
||||
}
|
||||
|
||||
public static class ResourceObjectArrayTokenizer {
|
||||
private static final Pattern outerPattern = Pattern.compile("^\\{(.*)\\}$", Pattern.MULTILINE | Pattern.DOTALL);
|
||||
private static final Pattern innerPattern = Pattern.compile("\\{(.*?)\\}", Pattern.MULTILINE | Pattern.DOTALL);
|
||||
|
||||
public static void tokenize(String input, ResourceObjectTokenizer objectTokenizer, ResourceObjectFieldParser parser) {
|
||||
Matcher matcher = outerPattern.matcher(input);
|
||||
if (!matcher.find()) return;
|
||||
|
||||
matcher = innerPattern.matcher(matcher.group(1));
|
||||
while (matcher.find()) {
|
||||
objectTokenizer.tokenizeRow(matcher.group(1), parser);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public interface ResourceObjectFieldParser {
|
||||
void matchedRow(String[] parts);
|
||||
}
|
||||
}
|
||||
@@ -82,8 +82,8 @@ function addExampleModelItems(model) {
|
||||
|
||||
model.quests.add({id: "testQuest", name: "Test quest", stages: [ { progress: 10, logText: "Stage 10"} , { progress: 20, logText: "Stage 20", finishesQuest: 1 } ] });
|
||||
|
||||
model.items.add({iconID: "items_weapons:0", name: "Test item", searchTag: "item0", category: 0, baseMarketCost: 51, hasEquipEffect: 1, equip_attackChance: 10, equip_attackDamage_Min: 2, equip_attackDamage_Max: 4, equip_attackCost: 4});
|
||||
model.items.add({iconID: "items_jewelry:0", name: "Ring of damage +1", searchTag: "dmg_ring1", category: 7, baseMarketCost: 62, hasEquipEffect: 1, equip_attackDamage_Min: 1, equip_attackDamage_Max: 1});
|
||||
model.items.add({id: "item0", iconID: "items_weapons:0", name: "Test item", category: 0, baseMarketCost: 51, hasEquipEffect: 1, equip_attackChance: 10, equip_attackDamage_Min: 2, equip_attackDamage_Max: 4, equip_attackCost: 4});
|
||||
model.items.add({id: "dmg_ring1", iconID: "items_jewelry:0", name: "Ring of damage +1", category: 7, baseMarketCost: 62, hasEquipEffect: 1, equip_attackDamage_Min: 1, equip_attackDamage_Max: 1});
|
||||
|
||||
model.droplists.add({id: "merchant1", items: [ { itemID: 'dmg_ring1', quantity_Min: 4, quantity_Max: 5, chance: 100 } , { itemID: 'item0', quantity_Min: 1, quantity_Max: 1, chance: 100 } ] } );
|
||||
|
||||
@@ -118,14 +118,14 @@ function startEditor() {
|
||||
})
|
||||
,items: new DataStore({
|
||||
objectTypename: 'item'
|
||||
,fieldList: new FieldList("[searchTag|iconID|name|category|displaytype|hasManualPrice|baseMarketCost|"
|
||||
,fieldList: new FieldList("[id|iconID|name|category|displaytype|hasManualPrice|baseMarketCost|"
|
||||
+ "hasEquipEffect|equip_boostMaxHP|equip_boostMaxAP|equip_moveCostPenalty|equip_attackCost|equip_attackChance|equip_criticalChance|equip_criticalMultiplier|equip_attackDamage_Min|equip_attackDamage_Max|equip_blockChance|equip_damageResistance|equip_conditions[condition|magnitude|]|"
|
||||
+ "hasUseEffect|use_boostHP_Min|use_boostHP_Max|use_boostAP_Min|use_boostAP_Max|use_conditionsSource[condition|magnitude|duration|chance|]|"
|
||||
+ "hasHitEffect|hit_boostHP_Min|hit_boostHP_Max|hit_boostAP_Min|hit_boostAP_Max|hit_conditionsSource[condition|magnitude|duration|chance|]|hit_conditionsTarget[condition|magnitude|duration|chance|]|"
|
||||
+ "hasKillEffect|kill_boostHP_Min|kill_boostHP_Max|kill_boostAP_Min|kill_boostAP_Max|kill_conditionsSource[condition|magnitude|duration|chance|]|"
|
||||
+ "];"
|
||||
)
|
||||
,idField: 'searchTag'
|
||||
,idField: 'id'
|
||||
,nameField: 'name'
|
||||
})
|
||||
,droplists: new DataStore({
|
||||
@@ -165,7 +165,7 @@ function startEditor() {
|
||||
return {name: "New Quest", id: 'new_quest' };
|
||||
});
|
||||
bindEditorType(model.items, $( "#tools #itemlist" ), createItemEditor, function() {
|
||||
return {name: "New Item", searchTag: "new_item", category: 31 };
|
||||
return {name: "New Item", id: "new_item", category: 31 };
|
||||
});
|
||||
bindEditorType(model.droplists, $( "#tools #droplist" ), createDroplistEditor, function() {
|
||||
return {id: "new_droplist" };
|
||||
|
||||
@@ -346,8 +346,8 @@
|
||||
<input class="field" type="text" size="30" id="name" class="fieldInput"/>
|
||||
</div>
|
||||
<div class="fieldWithLabel">
|
||||
<label for="tags" class="label">Internal ID:</label>
|
||||
<input class="field" type="text" size="30" id="searchTag" class="fieldInput" />
|
||||
<label for="id" class="label">Internal ID:</label>
|
||||
<input class="field" type="text" size="30" id="id" class="fieldInput" />
|
||||
</div>
|
||||
<div class="fieldWithLabel">
|
||||
<label for="category" class="label">Category:</label>
|
||||
|
||||
Reference in New Issue
Block a user