Initial Release of IGNCore version 2.5

This commit is contained in:
2021-08-09 13:18:56 +02:00
commit a83d98c47e
910 changed files with 224171 additions and 0 deletions
+404
View File
@@ -0,0 +1,404 @@
{
"ai_armor": {
"en_US": [
"<highlight>Normal Armor:</highlight>\n",
" - {strong}\n",
" - {supple}\n",
" - {enduring}\n",
" - {observant}\n",
" - {arithmetic}\n",
" - {spiritual}\n\n",
"<highlight>Combined Armor:</highlight>\n",
" - {cc}\n",
" - {cm}\n",
" - {co}\n",
" - {cp}\n",
" - {css}\n"
],
"de_DE": [
"<highlight>Normale Rüstung:</highlight>\n",
" - {strong}\n",
" - {supple}\n",
" - {enduring}\n",
" - {observant}\n",
" - {arithmetic}\n",
" - {spiritual}\n\n",
"<highlight>Kombinierte Rüstung:</highlight>\n",
" - {cc}\n",
" - {cm}\n",
" - {co}\n",
" - {cp}\n",
" - {css}\n"
]
},
"ai_armor_title": {
"en_US": "Alien Armor",
"de_DE": "Alien Rüstung"
},
"ai_armor_ts_title": {
"en_US": "Building process for QL {ql} {type}",
"de_DE": "Rezept für die {type} - QL {ql}"
},
"ai_armor_ts": {
"en_US": [
"Note: All tradeskill processes are based on the lowest QL items usable.\n\n",
"<header2>You need the following items to build {armor_type} Armor:</header2>\n",
"- {text_viralbots} (QL{vb_ql})\n",
"- {text_step1_tool}\n",
"- {text_solid_clump} (QL{ql})\n",
"- {text_vb_bot} (QL{vb_ql})\n\n",
"<header2>Step 1</header2>\n",
"<tab>{icon_viralbots}<tab>+<tab>{icon_step1_tool}<tab>=<tab>{icon_memory_wiped_viralbots}\n\n",
"<tab>(QL{vb_ql})<tab><tab><tab><tab><tab><tab><tab>(QL{vb_ql})\n\n",
"<tab><tab>{text_viralbots} (QL{vb_ql}) (<highlight>Drops from Alien City Generals</highlight>)\n",
" + <tab>{text_step1_tool}\n",
" = <tab>{text_memory_wiped_viralbots} (QL{vb_ql})\n",
"<highlight>Required Skills:</highlight>\n",
"- {step1_CL} Computer Literacy\n",
"- {step1_NP} Nano Programming\n\n",
"<header2>Step 2</header2>\n",
"<tab>{icon_NPI}<tab>+<tab>{icon_memory_wiped_viralbots}<tab>=<tab>{icon_formatted_viralbots}\n\n",
"<tab><tab><tab><tab> <tab>(QL{vb_ql})<tab><tab><tab>(QL{vb_ql})\n\n",
"<tab><tab>{text_NPI} (<highlight>Can be bought in General Shops</highlight>)\n",
" + <tab>{text_memory_wiped_viralbots} (QL{vb_ql})\n",
" = <tab>{text_formatted_viralbots} (QL{vb_ql})\n",
"<highlight>Required Skills:</highlight>\n",
"- {step2_CL} Computer Literacy\n",
"- {step2_NP} Nano Programming\n\n",
"<header2>Step 3</header2>\n",
"<tab>{icon_structural_analyser}<tab>+<tab>{icon_solid_clump}<tab>=<tab>{icon_mutated_material}<tab><highlight>OR</highlight><tab>{icon_pristine_material} \n\n",
"<tab><tab> <tab><tab><tab>(QL{ql})<tab><tab><tab>(QL{ql})<tab><tab> (QL{ql})\n\n",
"<tab><tab>{text_structural_analyser}\n",
" + <tab>{text_solid_clump} (QL{ql})\n",
" = <tab>{text_mutated_material} (QL{ql})<tab><highlight>\n<tab><tab>OR</highlight><tab>{text_pristine_material} (QL{ql})\n",
"<highlight>Required Skills:</highlight>\n",
"- {step3_chem} Chemistry (Both require the same amount)\n\n",
"<header2>Step 4</header2>\n",
"<tab>{icon_mutated_material}<tab><highlight>OR</highlight><tab>{icon_pristine_material}<tab>+<tab>{icon_bazzit_generic_nano_solvent}<tab>=<tab>{icon_dna_soup} \n\n",
"<tab>(QL{ql})<tab> <tab> (QL{ql})<tab> <tab><tab><tab><tab><tab> (QL{ql})\n\n",
"<tab><tab>{text_mutated_material} (QL{ql})<tab><br><tab><tab><highlight>OR</highlight><tab>{text_pristine_material} (QL{ql})\n",
" + <tab>{text_bazzit_generic_nano_solvent}\n",
" = <tab>{text_dna_soup} (QL{ql})\n",
"<highlight>Required Skills:</highlight>\n",
"- {chem_prist} Chemistry(for Pristine)\n",
"- {chem_mutat} Chemistry(for Mutated)\n\n",
"<header2>Step 5</header2>\n",
"<tab>{icon_dna_soup}<tab>+<tab>{icon_human_dna}<tab>=<tab>{icon_dna_cocktail} \n\n",
"<tab>(QL{ql})<tab> <tab><tab><tab><tab><tab><tab>(QL{ql})\n\n",
"<tab><tab>{text_dna_soup} (QL{ql})\n",
" + <tab>{text_human_dna}\n",
" = <tab>{text_dna_cocktail} (QL{ql})\n",
"<highlight>Required Skills:</highlight>\n",
"- {pharma} Pharma Tech\n\n",
"<header2>Step 6</header2>\n",
"<tab>{icon_formatted_viralbots}<tab>+<tab>{icon_dna_cocktail}<tab>=<tab>{icon_formatted_viralbot_solution} \n\n",
"<tab>(QL{vb_ql})<tab> <tab>(QL{ql})<tab> <tab>(QL{ql})\n\n",
"<tab><tab>{text_formatted_viralbots} (QL{vb_ql})\n",
" + <tab>{text_dna_cocktail} (QL{ql})\n",
" = <tab>{text_formatted_viralbot_solution} (QL{ql})\n",
"<highlight>Required Skills:</highlight>\n",
"- {pharma} Pharma Tech\n\n",
"<header2>Step 7</header2>\n",
"<tab>{icon_formatted_viralbot_solution}<tab>+<tab>{icon_basic_fashion_vest}<tab>=<tab>{icon_formatted_viralbot_vest} \n\n",
"<tab>(QL{ql})<tab><tab><tab><tab><tab><tab><tab>(QL{ql})\n\n",
"<tab><tab>{text_formatted_viralbot_solution} (QL{ql})\n",
" + <tab>{text_basic_fashion_vest}\n",
" = <tab>{text_formatted_viralbot_vest} (QL{ql})\n",
"<highlight>Required Skills:</highlight>\n",
"- {pharma} Pharma Tech\n\n",
"<header2>Step 8</header2>\n",
"<tab>{icon_vb_bot}<tab>+<tab>{icon_formatted_viralbot_vest}<tab>=<tab>{icon_armor}\n",
"<tab>(QL{vb_ql})<tab> <tab>(QL{ql})<tab> <tab>(QL{ql})\n\n",
"<tab><tab>{text_vb_bot} (QL{vb_ql}) (<highlight>Rare Drop off Alien City Generals</highlight>)\n",
" + <tab>{text_formatted_viralbot_vest} (QL{ql})\n",
" = <tab>{text_armor} (QL{ql})\n",
"<highlight>Required Skills:</highlight>\n",
"- {psycho} Psychology"
],
"de_DE": [
"Hinweis: Bei Allen Tradeskill Vorgängen ist jeweils das minimale nötige QL angegeben, welches für das gewünschte Ergebnis notwendig ist.\n\n",
"<header2>Zum bauen der {armor_type} Armor werden folgende Items benötigt:</header2>\n",
"- {text_viralbots} (QL{vb_ql})\n",
"- {text_step1_tool}\n",
"- {text_solid_clump} (QL{ql})\n",
"- {text_vb_bot} (QL{vb_ql})\n\n",
"<header2>Teil 1</header2>\n",
"<tab>{icon_viralbots}<tab>+<tab>{icon_step1_tool}<tab>=<tab>{icon_memory_wiped_viralbots}\n\n",
"<tab>(QL{vb_ql})<tab><tab><tab><tab><tab><tab><tab>(QL{vb_ql})\n\n",
"<tab><tab>{text_viralbots} (QL{vb_ql}) (<highlight>Droppt von Alien City Generals</highlight>)\n",
" + <tab>{text_step1_tool}\n",
" = <tab>{text_memory_wiped_viralbots} (QL{vb_ql})\n",
"<highlight>Notwendige Skills:</highlight>\n",
"- {step1_CL} Computer Literacy\n",
"- {step1_NP} Nano Programming\n\n",
"<header2>Teil 2</header2>\n",
"<tab>{icon_NPI}<tab>+<tab>{icon_memory_wiped_viralbots}<tab>=<tab>{icon_formatted_viralbots}\n\n",
"<tab><tab><tab><tab> <tab>(QL{vb_ql})<tab><tab><tab>(QL{vb_ql})\n\n",
"<tab><tab>{text_NPI} (<highlight>Kann in General Shops gekauft werden</highlight>)\n",
" + <tab>{text_memory_wiped_viralbots} (QL{vb_ql})\n",
" = <tab>{text_formatted_viralbots} (QL{vb_ql})\n",
"<highlight>Notwendige Skills:</highlight>\n",
"- {step2_CL} Computer Literacy\n",
"- {step2_NP} Nano Programming\n\n",
"<header2>Teil 3</header2>\n",
"<tab>{icon_structural_analyser}<tab>+<tab>{icon_solid_clump}<tab>=<tab>{icon_mutated_material}<tab><highlight>ODER</highlight><tab>{icon_pristine_material} \n\n",
"<tab><tab> <tab><tab><tab>(QL{ql})<tab><tab><tab>(QL{ql})<tab><tab> (QL{ql})\n\n",
"<tab><tab>{text_structural_analyser}\n",
" + <tab>{text_solid_clump} (QL{ql})\n",
" = <tab>{text_mutated_material} (QL{ql})<tab>\n<tab><tab><highlight>ODER</highlight><tab>{text_pristine_material} (QL{ql})\n",
"<highlight>Notwendige Skills:</highlight>\n",
"- {step3_chem} Chemistry (Pristine/Mutated haben die gleichen Skill Anforderungen)\n\n",
"<header2>Teil 4</header2>\n",
"<tab>{icon_mutated_material}<tab><highlight>ODER</highlight><tab>{icon_pristine_material}<tab>+<tab>{icon_bazzit_generic_nano_solvent}<tab>=<tab>{icon_dna_soup} \n\n",
"<tab>(QL{ql})<tab><tab><tab> (QL{ql})<tab> <tab><tab><tab><tab><tab> (QL{ql})\n\n",
"<tab><tab>{text_mutated_material} (QL{ql})<tab><br><tab><tab><highlight>ODER</highlight><tab>{text_pristine_material} (QL{ql})\n",
" + <tab>{text_bazzit_generic_nano_solvent}\n",
" = <tab>{text_dna_soup} (QL{ql})\n",
"<highlight>Notwendige Skills:</highlight>\n",
"- {chem_prist} Chemistry(mit Pristine)\n",
"- {chem_mutat} Chemistry(mit Mutated)\n\n",
"<header2>Teil 5</header2>\n",
"<tab>{icon_dna_soup}<tab>+<tab>{icon_human_dna}<tab>=<tab>{icon_dna_cocktail} \n\n",
"<tab>(QL{ql})<tab> <tab><tab><tab><tab><tab><tab>(QL{ql})\n\n",
"<tab><tab>{text_dna_soup} (QL{ql})\n",
" + <tab>{text_human_dna}\n",
" = <tab>{text_dna_cocktail} (QL{ql})\n",
"<highlight>Notwendige Skills:</highlight>\n",
"- {pharma} Pharma Tech\n\n",
"<header2>Teil 6</header2>\n",
"<tab>{icon_formatted_viralbots}<tab>+<tab>{icon_dna_cocktail}<tab>=<tab>{icon_formatted_viralbot_solution} \n\n",
"<tab>(QL{vb_ql})<tab> <tab>(QL{ql})<tab> <tab>(QL{ql})\n\n",
"<tab><tab>{text_formatted_viralbots} (QL{vb_ql})\n",
" + <tab>{text_dna_cocktail} (QL{ql})\n",
" = <tab>{text_formatted_viralbot_solution} (QL{ql})\n",
"<highlight>Notwendige Skills:</highlight>\n",
"- {pharma} Pharma Tech\n\n",
"<header2>Teil 7</header2>\n",
"<tab>{icon_formatted_viralbot_solution}<tab>+<tab>{icon_basic_fashion_vest}<tab>=<tab>{icon_formatted_viralbot_vest} \n\n",
"<tab>(QL{ql})<tab><tab><tab><tab><tab><tab><tab>(QL{ql})\n\n",
"<tab><tab>{text_formatted_viralbot_solution} (QL{ql})\n",
" + <tab>{text_basic_fashion_vest}\n",
" = <tab>{text_formatted_viralbot_vest} (QL{ql})\n",
"<highlight>Notwendige Skills:</highlight>\n",
"- {pharma} Pharma Tech\n\n",
"<header2>Teil 8</header2>\n",
"<tab>{icon_vb_bot}<tab>+<tab>{icon_formatted_viralbot_vest}<tab>=<tab>{icon_armor}\n",
"<tab>(QL{vb_ql})<tab> <tab>(QL{ql})<tab> <tab>(QL{ql})\n\n",
"<tab><tab>{text_vb_bot} (QL{vb_ql}) (<highlight>Seltener drop von Alien City Generals</highlight>)\n",
" + <tab>{text_formatted_viralbot_vest} (QL{ql})\n",
" = <tab>{text_armor} (QL{ql})\n",
"<highlight>Notwendige Skills:</highlight>\n",
"- {psycho} Psychology"
]
},
"ai_armor_combined": {
"en_US": [
"<header2>Tradeskill Process</header2>\n\n",
"<tab>{icon_source}<tab>+<tab>{icon_target}<tab>=<tab>{icon_result}\n",
"<tab>(QL{s_ql})<tab> <tab>(QL{t_ql})<tab> <tab>(QL{t_ql})\n\n",
"<tab><tab>{text_source} (QL{s_ql}) - ({ts_process_source})\n",
" + <tab>{text_target} (QL{t_ql}) - ({ts_process_target})\n",
" = <tab>{text_result} (QL{t_ql})\n"
],
"de_DE": [
"<header2>Bauanleitung</header2>\n\n",
"<tab>{icon_source}<tab>+<tab>{icon_target}<tab>=<tab>{icon_result}\n",
"<tab>(QL{s_ql})<tab> <tab>(QL{t_ql})<tab> <tab>(QL{t_ql})\n\n",
"<tab><tab>{text_source} (QL{s_ql}) - ({ts_process_source})\n",
" + <tab>{text_target} (QL{t_ql}) - ({ts_process_target})\n",
" = <tab>{text_result} (QL{t_ql})\n"
]
},
"ai_armor_ts_process": {
"en_US": "Tradeskill process for this item",
"de_DE": "Bauanleitung für dieses Item"
},
"ai_armor_combined_unknown": {
"en_US": "Unknown armor type <highlight>{type}</highlight>",
"de_DE": "Unbekannter Rüstungs Typ: <highlight>{type}</highlight>"
},
"bioinfo_list": {
"en_US": [
"\n<header2>OFAB Armor Types</header2>\n",
"{ofab_armor}",
"\n<header2>OFAB Weapon Types</header2>\n",
"{ofab_weap}",
"\n<header2>AI Armor Types</header2>\n",
"{ai_armor}",
"\n<header2>AI Weapon Typen</header2>\n",
"{ai_weap}",
"\n<header2>Serum Typen</header2>\n",
"{serum}"
],
"de_DE": [
"\n<header2>OFAB Rüstung - Typen</header2>\n",
"{ofab_armor}",
"\n<header2>OFAB Waffen - Typen</header2>\n",
"{ofab_weap}",
"\n<header2>Alien Rüstung - Typen</header2>\n",
"{ai_armor}",
"\n<header2>Alien Waffen - Typen</header2>\n",
"{ai_weap}",
"\n<header2>Serum - Typen</header2>\n",
"{serum}"
]
},
"bioinfo_list_title": {
"en_US": "Bio-Material Types",
"de_DE": "Bio-Material Typen"
},
"bioinfo_unknown_type": {
"en_US": "Unknown bio-material type <highlight>{type}</highlight>.",
"de_DE": "Unbekannter Bio-Material Typ: <highlight>{type}</highlight>."
},
"bioinfo_type_title": {
"en_US": "{name} (QL {ql})",
"de_DE": "{name} (QL {ql})"
},
"ofab_armor_bio": {
"en_US": [
"Kyr'Ozch Bio-Material - Type {type}",
"{icon}\n{text}\n\n",
"<highlight>Upgrades Ofab Armor for:</highlight>\n",
"{upgrades}"
],
"de_DE": [
"Kyr'Ozch Bio-Material - Type {type}",
"{icon}\n{text}\n\n",
"<highlight>Upgrade für folgende Ofab Rüstungen:</highlight>\n",
"{upgrades}"
]
},
"ofab_weapon_bio": {
"en_US": [
"Kyr'Ozch Bio-Material - Type {type}",
"{icon}\n{text}\n\n",
"<highlight>Upgrades Ofab Weapons for:</highlight>\n",
"{upgrades}"
],
"de_DE": [
"Kyr'Ozch Bio-Material - Type {type}",
"{icon}\n{text}\n\n",
"<highlight>Upgrade für folgende Ofab Waffen:</highlight>\n",
"{upgrades}"
]
},
"alien_armor_bio": {
"en_US": [
"{item}\n\n",
"It will take <highlight>{ee_cl_req} EE & CL</highlight> (<highlight>4.5 * QL</highlight>) to analyze the Bio-Material.\n\n",
"Used to build Alien Armor\n\n",
"The following tradeskill amounts are required to make <highlight>QL {ql}</highlight>\n",
"strong/arithmetic/enduring/spiritual/supple/observant armor:\n\n",
"Computer Literacy - <highlight>{cl_req}</highlight> (<highlight>4.5 * QL</highlight>)\n",
"Chemistry - <highlight>{chem_req}</highlight> (<highlight>{chem_info}</highlight>) {chem_extra_info}\n",
"Nano Programming - <highlight>{nano_prog_req}</highlight> (<highlight>6 * QL</highlight>)\n",
"Pharma Tech - <highlight>{pt_req}</highlight> (<highlight>6 * QL</highlight>)\n",
"Psychology - <highlight>{psyco_req}</highlight> (<highlight>6 * QL</highlight>)\n\n",
"Note: Tradeskill requirements are based off the lowest QL items needed throughout the entire process.",
"\n\nFor Supple, Arithmetic, or Enduring:\n\n",
"When completed, the armor piece can have as low as <highlight>QL {min_ql}</highlight> combined into it, depending on available tradeskill options.\n\n",
"Does not change QL's, therefore takes <highlight>{psyco_req} Psychology</highlight> for available combinations.\n\n",
"For Spiritual, Strong, or Observant:\n\n",
"When completed, the armor piece can combine up to <highlight>QL {max_ql}</highlight>, depending on available tradeskill options.\n\n",
"Changes QL depending on targets QL. ",
"The max combination is: (<highlight>QL {max_ql}</highlight>) (<highlight>{max_psyco} Psychology</highlight> required for this combination)",
"\n\n<yellow>Tradeskilling info added by Mdkdoc420 (RK2)</yellow>"
],
"de_DE": [
"{item}\n\n",
"Es wird <highlight>{ee_cl_req} EE & CL</highlight> (<highlight>4.5 * QL</highlight>)benötigt, um Bio-Material zu analysieren.\n\n",
"Es wird genutzt, um Alien Rüstung herzustellen.\n\n",
"Um eine strong/arithmetic/enduring/spiritual/supple/observant Rüstung\n",
"mit dem QL<highlight>QL {ql}</highlight> herzustellen, werden folgende Tradeskills benötigt:\n\n",
"Computer Literacy - <highlight>{cl_req}</highlight> (<highlight>4.5 * QL</highlight>)\n",
"Chemistry - <highlight>{chem_req}</highlight> (<highlight>{chem_info}</highlight>) {chem_extra_info}\n",
"Nano Programming - <highlight>{nano_prog_req}</highlight> (<highlight>6 * QL</highlight>)\n",
"Pharma Tech - <highlight>{pt_req}</highlight> (<highlight>6 * QL</highlight>)\n",
"Psychology - <highlight>{psyco_req}</highlight> (<highlight>6 * QL</highlight>)\n\n",
"Hinweis: die Tradeskill anforderungen basieren auf dem Item mit dem niedrigstem QL, welches im gesamten Tradeskill Prozess evrwendet wird.",
"\n\nFür eine Supple, Arithmetic, oder Enduring Rüstung:\n\n",
"Am Ende kann das Rüstungsteil mit Teilen ab dem QL <highlight>QL {min_ql}</highlight> kombiniert werden. Dies ist abhängig von den verfügbaren Tradeskill optionen.\n\n",
"Das QL wird hierbei nicht verändert, wodurch <highlight>{psyco_req} Psychology</highlight> benötigt wird.\n\n",
"Für Spiritual, Strong, oder Observant:\n\n",
"Am Ende lässt sich das Rüstungsteil mit anderen Typen bis <highlight>QL {max_ql}</highlight> kombinieren. Dies ist abhängig von den verfügbaren Tradeskill optionen.\n\n",
"Das QL verändert sich dem dem Ziel-QL entsprechend. ",
"Die Maximale Kombination ist: (<highlight>QL {max_ql}</highlight>) ( Es wird <highlight>{max_psyco} Psychology</highlight> benötigt)",
"\n\n<yellow>Tradeskilling info added by Mdkdoc420 (RK2)</yellow>"
]
},
"alien_armor_bio_extra_info_mutated": {
"en_US": "more tradeskill requirements then pristine",
"de_DE": "höhere Tradeskill Anforderungen als pristine"
},
"alien_armor_bio_extra_info_pristine": {
"en_US": "less tradeskill requirements then mutated",
"de_DE": "niedrigere Tradeskill Anforderungen als Mutated"
},
"alien_weapon_bio": {
"en_US": [
"{item_display}\n\n",
"It will take <highlight>{ee_cl_req}</highlight> EE & CL (<highlight>4.5 * QL</highlight>) to analyze the Bio-Material.\n\n",
"<highlight>Adds {specials} to:</highlight>\n",
"{display_blob}",
"{weapon_info}",
"\n\n<yellow>Tradeskilling info added by Mdkdoc420</yellow>"
],
"de_DE": [
"{item_display}\n\n",
"Es wird <highlight>{ee_cl_req}</highlight> EE & CL (<highlight>4.5 * QL</highlight>) benötigt um Bio-Material zu analysieren.\n\n",
"<highlight>Fügt {specials} zu folgenden Waffen hinzu:</highlight>\n",
"{display_blob}",
"{weapon_info}",
"\n\n<yellow>Tradeskilling info added by Mdkdoc420</yellow>"
]
},
"serum_bio": {
"en_US": [
"{item_display}\n\n",
"It will take <highlight>{ee_cl_req} EE & CL</highlight> (<highlight>4.5 * QL</highlight>) to analyze the Bio-Material.\n\n",
"Used to build city buildings\n\n",
"The following are the required skills throughout the process of making a building:\n\n",
"Quantum FT - <highlight>400</highlight> (<highlight>Static</highlight>)\n",
"Pharma Tech - <highlight>{pt_req}</highlight> (<highlight>3.5 * QL</highlight>) 400 is minimum requirement\n",
"Chemistry - <highlight>{chem_me_req}</highlight> (<highlight>4 * QL</highlight>) 400 is minimum requirement\n",
"Mechanical Engineering - <highlight>{chem_me_req}</highlight> (<highlight>4 * QL</highlight>)\n",
"Electrical Engineering - <highlight>{ee_cl_req}</highlight> (<highlight>4.5 * QL</highlight>)\n",
"Comp Liter - <highlight>{cl_req}</highlight> (<highlight>5 * QL</highlight>)",
"\n\n<yellow>Tradeskilling info added by Mdkdoc420 (RK2)</yellow>"
],
"de_DE": [
"{item_display}\n\n",
"Es wird <highlight>{ee_cl_req}</highlight> EE & CL (<highlight>4.5 * QL</highlight>) benötigt um Bio-Material zu analysieren.\n\n",
"Wird verwendet um City Gebäude herzustellen\n\n",
"Die folgenden Skills werden im Tradeskill Prozess benötigt:\n\n",
"Quantum FT - <highlight>400</highlight> (<highlight>Static</highlight>)\n",
"Pharma Tech - <highlight>{pt_req}</highlight> (<highlight>3.5 * QL</highlight>) 400 ist das minimum\n",
"Chemistry - <highlight>{chem_me_req}</highlight> (<highlight>4 * QL</highlight>) 400 ist das minimum\n",
"Mechanical Engineering - <highlight>{chem_me_req}</highlight> (<highlight>4 * QL</highlight>)\n",
"Electrical Engineering - <highlight>{ee_cl_req}</highlight> (<highlight>4.5 * QL</highlight>)\n",
"Comp Liter - <highlight>{cl_req}</highlight> (<highlight>5 * QL</highlight>)",
"\n\n<yellow>Tradeskilling info added by Mdkdoc420 (RK2)</yellow>"
]
},
"weapon_info": {
"en_US": [
"\n\n<highlight>QL {ql}</highlight> is the highest weapon this type will combine into.",
"{bump}",
"\n\nIt will take <highlight>{me_ws_req}</highlight> ME & WS (<highlight>6 * QL</highlight>) to combine with a <highlight>QL {ql}</highlight> Kyr'ozch Weapon."
],
"de_DE": [
"\n\nDie Waffe darf maximal das <highlight>QL {ql}</highlight> haben, um mit diesem Bio-Material kombiniert zu werden.",
"{bump}",
"\n\nEs werden <highlight>{me_ws_req}</highlight> ME & WS (<highlight>6 * QL</highlight>) zum kombinieren mit einer <highlight>QL {ql}</highlight> Kyr'ozch Weapon benötigt."
]
},
"weapon_bump": {
"en_US": "\nNote: <highlight>The weapon can bump several QL's.</highlight>",
"de_DE": "\nHinweis: <highlight>Die Waffe kann um einige QL gelevelt werden.</highlight>"
},
"ai_gen_list_title": {
"en_US": "Alien Generals",
"de_DE": "Alien General"
}
}
@@ -0,0 +1,204 @@
import math
import hjson
from core.chat_blob import ChatBlob
from core.command_param_types import Options, Int
from core.decorators import instance, command
from core.text import Text
from core.translation_service import TranslationService
from modules.standard.items.items_controller import ItemsController
@instance()
class AlienArmorController:
def inject(self, registry):
self.text: Text = registry.get_instance("text")
self.items_controller: ItemsController = registry.get_instance("items_controller")
self.ts: TranslationService = registry.get_instance("translation_service")
self.getresp = self.ts.get_response
def start(self):
self.ts.register_translation("module/alien", self.load_alien_msg)
self.init_static_items()
def load_alien_msg(self):
with open("modules/standard/alien/alien.msg", mode="r", encoding="utf-8") as f:
return hjson.load(f)
@command(command="aiarmor", params=[], access_level="member",
description="List the alien armor types")
def aiarmor_list_command(self, request):
blob = self.getresp("module/alien", "ai_armor", {
"strong": self.text.make_tellcmd("Strong Armor", "aiarmor Strong"),
"supple": self.text.make_tellcmd("Supple Armor", "aiarmor Supple"),
"enduring": self.text.make_tellcmd("Enduring Armor", "aiarmor Enduring"),
"observant": self.text.make_tellcmd("Observant Armor", "aiarmor Observant"),
"arithmetic": self.text.make_tellcmd("Arithmetic Armor", "aiarmor Arithmetic"),
"spiritual": self.text.make_tellcmd("Spiritual Armor", "aiarmor Spiritual"),
"cc": self.text.make_tellcmd("Combined Commando's Armor", "aiarmor cc"),
"cm": self.text.make_tellcmd("Combined Mercenary's Armor", "aiarmor cm"),
"co": self.text.make_tellcmd("Combined Officer's", "aiarmor co"),
"cp": self.text.make_tellcmd("Combined Paramedic's Armor", "aiarmor cp"),
"cs": self.text.make_tellcmd("Combined Scout's Armor", "aiarmor cs"),
"css": self.text.make_tellcmd("Combined Sharpshooter's Armor", "aiarmor css")
})
return ChatBlob(self.getresp("module/alien", "ai_armor_title"), blob)
@command(command="aiarmor",
params=[Options(["strong", "supple", "enduring", "observant", "arithmetic", "spiritual"]),
Int("ql", is_optional=True)], access_level="member",
description="Show the process for making normal alien armor")
def aiarmor_normal_command(self, request, armor_type, ql):
armor_type = armor_type.capitalize()
ql = ql or 300
misc_ql = math.floor(ql * 0.8)
blob = self.getresp("module/alien", "ai_armor_ts", {
"armor_type": armor_type,
"ql": ql,
**self.get_static_items(),
**self.text.generate_item(self.items_controller.find_by_name("Kyr'Ozch Viralbots"), misc_ql, "viralbots"),
**self.text.generate_item(self.items_controller.find_by_name("Memory-Wiped Kyr'Ozch Viralbots"),
misc_ql, "memory_wiped_viralbots"),
"step1_CL": math.ceil(misc_ql * 4.5),
"step1_NP": math.ceil(misc_ql * 4.5),
**self.text.generate_item(self.items_controller.find_by_name("Formatted Kyr'Ozch Viralbots"), misc_ql,
"formatted_viralbots"),
"step2_CL": math.ceil(misc_ql * 4.5),
"step2_NP": math.ceil(misc_ql * 6),
**self.text.generate_item(self.items_controller.find_by_name("Solid Clump of Kyr'Ozch Bio-Material"), ql,
"solid_clump"),
**self.text.generate_item(self.items_controller.find_by_name("Mutated Kyr'Ozch Bio-Material"), ql,
"mutated_material"),
**self.text.generate_item(self.items_controller.find_by_name("Pristine Kyr'Ozch Bio-Material"), ql,
"pristine_material"),
"step3_chem": math.ceil(ql * 4.5),
**self.text.generate_item(self.items_controller.find_by_name("Generic Kyr'Ozch DNA-Soup"), ql, "dna_soup"),
"chem_prist": math.ceil(ql * 4.5), "chem_mutat": math.ceil(ql * 7),
**self.text.generate_item(self.items_controller.find_by_name("DNA Cocktail"), ql, "dna_cocktail"),
"pharma": math.ceil(ql * 6),
**self.text.generate_item(self.items_controller.find_by_name("Kyr'Ozch Formatted Viralbot Solution"), ql,
"formatted_viralbot_solution"),
**self.text.generate_item(self.items_controller.find_by_name("Formatted Viralbot Vest"), ql,
"formatted_viralbot_vest"),
"psycho": math.floor(ql * 6),
**self.get_armor(armor_type, ql),
})
return ChatBlob(self.getresp("module/alien", "ai_armor_ts_title", {"ql": ql, "type": armor_type}), blob)
def get_armor(self, armor_type, ql):
blob = None
bot_ql = math.floor(ql * 0.8)
armor = self.items_controller.find_by_name("%s Body Armor" % armor_type, ql)
bot = self.items_controller.find_by_name("%s Lead Viralbots" % armor_type, bot_ql)
return {"icon_armor": self.text.make_item(armor.lowid, armor.highid, ql, self.text.make_image(armor.icon)),
"text_armor": self.text.make_item(armor.lowid, armor.highid, ql, armor.name),
"icon_vb_bot": self.text.make_item(bot.lowid, bot.highid, bot_ql, self.text.make_image(bot.icon)),
"text_vb_bot": self.text.make_item(bot.lowid, bot.highid, bot_ql, bot.name),
"vb_ql": bot_ql
}
@command(command="aiarmor",
params=[Options(["cc", "cm", "co", "cp", "cs", "css", "ss"]), Int("ql", is_optional=True)],
access_level="member",
description="Show the process for making combined alien armor",
extended_description="CSS and SS both refer to Combined Sharpshooters")
def aiarmor_combined_command(self, request, armor_type, target_ql):
armor_type = armor_type.lower()
target_ql = target_ql or 300
source_ql = math.floor(target_ql * 0.8)
if armor_type == "cc":
result_armor_id = 246660 # Combined Commando's Jacket
source_armor_id = 246616 # Strong Body Armor
name_source = "strong"
target_armor_id = 246622 # Supple Body Armor
name_target = "supple"
elif armor_type == "cm":
result_armor_id = 246638 # Combined Mercenary's Jacket
source_armor_id = 246616 # Strong Body Armor
name_source = "strong"
target_armor_id = 246580 # Enduring Body Armor
name_target = "enduring"
elif armor_type == "co":
result_armor_id = 246672 # Combined Officer's Jacket
source_armor_id = 246600 # Spiritual Body Armor
name_source = "spiritual"
target_armor_id = 246560 # Arithmetic Body Armor
name_target = "arithmetic"
elif armor_type == "cp":
result_armor_id = 246648 # Combined Paramedic's Jacket
source_armor_id = 246600 # Spiritual Body Armor
name_source = "spiritual"
target_armor_id = 246580 # Enduring Body Armor
name_target = "enduring"
elif armor_type == "cs":
result_armor_id = 246684 # Combined Scout's Jacket
source_armor_id = 246592 # Observant Body Armor
name_source = "observant"
target_armor_id = 246560 # Arithmetic Body Armor
name_target = "arithmetic"
elif armor_type == "css" or armor_type == "ss":
result_armor_id = 246696 # Combined Sharpshooter's Jacket
source_armor_id = 246592 # Observant Body Armor
name_source = "observant"
target_armor_id = 246622 # Supple Body Armor
name_target = "supple"
else:
return self.getresp("module/alien", "ai_armor_combined_unknown", {"type": armor_type})
source = self.items_controller.get_by_item_id(source_armor_id)
target = self.items_controller.get_by_item_id(target_armor_id)
result = self.items_controller.get_by_item_id(result_armor_id)
blob = self.getresp("module/alien", "ai_armor_combined", {
**self.text.generate_item(source, source_ql, "source"),
"s_ql": source_ql,
"t_ql": target_ql,
"ts_process_source": self.text.make_tellcmd(self.getresp("module/alien", "ai_armor_ts_process"),
"aiarmor %s %d" % (name_source, source_ql)),
**self.text.generate_item(target, target_ql, "target"),
"ts_process_target": self.text.make_tellcmd(self.getresp("module/alien", "ai_armor_ts_process"),
"aiarmor %s %d" % (name_target, target_ql)),
**self.text.generate_item(result, target_ql, "result")})
return ChatBlob(
self.getresp("module/alien", "ai_armor_ts_title", {"ql": target_ql, "type": result.name}), blob)
def get_static_items(self):
return self.static_items
def init_static_items(self):
self.static_items = {
**self.text.generate_item(
self.items_controller.get_by_item_id(247099, 100), 100, "step1_tool"),
**self.text.generate_item(self.items_controller.find_by_name("Nano Programming Interface", 1), 1, "NPI"),
**self.text.generate_item(self.items_controller.find_by_name("Kyr'Ozch Structural Analyzer", 100), 100,
"structural_analyser"),
**self.text.generate_item(self.items_controller.find_by_name("Uncle Bazzit's Generic Nano-Solvent", 100),
100, "bazzit_generic_nano_solvent"),
**self.text.generate_item(self.items_controller.find_by_name("Essential Human DNA", 100), 100, "human_dna"),
**self.text.generate_item(self.items_controller.find_by_name("Basic Fashion Vest", 1), 1,
"basic_fashion_vest"),
}
@@ -0,0 +1,229 @@
import math
from core.chat_blob import ChatBlob
from core.command_param_types import Any, Item, Int
from core.decorators import instance, command
from core.text import Text
from core.translation_service import TranslationService
@instance()
class AlienBioController:
def __init__(self):
self.ofab_armor_types = ["64", "295", "468", "935"]
self.ofab_weapon_types = ["18", "34", "687", "812"]
self.alien_armor_types = ["mutated", "pristine"]
self.alien_weapon_types = ["1", "2", "3", "4", "5", "12", "13", "48", "76", "112", "240", "880", "992"]
def inject(self, registry):
self.db = registry.get_instance("db")
self.text: Text = registry.get_instance("text")
self.util = registry.get_instance("util")
self.items_controller = registry.get_instance("items_controller")
self.command_alias_service = registry.get_instance("command_alias_service")
self.ts: TranslationService = registry.get_instance("translation_service")
self.getresp = self.ts.get_response
def pre_start(self):
self.db.load_sql_file(self.module_dir + "/sql/alien_weapons.sql", pre_optimized=True)
self.db.create_view("alien_weapon_specials")
self.db.create_view("alien_weapons")
def start(self):
self.command_alias_service.add_alias("clump", "bio")
self.command_alias_service.add_alias("b", "bio")
@command(command="bio", params=[Item("bio_material")], access_level="member",
description="Show info about Kyr'Ozch Bio-Material")
def bio_command(self, request, item):
high_id = item.high_id
ql = item.ql
if high_id == 247707 or high_id == 247708:
bio_type = "1"
elif high_id == 247709 or high_id == 247710:
bio_type = "2"
elif high_id == 247717 or high_id == 247718:
bio_type = "3"
elif high_id == 247711 or high_id == 247712:
bio_type = "4"
elif high_id == 247713 or high_id == 247714:
bio_type = "5"
elif high_id == 247715 or high_id == 247716:
bio_type = "12"
elif high_id == 247719 or high_id == 247720:
bio_type = "13"
elif high_id == 288699 or high_id == 288700:
bio_type = "48"
elif high_id == 247697 or high_id == 247698:
bio_type = "76"
elif high_id == 247699 or high_id == 247700:
bio_type = "112"
elif high_id == 247701 or high_id == 247702:
bio_type = "240"
elif high_id == 247703 or high_id == 247704:
bio_type = "880"
elif high_id == 247705 or high_id == 247706:
bio_type = "992"
elif high_id == 247102 or high_id == 247103:
bio_type = "pristine"
elif high_id == 247104 or high_id == 247105:
bio_type = "mutated"
elif high_id == 247764 or high_id == 254804:
bio_type = "serum"
else:
bio_type = "unknown"
bio_info = self.get_bio_info(bio_type, ql)
if bio_info:
return bio_info
else:
return "Bio-Material type unknown or not a bio-material."
@command(command="bioinfo", params=[], access_level="member",
description="Show list of Kyr'Ozch Bio-Material types")
def bioinfo_list_command(self, request):
return ChatBlob(self.getresp("module/alien", "bioinfo_list_title"),
self.getresp("module/alien", "bioinfo_list", {
"ofab_armor": self.get_type_blob(self.ofab_armor_types),
"ofab_weap": self.get_type_blob(self.ofab_weapon_types),
"ai_armor": self.get_type_blob(self.alien_armor_types),
"ai_weap": self.get_type_blob(self.alien_weapon_types),
"serum": self.get_type_blob(["serum"]),
}))
def get_type_blob(self, bio_types):
blob = ""
for bio_type in bio_types:
blob += self.text.make_tellcmd(bio_type, "bioinfo %s" % bio_type) + "\n"
return blob
@command(command="bioinfo", params=[Any("bio_type"), Int("ql", is_optional=True)], access_level="member",
description="Show info about a bio-material type")
def bioinfo_show_command(self, request, bio_type, ql):
ql = ql or 300
bio_info = self.get_bio_info(bio_type, ql)
if bio_info:
return bio_info
else:
return self.getresp("module/alien", "bioinfo_unknown_type", {"type": bio_type})
def get_bio_info(self, bio_type, ql):
if bio_type in self.ofab_armor_types:
return self.ofab_armor_bio(bio_type, ql)
elif bio_type in self.ofab_weapon_types:
return self.ofab_weapon_bio(bio_type, ql)
elif bio_type in self.alien_armor_types:
return self.alien_armor_bio(bio_type, ql)
elif bio_type in self.alien_weapon_types:
return self.alien_weapon_bio(bio_type, ql)
elif bio_type == "serum":
return self.serum_bio(ql)
else:
return None
def ofab_armor_bio(self, bio_type, ql):
name = "Kyr'Ozch Bio-Material - Type %s" % bio_type
data = self.db.query("SELECT * FROM ofab_armor_type WHERE type = ?", [bio_type])
item = self.items_controller.find_by_name(name, ql)
upgrades = ""
for row in data:
upgrades += self.text.make_tellcmd(row.profession, "ofabarmor %s" % row.profession) + "\n"
return ChatBlob(self.getresp("module/alien", "bioinfo_unknown_type",
{"type": bio_type, "ql": ql}),
self.getresp("module/alien", "ofab_armor_bio",
{"type": bio_type, **self.text.generate_item(item, ql), "upgrades": upgrades}))
def ofab_weapon_bio(self, bio_type, ql):
name = "Kyr'Ozch Bio-Material - Type %s" % bio_type
data = self.db.query("SELECT * FROM ofab_weapons WHERE type = ?", [bio_type])
blob = self.display_item(name, ql) + "\n\n"
blob += "<highlight>Upgrades Ofab Weapons for:</highlight>\n"
for row in data:
blob += self.text.make_tellcmd("Ofab %s Mk 1" % row.name, "ofabweapons %s" % row.name) + "\n"
return ChatBlob("%s (QL %d)" % (name, ql), blob)
def alien_armor_bio(self, bio_type, ql):
min_ql = math.floor(ql * 0.8)
if ql <= 240:
max_ql = math.floor(ql / 0.8)
else:
max_ql = 300
cl = math.floor(min_ql * 4.5)
pharma = math.floor(ql * 6)
nano_prog = math.floor(min_ql * 6)
psyco = math.floor(ql * 6)
max_psyco = math.floor(max_ql * 6)
ts_bio = math.floor(ql * 4.5)
if bio_type == "mutated":
name = "Mutated Kyr'Ozch Bio-Material"
chem = math.floor(ql * 7)
chem_msg = "7 * QL"
extra_info = self.getresp("module/alien", "alien_armor_bio_extra_info_mutated")
elif bio_type == "pristine":
name = "Pristine Kyr'Ozch Bio-Material"
chem = math.floor(ql * 4.5)
chem_msg = "4.5 * QL"
extra_info = self.getresp("module/alien", "alien_armor_bio_extra_info_pristine")
else:
return None
return ChatBlob("%s (QL %d)" % (name, ql),
self.getresp("module/alien", "alien_armor_bio",
{"item": self.display_item(name, ql),
"ee_cl_req": ts_bio, "ql": ql, "cl_req": cl, "chem_req": chem,
"chem_info": chem_msg, "chem_extra_info": extra_info, "nano_prog_req": nano_prog,
"pt_req": pharma, "psyco_req": psyco, "min_ql": min_ql, "max_ql": max_ql,
"max_psyco": max_psyco}))
def alien_weapon_bio(self, bio_type, ql):
name = "Kyr'Ozch Bio-Material - Type %s" % bio_type
# Ensures that the maximum AI weapon that combines into doesn't go over QL 300
# when the user presents a QL 271+ bio-material
max_ai_type = math.floor(ql / 0.9)
if max_ai_type > 300 or max_ai_type < 1:
max_ai_type = 300
specials = self.db.query_single("SELECT specials FROM alien_weapon_specials WHERE type = ?",
[bio_type]).specials
data = self.db.query("SELECT * FROM alien_weapons WHERE type = ?", [bio_type])
display_blob = ""
for row in data:
display_blob += self.display_item(row.name, max_ai_type) + "\n"
return ChatBlob("%s (QL %d)" % (name, ql),
self.getresp("module/alien", "alien_weapon_bio",
{"item_display": self.display_item(name, ql),
"ee_cl_req": math.floor(ql * 4.5),
"specials": specials,
"display_blob": display_blob,
"weapon_info": self.get_weapon_info(max_ai_type)
}))
def serum_bio(self, ql):
name = "Kyr'Ozch Viral Serum"
return ChatBlob("%s (QL %d)" % (name, ql),
self.getresp("module/alien", "serum_bio",
{"item_display": self.display_item(name, ql),
"ee_cl_req": math.floor(ql * 4.5),
"pt_req": (math.floor(ql * 3.5) if math.floor(ql * 3.5) > 400 else 400),
"chem_me_req": (math.floor(ql * 4) if math.floor(ql * 4) > 400 else 400),
"cl_req": math.floor(ql * 5)
}))
def get_weapon_info(self, ql):
return self.getresp("module/alien", "weapon_info",
{"ql": ql,
"bump": ("" if ql == 300 else self.getresp("module/alien", "weapon_bump")),
"me_ws_req": math.floor(ql * 6)})
def display_item(self, name, ql):
return self.text.format_item(self.items_controller.find_by_name(name, ql), ql)
@@ -0,0 +1,76 @@
from core.chat_blob import ChatBlob
from core.command_param_types import Options
from core.decorators import instance, command
from core.text import Text
from core.translation_service import TranslationService
@instance()
class AlienGeneralController:
def inject(self, registry):
self.text: Text = registry.get_instance("text")
self.items_controller = registry.get_instance("items_controller")
self.ts: TranslationService = registry.get_instance("translation_service")
self.getresp = self.ts.get_response
@command(command="aigen", params=[], access_level="member",
description="List alien city ground generals")
def aigen_list_command(self, request):
blob = ""
blob += " - <a href='chatcmd:///tell <myname> aigen Ankari'>Ankari</a>\n"
blob += " - <a href='chatcmd:///tell <myname> aigen Ilari'>Ilari</a>\n"
blob += " - <a href='chatcmd:///tell <myname> aigen Rimah'>Rimah</a>\n"
blob += " - <a href='chatcmd:///tell <myname> aigen Jaax'>Jaax</a>\n"
blob += " - <a href='chatcmd:///tell <myname> aigen Xoch'>Xoch</a>\n"
blob += " - <a href='chatcmd:///tell <myname> aigen Cha'>Cha</a>\n"
return ChatBlob(self.getresp("module/alien", "ai_gen_list_title"), blob)
@command(command="aigen",
params=[Options(["ankari", "ilari", "rimah", "jaax", "xoch", "cha"])],
access_level="member",
description="Show info about an alien city ground general")
def aigen_show_command(self, request, general):
general = general.capitalize()
blob = ""
if general == "Ankari":
blob += "Low Evade/Dodge, Low AR, Casts Viral/Virral nukes\n\n"
blob += self.text.format_item(self.items_controller.get_by_item_id(247145)) + "\n" # Arithmetic Viralbots
blob += "(Nanoskill / Tradeskill)\n\n"
blob += self.text.format_item(self.items_controller.get_by_item_id(247684)) + "\n\n" # type 1
blob += self.text.format_item(self.items_controller.get_by_item_id(247686)) + "\n\n" # type 2
blob += self.text.format_item(self.items_controller.get_by_item_id(288673)) # type 48
elif general == "Ilari":
blob += "Low Evade/Dodge\n\n"
blob += self.text.format_item(self.items_controller.get_by_item_id(247147)) + "\n" # Spiritual Viralbots
blob += "(Nanocost / Nanopool / Max Nano)\n\n"
blob += self.text.format_item(self.items_controller.get_by_item_id(247682)) + "\n\n" # type 992
blob += self.text.format_item(self.items_controller.get_by_item_id(247680)) # type 880
elif general == "Rimah":
blob += "Low Evade/Dodge\n\n"
blob += self.text.format_item(self.items_controller.get_by_item_id(247143)) + "\n" # Observant Viralbots
blob += "(Init / Evades)\n\n"
blob += self.text.format_item(self.items_controller.get_by_item_id(247676)) + "\n\n" # type 112
blob += self.text.format_item(self.items_controller.get_by_item_id(247678)) # type 240
elif general == "Jaax":
blob += "High Evade, Low Dodge\n\n"
blob += self.text.format_item(self.items_controller.get_by_item_id(247139)) + "\n" # Strong Viralbots
blob += "(Melee / Spec Melee / Add All Def / Add Damage)\n\n"
blob += self.text.format_item(self.items_controller.get_by_item_id(247694)) + "\n\n" # type 3
blob += self.text.format_item(self.items_controller.get_by_item_id(247688)) # type 4
elif general == "Xoch":
blob += "High Evade/Dodge, Casts Ilari Biorejuvenation heals\n\n"
blob += self.text.format_item(self.items_controller.get_by_item_id(247137)) + "\n" # Enduring Viralbots
blob += "(Max Health / Body Dev)\n\n"
blob += self.text.format_item(self.items_controller.get_by_item_id(247690)) + "\n\n" # type 5
blob += self.text.format_item(self.items_controller.get_by_item_id(247692)) # type 12
elif general == "Cha":
blob += "High Evade/NR, Low Dodge\n\n"
blob += self.text.format_item(self.items_controller.get_by_item_id(247141)) + "\n" # Supple Viralbots
blob += "(Ranged / Spec Ranged / Add All Off)\n\n"
blob += self.text.format_item(self.items_controller.get_by_item_id(247696)) + "\n\n" # type 13
blob += self.text.format_item(self.items_controller.get_by_item_id(247674)) # type 76
return ChatBlob(f"General {general}", blob)
@@ -0,0 +1,58 @@
from core.chat_blob import ChatBlob
from core.command_param_types import Any
from core.decorators import instance, command
from core.text import Text
@instance()
class LeProcsController:
def inject(self, registry):
self.db = registry.get_instance("db")
self.text: Text = registry.get_instance("text")
self.util = registry.get_instance("util")
self.command_alias_service = registry.get_instance("command_alias_service")
def pre_start(self):
self.db.load_sql_file(self.module_dir + "/sql/leprocs.sql", pre_optimized=True)
self.db.create_view("leprocs")
self.command_alias_service.add_alias("leproc", "leprocs")
@command(command="leprocs", params=[], access_level="member",
description="Show a list of professions with LE procs")
def leprocs_list_command(self, request):
data = self.db.query("SELECT DISTINCT profession FROM leprocs ORDER BY profession")
blob = ""
for row in data:
blob += f"<pagebreak>{self.text.make_tellcmd(row.profession, f'leprocs {row.profession}')}\n"
blob += "\nProc info provided by Wolfbiter (RK1), Gatester (RK2), DrUrban"
return ChatBlob("LE Procs", blob)
@command(command="leprocs", params=[Any("profession")], access_level="member",
description="Show LE proc information for a specific profession")
def leprocs_show_command(self, request, prof_name):
profession = self.util.get_profession(prof_name)
if not profession:
return f"Could not find profession <highlight>{prof_name}</highlight>."
data = self.db.query("SELECT * FROM leprocs WHERE profession LIKE ? "
"ORDER BY proc_type, research_lvl DESC", [profession])
proc_type = ""
blob = ""
for row in data:
if proc_type != row.proc_type:
proc_type = row.proc_type
blob += f"\n<highlight>{proc_type}</highlight>\n"
blob += f"<pagebreak>[{self.text.zfill(row.research_lvl, 10)}] " \
f"{row.name} <orange>{row.modifiers}</orange> " \
f"{row.duration} <green>{row.proc_trigger}</green>\n"
blob += "\n\nNote: Offensive procs have a 5% chance of firing every time you attack; " \
"Defensive procs have a 10% chance of firing every time something attacks you."
blob += "\n\nProc info provided by Wolfbiter (RK1), Gatester (RK2)"
return ChatBlob(f"{profession} LE Procs", blob)
@@ -0,0 +1,81 @@
from core.chat_blob import ChatBlob
from core.command_param_types import Any, Int
from core.decorators import instance, command
from core.text import Text
@instance()
class OfabArmorController:
def inject(self, registry):
self.db = registry.get_instance("db")
self.text: Text = registry.get_instance("text")
self.util = registry.get_instance("util")
def pre_start(self):
self.db.load_sql_file(self.module_dir + "/sql/ofab_armor.sql", pre_optimized=True)
self.db.create_view("ofab_armor")
self.db.create_view("ofab_armor_cost")
self.db.create_view("ofab_armor_type")
@command(command="ofabarmor", params=[], access_level="member",
description="Show ofab armor")
def ofabarmor_list_command(self, request):
data = self.db.query("SELECT type, profession FROM ofab_armor_type ORDER BY profession")
blob = ""
for row in data:
blob += f"<pagebreak>{self.text.make_tellcmd(row.profession, f'ofabarmor {row.profession}')} - " \
f"Type {row.type:d}\n"
return ChatBlob("Ofab Armor", blob)
@command(command="ofabarmor",
params=[Int("ql", is_optional=True), Any("profession"), Int("ql", is_optional=True)],
access_level="member",
description="Show info about ofab armor",
extended_description="QL is optional and can come before or after the profession")
def ofabarmor_show_command(self, request, ql1, prof_name, ql2):
profession = self.util.get_profession(prof_name)
ql = ql1 or ql2 or 300
if not profession:
return "Could not find Ofab Armor for profession <highlight>%s</highlight>." % prof_name
data = self.db.query("SELECT * FROM ofab_armor o1 "
"LEFT JOIN ofab_armor_cost o2 ON o1.slot = o2.slot "
"WHERE o1.profession = ? AND o2.ql = ? "
"ORDER BY upgrade, name",
[profession, ql])
if not data:
return f"Could not find Ofab Armor for QL <highlight>{ql:d}</highlight>."
upgrade_type = self.db.query_single("SELECT type FROM ofab_armor_type WHERE profession = ?", [profession]).type
type_ql = round(ql * 0.8)
type_link = self.text.make_tellcmd(f"Kyr'Ozch Bio-Material - Type {upgrade_type:d}",
f"bioinfo {upgrade_type:d} {type_ql:d}")
blob = "Upgrade with %s (minimum QL %d)\n\n" % (type_link, type_ql)
cost_data = self.db.query("SELECT DISTINCT ql FROM ofab_weapons_cost ORDER BY ql")
for row in cost_data:
blob += self.text.make_tellcmd(row.ql, f"ofabarmor {profession} {row.ql:d}") + " "
blob += "\n\n"
current_upgrade = ""
total_vp = 0
for row in data:
if current_upgrade != row.upgrade:
current_upgrade = row.upgrade
blob += "\n"
blob += "<pagebreak>" + self.text.make_item(row.lowid, row.highid, ql, row.name)
if row.upgrade == 0 or row.upgrade == 3:
blob += f" (<highlight>{row.vp:d}</highlight> VP)"
total_vp += row.vp
blob += "\n"
blob += f"\nVP cost for full set: <highlight>{total_vp:d}</highlight>"
return ChatBlob("%s Ofab Armor (QL %d)" % (profession, ql), blob)
@@ -0,0 +1,68 @@
from core.chat_blob import ChatBlob
from core.command_param_types import Any, Int
from core.decorators import instance, command
from core.text import Text
@instance()
class OfabWeaponsController:
def inject(self, registry):
self.db = registry.get_instance("db")
self.text: Text = registry.get_instance("text")
self.items_controller = registry.get_instance("items_controller")
self.command_alias_service = registry.get_instance("command_alias_service")
def pre_start(self):
self.db.load_sql_file(self.module_dir + "/sql/ofab_weapons.sql", pre_optimized=True)
self.db.create_view("ofab_weapons")
self.db.create_view("ofab_weapons_cost")
def start(self):
self.command_alias_service.add_alias("ofabweapon", "ofabweapons")
@command(command="ofabweapons", params=[], access_level="member",
description="Show ofab weapons")
def ofabweapons_list_command(self, request):
data = self.db.query("SELECT type, name FROM ofab_weapons ORDER BY name")
blob = ""
for row in data:
blob += f"<pagebreak>{self.text.make_tellcmd(row.name, f'ofabweapons {row.name}')} - Type {row.type:d}\n"
return ChatBlob("Ofab Weapons", blob)
@command(command="ofabweapons",
params=[Int("ql", is_optional=True), Any("weapon"), Int("ql", is_optional=True)],
access_level="member",
description="Show info about an ofab weapon",
extended_description="QL is optional and can come before or after the weapon")
def ofabweapons_show_command(self, request, ql1, weapon_name, ql2):
weapon_name = weapon_name.capitalize()
ql = ql1 or ql2 or 300
weapon = self.db.query_single("SELECT type, vp FROM ofab_weapons w, ofab_weapons_cost c "
"WHERE w.name LIKE ? AND c.ql = ?", [weapon_name, ql])
if not weapon:
return f"Could not find Ofab Weapon <highlight>{weapon_name}</highlight> " \
f"for QL <highlight>{ql:d}</highlight>."
type_ql = round(ql * 0.8)
type_link = self.text.make_tellcmd(f"Kyr'Ozch Bio-Material - Type {weapon.type:d}",
f"bioinfo {weapon.type:d} {type_ql:d}")
blob = "Upgrade with %s (minimum QL %d)\n\n" % (type_link, type_ql)
data = self.db.query("SELECT ql FROM ofab_weapons_cost ORDER BY ql")
for row in data:
blob += self.text.make_tellcmd(row.ql, f"ofabweapons {weapon_name} {row.ql:d}") + " "
blob += "\n\n"
for i in range(1, 7):
item = self.items_controller.find_by_name(f"Ofab {weapon_name} Mk {i:d}")
blob += "<pagebreak>" + self.text.format_item(item)
if i == 1:
blob += f" (<highlight>{weapon.vp:d}</highlight> VP)"
blob += "\n"
return ChatBlob(f"Ofab {weapon_name} (QL {ql:d})", blob)
@@ -0,0 +1,58 @@
# noinspection LongLineForFile
DROP TABLE IF EXISTS alien_weapon_specials;
CREATE TABLE alien_weapon_specials
(
type INT NOT NULL PRIMARY KEY,
specials varchar(255) NOT NULL
);
INSERT INTO alien_weapon_specials (type, specials)
VALUES (1, 'Fling shot'),
(2, 'Aimed Shot'),
(4, 'Burst'),
(3, 'Fling Shot and Aimed Shot'),
(5, 'Fling Shot and Burst'),
(12, 'Burst and Full Auto'),
(13, 'Burst, Fling Shot and Full Auto'),
(48, 'Brawl and Dimach'),
(76, 'Brawl and Fast Attack'),
(112, 'Brawl, Dimach and Fast Attack'),
(240, 'Brawl, Dimach, Fast Attack and Sneak Attack'),
(880, 'Dimach, Fast Attack, Parry and Riposte'),
(992, 'Dimach, Fast Attack, Sneak Attack, Parry and Riposte');
DROP TABLE IF EXISTS alien_weapons;
CREATE TABLE alien_weapons
(
type INT NOT NULL,
name VARCHAR(255) NOT NULL
);
INSERT INTO alien_weapons (type, name)
VALUES (1, 'Kyr''Ozch Grenade Gun - Type 1'),
(1, 'Kyr''Ozch Pistol - Type 1'),
(1, 'Kyr''Ozch Shotgun - Type 1'),
(2, 'Kyr''Ozch Crossbow - Type 2'),
(2, 'Kyr''Ozch Rifle - Type 2'),
(3, 'Kyr''Ozch Crossbow - Type 3'),
(3, 'Kyr''Ozch Energy Carbine - Type 3'),
(3, 'Kyr''Ozch Rifle - Type 3'),
(4, 'Kyr''Ozch Machine Pistol - Type 4'),
(4, 'Kyr''Ozch Pistol - Type 4'),
(4, 'Kyr''Ozch Submachine Gun - Type 4'),
(5, 'Kyr''Ozch Carbine - Type 5'),
(5, 'Kyr''Ozch Energy Carbine - Type 5'),
(5, 'Kyr''Ozch Energy Pistol - Type 5'),
(5, 'Kyr''Ozch Machine Pistol - Type 5'),
(5, 'Kyr''Ozch Submachine Gun - Type 5'),
(12, 'Kyr''Ozch Carbine - Type 12'),
(12, 'Kyr''Ozch Submachine Gun - Type 12'),
(13, 'Kyr''Ozch Carbine - Type 13'),
(48, 'Kyr''Ozch Nunchacko - Type 48'),
(76, 'Kyr''Ozch Energy Sword - Type 76'),
(76, 'Kyr''Ozch Sledgehammer - Type 76'),
(112, 'Kyr''Ozch Energy Hammer - Type 112'),
(112, 'Kyr''Ozch Hammer - Type 112'),
(112, 'Kyr''Ozch Spear - Type 112'),
(112, 'Kyr''Ozch Sword - Type 112'),
(240, 'Kyr''Ozch Axe - Type 240'),
(880, 'Kyr''Ozch Sword - Type 880'),
(992, 'Kyr''Ozch Energy Rapier - Type 992');
+386
View File
@@ -0,0 +1,386 @@
# noinspection LongLineForFile
DROP TABLE IF EXISTS leprocs;
CREATE TABLE leprocs
(
profession varchar(20) NOT NULL,
name varchar(50) NOT NULL,
research_name varchar(50) DEFAULT NULL,
research_lvl INT NOT NULL,
proc_type char(6) DEFAULT NULL,
chance varchar(20) DEFAULT NULL,
modifiers varchar(255) NOT NULL,
duration varchar(20) NOT NULL,
proc_trigger varchar(20) NOT NULL,
description varchar(255) NOT NULL
);
INSERT INTO leprocs (profession, name, research_name, research_lvl, proc_type, chance, modifiers, duration,
proc_trigger, description)
VALUES ('Adventurer', 'Charring Blow', 'Exploration', 5, 'Type 2', '5%', 'Target Hit Health Fire -533 .. -1434', '',
'Offensive', '533 to 1120 fire AC damage if NPC family != 220; 844 to 1434 fire AC damage if NPC family = 220'),
('Adventurer', 'Aesir Absorption', 'Exploration', 7, 'Type 1', '10%', 'Self Modify Add All Def. 50', '30s',
'Defensive', '+50 AAD, 30 second duration'),
('Adventurer', 'Ferocious hits', 'Game Warden', 1, 'Type 1', '5%', 'Self Modify +Damage 15', '30s', 'Offensive',
'Self +15 damage modifier, 30 second duration'),
('Adventurer', 'Skin Protection', 'Gunslinger', 2, 'Type 1', '10%',
'Self Modify ShieldAC 31, Self Modify AbsorbAC 150', '60s', 'Defensive',
'Self +31 shield AC and +150 Absorb AC, 60 second duration'),
('Adventurer', 'Machete Flurry', 'Keen Eyes', 7, 'Type 1', '5%', 'Self Modify +Damage 75', '60s', 'Offensive',
'Self +75 damage modifier, 60 second duration'),
('Adventurer', 'Healing Herbs', 'Keen Eyes', 10, 'Type 2', '5%', 'Self Hit Health 697 .. 1193', '', 'Offensive',
'Heals 697 to 1193 max health'),
('Adventurer', 'Self Preservation', 'Safari Guide', 5, 'Type 1', '10%',
'Self Modify ShieldAC 52, Self Modify AbsorbAC 255', '60s', 'Defensive',
'Self +52 shield AC and +255 Absorb AC, 60 second duration'),
('Adventurer', 'Basic Dressing', 'Wilderness Lore', 1, 'Type 2', '5%', 'Self Hit Health 15 .. 25', '',
'Offensive', 'Heals 15 to 25 max health'),
('Adventurer', 'Soothing Herbs', 'Wilderness Lore', 2, 'Type 1', '5%', 'Self Hit Health 186 .. 391', '',
'Offensive', 'Heals 186 to 391 max health'),
('Adventurer', 'Machete Slice', 'Wilderness Survival', 3, 'Type 2', '5%', 'Target Hit Health Fire -137 .. -350',
'', 'Offensive', '137 to 350 fire AC damage'),
('Adventurer', 'Restore Vigor', 'Wilderness Survival', 4, 'Type 2', '5%', 'Team Hit Health 356 .. 746', '',
'Offensive', 'Heals 356 to 746 max health'),
('Adventurer', 'Combustion', 'Wilderness Survival', 10, 'Type 2', '5%', 'Target Hit Health Fire -1294 .. -2415',
'', 'Offensive', '1294 to 2415 fire AC damage'),
('Agent', 'Minor Nanobot Enhance', 'Direct Action', 1, 'Type 1', '5%', 'Self Modify +Damage 15', '60s',
'Offensive', 'Self +15 damage modifier, 60 second duration'),
('Agent', 'Improved focus', 'Direct Action', 2, 'Type 2', '5%', 'Self Modify CriticalIncrease 15', '15s',
'Offensive', 'Self 15% critical increase, 15 second duration'),
('Agent', 'No Escape!', 'End Certification', 6, 'Type 1', '5%', 'Target Restrict Action Movement, 6s delay',
'6s', 'Offensive', 'Target root, 6 second duration'),
('Agent', 'Laser Aim', 'End Certification', 8, 'Type 2', '5%', 'Self Modify CriticalIncrease 30', '60s',
'Offensive', 'Self +30% critical increase, 60 second duration'),
('Agent', 'Cell Killer', 'Fitness', 3, 'Type 2', '5%', 'Target Hit Health Melee 75, 20 hits, 1s delay', '10s',
'Offensive', '75 melee AC damage, 10 hits every 1 seconds'),
('Agent', 'Intense Metabolism', 'Intuition', 3, 'Type 1', '5%', 'Self Modify Nano init 250', '60s', 'Offensive',
'Self +250 nano init, 60 second duration'),
('Agent', 'Plasteel Piercing Rounds', 'Intuition', 4, 'Type 2', '5%', 'Self Modify +Damage 75', '60s',
'Offensive', 'Self +75 damage modifier, 60 second duration'),
('Agent', 'Notum-Charged Rounds', 'Intuition', 10, 'Type 2', '5%', 'Self Modify +Damage 200', '60s', 'Offensive',
'Self +200 damage modifier, duration 60 seconds'),
('Agent', 'Nano-Enhanced Targeting', 'Marksmanship', 5, 'Type 2', '5%', 'Self Modify CriticalIncrease 22', '15s',
'Offensive', 'Self +22% critical increase, 15 second duration'),
('Agent', 'Broken Ankle', 'Stealth', 1, 'Type 2', '5%', 'Target Restrict Action Movement', '3s', 'Offensive',
'Target root, 3 second duration'),
('Agent', 'Disable Cuffs', 'Threat Assessment', 7, 'Type 1', '5%',
'Self Reduce Snare 1083s, Self Reduce Root 1083s, Resist root/snares 20%', '15s', 'Offensive',
'Self reduce roots and snares by 18minutes, 20% root/snare resist, 15 seconds'),
('Agent', 'Grim Reaper', 'Threat Assessment', 10, 'Type 1', '5%',
'Target Hit Health Melee 500, 10 hits, 1s delay', '', 'Offensive',
'500 melee AC damage, 10 hits every 1 seconds'),
('Bureaucrat', 'Inflation Adjustment', 'Process Theory', 1, 'Type 2', '5%',
'Self Modify Nano attack damage modifier 10%', '60s', 'Offensive',
'Self +10% nano damage modifier, 60 second duration'),
('Bureaucrat', 'Papercut', 'Market Awareness', 1, 'Type 2', '5%', 'Target Hit Health Cold -10 .. -23', '',
'Offensive', '10 to 23 cold AC damage'),
('Bureaucrat', 'Social Services', 'Hostile Negotiations', 5, 'Type 1', '5%', 'Target Restrict Action Movement',
'6s', 'Offensive', 'Target root, 6 second duration'),
('Bureaucrat', 'Lost Paperwork', 'Professional Development', 4, 'Type 2', '5%',
'Target Hit Health Melee -264 .. -532', '', 'Offensive', '264 to 532 melee AC damage'),
('Bureaucrat', 'Next Window Over', 'Professional Development', 3, 'Type 1', '5%', 'Self Hit Nano 10%', '',
'Offensive', 'Self, fills 10% of nano pool'),
('Bureaucrat', 'Deflation', 'Executive Decisions', 3, 'Type 2', '5%', 'Self Modify Nano attack damage 25%',
'45s', 'Offensive', 'Self +25% nano damage modifier, 45 second duration'),
('Bureaucrat', 'Wait In That Queue', 'Process Theory', 2, 'Type 1', '5%', 'Target Modify Run speed -600', '15s',
'Offensive', 'Target -600 runspeed, 15 second duration, unremovable'),
('Bureaucrat', 'Forms in Triplicate', 'Human Resources', 6, 'Type 1', '10%', 'Self Hit Nano 20%', '',
'Offensive', 'Self fills 20% of nano pool'),
('Bureaucrat', 'Wrong Window', 'Human Resources', 8, 'Type 2', '5%', 'Self Modify Nano attack damage 50%', '30s',
'Offensive', 'Self +50% nano damage modifier, 30 second duration'),
('Bureaucrat', 'Mobility Embargo', 'Professional Development', 10, 'Type 2', '5%',
'AOE 10m Restrict Action Movement', '8s', 'Offensive', 'Target AOE root, 10 meter radius, 8 second duration'),
('Bureaucrat', 'Tax Audit', 'Team Building', 7, 'Type 2', '5%', 'Target Hit Health Energy -1600 .. -3750', '',
'Offensive', '1600 to 3750 energy AC damage, 3574 taunt'),
('Bureaucrat', 'Please Hold', 'Team Building', 10, 'Type 1', '5%', 'Target Modify Run speed -1500', '30s',
'Offensive',
'Target -1500 runspeed, 30 second duration, 2% chance to break on hit, 7% chance to break on nano damage, 1% chance to break on debuff'),
('Doctor', 'Muscle Memory', 'Aggressive Surgery', 5, 'Type 1', '5%', 'Self Nano Init Buff 250', '60s',
'Offensive', 'Self +250 nano initiative buff, 60 second duration'),
('Doctor', 'Antiseptic', 'Bedside Manner', 8, 'Type 1', '5%', 'Healing 1133 - 1533', '', 'Offensive',
'Heals 1133 to 1533 max health'),
('Doctor', 'Healing Care', 'Bedside Manner', 6, 'Type 2', '10%', 'Healing (Team) 434-820', '', 'Defensive',
'Heals team 434 to 820 max health'),
('Doctor', 'Anesthetic', 'Diagnosis', 3, 'Type 2', '5%', 'Self HealEff +15%', '60s', 'Offensive',
'Self +15% Heal Efficiency for 60s'),
('Doctor', 'Blood Transfusion', 'Internship', 3, 'Type 1', '5%', 'Healing 327-551', '', 'Offensive',
'Heals 327 to 551 max health'),
('Doctor', 'Pathogen', 'Internship', 4, 'Type 2', '5%', 'DOT 1 3375 Poisondamage (15x225 every 2sec)', '30s',
'Offensive', '225 poison AC damage, 15 hits every 2 seconds'),
('Doctor', 'Massive Vitae Plan', 'Internship', 10, 'Type 2', '5%', 'Self HealEff 25%', '60', 'Offensive',
'Self +25% Heal Efficiency for 60s'),
('Doctor', 'Astringent', 'Rehabilitation', 2, 'Type 2', '5%', 'Init Debuff 350', '20s', 'Offensive',
'Target -350 initiative debuff, 20 second duration, 15% chance to break on hit, 20% chance to break on nano damage, 20% chance to break on debuff'),
('Doctor', 'Inflammation', 'Rehabilitation', 1, 'Type 2', '5%', 'DOT 300 Poisondamage (20x15 every 2sec)', '30s',
'Offensive', '20 poison AC damage, 15 hits every 2 seconds'),
('Doctor', 'Dangerous Culture', 'Toxicology', 10, 'Type 1', '5%', 'DOT 11 250 Poisondamage (15x750 every 2sec)',
'30s', 'Offensive', '750 poison AC damage, 15 hits every 2 seconds'),
('Doctor', 'Anatomic Blight', 'Toxicology', 7, 'Type 2', '5%', 'Init Debuff 569', '', 'Offensive',
'Target -569 initiative debuff, 60 second duration, 10% chance to break on hit, 10% chance to break on nano damage, 10% chance to break on debuff'),
('Doctor', 'Restrictive Bandaging', 'Underground Doctor', 1, 'Type 1', '5%', 'Healing 21-37', '', 'Offensive',
'Heals 21 to 37 max health'),
('Enforcer', 'Vortex of Hate', 'Anger Management', 10, 'Type 1', '5%', 'AOE Taunt, Self HOT 224 x10, 2s delay',
'20s', 'Offensive', 'AOE Taunt, Self heal 224 x10, 2s delay, 20 second duration'),
('Enforcer', 'Vile Rage', 'Anger Management', 3, 'Type 1', '5%', 'Rage +350 Runspeed +200 NR +250 Inits', '60s',
'Offensive', '+350 runspeed, +200 nano resist, +250 initiatives, 60 second duration'),
('Enforcer', 'Tear Ligaments', 'Anger Management', 4, 'Type 1', '5%',
'AR/Dmg Buff (Challenger) +170 Damage +70 AAO +34% Scale', '60s', 'Offensive',
'+70 AAO, 34% scale, +170 damage modifier, 60 second duration'),
('Enforcer', 'Shrug Off Hits', 'Brawlers Sense', 2, 'Type 2', '5%', 'Absorbshield 280', '60s', 'Offensive',
'280 Absorb AC buff, 60 second duration'),
('Enforcer', 'Bust Kneecaps', 'Brawlers Sense', 1, 'Type 2', '5%',
'AR/Dmg Buff (Challenger) +27 Damage +12 AAO +16% Scale', '42s', 'Offensive',
'+12 AAO, 16% scale, and +27 damage modifier, 42 second duration'),
('Enforcer', 'Inspire Rage', 'Brutality', 5, 'Type 1', '5%', 'Taunt 1600', '', 'Offensive',
'1 cold AC damage, target 1600 taunt'),
('Enforcer', 'Inspire Ire', 'Endurance', 6, 'Type 2', '5%', 'Taunt 4750', '', 'Offensive',
'1 energy AC damage, target 4750 taunt'),
('Enforcer', 'Shield of the ogre', 'Endurance', 8, 'Type 1', '5%', 'Absorbshield 745', '60s', 'Offensive',
'742 Absorb AC buff, 60 second duration, 60 second duration'),
('Enforcer', 'Raging Blow', 'Flexibility', 10, 'Type 1', '5%', 'AR/Dmg Buff (Challenger) +255 Damage +111 AAO',
'60s', 'Offensive', '+111 AAO, +255 damage modifier, 60 second duration'),
('Enforcer', 'Violation Buffer', 'Flexibility', 7, 'Type 2', '5%',
'Damageshield +479 Max HP +75 Shield damage +240 Energy AC, Self heal 479', '60s', 'Offensive',
'+479 max health, +60 shield AC, Self heal 479, 60 second duration'),
('Enforcer', 'Ignore Pain', 'Hard Labor', 1, 'Type 2', '5%',
'Damageshield +25 Max HP +10 Shield damage, self heal 25', '60s', 'Offensive',
'+25 max health, +10 shield AC,Self heal 25, 60 second duration'),
('Enforcer', 'Air of hatred', 'Kneecapping', 3, 'Type 2', '5%',
'20m AOE taunt and self HOT, Heal 79 x10, 2s delay', '20s', 'Offensive',
'AOE Taunt, Self heal 79 x10, 2s delay, 20 second duration'),
('Engineer', 'Drone Explosives', 'Combat Applications', 5, 'Type 2', '5%',
'Target Hit 497 - 1016 Projectiledamage', '', 'Offensive', '497 to 1016 projectile AC damage'),
('Engineer', 'Endure Barrage', 'Ergonomics', 3, 'Type 1', '5%', 'AC Buff +500', '60s', 'Offensive',
'+500 AC, 60 second duration'),
('Engineer', 'Destructive Signal', 'Ergonomics', 4, 'Type 1', '5%',
'Melee/Phys/ranged Init Buff +80, Add All DMG +20', '60s', 'Offensive',
'+80 ranged/melee/physical initiative, +20 All DMG 60 second duration'),
('Engineer', 'Assault Force Relief', 'Ergonomics', 10, 'Type 2', '5%', 'AC Buff (Team) +2500', '60s',
'Offensive', 'Team +2500 AC, 60 second duration'),
('Engineer', 'Cushion Blows', 'Mechanical Assistance', 1, 'Type 1', '5%',
'Damageshield +10 Damageshield +40 Melee AC', '60s', 'Offensive',
'+10 shield AC, +40 melee AC, 60 second duration'),
('Engineer', 'Congenial Encasement', 'Mechanical Assistance', 2, 'Type 2', '5%',
'Reflectshield +13% Reflect 7 Max Reflected Damage', '60s', 'Offensive',
'+13% reflect modifier, +7 reflect damage, 60 second duration'),
('Engineer', 'Personal Protection', 'Military Hardware', 1, 'Type 2', '5%', 'AC Buff +130', '60s', 'Offensive',
'+130 AC, 60 second duration'),
('Engineer', 'Energy Transfer', 'Practical Application', 6, 'Type 1', '5%', 'Damageshield +75', '60s',
'Offensive', '+75 shield AC, 60 second duration'),
('Engineer', 'Reactive Armor', 'Practical Application', 8, 'Type 1', '5%', 'Absorbshield 675', '60s',
'Offensive', '675 Absorb AC buff, 60 second duration, 60 second duration'),
('Engineer', 'Splinter Preservation', 'Process Refinement', 3, 'Type 1', '5%', 'Absorbshield 375', '60s',
'Offensive', '+375 AC, 60 second duration'),
('Engineer', 'Drone Missiles', 'Serendipity', 10, 'Type 2', '5%', 'Target Hit 1375 - 3211', '', 'Offensive',
'1375 to 3211 energy AC damage'),
('Engineer', 'Destructive Theorem', 'Serendipity', 7, 'Type 2', '5%', 'Ranged Init Buff +150', '60s',
'Offensive', '+150 ranged initiative, 60 second duration'),
('Fixer', 'Dirty Tricks', 'Acquisition', 6, 'Type 1', '5%', 'Dodge Buff +100', '60s', 'Offensive',
'+100 dodge ranged, 60 second duration'),
('Fixer', 'Fish In A Barrel', 'Cunning', 2, 'Type 1', '5%', 'Evade Debuff -85', '60s', 'Offensive',
'Target -85 duck, dodge, and evade, 60 second duration'),
('Fixer', 'Contaminated Bullets', 'Cunning', 1, 'Type 2', '5%', 'Damage Boost +3', '60s', 'Offensive',
'+3 energy, projectile, and poison damage modifier, 60 second duration'),
('Fixer', 'Luck''s Calamity', 'Cunning', 8, 'Type 1', '5%', 'Evade Debuff -170', '60s', 'Offensive',
'Target -170 duck, dodge, and evade, 60 second duration'),
('Fixer', 'Fighting Chance', 'Fallback Plan', 4, 'Type 2', '5%', 'Damage Boost +50', '60s', 'Offensive',
'+50 damage modifier, 60 second duration'),
('Fixer', 'Underground Sutures', 'Fallback Plan', 1, 'Type 2', '5%', 'HOT 180 - 216 (12x 15-18 every 5 sec)',
'60s', 'Offensive', '15 to 18 healing over time, 1 hit every 5 seconds, 60 second duration'),
('Fixer', 'Backyard Bandages', 'Insurance', 6, 'Type 2', '5%', 'HOT 2172 - 2220 (6x362-370 every 10sec)', '60s',
'Offensive', '362-370 healing over time, 1 hit every 10 seconds, 60 second duration'),
('Fixer', 'Escape The System', 'Respectable Businessman', 4, 'Type 1', '10%',
'Root reducer -45 sec (10% change for proc)', '', 'Offensive', 'Self reduce root 45 seconds'),
('Fixer', 'Bootleg Remedies', 'Respectable Businessman', 10, 'Type 2', '5%',
'HOT 2436 - 2634 (6x406-439 every 10sec)', '60s', 'Offensive',
'406 to 439 healing over time, 1 hit every 10 seconds, 60 second duration'),
('Fixer', 'Slip Them A Mickey', 'Subtlety', 10, 'Type 2', '5%', 'Damage Boost +130', '60s', 'Offensive',
'+130 damage modifier, 60 second duration'),
('Fixer', 'Bending The Rules', 'Subtlety', 7, 'Type 2', '5%', 'Damage Boost +85', '60s', 'Offensive',
'+85 damage modifier, 60 second duration'),
('Fixer', 'Intense Metabolism', 'Smuggler''s Sense', 3, 'Type 1', '5%', 'Self Modify Nano init 250', '60s',
'Offensive', '+250 nano initiative, 60 second duration'),
('Keeper', 'Righteous Strike', 'Wisdom', 1, 'Type 1', '5%', 'Self Modify Damage modifier 20', '60s', 'Offensive',
'+20 damage modifier, 60 second duration'),
('Keeper', 'Faithful Reconstruction', 'Virtue', 1, 'Type 2', '5%', 'Team Hit Health 42 .. 53', '', 'Offensive',
'Team heal 42 to 53 max health'),
('Keeper', 'Eschew the Faithless', 'Wisdom', 2, 'Type 1', '5%',
'Self Modify Duck explosives 14 Dodge ranged 14 Evade close 50', '60s', 'Offensive',
'+50 evade, +14 duck and dodge, 60 second duration'),
('Keeper', 'Symbiotic Bypass', 'Champion', 8, 'Type 1', '5%',
'Evade Buff (Team) +140 Evade ClsC +40 Dodge Ranged +40 Duck Exp', '60s', 'Offensive',
'Team +140 evade, +40 duck dodge, 60 second duration'),
('Keeper', 'Virtuous Reaper', 'Champion', 6, 'Type 1', '5%', 'Damage Boost (Team) +90', '60s', 'Offensive',
'Team +90 damage modifier, 60 second duration'),
('Keeper', 'Righteous Smite', 'Exemplar', 10, 'Type 1', '5%', 'Damage Boost (Team) +200', '60s', 'Offensive',
'Team +200 damage modifier, 60 second duration'),
('Keeper', 'Ambient Purification', 'Exemplar', 7, 'Type 2', '5%', 'Healing (Team) 481-948', '', 'Offensive',
'Team heal 481 to 948 max health'),
('Keeper', 'Subjugation', 'Judgement', 3, 'Type 2', '5%', 'AAO +20 AAD +45 (Team)', '60s', 'Offensive',
'Team AAO +20 AAD +45, 60 seconds'),
('Keeper', 'Ignore the Unrepentant', 'Judgement', 4, 'Type 1', '5%',
'Evade Buff +110 Evade ClsC +30 Dodge Ranged +30 Duck Exp', '60s', 'Offensive',
'+110 evade, +30 duck and dodge, 60 second duration'),
('Keeper', 'Honor Restored', 'Judgement', 10, 'Type 2', '5%', 'AAO +50 AAD +120 (Team)', '', 'Offensive',
'Team AAO +50 AAD +120 60 seconds'),
('Keeper', 'Pure Strike', 'Loyalty', 3, 'Type 1', '5%', 'Damage Boost +65', '60s', 'Offensive',
'+65 damage modifier, 60 second duration'),
('Keeper', 'Benevolent Barrier', 'Paragon', 5, 'Type 2', '5%', 'Reflect Shield +4%', '600s', 'Offensive',
'+4% reflect AC, 10 minute duration'),
('Martial Artist', 'Absolute Fist', 'Alacrity', 10, 'Type 1', '5%', 'Damage Buff +94', '60s', 'Offensive',
'+94 damage modifier, 60 second duration'),
('Martial Artist', 'Strengthen Spirit', 'Alacrity', 3, 'Type 1', '5%', 'AC Buff +269 Melee AC +229 Other AC',
'60s', 'Offensive', '+226 AC, +269 melee AC, 60 second duration'),
('Martial Artist', 'Healing Meditation', 'Cognizance', 5, 'Type 2', '5%', 'Healing 443-981', '', 'Offensive',
'Heals 443 to 981 max health'),
('Martial Artist', 'Debilitating Strike', 'Cognizance', 6, 'Type 2', '5%', 'Crit Increase +19%', '60s',
'Offensive', '+19% critical increase, 60 second duration'),
('Martial Artist', 'Medicinal Remedy', 'Empathy', 1, 'Type 2', '5%', 'Healing 34-59', '', 'Offensive',
'Heals 34 to 59 max health'),
('Martial Artist', 'Strengthen Ki', 'Intuition', 8, 'Type 1', '5%',
'AC Buff +40 Strength +676 Melee AC +573 Other AC', '60s', 'Offensive',
'+40 strength, +574 AC, +676 melee AC, 60 second duration'),
('Martial Artist', 'Smashing Fist', 'Meditation', 4, 'Type 1', '5%', 'Damage Buff +63', '60s', 'Offensive',
'+63 damage modifier, 60 second duration'),
('Martial Artist', 'Self Reconstruction', 'Meditation', 10, 'Type 2', '5%', 'Healing 980 - 1803', '',
'Offensive', 'Heals 980 to 1803 max health'),
('Martial Artist', 'Attack Ligaments', 'Nimble', 2, 'Type 2', '5%', 'Crit Increase +8%', '60s', 'Offensive',
'+8% critical increase, 60 second duration'),
('Martial Artist', 'Stinging Fist', 'Reflex', 1, 'Type 1', '5%', 'Damage Buff +19', '60s', 'Offensive',
'+19 damage modifier, 60 second duration'),
('Martial Artist', 'Disrupt Ki', 'Reflex', 7, 'Type 1', '5%', 'Evade Buff +85', '60s', 'Offensive',
'+85 duck, dodge, and evade, 60 second duration'),
('Meta-Physicist', 'Thoughtful Means', 'Angst', 5, 'Type 2', '5%', 'REduces Nano Cost by 25%', '60s',
'Offensive', 'Reduces nano cost by 25%, 60 second duration'),
('Meta-Physicist', 'Ego Strike', 'Foresight', 6, 'Type 2', '5%', 'Target Hit 802 - 1468 Colddamage', '',
'Offensive', 'Target 802 to 1486 cold AC damage'),
('Meta-Physicist', 'Anticipated Evasion', 'Foresight', 8, 'Type 1', '5%', 'Evade Buff +250', '60s', 'Offensive',
'+250 duck, dodge, and evade, 60 second duration'),
('Meta-Physicist', 'Sow Despair', 'Jealousy', 1, 'Type 2', '5%', 'Target Hit 30-65 Poisondamage', '',
'Offensive', 'Target 30 to 65 poison AC damage'),
('Meta-Physicist', 'Regain Focus', 'Perseverences', 3, 'Type 1', '5%', 'Evade Buff +100', '60s', 'Offensive',
'+100 duck, dodge, and evade, 60 second duration'),
('Meta-Physicist', 'Mind Wail', 'Perseverences', 4, 'Type 2', '5%', 'Target Hit 314-699 Cold-damage', '',
'Offensive', 'Target 314 to 699 cold AC damage'),
('Meta-Physicist', 'Nanobot Contingent Arrest', 'Perseverences', 10, 'Type 2', '5%',
'Fight Target: -750 NanoInit, %Add nano cost +100%, Nano cast interrupt -25%', '60s', 'Offensive',
'Target -750 nano init, add nano cost 100%, decrase interrupt -25%, 60 second duration'),
('Meta-Physicist', 'Economic Nanobot Use', 'Spatial Awareness', 2, 'Type 1', '5%', 'Nanocost Reducer -12%',
'60s', 'Offensive', '-12% nano cost, 60 second duration'),
('Meta-Physicist', 'Diffuse Rage', 'Spatial Awareness', 1, 'Type 2', '5%', 'Damage Debuff -7 Damage -35 Inits',
'60s', 'Offensive', 'Target -7 damage modifier, -35 initiatives, 60 second duration'),
('Meta-Physicist', 'Super-Ego Strike', 'Sympathy', 10, 'Type 2', '5%', 'Target Hit 1500 - 3000 Colddamage', '',
'Offensive', 'Target 1500 to 3000 cold AC damage'),
('Meta-Physicist', 'Suppress Fury', 'Sympathy', 7, 'Type 2', '5%', 'Damage Debuff -75 Damage -261 Inits', '60s',
'Offensive', 'Target -75 damage modifier, -261 initiatives, 60 second duration'),
('Meta-Physicist', 'Sow Doubt', 'Trauma', 3, 'Type 2', '5%', 'Damage Debuff -35 Damage -156 Inits', '60s',
'Offensive', 'Target -35 damage modifier, -156 initiatives, 60 second duration'),
('Nano-Technician', 'Source Tap', 'Combat Execution', 3, 'Type 1', '10%', 'Nano-HOT 1224 (12x102 every 5sec)',
'60s', 'Defensive', '+102 nano points, 1 hit every 15 seconds, 60 second duration'),
('Nano-Technician', 'Powered Nano Fortress', 'Discipline', 5, 'Type 2', '10%',
'AC/HP/NR Buff +167 AC +246 Max HP +111 NR', '60s', 'Defensive',
'+167 AC, +246 max health, +111 nano resist, 60 second duration'),
('Nano-Technician', 'Unstable Library', 'Discipline', 1, 'Type 2', '10%',
'AC/HP/NR Buff +31 AC +50 Max HP +32 NR', '60s', 'Defensive',
'+31 AC, +50 max health +32 nano resist, 60 second duration'),
('Nano-Technician', 'Thermal Reprieve', 'Intellectual Refinement', 9, 'Type 1', '10%',
'Reflectshield +10% Reflect 10 Max Reflect', '60s', 'Defensive',
'+10% reflect AC, +10 max reflect shield, 60 second duration'),
('Nano-Technician', 'Looping Service', 'Intellectual Refinement', 6, 'Type 2', '10%', 'Absorbshield 680', '60s',
'Defensive', '680 Absorb AC buff, 60 second duration'),
('Nano-Technician', 'Harvest Energy', 'Nano Theory', 7, 'Type 1', '10%', 'Nano-HOT 5220 (12x435 every 5sec)',
'60s', 'Defensive', '+435 nano points, 1 hit every 5 seconds, 60 second duration'),
('Nano-Technician', 'Optimized Library', 'Nano Theory', 10, 'Type 2', '10%',
'AC/HP/NR Buff +331 AC +350 Max HP +140 NR', '60s', 'Defensive',
'+331 AC, +350 max health, +140 nano resist, 60 second duration'),
('Nano-Technician', 'Circular Logic', 'Particle Physics', 1, 'Type 1', '10%', 'Nano-HOT 60 (12x5 every 5sec)',
'60s', 'Defensive', '+5 nano points, 1 hit every 5 seconds, 60 second duration'),
('Nano-Technician', 'Increase Momentum', 'Particle Physics', 2, 'Type 2', '10%', 'Nanoinit Buff +200', '60s',
'Defensive', '+200 nano initiative, 60 second duration'),
('Nano-Technician', 'Layered Amnesty', 'Practical Use', 4, 'Type 1', '10%', 'Reflectshield +4%', '60s',
'Defensive', '+4% reflect AC, 60 second duration '),
('Nano-Technician', 'Accelerated Reality', 'Practical Use', 10, 'Type 2', '10%', 'Nanoinit Buff +600', '60s',
'Defensive', '+600 nano initiative, 60 second duration'),
('Shade', 'Drain Essence', 'Ambushing', 5, 'Type 1', '5%', 'HP Drain 382 Energydamage 310 Healing', '',
'Offensive', 'Target -382 energy AC damage, heals 310 max health'),
('Shade', 'Siphon Being', 'Assassin''s Awareness', 8, 'Type 1', '5%', 'HP Drain 580 Energydamage 577 Healing',
'', 'Offensive', 'Target -580 energy AC damage, heals 577 max health'),
('Shade', 'Shadowed Gift', 'Assassin''s Awareness', 6, 'Type 2', '5%',
'DOT 975 Poisondamage (5x195 hits every 1 sec)', '6s', 'Offensive',
'195 poison AC damage, 5 hits every 1 seconds, 6 second duration'),
('Shade', 'Blackheart', 'Honed Senses', 10, 'Type 2', '5%', 'Target Hit 767 Meleedamage', '', 'Offensive',
'Target -767 melee AC damage'),
('Shade', 'Twisted Caress', 'Honed Senses', 7, 'Type 2', '5%', 'Target Hit 550 Meleedamage', '', 'Offensive',
'Target -550 melee AC damage'),
('Shade', 'Devious Spirit', 'Killing Blows', 1, 'Type 2', '5%', 'Target Hit 23 Meleedamage', '', 'Offensive',
'Target -23 melee AC damage'),
('Shade', 'Misdirection', 'Killing Blows', 2, 'Type 2', '5%', 'Evade Buff EvadeClsC 40 DuckExp 25 DodgeRange 25',
'60s', 'Offensive', '+40 evade, +25 duck and dodge, 60 second duration'),
('Shade', 'Sap Life', 'Lithe', 1, 'Type 1', '5%', 'HP Drain 17 Energydamage 7 HP Gain', '', 'Offensive',
'Target -17 energy AC damage, heals 7 max health'),
('Shade', 'Elusive Spirit', 'Malicious Forethought', 4, 'Type 1', '5%',
'Evade Buff EvadeClsC 56 DuckExp 32 DodgeRange 32', '60s', 'Offensive',
'+56 evade, +32 duck and dodge, 60 second duration'),
('Shade', 'Blackened Legacy', 'Malicious Forethought', 10, 'Type 1', '5%',
'Evade Buff EvadeClsC 100 DuckExp 50 DodgeRange 50', '60s', 'Offensive',
'+100 evade, +50 duck and dodge, 60 second duration'),
('Shade', 'Toxic Confusion', 'Malicious Forethought', 3, 'Type 1', '5%',
'DOT 425 Poisondamage (5x85 hits every 1sec)', '6s', 'Offensive',
'85 poison AC damage, 5 hits every 1 seconds, 6 second duration'),
('Shade', 'Concealed Surprise', 'Stiletto Mastery', 3, 'Type 2', '5%', 'Target Hit 234 Meleedamage', '',
'Offensive', 'Target -234 melee AC damage'),
('Soldier', 'Successful Targeting', 'Classified Ops', 1, 'Type 1', '5%', 'AR Buff +23 AAO', '60s', 'Offensive',
'+23 add all offense, 60 second duration'),
('Soldier', 'Shoot Artery', 'Combat Sense', 1, 'Type 2', '5%', 'Damage Buff +15 all damage', '60s', 'Offensive',
'+15 damage modifier, 60 second duration'),
('Soldier', 'Deep Six Initiative', 'Combat Sense', 2, 'Type 2', '5%', 'Init Buff +50', '60s', 'Offensive',
'+50 initiatives, 60 second duration'),
('Soldier', 'Reconditioned', 'Force Recon', 5, 'Type 1', '5%', 'Self Buff +361 Max HP, HOT (650) 13x50 every 5s',
'60s', 'Offensive', '+361 max health, HOT (650) 13x50 5s delay, 60 second duration'),
('Soldier', 'Concussive Shot', 'Forward Observer', 3, 'Type 1', '5%', 'Damage Buff +35 damage', '60s',
'Offensive', '+35 damage modifier, 60 second duration'),
('Soldier', 'Gear Assault Absorption', 'Forward Observer', 4, 'Type 2', '5%', 'Max Reflect DMG +25', '60s',
'Offensive', 'Increases damage reflected by 25, 60 second duration'),
('Soldier', 'Fuse Body Armor', 'Forward Observer', 10, 'Type 2', '5%', 'Max Reflect DMG +75', '60s', 'Offensive',
'Increases damage reflected by 75, 60 second duration'),
('Soldier', 'Emergency Bandages', 'Marksmanship', 3, 'Type 1', '5%',
'Self Buff +200 Max HP, HOT (325) 13x25 every 5s', '60s', 'Offensive',
'+200 max health, HOT (325) 13x25 5sdelay, 60 second duration'),
('Soldier', 'Furious Ammunition', 'Strategic Planning', 10, 'Type 1', '5%', 'Damage Buff +99', '60s',
'Offensive', '+99 damage modifier, 60 second duration'),
('Soldier', 'Graze Jugular Vein', 'Strategic Planning', 7, 'Type 2', '5%', 'Damage Buff +70', '60s', 'Offensive',
'+70 damage modifier, 60 second duration'),
('Soldier', 'On The Double', 'Sweep and Clear', 8, 'Type 2', '5%', 'Init Buff +150', '60s', 'Offensive',
'+150 initiative, 60 second duration'),
('Soldier', 'Target Acquired', 'Sweep and Clear', 6, 'Type 1', '5%', 'AR Buff +35 AAO', '60s', 'Offensive',
'+35 add all offense, 60 second duration'),
('Trader', 'Escrow', 'Aggressive Pricing', 3, 'Type 2', '5%',
'Nanodrain 798 Drain (6x133 every 5sec) 600 Gain (6x100 every 5sec)', '30s', 'Offensive',
'Target -133 nano points, self +100 nano points, 6 hits every 5 seconds, 30 second duration'),
('Trader', 'Unexpected Bonus', 'Door-To-Door Salesman', 3, 'Type 1', '5%',
'HP Drain 300 Energydamage 222 Healing', '', 'Offensive', 'Target -300 energy AC damage, heals 222 max health'),
('Trader', 'Debt Collection', 'Door-To-Door Salesman', 10, 'Type 1', '5%',
'HP Drain 1100 - 1200 Energydamage 1100-1300 Healing', '', 'Offensive',
'Target -1100 to -1200 energy AC damage, heals 1100 to 1300 max health'),
('Trader', 'Unforgiven Debts', 'Door-To-Door Salesman', 4, 'Type 1', '5%',
'Skilldrain 136 Weapon- and Nanoskills Drain(10s)/Gain 68 AAO Drain (PVM) (30s)', '30s', 'Offensive',
'Target -136 weapon and nanoskills, -68 add all offense, self +136 weapon and nanoskills, +68 add all offense, 30 second duration'),
('Trader', 'Unopened Letter', 'Eye for a Deal', 8, 'Type 1', '5%', 'AC Drain +2067 AC -2098 AC', '60s',
'Offensive', 'Target -2098 AC, self 2067 AC, 60 second duration'),
('Trader', 'Exchange Product', 'Eye for a Deal', 6, 'Type 1', '5%', 'HP Drain 990 Energydamage 997 Healing', '',
'Offensive', 'Target -990 energy AC damage, heals 997 max health'),
('Trader', 'Rigid Liquidation', 'Fast Talk', 7, 'Type 2', '5%',
'Nanodrain 1842 Drain (6x307 every 5sec) 1626 Gain (6x271 every 5sec)', '30s', 'Offensive',
'Target -307 nano points, self +271 nano points, 6 hits every 5 seconds, 30 second duration'),
('Trader', 'Accumulated Interest', 'Fast Talk', 10, 'Type 1', '5%',
'Skilldrain 204 Weapon- and Nanoskills Drain(10s)/Gain 102 AAO Drain (PVM) (30s)', '30s', 'Offensive',
'Target -204 weapon and nanoskills, -102 add all offense, self +204 weapon and nanoskills, +102 add all offense, 30 second duration'),
('Trader', 'Deplete Assets', 'Hostile Takeover', 5, 'Type 1', '5%', 'AC Drain +1394 AC -1449 AC', '60s',
'Offensive', 'Target -1449 AC, self +1394 AC, 60 second duration'),
('Trader', 'Rebate', 'Sensible Investment', 1, 'Type 1', '5%', 'HP Drain 43 Energydamage 18 Healing', '',
'Offensive', 'Target -43 energy AC damage, heals 18 max health'),
('Trader', 'Refinance Loans', 'Sensible Investment', 2, 'Type 2', '5%',
'AC Drain -200 AC +200 AC (On fightingtarget)', '60s', 'Offensive',
'Target -200 AC, target''s fighting target +200 AC, 60 second duration'),
('Trader', 'Payment Plan', 'Sensitive Negotiations', 1, 'Type 2', '5%',
'Skilldrain 9 Weapon- and Nanoskills Drain(10s)/Gain 5 AAO Drain (PVM) (30s)', '30s', 'Offensive',
'Target -9 weapon and nanoskills, -5 add all offense, self +9 weapon and nanoskills, +5 add all offense, 30 second duration');
+438
View File
@@ -0,0 +1,438 @@
# noinspection LongLineForFile
DROP TABLE IF EXISTS ofab_armor;
CREATE TABLE ofab_armor
(
profession VARCHAR(30) NOT NULL,
name VARCHAR(150) NOT NULL,
slot VARCHAR(30) NOT NULL,
lowid INT NOT NULL,
highid INT NOT NULL,
upgrade INT NOT NULL
);
INSERT INTO ofab_armor (profession, name, slot, lowid, highid, upgrade)
VALUES ('Adventurer', 'Ofab Adventurer Body Armor', 'body', 264202, 264203, 0),
('Adventurer', 'Ofab Adventurer Boots', 'boots', 264200, 264201, 0),
('Adventurer', 'Ofab Adventurer Pants', 'pants', 264198, 264199, 0),
('Adventurer', 'Ofab Adventurer Sleeves', 'sleeves', 264204, 264205, 0),
('Adventurer', 'Ofab Adventurer Gloves', 'gloves', 264206, 264207, 0),
('Adventurer', 'Ofab Adventurer Helmet', 'helmet', 264208, 264209, 0),
('Adventurer', 'Jayde''s Odyssey ring', 'ring', 267560, 267561, 0),
('Agent', 'Ofab Agent Body Armor', 'body', 264305, 264306, 0),
('Agent', 'Ofab Agent Boots', 'boots', 264311, 264312, 0),
('Agent', 'Ofab Agent Pants', 'pants', 264317, 264318, 0),
('Agent', 'Ofab Agent Sleeves', 'sleeves', 264299, 264300, 0),
('Agent', 'Ofab Agent Gloves', 'gloves', 264293, 264294, 0),
('Agent', 'Ofab Agent Helmet', 'helmet', 264287, 264288, 0),
('Agent', 'Agents'' Ring of Aim', 'ring', 267582, 267583, 0),
('Bureaucrat', 'Ofab Bureaucrat Vest', 'body', 264521, 264522, 0),
('Bureaucrat', 'Ofab Bureaucrat Boots', 'boots', 264527, 264528, 0),
('Bureaucrat', 'Ofab Bureaucrat Pants', 'pants', 264533, 264534, 0),
('Bureaucrat', 'Ofab Bureaucrat Sleeves', 'sleeves', 264515, 264516, 0),
('Bureaucrat', 'Ofab Bureaucrat Gloves', 'gloves', 264509, 264510, 0),
('Bureaucrat', 'Ofab Bureaucrat Headgear', 'helmet', 264503, 264504, 0),
('Bureaucrat', 'Bureaucrats'' Ring of Order', 'ring', 268307, 268308, 0),
('Doctor', 'Ofab Doctor Body', 'body', 264668, 264669, 0),
('Doctor', 'Ofab Doctor Boots', 'boots', 264674, 264675, 0),
('Doctor', 'Ofab Doctor Pants', 'pants', 264680, 264681, 0),
('Doctor', 'Ofab Doctor Sleeves', 'sleeves', 264662, 264663, 0),
('Doctor', 'Ofab Doctor Gloves', 'gloves', 264656, 264657, 0),
('Doctor', 'Ofab Doctor Helmet', 'helmet', 264650, 264651, 0),
('Doctor', 'Sheffy''s Micro Coil', 'ring', 267562, 267563, 0),
('Enforcer', 'Ofab Enforcer Breastplate', 'body', 264223, 264224, 0),
('Enforcer', 'Ofab Enforcer Boots', 'boots', 264217, 264218, 0),
('Enforcer', 'Ofab Enforcer Pants', 'pants', 264211, 264212, 0),
('Enforcer', 'Ofab Enforcer Sleeves', 'sleeves', 264229, 264230, 0),
('Enforcer', 'Ofab Enforcer Gauntlets', 'gloves', 264235, 264236, 0),
('Enforcer', 'Ofab Enforcer Helmet', 'helmet', 264241, 264242, 0),
('Enforcer', 'Band of Bravery', 'ring', 267564, 267565, 0),
('Engineer', 'Ofab Engineer Body', 'body', 264596, 264597, 0),
('Engineer', 'Ofab Engineer Boots', 'boots', 264602, 264603, 0),
('Engineer', 'Ofab Engineer Pants', 'pants', 264608, 264609, 0),
('Engineer', 'Ofab Engineer Sleeves', 'sleeves', 264590, 264591, 0),
('Engineer', 'Ofab Engineer Gloves', 'gloves', 264581, 264582, 0),
('Engineer', 'Ofab Engineer Helmet', 'helmet', 264575, 264576, 0),
('Engineer', 'Rusty''s Ring of Bolts', 'ring', 267566, 267567, 0),
('Fixer', 'Ofab Fixer Body Armor', 'body', 264485, 264486, 0),
('Fixer', 'Ofab Fixer Boots', 'boots', 264491, 264492, 0),
('Fixer', 'Ofab Fixer Pants', 'pants', 264497, 264498, 0),
('Fixer', 'Ofab Fixer Sleeves', 'sleeves', 264479, 264480, 0),
('Fixer', 'Ofab Fixer Gloves', 'gloves', 264473, 264474, 0),
('Fixer', 'Ofab Fixer Helmet', 'helmet', 264467, 264468, 0),
('Fixer', 'Fixers'' Ring of Breaking', 'ring', 267568, 267569, 0),
('Keeper', 'Ofab Keeper Body Armor', 'body', 264632, 264633, 0),
('Keeper', 'Ofab Keeper Boots', 'boots', 264638, 264639, 0),
('Keeper', 'Ofab Keeper Pants', 'pants', 264644, 264645, 0),
('Keeper', 'Ofab Keeper Sleeves', 'sleeves', 264626, 264627, 0),
('Keeper', 'Ofab Keeper Gloves', 'gloves', 264620, 264621, 0),
('Keeper', 'Ofab Keeper Helmet', 'helmet', 264614, 264615, 0),
('Keeper', 'Knights'' Ring of Honour', 'ring', 267570, 267571, 0),
('Martial Artist', 'Ofab Martial Artist Body Armor', 'body', 264341, 264342, 0),
('Martial Artist', 'Ofab Martial Artist Boots', 'boots', 264347, 264348, 0),
('Martial Artist', 'Ofab Martial Artist Pants', 'pants', 264353, 264354, 0),
('Martial Artist', 'Ofab Martial Artist Sleeves', 'sleeves', 264335, 264336, 0),
('Martial Artist', 'Ofab Martial Artist Gloves', 'gloves', 264329, 264330, 0),
('Martial Artist', 'Ofab Martial Artist Helmet', 'helmet', 264323, 264324, 0),
('Martial Artist', 'Engelen''s Ring of Damage', 'ring', 267572, 267573, 0),
('Meta-Physicist', 'Ofab Metaphysicist Body Armor', 'body', 264377, 264378, 0),
('Meta-Physicist', 'Ofab Metaphysicist Boots', 'boots', 264383, 264384, 0),
('Meta-Physicist', 'Ofab Metaphysicist Pants', 'pants', 264389, 264390, 0),
('Meta-Physicist', 'Ofab Metaphysicist Sleeves', 'sleeves', 264371, 264372, 0),
('Meta-Physicist', 'Ofab Metaphysicist Gloves', 'gloves', 264365, 264366, 0),
('Meta-Physicist', 'Ofab Metaphysicist Headgear', 'helmet', 264359, 264360, 0),
('Meta-Physicist', 'XtremTech''s Ring of Casting', 'ring', 268305, 268306, 0),
('Nano-Technician', 'Ofab Nano Technician Body Armor', 'body', 264413, 264414, 0),
('Nano-Technician', 'Ofab Nano Technician Boots', 'boots', 264419, 264420, 0),
('Nano-Technician', 'Ofab Nano Technician Pants', 'pants', 264425, 264426, 0),
('Nano-Technician', 'Ofab Nano Technician Sleeves', 'sleeves', 264407, 264408, 0),
('Nano-Technician', 'Ofab Nano Technician Gloves', 'gloves', 264401, 264402, 0),
('Nano-Technician', 'Ofab Nano Technician Helmet', 'helmet', 264395, 264396, 0),
('Nano-Technician', 'NTs'' Ring of NanoTechnic', 'ring', 267574, 267575, 0),
('Soldier', 'Ofab Soldier Body Armor', 'body', 264449, 264450, 0),
('Soldier', 'Ofab Soldier Boots', 'boots', 264455, 264456, 0),
('Soldier', 'Ofab Soldier Pants', 'pants', 264461, 264462, 0),
('Soldier', 'Ofab Soldier Sleeves', 'sleeves', 264443, 264444, 0),
('Soldier', 'Ofab Soldier Gloves', 'gloves', 264437, 264438, 0),
('Soldier', 'Ofab Soldier Helmet', 'helmet', 264431, 264432, 0),
('Soldier', 'Soldiers'' Ring of Focus', 'ring', 267578, 267579, 0),
('Trader', 'Ofab Trader Body Armor', 'body', 264269, 264270, 0),
('Trader', 'Ofab Trader Boots', 'boots', 264281, 264282, 0),
('Trader', 'Ofab Trader Pants', 'pants', 264275, 264276, 0),
('Trader', 'Ofab Trader Sleeves', 'sleeves', 264263, 264264, 0),
('Trader', 'Ofab Trader Gloves', 'gloves', 264257, 264258, 0),
('Trader', 'Ofab Trader Helmet', 'helmet', 264251, 264252, 0),
('Trader', 'Baffle''s Ring of Fling', 'ring', 267580, 267581, 0),
('Shade', 'Ofab Shade Body Armor', 'body', 264557, 264558, 0),
('Shade', 'Ofab Shade Boots', 'boots', 264563, 264564, 0),
('Shade', 'Ofab Shade Pants', 'pants', 264569, 264570, 0),
('Shade', 'Ofab Shade Sleeves', 'sleeves', 264551, 264552, 0),
('Shade', 'Ofab Shade Gloves', 'gloves', 264545, 264546, 0),
('Shade', 'Ofab Shade Headgear', 'helmet', 264539, 264540, 0),
('Shade', 'Shades'' Ring of Shadows', 'ring', 267576, 267577, 0),
('Adventurer', 'Improved Ofab Adventurer Body Armor', 'body', 264190, 264191, 1),
('Adventurer', 'Improved Ofab Adventurer Boots', 'boots', 264188, 264189, 1),
('Adventurer', 'Improved Ofab Adventurer Pants', 'pants', 264186, 264187, 1),
('Adventurer', 'Improved Ofab Adventurer Sleeves', 'sleeves', 264192, 264193, 1),
('Adventurer', 'Improved Ofab Adventurer Gloves', 'gloves', 264194, 264195, 1),
('Adventurer', 'Improved Ofab Adventurer Helmet', 'helmet', 264196, 264197, 1),
('Agent', 'Improved Ofab Agent Body Armor', 'body', 264303, 264304, 1),
('Agent', 'Improved Ofab Agent Boots', 'boots', 264309, 264310, 1),
('Agent', 'Improved Ofab Agent Pants', 'pants', 264315, 264316, 1),
('Agent', 'Improved Ofab Agent Sleeves', 'sleeves', 264297, 264298, 1),
('Agent', 'Improved Ofab Agent Gloves', 'gloves', 264291, 264292, 1),
('Agent', 'Improved Ofab Agent Helmet', 'helmet', 264285, 264286, 1),
('Bureaucrat', 'Improved Ofab Bureaucrat Vest', 'body', 264519, 264520, 1),
('Bureaucrat', 'Improved Ofab Bureaucrat Boots', 'boots', 264525, 264526, 1),
('Bureaucrat', 'Improved Ofab Bureaucrat Pants', 'pants', 264531, 264532, 1),
('Bureaucrat', 'Improved Ofab Bureaucrat Sleeves', 'sleeves', 264513, 264514, 1),
('Bureaucrat', 'Improved Ofab Bureaucrat Gloves', 'gloves', 264507, 264508, 1),
('Bureaucrat', 'Improved Ofab Bureaucrat Headgear', 'helmet', 264501, 264502, 1),
('Doctor', 'Improved Ofab Doctor Body', 'body', 264666, 264667, 1),
('Doctor', 'Improved Ofab Doctor Boots', 'boots', 264672, 264673, 1),
('Doctor', 'Improved Ofab Doctor Pants', 'pants', 264678, 264679, 1),
('Doctor', 'Improved Ofab Doctor Sleeves', 'sleeves', 264660, 264661, 1),
('Doctor', 'Improved Ofab Doctor Gloves', 'gloves', 264654, 264655, 1),
('Doctor', 'Improved Ofab Doctor Helmet', 'helmet', 264648, 264649, 1),
('Enforcer', 'Improved Ofab Enforcer Breastplate', 'body', 264225, 264226, 1),
('Enforcer', 'Improved Ofab Enforcer Boots', 'boots', 264219, 264220, 1),
('Enforcer', 'Improved Ofab Enforcer Pants', 'pants', 264213, 264214, 1),
('Enforcer', 'Improved Ofab Enforcer Sleeves', 'sleeves', 264231, 264232, 1),
('Enforcer', 'Improved Ofab Enforcer Gauntlets', 'gloves', 264237, 264238, 1),
('Enforcer', 'Improved Ofab Enforcer Helmet', 'helmet', 264243, 264244, 1),
('Engineer', 'Improved Ofab Engineer Body', 'body', 264594, 264595, 1),
('Engineer', 'Improved Ofab Engineer Boots', 'boots', 264600, 264601, 1),
('Engineer', 'Improved Ofab Engineer Pants', 'pants', 264606, 264607, 1),
('Engineer', 'Improved Ofab Engineer Sleeves', 'sleeves', 264585, 264586, 1),
('Engineer', 'Improved Ofab Engineer Gloves', 'gloves', 264579, 264580, 1),
('Engineer', 'Improved Ofab Engineer Helmet', 'helmet', 264573, 264574, 1),
('Fixer', 'Improved Ofab Fixer Body Armor', 'body', 264483, 264484, 1),
('Fixer', 'Improved Ofab Fixer Boots', 'boots', 264489, 264490, 1),
('Fixer', 'Improved Ofab Fixer Pants', 'pants', 264495, 264496, 1),
('Fixer', 'Improved Ofab Fixer Sleeves', 'sleeves', 264477, 264478, 1),
('Fixer', 'Improved Ofab Fixer Gloves', 'gloves', 264471, 264472, 1),
('Fixer', 'Improved Ofab Fixer Helmet', 'helmet', 264465, 264466, 1),
('Keeper', 'Improved Ofab Keeper Body Armor', 'body', 264630, 264631, 1),
('Keeper', 'Improved Ofab Keeper Boots', 'boots', 264636, 264637, 1),
('Keeper', 'Improved Ofab Keeper Pants', 'pants', 264642, 264643, 1),
('Keeper', 'Improved Ofab Keeper Sleeves', 'sleeves', 264624, 264625, 1),
('Keeper', 'Improved Ofab Keeper Gloves', 'gloves', 264618, 264619, 1),
('Keeper', 'Improved Ofab Keeper Helmet', 'helmet', 264612, 264613, 1),
('Martial Artist', 'Improved Ofab Martial Artist Body Armor', 'body', 264339, 264340, 1),
('Martial Artist', 'Improved Ofab Martial Artist Boots', 'boots', 264345, 264346, 1),
('Martial Artist', 'Improved Ofab Martial Artist Pants', 'pants', 264351, 264352, 1),
('Martial Artist', 'Improved Ofab Martial Artist Sleeves', 'sleeves', 264333, 264334, 1),
('Martial Artist', 'Improved Ofab Martial Artist Gloves', 'gloves', 264327, 264328, 1),
('Martial Artist', 'Improved Ofab Martial Artist Helmet', 'helmet', 264321, 264322, 1),
('Meta-Physicist', 'Improved Ofab Metaphysicist Body Armor', 'body', 264375, 264376, 1),
('Meta-Physicist', 'Improved Ofab Metaphysicist Boots', 'boots', 264381, 264382, 1),
('Meta-Physicist', 'Improved Ofab Metaphysicist Pants', 'pants', 264387, 264388, 1),
('Meta-Physicist', 'Improved Ofab Metaphysicist Sleeves', 'sleeves', 264369, 264370, 1),
('Meta-Physicist', 'Improved Ofab Metaphysicist Gloves', 'gloves', 264363, 264364, 1),
('Meta-Physicist', 'Improved Ofab Metaphysicist Headgear', 'helmet', 264357, 264358, 1),
('Nano-Technician', 'Improved Ofab Nano Technician Body Armor', 'body', 264411, 264412, 1),
('Nano-Technician', 'Improved Ofab Nano Technician Boots', 'boots', 264417, 264418, 1),
('Nano-Technician', 'Improved Ofab Nano Technician Pants', 'pants', 264423, 264424, 1),
('Nano-Technician', 'Improved Ofab Nano Technician Sleeves', 'sleeves', 264405, 264406, 1),
('Nano-Technician', 'Improved Ofab Nano Technician Gloves', 'gloves', 264399, 264400, 1),
('Nano-Technician', 'Improved Ofab Nano Technician Helmet', 'helmet', 264393, 264394, 1),
('Soldier', 'Improved Ofab Soldier Body Armor', 'body', 264447, 264448, 1),
('Soldier', 'Improved Ofab Soldier Boots', 'boots', 264453, 264454, 1),
('Soldier', 'Improved Ofab Soldier Pants', 'pants', 264459, 264460, 1),
('Soldier', 'Improved Ofab Soldier Sleeves', 'sleeves', 264441, 264442, 1),
('Soldier', 'Improved Ofab Soldier Gloves', 'gloves', 264435, 264436, 1),
('Soldier', 'Improved Ofab Soldier Helmet', 'helmet', 264429, 264430, 1),
('Trader', 'Improved Ofab Trader Body Armor', 'body', 264267, 264268, 1),
('Trader', 'Improved Ofab Trader Boots', 'boots', 264279, 264280, 1),
('Trader', 'Improved Ofab Trader Pants', 'pants', 264273, 264274, 1),
('Trader', 'Improved Ofab Trader Sleeves', 'sleeves', 264261, 264262, 1),
('Trader', 'Improved Ofab Trader Gloves', 'gloves', 264255, 264256, 1),
('Trader', 'Improved Ofab Trader Helmet', 'helmet', 264249, 264250, 1),
('Shade', 'Improved Ofab Shade Body Armor', 'body', 264555, 264556, 1),
('Shade', 'Improved Ofab Shade Boots', 'boots', 264561, 264562, 1),
('Shade', 'Improved Ofab Shade Pants', 'pants', 264567, 264568, 1),
('Shade', 'Improved Ofab Shade Sleeves', 'sleeves', 264549, 264550, 1),
('Shade', 'Improved Ofab Shade Gloves', 'gloves', 264543, 264544, 1),
('Shade', 'Improved Ofab Shade Headgear', 'helmet', 264537, 264538, 1),
('Adventurer', 'Penultimate Ofab Adventurer Body Armor', 'body', 264178, 264179, 2),
('Adventurer', 'Penultimate Ofab Adventurer Boots', 'boots', 264176, 264177, 2),
('Adventurer', 'Penultimate Ofab Adventurer Pants', 'pants', 264174, 264175, 2),
('Adventurer', 'Penultimate Ofab Adventurer Sleeves', 'sleeves', 264180, 264181, 2),
('Adventurer', 'Penultimate Ofab Adventurer Gloves', 'gloves', 264182, 264183, 2),
('Adventurer', 'Penultimate Ofab Adventurer Helmet', 'helmet', 264184, 264185, 2),
('Agent', 'Penultimate Ofab Agent Body Armor', 'body', 264301, 264302, 2),
('Agent', 'Penultimate Ofab Agent Boots', 'boots', 264307, 264308, 2),
('Agent', 'Penultimate Ofab Agent Pants', 'pants', 264313, 264314, 2),
('Agent', 'Penultimate Ofab Agent Sleeves', 'sleeves', 264295, 264296, 2),
('Agent', 'Penultimate Ofab Agent Gloves', 'gloves', 264289, 264290, 2),
('Agent', 'Penultimate Ofab Agent Helmet', 'helmet', 264283, 264284, 2),
('Bureaucrat', 'Penultimate Ofab Bureaucrat Vest', 'body', 264517, 264518, 2),
('Bureaucrat', 'Penultimate Ofab Bureaucrat Boots', 'boots', 264523, 264524, 2),
('Bureaucrat', 'Penultimate Ofab Bureaucrat Pants', 'pants', 264529, 264530, 2),
('Bureaucrat', 'Penultimate Ofab Bureaucrat Sleeves', 'sleeves', 264511, 264512, 2),
('Bureaucrat', 'Penultimate Ofab Bureaucrat Gloves', 'gloves', 264505, 264506, 2),
('Bureaucrat', 'Penultimate Ofab Bureaucrat Headgear', 'helmet', 264499, 264500, 2),
('Doctor', 'Penultimate Ofab Doctor Body', 'body', 264664, 264665, 2),
('Doctor', 'Penultimate Ofab Doctor Boots', 'boots', 264670, 264671, 2),
('Doctor', 'Penultimate Ofab Doctor Pants', 'pants', 264676, 264677, 2),
('Doctor', 'Penultimate Ofab Doctor Sleeves', 'sleeves', 264658, 264659, 2),
('Doctor', 'Penultimate Ofab Doctor Gloves', 'gloves', 264652, 264653, 2),
('Doctor', 'Penultimate Ofab Doctor Helmet', 'helmet', 264646, 264647, 2),
('Enforcer', 'Penultimate Ofab Enforcer Breastplate', 'body', 264227, 264228, 2),
('Enforcer', 'Penultimate Ofab Enforcer Boots', 'boots', 264221, 264222, 2),
('Enforcer', 'Penultimate Ofab Enforcer Pants', 'pants', 264215, 264216, 2),
('Enforcer', 'Penultimate Ofab Enforcer Sleeves', 'sleeves', 264233, 264234, 2),
('Enforcer', 'Penultimate Ofab Enforcer Gauntlets', 'gloves', 264239, 264240, 2),
('Enforcer', 'Penultimate Ofab Enforcer Helmet', 'helmet', 264245, 264246, 2),
('Engineer', 'Penultimate Ofab Engineer Body', 'body', 264592, 264593, 2),
('Engineer', 'Penultimate Ofab Engineer Boots', 'boots', 264598, 264599, 2),
('Engineer', 'Penultimate Ofab Engineer Pants', 'pants', 264604, 264605, 2),
('Engineer', 'Penultimate Ofab Engineer Sleeves', 'sleeves', 264583, 264584, 2),
('Engineer', 'Penultimate Ofab Engineer Gloves', 'gloves', 264577, 264578, 2),
('Engineer', 'Penultimate Ofab Engineer Helmet', 'helmet', 264571, 264572, 2),
('Fixer', 'Penultimate Ofab Fixer Body Armor', 'body', 264481, 264482, 2),
('Fixer', 'Penultimate Ofab Fixer Boots', 'boots', 264487, 264488, 2),
('Fixer', 'Penultimate Ofab Fixer Pants', 'pants', 264493, 264494, 2),
('Fixer', 'Penultimate Ofab Fixer Sleeves', 'sleeves', 264475, 264476, 2),
('Fixer', 'Penultimate Ofab Fixer Gloves', 'gloves', 264469, 264470, 2),
('Fixer', 'Penultimate Ofab Fixer Helmet', 'helmet', 264463, 264464, 2),
('Keeper', 'Penultimate Ofab Keeper Body Armor', 'body', 264628, 264629, 2),
('Keeper', 'Penultimate Ofab Keeper Boots', 'boots', 264634, 264635, 2),
('Keeper', 'Penultimate Ofab Keeper Pants', 'pants', 264640, 264641, 2),
('Keeper', 'Penultimate Ofab Keeper Sleeves', 'sleeves', 264622, 264623, 2),
('Keeper', 'Penultimate Ofab Keeper Gloves', 'gloves', 264616, 264617, 2),
('Keeper', 'Penultimate Ofab Keeper Helmet', 'helmet', 264610, 264611, 2),
('Martial Artist', 'Penultimate Ofab Martial Artist Body Armor', 'body', 264337, 264338, 2),
('Martial Artist', 'Penultimate Ofab Martial Artist Boots', 'boots', 264343, 264344, 2),
('Martial Artist', 'Penultimate Ofab Martial Artist Pants', 'pants', 264349, 264350, 2),
('Martial Artist', 'Penultimate Ofab Martial Artist Sleeves', 'sleeves', 264331, 264332, 2),
('Martial Artist', 'Penultimate Ofab Martial Artist Gloves', 'gloves', 264325, 264326, 2),
('Martial Artist', 'Penultimate Ofab Martial Artist Helmet', 'helmet', 264319, 264320, 2),
('Meta-Physicist', 'Penultimate Ofab Metaphysicist Body Armor', 'body', 264373, 264374, 2),
('Meta-Physicist', 'Penultimate Ofab Metaphysicist Boots', 'boots', 264379, 264380, 2),
('Meta-Physicist', 'Penultimate Ofab Metaphysicist Pants', 'pants', 264385, 264386, 2),
('Meta-Physicist', 'Penultimate Ofab Metaphysicist Sleeves', 'sleeves', 264367, 264368, 2),
('Meta-Physicist', 'Penultimate Ofab Metaphysicist Gloves', 'gloves', 264361, 264362, 2),
('Meta-Physicist', 'Penultimate Ofab Metaphysicist Headgear', 'helmet', 264355, 264356, 2),
('Nano-Technician', 'Penultimate Ofab Nano Technician Body Armor', 'body', 264409, 264410, 2),
('Nano-Technician', 'Penultimate Ofab Nano Technician Boots', 'boots', 264415, 264416, 2),
('Nano-Technician', 'Penultimate Ofab Nano Technician Pants', 'pants', 264421, 264422, 2),
('Nano-Technician', 'Penultimate Ofab Nano Technician Sleeves', 'sleeves', 264403, 264404, 2),
('Nano-Technician', 'Penultimate Ofab Nano Technician Gloves', 'gloves', 264397, 264398, 2),
('Nano-Technician', 'Penultimate Ofab Nano Technician Helmet', 'helmet', 264391, 264392, 2),
('Soldier', 'Penultimate Ofab Soldier Body Armor', 'body', 264445, 264446, 2),
('Soldier', 'Penultimate Ofab Soldier Boots', 'boots', 264451, 264452, 2),
('Soldier', 'Penultimate Ofab Soldier Pants', 'pants', 264457, 264458, 2),
('Soldier', 'Penultimate Ofab Soldier Sleeves', 'sleeves', 264439, 264440, 2),
('Soldier', 'Penultimate Ofab Soldier Gloves', 'gloves', 264433, 264434, 2),
('Soldier', 'Penultimate Ofab Soldier Helmet', 'helmet', 264427, 264428, 2),
('Trader', 'Penultimate Ofab Trader Body Armor', 'body', 264265, 264266, 2),
('Trader', 'Penultimate Ofab Trader Boots', 'boots', 264277, 264278, 2),
('Trader', 'Penultimate Ofab Trader Pants', 'pants', 264271, 264272, 2),
('Trader', 'Penultimate Ofab Trader Sleeves', 'sleeves', 264259, 264260, 2),
('Trader', 'Penultimate Ofab Trader Gloves', 'gloves', 264253, 264254, 2),
('Trader', 'Penultimate Ofab Trader Helmet', 'helmet', 264247, 264248, 2),
('Shade', 'Penultimate Ofab Shade Body Armor', 'body', 264553, 264554, 2),
('Shade', 'Penultimate Ofab Shade Boots', 'boots', 264559, 264560, 2),
('Shade', 'Penultimate Ofab Shade Pants', 'pants', 264565, 264566, 2),
('Shade', 'Penultimate Ofab Shade Sleeves', 'sleeves', 264547, 264548, 2),
('Shade', 'Penultimate Ofab Shade Gloves', 'gloves', 264541, 264542, 2),
('Shade', 'Penultimate Ofab Shade Headgear', 'helmet', 264535, 264536, 2),
('Adventurer', 'Special Edition Ofab Adventurer Helmet', 'specialhelmet', 267353, 267354, 3),
('Agent', 'Special Edition Ofab Agent Helmet', 'specialhelmet', 267356, 267357, 3),
('Bureaucrat', 'Special Edition Ofab Bureaucrat Headgear', 'specialhelmet', 267363, 267364, 3),
('Doctor', 'Special Edition Ofab Doctor Helmet', 'specialhelmet', 267351, 267352, 3),
('Enforcer', 'Special Edition Ofab Enforcer Helmet', 'specialhelmet', 267365, 267366, 3),
('Engineer', 'Special Edition Ofab Engineer Helmet', 'specialhelmet', 267369, 267370, 3),
('Fixer', 'Special Edition Ofab Fixer Helmet', 'specialhelmet', 267367, 267368, 3),
('Keeper', 'Special Edition Ofab Keeper Helmet', 'specialhelmet', 267375, 267376, 3),
('Martial Artist', 'Special Edition Ofab Martial Artist Helmet', 'specialhelmet', 267371, 267372, 3),
('Meta-Physicist', 'Special Edition Ofab Metaphysicist Headgear', 'specialhelmet', 267373, 267374, 3),
('Nano-Technician', 'Special Edition Ofab Nano Technician Helmet', 'specialhelmet', 267383, 267384, 3),
('Soldier', 'Special Edition Ofab Soldier Helmet', 'specialhelmet', 267379, 267380, 3),
('Trader', 'Special Edition Ofab Trader Helmet', 'specialhelmet', 267381, 267382, 3),
('Shade', 'Special Edition Ofab Shade Headgear', 'specialhelmet', 267377, 267378, 3),
('Adventurer', 'OFAB Adventurer Protective Gear', 'back', 267931, 267931, 3),
('Agent', 'OFAB Agent Protective Gear', 'back', 267509, 267509, 3),
('Bureaucrat', 'OFAB Bureaucrat Protective Gear', 'back', 267932, 267932, 3),
('Doctor', 'OFAB Doctor Protective Gear', 'back', 267933, 267933, 3),
('Enforcer', 'OFAB Enforcer Protective Gear', 'back', 267510, 267510, 3),
('Engineer', 'OFAB Engineer Protective Gear', 'back', 267936, 267936, 3),
('Fixer', 'OFAB Fixer Protective Gear', 'back', 267512, 267512, 3),
('Keeper', 'OFAB Keeper Protective Gear', 'back', 267513, 267513, 3),
('Martial Artist', 'OFAB Martial Artist Protective Gear', 'back', 267937, 267937, 3),
('Meta-Physicist', 'OFAB Meta-Physicist Protective Gear', 'back', 267515, 267515, 3),
('Nano-Technician', 'OFAB Nano Technician Protective Gear', 'back', 267938, 267938, 3),
('Soldier', 'OFAB Soldier Protective Gear', 'back', 267939, 267939, 3),
('Trader', 'OFAB Trader Protective Gear', 'back', 267935, 267935, 3),
('Shade', 'OFAB Shade Protective Gear', 'back', 267934, 267934, 3),
('Adventurer', 'OFAB Adventurer Shoulder Wear', 'shoulder', 301693, 301693, 3),
('Agent', 'OFAB Agent Shoulder Wear', 'shoulder', 301698, 301698, 3),
('Bureaucrat', 'OFAB Bureaucrat Shoulder Wear', 'shoulder', 301696, 301696, 3),
('Doctor', 'OFAB Doctor Shoulder Wear', 'shoulder', 301697, 301697, 3),
('Enforcer', 'OFAB Enforcer Shoulder Wear', 'shoulder', 267511, 267511, 3),
('Engineer', 'OFAB Engineer Shoulder Wear', 'shoulder', 268003, 268003, 3),
('Fixer', 'OFAB Fixer Shoulder Wear', 'shoulder', 301694, 301694, 3),
('Keeper', 'OFAB Keeper Shoulder Wear', 'shoulder', 267514, 267514, 3),
('Martial Artist', 'OFAB Martial Artist Shoulder Wear', 'shoulder', 268004, 268004, 3),
('Meta-Physicist', 'OFAB Metaphysicist Shoulder Wear', 'shoulder', 301695, 301695, 3),
('Nano-Technician', 'OFAB Nano Technician Shoulder Wear', 'shoulder', 268081, 268081, 3),
('Soldier', 'OFAB Soldier Shoulder Wear', 'shoulder', 268186, 268186, 3),
('Trader', 'OFAB Trader Shoulder Wear', 'shoulder', 268006, 268006, 3),
('Shade', 'OFAB Shade Shoulder Wear', 'shoulder', 268005, 268005, 3);
DROP TABLE IF EXISTS ofab_armor_cost;
CREATE TABLE ofab_armor_cost
(
slot varchar(30) NOT NULL,
ql INT NOT NULL,
vp INT NOT NULL
);
INSERT INTO ofab_armor_cost (slot, ql, vp)
VALUES ('ring', 1, 100),
('body', 25, 78),
('boots', 25, 73),
('pants', 25, 73),
('sleeves', 25, 49),
('gloves', 25, 49),
('helmet', 25, 78),
('ring', 25, 253),
('body', 50, 323),
('boots', 50, 302),
('pants', 50, 302),
('sleeves', 50, 202),
('gloves', 50, 202),
('helmet', 50, 323),
('ring', 50, 741),
('body', 75, 736),
('boots', 75, 690),
('pants', 75, 690),
('sleeves', 75, 460),
('gloves', 75, 460),
('helmet', 75, 736),
('ring', 75, 1563),
('body', 100, 1316),
('boots', 100, 1234),
('pants', 100, 1234),
('sleeves', 100, 823),
('gloves', 100, 823),
('helmet', 100, 1316),
('ring', 100, 2719),
('body', 125, 2064),
('boots', 125, 1935),
('pants', 125, 1935),
('sleeves', 125, 1290),
('gloves', 125, 1290),
('helmet', 125, 2064),
('ring', 125, 4210),
('body', 150, 2980),
('boots', 150, 2794),
('pants', 150, 2794),
('sleeves', 150, 1863),
('gloves', 150, 1863),
('helmet', 150, 2980),
('ring', 150, 6035),
('body', 175, 4064),
('boots', 175, 3810),
('pants', 175, 3810),
('sleeves', 175, 2540),
('gloves', 175, 2540),
('helmet', 175, 4064),
('ring', 175, 8193),
('body', 200, 5316),
('boots', 200, 4984),
('pants', 200, 4984),
('sleeves', 200, 3322),
('gloves', 200, 3322),
('helmet', 200, 5316),
('ring', 200, 10687),
('body', 225, 6735),
('boots', 225, 6313),
('pants', 225, 6313),
('sleeves', 225, 4209),
('gloves', 225, 4209),
('helmet', 225, 6735),
('ring', 225, 13513),
('body', 250, 8321),
('boots', 250, 7802),
('pants', 250, 7802),
('sleeves', 250, 5201),
('gloves', 250, 5201),
('helmet', 250, 8321),
('ring', 250, 16674),
('body', 275, 10077),
('boots', 275, 9446),
('pants', 275, 9446),
('sleeves', 275, 6298),
('gloves', 275, 6298),
('helmet', 275, 10077),
('ring', 275, 20171),
('body', 300, 12000),
('boots', 300, 11250),
('pants', 300, 11250),
('sleeves', 300, 7500),
('gloves', 300, 7500),
('helmet', 300, 12000),
('ring', 300, 24000),
('specialhelmet', 300, 30000),
('back', 300, 30000),
('shoulder', 300, 12000);
DROP TABLE IF EXISTS ofab_armor_type;
CREATE TABLE ofab_armor_type
(
type SMALLINT NOT NULL,
profession VARCHAR(30) NOT NULL
);
INSERT INTO ofab_armor_type (type, profession)
VALUES (64, 'Doctor'),
(64, 'Engineer'),
(64, 'Keeper'),
(64, 'Meta-Physicist'),
(295, 'Adventurer'),
(295, 'Enforcer'),
(295, 'Martial Artist'),
(295, 'Soldier'),
(468, 'Bureaucrat'),
(468, 'Nano-Technician'),
(468, 'Trader'),
(935, 'Agent'),
(935, 'Fixer'),
(935, 'Shade');
@@ -0,0 +1,39 @@
# noinspection LongLineForFile
DROP TABLE IF EXISTS ofab_weapons;
CREATE TABLE ofab_weapons
(
type SMALLINT NOT NULL,
name VARCHAR(255) NOT NULL
);
INSERT INTO ofab_weapons (type, name)
VALUES (18, 'Mongoose'),
(18, 'Viper'),
(18, 'Wolf'),
(34, 'Bear'),
(34, 'Panther'),
(687, 'Cobra'),
(687, 'Shark'),
(687, 'Silverback'),
(812, 'Hawk'),
(812, 'Peregrine'),
(812, 'Tiger');
DROP TABLE IF EXISTS ofab_weapons_cost;
CREATE TABLE ofab_weapons_cost
(
ql SMALLINT NOT NULL,
vp SMALLINT NOT NULL
);
INSERT INTO ofab_weapons_cost (ql, vp)
VALUES (25, 117),
(50, 488),
(75, 1110),
(100, 1988),
(125, 2365),
(150, 3497),
(175, 5384),
(200, 7987),
(225, 8617),
(250, 10509),
(275, 13665),
(300, 18000);