wow_dbc 1.0.1 → 1.0.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 2e4f7517b04352b878923798bcff55dc7bdfacb73b314fae1daf16bf3ede9574
4
- data.tar.gz: 5cbbf02b3e37a9fdd1e8ad1a8c9b471ff73e6eb658cd7a38207e7e1f68386852
3
+ metadata.gz: dfaf18639315c2569395c416447ee1eb2d647497de512b0e717585b02678264d
4
+ data.tar.gz: 4d51845c28b8724a3d4ff3f672b499f727f5ad65bd3e3c9d116c4962d239691f
5
5
  SHA512:
6
- metadata.gz: 98f2574fb77720fc4aed8655f9efdd3eea1116dfff9103be1628adb32961eaabcac13f652331083274dd8fe249e2015a5752efd4d87d01db89efc25c5d805338
7
- data.tar.gz: f4865eac2f7d5c12b1d5c800651ced0a8983432f35a807b317a81cde7985565ad5c1a12de33a0d60116ba9eaf0f59931bc1cc8f1c9ffcc5da6551df429e460e8
6
+ metadata.gz: 72da2052394e199fc40bd3a1aae3b54bbe1eb008c3431ce512dfd560230d2b42d7169e6ec68343efe5c7aad9d36a343205e18539a08e26b8b2df850e6c1e6146
7
+ data.tar.gz: a5bb33a31ca06b09775309fcd3f56ecc509f4ce08475bcd0df40a7d9aa9d0075e1194fbda498db3143cb7ae61a3ac5c7170608f84de2278ebb9f42b26abd725d
data/README.md CHANGED
@@ -78,9 +78,12 @@ puts "Newly created item: #{new_item}"
78
78
  # Delete an item (be careful with this!)
79
79
  # dbc.delete_record(new_item_index)
80
80
 
81
- # Write changes back to the file
81
+ # Write changes back to the same file(update)
82
82
  dbc.write
83
83
 
84
+ # Write to a new file
85
+ dbc.write_to('path/to/your/NewItem.dbc')
86
+
84
87
  # Reading header information
85
88
  header = dbc.header
86
89
  puts "Total items: #{header[:record_count]}"
@@ -89,7 +92,7 @@ puts "Fields per item: #{header[:field_count]}"
89
92
  # Finding all two-handed weapons
90
93
  two_handed_weapons = dbc.find_by(:inventory_type, 17) # 17 represents Two-Hand weapons
91
94
 
92
- puts "Two-handed weapons:"
95
+ puts 'Two-handed weapons:'
93
96
  two_handed_weapons.each do |item|
94
97
  puts "Item ID: #{item[:id]}, Class: #{item[:class]}, Subclass: #{item[:subclass]}, Display ID: #{item[:displayid]}"
95
98
  end
@@ -344,6 +344,39 @@ static VALUE dbc_find_by(VALUE self, VALUE field, VALUE value) {
344
344
  return result;
345
345
  }
346
346
 
347
+ static VALUE dbc_write_to(VALUE self, VALUE new_filepath) {
348
+ DBCFile *dbc;
349
+ TypedData_Get_Struct(self, DBCFile, &dbc_data_type, dbc);
350
+
351
+ Check_Type(new_filepath, T_STRING);
352
+ const char *path = StringValueCStr(new_filepath);
353
+
354
+ FILE *file = fopen(path, "wb");
355
+ if (!file) {
356
+ rb_raise(rb_eIOError, "Could not open file for writing: %s", path);
357
+ }
358
+
359
+ if (fwrite(&dbc->header, sizeof(DBCHeader), 1, file) != 1) {
360
+ fclose(file);
361
+ rb_raise(rb_eIOError, "Failed to write DBC header");
362
+ }
363
+
364
+ for (uint32_t i = 0; i < dbc->header.record_count; i++) {
365
+ if (fwrite(dbc->records[i], sizeof(uint32_t), dbc->header.field_count, file) != dbc->header.field_count) {
366
+ fclose(file);
367
+ rb_raise(rb_eIOError, "Failed to write DBC record");
368
+ }
369
+ }
370
+
371
+ if (fwrite(dbc->string_block, 1, dbc->header.string_block_size, file) != dbc->header.string_block_size) {
372
+ fclose(file);
373
+ rb_raise(rb_eIOError, "Failed to write DBC string block");
374
+ }
375
+
376
+ fclose(file);
377
+ return self;
378
+ }
379
+
347
380
  void Init_wow_dbc(void) {
348
381
  rb_mWowDBC = rb_define_module("WowDBC");
349
382
  rb_cDBCFile = rb_define_class_under(rb_mWowDBC, "DBCFile", rb_cObject);
@@ -351,6 +384,7 @@ void Init_wow_dbc(void) {
351
384
  rb_define_method(rb_cDBCFile, "initialize", dbc_initialize, 2);
352
385
  rb_define_method(rb_cDBCFile, "read", dbc_read, 0);
353
386
  rb_define_method(rb_cDBCFile, "write", dbc_write, 0);
387
+ rb_define_method(rb_cDBCFile, "write_to", dbc_write_to, 1);
354
388
  rb_define_method(rb_cDBCFile, "create_record", dbc_create_record, 0);
355
389
  rb_define_method(rb_cDBCFile, "create_record_with_values", dbc_create_record_with_values, 1);
356
390
  rb_define_method(rb_cDBCFile, "update_record", dbc_update_record, 3);
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module WowDBC
4
- VERSION = '1.0.1'
4
+ VERSION = '1.0.3'
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: wow_dbc
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.1
4
+ version: 1.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - sebi
@@ -9,7 +9,21 @@ autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
11
  date: 2024-09-22 00:00:00.000000000 Z
12
- dependencies: []
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rake-compiler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: 1.2.7
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: 1.2.7
13
27
  description: WowDBC provides a Ruby interface to read, write, and manipulate World
14
28
  of Warcraft DBC (Database Client) files. It offers efficient CRUD operations and
15
29
  seamless integration with Ruby projects, making it ideal for WoW addon development,