浏览代码

Fixed ITEM_ENCHANTARMS and LG_SHIELDSPELL

Fixes #4604
Also fixes csv2yaml for highly customized skill databases.

Thanks to @mazvi
Lemongrass3110 5 年之前
父节点
当前提交
83da86c301
共有 3 个文件被更改,包括 114 次插入45 次删除
  1. 28 0
      db/pre-re/skill_db.yml
  2. 28 0
      db/re/skill_db.yml
  3. 58 45
      src/tool/csv2yaml.cpp

+ 28 - 0
db/pre-re/skill_db.yml

@@ -13277,6 +13277,27 @@ Body:
       IsNpc: true
       IsNpc: true
     Hit: Single
     Hit: Single
     HitCount: 1
     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
     Duration1: 180000
     Requires:
     Requires:
       SpCost: 1
       SpCost: 1
@@ -22168,6 +22189,13 @@ Body:
       Splash: true
       Splash: true
     Hit: Single
     Hit: Single
     HitCount: 1
     HitCount: 1
+    Element:
+      - Level: 1
+        Element: Neutral
+      - Level: 2
+        Element: Holy
+      - Level: 3
+        Element: Neutral
     Knockback:
     Knockback:
       - Level: 1
       - Level: 1
         Amount: 2
         Amount: 2

+ 28 - 0
db/re/skill_db.yml

@@ -13872,6 +13872,27 @@ Body:
       IsNpc: true
       IsNpc: true
     Hit: Single
     Hit: Single
     HitCount: 1
     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
     Duration1: 180000
     Requires:
     Requires:
       SpCost: 1
       SpCost: 1
@@ -23278,6 +23299,13 @@ Body:
       Splash: true
       Splash: true
     Hit: Single
     Hit: Single
     HitCount: 1
     HitCount: 1
+    Element:
+      - Level: 1
+        Element: Neutral
+      - Level: 2
+        Element: Holy
+      - Level: 3
+        Element: Neutral
     Knockback:
     Knockback:
       - Level: 1
       - Level: 1
         Amount: 2
         Amount: 2

+ 58 - 45
src/tool/csv2yaml.cpp

@@ -1584,15 +1584,17 @@ static bool skill_parse_row_skilldb(char* split[], int columns, int current) {
 		body << YAML::EndMap;
 		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) {
 		if (arr_size == 1) {
-			body << YAML::Value << arr[0];
+			if (arr[0] != 0) {
+				body << YAML::Key << "Range";
+				body << YAML::Value << arr[0];
+			}
 		} else {
 		} else {
+			body << YAML::Key << "Range";
 			body << YAML::BeginSeq;
 			body << YAML::BeginSeq;
 
 
 			for (int i = 0; i < arr_size; i++) {
 			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);
 		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) {
 		if (arr_size == 1) {
-			body << YAML::Value << arr[0];
+			if (arr[0] != 0) {
+				body << YAML::Key << "HitCount";
+				body << YAML::Value << arr[0];
+			}
 		} else {
 		} else {
+			body << YAML::Key << "HitCount";
 			body << YAML::BeginSeq;
 			body << YAML::BeginSeq;
 
 
 			for (int i = 0; i < arr_size; i++) {
 			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_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 {
 		} else {
+			body << YAML::Key << "Element";
 			body << YAML::BeginSeq;
 			body << YAML::BeginSeq;
 
 
 			for (int i = 0; i < arr_size; i++) {
 			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) {
 		if (arr_size == 1) {
-			body << YAML::Value << arr[0];
+			if (arr[0] != 0) {
+				body << YAML::Key << "SplashArea";
+				body << YAML::Value << arr[0];
+			}
 		} else {
 		} else {
+			body << YAML::Key << "SplashArea";
 			body << YAML::BeginSeq;
 			body << YAML::BeginSeq;
 
 
 			for (int i = 0; i < arr_size; i++) {
 			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) {
 		if (arr_size == 1) {
-			body << YAML::Value << arr[0];
+			if (arr[0] != 0) {
+				body << YAML::Key << "ActiveInstance";
+				body << YAML::Value << arr[0];
+			}
 		} else {
 		} else {
+			body << YAML::Key << "ActiveInstance";
 			body << YAML::BeginSeq;
 			body << YAML::BeginSeq;
 
 
 			for (int i = 0; i < arr_size; i++) {
 			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) {
 		if (arr_size == 1) {
-			body << YAML::Value << arr[0];
+			if (arr[0] != 0) {
+				body << YAML::Key << "Knockback";
+				body << YAML::Value << arr[0];
+			}
 		} else {
 		} else {
+			body << YAML::Key << "Knockback";
 			body << YAML::BeginSeq;
 			body << YAML::BeginSeq;
 
 
 			for (int i = 0; i < arr_size; i++) {
 			for (int i = 0; i < arr_size; i++) {