[charactermanager] r343 committed - refactor weapons

0 views
Skip to first unread message

codesite...@google.com

unread,
Oct 3, 2009, 4:25:05 PM10/3/09
to characterman...@googlegroups.com
Revision: 343
Author: todd.chambery
Date: Sat Oct 3 13:23:43 2009
Log: refactor weapons
http://code.google.com/p/charactermanager/source/detail?r=343

Added:
/trunk/charmgrjs/edit_weapons.js
Modified:
/trunk/charmgrjs/armor.js
/trunk/charmgrjs/charmgr.html
/trunk/charmgrjs/common.js
/trunk/charmgrjs/edit.js
/trunk/charmgrjs/main.js
/trunk/charmgrjs/weapons.js

=======================================
--- /dev/null
+++ /trunk/charmgrjs/edit_weapons.js Sat Oct 3 13:23:43 2009
@@ -0,0 +1,137 @@
+function update_data(chardata, select_id, data_name, id_name) {
+ var item_select = $('#' + select_id);
+ var item_id = $('#' + select_id).val();
+ var item_idx = select_id.substring(select_id.lastIndexOf('_') + 1);
+
+ // delete if the weapon was in the list, and the value was changed
to 'Add New Weapon'
+ if (chardata[data_name] != null && item_idx < chardata[data_name].length
&& item_id == -1) {
+ // delete the item, then create a new array
+ chardata[data_name].splice(item_idx, 1);
+ var foo = chardata[data_name].slice();
+ chardata[data_name] = foo;
+ // remove the div
+ // TODO - insert blind effect
+ // $('#' + select_id + '_div').hide("blind", { direction: "up" }, 3000);
+ $('#' + select_id + '_div').remove();
+ // rewrite the whole weapons part
+ build_data_part(chardata, data_name, id_name);
+ }
+
+ // weapon changed
+ else if (item_id != -1) {
+ populate_object(chardata[data_name][item_idx], id_name + '_id', item_id);
+ }
+
+ // populate_data_part(chardata, weapons, "weapons", "weapon")
+ populate_data_part(chardata, window[data_name], data_name, id_name);
+
+ sav(chardata);
+}
+
+function add_data (chardata, data_name, id_name) {
+ if (chardata[data_name] == null) {
+ chardata[data_name] = [];
+ }
+ var item_id = $('#' + id_name + '_new').val();
+ chardata[data_name].push(populate_object(new Object(), id_name + '_id',
item_id));
+ build_data_part(chardata, data_name, id_name);
+
+ sav(chardata);
+}
+
+function build_data_part(chardata, data_name, id_name) {
+ var char_data_html = "";
+ // create containers for each of the character's data
+ if (chardata[data_name] != null && chardata[data_name].length > 0) {
+// $('char_data').addClass('box');
+ for ( var i in chardata[data_name]) {
+ char_data_html += "<div id='" + id_name +"_" + i + "_div'>";
+ var name = id_name +'_' + i;
+ var items = eval("get_available_" + data_name + "(chardata)");
+ char_data_html += c_s(data_name + 'part', name,
items, "update_data(chardata, \"" + name + "\", \"" + data_name + "\", \""
+ id_name + "\")", "update_override(chardata, " + i + ", \"" + data_name
+ "\", \"" + id_name + "\")", window[id_name + "_edit_data"], true,
chardata[data_name][i][id_name + '_id']);
+ char_data_html += "</div>";
+ }
+ } else {
+ $("#char_" + data_name).removeClass('box');
+ }
+ $("#char_" + data_name).html(char_data_html);
+
+ // create the add new select
+ var name = id_name + '_new';
+ var items = eval("get_available_" + data_name + "(chardata)");
+ var new_select = create_select(name, items, "add_data(chardata, \"" +
data_name + "\", \"" + id_name + "\")", true, "width: 185px;");
+ $('#new_' + id_name).html(new_select);
+
+ populate_data_part(chardata, data_name, id_name);
+}
+
+function populate_data_part(chardata, data_name, id_name) {
+ for (var j in chardata[data_name]) {
+ var item = window[data_name].first( {
+ id : chardata[data_name][j][id_name + '_id']
+ });
+ $("#" + id_name + "_" + j + " option[id='" + id_name + "_" + j
+ "_option_" + item.id + "']").attr("selected", true);
+ // TODO - this part might be better in recalc
+ for(var i in window[id_name + "_edit_data"]) {
+ var edit_attr_name = window[id_name + "_edit_data"][i];
+ var value = chardata[data_name][i][edit_attr_name] == null ?
item[edit_attr_name] : chardata[data_name][i][edit_attr_name];
+ $("#" + id_name + "_" + j + edit_attr_name).val(value == null ? "" :
value);
+ }
+ }
+}
+
+function update_override(chardata, item_index, data_name, id_name) {
+ for(var i in window[id_name + "_edit_data"]) {
+ var edit_attr_name = window[id_name + "_edit_data"][i];
+ var value = $("#" + id_name + "_" + item_index + edit_attr_name).val();
+ if(value != null && value.length > 0) {
+ chardata[data_name][item_index][edit_attr_name] = value;
+ }
+ }
+
+ sav(chardata);
+}
+
+function get_available_weapons(chardata) {
+ var simple_weapons = weapons.get({ category: "simple" });
+ var exotic_weapons = [];
+ var martial_weapons = [];
+ if(chardata.feats) {
+ var exotic_weapons_feat = chardata.feats.first({ feat_id: 24 });
+ if(exotic_weapons_feat) {
+ for(var i in exotic_weapons_feat.multi) {
+ exotic_weapons.push(feats.first({ id: exotic_weapons_feat.multi[i] }));
+ }
+ }
+ }
+ // check class feat
+ if(is_class_feat($('#clazz').val(), 43, $('#xp').val())) {
+ martial_weapons = weapons.get({ category: "martial" });
+ } else if(chardata.feats){
+ var martial_weapons_feat = chardata.feats.first({ feat_id: 43 });
+ if(martial_weapons_feat) {
+ for(var i in martial_weapons_feat.multi) {
+ martial_weapons.push(feats.first({ id: martial_weapons_feat.multi[i]
}));
+ }
+ }
+ }
+
+ var avail_weapons =
simple_weapons.concat(martial_weapons).concat(exotic_weapons);
+ return avail_weapons.sort(function(a,b){ return a.name <= b.name ? -1 :
1; });
+}
+
+function get_available_armor(chardata) {
+ return armor.get();
+}
+
+function c_s(part_id, name, items, onchange_action, onblur_action,
addl_data, include_empty, selected_value) {
+ var addl_data = (addl_data == null ? [] : addl_data);
+ var table_html = "<table border='0'><tr>";
+ var select = create_select(name, items, onchange_action,
include_empty, "width: 185px;", null, selected_value);
+ table_html += "<td colspan='2'>" + select + "</td></tr>";
+ for (i in addl_data) {
+ table_html += "<tr><td>" + capitalize(addl_data[i]) + "</td><td><input
id='" + name + addl_data[i]
+ + "' type='text' onblur='" + onblur_action + "' value='' /></td></tr>";
+ }
+ return table_html + "</table>";
+}
=======================================
--- /trunk/charmgrjs/armor.js Mon Sep 7 08:15:00 2009
+++ /trunk/charmgrjs/armor.js Sat Oct 3 13:23:43 2009
@@ -1,3 +1,4 @@
+var armor_edit_data = [ "bon", "ACP", "note" ];
var armor = new TAFFY([{
id: 0,
name: "Padded",
=======================================
--- /trunk/charmgrjs/charmgr.html Wed Sep 2 14:36:32 2009
+++ /trunk/charmgrjs/charmgr.html Sat Oct 3 13:23:43 2009
@@ -34,6 +34,8 @@
</script>
<script type='text/javascript' src='edit_spells.js'>
</script>
+ <script type='text/javascript' src='edit_weapons.js'>
+ </script>
<script type='text/javascript' src='edit.js'>
</script>
<script type='text/javascript' src='main.js'>
=======================================
--- /trunk/charmgrjs/common.js Fri Sep 25 13:44:22 2009
+++ /trunk/charmgrjs/common.js Sat Oct 3 13:23:43 2009
@@ -57,22 +57,28 @@
do_spells(chardata);
}
}
+
+function populate_object(obj, name, value) {
+ obj[name] = value;
+ return obj;
+}

function count_attrs(obj) {
var count = 0;
- for (k in obj) if (obj.hasOwnProperty(k)) count++;
+ for (k in obj) { if (obj.hasOwnProperty(k)) { count++; } }
return count;
}

// TODO - this is a mess, as you knew it would be
-function create_select(name, items, onchange_action, include_empty, style,
category_filter) {
+function create_select(name, items, onchange_action, include_empty, style,
category_filter, selected_value) {
var html = "<select id='" + name + "' onchange='" + onchange_action
+ "' " + (style != null ? "style='" + style + "'" : "") + ">";
if (include_empty) {
html += "<option id='add_new' value='-1'>Add new " + name.substring(0,
name.indexOf('_')) + "</option>";
}
for (var i in items) {
if(category_filter == null || items[i].category == category_filter) {
- html += "<option id='" + name + "_option_" + items[i].id + "' value='"
+ items[i].id + "'>" + items[i].name + "</option>";
+ var selected = (selected_value != null && selected_value ==
items[i].id ? " selected" : "");
+ html += "<option id='" + name + "_option_" + items[i].id + "' value='"
+ items[i].id + "'" + selected + ">" + items[i].name + "</option>";
}
}
html += "</select>";
@@ -255,7 +261,7 @@
feat_mod += (jQuery.inArray(String(weapon.id),
greater_weapon_specialization.multi) > -1 ? 4 : 0);
}
}
- var weapon_damage = (char_weapon != null && char_weapon.damage != null ?
char_weapon.damage.toString() : weapon.damage.toString()).split('/');
+ var weapon_damage = (char_weapon != null && char_weapon.dam != null ?
char_weapon.dam.toString() : weapon.dam.toString()).split('/');
var damage = '';
for(var i in weapon_damage) {
damage += weapon_damage[i] +
pos(Math.max(calc_ability_modifier(ability_score), 1) + feat_mod);
=======================================
--- /trunk/charmgrjs/edit.js Fri Oct 2 15:24:42 2009
+++ /trunk/charmgrjs/edit.js Sat Oct 3 13:23:43 2009
@@ -23,7 +23,7 @@
function build_edit_page(chardata) {
set_links_part(chardata, 1);

- var edit_page_layout = "<form name='charmgr'><div id='topline'
class='dp100'></div><div id='abilitiespart' class='dp100'></div><br
style='clear:both'/><div id='middlepart' class='dp60'><div id='weaponspart'
class='dp100'><div id='char_weapons'></div><div id='new_weapon'
class='new_weapon'></div></div><div id='armorpart'
class='dp100'></div></div><div id='skillspart' class='dp33'></div><div
class='clear'></div></form>";
+ var edit_page_layout = "<form name='charmgr'><div id='topline'
class='dp100'></div><div id='abilitiespart' class='dp100'></div><br
style='clear:both'/><div id='middlepart' class='dp60'><div id='weaponspart'
class='dp100'><div id='ranger_weapon_style'></div><div
id='char_weapons'></div><div id='new_weapon' class='new_weapon'></div><hr
width='100%' /></div><div id='armorpart' class='dp100'><div
id='char_armor'></div><div id='new_armor'
class='new_weapon'></div></div></div><div id='skillspart'
class='dp33'></div><div class='clear'></div></form>";
$('#content').html(edit_page_layout);

// topline
@@ -87,18 +87,20 @@
$('#skillspart').html(skill_html);

// weapons
- build_weapons_part(chardata.weapons);
+ build_data_part(chardata, "weapons", "weapon");

// ranger weapon_style selector, hidden if not ranger
- var weapon_style = "<div id='ranger_weapon_style'> Weapon style: <select
id='weapon_style' style='width: 115px'
onchange='recalc_edit_page(chardata)'><option id='two_weapon_combat'
value='two_weapon_combat'>2-weapon combat</option><option id='archery'
value='archery'>Archery</option></select></div>";
- $('#weapon_0_div').before(weapon_style);
+ var weapon_style = "Weapon style: <select id='weapon_style' style='width:
115px' onchange='recalc_edit_page(chardata)'><option id='two_weapon_combat'
value='two_weapon_combat'>2-weapon combat</option><option id='archery'
value='archery'>Archery</option></select>";
+ $('#ranger_weapon_style').html(weapon_style);

// armor
- armor_selectors = (chardata.armor != null && chardata.armor.length > 0 ?
chardata.armor.length : 1);
- for (as_idx = 0; as_idx < armor_selectors; as_idx++) {
- var name = 'armor_' + as_idx;
- create_selector('armorpart', name, armor, "update_armor(\"" + name
+ "\")", [ "Bon", "ACP", "Note" ], true);
- }
+ build_data_part(chardata, "armor", "armor");
+
+// armor_selectors = (chardata.armor != null && chardata.armor.length >
0 ? chardata.armor.length : 1);
+// for (as_idx = 0; as_idx < armor_selectors; as_idx++) {
+// var name = 'armor_' + as_idx;
+// create_selector('armorpart', name, armor, "update_armor(\"" + name
+ "\")", [ "Bon", "ACP", "Note" ], true);
+// }
}

// Populates the form from char data. SHOULD ONLY BE CALLED ON load().
@@ -133,33 +135,33 @@
var domain_id = (chardata.domain_id == null ? $('#domain').val() :
chardata.domain_id);
$("#domain option[id='domain_option_" + domain_id
+ "']").attr("selected", true);

- for (id in abilities) {
+ for (var id in abilities) {
var score = (chardata.abilities == null ? 0 : chardata.abilities[id]);
$('#ability_' + abilities[id]).val(score);
// TODO - move to recalc_edit_page(chardata)?
}

- for (j in chardata.armor) {
- var char_armor = armor.first( {
- id : chardata.armor[j].armor_id
- });
- $("#armor_" + j + " option[id='armor_" + j + "_option_" + char_armor.id
+ "']").attr("selected", true);
- $("#armor_" + j + "Bon").val(
- chardata.armor[j].armor_bonus == null ? char_armor.armor_bonus :
chardata.armor[j].armor_bonus);
- $("#armor_" + j + "ACP").val(
- chardata.armor[j].armor_check_penalty == null ?
char_armor.armor_check_penalty
- : chardata.armor[j].armor_check_penalty);
- $("#armor_" + j + "Note").val(chardata.armor[j].note == null ? '' :
chardata.armor[j].note);
- }
- if (chardata.armor != null && chardata.armor.length > 0) {
- var name = 'armor_' + chardata.armor.length;
- create_selector('armorpart', name, armor, "update_armor(\"" + name
+ "\")", [ "Bon", "ACP", "Note" ], true);
- }
+// for (var j in chardata.armor) {
+// var char_armor = armor.first( {
+// id : chardata.armor[j].armor_id
+// });
+// $("#armor_" + j + " option[id='armor_" + j + "_option_" +
char_armor.id + "']").attr("selected", true);
+// $("#armor_" + j + "Bon").val(
+// chardata.armor[j].armor_bonus == null ? char_armor.armor_bonus :
chardata.armor[j].armor_bonus);
+// $("#armor_" + j + "ACP").val(
+// chardata.armor[j].armor_check_penalty == null ?
char_armor.armor_check_penalty
+// : chardata.armor[j].armor_check_penalty);
+// $("#armor_" + j + "Note").val(chardata.armor[j].note == null ? '' :
chardata.armor[j].note);
+// }
+// if (chardata.armor != null && chardata.armor.length > 0) {
+// var name = 'armor_' + chardata.armor.length;
+// create_selector('armorpart', name, armor, "update_armor(\"" + name
+ "\")", [ "Bon", "ACP", "Note" ], true);
+// }

// TODO - move to recalc_edit_page(chardata)?
if (chardata.skills != null) {
var allskills = skills.get();
- for (skill in allskills) {
+ for (var skill in allskills) {
var char_skill = chardata.skills.first( {
skill_id : allskills[skill].id
});
@@ -253,158 +255,37 @@
}

// update available weapons (for class change)
- var weapons_count = chardata.weapons != null ? chardata.weapons.length :
0;
- // add 1 for blank
- for(var j=0; j<weapons_count+1; j++) {
- curr_weapon_sel = $("select[id='weapon_" + j + "']").val();
- // create new select from available weapons
- var name = 'weapon_' + j;
- var select = create_select(name,
get_available_weapons(chardata), "update_weapon(chardata, \"" + name
+ "\")", true, "width: 185px;");
- $("select[id='weapon_" + j + "']").replaceWith(select);
- // select curr_weapon_sel
- $("select[id='weapon_" + j + "']").val(curr_weapon_sel);
- }
- populate_weapons_part(chardata.weapons);
-
+ build_data_part(chardata, "weapons", "weapon");
+ build_data_part(chardata, "armor", "armor");
+
set_links_part(chardata, 1);
sav(chardata);
}

-function update_armor(select_id) {
- var armor_id = $("select[id='" + select_id + "']").val();
- var armor_idx = select_id.substring(select_id.lastIndexOf('_') + 1);
- if (chardata.armor == null) {
- chardata.armor = [];
- }
- if (armor_idx == chardata.armor.length && armor_id != -1) {
- var name = 'armor_' + (parseInt(armor_idx) + 1);
- create_selector('armorpart', name, armor, "update_armor(\"" + name
+ "\")", [ "Bon", "ACP", "Note" ], true);
- }
- if (armor_id != -1) {
- chardata.armor[armor_idx] = {
- armor_id : armor_id
- };
- }
-
- var char_armor = armor.first( {
- id : armor_id
- });
- $("#" + select_id + "Bon").val(char_armor.armor_bonus);
- $("#" + select_id + "ACP").val(char_armor.armor_check_penalty);
- // $("#" + select_id + "Note").val(chardata.armor[armor_idx].notes);
- sav(chardata);
-}
-
-function u_w(chardata) {
-
-}
-
-function update_weapon(chardata, select_id) {
- if (chardata.weapons == null) {
- chardata.weapons = [];
- }
-
- var weapon_select = $('#' + select_id);
- var weapon_id = $('#' + select_id).val();
- var weapon_idx = select_id.substring(select_id.lastIndexOf('_') + 1);
-
- // delete if the weapon was in the list, and the value was changed
to 'Add New Weapon'
- if (chardata.weapons != null && weapon_idx < chardata.weapons.length &&
weapon_id == -1) {
- // delete the weapon, then create a new array (because the index is the
- // object key ??!?!?)
- chardata.weapons.splice(weapon_idx, 1);
- var foo = chardata.weapons.slice();
- chardata.weapons = foo;
- // remove the div
- // TODO - insert blind effect
- // $('#' + select_id + '_div').hide("blind", { direction: "up" }, 3000);
- $('#' + select_id + '_div').remove();
- // rewrite the whole weapons part
- build_weapons_part(chardata.weapons);
- }
-
- // new weapon was selected
- else if (weapon_idx == chardata.weapons.length && weapon_id != -1) {
- $('#' + select_id + '_div').removeClass('new_weapon');
- chardata.weapons.push( {
- weapon_id : weapon_id
- });
- var name = "weapon_" + (parseInt(weapon_idx) + 1);
- var weapon_html = "<div id='" + name + "_div' class='new_weapon'>";
- weapon_html += c_s('weaponspart', name,
get_available_weapons(chardata), "update_weapon(chardata, \"" + name
+ "\")", "update_weapon_override(chardata, " + i + ")",
["Name", "Att", "Dam", "Crit", "Note" ], true);
- weapon_html += "</div>";
- $('#weaponspart').append(weapon_html);
- }
-
- // weapon changed
- else if (weapon_id != -1) {
- chardata.weapons[weapon_idx] = {
- weapon_id : weapon_id
- };
- }
-
- populate_weapons_part(chardata.weapons);
-
- sav(chardata);
-}
-
-function build_weapons_part(char_weapons) {
- var char_weapons_html = "";
- // create containers for each of the character's weapons
- if (char_weapons != null) {
- for ( var i in char_weapons) {
- char_weapons_html += "<div id='weapon_" + i + "_div'>";
- var name = 'weapon_' + i;
- char_weapons_html += c_s('weaponspart', name,
get_available_weapons(chardata), "update_weapon(chardata, \"" + name
+ "\")", "update_weapon_override(chardata, " + i + ")",
["Name", "Att", "Dam",
- "Crit", "Note" ], true);
- char_weapons_html += "</div>";
- }
- }
- $('#char_weapons').html(char_weapons_html);
-
- // create an empty
- var name = 'weapon_new';
- var new_weapon_select = create_select(name,
get_available_weapons(chardata), "update_weapon(chardata, \"" + name
+ "\")", true, "width: 185px;");
- $('#new_weapon').html(new_weapon_select);
-}
-
-function populate_weapons_part(char_weapons) {
- for (var j in char_weapons) {
- var weapon = weapons.first( {
- id : char_weapons[j].weapon_id
- });
- $("#weapon_" + j + " option[id='weapon_" + j + "_option_" + weapon.id
+ "']").attr("selected", true);
- // TODO - this part might be better in recalc
- $("#weapon_" + j + "Dam").val(char_weapons[j].damage == null ?
weapon.damage : char_weapons[j].damage);
- $("#weapon_" + j + "Crit").val(char_weapons[j].critical == null ?
weapon.critical : char_weapons[j].critical);
- $("#weapon_" + j + "Note").val(char_weapons[j].note == null ? '' :
char_weapons[j].note);
- }
-}
-function update_weapon_override(chardata, weapon_index) {
- // TODO - can I do this with some kind of eval?
- var name = $("#weapon_" + weapon_index + "Name").val();
- if(name != null && name.length > 0) {
- chardata.weapons[weapon_index].name = name;
- }
- var att = $("#weapon_" + weapon_index + "Att").val();
- if(att != null && att.length > 0) {
- chardata.weapons[weapon_index].attack = att;
- }
- var dam = $("#weapon_" + weapon_index + "Dam").val();
- if(dam != null && dam.length > 0) {
- chardata.weapons[weapon_index].damage = dam;
- }
- var crit = $("#weapon_" + weapon_index + "Crit").val();
- if(crit != null && crit.length > 0) {
- chardata.weapons[weapon_index].critical = crit;
- }
- var note = $("#weapon_" + weapon_index + "Note").val();
- if(note != null) {
- chardata.weapons[weapon_index].note = note;
- }
-
- sav(chardata);
-}
+//function update_armor(select_id) {
+// var armor_id = $("select[id='" + select_id + "']").val();
+// var armor_idx = select_id.substring(select_id.lastIndexOf('_') + 1);
+// if (chardata.armor == null) {
+// chardata.armor = [];
+// }
+// if (armor_idx == chardata.armor.length && armor_id != -1) {
+// var name = 'armor_' + (parseInt(armor_idx) + 1);
+// create_selector('armorpart', name, armor, "update_armor(\"" + name
+ "\")", [ "Bon", "ACP", "Note" ], true);
+// }
+// if (armor_id != -1) {
+// chardata.armor[armor_idx] = {
+// armor_id : armor_id
+// };
+// }
+//
+// var char_armor = armor.first( {
+// id : armor_id
+// });
+// $("#" + select_id + "Bon").val(char_armor.armor_bonus);
+// $("#" + select_id + "ACP").val(char_armor.armor_check_penalty);
+// // $("#" + select_id + "Note").val(chardata.armor[armor_idx].notes);
+// sav(chardata);
+//}

function update_race_mods() {
var race = races.first( {
@@ -418,59 +299,19 @@
}
}

-function c_s(part_id, name, items, onchange_action, onblur_action,
addl_data, include_empty) {
- var addl_data = (addl_data == null ? [] : addl_data);
- var table_html = "<table border='0'><tr>";
- var select = create_select(name, items, onchange_action,
include_empty, "width: 185px;");
- table_html += "<td colspan='2'>" + select + "</td></tr>";
- for (i in addl_data) {
- table_html += "<tr><td>" + addl_data[i] + "</td><td><input id='" + name
+ addl_data[i]
- + "' type='text' onblur='" + onblur_action + "' value='' /></td></tr>";
- }
- return table_html + "</table>";
-}
-
-function create_selector(part_id, name, table, onchange_action, addl_data,
include_empty) {
- var addl_data = (addl_data == null ? [] : addl_data);
- var table_html = "<table id='" + name + "' style='display: none'
border='0'><tr>";
- var select = create_select(name, table.get(), onchange_action,
include_empty, "width: 185px;");
- table_html += "<td colspan='2'>" + select + "</td></tr>";
- for (i in addl_data) {
- table_html += "<tr><td>" + addl_data[i] + "</td><td><input id='" + name
+ addl_data[i]
- + "' type='text' value='' /></td></tr>";
- }
- table_html += "</table>";
- $('#' + part_id).append(table_html);
- $('table#' + name).show();
-}
-
-function get_available_weapons(chardata) {
- var simple_weapons = weapons.get({ category: "simple" });
- var exotic_weapons = [];
- var martial_weapons = [];
- if(chardata.feats) {
- var exotic_weapons_feat = chardata.feats.first({ feat_id: 24 });
- if(exotic_weapons_feat) {
- for(var i in exotic_weapons_feat.multi) {
- exotic_weapons.push(feats.first({ id: exotic_weapons_feat.multi[i] }));
- }
- }
- }
- // check class feat
- if(is_class_feat($('#clazz').val(), 43, $('#xp').val())) {
- martial_weapons = weapons.get({ category: "martial" });
- } else if(chardata.feats){
- var martial_weapons_feat = chardata.feats.first({ feat_id: 43 });
- if(martial_weapons_feat) {
- for(var i in martial_weapons_feat.multi) {
- martial_weapons.push(feats.first({ id: martial_weapons_feat.multi[i]
}));
- }
- }
- }
-
- var avail_weapons =
simple_weapons.concat(martial_weapons).concat(exotic_weapons);
- return avail_weapons.sort(function(a,b){ return a.name <= b.name ? -1 :
1; });
-}
+//function create_selector(part_id, name, table, onchange_action,
addl_data, include_empty) {
+// var addl_data = (addl_data == null ? [] : addl_data);
+// var table_html = "<table id='" + name + "' style='display: none'
border='0'><tr>";
+// var select = create_select(name, table.get(), onchange_action,
include_empty, "width: 185px;");
+// table_html += "<td colspan='2'>" + select + "</td></tr>";
+// for (i in addl_data) {
+// table_html += "<tr><td>" + addl_data[i] + "</td><td><input id='" +
name + addl_data[i]
+// + "' type='text' value='' /></td></tr>";
+// }
+// table_html += "</table>";
+// $('#' + part_id).append(table_html);
+// $('table#' + name).show();
+//}

function update_log(chardata) {
if (chardata.xp_log == null) {
=======================================
--- /trunk/charmgrjs/main.js Fri Sep 25 13:44:22 2009
+++ /trunk/charmgrjs/main.js Sat Oct 3 13:23:43 2009
@@ -175,7 +175,7 @@

// weapons
var weapon_html = "";
- for (j in chardata.weapons) {
+ for (var j in chardata.weapons) {
var weapon_data = weapons.first( {
id : chardata.weapons[j]['weapon_id']
});
@@ -196,7 +196,7 @@

// armor
var armor_html = "";
- for (j in chardata.armor) {
+ for (var j in chardata.armor) {
var armor_data = armor.first( {
id : chardata.armor[j]['armor_id']
});
@@ -328,7 +328,7 @@
id : chardata.weapons[j].weapon_id
});
$('#weapon_' + j + '_name').text(chardata.weapons[j].name != null ?
chardata.weapons[j].name + " (" + weapon_data.name + ")" :
weapon_data.name);
- $('#weapon_' + j + '_crit').text(calc_critical(weapon_data.critical,
chardata.weapons[j], chardata.feats));
+ $('#weapon_' + j + '_crit').text(calc_critical(weapon_data.crit,
chardata.weapons[j], chardata.feats));
$('#weapon_' + j + '_note').text(chardata.weapons[j].note);
}

@@ -559,7 +559,7 @@
}

function calc_critical(weapon_critical, char_weapon, char_feats) {
- var critical = char_weapon.critical == null ? weapon_critical :
char_weapon.critical;
+ var critical = char_weapon.crit == null ? weapon_critical :
char_weapon.crit;
var multiplier = critical.substring(critical.indexOf('x'));
// check for improved critical
var improved_crit = char_feats == null ? false : char_feats.first({
feat_id: 106 });
=======================================
--- /trunk/charmgrjs/weapons.js Wed Sep 9 10:39:52 2009
+++ /trunk/charmgrjs/weapons.js Sat Oct 3 13:23:43 2009
@@ -6,13 +6,14 @@
$('#' + name + index + 'crit').value = weapon.critical;
}

+var weapon_edit_data = ["name", "att", "dam", "crit", "note" ];
var weapons = new TAFFY( [ {
id : 0,
name : "Axe, orc double",
category: "exotic",
subcategory: "two-handed",
- damage : "1d8/1d8",
- critical : "x3",
+ dam : "1d8/1d8",
+ crit : "x3",
range : "-",
weight : "25 lb.",
type : "Slashing"
@@ -21,8 +22,8 @@
name : "Axe, throwing",
category: "martial",
subcategory: "light",
- damage : "1d6",
- critical : "x2",
+ dam : "1d6",
+ crit : "x2",
range : "10 ft.",
weight : "4 lb.",
type : "Slashing"
@@ -31,8 +32,8 @@
name : "Battleaxe",
category: "martial",
subcategory: "one-handed",
- damage : "1d8",
- critical : "x3",
+ dam : "1d8",
+ crit : "x3",
range : "-",
weight : "7 lb.",
type : "Slashing"
@@ -41,8 +42,8 @@
name : "Chain, spiked",
category: "exotic",
subcategory: "two-handed",
- damage : "2d4",
- critical : "x2",
+ dam : "2d4",
+ crit : "x2",
range : "-",
weight : "15 lb.",
type : "Piercing"
@@ -51,8 +52,8 @@
name : "Club",
category: "simple",
subcategory: "one-handed",
- damage : "1d6",
- critical : "x2",
+ dam : "1d6",
+ crit : "x2",
range : "10 ft.",
weight : "3 lb.",
type : "Bludgeoning"
@@ -61,8 +62,8 @@
name : "Crossbow, hand",
category: "exotic",
subcategory: "ranged",
- damage : "1d4",
- critical : "19-20/ x 2",
+ dam : "1d4",
+ crit : "19-20/ x 2",
range : "30 ft.",
weight : "3 lb.",
type : "Piercing"
@@ -71,8 +72,8 @@
name : "Crossbow, heavy",
category: "simple",
subcategory: "ranged",
- damage : "1d10",
- critical : "19-20/x2",
+ dam : "1d10",
+ crit : "19-20/x2",
range : "120 ft.",
weight : "9 lb.",
type : "Piercing"
@@ -81,8 +82,8 @@
name : "Crossbow, light",
category: "simple",
subcategory: "ranged",
- damage : "1d8",
- critical : "19-20/x2",
+ dam : "1d8",
+ crit : "19-20/x2",
range : "80 ft.",
weight : "6 lb.",
type : "Piercing"
@@ -91,8 +92,8 @@
name : "Crossbow, repeating",
category: "exotic",
subcategory: "ranged",
- damage : "1d8",
- critical : "19-20/ x 2",
+ dam : "1d8",
+ crit : "19-20/ x 2",
range : "80 ft.",
weight : "16 lb.",
type : "Piercing"
@@ -101,8 +102,8 @@
name : "Dagger",
category: "simple",
subcategory: "light",
- damage : "1d4",
- critical : "19-20/x2",
+ dam : "1d4",
+ crit : "19-20/x2",
range : "10 ft.",
weight : "1 lb.",
type : "Piercing"
@@ -111,8 +112,8 @@
name : "Dagger, punching",
category: "simple",
subcategory: "light",
- damage : "1d4",
- critical : "x3",
+ dam : "1d4",
+ crit : "x3",
range : "-",
weight : "2 lb.",
type : "Piercing"
@@ -121,8 +122,8 @@
name : "Dart",
category: "simple",
subcategory: "ranged",
- damage : "1d4",
- critical : "x2",
+ dam : "1d4",
+ crit : "x2",
range : "20 ft.",
weight : "1/2 lb.",
type : "Piercing"
@@ -131,8 +132,8 @@
name : "Falchion",
category: "martial",
subcategory: "two-handed",
- damage : "2d4",
- critical : "18-20/x2",
+ dam : "2d4",
+ crit : "18-20/x2",
range : "-",
weight : "16 lb.",
type : "Slashing"
@@ -141,8 +142,8 @@
name : "Flail, dire",
category: "exotic",
subcategory: "two-handed",
- damage : "1d8/1d8",
- critical : "x2",
+ dam : "1d8/1d8",
+ crit : "x2",
range : "-",
weight : "20 lb.",
type : "Bludgeoning"
@@ -151,8 +152,8 @@
name : "Flail, heavy",
category: "martial",
subcategory: "two-handed",
- damage : "1d10",
- critical : "19-20/x2",
+ dam : "1d10",
+ crit : "19-20/x2",
range : "-",
weight : "20 lb.",
type : "Bludgeoning"
@@ -161,8 +162,8 @@
name : "Flail, light",
category: "martial",
subcategory: "one-handed",
- damage : "1d8",
- critical : "x2",
+ dam : "1d8",
+ crit : "x2",
range : "-",
weight : "5 lb.",
type : "Bludgeoning"
@@ -171,8 +172,8 @@
name : "Gauntlet",
category: "simple",
subcategory: "unarmed",
- damage : "*",
- critical : "*",
+ dam : "*",
+ crit : "*",
range : "-",
weight : "2 lb.",
type : "Bludgeoning"
@@ -181,8 +182,8 @@
name : "Gauntlet, spiked",
category: "simple",
subcategory: "light",
- damage : "1d4",
- critical : "x2",
+ dam : "1d4",
+ crit : "x2",
range : "-",
weight : "2 lb.",
type : "Piercing"
@@ -191,8 +192,8 @@
name : "Glaive",
category: "martial",
subcategory: "two-handed",
- damage : "1d10",
- critical : "x3",
+ dam : "1d10",
+ crit : "x3",
range : "-",
weight : "15 lb.",
type : "Slashing"
@@ -201,8 +202,8 @@
name : "Greataxe",
category: "martial",
subcategory: "two-handed",
- damage : "1d12",
- critical : "x3",
+ dam : "1d12",
+ crit : "x3",
range : "-",
weight : "20 lb.",
type : "Slashing"
@@ -211,8 +212,8 @@
name : "Greatclub",
category: "martial",
subcategory: "two-handed",
- damage : "1d10",
- critical : "x2",
+ dam : "1d10",
+ crit : "x2",
range : "-",
weight : "10 lb.",
type : "Bludgeoning"
@@ -221,8 +222,8 @@
name : "Greatsword",
category: "martial",
subcategory: "two-handed",
- damage : "2d6",
- critical : "19-20/x2",
+ dam : "2d6",
+ crit : "19-20/x2",
range : "-",
weight : "15 lb.",
type : "Slashing"
@@ -231,8 +232,8 @@
name : "Guisarme",
category: "martial",
subcategory: "two-handed",
- damage : "2d4",
- critical : "x3",
+ dam : "2d4",
+ crit : "x3",
range : "-",
weight : "15 lb.",
type : "Slashing"
@@ -241,8 +242,8 @@
name : "Halberd",
category: "martial",
subcategory: "two-handed",
- damage : "1d10",
- critical : "x3",
+ dam : "1d10",
+ crit : "x3",
range : "-",
weight : "15 lb.",
type : "Piercing and slashing"
@@ -251,8 +252,8 @@
name : "Halfspear",
category: "",
subcategory: "",
- damage : "1d6",
- critical : "x3",
+ dam : "1d6",
+ crit : "x3",
range : "20 ft.",
weight : "3 lb.",
type : "Piercing"
@@ -261,8 +262,8 @@
name : "Hammer, gnome hooked",
category: "exotic",
subcategory: "two-handed",
- damage : "1d6/1d4",
- critical : "x3/x4",
+ dam : "1d6/1d4",
+ crit : "x3/x4",
range : "-",
weight : "6 lb.",
type : "Bludgeoning and piercing"
@@ -271,8 +272,8 @@
name : "Hammer, light",
category: "martial",
subcategory: "light",
- damage : "1d4",
- critical : "x2",
+ dam : "1d4",
+ crit : "x2",
range : "20 ft.",
weight : "2 lb.",
type : "Bludgeoning"
@@ -281,8 +282,8 @@
name : "Handaxe",
category: "martial",
subcategory: "light",
- damage : "1d6",
- critical : "x3",
+ dam : "1d6",
+ crit : "x3",
range : "-",
weight : "5 lb.",
type : "Slashing"
@@ -291,8 +292,8 @@
name : "Javelin",
category: "simple",
subcategory: "ranged",
- damage : "1d6",
- critical : "x2",
+ dam : "1d6",
+ crit : "x2",
range : "30 ft.",
weight : "2 lb.",
type : "Piercing"
@@ -301,8 +302,8 @@
name : "Kama",
category: "exotic",
subcategory: "light",
- damage : "1d6",
- critical : "x2",
+ dam : "1d6",
+ crit : "x2",
range : "-",
weight : "2 lb.",
type : "Slashing"
@@ -311,8 +312,8 @@
name : "Kama, halfling",
category: "",
subcategory: "",
- damage : "1d4",
- critical : "x2",
+ dam : "1d4",
+ crit : "x2",
range : "-",
weight : "1 lb.",
type : "Slashing"
@@ -321,8 +322,8 @@
name : "Kukri",
category: "martial",
subcategory: "light",
- damage : "1d4",
- critical : "18-20/x2",
+ dam : "1d4",
+ crit : "18-20/x2",
range : "-",
weight : "3 lb.",
type : "Slashing"
@@ -331,8 +332,8 @@
name : "Lance, heavy",
category: "martial",
subcategory: "two-handed",
- damage : "1d8",
- critical : "x3",
+ dam : "1d8",
+ crit : "x3",
range : "-",
weight : "10 lb.",
type : "Piercing"
@@ -341,8 +342,8 @@
name : "Lance, light",
category: "martial",
subcategory: "two-handed",
- damage : "1d6",
- critical : "x3",
+ dam : "1d6",
+ crit : "x3",
range : "-",
weight : "5 lb.",
type : "Piercing"
@@ -351,8 +352,8 @@
name : "Longbow",
category: "martial",
subcategory: "ranged",
- damage : "1d8",
- critical : "x3",
+ dam : "1d8",
+ crit : "x3",
range : "100 ft.",
weight : "3 lb.",
type : "Piercing"
@@ -361,8 +362,8 @@
name : "Longbow, composite",
category: "martial",
subcategory: "ranged",
- damage : "1d8",
- critical : "x3",
+ dam : "1d8",
+ crit : "x3",
range : "110 ft.",
weight : "3 lb.",
type : "Piercing"
@@ -371,8 +372,8 @@
name : "Longspear",
category: "simple",
subcategory: "two-handed",
- damage : "1d8",
- critical : "x3",
+ dam : "1d8",
+ crit : "x3",
range : "-",
weight : "9 lb.",
type : "Piercing"
@@ -381,8 +382,8 @@
name : "Longsword",
category: "martial",
subcategory: "one-handed",
- damage : "1d8",
- critical : "19-20/x2",
+ dam : "1d8",
+ crit : "19-20/x2",
range : "-",
weight : "4 lb.",
type : "Slashing"
@@ -391,8 +392,8 @@
name : "Mace, heavy",
category: "simple",
subcategory: "one-handed",
- damage : "1d8",
- critical : "x2",
+ dam : "1d8",
+ crit : "x2",
range : "-",
weight : "12 lb.",
type : "Bludgeoning"
@@ -401,8 +402,8 @@
name : "Mace, light",
category: "simple",
subcategory: "one-handed",
- damage : "1d6",
- critical : "x2",
+ dam : "1d6",
+ crit : "x2",
range : "-",
weight : "6 lb.",
type : "Bludgeoning"
@@ -411,8 +412,8 @@
name : "Morningstar",
category: "simple",
subcategory: "light",
- damage : "1d8",
- critical : "x2",
+ dam : "1d8",
+ crit : "x2",
range : "-",
weight : "8 lb.",
type : "Bludgeoning and piercing"
@@ -421,8 +422,8 @@
name : "Net",
category: "exotic",
subcategory: "ranged",
- damage : "*",
- critical : "*",
+ dam : "*",
+ crit : "*",
range : "10 ft.",
weight : "10 lb.",
type : "*"
@@ -431,8 +432,8 @@
name : "Nunchaku",
category: "exotic",
subcategory: "light",
- damage : "1d6",
- critical : "x2",
+ dam : "1d6",
+ crit : "x2",
range : "-",
weight : "2 lb.",
type : "Bludgeoning"
@@ -441,8 +442,8 @@
name : "Nunchaku, halfling",
category: "",
subcategory: "",
- damage : "1d4",
- critical : "x2",
+ dam : "1d4",
+ crit : "x2",
range : "-",
weight : "1 lb.",
type : "Bludgeoning"
@@ -451,8 +452,8 @@
name : "Pick, heavy",
category: "martial",
subcategory: "one-handed",
- damage : "1d6",
- critical : "x4",
+ dam : "1d6",
+ crit : "x4",
range : "-",
weight : "6 lb.",
type : "Piercing"
@@ -461,8 +462,8 @@
name : "Pick, light",
category: "martial",
subcategory: "light",
- damage : "1d4",
- critical : "x4",
+ dam : "1d4",
+ crit : "x4",
range : "-",
weight : "4 lb.",
type : "Piercing"
@@ -471,8 +472,8 @@
name : "Quarterstaff",
category: "simple",
subcategory: "two-handed",
- damage : "1d6/1d6",
- critical : "x2",
+ dam : "1d6/1d6",
+ crit : "x2",
range : "-",
weight : "4 lb.",
type : "Bludgeoning"
@@ -481,8 +482,8 @@
name : "Ranseur",
category: "martial",
subcategory: "two-handed",
- damage : "2d4",
- critical : "x3",
+ dam : "2d4",
+ crit : "x3",
range : "-",
weight : "15 lb.",
type : "Piercing"
@@ -491,8 +492,8 @@
name : "Rapier",
category: "martial",
subcategory: "one-handed",
- damage : "1d6",
- critical : "18-20/x2",
+ dam : "1d6",
+ crit : "18-20/x2",
range : "-",
weight : "3 lb.",
type : "Piercing"
@@ -501,8 +502,8 @@
name : "Sap",
category: "martial",
subcategory: "light",
- damage : "1d6",
- critical : "x2",
+ dam : "1d6",
+ crit : "x2",
range : "-",
weight : "3 lb.",
type : "Bludgeoning"
@@ -511,8 +512,8 @@
name : "Scimitar",
category: "martial",
subcategory: "one-handed",
- damage : "1d6",
- critical : "18-20/x2",
+ dam : "1d6",
+ crit : "18-20/x2",
range : "-",
weight : "4 lb.",
type : "Slashing"
@@ -521,8 +522,8 @@
name : "Scythe",
category: "martial",
subcategory: "two-handed",
- damage : "2d4",
- critical : "x4",
+ dam : "2d4",
+ crit : "x4",
range : "-",
weight : "12 lb.",
type : "Piercing and slashing"
@@ -531,8 +532,8 @@
name : "Shortbow",
category: "martial",
subcategory: "ranged",
- damage : "1d6",
- critical : "x3",
+ dam : "1d6",
+ crit : "x3",
range : "60 ft.",
weight : "2 lb.",
type : "Piercing"
@@ -541,8 +542,8 @@
name : "Shortbow, composite",
category: "martial",
subcategory: "ranged",
- damage : "1d6",
- critical : "x3",
+ dam : "1d6",
+ crit : "x3",
range : "70 ft.",
weight : "2 lb.",
type : "Piercing"
@@ -551,8 +552,8 @@
name : "Shortspear",
category: "simple",
subcategory: "one-handed",
- damage : "1d8",
- critical : "x3",
+ dam : "1d8",
+ crit : "x3",
range : "20 ft.",
weight : "5 lb.",
type : "Piercing"
@@ -561,8 +562,8 @@
name : "Shuriken",
category: "exotic",
subcategory: "ranged",
- damage : 1,
- critical : "x 2",
+ dam : 1,
+ crit : "x 2",
range : "10 ft.",
weight : "1/10 lb.",
type : "Piercing"
@@ -571,8 +572,8 @@
name : "Siangham",
category: "exotic",
subcategory: "light",
- damage : "1d6",
- critical : "x2",
+ dam : "1d6",
+ crit : "x2",
range : "-",
weight : "1 lb.",
type : "Piercing"
@@ -581,8 +582,8 @@
name : "Siangham, halfling",
category: "exotic",
subcategory: "light",
- damage : "1d4",
- critical : "x2",
+ dam : "1d4",
+ crit : "x2",
range : "-",
weight : "1 lb.",
type : "Piercing"
@@ -591,8 +592,8 @@
name : "Sickle",
category: "simple",
subcategory: "light",
- damage : "1d6",
- critical : "x2",
+ dam : "1d6",
+ crit : "x2",
range : "-",
weight : "3 lb.",
type : "Slashing"
@@ -601,8 +602,8 @@
name : "Sling",
category: "simple",
subcategory: "ranged",
- damage : "1d4",
- critical : "x2",
+ dam : "1d4",
+ crit : "x2",
range : "50 ft.",
weight : "0 lb.",
type : "Bludgeoning"
@@ -611,8 +612,8 @@
name : "Strike, unarmed (Medium-size being)",
category: "simple",
subcategory: "unarmed",
- damage : "1d3",
- critical : "x2",
+ dam : "1d3",
+ crit : "x2",
range : "-",
weight : "-",
type : "Bludgeoning"
@@ -621,8 +622,8 @@
name : "Strike, unarmed (Small being)",
category: "",
subcategory: "",
- damage : "1d2",
- critical : "x2",
+ dam : "1d2",
+ crit : "x2",
range : "-",
weight : "-",
type : "Bludgeoning"
@@ -631,8 +632,8 @@
name : "Sword, bastard",
category: "exotic",
subcategory: "one-handed",
- damage : "1d10",
- critical : "19-20/x2",
+ dam : "1d10",
+ crit : "19-20/x2",
range : "-",
weight : "10 lb.",
type : "Slashing"
@@ -641,8 +642,8 @@
name : "Sword, short",
category: "martial",
subcategory: "light",
- damage : "1d6",
- critical : "19-20/x2",
+ dam : "1d6",
+ crit : "19-20/x2",
range : "-",
weight : "3 lb.",
type : "Piercing"
@@ -651,8 +652,8 @@
name : "Sword, two-bladed",
category: "exotic",
subcategory: "two-handed",
- damage : "1d8/1d8",
- critical : "19-20/x2",
+ dam : "1d8/1d8",
+ crit : "19-20/x2",
range : "-",
weight : "15 lb.",
type : "Slashing"
@@ -661,8 +662,8 @@
name : "Trident",
category: "martial",
subcategory: "one-handed",
- damage : "1d8",
- critical : "x2",
+ dam : "1d8",
+ crit : "x2",
range : "10 ft.",
weight : "5 lb.",
type : "Piercing"
@@ -671,8 +672,8 @@
name : "Urgrosh, dwarven",
category: "exotic",
subcategory: "two-handed",
- damage : "1d8/1d6",
- critical : "x3",
+ dam : "1d8/1d6",
+ crit : "x3",
range : "-",
weight : "15 lb.",
type : "Slashing and piercing"
@@ -681,8 +682,8 @@
name : "Waraxe, dwarven",
category: "exotic",
subcategory: "one-handed",
- damage : "1d10",
- critical : "x3",
+ dam : "1d10",
+ crit : "x3",
range : "-",
weight : "15 lb.",
type : "Slashing"
@@ -691,8 +692,8 @@
name : "Warhammer",
category: "martial",
subcategory: "one-handed",
- damage : "1d8",
- critical : "x3",
+ dam : "1d8",
+ crit : "x3",
range : "-",
weight : "8 lb.",
type : "Bludgeoning"
@@ -701,8 +702,8 @@
name : "Whip",
category: "exotic",
subcategory: "one-handed",
- damage : "1d2",
- critical : "x 2",
+ dam : "1d2",
+ crit : "x 2",
range : "15 ft.",
weight : "2 lb.",
type : "Slashing"

Reply all
Reply to author
Forward
0 new messages