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:
oskar.wiksten
2011-09-14 17:20:45 +00:00
parent 972fff006a
commit bedc7df087
27 changed files with 747 additions and 646 deletions

View File

@@ -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|||||||||||||||||||};

View File

@@ -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||||||||||||||||||||||||||||};

View File

@@ -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||||||||||||||||||||||};

View File

@@ -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|||||||||||||||||||||||||||||||||};

View File

@@ -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|||||||||||||||||||||||};

View File

@@ -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>

View File

@@ -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) {

View File

@@ -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);

View File

@@ -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.");
}
}

View File

@@ -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);
}
}

View File

@@ -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) {

View File

@@ -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;

View File

@@ -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.");
}
}
}
}

View File

@@ -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)) {

View File

@@ -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.");
}

View File

@@ -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);
}
}
}

View File

@@ -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);

View File

@@ -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)
));
}
}

View File

@@ -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
));
}
}

View File

@@ -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_));
}
}

View File

@@ -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()]);
}
}

View File

@@ -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);
}
}

View File

@@ -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;
}
}

View File

@@ -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
));
}
}

View File

@@ -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);
}
}

View File

@@ -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" };

View File

@@ -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>