diff --git a/common/eq_packet_structs.h b/common/eq_packet_structs.h index 0959ed348..e0c4a1563 100644 --- a/common/eq_packet_structs.h +++ b/common/eq_packet_structs.h @@ -380,7 +380,11 @@ struct NewZone_Struct { /*0404*/ float fog_maxclip[4]; /*0420*/ float gravity; /*0424*/ uint8 time_type; -/*0425*/ uint8 unknown360[49]; +/*0425*/ uint8 rain_chance[4]; +/*0429*/ uint8 rain_duration[4]; +/*0433*/ uint8 snow_chance[4]; +/*0437*/ uint8 snow_duration[4]; +/*0441*/ uint8 unknown360[33]; /*0474*/ uint8 sky; // Sky Type /*0475*/ uint8 unknown331[13]; // ***Placeholder /*0488*/ float zone_exp_multiplier; // Experience Multiplier diff --git a/common/patches/Client62_structs.h b/common/patches/Client62_structs.h index 84eacf67e..27b808620 100644 --- a/common/patches/Client62_structs.h +++ b/common/patches/Client62_structs.h @@ -312,7 +312,11 @@ struct NewZone_Struct { /*0404*/ float fog_maxclip[4]; /*0420*/ float gravity; /*0424*/ uint8 time_type; -/*0425*/ uint8 unknown360[49]; +/*0425*/ uint8 rain_chance[4]; +/*0429*/ uint8 rain_duration[4]; +/*0433*/ uint8 snow_chance[4]; +/*0437*/ uint8 snow_duration[4]; +/*0441*/ uint8 unknown360[33]; /*0474*/ uint8 sky; // Sky Type /*0475*/ uint8 unknown331[13]; // ***Placeholder /*0488*/ float zone_exp_multiplier; // Experience Multiplier diff --git a/common/patches/RoF.cpp b/common/patches/RoF.cpp index 3577fb6f3..07cea6dfb 100644 --- a/common/patches/RoF.cpp +++ b/common/patches/RoF.cpp @@ -1587,8 +1587,20 @@ ENCODE(OP_NewZone) { } OUT(gravity); OUT(time_type); - for(r = 16; r < 48; r++) { - eq->unknown521[r] = 0xFF; //observed + for(r = 0; r < 4; r++) { + OUT(rain_chance[r]); + } + for(r = 0; r < 4; r++) { + OUT(rain_duration[r]); + } + for(r = 0; r < 4; r++) { + OUT(snow_chance[r]); + } + for(r = 0; r < 4; r++) { + OUT(snow_duration[r]); + } + for(r = 0; r < 32; r++) { + eq->unknown537[r] = 0xFF; //observed } OUT(sky); OUT(zone_exp_multiplier); diff --git a/common/patches/RoF_structs.h b/common/patches/RoF_structs.h index d3125f97d..a2635ceae 100644 --- a/common/patches/RoF_structs.h +++ b/common/patches/RoF_structs.h @@ -529,7 +529,11 @@ struct NewZone_Struct { /*0500*/ float fog_maxclip[4]; /*0516*/ float gravity; /*0520*/ uint8 time_type; -/*0521*/ uint8 unknown521[49]; +/*0521*/ uint8 rain_chance[4]; +/*0525*/ uint8 rain_duration[4]; +/*0529*/ uint8 snow_chance[4]; +/*0533*/ uint8 snow_duration[4]; +/*0537*/ uint8 unknown537[33]; /*0570*/ uint8 sky; // Sky Type /*0571*/ uint8 unknown571[13]; // ***Placeholder /*0584*/ float zone_exp_multiplier; // Experience Multiplier diff --git a/common/patches/SoD.cpp b/common/patches/SoD.cpp index cadd4b8a8..08a3401ad 100644 --- a/common/patches/SoD.cpp +++ b/common/patches/SoD.cpp @@ -709,8 +709,20 @@ ENCODE(OP_NewZone) { } OUT(gravity); OUT(time_type); - for(r = 16; r < 48; r++) { - eq->unknown521[r] = 0xFF; //observed + for(r = 0; r < 4; r++) { + OUT(rain_chance[r]); + } + for(r = 0; r < 4; r++) { + OUT(rain_duration[r]); + } + for(r = 0; r < 4; r++) { + OUT(snow_chance[r]); + } + for(r = 0; r < 4; r++) { + OUT(snow_duration[r]); + } + for(r = 0; r < 32; r++) { + eq->unknown537[r] = 0xFF; //observed } OUT(sky); OUT(zone_exp_multiplier); diff --git a/common/patches/SoD_structs.h b/common/patches/SoD_structs.h index e87d90429..99a904b86 100644 --- a/common/patches/SoD_structs.h +++ b/common/patches/SoD_structs.h @@ -399,7 +399,11 @@ struct NewZone_Struct { /*0500*/ float fog_maxclip[4]; /*0516*/ float gravity; /*0520*/ uint8 time_type; -/*0521*/ uint8 unknown521[49]; +/*0521*/ uint8 rain_chance[4]; +/*0525*/ uint8 rain_duration[4]; +/*0529*/ uint8 snow_chance[4]; +/*0533*/ uint8 snow_duration[4]; +/*0537*/ uint8 unknown537[33]; /*0570*/ uint8 sky; // Sky Type /*0571*/ uint8 unknown571[13]; // ***Placeholder /*0584*/ float zone_exp_multiplier; // Experience Multiplier diff --git a/common/patches/SoF.cpp b/common/patches/SoF.cpp index 0262858d5..96b1f223e 100644 --- a/common/patches/SoF.cpp +++ b/common/patches/SoF.cpp @@ -708,8 +708,20 @@ ENCODE(OP_NewZone) { } OUT(gravity); OUT(time_type); - for(r = 16; r < 48; r++) { - eq->unknown521[r] = 0xFF; //observed + for(r = 0; r < 4; r++) { + OUT(rain_chance[r]); + } + for(r = 0; r < 4; r++) { + OUT(rain_duration[r]); + } + for(r = 0; r < 4; r++) { + OUT(snow_chance[r]); + } + for(r = 0; r < 4; r++) { + OUT(snow_duration[r]); + } + for(r = 0; r < 32; r++) { + eq->unknown537[r] = 0xFF; //observed } OUT(sky); OUT(zone_exp_multiplier); diff --git a/common/patches/SoF_structs.h b/common/patches/SoF_structs.h index d02affa65..a31d60ef8 100644 --- a/common/patches/SoF_structs.h +++ b/common/patches/SoF_structs.h @@ -382,7 +382,11 @@ struct NewZone_Struct { /*0500*/ float fog_maxclip[4]; /*0516*/ float gravity; /*0520*/ uint8 time_type; -/*0521*/ uint8 unknown521[49]; +/*0521*/ uint8 rain_chance[4]; +/*0525*/ uint8 rain_duration[4]; +/*0529*/ uint8 snow_chance[4]; +/*0533*/ uint8 snow_duration[4]; +/*0537*/ uint8 unknown537[33]; /*0570*/ uint8 sky; // Sky Type /*0571*/ uint8 unknown571[13]; // ***Placeholder /*0584*/ float zone_exp_multiplier; // Experience Multiplier diff --git a/common/patches/Titanium_structs.h b/common/patches/Titanium_structs.h index a12958c30..1c058fb77 100644 --- a/common/patches/Titanium_structs.h +++ b/common/patches/Titanium_structs.h @@ -324,7 +324,11 @@ struct NewZone_Struct { /*0404*/ float fog_maxclip[4]; /*0420*/ float gravity; /*0424*/ uint8 time_type; -/*0425*/ uint8 unknown360[49]; +/*0425*/ uint8 rain_chance[4]; +/*0429*/ uint8 rain_duration[4]; +/*0433*/ uint8 snow_chance[4]; +/*0437*/ uint8 snow_duration[4]; +/*0441*/ uint8 unknown360[33]; /*0474*/ uint8 sky; // Sky Type /*0475*/ uint8 unknown331[13]; // ***Placeholder /*0488*/ float zone_exp_multiplier; // Experience Multiplier diff --git a/common/patches/Underfoot.cpp b/common/patches/Underfoot.cpp index 0a17ef9e6..f15a94bde 100644 --- a/common/patches/Underfoot.cpp +++ b/common/patches/Underfoot.cpp @@ -733,8 +733,20 @@ ENCODE(OP_NewZone) { } OUT(gravity); OUT(time_type); - for(r = 16; r < 48; r++) { - eq->unknown521[r] = 0xFF; //observed + for(r = 0; r < 4; r++) { + OUT(rain_chance[r]); + } + for(r = 0; r < 4; r++) { + OUT(rain_duration[r]); + } + for(r = 0; r < 4; r++) { + OUT(snow_chance[r]); + } + for(r = 0; r < 4; r++) { + OUT(snow_duration[r]); + } + for(r = 0; r < 32; r++) { + eq->unknown537[r] = 0xFF; //observed } OUT(sky); OUT(zone_exp_multiplier); diff --git a/common/patches/Underfoot_structs.h b/common/patches/Underfoot_structs.h index 941ca583f..ee7286dab 100644 --- a/common/patches/Underfoot_structs.h +++ b/common/patches/Underfoot_structs.h @@ -399,7 +399,11 @@ struct NewZone_Struct { /*0500*/ float fog_maxclip[4]; /*0516*/ float gravity; /*0520*/ uint8 time_type; -/*0521*/ uint8 unknown521[49]; +/*0521*/ uint8 rain_chance[4]; +/*0525*/ uint8 rain_duration[4]; +/*0529*/ uint8 snow_chance[4]; +/*0533*/ uint8 snow_duration[4]; +/*0537*/ uint8 unknown537[33]; /*0570*/ uint8 sky; // Sky Type /*0571*/ uint8 unknown571[13]; // ***Placeholder /*0584*/ float zone_exp_multiplier; // Experience Multiplier diff --git a/common/ruletypes.h b/common/ruletypes.h index 26083a583..26acc7434 100644 --- a/common/ruletypes.h +++ b/common/ruletypes.h @@ -196,6 +196,7 @@ RULE_INT ( Zone, ReservedInstances, 30 ) //Will reserve this many instance ids f RULE_INT ( Zone, EbonCrystalItemID, 40902) RULE_INT ( Zone, RadiantCrystalItemID, 40903) RULE_BOOL ( Zone, LevelBasedEXPMods, false) // Allows you to use the level_exp_mods table in consideration to your players EXP hits +RULE_INT ( Zone, WeatherTimer, 600) // Weather timer when no duration is available RULE_CATEGORY_END() RULE_CATEGORY( Map ) diff --git a/utils/sql/git/required/2014_01_20_Weather.sql b/utils/sql/git/required/2014_01_20_Weather.sql new file mode 100644 index 000000000..86ecb729a --- /dev/null +++ b/utils/sql/git/required/2014_01_20_Weather.sql @@ -0,0 +1,140 @@ +alter table zone drop column `weather`; +alter table zone add column `rain_chance1` int(4) not null default 0; +alter table zone add column `rain_chance2` int(4) not null default 0; +alter table zone add column `rain_chance3` int(4) not null default 0; +alter table zone add column `rain_chance4` int(4) not null default 0; +alter table zone add column `rain_duration1` int(4) not null default 0; +alter table zone add column `rain_duration2` int(4) not null default 0; +alter table zone add column `rain_duration3` int(4) not null default 0; +alter table zone add column `rain_duration4` int(4) not null default 0; +alter table zone add column `snow_chance1` int(4) not null default 0; +alter table zone add column `snow_chance2` int(4) not null default 0; +alter table zone add column `snow_chance3` int(4) not null default 0; +alter table zone add column `snow_chance4` int(4) not null default 0; +alter table zone add column `snow_duration1` int(4) not null default 0; +alter table zone add column `snow_duration2` int(4) not null default 0; +alter table zone add column `snow_duration3` int(4) not null default 0; +alter table zone add column `snow_duration4` int(4) not null default 0; + +UPDATE `zone` SET `snow_chance1`=25, `snow_chance2`=20, `snow_chance3`=10, `snow_chance4`=20, `snow_duration1`=10, `snow_duration2`=8, `snow_duration3`=5, `snow_duration4`=10 WHERE `id`=160; +UPDATE `zone` SET `rain_chance1`=5, `rain_chance2`=5 WHERE `id`=202; +UPDATE `zone` SET `rain_chance1`=10, `rain_chance2`=10, `rain_chance3`=10, `rain_chance4`=10, `rain_duration1`=24, `rain_duration2`=6, `rain_duration3`=2, `rain_duration4`=10 WHERE `id`=306; +UPDATE `zone` SET `rain_chance1`=10, `rain_chance2`=10, `rain_chance3`=10, `rain_chance4`=10, `rain_duration1`=24, `rain_duration2`=6, `rain_duration3`=2, `rain_duration4`=10 WHERE `id`=304; +UPDATE `zone` SET `rain_chance1`=10, `rain_chance2`=10, `rain_chance3`=10, `rain_chance4`=10, `rain_duration1`=24, `rain_duration2`=6, `rain_duration3`=2, `rain_duration4`=10 WHERE `id`=23; +UPDATE `zone` SET `snow_chance1`=50, `snow_chance2`=25, `snow_chance3`=10, `snow_chance4`=25, `snow_duration1`=24, `snow_duration2`=24, `snow_duration3`=24, `snow_duration4`=24 WHERE `id`=112; +UPDATE `zone` SET `rain_chance1`=10, `rain_chance2`=10, `rain_chance3`=10, `rain_chance4`=10, `rain_duration1`=24, `rain_duration2`=6, `rain_duration3`=2, `rain_duration4`=10 WHERE `id`=303; +UPDATE `zone` SET `rain_chance1`=25, `rain_chance2`=25, `rain_chance3`=50, `rain_chance4`=25, `rain_duration1`=24, `rain_duration2`=24, `rain_duration3`=24, `rain_duration4`=24 WHERE `id`=302; +UPDATE `zone` SET `rain_chance1`=10, `rain_chance2`=10, `rain_duration1`=10, `rain_duration2`=10 WHERE `id`=133; +UPDATE `zone` SET `rain_chance1`=10, `rain_chance2`=10, `rain_duration1`=10, `rain_duration2`=10 WHERE `id`=132; +UPDATE `zone` SET `rain_chance1`=10, `rain_chance2`=10, `rain_duration1`=10, `rain_duration2`=10 WHERE `id`=131; +UPDATE `zone` SET `rain_chance1`=5, `rain_chance2`=2 WHERE `id`=257; +UPDATE `zone` SET `rain_chance1`=10, `rain_chance2`=10, `rain_chance3`=10, `rain_chance4`=10, `rain_duration1`=1, `rain_duration2`=1, `rain_duration3`=1, `rain_duration4`=1 WHERE `id`=104; +UPDATE `zone` SET `rain_chance1`=10, `rain_chance2`=10, `rain_chance3`=5, `rain_chance4`=5, `rain_duration1`=2, `rain_duration2`=3, `rain_duration3`=1, `rain_duration4`=2 WHERE `id`=439; +UPDATE `zone` SET `rain_chance1`=10, `rain_chance2`=10, `rain_chance3`=10, `rain_chance4`=10, `rain_duration1`=24, `rain_duration2`=6, `rain_duration3`=2, `rain_duration4`=10 WHERE `id`=365; +UPDATE `zone` SET `rain_duration1`=1, `rain_duration2`=2, `rain_duration3`=1, `rain_duration4`=1, `snow_duration1`=1 WHERE `id`=4; +UPDATE `zone` SET `rain_chance1`=10, `rain_chance2`=10, `rain_chance3`=10, `rain_chance4`=10, `rain_duration1`=1, `rain_duration2`=2, `rain_duration3`=1, `rain_duration4`=1 WHERE `id`=204; +UPDATE `zone` SET `rain_chance1`=100, `rain_chance2`=100, `rain_chance3`=100, `rain_chance4`=100, `rain_duration1`=24, `rain_duration2`=24, `rain_duration3`=24, `rain_duration4`=24 WHERE `id`=224; +UPDATE `zone` SET `rain_chance1`=10, `rain_chance2`=10, `rain_duration1`=1, `rain_duration2`=2, `rain_duration3`=1, `rain_duration4`=1, `snow_duration1`=1 WHERE `id`=138; +UPDATE `zone` SET `rain_chance1`=10, `rain_chance2`=10, `rain_chance3`=10, `rain_chance4`=10, `rain_duration1`=24, `rain_duration2`=6, `rain_duration3`=2, `rain_duration4`=10 WHERE `id`=56; +UPDATE `zone` SET `rain_chance1`=10, `rain_chance2`=10, `rain_chance3`=10, `rain_chance4`=10, `rain_duration1`=24, `rain_duration2`=6, `rain_duration3`=2, `rain_duration4`=10 WHERE `id`=31; +UPDATE `zone` SET `rain_chance1`=10, `rain_chance2`=10, `rain_chance3`=10, `rain_chance4`=10, `rain_duration1`=24, `rain_duration2`=6, `rain_duration3`=2, `rain_duration4`=10 WHERE `id`=34; +UPDATE `zone` SET `rain_chance1`=100, `rain_chance2`=100, `rain_chance3`=100, `rain_chance4`=100, `rain_duration1`=24, `rain_duration2`=24, `rain_duration3`=24, `rain_duration4`=24 WHERE `id`=419; +UPDATE `zone` SET `rain_chance1`=15, `rain_chance2`=15, `rain_chance3`=5, `rain_chance4`=5 WHERE `id`=116; +UPDATE `zone` SET `rain_chance1`=15, `rain_chance2`=15, `rain_chance3`=5, `rain_chance4`=5 WHERE `id`=115; +UPDATE `zone` SET `rain_duration1`=1, `rain_duration2`=2, `rain_duration3`=1, `rain_duration4`=1 WHERE `id`=188; +UPDATE `zone` SET `rain_duration1`=1, `rain_duration2`=2, `rain_duration3`=1, `rain_duration4`=1 WHERE `id`=189; +UPDATE `zone` SET `rain_chance1`=10, `rain_chance2`=10, `rain_chance3`=10, `rain_chance4`=10, `rain_duration1`=1, `rain_duration2`=2, `rain_duration3`=1, `rain_duration4`=1 WHERE `id`=410; +UPDATE `zone` SET `rain_chance1`=25, `rain_chance2`=75, `rain_chance3`=75, `rain_chance4`=25, `rain_duration1`=16, `rain_duration2`=12, `rain_duration3`=12, `rain_duration4`=16 WHERE `id`=276; +UPDATE `zone` SET `rain_duration1`=1, `rain_duration2`=1, `rain_duration3`=1, `rain_duration4`=1, `snow_duration1`=1, `snow_duration2`=1, `snow_duration3`=1, `snow_duration4`=1 WHERE `id`=430; +UPDATE `zone` SET `rain_chance2`=19, `rain_chance3`=14, `rain_duration1`=1, `rain_duration2`=2, `rain_duration3`=1, `rain_duration4`=1, `snow_chance1`=20, `snow_chance4`=20, `snow_duration1`=2, `snow_duration4`=1 WHERE `id`=370; +UPDATE `zone` SET `rain_chance1`=10, `rain_chance2`=10, `rain_chance3`=10, `rain_chance4`=10, `rain_duration1`=24, `rain_duration2`=6, `rain_duration3`=2, `rain_duration4`=10 WHERE `id`=194; +UPDATE `zone` SET `rain_chance1`=10, `rain_chance2`=10, `rain_chance3`=10, `rain_chance4`=10, `rain_duration1`=24, `rain_duration2`=6, `rain_duration3`=2, `rain_duration4`=10 WHERE `id`=108; +UPDATE `zone` SET `rain_chance1`=25, `rain_chance2`=25, `rain_chance3`=10, `rain_duration1`=24, `rain_duration2`=6, `rain_duration3`=2, `rain_duration4`=10 WHERE `id`=110; +UPDATE `zone` SET `rain_chance1`=10, `rain_chance2`=10, `rain_chance3`=10, `rain_chance4`=10, `rain_duration1`=1, `rain_duration2`=1, `rain_duration3`=1, `rain_duration4`=1, `snow_duration1`=1 WHERE `id`=51; +UPDATE `zone` SET `rain_chance1`=10, `rain_chance2`=10, `rain_chance3`=10, `rain_chance4`=10, `rain_duration1`=1, `rain_duration2`=2, `rain_duration3`=1, `rain_duration4`=1, `snow_duration1`=1 WHERE `id`=196; +UPDATE `zone` SET `rain_chance1`=10, `rain_chance2`=10, `rain_chance3`=5, `rain_chance4`=10 WHERE `id`=316; +UPDATE `zone` SET `rain_chance1`=20, `rain_chance3`=10, `rain_chance4`=20, `rain_duration1`=24, `rain_duration2`=6, `rain_duration3`=2, `rain_duration4`=10 WHERE `id`=166; +UPDATE `zone` SET `rain_chance1`=20, `rain_chance3`=10, `rain_chance4`=20, `rain_duration1`=24, `rain_duration2`=6, `rain_duration3`=2, `rain_duration4`=10, `snow_duration1`=12 WHERE `id`=165; +UPDATE `zone` SET `rain_chance1`=20, `rain_chance2`=20, `rain_chance3`=5, `rain_chance4`=10 WHERE `id`=225; +UPDATE `zone` SET `rain_duration1`=24, `rain_duration2`=6, `rain_duration3`=2, `rain_duration4`=10 WHERE `id`=329; +UPDATE `zone` SET `rain_chance1`=10, `rain_chance2`=10, `rain_chance3`=10, `rain_chance4`=10, `rain_duration1`=24, `rain_duration2`=6, `rain_duration3`=2, `rain_duration4`=10 WHERE `id`=21; +UPDATE `zone` SET `rain_chance1`=25, `rain_chance2`=25, `rain_chance3`=10, `rain_chance4`=25, `rain_duration1`=24, `rain_duration2`=6, `rain_duration3`=2, `rain_duration4`=10 WHERE `id`=99; +UPDATE `zone` SET `rain_chance1`=30, `rain_chance2`=30, `rain_chance3`=20, `rain_chance4`=30, `rain_duration1`=24, `rain_duration2`=6, `rain_duration3`=2, `rain_duration4`=10 WHERE `id`=255; +UPDATE `zone` SET `rain_chance1`=25, `rain_chance2`=25, `rain_chance3`=10, `rain_chance4`=25, `rain_duration1`=24, `rain_duration2`=6, `rain_duration3`=2, `rain_duration4`=10 WHERE `id`=301; +UPDATE `zone` SET `rain_chance1`=25, `rain_chance2`=25, `rain_chance3`=10, `rain_chance4`=25, `rain_duration1`=24, `rain_duration2`=6, `rain_duration3`=2, `rain_duration4`=10 WHERE `id`=359; +UPDATE `zone` SET `rain_chance1`=20, `rain_chance2`=20, `rain_chance3`=15, `rain_chance4`=20, `rain_duration1`=1, `rain_duration2`=1, `rain_duration3`=1, `rain_duration4`=1, `snow_duration1`=1 WHERE `id`=201; +UPDATE `zone` SET `rain_chance1`=35, `rain_chance2`=45, `rain_chance3`=15, `rain_chance4`=20, `rain_duration1`=1, `rain_duration2`=1, `rain_duration3`=1, `rain_duration4`=1, `snow_duration1`=1 WHERE `id`=312; +UPDATE `zone` SET `rain_chance1`=25, `rain_chance2`=75, `rain_chance3`=50, `rain_chance4`=5, `rain_duration1`=1, `rain_duration2`=1, `rain_duration3`=1, `rain_duration4`=1 WHERE `id`=114; +UPDATE `zone` SET `rain_chance1`=25, `rain_chance2`=25, `rain_chance3`=10, `rain_chance4`=25, `rain_duration1`=24, `rain_duration2`=6, `rain_duration3`=2, `rain_duration4`=10 WHERE `id`=263; +UPDATE `zone` SET `rain_chance1`=25, `rain_chance2`=25, `rain_chance3`=10, `rain_chance4`=25, `rain_duration1`=24, `rain_duration2`=6, `rain_duration3`=2, `rain_duration4`=10 WHERE `id`=36; +UPDATE `zone` SET `rain_chance1`=25, `rain_chance2`=25, `rain_chance3`=50, `rain_chance4`=25, `rain_duration1`=1, `rain_duration2`=1, `rain_duration3`=1, `rain_duration4`=1 WHERE `id`=182; +UPDATE `zone` SET `rain_chance1`=25, `rain_chance2`=25, `rain_chance3`=10, `rain_chance4`=25, `rain_duration1`=24, `rain_duration2`=6, `rain_duration3`=2, `rain_duration4`=10, `snow_duration1`=12 WHERE `id`=142; +UPDATE `zone` SET `rain_chance1`=5, `rain_chance2`=3 WHERE `id`=361; +UPDATE `zone` SET `rain_chance1`=8, `rain_chance2`=5 WHERE `id`=259; +UPDATE `zone` SET `rain_duration1`=1, `rain_duration2`=2, `rain_duration3`=1, `rain_duration4`=1, `snow_duration1`=1 WHERE `id`=357; +UPDATE `zone` SET `rain_duration1`=1, `rain_duration2`=2, `rain_duration3`=1, `rain_duration4`=1, `snow_duration1`=1 WHERE `id`=156; +UPDATE `zone` SET `rain_duration1`=1, `rain_duration2`=2, `rain_duration3`=1, `rain_duration4`=1, `snow_duration1`=1 WHERE `id`=149; +UPDATE `zone` SET `rain_chance1`=25, `rain_chance2`=25, `rain_chance3`=50, `rain_chance4`=25, `rain_duration1`=24, `rain_duration2`=6, `rain_duration3`=2, `rain_duration4`=10, `snow_chance1`=10, `snow_duration1`=10 WHERE `id`=406; +UPDATE `zone` SET `rain_chance1`=30, `rain_chance2`=40, `rain_chance3`=10, `rain_chance4`=10, `rain_duration1`=1, `rain_duration2`=1, `rain_duration3`=1, `rain_duration4`=1 WHERE `id`=119; +UPDATE `zone` SET `rain_chance1`=3, `rain_chance2`=3, `rain_chance3`=3, `rain_chance4`=3, `rain_duration1`=24, `rain_duration2`=24, `rain_duration3`=24, `rain_duration4`=24 WHERE `id`=32; +UPDATE `zone` SET `rain_chance1`=3, `rain_chance2`=3, `rain_chance3`=3, `rain_chance4`=3, `rain_duration1`=24, `rain_duration2`=24, `rain_duration3`=24, `rain_duration4`=24 WHERE `id`=33; +UPDATE `zone` SET `rain_chance1`=25, `rain_chance2`=25, `rain_chance3`=50, `rain_chance4`=25, `rain_duration1`=1, `rain_duration2`=1, `rain_duration3`=1, `rain_duration4`=1 WHERE `id`=374; +UPDATE `zone` SET `rain_chance1`=25, `rain_chance2`=25, `rain_chance3`=10, `rain_chance4`=25, `rain_duration1`=24, `rain_duration2`=6, `rain_duration3`=2, `rain_duration4`=10, `snow_duration1`=12 WHERE `id`=412; +UPDATE `zone` SET `rain_duration1`=1, `rain_duration2`=2, `rain_duration3`=1, `rain_duration4`=1, `snow_duration1`=1 WHERE `id`=331; +UPDATE `zone` SET `rain_chance1`=5, `rain_chance2`=5 WHERE `id`=345; +UPDATE `zone` SET `rain_chance1`=25, `rain_chance2`=25, `rain_chance3`=10, `rain_chance4`=25, `rain_duration1`=24, `rain_duration2`=6, `rain_duration3`=2, `rain_duration4`=10, `snow_duration1`=12 WHERE `id`=30; +UPDATE `zone` SET `rain_chance1`=35, `rain_chance2`=45, `rain_chance3`=15, `rain_chance4`=20, `rain_duration1`=1, `rain_duration2`=1, `rain_duration3`=1, `rain_duration4`=1, `snow_duration1`=1 WHERE `id`=107; +UPDATE `zone` SET `rain_chance1`=70, `rain_chance2`=70, `rain_chance3`=70, `rain_chance4`=70, `rain_duration1`=24, `rain_duration2`=24, `rain_duration3`=24, `rain_duration4`=24 WHERE `id`=46; +UPDATE `zone` SET `rain_duration1`=15, `rain_duration2`=6, `rain_duration3`=2, `rain_duration4`=10, `snow_chance1`=25, `snow_chance2`=15, `snow_chance3`=5, `snow_chance4`=15, `snow_duration1`=24, `snow_duration2`=12, `snow_duration3`=6, `snow_duration4`=12 WHERE `id`=95; +UPDATE `zone` SET `rain_chance1`=10, `rain_chance2`=10, `rain_chance3`=10, `rain_chance4`=10, `rain_duration1`=24, `rain_duration2`=6, `rain_duration3`=2, `rain_duration4`=10 WHERE `id`=190; +UPDATE `zone` SET `rain_chance1`=25, `rain_chance2`=25, `rain_chance3`=10, `rain_chance4`=25, `rain_duration1`=24, `rain_duration2`=6, `rain_duration3`=2, `rain_duration4`=10, `snow_duration1`=12 WHERE `id`=275; +UPDATE `zone` SET `rain_duration1`=1, `rain_duration2`=1, `rain_duration3`=1, `rain_duration4`=1, `snow_duration1`=1 WHERE `id`=43; +UPDATE `zone` SET `rain_chance1`=35, `rain_chance2`=45, `rain_chance3`=15, `rain_chance4`=20, `rain_duration1`=1, `rain_duration2`=1, `rain_duration3`=1, `rain_duration4`=1, `snow_duration1`=1 WHERE `id`=134; +UPDATE `zone` SET `rain_duration1`=1, `rain_duration2`=1, `rain_duration3`=1, `rain_duration4`=1, `snow_duration1`=1, `snow_duration2`=1, `snow_duration3`=1, `snow_duration4`=1 WHERE `id`=97; +UPDATE `zone` SET `rain_duration1`=1, `rain_duration2`=1, `rain_duration3`=1, `rain_duration4`=1, `snow_duration1`=1, `snow_duration2`=1, `snow_duration3`=1, `snow_duration4`=1 WHERE `id`=258; +UPDATE `zone` SET `rain_duration1`=24, `rain_duration2`=6, `rain_duration3`=2, `rain_duration4`=10 WHERE `id`=199; +UPDATE `zone` SET `rain_chance1`=25, `rain_chance2`=25, `rain_chance3`=50, `rain_chance4`=25, `rain_duration1`=1, `rain_duration2`=1, `rain_duration3`=1, `rain_duration4`=1 WHERE `id`=431; +UPDATE `zone` SET `rain_chance1`=30, `rain_chance2`=40, `rain_chance3`=10, `rain_chance4`=10, `rain_duration1`=1, `rain_duration2`=1, `rain_duration3`=1, `rain_duration4`=1 WHERE `id`=200; +UPDATE `zone` SET `rain_chance4`=25 WHERE `id`=113; +UPDATE `zone` SET `rain_duration1`=1, `rain_duration2`=1, `rain_duration3`=1, `rain_duration4`=1, `snow_chance1`=15, `snow_chance2`=15, `snow_chance3`=15, `snow_chance4`=15, `snow_duration1`=24, `snow_duration2`=6, `snow_duration3`=2, `snow_duration4`=10 WHERE `id`=48; +UPDATE `zone` SET `rain_duration1`=1, `rain_duration2`=1, `rain_duration3`=1, `rain_duration4`=1, `snow_chance1`=50, `snow_chance2`=40, `snow_chance3`=35, `snow_chance4`=40, `snow_duration1`=15, `snow_duration2`=10, `snow_duration3`=4, `snow_duration4`=12 WHERE `id`=436; +UPDATE `zone` SET `rain_duration1`=24, `rain_duration2`=24, `rain_duration3`=24, `rain_duration4`=24 WHERE `id`=243; +UPDATE `zone` SET `rain_chance1`=30, `rain_chance2`=30, `rain_chance3`=30, `rain_chance4`=30, `rain_duration1`=24, `rain_duration2`=6, `rain_duration3`=2, `rain_duration4`=10 WHERE `id`=428; +UPDATE `zone` SET `rain_duration1`=24, `rain_duration2`=6, `rain_duration3`=2, `rain_duration4`=10, `snow_chance1`=50, `snow_chance2`=15, `snow_chance3`=15, `snow_chance4`=15, `snow_duration1`=24, `snow_duration2`=6, `snow_duration3`=2, `snow_duration4`=10 WHERE `id`=102; +UPDATE `zone` SET `rain_duration1`=24, `rain_duration2`=6, `rain_duration3`=2, `rain_duration4`=10, `snow_chance1`=15, `snow_chance2`=15, `snow_chance3`=15, `snow_chance4`=15, `snow_duration1`=24, `snow_duration2`=6, `snow_duration3`=2, `snow_duration4`=10 WHERE `id`=174; +UPDATE `zone` SET `rain_duration1`=1, `rain_duration2`=2, `rain_duration3`=1, `rain_duration4`=1, `snow_duration1`=1 WHERE `id`=136; +UPDATE `zone` SET `rain_duration1`=1, `rain_duration2`=1, `rain_duration3`=1, `rain_duration4`=1, `snow_chance1`=50, `snow_chance2`=15, `snow_chance3`=15, `snow_chance4`=15, `snow_duration1`=24, `snow_duration2`=6, `snow_duration3`=2, `snow_duration4`=10 WHERE `id`=139; +UPDATE `zone` SET `rain_duration1`=24, `rain_duration2`=24, `rain_duration3`=24, `rain_duration4`=24 WHERE `id`=404; +UPDATE `zone` SET `rain_duration1`=24, `rain_duration2`=24, `rain_duration3`=24, `rain_duration4`=24 WHERE `id`=405; +UPDATE `zone` SET `rain_chance1`=25, `rain_chance2`=25, `rain_chance3`=50, `rain_chance4`=25, `rain_duration1`=1, `rain_duration2`=1, `rain_duration3`=1, `rain_duration4`=1 WHERE `id`=143; +UPDATE `zone` SET `rain_duration1`=1, `rain_duration2`=1, `rain_duration3`=1, `rain_duration4`=1 WHERE `id`=394; +UPDATE `zone` SET `rain_duration1`=1, `rain_duration2`=1, `rain_duration3`=1, `rain_duration4`=1 WHERE `id`=416; +UPDATE `zone` SET `rain_duration1`=24, `rain_duration2`=24, `rain_duration3`=24, `rain_duration4`=24 WHERE `id`=253; +UPDATE `zone` SET `rain_duration1`=24, `rain_duration2`=6, `rain_duration3`=2, `rain_duration4`=10 WHERE `id`=252; +UPDATE `zone` SET `rain_duration1`=24, `rain_duration2`=6, `rain_duration3`=2, `rain_duration4`=10, `snow_duration1`=12 WHERE `id`=362; +UPDATE `zone` SET `rain_duration1`=24, `rain_duration2`=6, `rain_duration3`=2, `rain_duration4`=10 WHERE `id`=140; +UPDATE `zone` SET `rain_chance1`=30, `rain_chance2`=30, `rain_chance3`=30, `rain_chance4`=30, `rain_duration1`=1, `rain_duration2`=1, `rain_duration3`=1, `rain_duration4`=1, `snow_chance1`=5, `snow_chance2`=5, `snow_chance3`=5, `snow_duration1`=1, `snow_duration2`=1, `snow_duration3`=1 WHERE `id`=418; +UPDATE `zone` SET `rain_duration1`=24, `rain_duration2`=24, `rain_duration3`=24, `rain_duration4`=24 WHERE `id`=333; +UPDATE `zone` SET `rain_duration1`=24, `rain_duration2`=6, `rain_duration3`=2, `rain_duration4`=10 WHERE `id`=140; +UPDATE `zone` SET `rain_duration1`=24, `rain_duration2`=6, `rain_duration3`=2, `rain_duration4`=10 WHERE `id`=277; +UPDATE `zone` SET `rain_duration1`=1, `rain_duration2`=1, `rain_duration3`=1, `rain_duration4`=1, `snow_duration1`=1, `snow_duration2`=1, `snow_duration3`=1, `snow_duration4`=1 WHERE `id`=103; +UPDATE `zone` SET `rain_chance1`=2, `rain_chance2`=2, `rain_chance3`=2, `rain_chance4`=2, `rain_duration1`=24, `rain_duration2`=6, `rain_duration3`=2, `rain_duration4`=10 WHERE `id`=332; +UPDATE `zone` SET `rain_chance1`=5, `rain_chance2`=5, `rain_chance3`=5, `rain_chance4`=5, `rain_duration1`=10, `rain_duration2`=10, `rain_duration3`=10, `rain_duration4`=10 WHERE `id`=336; +UPDATE `zone` SET `rain_chance1`=10, `rain_chance2`=10, `rain_chance3`=10, `rain_chance4`=10, `rain_duration1`=1, `rain_duration2`=1, `rain_duration3`=1, `rain_duration4`=1 WHERE `id`=173; +UPDATE `zone` SET `rain_chance1`=2, `rain_chance2`=8, `rain_chance3`=10, `rain_chance4`=3, `rain_duration1`=1, `rain_duration2`=2, `rain_duration3`=1, `rain_duration4`=1 WHERE `id`=141; +UPDATE `zone` SET `rain_chance1`=10, `rain_chance2`=10, `rain_chance3`=10, `rain_chance4`=10, `rain_duration1`=24, `rain_duration2`=6, `rain_duration3`=2, `rain_duration4`=10, `snow_chance1`=25, `snow_duration1`=24 WHERE `id`=389; +UPDATE `zone` SET `rain_duration1`=24, `rain_duration2`=24, `rain_duration3`=24, `rain_duration4`=24 WHERE `id`=191; +UPDATE `zone` SET `rain_chance1`=25, `rain_chance2`=25, `rain_chance3`=50, `rain_chance4`=25, `rain_duration1`=1, `rain_duration2`=1, `rain_duration3`=1, `rain_duration4`=1 WHERE `id`=223; +UPDATE `zone` SET `rain_duration1`=1, `rain_duration2`=2, `rain_duration3`=1, `rain_duration4`=1, `snow_duration1`=1 WHERE `id`=49; +UPDATE `zone` SET `rain_chance1`=10, `rain_chance2`=10, `rain_chance3`=10, `rain_chance4`=10, `rain_duration1`=24, `rain_duration2`=6, `rain_duration3`=2, `rain_duration4`=10 WHERE `id`=281; +UPDATE `zone` SET `rain_chance1`=6, `rain_chance2`=6, `rain_chance3`=6, `rain_chance4`=6, `rain_duration1`=12, `rain_duration2`=6, `rain_duration3`=2, `rain_duration4`=10 WHERE `id`=288; +UPDATE `zone` SET `rain_chance1`=10, `rain_chance2`=10, `rain_chance3`=10, `rain_chance4`=10, `rain_duration1`=24, `rain_duration2`=6, `rain_duration3`=2, `rain_duration4`=10 WHERE `id`=290; +UPDATE `zone` SET `rain_chance1`=10, `rain_chance2`=10, `rain_chance3`=10, `rain_chance4`=10, `rain_duration1`=24, `rain_duration2`=6, `rain_duration3`=2, `rain_duration4`=10 WHERE `id`=170; +UPDATE `zone` SET `rain_chance1`=10, `rain_chance2`=10, `rain_chance3`=10, `rain_chance4`=10, `rain_duration1`=24, `rain_duration2`=6, `rain_duration3`=2, `rain_duration4`=10 WHERE `id`=27; +UPDATE `zone` SET `rain_chance2`=100, `rain_chance3`=100, `rain_chance4`=50, `rain_duration2`=24, `rain_duration3`=24, `rain_duration4`=24, `snow_chance1`=100, `snow_chance4`=50, `snow_duration1`=24, `snow_duration4`=24 WHERE `id`=289; +UPDATE `zone` SET `rain_chance1`=10, `rain_chance2`=10, `rain_chance3`=10, `rain_chance4`=10, `rain_duration1`=24, `rain_duration2`=6, `rain_duration3`=2, `rain_duration4`=10 WHERE `id`=285; +UPDATE `zone` SET `rain_chance1`=10, `rain_chance2`=10, `rain_chance3`=10, `rain_chance4`=10, `rain_duration1`=24, `rain_duration2`=6, `rain_duration3`=2, `rain_duration4`=10 WHERE `id`=171; +UPDATE `zone` SET `rain_chance1`=10, `rain_chance2`=10, `rain_chance3`=10, `rain_chance4`=10, `rain_duration1`=24, `rain_duration2`=6, `rain_duration3`=2, `rain_duration4`=10 WHERE `id`=282; +UPDATE `zone` SET `rain_chance1`=10, `rain_chance2`=10, `rain_chance3`=10, `rain_chance4`=10, `rain_duration1`=24, `rain_duration2`=6, `rain_duration3`=2, `rain_duration4`=10 WHERE `id`=283; +UPDATE `zone` SET `rain_chance1`=10, `rain_chance2`=10, `rain_chance3`=10, `rain_chance4`=10, `rain_duration1`=24, `rain_duration2`=6, `rain_duration3`=2, `rain_duration4`=10 WHERE `id`=280; +UPDATE `zone` SET `rain_chance1`=10, `rain_chance2`=10, `rain_chance3`=10, `rain_chance4`=10, `rain_duration1`=12, `rain_duration2`=6, `rain_duration3`=2, `rain_duration4`=10 WHERE `id`=254; \ No newline at end of file diff --git a/zone/spell_effects.cpp b/zone/spell_effects.cpp index 841abcac6..524db430c 100644 --- a/zone/spell_effects.cpp +++ b/zone/spell_effects.cpp @@ -2123,6 +2123,7 @@ bool Mob::SpellEffect(Mob* caster, uint16 spell_id, float partial) snprintf(effect_desc, _EDLEN, "Stop Rain"); #endif zone->zone_weather = 0; + zone->weather_intensity = 0; zone->weatherSend(); break; } diff --git a/zone/zone.cpp b/zone/zone.cpp index 745401f5d..cadd1b472 100644 --- a/zone/zone.cpp +++ b/zone/zone.cpp @@ -134,20 +134,6 @@ bool Zone::Bootup(uint32 iZoneID, uint32 iInstanceID, bool iStaticZone) { } } - zone->weather_type = database.GetZoneWeather(iZoneID, zone->GetInstanceVersion()); - - LogFile->write(EQEMuLog::Debug, "Zone: %s has weather of type %i.", zonename, zone->weather_type); - - if(zone->weather_type > 3 || zone->weather_type == 0) { - zone->zone_weather = 0; - zone->Weather_Timer->Disable(); - LogFile->write(EQEMuLog::Debug, "Zone: %s(%i) has no weather type. The weather timer has been disabled.", zonename, iZoneID); - } - else { - zone->zone_weather = 0; - LogFile->write(EQEMuLog::Debug, "Zone: %s(%i) has weather type = %i. The weather timer has been enabled.", zonename, iZoneID, zone->weather_type); - } - ZoneLoaded = true; worldserver.SetZone(iZoneID, iInstanceID); @@ -900,11 +886,11 @@ Zone::Zone(uint32 in_zoneid, uint32 in_instanceid, const char* in_short_name) long_name = strcpy(new char[18], "Long zone missing"); } autoshutdown_timer.Start(AUTHENTICATION_TIMEOUT * 1000, false); - Weather_Timer = new Timer((MakeRandomInt(1800, 7200) + 30) * 2000); + Weather_Timer = new Timer(60000); Weather_Timer->Start(); LogFile->write(EQEMuLog::Debug, "The next weather check for zone: %s will be in %i seconds.", short_name, Weather_Timer->GetRemainingTime()/1000); - weather_type = 0; zone_weather = 0; + weather_intensity = 0; blocked_spells = nullptr; totalBS = 0; aas = nullptr; @@ -1365,38 +1351,7 @@ bool Zone::Process() { if(Weather_Timer->Check()){ Weather_Timer->Disable(); - uint16 tmpweather = MakeRandomInt(0, 100); - - if(zone->weather_type != 0) - { - if(tmpweather >= 80) - { - // A change in the weather.... - uint8 tmpOldWeather = zone_weather; - - if(zone->zone_weather == 0) - zone->zone_weather = zone->weather_type; - else - zone->zone_weather = 0; - - LogFile->write(EQEMuLog::Debug, "The weather for zone: %s has changed. Old weather was = %i. New weather is = %i", zone->GetShortName(), tmpOldWeather, zone_weather); - - this->weatherSend(); - } - else - LogFile->write(EQEMuLog::Debug, "The weather for zone: %s is not going to change. Chance was = %i percent.", zone->GetShortName(), tmpweather); - - uint32 weatherTime = 0; - - if(zone->zone_weather != zone->weather_type) - weatherTime = (MakeRandomInt(1800, 7200) + 30) * 2000; - else - weatherTime = (MakeRandomInt(900, 2700) + 30) * 1000; - - Weather_Timer->Start(weatherTime); - - LogFile->write(EQEMuLog::Debug, "The next weather check for zone: %s will be in %i seconds.", zone->GetShortName(), Weather_Timer->GetRemainingTime()/1000); - } + this->ChangeWeather(); } if(qGlobals) @@ -1426,6 +1381,129 @@ bool Zone::Process() { return true; } +void Zone::ChangeWeather() +{ + if(!HasWeather()) + { + Weather_Timer->Disable(); + return; + } + + int chance = MakeRandomInt(0, 3); + uint8 rainchance = zone->newzone_data.rain_chance[chance]; + uint8 rainduration = zone->newzone_data.rain_duration[chance]; + uint8 snowchance = zone->newzone_data.snow_chance[chance]; + uint8 snowduration = zone->newzone_data.snow_duration[chance]; + uint32 weathertimer = 0; + uint16 tmpweather = MakeRandomInt(0, 100); + uint8 duration = 0; + uint8 tmpOldWeather = zone->zone_weather; + bool changed = false; + + if(tmpOldWeather == 0) + { + if(rainchance > 0 || snowchance > 0) + { + uint8 intensity = MakeRandomInt(1, 10); + if((rainchance > snowchance) || (rainchance == snowchance)) + { + //It's gunna rain! + if(rainchance >= tmpweather) + { + if(rainduration == 0) + duration = 1; + else + duration = rainduration*3; //Duration is 1 EQ hour which is 3 earth minutes. + + weathertimer = (duration*60)*1000; + Weather_Timer->Start(weathertimer); + zone->zone_weather = 1; + zone->weather_intensity = intensity; + changed = true; + } + } + else + { + //It's gunna snow! + if(snowchance >= tmpweather) + { + if(snowduration == 0) + duration = 1; + else + duration = snowduration*3; + weathertimer = (duration*60)*1000; + Weather_Timer->Start(weathertimer); + zone->zone_weather = 2; + zone->weather_intensity = intensity; + changed = true; + } + } + } + } + else + { + changed = true; + //We've had weather, now taking a break + if(tmpOldWeather == 1) + { + if(rainduration == 0) + duration = 1; + else + duration = rainduration*3; //Duration is 1 EQ hour which is 3 earth minutes. + + weathertimer = (duration*60)*1000; + Weather_Timer->Start(weathertimer); + zone->zone_weather = 0; + zone->weather_intensity = 0; + } + else if(tmpOldWeather == 2) + { + if(snowduration == 0) + duration = 1; + else + duration = snowduration*3; //Duration is 1 EQ hour which is 3 earth minutes. + + weathertimer = (duration*60)*1000; + Weather_Timer->Start(weathertimer); + zone->zone_weather = 0; + zone->weather_intensity = 0; + } + } + + if(changed == false) + { + if(weathertimer == 0) + { + uint32 weatherTimerRule = RuleI(Zone, WeatherTimer); + weathertimer = weatherTimerRule*1000; + Weather_Timer->Start(weathertimer); + } + LogFile->write(EQEMuLog::Debug, "The next weather check for zone: %s will be in %i seconds.", zone->GetShortName(), Weather_Timer->GetRemainingTime()/1000); + } + else + { + LogFile->write(EQEMuLog::Debug, "The weather for zone: %s has changed. Old weather was = %i. New weather is = %i The next check will be in %i seconds. Rain chance: %i, Rain duration: %i, Snow chance %i, Snow duration: %i", zone->GetShortName(), tmpOldWeather, zone_weather,Weather_Timer->GetRemainingTime()/1000,rainchance,rainduration,snowchance,snowduration); + this->weatherSend(); + } +} + +bool Zone::HasWeather() +{ + uint8 rain1 = zone->newzone_data.rain_chance[0]; + uint8 rain2 = zone->newzone_data.rain_chance[1]; + uint8 rain3 = zone->newzone_data.rain_chance[2]; + uint8 rain4 = zone->newzone_data.rain_chance[3]; + uint8 snow1 = zone->newzone_data.snow_chance[0]; + uint8 snow2 = zone->newzone_data.snow_chance[1]; + uint8 snow3 = zone->newzone_data.snow_chance[2]; + uint8 snow4 = zone->newzone_data.snow_chance[3]; + + if(rain1 == 0 && rain2 == 0 && rain3 == 0 && rain4 == 0 && snow1 == 0 && snow2 == 0 && snow3 == 0 && snow4 == 0) + return false; + else + return true; +} + void Zone::StartShutdownTimer(uint32 set_time) { if (set_time > autoshutdown_timer.GetRemainingTime()) { if (set_time == (RuleI(Zone, AutoShutdownDelay))) @@ -1807,26 +1885,11 @@ bool ZoneDatabase::GetDecayTimes(npcDecayTimes_Struct* npcCorpseDecayTimes) { void Zone::weatherSend() { - /*switch(zone_weather) - { - case 0: - entity_list.Message(0, 0, "The sky clears."); - break; - case 1: - entity_list.Message(0, 0, "Raindrops begin to fall from the sky."); - break; - case 2: - entity_list.Message(0, 0, "Snowflakes begin to fall from the sky."); - break; - default: - entity_list.Message(0, 0, "Strange weather patterns form in the sky. (%i)", zone_weather); - break; - }*/ EQApplicationPacket* outapp = new EQApplicationPacket(OP_Weather, 8); if(zone_weather>0) outapp->pBuffer[0] = zone_weather-1; if(zone_weather>0) - outapp->pBuffer[4] = 0x10+MakeRandomInt(0, 9); // This number changes in the packets, intensity? + outapp->pBuffer[4] = zone->weather_intensity; entity_list.QueueClients(0, outapp); safe_delete(outapp); } diff --git a/zone/zone.h b/zone/zone.h index 71f1c8f42..981e448b8 100644 --- a/zone/zone.h +++ b/zone/zone.h @@ -149,6 +149,8 @@ public: void ShowDisabledSpawnStatus(Mob* client); void ShowSpawnStatusByID(Mob* client, uint32 spawnid); void StartShutdownTimer(uint32 set_time = (RuleI(Zone, AutoShutdownDelay))); + void ChangeWeather(); + bool HasWeather(); void AddAuth(ServerZoneIncommingClient_Struct* szic); void RemoveAuth(const char* iCharName); void ResetAuth(); @@ -212,7 +214,6 @@ public: WaterMap* watermap; PathManager *pathing; NewZone_Struct newzone_data; - uint8 zone_weather; SpawnConditionManager spawn_conditions; @@ -232,7 +233,8 @@ public: inline bool BuffTimersSuspended() const { return newzone_data.SuspendBuffs != 0; }; time_t weather_timer; - uint8 weather_type; + uint8 weather_intensity; + uint8 zone_weather; uint8 loglevelvar; uint8 merchantvar; diff --git a/zone/zonedb.cpp b/zone/zonedb.cpp index b95f86621..ea90b9f08 100644 --- a/zone/zonedb.cpp +++ b/zone/zonedb.cpp @@ -94,7 +94,11 @@ bool ZoneDatabase::GetZoneCFG(uint32 zoneid, uint16 instance_id, NewZone_Struct "fog_red4,fog_green4,fog_blue4,fog_minclip4,fog_maxclip4,fog_density," "sky,zone_exp_multiplier,safe_x,safe_y,safe_z,underworld," "minclip,maxclip,time_type,canbind,cancombat,canlevitate," - "castoutdoor,hotzone,ruleset,suspendbuffs,map_file_name,short_name" + "castoutdoor,hotzone,ruleset,suspendbuffs,map_file_name,short_name," + "rain_chance1,rain_chance2,rain_chance3,rain_chance4," + "rain_duration1,rain_duration2,rain_duration3,rain_duration4," + "snow_chance1,snow_chance2,snow_chance3,snow_chance4," + "snow_duration1,snow_duration2,snow_duration3,snow_duration4" " from zone where zoneidnumber=%i and version=%i",zoneid, instance_id), errbuf, &result)) { safe_delete_array(query); row = mysql_fetch_row(result); @@ -146,6 +150,18 @@ bool ZoneDatabase::GetZoneCFG(uint32 zoneid, uint16 instance_id, NewZone_Struct { strcpy(*map_filename, row[r++]); } + for(i=0;i<4;i++){ + zone_data->rain_chance[i]=atoi(row[r++]); + } + for(i=0;i<4;i++){ + zone_data->rain_duration[i]=atoi(row[r++]); + } + for(i=0;i<4;i++){ + zone_data->snow_chance[i]=atoi(row[r++]); + } + for(i=0;i<4;i++){ + zone_data->snow_duration[i]=atof(row[r++]); + } good = true; } mysql_free_result(result); @@ -2197,55 +2213,6 @@ bool ZoneDatabase::SetZoneTZ(uint32 zoneid, uint32 version, uint32 tz) { } //End new timezone functions. - -//Functions for weather -uint8 ZoneDatabase::GetZoneWeather(uint32 zoneid, uint32 version) { - char errbuf[MYSQL_ERRMSG_SIZE]; - char *query = 0; - MYSQL_RES *result; - MYSQL_ROW row; - - if (RunQuery(query, MakeAnyLenString(&query, "SELECT weather FROM zone WHERE zoneidnumber=%i AND (version=%i OR version=0) ORDER BY version DESC", zoneid, version), errbuf, &result)) - { - safe_delete_array(query); - if (mysql_num_rows(result) > 0) { - row = mysql_fetch_row(result); - uint8 tmp = atoi(row[0]); - mysql_free_result(result); - return tmp; - } - mysql_free_result(result); - } - - else { - std::cerr << "Error in GetZoneWeather query '" << query << "' " << errbuf << std::endl; - safe_delete_array(query); - } - return 0; -} - -bool ZoneDatabase::SetZoneWeather(uint32 zoneid, uint32 version, uint8 w) { - char errbuf[MYSQL_ERRMSG_SIZE]; - char *query = 0; - uint32 affected_rows = 0; - - if (RunQuery(query, MakeAnyLenString(&query, "UPDATE zone SET weather=%i WHERE zoneidnumber=%i AND version=%i", w, zoneid, version), errbuf, 0, &affected_rows)) { - safe_delete_array(query); - if (affected_rows == 1) - return true; - else - return false; - } - else { - std::cerr << "Error in SetZoneWeather query '" << query << "' " << errbuf << std::endl; - safe_delete_array(query); - return false; - } - - return false; -} -//End weather functions. - /* solar: this is never actually called, client_process starts an async query instead and uses GetAccountInfoForLogin_result to process it.. diff --git a/zone/zonedb.h b/zone/zonedb.h index 52700daa2..797b59980 100644 --- a/zone/zonedb.h +++ b/zone/zonedb.h @@ -428,11 +428,6 @@ public: uint32 GetZoneTZ(uint32 zoneid, uint32 version); bool SetZoneTZ(uint32 zoneid, uint32 version, uint32 tz); - /* - * Weather - */ - uint8 GetZoneWeather(uint32 zoneid, uint32 version); - bool SetZoneWeather(uint32 zoneid, uint32 version, uint8 w); /* * Group */