716 lines
28 KiB
Ruby
Executable File
716 lines
28 KiB
Ruby
Executable File
# Greg Smith
|
|
# Rockstar North
|
|
# 7/6/2010
|
|
|
|
# Generates stats enum pch file from source xml files
|
|
|
|
require 'pipeline/config/projects'
|
|
require 'pipeline/util/rage'
|
|
require 'xml'
|
|
|
|
config = Pipeline::Config.instance
|
|
|
|
p = config.project
|
|
p.load_config
|
|
|
|
source_xml_files = [ "#{p.common}/data/spStatsSetup.xml", "#{p.common}/data/mpstatssetup.xml" ]
|
|
target_pch_file = "#{p.root}/script/dev/core/game/data/stats_enums.sch"
|
|
target_sch_file_containing_init_function = "#{p.root}/script/dev/multiplayer/include/public/net_stat_generator.sch"
|
|
|
|
class Numeric
|
|
def ones_complement(bits)
|
|
self ^ ((1 << bits) - 1)
|
|
end
|
|
end
|
|
|
|
class ScriptStat
|
|
attr_reader :name, :Type, :Default, :ses, :OmitTimestamp, :UserData, :Owner, :Comment, :characterStat, :Online
|
|
attr_writer :name, :Type, :Default, :ses, :OmitTimestamp, :UserData, :Owner, :Comment, :characterStat, :Online
|
|
end
|
|
|
|
class ScriptEnumGenerator
|
|
|
|
def initialize()
|
|
|
|
@stats = Array.new()
|
|
@gen_int_stats = Array.new()
|
|
@gen_float_stats = Array.new()
|
|
@gen_bool_stats = Array.new()
|
|
@gen_userid_stats = Array.new()
|
|
@gen_string_stats = Array.new()
|
|
@gen_label_stats = Array.new()
|
|
@gen_date_stats = Array.new()
|
|
@gen_vector_stats = Array.new()
|
|
@player_int_stats = Array.new()
|
|
@player_float_stats = Array.new()
|
|
@player_bool_stats = Array.new()
|
|
@player_userid_stats = Array.new()
|
|
@player_string_stats = Array.new()
|
|
@player_label_stats = Array.new()
|
|
@player_date_stats = Array.new()
|
|
@player_vector_stats = Array.new()
|
|
@award_player_int_stats = Array.new()
|
|
@award_player_float_stats = Array.new()
|
|
@award_player_bool_stats = Array.new()
|
|
@award_player_userid_stats = Array.new()
|
|
@award_player_date_stats = Array.new()
|
|
@award_general_int_stats = Array.new()
|
|
@award_general_float_stats = Array.new()
|
|
@award_general_bool_stats = Array.new()
|
|
@award_general_userid_stats = Array.new()
|
|
@award_general_date_stats = Array.new()
|
|
@award_character_int_stats = Array.new()
|
|
@award_character_float_stats = Array.new()
|
|
@award_character_bool_stats = Array.new()
|
|
@award_character_userid_stats = Array.new()
|
|
@award_character_date_stats = Array.new()
|
|
@int_stats = Array.new()
|
|
@float_stats = Array.new()
|
|
@bool_stats = Array.new()
|
|
@userid_stats = Array.new()
|
|
@string_stats = Array.new()
|
|
@label_stats = Array.new()
|
|
@date_stats = Array.new()
|
|
@vector_stats = Array.new()
|
|
@r = RageUtils::new( Pipeline::Config.instance.project )
|
|
end
|
|
|
|
def add_file( filename )
|
|
|
|
doc = XML::Document.file(filename)
|
|
doc.root.find('stats/stat').each { |stat_node|
|
|
|
|
ss = ScriptStat.new()
|
|
ss.name = stat_node.attributes['Name']
|
|
if ( ss.name.length > 32 ) then
|
|
$stderr.puts "A stat name is over 32 characters long: #{ss.name}"
|
|
Process.exit!(false)
|
|
end
|
|
|
|
ss.Type = stat_node.attributes['Type']
|
|
if ( ss.Type != 'int' and ss.Type != 's64' and ss.Type != 'float' and ss.Type != 'bool' and ss.Type != 'string' and ss.Type != 'label' and ss.Type != 'u8' and ss.Type != 'u16' and ss.Type != 'u32' and ss.Type != 'u64' and ss.Type != 'packed' and ss.Type != 'date' and ss.Type != 'pos' and ss.Type != 'userid' and ss.Type != 'profilesetting') then
|
|
$stderr.puts "A stat name has invalid type: #{ss.name} : #{ss.Type}"
|
|
Process.exit!(false)
|
|
end
|
|
|
|
ss.Default = stat_node.attributes['Default']
|
|
if ( ss.Default == '' ) then
|
|
$stderr.puts "A stat name has invalid Default value: #{ss.name} : #{ss.Default}"
|
|
Process.exit!(false)
|
|
end
|
|
|
|
ss.ses = stat_node.attributes['ses']
|
|
if ( ss.ses == '' ) then
|
|
$stderr.puts "A stat name has invalid ses value: #{ss.name} : #{ss.ses}"
|
|
Process.exit!(false)
|
|
end
|
|
|
|
ss.OmitTimestamp = stat_node.attributes['OmitTimestamp']
|
|
if ( ss.OmitTimestamp == '' ) then
|
|
$stderr.puts "A stat name has invalid OmitTimestamp value: #{ss.name} : #{ss.OmitTimestamp}"
|
|
Process.exit!(false)
|
|
end
|
|
|
|
ss.UserData = stat_node.attributes['UserData']
|
|
if ( ss.UserData == '' ) then
|
|
$stderr.puts "A stat name has invalid UserData value: #{ss.name} : #{ss.UserData}"
|
|
Process.exit!(false)
|
|
end
|
|
|
|
ss.Owner = stat_node.attributes['Owner']
|
|
if ( ss.Owner == '' ) then
|
|
$stderr.puts "A stat name has invalid Owner value: #{ss.name} : #{ss.Owner}"
|
|
Process.exit!(false)
|
|
end
|
|
|
|
ss.Comment = stat_node.attributes['Comment']
|
|
if ( ss.Comment == '' ) then
|
|
$stderr.puts "A stat name has invalid Comment value: #{ss.name} : #{ss.Comment}"
|
|
Process.exit!(false)
|
|
end
|
|
|
|
if ( ss.Type == 'profilesetting' ) then
|
|
|
|
elsif ss.name.start_with?("MPGEN_")
|
|
if ss.name.start_with?("MPGEN_AWD_")
|
|
name_without_prefix = ss.name[10, ss.name.length-1]
|
|
case ss.Type
|
|
when 'int', 's64', 'u8', 'u16', 'u32', 'u64', 'packed'
|
|
@award_general_int_stats << ss
|
|
when 'float'
|
|
@award_general_float_stats << ss
|
|
when 'bool'
|
|
@award_general_bool_stats << ss
|
|
when 'date'
|
|
@award_general_date_stats << ss
|
|
when 'userid'
|
|
@award_general_userid_stats << ss
|
|
else
|
|
$stderr.puts "A stat name has unhandled type: #{ss.name} : #{ss.Type}"
|
|
Process.exit!(false)
|
|
end
|
|
else
|
|
name_without_prefix = ss.name[6, ss.name.length-1]
|
|
case ss.Type
|
|
when 'int', 's64', 'u8', 'u16', 'u32', 'u64', 'packed'
|
|
@gen_int_stats << ss
|
|
when 'float'
|
|
@gen_float_stats << ss
|
|
when 'bool'
|
|
@gen_bool_stats << ss
|
|
when 'string'
|
|
@gen_string_stats << ss
|
|
when 'label'
|
|
@gen_label_stats << ss
|
|
when 'date'
|
|
@gen_date_stats << ss
|
|
when 'pos'
|
|
@gen_vector_stats << ss
|
|
when 'userid'
|
|
@gen_userid_stats << ss
|
|
else
|
|
$stderr.puts "A stat name has unhandled type: #{ss.name} : #{ss.Type}"
|
|
Process.exit!(false)
|
|
end
|
|
end
|
|
|
|
|
|
elsif ss.name.start_with?("MPPLY_")
|
|
if ss.name.start_with?("MPPLY_AWD_")
|
|
name_without_prefix = ss.name[10, ss.name.length-1]
|
|
case ss.Type
|
|
when 'int', 's64', 'u8', 'u16', 'u32', 'u64' , 'packed'
|
|
@award_player_int_stats << ss
|
|
when 'float'
|
|
@award_player_float_stats << ss
|
|
when 'bool'
|
|
@award_player_bool_stats << ss
|
|
when 'date'
|
|
@award_player_date_stats << ss
|
|
when 'userid'
|
|
@award_player_userid_stats << ss
|
|
else
|
|
$stderr.puts "A stat name has unhandled type: #{ss.name} : #{ss.Type}"
|
|
Process.exit!(false)
|
|
end
|
|
else
|
|
name_without_prefix = ss.name[6, ss.name.length-1]
|
|
case ss.Type
|
|
when 'int', 's64', 'u8', 'u16', 'u32', 'u64' , 'packed'
|
|
@player_int_stats << ss
|
|
when 'float'
|
|
@player_float_stats << ss
|
|
when 'bool'
|
|
@player_bool_stats << ss
|
|
when 'string'
|
|
@player_string_stats << ss
|
|
when 'label'
|
|
@player_label_stats << ss
|
|
when 'date'
|
|
@player_date_stats << ss
|
|
when 'pos'
|
|
@player_vector_stats << ss
|
|
when 'userid'
|
|
@player_userid_stats << ss
|
|
else
|
|
$stderr.puts "A stat name has unhandled type: #{ss.name} : #{ss.Type}"
|
|
Process.exit!(false)
|
|
end
|
|
|
|
end
|
|
else
|
|
|
|
ss.characterStat = stat_node.attributes['characterStat']
|
|
if ( ss.characterStat == 'true' ) then
|
|
ss.Online = stat_node.attributes['online']
|
|
if ( ss.Online == 'true' ) then
|
|
|
|
ss0 = ScriptStat.new()
|
|
ss0.name = "MP0_#{ss.name}"
|
|
ss0.Type = stat_node.attributes['Type']
|
|
ss0.Default = stat_node.attributes['Default']
|
|
ss0.ses = stat_node.attributes['ses']
|
|
ss0.OmitTimestamp = stat_node.attributes['OmitTimestamp']
|
|
ss0.UserData = stat_node.attributes['UserData']
|
|
ss0.Owner = stat_node.attributes['Owner']
|
|
ss0.Comment = stat_node.attributes['Comment']
|
|
@stats << ss0
|
|
|
|
ss1 = ScriptStat.new()
|
|
ss1.name = "MP1_#{ss.name}"
|
|
ss1.Type = stat_node.attributes['Type']
|
|
ss1.Default = stat_node.attributes['Default']
|
|
ss1.ses = stat_node.attributes['ses']
|
|
ss1.OmitTimestamp = stat_node.attributes['OmitTimestamp']
|
|
ss1.UserData = stat_node.attributes['UserData']
|
|
ss1.Owner = stat_node.attributes['Owner']
|
|
ss1.Comment = stat_node.attributes['Comment']
|
|
@stats << ss1
|
|
|
|
ss2 = ScriptStat.new()
|
|
ss2.name = "MP2_#{ss.name}"
|
|
ss2.Type = stat_node.attributes['Type']
|
|
ss2.Default = stat_node.attributes['Default']
|
|
ss2.ses = stat_node.attributes['ses']
|
|
ss2.OmitTimestamp = stat_node.attributes['OmitTimestamp']
|
|
ss2.UserData = stat_node.attributes['UserData']
|
|
ss2.Owner = stat_node.attributes['Owner']
|
|
ss2.Comment = stat_node.attributes['Comment']
|
|
@stats << ss2
|
|
|
|
ss3 = ScriptStat.new()
|
|
ss3.name = "MP3_#{ss.name}"
|
|
ss3.Type = stat_node.attributes['Type']
|
|
ss3.Default = stat_node.attributes['Default']
|
|
ss3.ses = stat_node.attributes['ses']
|
|
ss3.OmitTimestamp = stat_node.attributes['OmitTimestamp']
|
|
ss3.UserData = stat_node.attributes['UserData']
|
|
ss3.Owner = stat_node.attributes['Owner']
|
|
ss3.Comment = stat_node.attributes['Comment']
|
|
@stats << ss3
|
|
|
|
ss4 = ScriptStat.new()
|
|
ss4.name = "MP4_#{ss.name}"
|
|
ss4.Type = stat_node.attributes['Type']
|
|
ss4.Default = stat_node.attributes['Default']
|
|
ss4.ses = stat_node.attributes['ses']
|
|
ss4.OmitTimestamp = stat_node.attributes['OmitTimestamp']
|
|
ss4.UserData = stat_node.attributes['UserData']
|
|
ss4.Owner = stat_node.attributes['Owner']
|
|
ss4.Comment = stat_node.attributes['Comment']
|
|
@stats << ss4
|
|
|
|
else
|
|
ss0 = ScriptStat.new()
|
|
ss0.name = "SP0_#{ss.name}"
|
|
ss0.Type = stat_node.attributes['Type']
|
|
ss0.Default = stat_node.attributes['Default']
|
|
ss0.ses = stat_node.attributes['ses']
|
|
ss0.OmitTimestamp = stat_node.attributes['OmitTimestamp']
|
|
ss0.UserData = stat_node.attributes['UserData']
|
|
ss0.Owner = stat_node.attributes['Owner']
|
|
ss0.Comment = stat_node.attributes['Comment']
|
|
@stats << ss0
|
|
|
|
ss1 = ScriptStat.new()
|
|
ss1.name = "SP1_#{ss.name}"
|
|
ss1.Type = stat_node.attributes['Type']
|
|
ss1.Default = stat_node.attributes['Default']
|
|
ss1.ses = stat_node.attributes['ses']
|
|
ss1.OmitTimestamp = stat_node.attributes['OmitTimestamp']
|
|
ss1.UserData = stat_node.attributes['UserData']
|
|
ss1.Owner = stat_node.attributes['Owner']
|
|
ss1.Comment = stat_node.attributes['Comment']
|
|
@stats << ss1
|
|
|
|
ss2 = ScriptStat.new()
|
|
ss2.name = "SP2_#{ss.name}"
|
|
ss2.Type = stat_node.attributes['Type']
|
|
ss2.Default = stat_node.attributes['Default']
|
|
ss2.ses = stat_node.attributes['ses']
|
|
ss2.OmitTimestamp = stat_node.attributes['OmitTimestamp']
|
|
ss2.UserData = stat_node.attributes['UserData']
|
|
ss2.Owner = stat_node.attributes['Owner']
|
|
ss2.Comment = stat_node.attributes['Comment']
|
|
@stats << ss2
|
|
end
|
|
else
|
|
@stats << ss
|
|
end
|
|
|
|
end
|
|
|
|
ss.characterStat = stat_node.attributes['characterStat']
|
|
if ( ss.characterStat == 'true' ) then
|
|
ss.Online = stat_node.attributes['online']
|
|
if ( ss.Online == 'true' ) then
|
|
if ss.name.start_with?("AWD_")
|
|
name_without_prefix = ss.name[4, ss.name.length-1]
|
|
case ss.Type
|
|
when 'int', 's64', 'u8', 'u16', 'u32', 'u64', 'packed'
|
|
@award_character_int_stats << name_without_prefix
|
|
when 'float'
|
|
@award_character_float_stats << name_without_prefix
|
|
when 'bool'
|
|
@award_character_bool_stats << name_without_prefix
|
|
when 'userid'
|
|
@award_character_userid_stats << name_without_prefix
|
|
else
|
|
$stderr.puts "A stat name has unhandled type: #{ss.name} : #{ss.Type}"
|
|
Process.exit!(false)
|
|
end
|
|
else
|
|
name_without_prefix = ss.name
|
|
case ss.Type
|
|
when 'int', 's64', 'u8', 'u16', 'u32', 'u64', 'packed'
|
|
@int_stats << name_without_prefix
|
|
when 'float'
|
|
@float_stats << name_without_prefix
|
|
when 'bool'
|
|
@bool_stats << name_without_prefix
|
|
when 'string'
|
|
@string_stats << name_without_prefix
|
|
when 'label'
|
|
@label_stats << name_without_prefix
|
|
when 'date'
|
|
@date_stats << name_without_prefix
|
|
when 'pos'
|
|
@vector_stats << name_without_prefix
|
|
when 'userid'
|
|
@userid_stats << name_without_prefix
|
|
else
|
|
$stderr.puts "A stat name has unhandled type: #{ss.name} : #{ss.Type}"
|
|
Process.exit!(false)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
}
|
|
end
|
|
|
|
|
|
def write_enum_of_type(output_file, uppercase_string, array_of_stats)
|
|
output_file.write("ENUM MP_#{uppercase_string}_STATS\n")
|
|
if array_of_stats.size > 0
|
|
array_of_stats.each { |stat_name| output_file.write("\tMP_STAT_#{stat_name},\n") }
|
|
output_file.write("\tMAX_NUM_MP_#{uppercase_string}_STATS\n")
|
|
else
|
|
|
|
output_file.write("\tMAX_NUM_MP_#{uppercase_string}_STATS = 1\n")
|
|
end
|
|
output_file.write("ENDENUM\n\n")
|
|
end
|
|
|
|
def write_enum_of_type_award(output_file, uppercase_string, array_of_stats)
|
|
output_file.write("ENUM MP_#{uppercase_string}_AWARD\n")
|
|
if array_of_stats.size > 0
|
|
array_of_stats.each { |stat_name| output_file.write("\tMP_AWARD_#{stat_name},\n") }
|
|
output_file.write("\tMAX_NUM_MP_#{uppercase_string}_AWARD\n")
|
|
else
|
|
|
|
output_file.write("\tMAX_NUM_MP_#{uppercase_string}_AWARD = 1\n")
|
|
end
|
|
output_file.write("ENDENUM\n\n")
|
|
end
|
|
|
|
|
|
# def write_array_of_type(output_file, string_with_uppercase_initial, array_of_stats)
|
|
# uppercase_string = string_with_uppercase_initial.upcase
|
|
# output_file.write("STATSENUM MP#{string_with_uppercase_initial}StatNamesArray[MAX_MP_#{uppercase_string}_STATS][MAX_NUM_CHARACTER_SLOTS]\n")
|
|
# end
|
|
|
|
def write_array_stats_initialisation_char(output_file, string_with_uppercase_initial, array_of_stats)
|
|
if array_of_stats.size > 0
|
|
array_of_stats.each do |stat_name|
|
|
0.upto(4) do |player_index|
|
|
output_file.write("\tMP#{string_with_uppercase_initial}StatNamesArray[MP_STAT_#{stat_name}][#{player_index}] = MP#{player_index}_#{stat_name}\n")
|
|
end
|
|
end
|
|
output_file.write("\n\n")
|
|
end
|
|
end
|
|
|
|
def write_array_award_initialisation_char(output_file, string_with_uppercase_initial, array_of_stats)
|
|
if array_of_stats.size > 0
|
|
array_of_stats.each do |stat_name|
|
|
0.upto(4) do |player_index|
|
|
output_file.write("\tMP#{string_with_uppercase_initial}StatNamesArray[MP_AWARD_#{stat_name}][#{player_index}] = MP#{player_index}_AWD_#{stat_name}\n")
|
|
end
|
|
end
|
|
output_file.write("\n\n")
|
|
end
|
|
end
|
|
|
|
def write_array_award_initialisation(output_file, string_with_uppercase_initial, array_of_stats)
|
|
if array_of_stats.size > 0
|
|
array_of_stats.each do |ss|
|
|
output_file.write("\tMPAwd#{string_with_uppercase_initial}StatNamesArray[#{ss.name}_INDEX] = #{ss.name}\n")
|
|
end
|
|
output_file.write("\n\n")
|
|
end
|
|
end
|
|
|
|
def write_array_stat_initialisation(output_file, string_with_uppercase_initial, array_of_stats)
|
|
if array_of_stats.size > 0
|
|
array_of_stats.each do |ss|
|
|
output_file.write("\tMP#{string_with_uppercase_initial}StatNamesArray[#{ss.name}_INDEX] = #{ss.name}\n")
|
|
end
|
|
output_file.write("\n\n")
|
|
end
|
|
end
|
|
|
|
def write_enum_with_hash( output_file, arrayofenums, uppercase_string, uppercase_string_title )
|
|
output_file.write("ENUM #{uppercase_string_title}\n")
|
|
if arrayofenums.size > 0
|
|
arrayofenums.each { |ss|
|
|
|
|
|
|
# Force result of atStringHash to be signed.
|
|
# Script enums are signed.
|
|
h = @r.rage.atStringHash(ss.name)
|
|
if ( h > 0x7FFFFFFF ) then
|
|
h = -(h - 1).ones_complement(32)
|
|
|
|
end
|
|
|
|
|
|
output_file.write("\t#{ss.name} = #{h}")
|
|
output_file.write(",") if ss != arrayofenums.last
|
|
output_file.write(" //#{ss.Comment}") if (ss.Comment != nil) and (ss.Comment != "")
|
|
output_file.write("\n")
|
|
}
|
|
else
|
|
|
|
output_file.write("\tMP#{uppercase_string}_DUMMY_STAT = 1\n")
|
|
|
|
end
|
|
output_file.write("ENDENUM\n\n\n")
|
|
|
|
end
|
|
|
|
def write_enum_awards( output_file, arrayofenums, uppercase_string, uppercase_string_title )
|
|
output_file.write("ENUM #{uppercase_string_title}\n")
|
|
if arrayofenums.size > 0
|
|
arrayofenums.each { |ss|
|
|
|
|
output_file.write("\t#{ss.name}_INDEX")
|
|
|
|
output_file.write(",") if ss != arrayofenums.last
|
|
output_file.write(" //#{ss.Comment}") if (ss.Comment != nil) and (ss.Comment != "")
|
|
output_file.write("\n")
|
|
}
|
|
else
|
|
|
|
output_file.write("\tMP#{uppercase_string}_DUMMY_STAT = 1\n")
|
|
|
|
end
|
|
output_file.write("ENDENUM\n\n\n")
|
|
|
|
end
|
|
|
|
def write_enum_stats( output_file, arrayofenums, uppercase_string, uppercase_string_title )
|
|
output_file.write("ENUM #{uppercase_string_title}\n")
|
|
if arrayofenums.size > 0
|
|
arrayofenums.each { |ss|
|
|
|
|
output_file.write("\t#{ss.name}_INDEX")
|
|
|
|
output_file.write(",") if ss != arrayofenums.last
|
|
output_file.write(" //#{ss.Comment}") if (ss.Comment != nil) and (ss.Comment != "")
|
|
output_file.write("\n")
|
|
}
|
|
else
|
|
|
|
output_file.write("\tMP#{uppercase_string}_DUMMY_STAT = 1\n")
|
|
|
|
end
|
|
output_file.write("ENDENUM\n\n\n")
|
|
|
|
end
|
|
|
|
|
|
def write_awards_consts(output_file, arrayofenums, uppercase_string)
|
|
output_file.write("CONST_INT MAX_NUM_#{uppercase_string}_AWARD #{arrayofenums.size} \n")
|
|
end
|
|
|
|
def write_stat_consts(output_file, arrayofenums, uppercase_string)
|
|
output_file.write("CONST_INT MAX_NUM_#{uppercase_string}_STATS #{arrayofenums.size} \n")
|
|
end
|
|
|
|
def write( filename )
|
|
|
|
File.open(filename, "w+") { |f|
|
|
|
|
#f.write("ENUM STATSENUM\n")
|
|
|
|
write_enum_with_hash(f, @stats , "EMPTY", "STATSENUM")
|
|
|
|
f.write("\n\n\n //////////////////MP STATS - DO NOT EDIT DIRECTLY, THESE ARE AUTOGENERATED, SPEAK TO BRENDA//////////////////////////////\n\n\n")
|
|
#Stats
|
|
|
|
#f.write("ENUM MP_GEN_INT_STATS\n")
|
|
write_enum_with_hash(f, @gen_int_stats, "GEN_INT", "MPGEN_INT_STATS" )
|
|
write_enum_with_hash(f, @gen_float_stats, "GEN_FLOAT" , "MPGEN_FLOAT_STATS")
|
|
write_enum_with_hash(f, @gen_bool_stats, "GEN_BOOL", "MPGEN_BOOL_STATS" )
|
|
write_enum_with_hash(f, @gen_string_stats, "GEN_STRING", "MPGEN_STRING_STATS" )
|
|
write_enum_with_hash(f, @gen_label_stats, "GEN_LABEL", "MPGEN_LABEL_STATS" )
|
|
write_enum_with_hash(f, @gen_date_stats, "GEN_DATE", "MPGEN_DATE_STATS" )
|
|
write_enum_with_hash(f, @gen_vector_stats, "GEN_VECTOR", "MPGEN_VECTOR_STATS" )
|
|
write_enum_with_hash(f, @gen_userid_stats, "GEN_USERID", "MPGEN_USERID_STATS" )
|
|
|
|
#f.write("ENUM MP_PLAYER_STATS\n")
|
|
write_enum_with_hash(f, @player_int_stats, "PLY_INT", "MPPLY_INT_STATS" )
|
|
write_enum_with_hash(f, @player_float_stats, "PLY_FLOAT", "MPPLY_FLOAT_STATS" )
|
|
write_enum_with_hash(f, @player_bool_stats, "PLY_BOOL", "MPPLY_BOOL_STATS" )
|
|
write_enum_with_hash(f, @player_string_stats, "PLY_STRING", "MPPLY_STRING_STATS" )
|
|
write_enum_with_hash(f, @player_label_stats, "PLY_LABEL", "MPPLY_LABEL_STATS" )
|
|
write_enum_with_hash(f, @player_date_stats, "PLY_DATE" , "MPPLY_DATE_STATS")
|
|
write_enum_with_hash(f, @player_vector_stats, "PLY_VECTOR", "MPPLY_VECTOR_STATS" )
|
|
write_enum_with_hash(f, @player_userid_stats, "PLY_USERID", "MPPLY_USERID_STATS" )
|
|
|
|
write_enum_of_type(f, "INT", @int_stats)
|
|
write_enum_of_type(f, "FLOAT", @float_stats)
|
|
write_enum_of_type(f, "BOOL", @bool_stats)
|
|
write_enum_of_type(f, "STRING", @string_stats)
|
|
write_enum_of_type(f, "LABEL", @label_stats)
|
|
write_enum_of_type(f, "DATE", @date_stats)
|
|
write_enum_of_type(f, "VECTOR", @vector_stats)
|
|
write_enum_of_type(f, "USERID", @userid_stats)
|
|
|
|
write_enum_stats(f, @player_int_stats, "PLY_INT_STAT_INDEX", "MPPLY_INT_STAT_INDEX")
|
|
write_enum_stats(f, @player_float_stats, "PLY_FLOAT_STAT_INDEX", "MPPLY_FLOAT_STAT_INDEX")
|
|
write_enum_stats(f, @player_bool_stats, "PLY_BOOL_STAT_INDEX", "MPPLY_BOOL_STAT_INDEX")
|
|
write_enum_stats(f, @player_string_stats, "PLY_STRING_STAT_INDEX", "MPPLY_STRING_STAT_INDEX")
|
|
write_enum_stats(f, @player_label_stats, "PLY_LABEL_STAT_INDEX", "MPPLY_LABEL_STAT_INDEX")
|
|
write_enum_stats(f, @player_date_stats, "PLY_DATE_STAT_INDEX", "MPPLY_DATE_STAT_INDEX")
|
|
write_enum_stats(f, @player_vector_stats, "PLY_VECTOR_STAT_INDEX", "MPPLY_VECTOR_STAT_INDEX")
|
|
|
|
#write_enum_stats(f, @gen_int_stats, "GEN_INT_STAT_INDEX", "MPGEN_INT_STAT_INDEX")
|
|
#write_enum_stats(f, @gen_float_stats, "GEN_FLOAT_STAT_INDEX", "MPGEN_FLOAT_STAT_INDEX")
|
|
#write_enum_stats(f, @gen_bool_stats, "GEN_BOOL_STAT_INDEX", "MPGEN_BOOL_STAT_INDEX")
|
|
#write_enum_stats(f, @gen_string_stats, "GEN_STRING_STAT_INDEX", "MPGEN_STRING_STAT_INDEX")
|
|
#write_enum_stats(f, @gen_label_stats, "GEN_LABEL_STAT_INDEX", "MPGEN_LABEL_STAT_INDEX")
|
|
#write_enum_stats(f, @gen_date_stats, "GEN_DATE_STAT_INDEX", "MPGEN_DATE_STAT_INDEX")
|
|
#write_enum_stats(f, @gen_vector_stats, "GEN_VECTOR_STAT_INDEX", "MPGEN_VECTOR_STAT_INDEX")
|
|
|
|
|
|
write_stat_consts(f, @player_int_stats, "MPPLY_INT")
|
|
write_stat_consts(f, @player_float_stats, "MPPLY_FLOAT")
|
|
write_stat_consts(f, @player_bool_stats, "MPPLY_BOOL")
|
|
write_stat_consts(f, @player_string_stats, "MPPLY_STRING")
|
|
write_stat_consts(f, @player_label_stats, "MPPLY_LABEL")
|
|
write_stat_consts(f, @player_date_stats, "MPPLY_DATE")
|
|
write_stat_consts(f, @player_vector_stats, "MPPLY_VECTOR")
|
|
write_stat_consts(f, @player_userid_stats, "MPPLY_USERID")
|
|
|
|
write_stat_consts(f, @gen_int_stats, "MPGEN_INT")
|
|
write_stat_consts(f, @gen_float_stats, "MPGEN_FLOAT")
|
|
write_stat_consts(f, @gen_bool_stats, "MPGEN_BOOL")
|
|
write_stat_consts(f, @gen_string_stats, "MPGEN_STRING")
|
|
write_stat_consts(f, @gen_label_stats, "MPGEN_LABEL")
|
|
write_stat_consts(f, @gen_date_stats, "MPGEN_DATE")
|
|
write_stat_consts(f, @gen_vector_stats, "MPGEN_VECTOR")
|
|
write_stat_consts(f, @gen_userid_stats, "MPGEN_USERID")
|
|
|
|
f.write("\n\n\n //////////////////MP AWARDS - DO NOT EDIT DIRECTLY, THESE ARE AUTOGENERATED, SPEAK TO BRENDA//////////////////////////////\n\n\n")
|
|
#Awards
|
|
|
|
write_enum_with_hash(f, @award_player_int_stats, "PLY_INT_AWARD", "MPPLY_INT_AWARD" )
|
|
write_enum_with_hash(f, @award_player_float_stats, "PLY_FLOAT_AWARD", "MPPLY_FLOAT_AWARD" )
|
|
write_enum_with_hash(f, @award_player_bool_stats, "PLY_BOOL_AWARD", "MPPLY_BOOL_AWARD" )
|
|
write_enum_with_hash(f, @award_player_date_stats, "PLY_DATE_AWARD", "MPPLY_DATE_AWARD" )
|
|
write_enum_with_hash(f, @award_player_userid_stats, "PLY_USERID_AWARD", "MPPLY_USERID_AWARD" )
|
|
|
|
write_enum_with_hash(f, @award_general_int_stats, "GEN_INT_AWARD", "MPGEN_INT_AWARD" )
|
|
write_enum_with_hash(f, @award_general_float_stats, "GEN_FLOAT_AWARD" , "MPGEN_FLOAT_AWARD")
|
|
write_enum_with_hash(f, @award_general_bool_stats, "GEN_BOOL_AWARD", "MPGEN_BOOL_AWARD" )
|
|
write_enum_with_hash(f, @award_general_date_stats, "GEN_DATE_AWARD", "MPGEN_DATE_AWARD" )
|
|
write_enum_with_hash(f, @award_general_userid_stats, "GEN_USERID_AWARD", "MPGEN_USERID_AWARD" )
|
|
|
|
write_enum_of_type_award(f, "INT" , @award_character_int_stats)
|
|
write_enum_of_type_award(f, "FLOAT" , @award_character_float_stats )
|
|
write_enum_of_type_award(f, "BOOL", @award_character_bool_stats )
|
|
write_enum_of_type_award(f, "DATE", @award_character_date_stats )
|
|
write_enum_of_type_award(f, "USERID", @award_character_userid_stats )
|
|
|
|
write_enum_awards(f, @award_player_int_stats, "PLY_INT_AWARD_INDEX", "MPPLY_INT_AWARD_INDEX")
|
|
write_enum_awards(f, @award_player_float_stats, "PLY_FLOAT_AWARD_INDEX", "MPPLY_FLOAT_AWARD_INDEX")
|
|
write_enum_awards(f, @award_player_bool_stats, "PLY_BOOL_AWARD_INDEX", "MPPLY_BOOL_AWARD_INDEX")
|
|
write_enum_awards(f, @award_player_date_stats, "PLY_DATE_AWARD_INDEX", "MPPLY_DATE_AWARD_INDEX")
|
|
write_enum_awards(f, @award_general_int_stats, "GEN_INT_AWARD_INDEX", "MPGEN_INT_AWARD_INDEX")
|
|
write_enum_awards(f, @award_general_float_stats, "GEN_FLOAT_AWARD_INDEX", "MPGEN_FLOAT_AWARD_INDEX")
|
|
write_enum_awards(f, @award_general_bool_stats, "GEN_BOOL_AWARD_INDEX", "MPGEN_BOOL_AWARD_INDEX")
|
|
write_enum_awards(f, @award_general_date_stats, "GEN_DATE_AWARD_INDEX", "MPGEN_DATE_AWARD_INDEX")
|
|
|
|
|
|
write_awards_consts(f, @award_player_int_stats, "MPPLY_INT")
|
|
write_awards_consts(f, @award_player_float_stats, "MPPLY_FLOAT")
|
|
write_awards_consts(f, @award_player_bool_stats, "MPPLY_BOOL")
|
|
write_awards_consts(f, @award_player_date_stats, "MPPLY_DATE")
|
|
write_awards_consts(f, @award_player_userid_stats, "MPPLY_USERID")
|
|
|
|
write_awards_consts(f, @award_general_int_stats, "MPGEN_INT")
|
|
write_awards_consts(f, @award_general_float_stats, "MPGEN_FLOAT")
|
|
write_awards_consts(f, @award_general_bool_stats, "MPGEN_BOOL")
|
|
write_awards_consts(f, @award_general_date_stats, "MPGEN_DATE")
|
|
write_awards_consts(f, @award_general_userid_stats, "MPGEN_USERID")
|
|
|
|
#write_awards_consts(f, @award_character_int_stats, "MP_INT")
|
|
#write_awards_consts(f, @award_character_float_stats, "MP_FLOAT")
|
|
#write_awards_consts(f, @award_character_bool_stats, "MP_BOOL")
|
|
|
|
# f.write("\nCONST_INT MAX_NUM_CHARACTER_SLOTS 5\n\n")
|
|
|
|
# write_array_of_type(f, "Int", @int_stats)
|
|
# write_array_of_type(f, "Float", @float_stats)
|
|
# write_array_of_type(f, "Bool", @bool_stats)
|
|
# write_array_of_type(f, "String", @string_stats)
|
|
# write_array_of_type(f, "Date", @date_stats)
|
|
# write_array_of_type(f, "Vector", @vector_stats)
|
|
}
|
|
|
|
end
|
|
|
|
def write_init_function(filename)
|
|
|
|
File.open(filename, "w+") { |f|
|
|
f.write("\n\nPROC INIT_STATS()\n")
|
|
#Write to the Net Stat Generator
|
|
write_array_stats_initialisation_char(f, "Int", @int_stats)
|
|
write_array_stats_initialisation_char(f, "Float", @float_stats)
|
|
write_array_stats_initialisation_char(f, "Bool", @bool_stats)
|
|
write_array_stats_initialisation_char(f, "String", @string_stats)
|
|
write_array_stats_initialisation_char(f, "Label", @label_stats)
|
|
write_array_stats_initialisation_char(f, "Date",@date_stats)
|
|
write_array_stats_initialisation_char(f, "Vector", @vector_stats)
|
|
write_array_stats_initialisation_char(f, "UserId", @userid_stats)
|
|
|
|
#write_array_stat_initialisation(f, "PlyInt", @player_int_stats)
|
|
#write_array_stat_initialisation(f, "PlyFloat", @player_float_stats)
|
|
#write_array_stat_initialisation(f, "PlyBool", @player_bool_stats)
|
|
#write_array_stat_initialisation(f, "PlyString", @player_string_stats)
|
|
#write_array_stat_initialisation(f, "PlyLabel", @player_label_stats)
|
|
#write_array_stat_initialisation(f, "PlyDate", @player_date_stats)
|
|
#write_array_stat_initialisation(f, "PlyVector", @player_vector_stats)
|
|
|
|
#write_array_stat_initialisation(f, "GenInt", @gen_int_stats)
|
|
#write_array_stat_initialisation(f, "GenFloat", @gen_float_stats)
|
|
#write_array_stat_initialisation(f, "GenBool", @gen_bool_stats)
|
|
#write_array_stat_initialisation(f, "GenString", @gen_string_stats)
|
|
#write_array_stat_initialisation(f, "GenLabel", @gen_label_stats)
|
|
#write_array_stat_initialisation(f, "GenDate", @gen_date_stats)
|
|
#write_array_stat_initialisation(f, "GenVector", @gen_vector_stats)
|
|
|
|
write_array_award_initialisation_char(f, "AwdInt", @award_character_int_stats)
|
|
write_array_award_initialisation_char(f, "AwdFloat", @award_character_float_stats)
|
|
write_array_award_initialisation_char(f, "AwdBool", @award_character_bool_stats)
|
|
write_array_award_initialisation_char(f, "AwdDate", @award_character_date_stats)
|
|
write_array_award_initialisation_char(f, "AwdUserId", @award_character_userid_stats)
|
|
|
|
write_array_award_initialisation(f, "PlyInt", @award_player_int_stats)
|
|
write_array_award_initialisation(f, "PlyFloat", @award_player_float_stats)
|
|
write_array_award_initialisation(f, "PlyBool", @award_player_bool_stats)
|
|
write_array_award_initialisation(f, "PlyDate", @award_player_date_stats)
|
|
|
|
#write_array_award_initialisation(f, "GenInt", @award_general_int_stats)
|
|
#write_array_award_initialisation(f, "GenFloat", @award_general_float_stats)
|
|
#write_array_award_initialisation(f, "GenBool", @award_general_bool_stats)
|
|
#write_array_award_initialisation(f, "GenDate", @award_general_date_stats)
|
|
|
|
f.write("ENDPROC\n\n")
|
|
}
|
|
|
|
end
|
|
end
|
|
|
|
sg = ScriptEnumGenerator.new()
|
|
|
|
source_xml_files.each { |filename|
|
|
|
|
sg.add_file( filename )
|
|
}
|
|
|
|
sg.write(target_pch_file)
|
|
|
|
sg.write_init_function(target_sch_file_containing_init_function) |