From 83da86c3016eebf8ef1b7111cffb0b6011f84dc6 Mon Sep 17 00:00:00 2001 From: Lemongrass3110 Date: Wed, 5 Feb 2020 23:40:59 +0100 Subject: [PATCH] Fixed ITEM_ENCHANTARMS and LG_SHIELDSPELL Fixes #4604 Also fixes csv2yaml for highly customized skill databases. Thanks to @mazvi --- db/pre-re/skill_db.yml | 28 +++++++++++ db/re/skill_db.yml | 28 +++++++++++ src/tool/csv2yaml.cpp | 103 +++++++++++++++++++++++------------------ 3 files changed, 114 insertions(+), 45 deletions(-) diff --git a/db/pre-re/skill_db.yml b/db/pre-re/skill_db.yml index 629ee67742..4bba92a81a 100644 --- a/db/pre-re/skill_db.yml +++ b/db/pre-re/skill_db.yml @@ -13277,6 +13277,27 @@ Body: IsNpc: true Hit: Single HitCount: 1 + Element: + - Level: 1 + Element: Neutral + - Level: 2 + Element: Water + - Level: 3 + Element: Earth + - Level: 4 + Element: Fire + - Level: 5 + Element: Wind + - Level: 6 + Element: Poison + - Level: 7 + Element: Holy + - Level: 8 + Element: Dark + - Level: 9 + Element: Ghost + - Level: 10 + Element: Undead Duration1: 180000 Requires: SpCost: 1 @@ -22168,6 +22189,13 @@ Body: Splash: true Hit: Single HitCount: 1 + Element: + - Level: 1 + Element: Neutral + - Level: 2 + Element: Holy + - Level: 3 + Element: Neutral Knockback: - Level: 1 Amount: 2 diff --git a/db/re/skill_db.yml b/db/re/skill_db.yml index 1a20d24ee6..34cdbb8e7a 100644 --- a/db/re/skill_db.yml +++ b/db/re/skill_db.yml @@ -13872,6 +13872,27 @@ Body: IsNpc: true Hit: Single HitCount: 1 + Element: + - Level: 1 + Element: Neutral + - Level: 2 + Element: Water + - Level: 3 + Element: Earth + - Level: 4 + Element: Fire + - Level: 5 + Element: Wind + - Level: 6 + Element: Poison + - Level: 7 + Element: Holy + - Level: 8 + Element: Dark + - Level: 9 + Element: Ghost + - Level: 10 + Element: Undead Duration1: 180000 Requires: SpCost: 1 @@ -23278,6 +23299,13 @@ Body: Splash: true Hit: Single HitCount: 1 + Element: + - Level: 1 + Element: Neutral + - Level: 2 + Element: Holy + - Level: 3 + Element: Neutral Knockback: - Level: 1 Amount: 2 diff --git a/src/tool/csv2yaml.cpp b/src/tool/csv2yaml.cpp index 981acfe088..120af82b6d 100644 --- a/src/tool/csv2yaml.cpp +++ b/src/tool/csv2yaml.cpp @@ -1584,15 +1584,17 @@ static bool skill_parse_row_skilldb(char* split[], int columns, int current) { body << YAML::EndMap; } - if (atoi(split[1]) != 0) { - memset(arr, 0, sizeof(arr)); - arr_size = skill_split_atoi(split[1], arr); - - body << YAML::Key << "Range"; + memset(arr, 0, sizeof(arr)); + arr_size = skill_split_atoi(split[1], arr); + if (arr_size != 0) { if (arr_size == 1) { - body << YAML::Value << arr[0]; + if (arr[0] != 0) { + body << YAML::Key << "Range"; + body << YAML::Value << arr[0]; + } } else { + body << YAML::Key << "Range"; body << YAML::BeginSeq; for (int i = 0; i < arr_size; i++) { @@ -1612,15 +1614,17 @@ static bool skill_parse_row_skilldb(char* split[], int columns, int current) { body << YAML::Key << "Hit" << YAML::Value << name2Upper(constant); } - if (atoi(split[8]) != 0) { - memset(arr, 0, sizeof(arr)); - arr_size = skill_split_atoi(split[8], arr); - - body << YAML::Key << "HitCount"; + memset(arr, 0, sizeof(arr)); + arr_size = skill_split_atoi(split[8], arr); + if (arr_size != 0) { if (arr_size == 1) { - body << YAML::Value << arr[0]; + if (arr[0] != 0) { + body << YAML::Key << "HitCount"; + body << YAML::Value << arr[0]; + } } else { + body << YAML::Key << "HitCount"; body << YAML::BeginSeq; for (int i = 0; i < arr_size; i++) { @@ -1634,25 +1638,28 @@ static bool skill_parse_row_skilldb(char* split[], int columns, int current) { } } - if (atoi(split[4]) != 0) { - memset(arr, 0, sizeof(arr)); - arr_size = skill_split_atoi(split[4], arr); - - body << YAML::Key << "Element"; + memset(arr, 0, sizeof(arr)); + arr_size = skill_split_atoi(split[4], arr); + if (arr_size != 0) { if (arr_size == 1) { - if (arr[0] == -1) - body << YAML::Value << "Weapon"; - else if (arr[0] == -2) - body << YAML::Value << "Endowed"; - else if (arr[0] == -3) - body << YAML::Value << "Random"; - else { - constant = constant_lookup(arr[0], "ELE_"); - constant.erase(0, 4); - body << YAML::Value << name2Upper(constant); + if (arr[0] != 0){ + body << YAML::Key << "Element"; + + if (arr[0] == -1) + body << YAML::Value << "Weapon"; + else if (arr[0] == -2) + body << YAML::Value << "Endowed"; + else if (arr[0] == -3) + body << YAML::Value << "Random"; + else { + constant = constant_lookup(arr[0], "ELE_"); + constant.erase(0, 4); + body << YAML::Value << name2Upper(constant); + } } } else { + body << YAML::Key << "Element"; body << YAML::BeginSeq; for (int i = 0; i < arr_size; i++) { @@ -1676,15 +1683,17 @@ static bool skill_parse_row_skilldb(char* split[], int columns, int current) { } } - if (atoi(split[6]) != 0) { - memset(arr, 0, sizeof(arr)); - arr_size = skill_split_atoi(split[6], arr); - - body << YAML::Key << "SplashArea"; + memset(arr, 0, sizeof(arr)); + arr_size = skill_split_atoi(split[6], arr); + if (arr_size != 0) { if (arr_size == 1) { - body << YAML::Value << arr[0]; + if (arr[0] != 0) { + body << YAML::Key << "SplashArea"; + body << YAML::Value << arr[0]; + } } else { + body << YAML::Key << "SplashArea"; body << YAML::BeginSeq; for (int i = 0; i < arr_size; i++) { @@ -1698,15 +1707,17 @@ static bool skill_parse_row_skilldb(char* split[], int columns, int current) { } } - if (atoi(split[12]) != 0) { - memset(arr, 0, sizeof(arr)); - arr_size = skill_split_atoi(split[12], arr); - - body << YAML::Key << "ActiveInstance"; + memset(arr, 0, sizeof(arr)); + arr_size = skill_split_atoi(split[12], arr); + if (arr_size != 0) { if (arr_size == 1) { - body << YAML::Value << arr[0]; + if (arr[0] != 0) { + body << YAML::Key << "ActiveInstance"; + body << YAML::Value << arr[0]; + } } else { + body << YAML::Key << "ActiveInstance"; body << YAML::BeginSeq; for (int i = 0; i < arr_size; i++) { @@ -1720,15 +1731,17 @@ static bool skill_parse_row_skilldb(char* split[], int columns, int current) { } } - if (atoi(split[14]) != 0) { - memset(arr, 0, sizeof(arr)); - arr_size = skill_split_atoi(split[14], arr); - - body << YAML::Key << "Knockback"; + memset(arr, 0, sizeof(arr)); + arr_size = skill_split_atoi(split[14], arr); + if (arr_size != 0) { if (arr_size == 1) { - body << YAML::Value << arr[0]; + if (arr[0] != 0) { + body << YAML::Key << "Knockback"; + body << YAML::Value << arr[0]; + } } else { + body << YAML::Key << "Knockback"; body << YAML::BeginSeq; for (int i = 0; i < arr_size; i++) {