Refactor: removed integer id from item types (should use the real string id instead).

Changed some ArrayList:s in the maploader into using HashMap:s (should speed up the loading process).
Added graphical tiles for more weapons, armours, rings and amulets.

git-svn-id: https://andors-trail.googlecode.com/svn/trunk@156 08aca716-68be-ccc6-4d58-36f5abd142ac
This commit is contained in:
oskar.wiksten
2011-09-12 15:22:26 +00:00
parent d83a420be2
commit 0bc622b7a3
38 changed files with 280 additions and 326 deletions

View File

@@ -79,82 +79,86 @@ public final class R {
public static final int icon_coins=0x7f020011;
public static final int items_armours=0x7f020012;
public static final int items_armours_2=0x7f020013;
public static final int items_books=0x7f020014;
public static final int items_consumables=0x7f020015;
public static final int items_jewelry=0x7f020016;
public static final int items_misc=0x7f020017;
public static final int items_weapons=0x7f020018;
public static final int items_weapons_2=0x7f020019;
public static final int karvis_monsters1=0x7f02001a;
public static final int karvis_npc=0x7f02001b;
public static final int map_tiles_1_1=0x7f02001c;
public static final int map_tiles_1_2=0x7f02001d;
public static final int map_tiles_1_3=0x7f02001e;
public static final int map_tiles_1_4=0x7f02001f;
public static final int map_tiles_1_5=0x7f020020;
public static final int map_tiles_1_6=0x7f020021;
public static final int map_tiles_1_7=0x7f020022;
public static final int map_tiles_1_8=0x7f020023;
public static final int map_tiles_2_1=0x7f020024;
public static final int map_tiles_2_2=0x7f020025;
public static final int map_tiles_2_3=0x7f020026;
public static final int map_tiles_2_4=0x7f020027;
public static final int map_tiles_2_5=0x7f020028;
public static final int map_tiles_2_6=0x7f020029;
public static final int map_tiles_2_7=0x7f02002a;
public static final int map_tiles_2_8=0x7f02002b;
public static final int monsters_armor1=0x7f02002c;
public static final int monsters_cyclops=0x7f02002d;
public static final int monsters_demon1=0x7f02002e;
public static final int monsters_dogs=0x7f02002f;
public static final int monsters_dragon1=0x7f020030;
public static final int monsters_eye1=0x7f020031;
public static final int monsters_eye2=0x7f020032;
public static final int monsters_eye3=0x7f020033;
public static final int monsters_eye4=0x7f020034;
public static final int monsters_ghost1=0x7f020035;
public static final int monsters_hydra1=0x7f020036;
public static final int monsters_insects=0x7f020037;
public static final int monsters_liches=0x7f020038;
public static final int monsters_mage=0x7f020039;
public static final int monsters_mage2=0x7f02003a;
public static final int monsters_man1=0x7f02003b;
public static final int monsters_men=0x7f02003c;
public static final int monsters_men2=0x7f02003d;
public static final int monsters_misc=0x7f02003e;
public static final int monsters_rats=0x7f02003f;
public static final int monsters_redshrike1=0x7f020040;
public static final int monsters_rltiles1=0x7f020041;
public static final int monsters_rltiles2=0x7f020042;
public static final int monsters_rogue1=0x7f020043;
public static final int monsters_skeleton1=0x7f020044;
public static final int monsters_skeleton2=0x7f020045;
public static final int monsters_snakes=0x7f020046;
public static final int monsters_warrior1=0x7f020047;
public static final int monsters_wraiths=0x7f020048;
public static final int monsters_zombie1=0x7f020049;
public static final int monsters_zombie2=0x7f02004a;
public static final int ui_bar_background=0x7f02004b;
public static final int ui_blue_foreground=0x7f02004c;
public static final int ui_boxshape=0x7f02004d;
public static final int ui_debug_background=0x7f02004e;
public static final int ui_dpad=0x7f02004f;
public static final int ui_gradientshape=0x7f020050;
public static final int ui_gradientshape_translucent=0x7f020051;
public static final int ui_green_foreground=0x7f020052;
public static final int ui_icon_equipment=0x7f020053;
public static final int ui_icon_quest=0x7f020054;
public static final int ui_icon_skill=0x7f020055;
public static final int ui_progress_ap=0x7f020056;
public static final int ui_progress_exp=0x7f020057;
public static final int ui_progress_health=0x7f020058;
public static final int ui_purple_foreground=0x7f020059;
public static final int ui_quickslots=0x7f02005a;
public static final int ui_red_foreground=0x7f02005b;
public static final int ui_selections=0x7f02005c;
public static final int ui_startbackground=0x7f02005d;
public static final int ui_statustext=0x7f02005e;
public static final int ui_yellow_foreground=0x7f02005f;
public static final int items_armours_3=0x7f020014;
public static final int items_books=0x7f020015;
public static final int items_consumables=0x7f020016;
public static final int items_jewelry=0x7f020017;
public static final int items_misc=0x7f020018;
public static final int items_necklaces_1=0x7f020019;
public static final int items_rings_1=0x7f02001a;
public static final int items_weapons=0x7f02001b;
public static final int items_weapons_2=0x7f02001c;
public static final int items_weapons_3=0x7f02001d;
public static final int karvis_monsters1=0x7f02001e;
public static final int karvis_npc=0x7f02001f;
public static final int map_tiles_1_1=0x7f020020;
public static final int map_tiles_1_2=0x7f020021;
public static final int map_tiles_1_3=0x7f020022;
public static final int map_tiles_1_4=0x7f020023;
public static final int map_tiles_1_5=0x7f020024;
public static final int map_tiles_1_6=0x7f020025;
public static final int map_tiles_1_7=0x7f020026;
public static final int map_tiles_1_8=0x7f020027;
public static final int map_tiles_2_1=0x7f020028;
public static final int map_tiles_2_2=0x7f020029;
public static final int map_tiles_2_3=0x7f02002a;
public static final int map_tiles_2_4=0x7f02002b;
public static final int map_tiles_2_5=0x7f02002c;
public static final int map_tiles_2_6=0x7f02002d;
public static final int map_tiles_2_7=0x7f02002e;
public static final int map_tiles_2_8=0x7f02002f;
public static final int monsters_armor1=0x7f020030;
public static final int monsters_cyclops=0x7f020031;
public static final int monsters_demon1=0x7f020032;
public static final int monsters_dogs=0x7f020033;
public static final int monsters_dragon1=0x7f020034;
public static final int monsters_eye1=0x7f020035;
public static final int monsters_eye2=0x7f020036;
public static final int monsters_eye3=0x7f020037;
public static final int monsters_eye4=0x7f020038;
public static final int monsters_ghost1=0x7f020039;
public static final int monsters_hydra1=0x7f02003a;
public static final int monsters_insects=0x7f02003b;
public static final int monsters_liches=0x7f02003c;
public static final int monsters_mage=0x7f02003d;
public static final int monsters_mage2=0x7f02003e;
public static final int monsters_man1=0x7f02003f;
public static final int monsters_men=0x7f020040;
public static final int monsters_men2=0x7f020041;
public static final int monsters_misc=0x7f020042;
public static final int monsters_rats=0x7f020043;
public static final int monsters_redshrike1=0x7f020044;
public static final int monsters_rltiles1=0x7f020045;
public static final int monsters_rltiles2=0x7f020046;
public static final int monsters_rogue1=0x7f020047;
public static final int monsters_skeleton1=0x7f020048;
public static final int monsters_skeleton2=0x7f020049;
public static final int monsters_snakes=0x7f02004a;
public static final int monsters_warrior1=0x7f02004b;
public static final int monsters_wraiths=0x7f02004c;
public static final int monsters_zombie1=0x7f02004d;
public static final int monsters_zombie2=0x7f02004e;
public static final int ui_bar_background=0x7f02004f;
public static final int ui_blue_foreground=0x7f020050;
public static final int ui_boxshape=0x7f020051;
public static final int ui_debug_background=0x7f020052;
public static final int ui_dpad=0x7f020053;
public static final int ui_gradientshape=0x7f020054;
public static final int ui_gradientshape_translucent=0x7f020055;
public static final int ui_green_foreground=0x7f020056;
public static final int ui_icon_equipment=0x7f020057;
public static final int ui_icon_quest=0x7f020058;
public static final int ui_icon_skill=0x7f020059;
public static final int ui_progress_ap=0x7f02005a;
public static final int ui_progress_exp=0x7f02005b;
public static final int ui_progress_health=0x7f02005c;
public static final int ui_purple_foreground=0x7f02005d;
public static final int ui_quickslots=0x7f02005e;
public static final int ui_red_foreground=0x7f02005f;
public static final int ui_selections=0x7f020060;
public static final int ui_startbackground=0x7f020061;
public static final int ui_statustext=0x7f020062;
public static final int ui_yellow_foreground=0x7f020063;
}
public static final class id {
public static final int abilitymodifierinfo_change_maxap=0x7f090005;

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 72 KiB

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

View File

@@ -8,11 +8,11 @@
<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|]|];
{club1|items_weapons:56|Holzknüppel|0|||7|1||||5|10|||0|1|||||||||||||||||||||||};
{club3|items_weapons:58|Eisenknüppel|0|||253|1||||6|5|||2|7|||||||||||||||||||||||};
{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|||||||||||||||||||||||};
{hammer0|items_weapons:59|Eisenhammer|0|||12|1||||5|10|||0|1|||||||||||||||||||||||};
{hammer1|items_weapons:59|Riesenhammer|0|||121|1||||10|5|||4|7|||||||||||||||||||||||};
{hammer0|items_weapons:45|Eisenhammer|0|||12|1||||5|10|||0|1|||||||||||||||||||||||};
{hammer1|items_weapons:45|Riesenhammer|0|||121|1||||10|5|||4|7|||||||||||||||||||||||};
{dagger0|items_weapons:14|Eisendolch|0|||12|1||||5|10|||0|1|||||||||||||||||||||||};
{dagger1|items_weapons:14|Scharfer Eisendolch|0|||53|1||||4|20|||1|2|||||||||||||||||||||||};
{dagger2|items_weapons:14|Edler Eisendolch|0|||70|1||||4|25|||1|2|||||||||||||||||||||||};
@@ -22,8 +22,8 @@
{broadsword1|items_weapons:5|Eisenbreitschwert|0|||251|1||||7|2|||1|10|||||||||||||||||||||||};
{broadsword2|items_weapons:6|Stahlbreitschwert|0|||582|1||||6|15|||3|10|||||||||||||||||||||||};
{steelsword1|items_weapons:7|Stahlschwert|0|||874|1||||4|24|||3|7|||||||||||||||||||||||};
{axe1|items_weapons:70|Holzfälleraxt|0|||24|1||||5|5|||1|3|||||||||||||||||||||||};
{axe2|items_weapons:70|Eisenaxt|0|||312|1||||6|5|||2|5|||||||||||||||||||||||};
{axe1|items_weapons:56|Holzfälleraxt|0|||24|1||||5|5|||1|3|||||||||||||||||||||||};
{axe2|items_weapons:56|Eisenaxt|0|||312|1||||6|5|||2|5|||||||||||||||||||||||};
{quickdagger1|items_weapons:14|Schnellstoßdolch|0|4||512|1||||3|20|||0|0|-20||||||||||||||||||||||};
</string>
@@ -163,12 +163,12 @@
{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||||||||||||||||||||||};
{sleepingmead|items_consumables:51|Fleisch mit Schlafmittel|31|1|1|0|||||||||||||||||||||||||||||||||};
{sleepingmead|items_consumables:51|Schlafmet|31|1|1|0|||||||||||||||||||||||||||||||||};
{ffguard_qitem|items_jewelry:0|Ring der Feygard Patrouille|31|1|1|0|||||||||||||||||||||||||||||||||};
{shield6|items_armours:3|Turmschild aus Holz|1|||952|1|||||-6|||||12||||||||||||||||||||||};
{shield7|items_armours:3|Turmschild aus Hartholz|1|||1538|1|||||-6|||||14||||||||||||||||||||||};
{club_wood1|items_weapons:58|Schwerer Eisenknüppel|0|||950|1||||8|15|5|3|2|11|||||||||||||||||||||||};
{club_wood2|items_weapons:58|Kriegseisenknüppel|0|||2194|1||||7|10|10|3|2|11|||||||||||||||||||||||};
{club_wood1|items_weapons:44|Schwerer Eisenknüppel|0|||950|1||||8|15|5|3|2|11|||||||||||||||||||||||};
{club_wood2|items_weapons:44|Kriegseisenknüppel|0|||2194|1||||7|10|10|3|2|11|||||||||||||||||||||||};
{gloves_grip|items_armours:35|Handschuhe der besseren Haftung|4|||471|1|||||9|||||1||||||||||||||||||||||};
{gloves_fancy|items_armours:35|Modische Handschuhe|4|||78|1|||||5|||||||||||||||||||||||||||};
{ring_crit1|items_jewelry:0|Schlagring|7|4||2921|1||||||5||||||||||||||||||||||||||};
@@ -179,11 +179,11 @@
<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|]|];
{rapier_lifesteal|items_weapons:99|Vampirdegen|0|2|1|0|1|5|||5|21|||1|6||||||||||1|0|3|||||1|3|3||||};
{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:98|Elytharanischer Erlöser|0|2|1|0|1||2||5|25|||3|8|5||{{bless|1|}}|0|||||||||||||||||||};
{clouded_rage|items_weapons:99|Raserei der Schatten|0|3|1|0|1||||5|21|||3|6|5|||0|||||||||||||1|||||{{rage_minor|1|1|50|}}|};
{shadow_slayer|items_weapons:74|Schatten des Mörders|0|3|1|0|1||2||7|25|10|2|5|9|||||||||||||||||1|1|1||||};
{elytharan_redeemer|items_weapons:70|Elytharanischer Erlöser|0|2|1|0|1||2||5|25|||3|8|5||{{bless|1|}}|0|||||||||||||||||||};
{clouded_rage|items_weapons:71|Raserei der Schatten|0|3|1|0|1||||5|21|||3|6|5|||0|||||||||||||1|||||{{rage_minor|1|1|50|}}|};
{shadow_slayer|items_weapons:60|Schatten des Mörders|0|3|1|0|1||2||7|25|10|2|5|9|||||||||||||||||1|1|1||||};
{ring_shadow_embrace|items_jewelry:0|Umarmung der Schatten|7|3|1|0|1|20||||10|||2|2|||||||||||||||||||||||};
@@ -194,9 +194,9 @@
{bwm_leather_cap|items_armours:24|Blackwater Lederkappe|2|4|1|722|1|5|||||||||21||{{blackwater_misery|1|}}||||||||||||||||||||};
{bwm_combat_ring|items_jewelry:2|Blackwater Kampfring|7|4|1|595|1|||||5|||0|7|||{{blackwater_misery|1|}}||||||||||||||||||||};
{bwm_brew|items_consumables:51|Blackwater Bräu|20||1|57||||||||||||||1|15|15|||{{intoxicated|1|10|100|}}||||||||||||||};
{woodcutter_hatchet|items_weapons:71|Holzfällerbeil|0|||0|1||||6|9|||6|12|||||||||||||||||||||||};
{woodcutter_hatchet|items_weapons:57|Holzfällerbeil|0|||0|1||||6|9|||6|12|||||||||||||||||||||||};
{woodcutter_boots|items_armours:30|Holzfällerstiefel|5|||873|1|1||||3|||||8||||||||||||||||||||||};
{heavy_club|items_weapons:58|Schwerer Knüppel|0|||1229|1||||7|15|5|3|2|15|||||||||||||||||||||||};
{heavy_club|items_weapons:44|Schwerer Knüppel|0|||1229|1||||7|15|5|3|2|15|||||||||||||||||||||||};
{pot_speed_1|items_consumables:41|Kleiner Trank der Geschwindigkeit|20||1|261||||||||||||||1|||||{{speed_minor|1|5|100|}}||||||||||||||};
{pot_poison_weak|items_consumables:40|Schwaches Gift|20||1|125||||||||||||||1|||||{{poison_weak|1|5|100|}}||||||||||||||};

View File

@@ -203,7 +203,7 @@
<string name="dialog_newversion_title">Willkommen</string>
<string name="dialog_newversion_message">
Viele Dank, dass Du Andor\'s Trail heruntergeladen hast!\n\n
Vielen Dank, dass Du Andor\'s Trail heruntergeladen hast!\n\n
Bedenke bitte, dass diese Version von Andor\'s Trail noch IN DER ENTWICKLUNG ist und somit noch nicht alle Karten komplett fertig sind.\n
Es steht dir frei, alle bestehenden Städte und Dungeons ausgiebig zu erforschen.\n
Diese Entwicklungsversion kann Fehler enthalten und das Spiel ist noch nicht gut ausbalanciert. Mit dieser Programmversion sollen Fehler aufgespürt werden, bevor weitere Inhalte hinzugefügt werden.\n

View File

@@ -7,11 +7,11 @@
<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|]|];
{club1|items_weapons:56|Massue en bois|0|||7|1||||5|10|||0|1|||||||||||||||||||||||};
{club3|items_weapons:58|Bâton en fer|0|||253|1||||6|5|||2|7|||||||||||||||||||||||};
{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|||||||||||||||||||||||};
{hammer0|items_weapons:59|Marteau en fer|0|||12|1||||5|10|||0|1|||||||||||||||||||||||};
{hammer1|items_weapons:59|Marteau géant|0|||121|1||||10|5|||4|7|||||||||||||||||||||||};
{hammer0|items_weapons:45|Marteau en fer|0|||12|1||||5|10|||0|1|||||||||||||||||||||||};
{hammer1|items_weapons:45|Marteau géant|0|||121|1||||10|5|||4|7|||||||||||||||||||||||};
{dagger0|items_weapons:14|Dague en fer|0|||12|1||||5|10|||0|1|||||||||||||||||||||||};
{dagger1|items_weapons:14|Dague en fer effilé|0|||53|1||||4|20|||1|2|||||||||||||||||||||||};
{dagger2|items_weapons:14|Dague en fer supérieure|0|||70|1||||4|25|||1|2|||||||||||||||||||||||};
@@ -21,8 +21,8 @@
{broadsword1|items_weapons:5|Glaive en fer|0|||251|1||||7|2|||1|10|||||||||||||||||||||||};
{broadsword2|items_weapons:6|Glaive en acier|0|||582|1||||6|15|||3|10|||||||||||||||||||||||};
{steelsword1|items_weapons:7|Épée en acier|0|||874|1||||4|24|||3|7|||||||||||||||||||||||};
{axe1|items_weapons:70|Hache de bûcheron|0|||24|1||||5|5|||1|3|||||||||||||||||||||||};
{axe2|items_weapons:70|Hache en fer|0|||312|1||||6|5|||2|5|||||||||||||||||||||||};
{axe1|items_weapons:56|Hache de bûcheron|0|||24|1||||5|5|||1|3|||||||||||||||||||||||};
{axe2|items_weapons:56|Hache en fer|0|||312|1||||6|5|||2|5|||||||||||||||||||||||};
{quickdagger1|items_weapons:14|Poignard d\'attaque rapide|0|4||512|1||||3|20|||0|0|-20||||||||||||||||||||||};
</string>
@@ -166,8 +166,8 @@
{ffguard_qitem|items_jewelry:0|Bague de la patrouille de Feygard|31|1|1|0|||||||||||||||||||||||||||||||||};
{shield6|items_armours:3|Pavois en bois|1|||952|1|||||-6|||||12||||||||||||||||||||||};
{shield7|items_armours:3|Pavois en bois épais|1|||1538|1|||||-6|||||14||||||||||||||||||||||};
{club_wood1|items_weapons:58|Bâton lourd en acier|0|||950|1||||8|15|5|3|2|11|||||||||||||||||||||||};
{club_wood2|items_weapons:58|Bâton en acier lourd équilibré|0|||2194|1||||7|10|10|3|2|11|||||||||||||||||||||||};
{club_wood1|items_weapons:44|Bâton lourd en acier|0|||950|1||||8|15|5|3|2|11|||||||||||||||||||||||};
{club_wood2|items_weapons:44|Bâton en acier lourd équilibré|0|||2194|1||||7|10|10|3|2|11|||||||||||||||||||||||};
{gloves_grip|items_armours:35|Gant de prise assurée|4|||471|1|||||9|||||1||||||||||||||||||||||};
{gloves_fancy|items_armours:35|Gants fantaisistes|4|||78|1|||||5|||||||||||||||||||||||||||};
{ring_crit1|items_jewelry:0|Anneau d\'attaque|7|4||2921|1||||||5||||||||||||||||||||||||||};
@@ -178,11 +178,11 @@
<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|]|];
{rapier_lifesteal|items_weapons:99|Rapière voleuse de vie|0|2|1|0|1|5|||5|21|||1|6||||||||||1|0|3|||||1|3|3||||};
{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:98|Rédempteur d\'Elytharan|0|2|1|0|1||2||5|25|||3|8|5||{{bless|1|}}|0|||||||||||||||||||};
{clouded_rage|items_weapons:99|Épée de la rage de l\'Ombre|0|3|1|0|1||||5|21|||3|6|5|||0|||||||||||||1|||||{{rage_minor|1|1|50|}}|};
{shadow_slayer|items_weapons:74|Ombre du tueur|0|3|1|0|1||2||7|25|10|2|5|9|||||||||||||||||1|1|1||||};
{elytharan_redeemer|items_weapons:70|Rédempteur d\'Elytharan|0|2|1|0|1||2||5|25|||3|8|5||{{bless|1|}}|0|||||||||||||||||||};
{clouded_rage|items_weapons:71|Épée de la rage de l\'Ombre|0|3|1|0|1||||5|21|||3|6|5|||0|||||||||||||1|||||{{rage_minor|1|1|50|}}|};
{shadow_slayer|items_weapons:60|Ombre du tueur|0|3|1|0|1||2||7|25|10|2|5|9|||||||||||||||||1|1|1||||};
{ring_shadow_embrace|items_jewelry:0|Anneau de l\'étreinte de l\'Ombre|7|3|1|0|1|20||||10|||2|2|||||||||||||||||||||||};
@@ -193,9 +193,9 @@
{bwm_leather_cap|items_armours:24|Casquette en cuir de Blackwater|2|4|1|722|1|5|||||||||21||{{blackwater_misery|1|}}||||||||||||||||||||};
{bwm_combat_ring|items_jewelry:2|Anneau de combat de Blackwater|7|4|1|595|1|||||5|||0|7|||{{blackwater_misery|1|}}||||||||||||||||||||};
{bwm_brew|items_consumables:51|Infusion de Blackwater|20||1|57||||||||||||||1|15|15|||{{intoxicated|1|10|100|}}||||||||||||||};
{woodcutter_hatchet|items_weapons:71|Hachette du bûcheron|0|||0|1||||6|9|||6|12|||||||||||||||||||||||};
{woodcutter_hatchet|items_weapons:57|Hachette du bûcheron|0|||0|1||||6|9|||6|12|||||||||||||||||||||||};
{woodcutter_boots|items_armours:30|Bottes du bûcheron|5|||873|1|1||||3|||||8||||||||||||||||||||||};
{heavy_club|items_weapons:58|Bâton lourd|0|||1229|1||||7|15|5|3|2|15|||||||||||||||||||||||};
{heavy_club|items_weapons:44|Bâton lourd|0|||1229|1||||7|15|5|3|2|15|||||||||||||||||||||||};
{pot_speed_1|items_consumables:41|Potion mineure de rapidité|20||1|261||||||||||||||1|||||{{speed_minor|1|5|100|}}||||||||||||||};
{pot_poison_weak|items_consumables:40|Poison faible|20||1|125||||||||||||||1|||||{{poison_weak|1|5|100|}}||||||||||||||};

View File

@@ -8,11 +8,11 @@
<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|]|];
{club1|items_weapons:56|Clava|0|||7|1||||5|10|||0|1|||||||||||||||||||||||};
{club3|items_weapons:58|Mazza di ferro|0|||253|1||||6|5|||2|7|||||||||||||||||||||||};
{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|||||||||||||||||||||||};
{hammer0|items_weapons:59|Martello di ferro|0|||12|1||||5|10|||0|1|||||||||||||||||||||||};
{hammer1|items_weapons:59|Martellone|0|||121|1||||10|5|||4|7|||||||||||||||||||||||};
{hammer0|items_weapons:45|Martello di ferro|0|||12|1||||5|10|||0|1|||||||||||||||||||||||};
{hammer1|items_weapons:45|Martellone|0|||121|1||||10|5|||4|7|||||||||||||||||||||||};
{dagger0|items_weapons:14|Pugnale di ferro|0|||12|1||||5|10|||0|1|||||||||||||||||||||||};
{dagger1|items_weapons:14|Puganle di ferro affilato|0|||53|1||||4|20|||1|2|||||||||||||||||||||||};
{dagger2|items_weapons:14|Pugnale di ferro migliorato|0|||70|1||||4|25|||1|2|||||||||||||||||||||||};
@@ -22,8 +22,8 @@
{broadsword1|items_weapons:5|Spadone di ferro|0|||251|1||||7|2|||1|10|||||||||||||||||||||||};
{broadsword2|items_weapons:6|Spadone di acciaio|0|||582|1||||6|15|||3|10|||||||||||||||||||||||};
{steelsword1|items_weapons:7|Spada di acciaio|0|||874|1||||4|24|||3|7|||||||||||||||||||||||};
{axe1|items_weapons:70|Accetta|0|||24|1||||5|5|||1|3|||||||||||||||||||||||};
{axe2|items_weapons:70|Ascia di ferro|0|||312|1||||6|5|||2|5|||||||||||||||||||||||};
{axe1|items_weapons:56|Accetta|0|||24|1||||5|5|||1|3|||||||||||||||||||||||};
{axe2|items_weapons:56|Ascia di ferro|0|||312|1||||6|5|||2|5|||||||||||||||||||||||};
{quickdagger1|items_weapons:14|Pugnale del colpo rapido|0|4||512|1||||3|20|||0|0|-20||||||||||||||||||||||};
</string>
@@ -167,8 +167,8 @@
{ffguard_qitem|items_jewelry:0|Anello pattuglia di Feygard|31|1|1|0|||||||||||||||||||||||||||||||||};
{shield6|items_armours:3|Scudo a torre di legno|1|||952|1|||||-6|||||12||||||||||||||||||||||};
{shield7|items_armours:3|Scudo a torre di legno rinforzato|1|||1538|1|||||-6|||||14||||||||||||||||||||||};
{club_wood1|items_weapons:58|Mazza pesante di ferro |0|||950|1||||8|15|5|3|2|11|||||||||||||||||||||||};
{club_wood2|items_weapons:58|Mazza pesante di ferro bilanciata|0|||2194|1||||7|10|10|3|2|11|||||||||||||||||||||||};
{club_wood1|items_weapons:44|Mazza pesante di ferro |0|||950|1||||8|15|5|3|2|11|||||||||||||||||||||||};
{club_wood2|items_weapons:44|Mazza pesante di ferro bilanciata|0|||2194|1||||7|10|10|3|2|11|||||||||||||||||||||||};
{gloves_grip|items_armours:35|Guanti dalla presa migliorata|4|||471|1|||||9|||||1||||||||||||||||||||||};
{gloves_fancy|items_armours:35|Guanti bizzarri|4|||78|1|||||5|||||||||||||||||||||||||||};
{ring_crit1|items_jewelry:0|Anello del colpo|7|4||2921|1||||||5||||||||||||||||||||||||||};

View File

@@ -8,11 +8,11 @@
<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|]|];
{club1|items_weapons:56|Деревянная дубина|0|||7|1||||5|10|||0|1|||||||||||||||||||||||};
{club3|items_weapons:58|Палица|0|||253|1||||6|5|||2|7|||||||||||||||||||||||};
{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|||||||||||||||||||||||};
{hammer0|items_weapons:59|Железный молот|0|||12|1||||5|10|||0|1|||||||||||||||||||||||};
{hammer1|items_weapons:59|Большой молот|0|||121|1||||10|5|||4|7|||||||||||||||||||||||};
{hammer0|items_weapons:45|Железный молот|0|||12|1||||5|10|||0|1|||||||||||||||||||||||};
{hammer1|items_weapons:45|Большой молот|0|||121|1||||10|5|||4|7|||||||||||||||||||||||};
{dagger0|items_weapons:14|Железный кинжал|0|||12|1||||5|10|||0|1|||||||||||||||||||||||};
{dagger1|items_weapons:14|Острый железный кинжал|0|||53|1||||4|20|||1|2|||||||||||||||||||||||};
{dagger2|items_weapons:14|Превосходный железный кинжал|0|||70|1||||4|25|||1|2|||||||||||||||||||||||};
@@ -22,8 +22,8 @@
{broadsword1|items_weapons:5|Железный палаш|0|||251|1||||7|2|||1|10|||||||||||||||||||||||};
{broadsword2|items_weapons:6|Стальной палаш|0|||582|1||||6|15|||3|10|||||||||||||||||||||||};
{steelsword1|items_weapons:7|Стальной меч|0|||874|1||||4|24|||3|7|||||||||||||||||||||||};
{axe1|items_weapons:70|Топор дровосека|0|||24|1||||5|5|||1|3|||||||||||||||||||||||};
{axe2|items_weapons:70|Железный топор|0|||312|1||||6|5|||2|5|||||||||||||||||||||||};
{axe1|items_weapons:56|Топор дровосека|0|||24|1||||5|5|||1|3|||||||||||||||||||||||};
{axe2|items_weapons:56|Железный топор|0|||312|1||||6|5|||2|5|||||||||||||||||||||||};
{quickdagger1|items_weapons:14|Шустрый кинжал|0|4||512|1||||3|20|||0|0|-20||||||||||||||||||||||};
</string>

View File

@@ -299,8 +299,8 @@
{health_major2|10|10|100|}
{milk|10|10|100|}
{rat_tail|5|5|100|}
{Radish|5|5|100|}
{Strawberry|5|5|100|}
{radish|5|5|100|}
{strawberry|5|5|100|}
}|};
{shop_prim_armorer|{

View File

@@ -8,11 +8,11 @@
<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|]|];
{club1|items_weapons:56|Wooden club|0|||7|1||||5|10|||0|1|||||||||||||||||||||||};
{club3|items_weapons:58|Iron club|0|||253|1||||6|5|||2|7|||||||||||||||||||||||};
{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|||||||||||||||||||||||};
{hammer0|items_weapons:59|Iron hammer|0|||12|1||||5|10|||0|1|||||||||||||||||||||||};
{hammer1|items_weapons:59|Giant hammer|0|||121|1||||10|5|||4|7|||||||||||||||||||||||};
{hammer0|items_weapons:45|Iron hammer|0|||12|1||||5|10|||0|1|||||||||||||||||||||||};
{hammer1|items_weapons:45|Giant hammer|0|||121|1||||10|5|||4|7|||||||||||||||||||||||};
{dagger0|items_weapons:14|Iron dagger|0|||12|1||||5|10|||0|1|||||||||||||||||||||||};
{dagger1|items_weapons:14|Sharp iron dagger|0|||53|1||||4|20|||1|2|||||||||||||||||||||||};
{dagger2|items_weapons:14|Superior iron dagger|0|||70|1||||4|25|||1|2|||||||||||||||||||||||};
@@ -22,8 +22,8 @@
{broadsword1|items_weapons:5|Iron broadsword|0|||251|1||||7|2|||1|10|||||||||||||||||||||||};
{broadsword2|items_weapons:6|Steel broadsword|0|||582|1||||6|15|||3|10|||||||||||||||||||||||};
{steelsword1|items_weapons:7|Steel sword|0|||874|1||||4|24|||3|7|||||||||||||||||||||||};
{axe1|items_weapons:70|Woodcutter axe|0|||24|1||||5|5|||1|3|||||||||||||||||||||||};
{axe2|items_weapons:70|Iron axe|0|||312|1||||6|5|||2|5|||||||||||||||||||||||};
{axe1|items_weapons:56|Woodcutter axe|0|||24|1||||5|5|||1|3|||||||||||||||||||||||};
{axe2|items_weapons:56|Iron axe|0|||312|1||||6|5|||2|5|||||||||||||||||||||||};
{quickdagger1|items_weapons:14|Quickstrike dagger|0|4||512|1||||3|20|||0|0|-20||||||||||||||||||||||};
</string>
@@ -167,8 +167,8 @@
{ffguard_qitem|items_jewelry:0|Feygard patrol ring|31|1|1|0|||||||||||||||||||||||||||||||||};
{shield6|items_armours:3|Wooden tower shield|1|||952|1|||||-6|||||12||||||||||||||||||||||};
{shield7|items_armours:3|Strong wooden tower shield|1|||1538|1|||||-6|||||14||||||||||||||||||||||};
{club_wood1|items_weapons:58|Heavy iron club|0|||950|1||||8|15|5|3|2|11|||||||||||||||||||||||};
{club_wood2|items_weapons:58|Balanced heavy iron club|0|||2194|1||||7|10|10|3|2|11|||||||||||||||||||||||};
{club_wood1|items_weapons:44|Heavy iron club|0|||950|1||||8|15|5|3|2|11|||||||||||||||||||||||};
{club_wood2|items_weapons:44|Balanced heavy iron club|0|||2194|1||||7|10|10|3|2|11|||||||||||||||||||||||};
{gloves_grip|items_armours:35|Gloves of better grip|4|||471|1|||||9|||||1||||||||||||||||||||||};
{gloves_fancy|items_armours:35|Fancy gloves|4|||78|1|||||5|||||||||||||||||||||||||||};
{ring_crit1|items_jewelry:0|Ring of strike|7|4||2921|1||||||5||||||||||||||||||||||||||};
@@ -179,11 +179,11 @@
<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|]|];
{rapier_lifesteal|items_weapons:99|Rapier of lifesteal|0|2|1|0|1|5|||5|21|||1|6||||||||||1|0|3|||||1|3|3||||};
{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:98|Elytharan redeemer|0|2|1|0|1||2||5|25|||3|8|5||{{bless|1|}}|0|||||||||||||||||||};
{clouded_rage|items_weapons:99|Sword of Shadow\'s rage|0|3|1|0|1||||5|21|||3|6|5|||0|||||||||||||1|||||{{rage_minor|1|1|50|}}|};
{shadow_slayer|items_weapons:74|Shadow of the slayer|0|3|1|0|1||2||7|25|10|2|5|9|||||||||||||||||1|1|1||||};
{elytharan_redeemer|items_weapons:70|Elytharan redeemer|0|2|1|0|1||2||5|25|||3|8|5||{{bless|1|}}|0|||||||||||||||||||};
{clouded_rage|items_weapons:71|Sword of Shadow\'s rage|0|3|1|0|1||||5|21|||3|6|5|||0|||||||||||||1|||||{{rage_minor|1|1|50|}}|};
{shadow_slayer|items_weapons:60|Shadow of the slayer|0|3|1|0|1||2||7|25|10|2|5|9|||||||||||||||||1|1|1||||};
{ring_shadow_embrace|items_jewelry:0|Ring of Shadow embrace|7|3|1|0|1|20||||10|||2|2|||||||||||||||||||||||};
@@ -194,9 +194,9 @@
{bwm_leather_cap|items_armours:24|Blackwater leather cap|2|4|1|722|1|5|||||||||21||{{blackwater_misery|1|}}||||||||||||||||||||};
{bwm_combat_ring|items_jewelry:2|Blackwater ring of combat|7|4|1|595|1|||||5|||0|7|||{{blackwater_misery|1|}}||||||||||||||||||||};
{bwm_brew|items_consumables:51|Blackwater brew|20||1|57||||||||||||||1|15|15|||{{intoxicated|1|10|100|}}||||||||||||||};
{woodcutter_hatchet|items_weapons:71|Woodcutter\'s hatchet|0|||0|1||||6|9|||6|12|||||||||||||||||||||||};
{woodcutter_hatchet|items_weapons:57|Woodcutter\'s hatchet|0|||0|1||||6|9|||6|12|||||||||||||||||||||||};
{woodcutter_boots|items_armours:30|Woodcutter\'s boots|5|||873|1|1||||3|||||8||||||||||||||||||||||};
{heavy_club|items_weapons:58|Heavy club|0|||1229|1||||7|15|5|3|2|15|||||||||||||||||||||||};
{heavy_club|items_weapons:44|Heavy club|0|||1229|1||||7|15|5|3|2|15|||||||||||||||||||||||};
{pot_speed_1|items_consumables:41|Minor potion of speed|20||1|261||||||||||||||1|||||{{speed_minor|1|5|100|}}||||||||||||||};
{pot_poison_weak|items_consumables:40|Weak poison|20||1|125||||||||||||||1|||||{{poison_weak|1|5|100|}}||||||||||||||};
@@ -228,8 +228,8 @@
[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|]|];
{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:56|Fine wooden club|0||0|245|1||||5|12|||0|7|||||||||||||||||||||||};
{axe_fine_iron|items_weapons:70|Fine iron axe|0||0|365|1||||6|9|||4|6|||||||||||||||||||||||};
{club_fine_wooden|items_weapons:42|Fine wooden club|0||0|245|1||||5|12|||0|7|||||||||||||||||||||||};
{axe_fine_iron|items_weapons:56|Fine iron axe|0||0|365|1||||6|9|||4|6|||||||||||||||||||||||};
{longsword_hard_iron|items_weapons:1|Hardened iron longsword|0||0|362|1||||5|14|||2|6|||||||||||||||||||||||};
{broadsword_fine_iron|items_weapons:5|Fine iron broadsword|0||0|422|1||||7|5|||4|10|||||||||||||||||||||||};
{dagger_sharp_steel|items_weapons:14|Sharp steel dagger|0||0|1428|1||||4|24|||2|4|||||||||||||||||||||||};
@@ -239,9 +239,9 @@
{sword_villains|items_weapons:16|Villain\'s blade|0||0|1665|1||||4|20|5|3|1|2|||||||||||||||||||||||};
{sword_challengers|items_weapons:1|Challenger\'s iron sword|0||0|785|1||||5|20|||2|6|||||||||||||||||||||||};
{sword_fencing|items_weapons:13|Fencing blade|0||0|922|1||||4|14|||2|5|5||||||||||||||||||||||};
{club_brutal|items_weapons:58|Brutal club|0||0|2522|1||||7|20|5|3|2|21|||||||||||||||||||||||};
{axe_gutsplitter|items_weapons:72|Gutsplitter|0||0|2733|1||||6|21|||7|17|||||||||||||||||||||||};
{hammer_skullcrusher|items_weapons:59|Skullcrusher|0||0|3142|1||||7|20|5|3|0|26|||||||||||||||||||||||};
{club_brutal|items_weapons:44|Brutal club|0||0|2522|1||||7|20|5|3|2|21|||||||||||||||||||||||};
{axe_gutsplitter|items_weapons:58|Gutsplitter|0||0|2733|1||||6|21|||7|17|||||||||||||||||||||||};
{hammer_skullcrusher|items_weapons:45|Skullcrusher|0||0|3142|1||||7|20|5|3|0|26|||||||||||||||||||||||};
{shield_crude_wooden|items_armours:0|Crude wooden buckler|1||0|31|1||||||||||1||||||||||||||||||||||};
{shield_cracked_wooden|items_armours:0|Cracked wooden buckler|1||0|34|1|||||-2|||||2||||||||||||||||||||||};
{shield_wooden_buckler|items_armours:0|Second-hand wooden buckler|1||0|92|1|||||-2|||||3||||||||||||||||||||||};

View File

@@ -156,7 +156,8 @@ public final class Dialogs {
itemList.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
final int itemTypeID = (int) id;
final String itemTypeID = ((ItemContainerAdapter) parent.getAdapter()).getItem(position).itemType.id;
combinedLoot.items.removeItem(itemTypeID);
for (Loot l : lootBags) {
if (l.items.removeItem(itemTypeID)) break;
@@ -195,7 +196,7 @@ public final class Dialogs {
});
}
public static void showItemInfo(final Activity currentActivity, int itemTypeID, int actionType, String buttonText, boolean buttonEnabled, int inventorySlot) {
public static void showItemInfo(final Activity currentActivity, String itemTypeID, int actionType, String buttonText, boolean buttonEnabled, int inventorySlot) {
Intent intent = new Intent(currentActivity, ItemInfoActivity.class);
intent.putExtra("buttonText", buttonText);
intent.putExtra("buttonEnabled", buttonEnabled);
@@ -277,19 +278,19 @@ public final class Dialogs {
context.startActivity(intent);
}
public static void showBulkBuyingInterface(ShopActivity currentActivity, int itemTypeID, int totalAvailableAmount) {
public static void showBulkBuyingInterface(ShopActivity currentActivity, String itemTypeID, int totalAvailableAmount) {
showBulkSelectionInterface(currentActivity, itemTypeID, totalAvailableAmount, BulkSelectionInterface.BULK_INTERFACE_BUY, MainActivity.INTENTREQUEST_BULKSELECT_BUY);
}
public static void showBulkSellingInterface(ShopActivity currentActivity, int itemTypeID, int totalAvailableAmount) {
public static void showBulkSellingInterface(ShopActivity currentActivity, String itemTypeID, int totalAvailableAmount) {
showBulkSelectionInterface(currentActivity, itemTypeID, totalAvailableAmount, BulkSelectionInterface.BULK_INTERFACE_SELL, MainActivity.INTENTREQUEST_BULKSELECT_SELL);
}
public static void showBulkDroppingInterface(HeroinfoActivity_Inventory currentActivity, int itemTypeID, int totalAvailableAmount) {
public static void showBulkDroppingInterface(HeroinfoActivity_Inventory currentActivity, String itemTypeID, int totalAvailableAmount) {
showBulkSelectionInterface(currentActivity, itemTypeID, totalAvailableAmount, BulkSelectionInterface.BULK_INTERFACE_DROP, MainActivity.INTENTREQUEST_BULKSELECT_DROP);
}
public static void showBulkSelectionInterface(Activity currentActivity, int itemTypeID, int totalAvailableAmount, int interfaceType, int requestCode) {
public static void showBulkSelectionInterface(Activity currentActivity, String itemTypeID, int totalAvailableAmount, int interfaceType, int requestCode) {
Intent intent = new Intent(currentActivity, BulkSelectionInterface.class);
intent.putExtra("itemTypeID", itemTypeID);
intent.putExtra("totalAvailableAmount", totalAvailableAmount);

View File

@@ -79,7 +79,7 @@ public class BulkSelectionInterface extends Activity implements TextWatcher {
final Intent intent = getIntent();
Bundle params = intent.getExtras();
int itemTypeID = params.getInt("itemTypeID");
String itemTypeID = params.getString("itemTypeID");
itemType = world.itemTypes.getItemType(itemTypeID);
totalAvailableAmount = params.getInt("totalAvailableAmount");
interfaceType = params.getInt("interfaceType");

View File

@@ -294,6 +294,7 @@ public final class ConversationActivity extends Activity {
dest.writeInt(color);
}
@SuppressWarnings("unused")
public static final Parcelable.Creator<ConversationStatement> CREATOR = new Parcelable.Creator<ConversationStatement>() {
public ConversationStatement createFromParcel(Parcel in) {
ConversationStatement result = new ConversationStatement();

View File

@@ -33,6 +33,7 @@ public final class HeroinfoActivity_Inventory extends Activity {
private Player player;
private ItemContainer container;
private ItemContainerAdapter inventoryListAdapter;
private ListView inventoryList;
private TextView heroinfo_stats_gold;
@@ -59,10 +60,13 @@ public final class HeroinfoActivity_Inventory extends Activity {
inventoryList.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
showInventoryItemInfo((int) id);
ItemType itemType = inventoryListAdapter.getItem(position).itemType;
showInventoryItemInfo(itemType.id);
}
});
container = player.inventory;
inventoryListAdapter = new ItemContainerAdapter(this, world.tileStore, container);
inventoryList.setAdapter(inventoryListAdapter);
heroinfo_stats_gold = (TextView) findViewById(R.id.heroinfo_stats_gold);
heroinfo_stats_attack = (TextView) findViewById(R.id.heroinfo_stats_attack);
@@ -77,8 +81,6 @@ public final class HeroinfoActivity_Inventory extends Activity {
setWearSlot(ItemType.CATEGORY_WEARABLE_HAND, R.id.heroinfo_worn_hand, R.drawable.equip_hand);
setWearSlot(ItemType.CATEGORY_WEARABLE_RING, R.id.heroinfo_worn_ringleft, R.drawable.equip_ring);
setWearSlot(ItemType.CATEGORY_WEARABLE_RING+1, R.id.heroinfo_worn_ringright, R.drawable.equip_ring);
inventoryList.setAdapter(new ItemContainerAdapter(this, world.tileStore, container));
}
@Override
@@ -108,7 +110,7 @@ public final class HeroinfoActivity_Inventory extends Activity {
case MainActivity.INTENTREQUEST_ITEMINFO:
if (resultCode != RESULT_OK) break;
ItemType itemType = world.itemTypes.getItemType(data.getExtras().getInt("itemTypeID"));
ItemType itemType = world.itemTypes.getItemType(data.getExtras().getString("itemTypeID"));
int actionType = data.getExtras().getInt("actionType");
if (actionType == ItemInfoActivity.ITEMACTION_UNEQUIP) {
view.itemController.unequipSlot(itemType, data.getExtras().getInt("inventorySlot"));
@@ -122,13 +124,13 @@ public final class HeroinfoActivity_Inventory extends Activity {
if (resultCode != RESULT_OK) break;
int quantity = data.getExtras().getInt("selectedAmount");
int itemTypeID = data.getExtras().getInt("itemTypeID");
String itemTypeID = data.getExtras().getString("itemTypeID");
dropItem(itemTypeID, quantity);
break;
}
}
private void dropItem(int itemTypeID, int quantity) {
private void dropItem(String itemTypeID, int quantity) {
ItemType itemType = world.itemTypes.getItemType(itemTypeID);
view.itemController.dropItem(itemType, quantity);
}
@@ -161,7 +163,7 @@ public final class HeroinfoActivity_Inventory extends Activity {
}
private void updateItemList() {
((ItemContainerAdapter) inventoryList.getAdapter()).notifyDataSetChanged();
inventoryListAdapter.notifyDataSetChanged();
}
@Override
@@ -182,11 +184,8 @@ public final class HeroinfoActivity_Inventory extends Activity {
lastSelectedItem = null;
}
private int getSelectedID(AdapterContextMenuInfo info) {
return (int) info.id;
}
private ItemType getSelectedItemType(AdapterContextMenuInfo info) {
return world.itemTypes.getItemType(getSelectedID(info));
return inventoryListAdapter.getItem(info.position).itemType;
}
@Override
public boolean onContextItemSelected(MenuItem item) {
@@ -197,7 +196,7 @@ public final class HeroinfoActivity_Inventory extends Activity {
//context.controller.itemInfo(this, getSelectedItemType(info));
break;
case R.id.inv_menu_drop:
int itemTypeID = getSelectedItemType(info).id;
String itemTypeID = getSelectedItemType(info).id;
int quantity = player.inventory.getItemQuantity(itemTypeID);
if (quantity > 1) {
Dialogs.showBulkDroppingInterface(this, itemTypeID, quantity);
@@ -250,7 +249,7 @@ public final class HeroinfoActivity_Inventory extends Activity {
}
Dialogs.showItemInfo(HeroinfoActivity_Inventory.this, itemType.id, ItemInfoActivity.ITEMACTION_UNEQUIP, text, enabled, inventorySlot);
}
private void showInventoryItemInfo(int itemTypeID) {
private void showInventoryItemInfo(String itemTypeID) {
showInventoryItemInfo(world.itemTypes.getItemType(itemTypeID));
}
private void showInventoryItemInfo(ItemType itemType) {

View File

@@ -5,7 +5,6 @@ import java.util.ArrayList;
import com.gpl.rpg.AndorsTrail.Dialogs;
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.ability.ActorCondition;
import com.gpl.rpg.AndorsTrail.model.ability.ActorConditionType;
@@ -35,8 +34,7 @@ import android.widget.TextView;
public final class HeroinfoActivity_Stats extends Activity {
private WorldContext world;
private ViewContext view;
private Player player;
private Button levelUpButton;
@@ -57,7 +55,6 @@ public final class HeroinfoActivity_Stats extends Activity {
super.onCreate(savedInstanceState);
AndorsTrailApplication app = AndorsTrailApplication.getApplicationFromActivity(this);
this.world = app.world;
this.view = app.currentView.get();
this.player = world.model.player;
setContentView(R.layout.heroinfo_stats);
@@ -107,21 +104,7 @@ public final class HeroinfoActivity_Stats extends Activity {
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
ItemType itemType;
switch (requestCode) {
case MainActivity.INTENTREQUEST_ITEMINFO:
if (resultCode != RESULT_OK) break;
itemType = world.itemTypes.getItemType(data.getExtras().getInt("itemTypeID"));
int actionType = data.getExtras().getInt("actionType");
if (actionType == ItemInfoActivity.ITEMACTION_UNEQUIP) {
view.itemController.unequipSlot(itemType, data.getExtras().getInt("inventorySlot"));
} else if (actionType == ItemInfoActivity.ITEMACTION_EQUIP) {
view.itemController.equipItem(itemType);
} else if (actionType == ItemInfoActivity.ITEMACTION_USE) {
view.itemController.useItem(itemType);
}
break;
case MainActivity.INTENTREQUEST_LEVELUP:
break;
}

View File

@@ -39,7 +39,7 @@ public final class ItemInfoActivity extends Activity {
final Intent intent = getIntent();
Bundle params = intent.getExtras();
int itemTypeID = params.getInt("itemTypeID");
String itemTypeID = params.getString("itemTypeID");
final ItemType itemType = world.itemTypes.getItemType(itemTypeID);
final String buttonText = params.getString("buttonText");

View File

@@ -127,7 +127,7 @@ public final class ShopActivity extends TabActivity implements OnContainerItemCl
case MainActivity.INTENTREQUEST_ITEMINFO:
if (resultCode != RESULT_OK) return;
ItemType itemType = world.itemTypes.getItemType(data.getExtras().getInt("itemTypeID"));
ItemType itemType = world.itemTypes.getItemType(data.getExtras().getString("itemTypeID"));
int actionType = data.getExtras().getInt("actionType");
if (actionType == ItemInfoActivity.ITEMACTION_BUY) {
showBuyingInterface(itemType);
@@ -138,14 +138,14 @@ public final class ShopActivity extends TabActivity implements OnContainerItemCl
case MainActivity.INTENTREQUEST_BULKSELECT_BUY:
if (resultCode == Activity.RESULT_OK) {
int quantity = data.getExtras().getInt("selectedAmount");
int itemTypeID = data.getExtras().getInt("itemTypeID");
String itemTypeID = data.getExtras().getString("itemTypeID");
buy(itemTypeID, quantity);
}
break;
case MainActivity.INTENTREQUEST_BULKSELECT_SELL:
if (resultCode == Activity.RESULT_OK) {
int quantity = data.getExtras().getInt("selectedAmount");
int itemTypeID = data.getExtras().getInt("itemTypeID");
String itemTypeID = data.getExtras().getString("itemTypeID");
sell(itemTypeID, quantity);
}
break;
@@ -160,14 +160,14 @@ public final class ShopActivity extends TabActivity implements OnContainerItemCl
Dialogs.showBulkBuyingInterface(this, itemType.id, container_buy.getItemQuantity(itemType.id));
}
private void buy(int itemTypeID, int quantity) {
private void buy(String itemTypeID, int quantity) {
ItemType itemType = world.itemTypes.getItemType(itemTypeID);
ItemController.buy(world.model, player, itemType, container_buy, quantity);
final String msg = getResources().getString(R.string.shop_item_bought, itemType.name);
displayStoreAction(msg);
}
private void sell(int itemTypeID, int quantity) {
private void sell(String itemTypeID, int quantity) {
ItemType itemType = world.itemTypes.getItemType(itemTypeID);
ItemController.sell(player, itemType, container_buy, quantity);
final String msg = getResources().getString(R.string.shop_item_sold, itemType.name);

View File

@@ -63,8 +63,7 @@ public class WorldContext {
// Selftest method. Not part of the game logic.
public void verifyData() {
if (AndorsTrailApplication.DEVELOPMENT_VALIDATEDATA) {
assert(itemTypes.getItemTypeByTag("gold") != null);
assert(itemTypes.getItemTypeByTag("gold").id == ItemTypeCollection.ITEMTYPE_GOLD);
assert(itemTypes.getItemType("gold") != null);
//Ensure that all phrases that require an item have some droplist that contains them
conversations.verifyData(dropLists);

View File

@@ -35,7 +35,7 @@ public final class ConversationController {
public static void applyReplyEffect(final Player player, final Reply reply) {
if (!reply.requiresItem()) return;
if (reply.requiresItemTypeID == ItemTypeCollection.ITEMTYPE_GOLD) {
if (ItemTypeCollection.isGoldItemType(reply.requiresItemTypeID)) {
player.inventory.gold -= reply.requiresItemQuantity;
} else {
player.inventory.removeItem(reply.requiresItemTypeID, reply.requiresItemQuantity);
@@ -55,8 +55,8 @@ public final class ConversationController {
return player.hasExactQuestProgress(progress);
}
private static boolean hasRequiredItems(final Player player, int requiresItemTypeID, int requiresItemQuantity) {
if (requiresItemTypeID == ItemTypeCollection.ITEMTYPE_GOLD) return player.inventory.gold >= requiresItemQuantity;
private static boolean hasRequiredItems(final Player player, String requiresItemTypeID, int requiresItemQuantity) {
if (ItemTypeCollection.isGoldItemType(requiresItemTypeID)) return player.inventory.gold >= requiresItemQuantity;
return player.inventory.hasItem(requiresItemTypeID, requiresItemQuantity);
}

View File

@@ -41,7 +41,7 @@ public final class SkillController {
public static int getDropChanceRollBias(DropItem item, Player player) {
if (player == null) return 0;
if (item.itemType.id == ItemTypeCollection.ITEMTYPE_GOLD) {
if (ItemTypeCollection.isGoldItemType(item.itemType.id)) {
return getRollBias(item, player, SkillCollection.SKILL_COINFINDER, SkillCollection.PER_SKILLPOINT_INCREASE_COINFINDER_CHANCE_PERCENT);
} else if (!item.itemType.isOrdinaryItem()) {
return getRollBias(item, player, SkillCollection.SKILL_MAGICFINDER, SkillCollection.PER_SKILLPOINT_INCREASE_MAGICFINDER_CHANCE_PERCENT);
@@ -52,7 +52,7 @@ public final class SkillController {
public static int getDropQuantityRollBias(DropItem item, Player player) {
if (player == null) return 0;
if (item.itemType.id != ItemTypeCollection.ITEMTYPE_GOLD) return 0;
if (!ItemTypeCollection.isGoldItemType(item.itemType.id)) return 0;
return getRollBias(item, player, SkillCollection.SKILL_COINFINDER, SkillCollection.PER_SKILLPOINT_INCREASE_COINFINDER_QUANTITY_PERCENT);
}

View File

@@ -62,10 +62,9 @@ public final class ConversationCollection {
@Override
public void matchedRow(String[] parts) {
String requiresItemTypeTag = parts[3];
int requiresItemTypeID = -1;
String requiresItemTypeID = null;
if (requiresItemTypeTag.length() > 0) {
ItemType type = itemTypes.getItemTypeByTag(requiresItemTypeTag);
if (type != null) requiresItemTypeID = type.id;
requiresItemTypeID = requiresItemTypeTag;
}
replies.add(new Reply(
parts[0]

View File

@@ -23,16 +23,16 @@ public final class Phrase {
public final String text;
public final String nextPhrase;
public final QuestProgress requiresProgress;
public final int requiresItemTypeID;
public final String requiresItemTypeID;
public final int requiresItemQuantity;
public boolean requiresItem() {
if (requiresItemTypeID == -1) return false;
if (requiresItemTypeID == null) return false;
if (requiresItemQuantity <= 0) return false;
return true;
}
public Reply(String text, String nextPhrase, QuestProgress requiresProgress, int requiresItemTypeID, int requiresItemQuantity) {
public Reply(String text, String nextPhrase, QuestProgress requiresProgress, String requiresItemTypeID, int requiresItemQuantity) {
this.text = text;
this.nextPhrase = nextPhrase;
this.requiresProgress = requiresProgress;

View File

@@ -30,7 +30,7 @@ public final class GameStatistics {
spentGold += amount;
}
public void addItemUsage(ItemType type) {
final String n = type.searchTag;
final String n = type.id;
if (!usedItems.containsKey(n)) usedItems.put(n, 1);
else usedItems.put(n, usedItems.get(n) + 1);
}

View File

@@ -29,7 +29,7 @@ public final class DropList {
int quantity = Constants.rollValue(item.quantity, quantityRollBias);
if (quantity != 0) {
if (item.itemType.id == ItemTypeCollection.ITEMTYPE_GOLD) {
if (ItemTypeCollection.isGoldItemType(item.itemType.id)) {
loot.gold += quantity;
} else {
loot.items.addItem(item.itemType, quantity);
@@ -40,9 +40,9 @@ public final class DropList {
}
// Selftest method. Not part of the game logic.
public boolean contains(int itemTypeID) {
public boolean contains(String itemTypeID) {
for (DropItem item : items) {
if (item.itemType.id == itemTypeID) return true;
if (item.itemType.id.equals(itemTypeID)) return true;
}
return false;
}

View File

@@ -47,7 +47,7 @@ public final class DropListCollection {
@Override
public void matchedRow(String[] parts) {
items.add(new DropItem(
itemTypes.getItemTypeByTag(parts[0]) // Itemtype
itemTypes.getItemType(parts[0]) // Itemtype
, ResourceFileParser.parseChance(parts[3]) // Chance
, ResourceFileParser.parseQuantity(parts[1], parts[2]) // Quantity
));
@@ -74,7 +74,7 @@ public final class DropListCollection {
}
// Selftest method. Not part of the game logic.
public boolean verifyExistsDroplist(int itemTypeID) {
public boolean verifyExistsDroplist(String itemTypeID) {
if (AndorsTrailApplication.DEVELOPMENT_VALIDATEDATA) {
for (DropList d : droplists.values()) {
if (d.contains(itemTypeID)) return true;

View File

@@ -37,7 +37,7 @@ public final class Inventory extends ItemContainer {
final int size = src.readInt();
for(int i = 0; i < size; ++i) {
if (src.readBoolean()) {
wear[i] = world.itemTypes.getItemTypeByTag(src.readUTF());
wear[i] = world.itemTypes.getItemType(src.readUTF());
} else {
wear[i] = null;
}
@@ -46,7 +46,7 @@ public final class Inventory extends ItemContainer {
final int quickSlots = src.readInt();
for(int i = 0; i < quickSlots; ++i) {
if (src.readBoolean()) {
quickitem[i] = world.itemTypes.getItemTypeByTag(src.readUTF());
quickitem[i] = world.itemTypes.getItemType(src.readUTF());
} else {
quickitem[i] = null;
}
@@ -60,7 +60,7 @@ public final class Inventory extends ItemContainer {
for(int i = 0; i < NUM_WORN_SLOTS; ++i) {
if (wear[i] != null) {
dest.writeBoolean(true);
dest.writeUTF(wear[i].searchTag);
dest.writeUTF(wear[i].id);
} else {
dest.writeBoolean(false);
}
@@ -69,7 +69,7 @@ public final class Inventory extends ItemContainer {
for(int i = 0; i < QuickitemView.NUM_QUICK_SLOTS; ++i) {
if (quickitem[i] != null) {
dest.writeBoolean(true);
dest.writeUTF(quickitem[i].searchTag);
dest.writeUTF(quickitem[i].id);
} else {
dest.writeBoolean(false);
}

View File

@@ -34,12 +34,12 @@ public class ItemContainer {
// ====== PARCELABLE ===================================================================
public ItemEntry(DataInputStream src, WorldContext world, int fileversion) throws IOException {
this.itemType = world.itemTypes.getItemTypeByTag(src.readUTF());
this.itemType = world.itemTypes.getItemType(src.readUTF());
this.quantity = src.readInt();
}
public void writeToParcel(DataOutputStream dest, int flags) throws IOException {
dest.writeUTF(itemType.searchTag);
dest.writeUTF(itemType.id);
dest.writeInt(quantity);
}
}
@@ -60,13 +60,13 @@ public class ItemContainer {
}
public boolean isEmpty() { return items.isEmpty(); }
public boolean removeItem(int itemTypeID) { return removeItem(itemTypeID, 1); }
public boolean removeItem(int itemTypeID, int quantity) {
public boolean removeItem(String itemTypeID) { return removeItem(itemTypeID, 1); }
public boolean removeItem(String itemTypeID, int quantity) {
int index = -1;
ItemEntry e = null;
for (int i = 0; i < items.size(); ++i) {
e = items.get(i);
if (e.itemType.id == itemTypeID) {
if (e.itemType.id.equals(itemTypeID)) {
index = i;
break;
}
@@ -80,18 +80,18 @@ public class ItemContainer {
return true;
}
public ItemEntry findItem(int itemTypeID) {
public ItemEntry findItem(String itemTypeID) {
for (ItemEntry e : items) {
if (e.itemType.id == itemTypeID) return e;
if (e.itemType.id.equals(itemTypeID)) return e;
}
return null;
}
public boolean hasItem(int itemTypeID) { return findItem(itemTypeID) != null; }
public boolean hasItem(int itemTypeID, int minimumQuantity) {
public boolean hasItem(String itemTypeID) { return findItem(itemTypeID) != null; }
public boolean hasItem(String itemTypeID, int minimumQuantity) {
return getItemQuantity(itemTypeID) >= minimumQuantity;
}
public int getItemQuantity(int itemTypeID) {
public int getItemQuantity(String itemTypeID) {
ItemEntry e = findItem(itemTypeID);
if (e == null) return 0;
return e.quantity;
@@ -121,7 +121,7 @@ public class ItemContainer {
for (ItemEntry e : container.items) {
if (e.quantity >= 2 && isRefundableItem(e.itemType)) {
if (AndorsTrailApplication.DEVELOPMENT_DEBUGMESSAGES) {
L.log("INFO: Refunding " + (e.quantity-1) + " items of type \"" + e.itemType.searchTag + "\" for a total of " + ((e.quantity-1) * e.itemType.fixedBaseMarketCost) + "gc.");
L.log("INFO: Refunding " + (e.quantity-1) + " items of type \"" + e.itemType.id + "\" for a total of " + ((e.quantity-1) * e.itemType.fixedBaseMarketCost) + "gc.");
}
removedCost += (e.quantity-1) * e.itemType.fixedBaseMarketCost;
e.quantity = 1;

View File

@@ -31,7 +31,7 @@ public final class ItemType {
public static final int DISPLAYTYPE_EXTRAORDINARY = 3;
public static final int DISPLAYTYPE_RARE = 4;
public final int id;
public final String id;
public final int iconID;
public final String name;
public final int category;
@@ -39,7 +39,6 @@ public final class ItemType {
public final boolean hasManualPrice;
public final int baseMarketCost;
public final int fixedBaseMarketCost;
public final String searchTag;
public final int displayType;
public final ItemTraits_OnEquip effects_equip;
@@ -47,11 +46,10 @@ public final class ItemType {
public final ItemTraits_OnUse effects_hit;
public final ItemTraits_OnUse effects_kill;
public ItemType(int id, int iconID, String name, String searchTag, int category, int displayType, boolean hasManualPrice, int fixedBaseMarketCost, ItemTraits_OnEquip effects_equip, ItemTraits_OnUse effects_use, ItemTraits_OnUse effects_hit, ItemTraits_OnUse effects_kill) {
public ItemType(String id, int iconID, String name, int category, int displayType, boolean hasManualPrice, int fixedBaseMarketCost, ItemTraits_OnEquip effects_equip, ItemTraits_OnUse effects_use, ItemTraits_OnUse effects_hit, ItemTraits_OnUse effects_kill) {
this.id = id;
this.iconID = iconID;
this.name = name;
this.searchTag = searchTag;
this.category = category;
this.actionType = getActionType(category);
this.displayType = displayType;

View File

@@ -1,6 +1,6 @@
package com.gpl.rpg.AndorsTrail.model.item;
import java.util.ArrayList;
import java.util.HashMap;
import com.gpl.rpg.AndorsTrail.AndorsTrailApplication;
import com.gpl.rpg.AndorsTrail.model.ability.ActorConditionTypeCollection;
@@ -11,37 +11,37 @@ import com.gpl.rpg.AndorsTrail.resource.ResourceFileParser.ResourceObjectTokeniz
import com.gpl.rpg.AndorsTrail.util.L;
public final class ItemTypeCollection {
public static final int ITEMTYPE_GOLD = 0;
private static final String ITEMTYPE_GOLD = "gold";
private final ArrayList<ItemType> itemTypes = new ArrayList<ItemType>();
public final ArrayList<ItemType> TEST_itemTypes = itemTypes;
private final HashMap<String, ItemType> itemTypes = new HashMap<String, ItemType>();
public final HashMap<String, ItemType> TEST_itemTypes = itemTypes;
public ItemType getItemType(int id) {
public ItemType getItemType(String id) {
if (AndorsTrailApplication.DEVELOPMENT_VALIDATEDATA) {
if (!itemTypes.containsKey(id)) {
L.log("WARNING: Cannot find ItemType for id \"" + id + "\".");
}
}
return itemTypes.get(id);
}
public ItemType getItemTypeByTag(String searchTag) {
for(ItemType t : itemTypes) {
if (t.searchTag.equalsIgnoreCase(searchTag)) return t;
}
if (AndorsTrailApplication.DEVELOPMENT_VALIDATEDATA) {
L.log("WARNING: Cannot find ItemType for searchtag \"" + searchTag + "\".");
}
return null;
public static boolean isGoldItemType(String requiresItemTypeID) {
if (requiresItemTypeID == null) return false;
return requiresItemTypeID.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 searchTag = parts[0];
if (searchTag == null || searchTag.length() <= 0) {
String id = parts[0];
if (id == null || id.length() <= 0) {
if (AndorsTrailApplication.DEVELOPMENT_VALIDATEDATA) {
L.log("OPTIMIZE: ItemType \"" + itemTypeName + "\" has empty searchtag.");
L.log("OPTIMIZE: ItemType \"" + itemTypeName + "\" has empty id.");
}
searchTag = itemTypeName;
id = itemTypeName;
}
final ItemTraits_OnEquip equipEffect = ResourceFileParser.parseItemTraits_OnEquip(actorConditionTypes, parts, 7);
@@ -49,15 +49,13 @@ public final class ItemTypeCollection {
final ItemTraits_OnUse hitEffect = ResourceFileParser.parseItemTraits_OnUse(actorConditionTypes, parts, 26, true);
final ItemTraits_OnUse killEffect = ResourceFileParser.parseItemTraits_OnUse(actorConditionTypes, parts, 33, false);
final int nextId = itemTypes.size();
final int baseMarketCost = Integer.parseInt(parts[6]);
final boolean hasManualPrice = ResourceFileParser.parseBoolean(parts[5], false);
final ItemType itemType = new ItemType(
nextId
id
, ResourceFileParser.parseImageID(tileLoader, parts[1])
, itemTypeName
, searchTag
, Integer.parseInt(parts[3]) // category
, Integer.parseInt(parts[3]) // category
, ResourceFileParser.parseInt(parts[4], ItemType.DISPLAYTYPE_ORDINARY) // Displaytype
, hasManualPrice // hasManualPrice
, baseMarketCost // Base market cost
@@ -69,47 +67,47 @@ public final class ItemTypeCollection {
if (AndorsTrailApplication.DEVELOPMENT_VALIDATEDATA) {
if (!hasManualPrice) {
if (itemType.effects_hit != null || itemType.effects_kill != null) {
L.log("OPTIMIZE: Item " + searchTag + " uses automatic pricing, but has kill- or hit effects. Should probably use manual pricing?");
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 " + searchTag + " uses automatic pricing, but has no equip- or use effects. Should probably use manual pricing?");
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 " + searchTag + " uses automatic pricing, but is neither usable nor equippable. Should probably use manual pricing?");
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 " + searchTag + " is a quest item, but has a base market price specified.");
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 " + searchTag + " does not have a base market price specified (and is an ordinary item).");
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 " + searchTag + " is equippable, but has no equip effect.");
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 " + searchTag + " is not equippable, but has equip, hit or kill effect.");
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 " + searchTag + " is usable, but has no use effect.");
L.log("OPTIMIZE: Item " + id + " is usable, but has no use effect.");
}
} else {
if (itemType.effects_use != null) {
L.log("OPTIMIZE: Item " + searchTag + " is not usable, but has use effect.");
L.log("OPTIMIZE: Item " + id + " is not usable, but has use effect.");
}
}
}
itemTypes.add(itemType);
if (AndorsTrailApplication.DEVELOPMENT_VALIDATEDATA) {
if (getItemTypeByTag(searchTag).id != nextId) {
L.log("OPTIMIZE: Item " + searchTag + " may be duplicated.");
if (AndorsTrailApplication.DEVELOPMENT_VALIDATEDATA) {
if (itemTypes.containsKey(id)) {
L.log("OPTIMIZE: Item " + id + " may be duplicated.");
}
}
itemTypes.put(id, itemType);
}
});
}
@@ -117,10 +115,10 @@ public final class ItemTypeCollection {
// Selftest method. Not part of the game logic.
public void verifyData(DropListCollection dropLists) {
if (AndorsTrailApplication.DEVELOPMENT_VALIDATEDATA) {
for (ItemType t : itemTypes) {
for (ItemType t : itemTypes.values()) {
if (dropLists.verifyExistsDroplist(t.id)) continue;
//if (conversations.verifyExistsReplyThatRequiresItem(t.id)) continue;
L.log("OPTIMIZE: Item " + t.searchTag + " is not dropped by any droplist.");
L.log("OPTIMIZE: Item " + t.id + " is not dropped by any droplist.");
}
}
}

View File

@@ -1,6 +1,5 @@
package com.gpl.rpg.AndorsTrail.resource;
import java.util.ArrayList;
import java.util.HashMap;
import com.gpl.rpg.AndorsTrail.AndorsTrailApplication;
@@ -17,8 +16,8 @@ public final class DynamicTileLoader {
private final TileStore store;
private final Resources r;
private final ArrayList<TilesetBitmap> preparedTilesets = new ArrayList<TilesetBitmap>();
//private final HashMap<String, Integer> DEBUG_tilefrequency = new HashMap<String, Integer>();
private final HashMap<Integer, TilesetBitmap> preparedTilesetsByResourceId = new HashMap<Integer, TilesetBitmap>();
private final HashMap<String, TilesetBitmap> preparedTilesetsByResourceName = new HashMap<String, TilesetBitmap>();
private int allocatedTiles = 0;
private int currentTileStoreIndex;
@@ -30,57 +29,47 @@ public final class DynamicTileLoader {
private void initialize() {
allocatedTiles = 0;
preparedTilesets.clear();
preparedTilesetsByResourceId.clear();
preparedTilesetsByResourceName.clear();
currentTileStoreIndex = store.bitmaps.length;
/*if (AndorsTrailApplication.DEVELOPMENT_VALIDATEDATA) {
DEBUG_tilefrequency.clear();
}*/
}
public void prepareTileset(int resourceId, String tilesetName, Size numTiles, Size destinationTileSize) {
preparedTilesets.add(new TilesetBitmap(resourceId, tilesetName, numTiles, destinationTileSize));
TilesetBitmap b = new TilesetBitmap(resourceId, tilesetName, numTiles, destinationTileSize);
preparedTilesetsByResourceId.put(resourceId, b);
preparedTilesetsByResourceName.put(tilesetName, b);
}
private TilesetBitmap getTilesetBitmap(int tilesetImageResourceID) {
for (TilesetBitmap b : preparedTilesets) {
if (b.resourceId == tilesetImageResourceID) {
return b;
if (AndorsTrailApplication.DEVELOPMENT_VALIDATEDATA) {
if (!preparedTilesetsByResourceId.containsKey(tilesetImageResourceID)) {
L.log("WARNING: Cannot load tileset " + tilesetImageResourceID);
return null;
}
}
return null;
return preparedTilesetsByResourceId.get(tilesetImageResourceID);
}
private TilesetBitmap getTilesetBitmap(String tilesetName) {
if (AndorsTrailApplication.DEVELOPMENT_VALIDATEDATA) {
if (!preparedTilesetsByResourceName.containsKey(tilesetName)) {
L.log("WARNING: Cannot load tileset " + tilesetName);
return null;
}
}
return preparedTilesetsByResourceName.get(tilesetName);
}
public int prepareTileID(int tilesetImageResourceID, int localId) {
TilesetBitmap b = getTilesetBitmap(tilesetImageResourceID);
if (b == null) {
if (AndorsTrailApplication.DEVELOPMENT_VALIDATEDATA) {
L.log("WARNING: Cannot load tileset " + tilesetImageResourceID + " for localId " + localId);
}
return currentTileStoreIndex-1;
}
return prepareTileID(b, localId);
}
public int prepareTileID(String tilesetName, int localId) {
for (TilesetBitmap b : preparedTilesets) {
if (b.tilesetName.equals(tilesetName)) {
return prepareTileID(b, localId);
}
}
if (AndorsTrailApplication.DEVELOPMENT_VALIDATEDATA) {
L.log("WARNING: Cannot load tileset " + tilesetName);
}
return currentTileStoreIndex-1;
TilesetBitmap b = getTilesetBitmap(tilesetName);
return prepareTileID(b, localId);
}
public Size getTilesetSize(String tilesetName) {
for (TilesetBitmap b : preparedTilesets) {
if (b.tilesetName.equals(tilesetName)) {
return b.destinationTileSize;
}
}
if (AndorsTrailApplication.DEVELOPMENT_VALIDATEDATA) {
L.log("WARNING: Cannot load tileset " + tilesetName);
}
return new Size(1, 1);
TilesetBitmap b = getTilesetBitmap(tilesetName);
return b.destinationTileSize;
}
private int prepareTileID(TilesetBitmap tileset, int localId) {
@@ -93,22 +82,13 @@ public final class DynamicTileLoader {
++allocatedTiles;
tileset.tilesToLoad.put(localId, tileStoreIndex);
}
/*if (AndorsTrailApplication.DEVELOPMENT_VALIDATEDATA) {
final int x = localId % tileset.numTiles.width;
final int y = (localId - x) / tileset.numTiles.width;
final String s = tileset.tilesetName + "(" + x + "," + y + ")";
int n = 0;
if (DEBUG_tilefrequency.containsKey(s)) n = DEBUG_tilefrequency.get(s);
++n;
DEBUG_tilefrequency.put(s, n);
}*/
return tileStoreIndex;
}
public void flush() {
store.allocateTiles(allocatedTiles);
for (TilesetBitmap b : preparedTilesets) {
for (TilesetBitmap b : preparedTilesetsByResourceId.values()) {
if (b.tilesToLoad.isEmpty()) {
if (AndorsTrailApplication.DEVELOPMENT_VALIDATEDATA) {
L.log("OPTIMIZE: Tileset " + b.tilesetName + " does not contain any loaded tiles. The file could be removed from the project.");
@@ -128,19 +108,6 @@ public final class DynamicTileLoader {
if (recycle) tilesetImage.recycle();
}
/*if (AndorsTrailApplication.DEVELOPMENT_VALIDATEDATA) {
ArrayList<Entry<String, Integer>> l = new ArrayList<Entry<String,Integer>>(DEBUG_tilefrequency.entrySet());
Collections.sort(l, new Comparator<Entry<String, Integer>>() {
@Override
public int compare(Entry<String, Integer> a, Entry<String, Integer> b) {
return b.getValue() - a.getValue();
}
});
for (Entry<String, Integer> e : l) {
L.log("INFO: " + e.getValue() + " times requested " + e.getKey());
}
}*/
initialize();
}

View File

@@ -158,7 +158,7 @@ public final class ResourceLoader {
loader.prepareTileset(R.drawable.actorconditions_2, "actorconditions_2", new Size(3, 1), defaultTileSize);
loader.prepareTileset(R.drawable.items_armours, "items_armours", new Size(14, 3), defaultTileSize);
loader.prepareTileset(R.drawable.items_weapons, "items_weapons", new Size(14, 8), defaultTileSize);
loader.prepareTileset(R.drawable.items_weapons, "items_weapons", new Size(14, 6), defaultTileSize);
loader.prepareTileset(R.drawable.items_jewelry, "items_jewelry", new Size(14, 1), defaultTileSize);
loader.prepareTileset(R.drawable.items_consumables, "items_consumables", new Size(14, 5), defaultTileSize);
loader.prepareTileset(R.drawable.items_books, "items_books", new Size(11, 1), defaultTileSize);

View File

@@ -36,6 +36,6 @@ public final class ItemContainerAdapter extends ArrayAdapter<ItemEntry> {
@Override
public long getItemId(int position) {
return getItem(position).itemType.id;
return getItem(position).itemType.id.hashCode();
}
}

View File

@@ -74,7 +74,7 @@ public final class ShopItemContainerAdapter extends ArrayAdapter<ItemEntry> {
@Override
public long getItemId(int position) {
return getItem(position).itemType.id;
return getItem(position).itemType.id.hashCode();
}
public static interface OnContainerItemClickedListener {

View File

@@ -229,10 +229,14 @@ function startEditor() {
imageSelector.add(new TilesetImage("actorconditions_1", {x:14, y:8}, undefined, [ 'conditions' ] ));
imageSelector.add(new TilesetImage("actorconditions_2", {x:3, y:1}, undefined, [ 'conditions' ] ));
imageSelector.add(new TilesetImage("items_armours", {x:14, y:3}, undefined, [ 'items' ] ));
imageSelector.add(new TilesetImage("items_armours_3", {x:10, y:4}, undefined, [ 'items' ] ));
imageSelector.add(new TilesetImage("items_armours_2", {x:7, y:1}, undefined, [ 'items' ] ));
imageSelector.add(new TilesetImage("items_weapons", {x:14, y:8}, undefined, [ 'items' ] ));
imageSelector.add(new TilesetImage("items_weapons", {x:14, y:6}, undefined, [ 'items' ] ));
imageSelector.add(new TilesetImage("items_weapons_3", {x:13, y:5}, undefined, [ 'items' ] ));
imageSelector.add(new TilesetImage("items_weapons_2", {x:7, y:1}, undefined, [ 'items' ] ));
imageSelector.add(new TilesetImage("items_jewelry", {x:14, y:1}, undefined, [ 'items' ] ));
imageSelector.add(new TilesetImage("items_rings_1", {x:10, y:3}, undefined, [ 'items' ] ));
imageSelector.add(new TilesetImage("items_necklaces_1", {x:10, y:3}, undefined, [ 'items' ] ));
imageSelector.add(new TilesetImage("items_consumables", {x:14, y:5}, undefined, [ 'items' ] ));
imageSelector.add(new TilesetImage("items_books", {x:11, y:1}, undefined, [ 'items' ] ));
imageSelector.add(new TilesetImage("items_misc", {x:14, y:4}, undefined, [ 'items' ] ));

View File

@@ -97,11 +97,12 @@ function ImageSelector(imagePath, dialog) {
dialog.dialog({
title: "Select icon",
autoOpen: false,
modal: true,
width: 700,
width: 730,
height: 800,
position: [50,50],
position: [30,30],
buttons: {
Cancel: function() {
$( this ).dialog( "close" );