diff --git a/NHSE.Core/NHSE.Core.csproj b/NHSE.Core/NHSE.Core.csproj index 758ad54..43e7126 100644 --- a/NHSE.Core/NHSE.Core.csproj +++ b/NHSE.Core/NHSE.Core.csproj @@ -12,6 +12,7 @@ + @@ -21,6 +22,7 @@ + @@ -30,6 +32,7 @@ + @@ -39,6 +42,7 @@ + @@ -48,6 +52,7 @@ + @@ -57,6 +62,7 @@ + @@ -66,6 +72,7 @@ + @@ -75,6 +82,7 @@ + @@ -84,6 +92,7 @@ + @@ -100,6 +109,7 @@ + @@ -109,6 +119,7 @@ + @@ -118,6 +129,7 @@ + @@ -127,6 +139,7 @@ + @@ -136,6 +149,7 @@ + @@ -145,6 +159,7 @@ + @@ -154,6 +169,7 @@ + @@ -163,6 +179,7 @@ + @@ -172,6 +189,7 @@ + diff --git a/NHSE.Core/Resources/text/de/text_mail_de.txt b/NHSE.Core/Resources/text/de/text_mail_de.txt new file mode 100644 index 0000000..6c1667c --- /dev/null +++ b/NHSE.Core/Resources/text/de/text_mail_de.txt @@ -0,0 +1,101 @@ +mail00 Airmail card +mail01 Star card +mail02 Turkey Day card +mail03 Torn card +mail04 Zen card +mail05 Decorative card +mail06 Graduation card +mail07 Stationery-goods card +mail08 Bandage card +mail09 Chocolate card +mail10 Graffiti card +mail11 Fluffy-clouds card +mail12 Snowflake card +mail13 Common card +mail14 Winter-camellia card +mail15 Lovely hearts card +mail16 Gears card +mail17 Full-bloom card +mail18 Snowperson card +mail19 Carpet-of-leaves card +mail20 Father's Day card +mail21 Holiday card +mail22 Fanciful card +mail23 Cherry-blossoms card +mail24 Shapes card +mail25 Mother's Day card +mail26 Camo card +mail27 Warm-sweater card +mail28 Gem card +mail29 Red-dragonflies card +mail30 Mushroom card +mail31 Card from Happy Home Academy +mail32 Baby-goods card +mail33 Birthday-cake card +mail34 Ribbon card +mail35 Balloons card +mail36 Festive-tree card +mail37 Cool-cool card +mail38 Fantasy-stars card +mail39 Bunny Day card +mail40 Elegant-roses card +mail41 Happy-clovers card +mail42 Pumpkin card +mail43 Halloween card +mail44 Fireworks card +mail45 Dawning-year card +mail46 So-many-hearts card +mail47 Blue-sky card +mail48 Dandelion card +mail49 Shooting-stars card +mail50 Goldfish card +mail51 Hibiscus card +mail52 Flower-bouquet card +mail53 Card from K.K. +mail54 Chocolate-heart card +mail55 Wedding card +mail56 Town-view card +mail57 Velvety card +mail58 Card from C.J. +mail59 Card from Flick +mail60 Card from Bank of Nook +mail61 Card from Nook Mileage Program +mail62 Card from Your pals at Dodo Airlines +mail63 Beach card +mail64 Acorn card +mail65 Gift card +mail66 Card from Jolly Redd's +mail67 MsgWherearenOffice00 +mail68 Glowing-moss card +mail69 Flight-ticket card +mail70 Plumeria card +mail71 Sunset card +mail72 Tropical card +mail73 Paradise Planning card +mail74 Unused_MsgMametsubu00m001 +box00 None +box01 Nook Shopping Box +box02 Hotel Box +box03 Paradise Planning Box +wrap00 None +wrap01 Present +wrap02 Wrapping Paper Yellow +wrap03 Wrapping Paper Pink +wrap04 Wrapping Paper Orange +wrap05 Wrapping Paper Chartreuse +wrap06 Wrapping Paper Green +wrap07 Wrapping Paper Mint +wrap08 Wrapping Paper LightBlue +wrap09 Wrapping Paper Purple +wrap10 Wrapping Paper Navy +wrap11 Wrapping Paper Blue +wrap12 Wrapping Paper White +wrap13 Wrapping Paper Red +wrap14 Wrapping Paper Gold +wrap15 Wrapping Paper Brown +wrap16 Wrapping Paper Gray +wrap17 Wrapping Paper Black +wrap18 Wrapping Paper Festive +wrap19 Lucky Red Envelope +wrap20 Bokjumeoni Pouch +wrap21 Otoshidama Envelope \ No newline at end of file diff --git a/NHSE.Core/Resources/text/de/text_villager_de.txt b/NHSE.Core/Resources/text/de/text_villager_de.txt index 1381b61..8fcdc25 100644 --- a/NHSE.Core/Resources/text/de/text_villager_de.txt +++ b/NHSE.Core/Resources/text/de/text_villager_de.txt @@ -1,4 +1,4 @@ -ant00 Theo +ant00 Theo ant01 Siggi ant02 Mathilda ant03 Annabell @@ -489,3 +489,16 @@ tuk Gernod upa Samselt wrl Winci xct Olli +npc_nookinc Nook Inc. +npc_hotel Hotel +npc_hha Happy Home Academy +npc_nintendo Nintendo +npc_bankofnook Bank of Nook +npc_nookshopping Nook Shopping +npc_nookmileageprogram Nook Mileage Program +npc_mom Mom +npc_dodoairlines Dodo Airlines +npc_thefarwaymuseum The Farway Museum +npc_paradiseplanning Paradise Planning +npc_snowboy Snowboy +npc_nooklinkadmins NookLink Admins diff --git a/NHSE.Core/Resources/text/en/text_mail_en.txt b/NHSE.Core/Resources/text/en/text_mail_en.txt new file mode 100644 index 0000000..6c1667c --- /dev/null +++ b/NHSE.Core/Resources/text/en/text_mail_en.txt @@ -0,0 +1,101 @@ +mail00 Airmail card +mail01 Star card +mail02 Turkey Day card +mail03 Torn card +mail04 Zen card +mail05 Decorative card +mail06 Graduation card +mail07 Stationery-goods card +mail08 Bandage card +mail09 Chocolate card +mail10 Graffiti card +mail11 Fluffy-clouds card +mail12 Snowflake card +mail13 Common card +mail14 Winter-camellia card +mail15 Lovely hearts card +mail16 Gears card +mail17 Full-bloom card +mail18 Snowperson card +mail19 Carpet-of-leaves card +mail20 Father's Day card +mail21 Holiday card +mail22 Fanciful card +mail23 Cherry-blossoms card +mail24 Shapes card +mail25 Mother's Day card +mail26 Camo card +mail27 Warm-sweater card +mail28 Gem card +mail29 Red-dragonflies card +mail30 Mushroom card +mail31 Card from Happy Home Academy +mail32 Baby-goods card +mail33 Birthday-cake card +mail34 Ribbon card +mail35 Balloons card +mail36 Festive-tree card +mail37 Cool-cool card +mail38 Fantasy-stars card +mail39 Bunny Day card +mail40 Elegant-roses card +mail41 Happy-clovers card +mail42 Pumpkin card +mail43 Halloween card +mail44 Fireworks card +mail45 Dawning-year card +mail46 So-many-hearts card +mail47 Blue-sky card +mail48 Dandelion card +mail49 Shooting-stars card +mail50 Goldfish card +mail51 Hibiscus card +mail52 Flower-bouquet card +mail53 Card from K.K. +mail54 Chocolate-heart card +mail55 Wedding card +mail56 Town-view card +mail57 Velvety card +mail58 Card from C.J. +mail59 Card from Flick +mail60 Card from Bank of Nook +mail61 Card from Nook Mileage Program +mail62 Card from Your pals at Dodo Airlines +mail63 Beach card +mail64 Acorn card +mail65 Gift card +mail66 Card from Jolly Redd's +mail67 MsgWherearenOffice00 +mail68 Glowing-moss card +mail69 Flight-ticket card +mail70 Plumeria card +mail71 Sunset card +mail72 Tropical card +mail73 Paradise Planning card +mail74 Unused_MsgMametsubu00m001 +box00 None +box01 Nook Shopping Box +box02 Hotel Box +box03 Paradise Planning Box +wrap00 None +wrap01 Present +wrap02 Wrapping Paper Yellow +wrap03 Wrapping Paper Pink +wrap04 Wrapping Paper Orange +wrap05 Wrapping Paper Chartreuse +wrap06 Wrapping Paper Green +wrap07 Wrapping Paper Mint +wrap08 Wrapping Paper LightBlue +wrap09 Wrapping Paper Purple +wrap10 Wrapping Paper Navy +wrap11 Wrapping Paper Blue +wrap12 Wrapping Paper White +wrap13 Wrapping Paper Red +wrap14 Wrapping Paper Gold +wrap15 Wrapping Paper Brown +wrap16 Wrapping Paper Gray +wrap17 Wrapping Paper Black +wrap18 Wrapping Paper Festive +wrap19 Lucky Red Envelope +wrap20 Bokjumeoni Pouch +wrap21 Otoshidama Envelope \ No newline at end of file diff --git a/NHSE.Core/Resources/text/en/text_villager_en.txt b/NHSE.Core/Resources/text/en/text_villager_en.txt index c808553..7194a10 100644 --- a/NHSE.Core/Resources/text/en/text_villager_en.txt +++ b/NHSE.Core/Resources/text/en/text_villager_en.txt @@ -1,4 +1,4 @@ -ant00 Cyrano +ant00 Cyrano ant01 Antonio ant02 Pango ant03 Anabelle @@ -489,3 +489,16 @@ tuk Franklin upa Shrunk wrl Wendell xct Rover +npc_nookinc Nook Inc. +npc_hotel Hotel +npc_hha Happy Home Academy +npc_nintendo Nintendo +npc_bankofnook Bank of Nook +npc_nookshopping Nook Shopping +npc_nookmileageprogram Nook Mileage Program +npc_mom Mom +npc_dodoairlines Dodo Airlines +npc_thefarwaymuseum The Farway Museum +npc_paradiseplanning Paradise Planning +npc_snowboy Snowboy +npc_nooklinkadmins NookLink Admins diff --git a/NHSE.Core/Resources/text/es/text_mail_es.txt b/NHSE.Core/Resources/text/es/text_mail_es.txt new file mode 100644 index 0000000..6c1667c --- /dev/null +++ b/NHSE.Core/Resources/text/es/text_mail_es.txt @@ -0,0 +1,101 @@ +mail00 Airmail card +mail01 Star card +mail02 Turkey Day card +mail03 Torn card +mail04 Zen card +mail05 Decorative card +mail06 Graduation card +mail07 Stationery-goods card +mail08 Bandage card +mail09 Chocolate card +mail10 Graffiti card +mail11 Fluffy-clouds card +mail12 Snowflake card +mail13 Common card +mail14 Winter-camellia card +mail15 Lovely hearts card +mail16 Gears card +mail17 Full-bloom card +mail18 Snowperson card +mail19 Carpet-of-leaves card +mail20 Father's Day card +mail21 Holiday card +mail22 Fanciful card +mail23 Cherry-blossoms card +mail24 Shapes card +mail25 Mother's Day card +mail26 Camo card +mail27 Warm-sweater card +mail28 Gem card +mail29 Red-dragonflies card +mail30 Mushroom card +mail31 Card from Happy Home Academy +mail32 Baby-goods card +mail33 Birthday-cake card +mail34 Ribbon card +mail35 Balloons card +mail36 Festive-tree card +mail37 Cool-cool card +mail38 Fantasy-stars card +mail39 Bunny Day card +mail40 Elegant-roses card +mail41 Happy-clovers card +mail42 Pumpkin card +mail43 Halloween card +mail44 Fireworks card +mail45 Dawning-year card +mail46 So-many-hearts card +mail47 Blue-sky card +mail48 Dandelion card +mail49 Shooting-stars card +mail50 Goldfish card +mail51 Hibiscus card +mail52 Flower-bouquet card +mail53 Card from K.K. +mail54 Chocolate-heart card +mail55 Wedding card +mail56 Town-view card +mail57 Velvety card +mail58 Card from C.J. +mail59 Card from Flick +mail60 Card from Bank of Nook +mail61 Card from Nook Mileage Program +mail62 Card from Your pals at Dodo Airlines +mail63 Beach card +mail64 Acorn card +mail65 Gift card +mail66 Card from Jolly Redd's +mail67 MsgWherearenOffice00 +mail68 Glowing-moss card +mail69 Flight-ticket card +mail70 Plumeria card +mail71 Sunset card +mail72 Tropical card +mail73 Paradise Planning card +mail74 Unused_MsgMametsubu00m001 +box00 None +box01 Nook Shopping Box +box02 Hotel Box +box03 Paradise Planning Box +wrap00 None +wrap01 Present +wrap02 Wrapping Paper Yellow +wrap03 Wrapping Paper Pink +wrap04 Wrapping Paper Orange +wrap05 Wrapping Paper Chartreuse +wrap06 Wrapping Paper Green +wrap07 Wrapping Paper Mint +wrap08 Wrapping Paper LightBlue +wrap09 Wrapping Paper Purple +wrap10 Wrapping Paper Navy +wrap11 Wrapping Paper Blue +wrap12 Wrapping Paper White +wrap13 Wrapping Paper Red +wrap14 Wrapping Paper Gold +wrap15 Wrapping Paper Brown +wrap16 Wrapping Paper Gray +wrap17 Wrapping Paper Black +wrap18 Wrapping Paper Festive +wrap19 Lucky Red Envelope +wrap20 Bokjumeoni Pouch +wrap21 Otoshidama Envelope \ No newline at end of file diff --git a/NHSE.Core/Resources/text/es/text_villager_es.txt b/NHSE.Core/Resources/text/es/text_villager_es.txt index e419d8f..c0c1931 100644 --- a/NHSE.Core/Resources/text/es/text_villager_es.txt +++ b/NHSE.Core/Resources/text/es/text_villager_es.txt @@ -1,4 +1,4 @@ -ant00 Cirano +ant00 Cirano ant01 Antonio ant02 Aspidora ant03 Anabel @@ -489,3 +489,16 @@ tuk Guindo upa Dr. Sito wrl Da Morsi xct Fran +npc_nookinc Nook Inc. +npc_hotel Hotel +npc_hha Happy Home Academy +npc_nintendo Nintendo +npc_bankofnook Bank of Nook +npc_nookshopping Nook Shopping +npc_nookmileageprogram Nook Mileage Program +npc_mom Mom +npc_dodoairlines Dodo Airlines +npc_thefarwaymuseum The Farway Museum +npc_paradiseplanning Paradise Planning +npc_snowboy Snowboy +npc_nooklinkadmins NookLink Admins diff --git a/NHSE.Core/Resources/text/fr/text_mail_fr.txt b/NHSE.Core/Resources/text/fr/text_mail_fr.txt new file mode 100644 index 0000000..6c1667c --- /dev/null +++ b/NHSE.Core/Resources/text/fr/text_mail_fr.txt @@ -0,0 +1,101 @@ +mail00 Airmail card +mail01 Star card +mail02 Turkey Day card +mail03 Torn card +mail04 Zen card +mail05 Decorative card +mail06 Graduation card +mail07 Stationery-goods card +mail08 Bandage card +mail09 Chocolate card +mail10 Graffiti card +mail11 Fluffy-clouds card +mail12 Snowflake card +mail13 Common card +mail14 Winter-camellia card +mail15 Lovely hearts card +mail16 Gears card +mail17 Full-bloom card +mail18 Snowperson card +mail19 Carpet-of-leaves card +mail20 Father's Day card +mail21 Holiday card +mail22 Fanciful card +mail23 Cherry-blossoms card +mail24 Shapes card +mail25 Mother's Day card +mail26 Camo card +mail27 Warm-sweater card +mail28 Gem card +mail29 Red-dragonflies card +mail30 Mushroom card +mail31 Card from Happy Home Academy +mail32 Baby-goods card +mail33 Birthday-cake card +mail34 Ribbon card +mail35 Balloons card +mail36 Festive-tree card +mail37 Cool-cool card +mail38 Fantasy-stars card +mail39 Bunny Day card +mail40 Elegant-roses card +mail41 Happy-clovers card +mail42 Pumpkin card +mail43 Halloween card +mail44 Fireworks card +mail45 Dawning-year card +mail46 So-many-hearts card +mail47 Blue-sky card +mail48 Dandelion card +mail49 Shooting-stars card +mail50 Goldfish card +mail51 Hibiscus card +mail52 Flower-bouquet card +mail53 Card from K.K. +mail54 Chocolate-heart card +mail55 Wedding card +mail56 Town-view card +mail57 Velvety card +mail58 Card from C.J. +mail59 Card from Flick +mail60 Card from Bank of Nook +mail61 Card from Nook Mileage Program +mail62 Card from Your pals at Dodo Airlines +mail63 Beach card +mail64 Acorn card +mail65 Gift card +mail66 Card from Jolly Redd's +mail67 MsgWherearenOffice00 +mail68 Glowing-moss card +mail69 Flight-ticket card +mail70 Plumeria card +mail71 Sunset card +mail72 Tropical card +mail73 Paradise Planning card +mail74 Unused_MsgMametsubu00m001 +box00 None +box01 Nook Shopping Box +box02 Hotel Box +box03 Paradise Planning Box +wrap00 None +wrap01 Present +wrap02 Wrapping Paper Yellow +wrap03 Wrapping Paper Pink +wrap04 Wrapping Paper Orange +wrap05 Wrapping Paper Chartreuse +wrap06 Wrapping Paper Green +wrap07 Wrapping Paper Mint +wrap08 Wrapping Paper LightBlue +wrap09 Wrapping Paper Purple +wrap10 Wrapping Paper Navy +wrap11 Wrapping Paper Blue +wrap12 Wrapping Paper White +wrap13 Wrapping Paper Red +wrap14 Wrapping Paper Gold +wrap15 Wrapping Paper Brown +wrap16 Wrapping Paper Gray +wrap17 Wrapping Paper Black +wrap18 Wrapping Paper Festive +wrap19 Lucky Red Envelope +wrap20 Bokjumeoni Pouch +wrap21 Otoshidama Envelope \ No newline at end of file diff --git a/NHSE.Core/Resources/text/fr/text_villager_fr.txt b/NHSE.Core/Resources/text/fr/text_villager_fr.txt index 992800b..1c15a8d 100644 --- a/NHSE.Core/Resources/text/fr/text_villager_fr.txt +++ b/NHSE.Core/Resources/text/fr/text_villager_fr.txt @@ -1,4 +1,4 @@ -ant00 Cyrano +ant00 Cyrano ant01 Antonio ant02 Mathilda ant03 Anabelle @@ -489,3 +489,16 @@ tuk Dindou upa Ciboulot wrl Morsicus xct Charly +npc_nookinc Nook Inc. +npc_hotel Hotel +npc_hha Happy Home Academy +npc_nintendo Nintendo +npc_bankofnook Bank of Nook +npc_nookshopping Nook Shopping +npc_nookmileageprogram Nook Mileage Program +npc_mom Mom +npc_dodoairlines Dodo Airlines +npc_thefarwaymuseum The Farway Museum +npc_paradiseplanning Paradise Planning +npc_snowboy Snowboy +npc_nooklinkadmins NookLink Admins diff --git a/NHSE.Core/Resources/text/it/text_mail_it.txt b/NHSE.Core/Resources/text/it/text_mail_it.txt new file mode 100644 index 0000000..6c1667c --- /dev/null +++ b/NHSE.Core/Resources/text/it/text_mail_it.txt @@ -0,0 +1,101 @@ +mail00 Airmail card +mail01 Star card +mail02 Turkey Day card +mail03 Torn card +mail04 Zen card +mail05 Decorative card +mail06 Graduation card +mail07 Stationery-goods card +mail08 Bandage card +mail09 Chocolate card +mail10 Graffiti card +mail11 Fluffy-clouds card +mail12 Snowflake card +mail13 Common card +mail14 Winter-camellia card +mail15 Lovely hearts card +mail16 Gears card +mail17 Full-bloom card +mail18 Snowperson card +mail19 Carpet-of-leaves card +mail20 Father's Day card +mail21 Holiday card +mail22 Fanciful card +mail23 Cherry-blossoms card +mail24 Shapes card +mail25 Mother's Day card +mail26 Camo card +mail27 Warm-sweater card +mail28 Gem card +mail29 Red-dragonflies card +mail30 Mushroom card +mail31 Card from Happy Home Academy +mail32 Baby-goods card +mail33 Birthday-cake card +mail34 Ribbon card +mail35 Balloons card +mail36 Festive-tree card +mail37 Cool-cool card +mail38 Fantasy-stars card +mail39 Bunny Day card +mail40 Elegant-roses card +mail41 Happy-clovers card +mail42 Pumpkin card +mail43 Halloween card +mail44 Fireworks card +mail45 Dawning-year card +mail46 So-many-hearts card +mail47 Blue-sky card +mail48 Dandelion card +mail49 Shooting-stars card +mail50 Goldfish card +mail51 Hibiscus card +mail52 Flower-bouquet card +mail53 Card from K.K. +mail54 Chocolate-heart card +mail55 Wedding card +mail56 Town-view card +mail57 Velvety card +mail58 Card from C.J. +mail59 Card from Flick +mail60 Card from Bank of Nook +mail61 Card from Nook Mileage Program +mail62 Card from Your pals at Dodo Airlines +mail63 Beach card +mail64 Acorn card +mail65 Gift card +mail66 Card from Jolly Redd's +mail67 MsgWherearenOffice00 +mail68 Glowing-moss card +mail69 Flight-ticket card +mail70 Plumeria card +mail71 Sunset card +mail72 Tropical card +mail73 Paradise Planning card +mail74 Unused_MsgMametsubu00m001 +box00 None +box01 Nook Shopping Box +box02 Hotel Box +box03 Paradise Planning Box +wrap00 None +wrap01 Present +wrap02 Wrapping Paper Yellow +wrap03 Wrapping Paper Pink +wrap04 Wrapping Paper Orange +wrap05 Wrapping Paper Chartreuse +wrap06 Wrapping Paper Green +wrap07 Wrapping Paper Mint +wrap08 Wrapping Paper LightBlue +wrap09 Wrapping Paper Purple +wrap10 Wrapping Paper Navy +wrap11 Wrapping Paper Blue +wrap12 Wrapping Paper White +wrap13 Wrapping Paper Red +wrap14 Wrapping Paper Gold +wrap15 Wrapping Paper Brown +wrap16 Wrapping Paper Gray +wrap17 Wrapping Paper Black +wrap18 Wrapping Paper Festive +wrap19 Lucky Red Envelope +wrap20 Bokjumeoni Pouch +wrap21 Otoshidama Envelope \ No newline at end of file diff --git a/NHSE.Core/Resources/text/it/text_villager_it.txt b/NHSE.Core/Resources/text/it/text_villager_it.txt index deca77a..b9b15ef 100644 --- a/NHSE.Core/Resources/text/it/text_villager_it.txt +++ b/NHSE.Core/Resources/text/it/text_villager_it.txt @@ -1,4 +1,4 @@ -ant00 Cirano +ant00 Cirano ant01 Antonio ant02 Carlotta ant03 Annalisa @@ -489,3 +489,16 @@ tuk Cedrone upa Strizzo wrl Van Trik xct Girolamo +npc_nookinc Nook Inc. +npc_hotel Hotel +npc_hha Happy Home Academy +npc_nintendo Nintendo +npc_bankofnook Bank of Nook +npc_nookshopping Nook Shopping +npc_nookmileageprogram Nook Mileage Program +npc_mom Mom +npc_dodoairlines Dodo Airlines +npc_thefarwaymuseum The Farway Museum +npc_paradiseplanning Paradise Planning +npc_snowboy Snowboy +npc_nooklinkadmins NookLink Admins diff --git a/NHSE.Core/Resources/text/jp/text_mail_jp.txt b/NHSE.Core/Resources/text/jp/text_mail_jp.txt new file mode 100644 index 0000000..6c1667c --- /dev/null +++ b/NHSE.Core/Resources/text/jp/text_mail_jp.txt @@ -0,0 +1,101 @@ +mail00 Airmail card +mail01 Star card +mail02 Turkey Day card +mail03 Torn card +mail04 Zen card +mail05 Decorative card +mail06 Graduation card +mail07 Stationery-goods card +mail08 Bandage card +mail09 Chocolate card +mail10 Graffiti card +mail11 Fluffy-clouds card +mail12 Snowflake card +mail13 Common card +mail14 Winter-camellia card +mail15 Lovely hearts card +mail16 Gears card +mail17 Full-bloom card +mail18 Snowperson card +mail19 Carpet-of-leaves card +mail20 Father's Day card +mail21 Holiday card +mail22 Fanciful card +mail23 Cherry-blossoms card +mail24 Shapes card +mail25 Mother's Day card +mail26 Camo card +mail27 Warm-sweater card +mail28 Gem card +mail29 Red-dragonflies card +mail30 Mushroom card +mail31 Card from Happy Home Academy +mail32 Baby-goods card +mail33 Birthday-cake card +mail34 Ribbon card +mail35 Balloons card +mail36 Festive-tree card +mail37 Cool-cool card +mail38 Fantasy-stars card +mail39 Bunny Day card +mail40 Elegant-roses card +mail41 Happy-clovers card +mail42 Pumpkin card +mail43 Halloween card +mail44 Fireworks card +mail45 Dawning-year card +mail46 So-many-hearts card +mail47 Blue-sky card +mail48 Dandelion card +mail49 Shooting-stars card +mail50 Goldfish card +mail51 Hibiscus card +mail52 Flower-bouquet card +mail53 Card from K.K. +mail54 Chocolate-heart card +mail55 Wedding card +mail56 Town-view card +mail57 Velvety card +mail58 Card from C.J. +mail59 Card from Flick +mail60 Card from Bank of Nook +mail61 Card from Nook Mileage Program +mail62 Card from Your pals at Dodo Airlines +mail63 Beach card +mail64 Acorn card +mail65 Gift card +mail66 Card from Jolly Redd's +mail67 MsgWherearenOffice00 +mail68 Glowing-moss card +mail69 Flight-ticket card +mail70 Plumeria card +mail71 Sunset card +mail72 Tropical card +mail73 Paradise Planning card +mail74 Unused_MsgMametsubu00m001 +box00 None +box01 Nook Shopping Box +box02 Hotel Box +box03 Paradise Planning Box +wrap00 None +wrap01 Present +wrap02 Wrapping Paper Yellow +wrap03 Wrapping Paper Pink +wrap04 Wrapping Paper Orange +wrap05 Wrapping Paper Chartreuse +wrap06 Wrapping Paper Green +wrap07 Wrapping Paper Mint +wrap08 Wrapping Paper LightBlue +wrap09 Wrapping Paper Purple +wrap10 Wrapping Paper Navy +wrap11 Wrapping Paper Blue +wrap12 Wrapping Paper White +wrap13 Wrapping Paper Red +wrap14 Wrapping Paper Gold +wrap15 Wrapping Paper Brown +wrap16 Wrapping Paper Gray +wrap17 Wrapping Paper Black +wrap18 Wrapping Paper Festive +wrap19 Lucky Red Envelope +wrap20 Bokjumeoni Pouch +wrap21 Otoshidama Envelope \ No newline at end of file diff --git a/NHSE.Core/Resources/text/jp/text_villager_jp.txt b/NHSE.Core/Resources/text/jp/text_villager_jp.txt index 4a95108..4c91724 100644 --- a/NHSE.Core/Resources/text/jp/text_villager_jp.txt +++ b/NHSE.Core/Resources/text/jp/text_villager_jp.txt @@ -1,4 +1,4 @@ -ant00 さくらじま +ant00 さくらじま ant01 マコト ant02 パトラ ant03 あるみ @@ -489,3 +489,16 @@ tuk フランクリン upa ししょー wrl セイイチ xct みしらぬネコ +npc_nookinc Nook Inc. +npc_hotel Hotel +npc_hha Happy Home Academy +npc_nintendo Nintendo +npc_bankofnook Bank of Nook +npc_nookshopping Nook Shopping +npc_nookmileageprogram Nook Mileage Program +npc_mom Mom +npc_dodoairlines Dodo Airlines +npc_thefarwaymuseum The Farway Museum +npc_paradiseplanning Paradise Planning +npc_snowboy Snowboy +npc_nooklinkadmins NookLink Admins diff --git a/NHSE.Core/Resources/text/ko/text_mail_ko.txt b/NHSE.Core/Resources/text/ko/text_mail_ko.txt new file mode 100644 index 0000000..6c1667c --- /dev/null +++ b/NHSE.Core/Resources/text/ko/text_mail_ko.txt @@ -0,0 +1,101 @@ +mail00 Airmail card +mail01 Star card +mail02 Turkey Day card +mail03 Torn card +mail04 Zen card +mail05 Decorative card +mail06 Graduation card +mail07 Stationery-goods card +mail08 Bandage card +mail09 Chocolate card +mail10 Graffiti card +mail11 Fluffy-clouds card +mail12 Snowflake card +mail13 Common card +mail14 Winter-camellia card +mail15 Lovely hearts card +mail16 Gears card +mail17 Full-bloom card +mail18 Snowperson card +mail19 Carpet-of-leaves card +mail20 Father's Day card +mail21 Holiday card +mail22 Fanciful card +mail23 Cherry-blossoms card +mail24 Shapes card +mail25 Mother's Day card +mail26 Camo card +mail27 Warm-sweater card +mail28 Gem card +mail29 Red-dragonflies card +mail30 Mushroom card +mail31 Card from Happy Home Academy +mail32 Baby-goods card +mail33 Birthday-cake card +mail34 Ribbon card +mail35 Balloons card +mail36 Festive-tree card +mail37 Cool-cool card +mail38 Fantasy-stars card +mail39 Bunny Day card +mail40 Elegant-roses card +mail41 Happy-clovers card +mail42 Pumpkin card +mail43 Halloween card +mail44 Fireworks card +mail45 Dawning-year card +mail46 So-many-hearts card +mail47 Blue-sky card +mail48 Dandelion card +mail49 Shooting-stars card +mail50 Goldfish card +mail51 Hibiscus card +mail52 Flower-bouquet card +mail53 Card from K.K. +mail54 Chocolate-heart card +mail55 Wedding card +mail56 Town-view card +mail57 Velvety card +mail58 Card from C.J. +mail59 Card from Flick +mail60 Card from Bank of Nook +mail61 Card from Nook Mileage Program +mail62 Card from Your pals at Dodo Airlines +mail63 Beach card +mail64 Acorn card +mail65 Gift card +mail66 Card from Jolly Redd's +mail67 MsgWherearenOffice00 +mail68 Glowing-moss card +mail69 Flight-ticket card +mail70 Plumeria card +mail71 Sunset card +mail72 Tropical card +mail73 Paradise Planning card +mail74 Unused_MsgMametsubu00m001 +box00 None +box01 Nook Shopping Box +box02 Hotel Box +box03 Paradise Planning Box +wrap00 None +wrap01 Present +wrap02 Wrapping Paper Yellow +wrap03 Wrapping Paper Pink +wrap04 Wrapping Paper Orange +wrap05 Wrapping Paper Chartreuse +wrap06 Wrapping Paper Green +wrap07 Wrapping Paper Mint +wrap08 Wrapping Paper LightBlue +wrap09 Wrapping Paper Purple +wrap10 Wrapping Paper Navy +wrap11 Wrapping Paper Blue +wrap12 Wrapping Paper White +wrap13 Wrapping Paper Red +wrap14 Wrapping Paper Gold +wrap15 Wrapping Paper Brown +wrap16 Wrapping Paper Gray +wrap17 Wrapping Paper Black +wrap18 Wrapping Paper Festive +wrap19 Lucky Red Envelope +wrap20 Bokjumeoni Pouch +wrap21 Otoshidama Envelope \ No newline at end of file diff --git a/NHSE.Core/Resources/text/ko/text_villager_ko.txt b/NHSE.Core/Resources/text/ko/text_villager_ko.txt index a73a058..2fa9145 100644 --- a/NHSE.Core/Resources/text/ko/text_villager_ko.txt +++ b/NHSE.Core/Resources/text/ko/text_villager_ko.txt @@ -1,4 +1,4 @@ -ant00 사지마 +ant00 사지마 ant01 퍼머거 ant02 패트라 ant03 아롱이 @@ -489,3 +489,16 @@ tuk 프랭클린 upa 스승 wrl 고파유 xct 낯선고양이 +npc_nookinc Nook Inc. +npc_hotel Hotel +npc_hha Happy Home Academy +npc_nintendo Nintendo +npc_bankofnook Bank of Nook +npc_nookshopping Nook Shopping +npc_nookmileageprogram Nook Mileage Program +npc_mom Mom +npc_dodoairlines Dodo Airlines +npc_thefarwaymuseum The Farway Museum +npc_paradiseplanning Paradise Planning +npc_snowboy Snowboy +npc_nooklinkadmins NookLink Admins diff --git a/NHSE.Core/Resources/text/zhs/text_mail_zhs.txt b/NHSE.Core/Resources/text/zhs/text_mail_zhs.txt new file mode 100644 index 0000000..6c1667c --- /dev/null +++ b/NHSE.Core/Resources/text/zhs/text_mail_zhs.txt @@ -0,0 +1,101 @@ +mail00 Airmail card +mail01 Star card +mail02 Turkey Day card +mail03 Torn card +mail04 Zen card +mail05 Decorative card +mail06 Graduation card +mail07 Stationery-goods card +mail08 Bandage card +mail09 Chocolate card +mail10 Graffiti card +mail11 Fluffy-clouds card +mail12 Snowflake card +mail13 Common card +mail14 Winter-camellia card +mail15 Lovely hearts card +mail16 Gears card +mail17 Full-bloom card +mail18 Snowperson card +mail19 Carpet-of-leaves card +mail20 Father's Day card +mail21 Holiday card +mail22 Fanciful card +mail23 Cherry-blossoms card +mail24 Shapes card +mail25 Mother's Day card +mail26 Camo card +mail27 Warm-sweater card +mail28 Gem card +mail29 Red-dragonflies card +mail30 Mushroom card +mail31 Card from Happy Home Academy +mail32 Baby-goods card +mail33 Birthday-cake card +mail34 Ribbon card +mail35 Balloons card +mail36 Festive-tree card +mail37 Cool-cool card +mail38 Fantasy-stars card +mail39 Bunny Day card +mail40 Elegant-roses card +mail41 Happy-clovers card +mail42 Pumpkin card +mail43 Halloween card +mail44 Fireworks card +mail45 Dawning-year card +mail46 So-many-hearts card +mail47 Blue-sky card +mail48 Dandelion card +mail49 Shooting-stars card +mail50 Goldfish card +mail51 Hibiscus card +mail52 Flower-bouquet card +mail53 Card from K.K. +mail54 Chocolate-heart card +mail55 Wedding card +mail56 Town-view card +mail57 Velvety card +mail58 Card from C.J. +mail59 Card from Flick +mail60 Card from Bank of Nook +mail61 Card from Nook Mileage Program +mail62 Card from Your pals at Dodo Airlines +mail63 Beach card +mail64 Acorn card +mail65 Gift card +mail66 Card from Jolly Redd's +mail67 MsgWherearenOffice00 +mail68 Glowing-moss card +mail69 Flight-ticket card +mail70 Plumeria card +mail71 Sunset card +mail72 Tropical card +mail73 Paradise Planning card +mail74 Unused_MsgMametsubu00m001 +box00 None +box01 Nook Shopping Box +box02 Hotel Box +box03 Paradise Planning Box +wrap00 None +wrap01 Present +wrap02 Wrapping Paper Yellow +wrap03 Wrapping Paper Pink +wrap04 Wrapping Paper Orange +wrap05 Wrapping Paper Chartreuse +wrap06 Wrapping Paper Green +wrap07 Wrapping Paper Mint +wrap08 Wrapping Paper LightBlue +wrap09 Wrapping Paper Purple +wrap10 Wrapping Paper Navy +wrap11 Wrapping Paper Blue +wrap12 Wrapping Paper White +wrap13 Wrapping Paper Red +wrap14 Wrapping Paper Gold +wrap15 Wrapping Paper Brown +wrap16 Wrapping Paper Gray +wrap17 Wrapping Paper Black +wrap18 Wrapping Paper Festive +wrap19 Lucky Red Envelope +wrap20 Bokjumeoni Pouch +wrap21 Otoshidama Envelope \ No newline at end of file diff --git a/NHSE.Core/Resources/text/zhs/text_villager_zhs.txt b/NHSE.Core/Resources/text/zhs/text_villager_zhs.txt index 1131f06..47ea768 100644 --- a/NHSE.Core/Resources/text/zhs/text_villager_zhs.txt +++ b/NHSE.Core/Resources/text/zhs/text_villager_zhs.txt @@ -1,4 +1,4 @@ -ant00 阳明 +ant00 阳明 ant01 阿诚 ant02 佩希 ant03 有美 @@ -489,3 +489,16 @@ tuk 富蓝 upa 笑匠 wrl 海项 xct 陌陌 +npc_nookinc Nook Inc. +npc_hotel Hotel +npc_hha Happy Home Academy +npc_nintendo Nintendo +npc_bankofnook Bank of Nook +npc_nookshopping Nook Shopping +npc_nookmileageprogram Nook Mileage Program +npc_mom Mom +npc_dodoairlines Dodo Airlines +npc_thefarwaymuseum The Farway Museum +npc_paradiseplanning Paradise Planning +npc_snowboy Snowboy +npc_nooklinkadmins NookLink Admins diff --git a/NHSE.Core/Resources/text/zht/text_mail_zht.txt b/NHSE.Core/Resources/text/zht/text_mail_zht.txt new file mode 100644 index 0000000..6c1667c --- /dev/null +++ b/NHSE.Core/Resources/text/zht/text_mail_zht.txt @@ -0,0 +1,101 @@ +mail00 Airmail card +mail01 Star card +mail02 Turkey Day card +mail03 Torn card +mail04 Zen card +mail05 Decorative card +mail06 Graduation card +mail07 Stationery-goods card +mail08 Bandage card +mail09 Chocolate card +mail10 Graffiti card +mail11 Fluffy-clouds card +mail12 Snowflake card +mail13 Common card +mail14 Winter-camellia card +mail15 Lovely hearts card +mail16 Gears card +mail17 Full-bloom card +mail18 Snowperson card +mail19 Carpet-of-leaves card +mail20 Father's Day card +mail21 Holiday card +mail22 Fanciful card +mail23 Cherry-blossoms card +mail24 Shapes card +mail25 Mother's Day card +mail26 Camo card +mail27 Warm-sweater card +mail28 Gem card +mail29 Red-dragonflies card +mail30 Mushroom card +mail31 Card from Happy Home Academy +mail32 Baby-goods card +mail33 Birthday-cake card +mail34 Ribbon card +mail35 Balloons card +mail36 Festive-tree card +mail37 Cool-cool card +mail38 Fantasy-stars card +mail39 Bunny Day card +mail40 Elegant-roses card +mail41 Happy-clovers card +mail42 Pumpkin card +mail43 Halloween card +mail44 Fireworks card +mail45 Dawning-year card +mail46 So-many-hearts card +mail47 Blue-sky card +mail48 Dandelion card +mail49 Shooting-stars card +mail50 Goldfish card +mail51 Hibiscus card +mail52 Flower-bouquet card +mail53 Card from K.K. +mail54 Chocolate-heart card +mail55 Wedding card +mail56 Town-view card +mail57 Velvety card +mail58 Card from C.J. +mail59 Card from Flick +mail60 Card from Bank of Nook +mail61 Card from Nook Mileage Program +mail62 Card from Your pals at Dodo Airlines +mail63 Beach card +mail64 Acorn card +mail65 Gift card +mail66 Card from Jolly Redd's +mail67 MsgWherearenOffice00 +mail68 Glowing-moss card +mail69 Flight-ticket card +mail70 Plumeria card +mail71 Sunset card +mail72 Tropical card +mail73 Paradise Planning card +mail74 Unused_MsgMametsubu00m001 +box00 None +box01 Nook Shopping Box +box02 Hotel Box +box03 Paradise Planning Box +wrap00 None +wrap01 Present +wrap02 Wrapping Paper Yellow +wrap03 Wrapping Paper Pink +wrap04 Wrapping Paper Orange +wrap05 Wrapping Paper Chartreuse +wrap06 Wrapping Paper Green +wrap07 Wrapping Paper Mint +wrap08 Wrapping Paper LightBlue +wrap09 Wrapping Paper Purple +wrap10 Wrapping Paper Navy +wrap11 Wrapping Paper Blue +wrap12 Wrapping Paper White +wrap13 Wrapping Paper Red +wrap14 Wrapping Paper Gold +wrap15 Wrapping Paper Brown +wrap16 Wrapping Paper Gray +wrap17 Wrapping Paper Black +wrap18 Wrapping Paper Festive +wrap19 Lucky Red Envelope +wrap20 Bokjumeoni Pouch +wrap21 Otoshidama Envelope \ No newline at end of file diff --git a/NHSE.Core/Resources/text/zht/text_villager_zht.txt b/NHSE.Core/Resources/text/zht/text_villager_zht.txt index d555c8c..8ce9f66 100644 --- a/NHSE.Core/Resources/text/zht/text_villager_zht.txt +++ b/NHSE.Core/Resources/text/zht/text_villager_zht.txt @@ -1,4 +1,4 @@ -ant00 陽明 +ant00 陽明 ant01 阿誠 ant02 佩希 ant03 有美 @@ -489,3 +489,16 @@ tuk 富藍 upa 笑匠 wrl 海項 xct 陌陌 +npc_nookinc Nook Inc. +npc_hotel Hotel +npc_hha Happy Home Academy +npc_nintendo Nintendo +npc_bankofnook Bank of Nook +npc_nookshopping Nook Shopping +npc_nookmileageprogram Nook Mileage Program +npc_mom Mom +npc_dodoairlines Dodo Airlines +npc_thefarwaymuseum The Farway Museum +npc_paradiseplanning Paradise Planning +npc_snowboy Snowboy +npc_nooklinkadmins NookLink Admins diff --git a/NHSE.Core/Save/Files/MainSave.cs b/NHSE.Core/Save/Files/MainSave.cs index fb7bbd6..a810c0a 100644 --- a/NHSE.Core/Save/Files/MainSave.cs +++ b/NHSE.Core/Save/Files/MainSave.cs @@ -65,9 +65,9 @@ public void SetVillagerHouses(IReadOnlyList villagers) } public DesignPattern GetDesign(int index) => Offsets.ReadPattern(Data, index); - public void SetDesign(DesignPattern value, int index, Span playerID, Span townID) => Offsets.WritePattern(value, Data, index, playerID, townID); + public void SetDesign(DesignPattern value, int index) => Offsets.WritePattern(value, Data, index); public DesignPatternPRO GetDesignPRO(int index) => Offsets.ReadPatternPRO(Data, index); - public void SetDesignPRO(DesignPatternPRO value, int index, Span playerID, Span townID) => Offsets.WritePatternPRO(value, Data, index, playerID, townID); + public void SetDesignPRO(DesignPatternPRO value, int index) => Offsets.WritePatternPRO(value, Data, index); public IReadOnlyList RecycleBin { @@ -106,11 +106,11 @@ public DesignPattern[] GetDesigns() return result; } - public void SetDesigns(IReadOnlyList value, Span playerID, Span townID) + public void SetDesigns(IReadOnlyList value) { var count = Math.Min(Offsets.PatternCount, value.Count); for (int i = 0; i < count; i++) - SetDesign(value[i], i, playerID, townID); + SetDesign(value[i], i); } public DesignPatternPRO[] GetDesignsPRO() @@ -121,11 +121,11 @@ public DesignPatternPRO[] GetDesignsPRO() return result; } - public void SetDesignsPRO(IReadOnlyList value, Span playerID, Span townID) + public void SetDesignsPRO(IReadOnlyList value) { var count = Math.Min(Offsets.PatternCount, value.Count); for (int i = 0; i < count; i++) - SetDesignPRO(value[i], i, playerID, townID); + SetDesignPRO(value[i], i); } public DesignPattern FlagMyDesign diff --git a/NHSE.Core/Save/Files/PostBox.cs b/NHSE.Core/Save/Files/PostBox.cs index 96ef7ee..b97613c 100644 --- a/NHSE.Core/Save/Files/PostBox.cs +++ b/NHSE.Core/Save/Files/PostBox.cs @@ -1,6 +1,321 @@ -namespace NHSE.Core; +using System; +using System.Collections.Generic; +using System.Text; +using static System.Buffers.Binary.BinaryPrimitives; + +namespace NHSE.Core; /// -/// postbox.dat +/// Data structures stored for the players Post Box (postbox.dat) /// -public sealed class PostBox(ISaveFileProvider provider) : EncryptedFilePair(provider, "postbox"); \ No newline at end of file +public sealed class PostBox : EncryptedFilePair +{ + public const string FileName = "postbox"; + public readonly PostBoxOffsets Offsets; + public PostBox(ISaveFileProvider provider) : base(provider, FileName) => Offsets = PostBoxOffsets.GetOffsets(Info); + + public readonly int MailLength = Mail.SIZE; + public readonly int MailListLength = 0x46E60; + public readonly int MaxMailItems = Mail.MaxSlots; + + public Span Get_s_7b602b39() => Data.Slice(Offsets.s_7b602b39, 4); + + public Span MailListWholeRegion + { + get => Data.Slice(Offsets.MailList, MailListLength); + set => value.CopyTo(Data[Offsets.MailList..]); + } + + public Span GetIndividualLetter(int index) => Data.Slice(Offsets.MailList + (MailLength * index), MailLength); + public void SetIndividualLetter(int index, Span value) + { + value.CopyTo(Data[(Offsets.MailList + (MailLength * index))..]); + } + + public List GetUsedPostBoxSlots() + { + var usedSlots = new List(); + for (int i = 0; i < MaxMailItems; i++) + { + var readStatus = MailListWholeRegion[(MailLength * i) + Mail.ReadUnread]; + if (readStatus == 0x03 || readStatus == 0x04) + usedSlots.Add(i); + } + return usedSlots; + } + + public int GetLatestUniqueId() + { + return ReadInt32LittleEndian(Data.Slice(Offsets.LatestUniqueId, 4)); + } + public void SetLatestUniqueId(int uniqueId) + { + WriteInt32LittleEndian(Data.Slice(Offsets.LatestUniqueId, 4), uniqueId); + } + + #region Mail + + public void WipeTxRxSection(int index) + { + var arr = new byte[0x60]; + Span bytes = arr; + bytes.CopyTo(Data[(Offsets.MailList + (MailLength * index) + Mail.ReadUnread)..]); + } + + public bool GetMailCheck(int index) + { + return Data[Offsets.MailList + (MailLength * index) + Mail.ReadUnread] != 0x00; + } + public bool GetMailReadStatus(int index) + { + return Data[Offsets.MailList + (MailLength * index) + Mail.ReadUnread] != 0x03; + } + public void SetMailReadStatus(int index, bool isRead) + { + Data[Offsets.MailList + (MailLength * index) + Mail.ReadUnread] = isRead ? (byte)0x04 : (byte)0x03; + } + + public bool GetMailFavStatus(int index) + { + return Data[Offsets.MailList + (MailLength * index) + Mail.LetterFavourited] != 0x00; + } + public void SetMailFavStatus(int index, bool isFavourite) + { + Data[Offsets.MailList + (MailLength * index) + Mail.LetterFavourited] = isFavourite ? (byte)0x01 : (byte)0x00; + } + + public uint GetPlayerSenderIslandId(int index) + { + var offset = Offsets.MailList + (MailLength * index) + Mail.PlayerSenderIslandID; + return ReadUInt32LittleEndian(Data.Slice(offset, 4)); + } + public void SetPlayerSenderIslandId(int index, uint islandId) + { + var offset = Offsets.MailList + (MailLength * index) + Mail.PlayerSenderIslandID; + WriteUInt32LittleEndian(Data.Slice(offset, 4), islandId); + } + + public string GetPlayerSenderIslandName(int index) + { + return GetString(Offsets.MailList + (MailLength * index) + Mail.PlayerSenderIslandName, 10); + } + public void SetPlayerSenderIslandName(int index, string islandName) + { + var nameBytes = GetBytes(islandName, 10); + nameBytes.CopyTo(Data[(Offsets.MailList + (MailLength * index) + Mail.PlayerSenderIslandName)..]); + } + + public byte GetVillagerSenderSpeciesId(int index) + { + return Data[Offsets.MailList + (MailLength * index) + Mail.NPCSenderSpeciesID]; + } + public void SetVillagerSenderSpeciesId(int index, int speciesId) + { + Data[Offsets.MailList + (MailLength * index) + Mail.NPCSenderSpeciesID] = (byte)speciesId; + } + public byte GetVillagerSenderVariantId(int index) + { + return Data[Offsets.MailList + (MailLength * index) + Mail.NPCSenderVariantID]; + } + public void SetVillagerSenderVariantId(int index, int variantId) + { + Data[Offsets.MailList + (MailLength * index) + Mail.NPCSenderVariantID] = (byte)variantId; + } + + public uint GetNPCSenderIslandId(int index) + { + var offset = Offsets.MailList + (MailLength * index) + Mail.NPCSenderIslandID; + return ReadUInt32LittleEndian(Data.Slice(offset, 4)); + } + public void SetNPCSenderIslandId(int index, uint islandId) + { + var offset = Offsets.MailList + (MailLength * index) + Mail.NPCSenderIslandID; + WriteUInt32LittleEndian(Data.Slice(offset, 4), islandId); + } + public string GetNPCSenderIslandName(int index) + { + return GetString(Offsets.MailList + (MailLength * index) + Mail.NPCSenderIslandName, 10); + } + public void SetNPCSenderIslandName(int index, string islandName) + { + var nameBytes = GetBytes(islandName, 20); + nameBytes.CopyTo(Data[(Offsets.MailList + (MailLength * index) + Mail.NPCSenderIslandName)..]); + } + + public uint GetSenderId(int index) + { + var offset = Offsets.MailList + (MailLength * index) + Mail.SenderID; + return ReadUInt32LittleEndian(Data.Slice(offset, 4)); + } + public void SetSenderId(int index, uint senderId) + { + var offset = Offsets.MailList + (MailLength * index) + Mail.SenderID; + WriteUInt32LittleEndian(Data.Slice(offset, 4), senderId); + } + public string GetSenderName(int index) + { + return GetString(Offsets.MailList + (MailLength * index) + Mail.SenderName, 10); + } + public void SetSenderName(int index, string senderName) + { + var nameBytes = GetBytes(senderName, 10); + nameBytes.CopyTo(Data[(Offsets.MailList + (MailLength * index) + Mail.SenderName)..]); + } + public byte GetSenderType(int index) + { + return Data[Offsets.MailList + (MailLength * index) + Mail.SenderType]; + } + public void SetSenderType(int index, byte senderType) + { + Data[Offsets.MailList + (MailLength * index) + Mail.SenderType] = senderType; + } + + public uint GetReceiverIslandId(int index) + { + var offset = Offsets.MailList + (MailLength * index) + Mail.ReceiverIslandID; + return ReadUInt32LittleEndian(Data.Slice(offset, 4)); + } + public void SetReceiverIslandId(int index, uint islandId) + { + var offset = Offsets.MailList + (MailLength * index) + Mail.ReceiverIslandID; + WriteUInt32LittleEndian(Data.Slice(offset, 4), islandId); + } + public string GetReceiverIslandName(int index) + { + return GetString(Offsets.MailList + (MailLength * index) + Mail.ReceiverIslandName, 10); + } + public void SetReceiverIslandName(int index, string islandName) + { + var nameBytes = GetBytes(islandName, 10); + nameBytes.CopyTo(Data[(Offsets.MailList + (MailLength * index) + Mail.ReceiverIslandName)..]); + } + + public uint GetReceiverPlayerId(int index) + { + var offset = Offsets.MailList + (MailLength * index) + Mail.ReceiverPlayerID; + return ReadUInt32LittleEndian(Data.Slice(offset, 4)); + } + public void SetReceiverPlayerId(int index, uint playerId) + { + var offset = Offsets.MailList + (MailLength * index) + Mail.ReceiverPlayerID; + WriteUInt32LittleEndian(Data.Slice(offset, 4), playerId); + } + public string GetReceiverPlayerName(int index) + { + return GetString(Offsets.MailList + (MailLength * index) + Mail.ReceiverPlayerName, 10); + } + public void SetReceiverPlayerName(int index, string playerName) + { + var nameBytes = GetBytes(playerName, 10); + nameBytes.CopyTo(Data[(Offsets.MailList + (MailLength * index) + Mail.ReceiverPlayerName)..]); + } + + public GSaveDate GetTimestamp(int index) + { + return Data.ToStructure(Offsets.MailList + (MailLength * index) + Mail.TimeStamp, GSaveDate.SIZE); + } + public void SetTimeStamp(int index, GSaveDate timestamp) + { + timestamp.ToBytes().CopyTo(Data[(Offsets.MailList + (MailLength * index) + Mail.TimeStamp)..]); + } + + public Item GetAttachedItem(int index) + { + var offset = Offsets.MailList + (MailLength * index) + Mail.AttachedItemID; + return Item.GetArray(Data.Slice(offset, Item.SIZE))[0]; + } + public void SetAttachedItem(int index, Item item) + { + var offset = Offsets.MailList + (MailLength * index) + Mail.AttachedItemID; + var itemBytes = Item.SetArray(new[] { item }); + itemBytes.CopyTo(Data[offset..]); + } + + public byte GetItemWrappingType(int index) + { + return Data[Offsets.MailList + (MailLength * index) + Mail.MailItemWrappingType]; + } + public void SetItemWrappingType(int index, byte wrappingType) + { + Data[Offsets.MailList + (MailLength * index) + Mail.MailItemWrappingType] = wrappingType; + } + + public bool GetMailType(int index) + { + var offset = Offsets.MailList + (MailLength * index); + return Data[offset + Mail.MailType01] == 0x00 && Data[offset + Mail.MailType02] == 0x01; // Letter or boxed type + } + public void SetMailType(int index, bool letter) + { + var offset = Offsets.MailList + (MailLength * index); + if (letter) { Data[offset + Mail.MailType01] = 0x00; Data[offset + Mail.MailType02] = 0x01; } // Letter type + else { Data[offset + Mail.MailType01] = 0x01; Data[offset + Mail.MailType02] = 0x00; } // Boxed item type + } + + public string GetLetterToLineText(int index) + { + return GetString(Offsets.MailList + (MailLength * index) + Mail.LetterToLineText, Mail.LetterToTextLength); + } + public void SetLetterToLineText(int index, string toLineText) + { + var textBytes = GetBytes(toLineText, Mail.LetterToTextLength); + textBytes.CopyTo(Data[(Offsets.MailList + (MailLength * index) + Mail.LetterToLineText)..]); + } + public string GetLetterMessageText(int index) + { + return GetString(Offsets.MailList + (MailLength * index) + Mail.LetterMessageText, Mail.LetterMessageTextLength); + } + public void SetLetterMessageText(int index, string messageText) + { + var textBytes = GetBytes(messageText, Mail.LetterMessageTextLength); + textBytes.CopyTo(Data[(Offsets.MailList + (MailLength * index) + Mail.LetterMessageText)..]); + } + public string GetLetterFromLineText(int index) + { + return GetString(Offsets.MailList + (MailLength * index) + Mail.LetterFromLineText, Mail.LetterFromTextLength); + } + public void SetLetterFromLineText(int index, string fromLineText) + { + var textBytes = GetBytes(fromLineText, Mail.LetterFromTextLength); + textBytes.CopyTo(Data[(Offsets.MailList + (MailLength * index) + Mail.LetterFromLineText)..]); + } + public ushort GetMailStationerySkin(int index) + { + var offset = Offsets.MailList + (MailLength * index) + Mail.MailStationerySkin; + return ReadUInt16LittleEndian(Data.Slice(offset, 2)); + } + public void SetMailStationerySkin(int index, ushort skinCode) + { + var offset = Offsets.MailList + (MailLength * index) + Mail.MailStationerySkin; + WriteUInt16LittleEndian(Data.Slice(offset, 2), skinCode); + } + + public byte GetPostBoxSortIndex(int index) + { + return Data[Offsets.MailList + (MailLength * index) + Mail.PostBoxSortIndex]; + } + public void SetPostBoxSortIndex(int index, byte sortIndex) + { + Data[Offsets.MailList + (MailLength * index) + Mail.PostBoxSortIndex] = sortIndex; + } + + public string GetMailLanguageString(int index) + { + return Encoding.UTF8.GetString(Data.Slice(Offsets.MailList + (MailLength * index) + Mail.LanguageString, 5)); + } + + /// + /// Sets or clears the language string for a mail item at the specified index. + /// + /// The zero-based index of the mail item in the postbox. + /// The IETF BCP 47 language tag string to set (e.g., "en-US", "ja-JP"). + /// If true, sets the language string; if false, clears the language data. + public void SetMailLanguageString(int index, string languageString, bool player) + { + var langOffset = Offsets.MailList + (MailLength * index) + Mail.LanguageString; + if (player) { GetBytes(languageString, 5).CopyTo(Data[langOffset..]); } + else { Data.Slice(langOffset, 5).Clear(); } + } + + #endregion +} \ No newline at end of file diff --git a/NHSE.Core/Save/Offsets/MainSaveOffsets.cs b/NHSE.Core/Save/Offsets/MainSaveOffsets.cs index 3cc7194..acb41b8 100644 --- a/NHSE.Core/Save/Offsets/MainSaveOffsets.cs +++ b/NHSE.Core/Save/Offsets/MainSaveOffsets.cs @@ -123,17 +123,13 @@ public static DesignPattern ReadPatternAtOffset(ReadOnlySpan data, int off return new DesignPattern(v); } - public void WritePattern(DesignPattern p, Span data, int index, Span playerID, Span townID) + public void WritePattern(DesignPattern p, Span data, int index) { if ((uint)index >= PatternCount) throw new ArgumentOutOfRangeException(nameof(index)); - playerID.CopyTo(p.Data[0x54..]); // overwrite playerID bytes so player owns - townID.CopyTo(p.Data[0x38..]); // overwrite townID bytes so player owns - ReadOnlySpan wipeflag = [0x02, 0xEE, 0x00, 0x00]; // wipe so player owns - wipeflag.CopyTo(p.Data[0x70..]); p.Data.CopyTo(data[(LandMyDesign + (index * DesignPattern.SIZE))..]); ReadOnlySpan editedflag = [0x00]; - editedflag.CopyTo(data[(PatternsEditFlagStart + index)..]); // set edited flag for name import to work + editedflag.CopyTo(data[(PatternsEditFlagStart + index)..]); // set edited flag for designs name import to be correct in game } public DesignPatternPRO ReadPatternPRO(ReadOnlySpan data, int index) @@ -150,17 +146,12 @@ public static DesignPatternPRO ReadPatternPROAtOffset(ReadOnlySpan data, i return new DesignPatternPRO(v); } - public void WritePatternPRO(DesignPatternPRO p, Span data, int index, Span playerID, Span townID) + public void WritePatternPRO(DesignPatternPRO p, Span data, int index) { if ((uint)index >= PatternCount) - throw new ArgumentOutOfRangeException(nameof(index)); - playerID.CopyTo(p.Data[0x54..]); // overwrite playerID bytes so player owns - townID.CopyTo(p.Data[0x38..]); // overwrite townID bytes so player owns - ReadOnlySpan wipeflag = [0x00, 0x00, 0x00, 0x00]; // wipe so player owns - wipeflag.CopyTo(p.Data[0x70..]); p.Data.CopyTo(data[(PatternsPRO + (index * DesignPatternPRO.SIZE))..]); ReadOnlySpan editedflag = [0x00]; - editedflag.CopyTo(data[(PatternsProEditFlagStart + index)..]); // set edited flag for name import to work + editedflag.CopyTo(data[(PatternsProEditFlagStart + index)..]); // set edited flag for designs name import to be correct in game } public IVillager ReadVillager(ReadOnlySpan data, int index) diff --git a/NHSE.Core/Save/Offsets/PostBoxOffsets.cs b/NHSE.Core/Save/Offsets/PostBoxOffsets.cs new file mode 100644 index 0000000..9acba5a --- /dev/null +++ b/NHSE.Core/Save/Offsets/PostBoxOffsets.cs @@ -0,0 +1,55 @@ +using System; + +namespace NHSE.Core; + +/// +/// Offset info and object retrieval logic for +/// +public abstract class PostBoxOffsets +{ + public abstract int s_7b602b39 { get; } + public abstract int MailList { get; } + public abstract int FontTable { get; } + public abstract int LatestUniqueId { get; } + + public static PostBoxOffsets GetOffsets(FileHeaderInfo Info) + { + var rev = Info.GetKnownRevisionIndex(); + return rev switch + { + 0 => new PostBoxOffsets10(), + 1 => new PostBoxOffsets11(), + 2 => new PostBoxOffsets11(), + 3 => new PostBoxOffsets11(), + 4 => new PostBoxOffsets11(), + 5 => new PostBoxOffsets11(), + 6 => new PostBoxOffsets12(), + 7 => new PostBoxOffsets12(), + 8 => new PostBoxOffsets13(), + 9 => new PostBoxOffsets13(), + 10 => new PostBoxOffsets14(), + 11 => new PostBoxOffsets14(), + 12 => new PostBoxOffsets14(), + 13 => new PostBoxOffsets15(), + 14 => new PostBoxOffsets15(), + 15 => new PostBoxOffsets16(), + 16 => new PostBoxOffsets17(), + 17 => new PostBoxOffsets18(), + 18 => new PostBoxOffsets19(), + 19 => new PostBoxOffsets110(), + 20 => new PostBoxOffsets111(), + 21 => new PostBoxOffsets111(), + 22 => new PostBoxOffsets20(), + 23 => new PostBoxOffsets20(), + 24 => new PostBoxOffsets20(), + 25 => new PostBoxOffsets20(), + 26 => new PostBoxOffsets20(), + 27 => new PostBoxOffsets20(), + 28 => new PostBoxOffsets20(), + 29 => new PostBoxOffsets20(), + 30 => new PostBoxOffsets20(), + 31 => new PostBoxOffsets30(), + _ => throw new IndexOutOfRangeException("Unknown revision!" + Environment.NewLine + Info), + }; + } +} \ No newline at end of file diff --git a/NHSE.Core/Save/Offsets/PostBoxOffsets10.cs b/NHSE.Core/Save/Offsets/PostBoxOffsets10.cs new file mode 100644 index 0000000..6b13251 --- /dev/null +++ b/NHSE.Core/Save/Offsets/PostBoxOffsets10.cs @@ -0,0 +1,16 @@ +using System; + +namespace NHSE.Core; + +/// +/// +/// +public sealed class PostBoxOffsets10 : PostBoxOffsets +{ + // GSavePostBox + private const int GSaveVersion = 0x0; // @0x0 size 0x100, align 4 + public override int s_7b602b39 => GSaveVersion + 0x100; // (_d35a9251) u32 "Code" size 0x4, align 4. In size 0x10 container + public override int MailList => GSaveVersion + 0x108; // Beginning of mail list + public override int FontTable => GSaveVersion + 0x46E60; // The forbidden alphabetti soup + public override int LatestUniqueId => 0xb44578; // Next post index slot +} \ No newline at end of file diff --git a/NHSE.Core/Save/Offsets/PostBoxOffsets11.cs b/NHSE.Core/Save/Offsets/PostBoxOffsets11.cs new file mode 100644 index 0000000..899dd41 --- /dev/null +++ b/NHSE.Core/Save/Offsets/PostBoxOffsets11.cs @@ -0,0 +1,16 @@ +using System; + +namespace NHSE.Core; + +/// +/// +/// +public sealed class PostBoxOffsets11 : PostBoxOffsets +{ + // GSavePostBox + private const int GSaveVersion = 0x0; // @0x0 size 0x100, align 4 + public override int s_7b602b39 => GSaveVersion + 0x100; // (_d35a9251) u32 "Code" size 0x4, align 4. In size 0x10 container + public override int MailList => GSaveVersion + 0x110; // Beginning of mail list + public override int FontTable => GSaveVersion + 0x46E60; // The forbidden alphabetti soup + public override int LatestUniqueId => 0xb44580; // Next post index slot +} \ No newline at end of file diff --git a/NHSE.Core/Save/Offsets/PostBoxOffsets110.cs b/NHSE.Core/Save/Offsets/PostBoxOffsets110.cs new file mode 100644 index 0000000..967279d --- /dev/null +++ b/NHSE.Core/Save/Offsets/PostBoxOffsets110.cs @@ -0,0 +1,16 @@ +using System; + +namespace NHSE.Core; + +/// +/// +/// +public sealed class PostBoxOffsets110 : PostBoxOffsets +{ + // GSavePostBox + private const int GSaveVersion = 0x0; // @0x0 size 0x100, align 4 + public override int s_7b602b39 => GSaveVersion + 0x100; // (_d35a9251) u32 "Code" size 0x4, align 4. In size 0x10 container + public override int MailList => GSaveVersion + 0x110; // Beginning of mail list + public override int FontTable => GSaveVersion + 0x46E60; // The forbidden alphabetti soup + public override int LatestUniqueId => 0x47420; // Next post index slot +} \ No newline at end of file diff --git a/NHSE.Core/Save/Offsets/PostBoxOffsets111.cs b/NHSE.Core/Save/Offsets/PostBoxOffsets111.cs new file mode 100644 index 0000000..7b32d14 --- /dev/null +++ b/NHSE.Core/Save/Offsets/PostBoxOffsets111.cs @@ -0,0 +1,16 @@ +using System; + +namespace NHSE.Core; + +/// +/// +/// +public sealed class PostBoxOffsets111 : PostBoxOffsets +{ + // GSavePostBox + private const int GSaveVersion = 0x0; // @0x0 size 0x100, align 4 + public override int s_7b602b39 => GSaveVersion + 0x100; // (_d35a9251) u32 "Code" size 0x4, align 4. In size 0x10 container + public override int MailList => GSaveVersion + 0x110; // Beginning of mail list + public override int FontTable => GSaveVersion + 0x46E60; // The forbidden alphabetti soup + public override int LatestUniqueId => 0x47420; // Next post index slot +} \ No newline at end of file diff --git a/NHSE.Core/Save/Offsets/PostBoxOffsets12.cs b/NHSE.Core/Save/Offsets/PostBoxOffsets12.cs new file mode 100644 index 0000000..1a895f2 --- /dev/null +++ b/NHSE.Core/Save/Offsets/PostBoxOffsets12.cs @@ -0,0 +1,16 @@ +using System; + +namespace NHSE.Core; + +/// +/// +/// +public sealed class PostBoxOffsets12 : PostBoxOffsets +{ + // GSavePostBox + private const int GSaveVersion = 0x0; // @0x0 size 0x100, align 4 + public override int s_7b602b39 => GSaveVersion + 0x100; // (_d35a9251) u32 "Code" size 0x4, align 4. In size 0x10 container + public override int MailList => GSaveVersion + 0x110; // Beginning of mail list + public override int FontTable => GSaveVersion + 0x46E60; // The forbidden alphabetti soup + public override int LatestUniqueId => 0xb44580; // Next post index slot +} \ No newline at end of file diff --git a/NHSE.Core/Save/Offsets/PostBoxOffsets13.cs b/NHSE.Core/Save/Offsets/PostBoxOffsets13.cs new file mode 100644 index 0000000..d805e7e --- /dev/null +++ b/NHSE.Core/Save/Offsets/PostBoxOffsets13.cs @@ -0,0 +1,16 @@ +using System; + +namespace NHSE.Core; + +/// +/// +/// +public sealed class PostBoxOffsets13 : PostBoxOffsets +{ + // GSavePostBox + private const int GSaveVersion = 0x0; // @0x0 size 0x100, align 4 + public override int s_7b602b39 => GSaveVersion + 0x100; // (_d35a9251) u32 "Code" size 0x4, align 4. In size 0x10 container + public override int MailList => GSaveVersion + 0x110; // Beginning of mail list + public override int FontTable => GSaveVersion + 0x46E60; // The forbidden alphabetti soup + public override int LatestUniqueId => 0xb44580; // Next post index slot +} \ No newline at end of file diff --git a/NHSE.Core/Save/Offsets/PostBoxOffsets14.cs b/NHSE.Core/Save/Offsets/PostBoxOffsets14.cs new file mode 100644 index 0000000..ad073ba --- /dev/null +++ b/NHSE.Core/Save/Offsets/PostBoxOffsets14.cs @@ -0,0 +1,16 @@ +using System; + +namespace NHSE.Core; + +/// +/// +/// +public sealed class PostBoxOffsets14 : PostBoxOffsets +{ + // GSavePostBox + private const int GSaveVersion = 0x0; // @0x0 size 0x100, align 4 + public override int s_7b602b39 => GSaveVersion + 0x100; // (_d35a9251) u32 "Code" size 0x4, align 4. In size 0x10 container + public override int MailList => GSaveVersion + 0x110; // Beginning of mail list + public override int FontTable => GSaveVersion + 0x46E60; // The forbidden alphabetti soup + public override int LatestUniqueId => 0xb44580; // Next post index slot +} \ No newline at end of file diff --git a/NHSE.Core/Save/Offsets/PostBoxOffsets15.cs b/NHSE.Core/Save/Offsets/PostBoxOffsets15.cs new file mode 100644 index 0000000..bcb03bc --- /dev/null +++ b/NHSE.Core/Save/Offsets/PostBoxOffsets15.cs @@ -0,0 +1,16 @@ +using System; + +namespace NHSE.Core; + +/// +/// +/// +public sealed class PostBoxOffsets15 : PostBoxOffsets +{ + // GSavePostBox + private const int GSaveVersion = 0x0; // @0x0 size 0x100, align 4 + public override int s_7b602b39 => GSaveVersion + 0x100; // (_d35a9251) u32 "Code" size 0x4, align 4. In size 0x10 container + public override int MailList => GSaveVersion + 0x110; // Beginning of mail list + public override int FontTable => GSaveVersion + 0x46E60; // The forbidden alphabetti soup + public override int LatestUniqueId => 0xb44580; // Next post index slot +} \ No newline at end of file diff --git a/NHSE.Core/Save/Offsets/PostBoxOffsets16.cs b/NHSE.Core/Save/Offsets/PostBoxOffsets16.cs new file mode 100644 index 0000000..16a420c --- /dev/null +++ b/NHSE.Core/Save/Offsets/PostBoxOffsets16.cs @@ -0,0 +1,16 @@ +using System; + +namespace NHSE.Core; + +/// +/// +/// +public sealed class PostBoxOffsets16 : PostBoxOffsets +{ + // GSavePostBox + private const int GSaveVersion = 0x0; // @0x0 size 0x100, align 4 + public override int s_7b602b39 => GSaveVersion + 0x100; // (_d35a9251) u32 "Code" size 0x4, align 4. In size 0x10 container + public override int MailList => GSaveVersion + 0x110; // Beginning of mail list + public override int FontTable => GSaveVersion + 0x46E60; // The forbidden alphabetti soup + public override int LatestUniqueId => 0xb44580; // Next post index slot +} \ No newline at end of file diff --git a/NHSE.Core/Save/Offsets/PostBoxOffsets17.cs b/NHSE.Core/Save/Offsets/PostBoxOffsets17.cs new file mode 100644 index 0000000..2f60122 --- /dev/null +++ b/NHSE.Core/Save/Offsets/PostBoxOffsets17.cs @@ -0,0 +1,16 @@ +using System; + +namespace NHSE.Core; + +/// +/// +/// +public sealed class PostBoxOffsets17 : PostBoxOffsets +{ + // GSavePostBox + private const int GSaveVersion = 0x0; // @0x0 size 0x100, align 4 + public override int s_7b602b39 => GSaveVersion + 0x100; // (_d35a9251) u32 "Code" size 0x4, align 4. In size 0x10 container + public override int MailList => GSaveVersion + 0x110; // Beginning of mail list + public override int FontTable => GSaveVersion + 0x46E60; // The forbidden alphabetti soup + public override int LatestUniqueId => 0x47420; // Next post index slot +} \ No newline at end of file diff --git a/NHSE.Core/Save/Offsets/PostBoxOffsets18.cs b/NHSE.Core/Save/Offsets/PostBoxOffsets18.cs new file mode 100644 index 0000000..9097429 --- /dev/null +++ b/NHSE.Core/Save/Offsets/PostBoxOffsets18.cs @@ -0,0 +1,16 @@ +using System; + +namespace NHSE.Core; + +/// +/// +/// +public sealed class PostBoxOffsets18 : PostBoxOffsets +{ + // GSavePostBox + private const int GSaveVersion = 0x0; // @0x0 size 0x100, align 4 + public override int s_7b602b39 => GSaveVersion + 0x100; // (_d35a9251) u32 "Code" size 0x4, align 4. In size 0x10 container + public override int MailList => GSaveVersion + 0x110; // Beginning of mail list + public override int FontTable => GSaveVersion + 0x46E60; // The forbidden alphabetti soup + public override int LatestUniqueId => 0x47420; // Next post index slot +} \ No newline at end of file diff --git a/NHSE.Core/Save/Offsets/PostBoxOffsets19.cs b/NHSE.Core/Save/Offsets/PostBoxOffsets19.cs new file mode 100644 index 0000000..80d44d5 --- /dev/null +++ b/NHSE.Core/Save/Offsets/PostBoxOffsets19.cs @@ -0,0 +1,16 @@ +using System; + +namespace NHSE.Core; + +/// +/// +/// +public sealed class PostBoxOffsets19 : PostBoxOffsets +{ + // GSavePostBox + private const int GSaveVersion = 0x0; // @0x0 size 0x100, align 4 + public override int s_7b602b39 => GSaveVersion + 0x100; // (_d35a9251) u32 "Code" size 0x4, align 4. In size 0x10 container + public override int MailList => GSaveVersion + 0x110; // Beginning of mail list + public override int FontTable => GSaveVersion + 0x46E60; // The forbidden alphabetti soup + public override int LatestUniqueId => 0x47420; // Next post index slot +} \ No newline at end of file diff --git a/NHSE.Core/Save/Offsets/PostBoxOffsets20.cs b/NHSE.Core/Save/Offsets/PostBoxOffsets20.cs new file mode 100644 index 0000000..90fbd2f --- /dev/null +++ b/NHSE.Core/Save/Offsets/PostBoxOffsets20.cs @@ -0,0 +1,16 @@ +using System; + +namespace NHSE.Core; + +/// +/// +/// +public sealed class PostBoxOffsets20 : PostBoxOffsets +{ + // GSavePostBox + private const int GSaveVersion = 0x0; // @0x0 size 0x100, align 4 + public override int s_7b602b39 => GSaveVersion + 0x100; // (_d35a9251) u32 "Code" size 0x4, align 4. In size 0x10 container + public override int MailList => GSaveVersion + 0x110; // Beginning of mail list + public override int FontTable => GSaveVersion + 0x46E60; // The forbidden alphabetti soup + public override int LatestUniqueId => 0x47420; // Next post index slot +} \ No newline at end of file diff --git a/NHSE.Core/Save/Offsets/PostBoxOffsets30.cs b/NHSE.Core/Save/Offsets/PostBoxOffsets30.cs new file mode 100644 index 0000000..33687ee --- /dev/null +++ b/NHSE.Core/Save/Offsets/PostBoxOffsets30.cs @@ -0,0 +1,16 @@ +using System; + +namespace NHSE.Core; + +/// +/// +/// +public sealed class PostBoxOffsets30 : PostBoxOffsets +{ + // GSavePostBox + private const int GSaveVersion = 0x0; // @0x0 size 0x100, align 4 + public override int s_7b602b39 => GSaveVersion + 0x100; // (_d35a9251) u32 "Code" size 0x4, align 4. In size 0x10 container + public override int MailList => GSaveVersion + 0x110; // Beginning of mail list + public override int FontTable => GSaveVersion + 0x46E60; // The forbidden alphabetti soup + public override int LatestUniqueId => 0x47420; // Next post index slot +} \ No newline at end of file diff --git a/NHSE.Core/Strings/GameStrings.cs b/NHSE.Core/Strings/GameStrings.cs index 0014ea0..8b5d729 100644 --- a/NHSE.Core/Strings/GameStrings.cs +++ b/NHSE.Core/Strings/GameStrings.cs @@ -14,8 +14,10 @@ public sealed class GameStrings : IRemakeString public readonly string[] itemlist; public readonly string[] itemlistdisplay; public readonly string[] villagerDefaultPhrases; + public readonly string[] mail; public readonly Dictionary VillagerMap; public readonly Dictionary VillagerDefaultPhraseMap; + public readonly Dictionary MailMap; public readonly List ItemDataSource; public readonly Dictionary InternalNameTranslation = []; @@ -36,6 +38,8 @@ public GameStrings(string l) itemlist = Get("item"); itemlistdisplay = GetItemDisplayList(itemlist); ItemDataSource = CreateItemDataSource(itemlistdisplay); + mail = Get("mail"); + MailMap = GetMap(mail); BodyParts = GetDictionary(Get("body_parts")); BodyColor = GetDictionary(Get("body_color")); @@ -116,6 +120,8 @@ public List CreateItemDataSource(IReadOnlyCollection VillagerDefaultPhraseMap.GetValueOrDefault(name, name); // I know it shouldn't be `name` but I have to return something + public string GetMail(string name) => MailMap.GetValueOrDefault(name, name); + public static string[] GetItemDisplayList(ReadOnlySpan arr) { var items = arr.ToArray(); diff --git a/NHSE.Core/Structures/Designs/DesignPattern.cs b/NHSE.Core/Structures/Designs/DesignPattern.cs index 86de1df..7d2133f 100644 --- a/NHSE.Core/Structures/Designs/DesignPattern.cs +++ b/NHSE.Core/Structures/Designs/DesignPattern.cs @@ -13,6 +13,7 @@ public sealed class DesignPattern(Memory Raw) : IVillagerOrigin public const int SIZE = 0x2A8; // 3 bytes unused at end private const int PersonalOffset = 0x38; + private const int UsageCompatibilityOffset = 0x70; private const int PaletteDataStart = 0x78; public const int PaletteColorCount = 15; // y not 16??? private const int PaletteColorSize = 3; // R, G, B @@ -66,6 +67,12 @@ public string PlayerName set => StringUtil.GetBytes(value, 10).CopyTo(Data[(PersonalOffset + 0x20)..]); } + public uint UsageCompatibility + { + get => ReadUInt32LittleEndian(Data[UsageCompatibilityOffset..]); + set => WriteUInt32LittleEndian(Data[UsageCompatibilityOffset..], value); + } + public Span GetPlayerIdentity() => Data.Slice(PersonalOffset + 0x1C, 4 + 20); /// diff --git a/NHSE.Core/Structures/Designs/DesignPatternPRO.cs b/NHSE.Core/Structures/Designs/DesignPatternPRO.cs index 02779ff..0f0d82b 100644 --- a/NHSE.Core/Structures/Designs/DesignPatternPRO.cs +++ b/NHSE.Core/Structures/Designs/DesignPatternPRO.cs @@ -14,6 +14,7 @@ public sealed class DesignPatternPRO(Memory Raw) : IVillagerOrigin public const int SIZE = 0x8A8; // 3 bytes unused at end public const int SheetCount = 4; private const int PersonalOffset = 0x38; + private const int UsageCompatibilityOffset = 0x70; private const int PaletteDataStart = 0x78; public const int PaletteColorCount = 15; // y not 16??? private const int PaletteColorSize = 3; // R, G, B @@ -67,6 +68,12 @@ public string PlayerName set => StringUtil.GetBytes(value, 10).CopyTo(Data[(PersonalOffset + 0x20)..]); } + public uint UsageCompatibility + { + get => ReadUInt32LittleEndian(Data[UsageCompatibilityOffset..]); + set => WriteUInt32LittleEndian(Data[UsageCompatibilityOffset..], value); + } + public Span GetPlayerIdentity() => Data.Slice(PersonalOffset + 0x1C, 4 + 20); public void SetPixelAtIndex(int sheet, int index, int value) diff --git a/NHSE.Core/Structures/Item/ItemWrapping.cs b/NHSE.Core/Structures/Item/ItemWrapping.cs index ca0d877..f4dd928 100644 --- a/NHSE.Core/Structures/Item/ItemWrapping.cs +++ b/NHSE.Core/Structures/Item/ItemWrapping.cs @@ -1,4 +1,6 @@ -namespace NHSE.Core; +using System.Collections.Generic; + +namespace NHSE.Core; /// /// Type of wrapping an has @@ -12,4 +14,76 @@ public enum ItemWrapping : byte // These values are handled with special logic. Only 2 bits are allocated to be stored. Festive = 4, +} + +/// +/// Provides extended wrapping and box skin information for items. +/// +/// +/// Contains lookup dictionaries for item wrapping paper colors and delivery box types. +/// +public sealed class ItemWrappingExtended +{ + /// + /// Dictionary mapping wrapping skin identifiers to their corresponding . + /// + /// + /// Keys are hexadecimal identifiers representing different wrapping paper colors and styles. + /// Includes cultural variants (Lucky Red Envelope, Bokjumeoni Pouch, Otoshidama Envelope). + /// Can return a string for the skin name, or an index for UI ordering or selection use. + /// + // TODO: Build new string resource: "text_wrappers_xx.txt" and convert WrappingInfo.name to a key to lookup against it for translations. + public static readonly Dictionary ItemWrappingSkin = new() // + { + { 0x00, new("wrap00", 0) }, + { 0x02, new("wrap01", 1) }, + { 0x01, new("wrap02", 2) }, + { 0x05, new("wrap03", 3) }, + { 0x09, new("wrap04", 4) }, + { 0x0D, new("wrap05", 5) }, + { 0x11, new("wrap06", 6) }, + { 0x15, new("wrap07", 7) }, + { 0x19, new("wrap08", 8) }, + { 0x1D, new("wrap09", 9) }, + { 0x21, new("wrap10", 10) }, + { 0x25, new("wrap11", 11) }, + { 0x29, new("wrap12", 12) }, + { 0x2D, new("wrap13", 13) }, + { 0x31, new("wrap14", 14) }, + { 0x35, new("wrap15", 15) }, + { 0x39, new("wrap16", 16) }, + { 0x3D, new("wrap17", 17) }, + { 0x3F, new("wrap18", 18) }, + { 0x33, new("wrap19", 19) }, + { 0x37, new("wrap20", 20) }, + { 0x3B, new("wrap21", 21) }, + }; + /// + /// Represents information about a wrapping paper type. + /// + /// The display name of the wrapping paper. + /// The index used for UI ordering or selection. + public record WrappingInfo(string name, int index); + + /// + /// Dictionary mapping box skin identifiers to their corresponding . + /// + /// + /// Keys are hexadecimal identifiers representing different delivery boxes. + /// Includes service-specific boxes (Nook Shopping Box, Hotel Box, Paradise Planning Box). + /// + // TODO: Build new string resource: "text_wrappers_xx.txt" and convert WrappingInfo.name to a key to lookup against it for translations. + public static readonly Dictionary ItemBoxSkin = new() + { + { 0x00, new("box00", 0) }, + { 0x43, new("box01", 1) }, + { 0x6B, new("box02", 2) }, + { 0x6F, new("box03", 3) }, + }; + /// + /// Represents information about a delivery box type. + /// + /// The display name of the box type. + /// The index used for UI ordering or selection. + public record BoxInfo(string name, int index); } \ No newline at end of file diff --git a/NHSE.Core/Structures/Mail/Mail.cs b/NHSE.Core/Structures/Mail/Mail.cs new file mode 100644 index 0000000..342d662 --- /dev/null +++ b/NHSE.Core/Structures/Mail/Mail.cs @@ -0,0 +1,220 @@ +using System.Collections.Generic; + +namespace NHSE.Core; + +public sealed class Mail +{ + public const int SIZE = 0x3C8; + public const int MaxSlots = 299; // zero based (300 slots) + + public const int ReadUnread = 0x0; // 03 = unread, 04 = read + public const int LetterFavourited = 0x1; // 00 = not marked fav, 01 = marked fav + + public const int PlayerSenderIslandID = 0x4; // Used if sender is a player + public const int PlayerSenderIslandName = 0x8; + public const int NPCSenderSpeciesID = 0x4; // Used if sender is a villager or NPC + public const int NPCSenderVariantID = 0x5; + public const int NPCSenderIslandID = 0x8; + public const int NPCSenderIslandName = 0xC; + + public const int SenderID = 0x20; // Sender player identity 4 byte ID or 00000000.. = NPC, 02000000.. = villager + public const int SenderName = 0x24; // Usual 20 byte string (10 char) + + public const int SenderType = 0x5C; // 00 = player, 01 = villager, 02 = NPC + + public const int ReceiverIslandID = 0x60; // Receiver island identity + public const int ReceiverIslandName = 0x64; + public const int ReceiverPlayerID = 0x7C; // Receiver player identity + public const int ReceiverPlayerName = 0x80; + + public const int TimeStamp = 0xBC; // Timestamp start + + public const int AttachedItemID = 0xC0; // ID of item attached to mail, FFFE(le) if collected, type used is cleared + public const int MailItemWrappingType = 0xC3; // Box type used for mail - cleared when item taken + + public const int MailType01 = 0xC8; // If boxed item only, then = 01 and MailType02 = 00 + public const int MailType02 = 0xCC; // If letter item, then = 01 and MailType01 = 00 + + public const int LetterToLineText = 0xCE; // Max size for text in the to line up top (47 char) weird size + public const int LetterToTextLength = 47; // Max renderable, not sure about official limit + public const int LetterMessageText = 0x12E; // MSG start + public const int LetterMessageTextLength = 239; // Max renderable size is 239 char despite official input UI limit of 168 char + public const int LetterMessageTextLengthOfficial = 168; + public const int LetterFromLineText = 0x30E; // Max size for text in the from line up top (47 char) weird size + public const int LetterFromTextLength = 47; // Max renderable, not sure about official limit + + public const int MailStationerySkin = 0x36E; // Skin code (2 byte le int) + + public const int PostBoxSortIndex = 0x374; // PostBox index/slot 1->300(0->299)[0x0->0x12B] - position in postbox, bottom up + + public const int LanguageString = 0x390; // When sent by a player, shows language flag, like 'en-GB' otherwise not used + + /// + /// Maps NPC sender IDs to their corresponding data, including image identifiers, name conversions, and mapping indices. + /// + /// + /// The dictionary key represents the NPC's unique identifier stored at offset in the mail data. + /// Each entry contains image asset names, localization keys, and index values for various in-game NPCs and services + /// such as Tom Nook, Nook Inc., villagers, and special characters. + /// + public record SenderNPCInfo(string Image, string NameConversion, int MappingIndex); + public static readonly Dictionary SenderNPCData = new() + { + { 22, new("rco", "rco", 0) }, // 0x1600 Tom Nook + { 25, new("rco", "npc_nookinc", 1) }, // 0x1900 Nook Inc. + { 40, new("bey", "bey", 2) }, // 0x2800 C.J. + { 41, new("chy", "chy", 3) }, // 0x2900 Flick + { 42, new("pyn", "pyn", 4) }, // 0x2A00 Zipper + { 43, new("fox", "fox", 5) }, // 0x2B00 Redd + { 44, new("alp", "alp", 6) }, // 0x2C00 Reese & Cyrus + { 45, new("gulB", "gulB", 7) }, // 0x2D00 Gullivarrr + { 46, new("tap", "tap", 8) }, // 0x2E00 Luna + { 47, new("pkn", "pkn", 9) }, // 0x2F00 Jack + { 48, new("xct", "xct", 10) }, // 0x3000 Rover + { 50, new("bpt", "bpt", 11) }, // 0x3200 Katrina + { 51, new("slo", "slo", 12) }, // 0x3300 Lief + { 52, new("spn", "spn", 13) }, // 0x3400 Harvey + { 53, new("man", "man", 14) }, // 0x3500 Wardell + { 54, new("OneroomCardboard", "npc_paradiseplanning", 15) }, // 0x3600 Paradise Planning + { 55, new("otg", "otg", 16) }, // 0x3700 Lottie + { 56, new("mnc", "mnc", 17) }, // 0x3800 Niko + { 57, new("kpg", "npc_hotel", 18) }, // 0x3900 Hotel + { 60, new("gul", "gul", 19) }, // 0x3C00 Gulliver + { 61, new("gstA", "gstA", 20) }, // 0x3D00 Wisp + { 62, new("hgc", "hgc", 21) }, // 0x3E00 Label + { 63, new("tkkA", "tkkA", 22) }, // 0x3F00 K.K. + { 64, new("boc", "boc", 23) }, // 0x4000 Daisy Mae + { 65, new("SnowCrystal", "npc_snowboy", 24) }, // 0x4100 Snowboy + { 66, new("bey", "bey", 25) }, // 0x4200 C.J (Duplicate...?) + { 67, new("chy", "chy", 26) }, // 0x4300 Flick (Duplicate...?) + { 68, new("mol", "mol", 27) }, // 0x4400 Resetti + { 80, new("ott", "npc_hha", 28) }, // 0x5000 Happy Home Academy Ranking + { 81, new("Leaf", "npc_nintendo", 29) }, // 0x5100 Nintendo & Happy Home Academy Welcome + { 82, new("MoneyBag010", "npc_bankofnook", 30) }, // 0x5200 Bank of Nook, [island] + { 84, new("Cardboard", "npc_nookshopping", 31) }, // 0x5400 Nook Shopping + { 85, new("PlaneTicket", "npc_nookmileageprogram", 32) }, // 0x5500 Nook Mileage Program + { 86, new("Post", "npc_mom", 33) }, // 0x5600 Mom + { 87, new("dod", "npc_dodoairlines", 34) }, // 0x5700 Dodo Airlines + { 88, new("owl", "npc_thefarwaymuseum", 35) }, // 0x5800 The Farway Museum + { 89, new("Leaf", "npc_nooklinkadmins", 36) } // 0x5900 NookLink Admins + }; + + public static readonly Dictionary BCP47LanguageString = new() + { + { "en-US", 0 }, + { "en-GB", 1 }, + { "ja-JP", 2 }, + { "de-DE", 3 }, + { "es-ES", 4 }, + { "fr-FR", 5 }, + { "it-IT", 6 }, + { "ko-KR", 7 }, + { "zh-CN", 8 }, + { "zh-TW", 9 }, + }; + + public static List NPCTypeList = new List + { + "Player", + "Villager", + "NPC" + }; + + public static List MailTypeList = new List + { + "Boxed Item", + "Letter", + }; + + /// + /// Maps stationery skin IDs to their corresponding data, including the display name and mapping index. + /// + /// + /// The dictionary key represents the stationery skin code stored at offset in the mail data. + /// Each entry contains the localized card name and an index value for various letter stationery designs + /// such as holiday cards, event cards, and special NPC-branded stationery. + /// + public record StationeryInfo(string name, int index); + public static readonly Dictionary LetterStationerySkin = new() + { + // Multiple sources on official total count of skins... + // 68 total according to most wikis, 64 on others. + // 75 according to datamine (including unused(?) T&T logo one) + { 0, new("mail00", 0) }, + { 356, new("mail01", 1) }, + { 357, new("mail02", 2) }, + { 358, new("mail03", 3) }, + { 359, new("mail04", 4) }, + { 360, new("mail05", 5) }, + { 361, new("mail06", 6) }, + { 362, new("mail07", 7) }, + { 363, new("mail08", 8) }, + { 364, new("mail09", 9) }, + { 365, new("mail10", 10) }, + { 366, new("mail11", 11) }, + { 367, new("mail12", 12) }, + { 368, new("mail13", 13) }, + { 370, new("mail14", 14) }, + { 371, new("mail15", 15) }, + { 372, new("mail16", 16) }, + { 373, new("mail17", 17) }, + { 374, new("mail18", 18) }, + { 375, new("mail19", 19) }, + { 376, new("mail20", 20) }, + { 377, new("mail21", 21) }, + { 378, new("mail22", 22) }, + { 379, new("mail23", 23) }, + { 380, new("mail24", 24) }, + { 381, new("mail25", 25) }, + { 382, new("mail26", 26) }, + { 383, new("mail27", 27) }, + { 384, new("mail28", 28) }, + { 385, new("mail29", 29) }, + { 386, new("mail30", 30) }, + { 387, new("mail31", 31) }, + { 388, new("mail32", 32) }, + { 389, new("mail33", 33) }, + { 390, new("mail34", 34) }, + { 391, new("mail35", 35) }, + { 392, new("mail36", 36) }, + { 393, new("mail37", 37) }, + { 394, new("mail38", 38) }, + { 395, new("mail39", 39) }, + { 396, new("mail40", 40) }, + { 397, new("mail41", 41) }, + { 398, new("mail42", 42) }, + { 399, new("mail43", 43) }, + { 402, new("mail44", 44) }, + { 403, new("mail45", 45) }, + { 404, new("mail46", 46) }, + { 405, new("mail47", 47) }, + { 406, new("mail48", 48) }, + { 407, new("mail49", 49) }, + { 408, new("mail50", 50) }, + { 409, new("mail51", 51) }, + { 410, new("mail52", 52) }, + { 411, new("mail53", 53) }, + { 412, new("mail54", 54) }, + { 413, new("mail55", 55) }, + { 414, new("mail56", 56) }, + { 416, new("mail57", 57) }, + { 427, new("mail58", 58) }, + { 428, new("mail59", 59) }, + { 429, new("mail60", 60) }, + { 430, new("mail61", 61) }, + { 431, new("mail62", 62) }, + { 432, new("mail63", 63) }, + { 433, new("mail64", 64) }, + { 434, new("mail65", 65) }, + { 435, new("mail66", 66) }, + { 437, new("mail67", 67) }, + { 438, new("mail68", 68) }, + { 439, new("mail69", 69) }, + { 440, new("mail70", 70) }, + { 443, new("mail71", 71) }, + { 444, new("mail72", 72) }, + { 445, new("mail73", 73) }, + { 448, new("mail74", 74) }, + }; +} + diff --git a/NHSE.WinForms/Controls/ItemEditor.cs b/NHSE.WinForms/Controls/ItemEditor.cs index 2a92be3..90be744 100644 --- a/NHSE.WinForms/Controls/ItemEditor.cs +++ b/NHSE.WinForms/Controls/ItemEditor.cs @@ -16,6 +16,7 @@ public partial class ItemEditor : UserControl private bool Loading = true; private bool CanExtend; + private bool SupressedMode = false; public ItemEditor() { @@ -36,7 +37,7 @@ public ItemEditor() private IReadOnlyList AllItems = []; - public void Initialize(IReadOnlyList items, bool canExtend = false) + public void Initialize(IReadOnlyList items, bool canExtend = false, bool supressed = false) { CHK_IsExtension.Visible = CanExtend = canExtend; @@ -55,6 +56,8 @@ public void Initialize(IReadOnlyList items, bool canExtend = false) LoadItem(Item.NO_ITEM); AllItems = items; + + SupressedMode = supressed; } public Item LoadItem(Item item) @@ -163,6 +166,20 @@ public Item SetItem(Item item) return item; } + /// + /// Hides the item wrapping UI controls from the editor for handling via custom UIs. + /// + /// + /// This method sets the visibility of both the wrapped checkbox () + /// and the wrapped options panel () to . + /// Use this when wrapping information should not be displayed or edited by the standard controls. + /// + public void SupressWrappedInfo() + { + CHK_Wrapped.Visible = false; + FLP_Wrapped.Visible = false; + } + private Item SetExtensionItem(Item item) { var id = (ushort)WinFormsUtil.GetIndex(CB_ItemID); @@ -210,6 +227,7 @@ private void CB_ItemID_SelectedValueChanged(object sender, EventArgs e) L_RemakeFabric.Text = fabric; L_RemakeFabric.Visible = fabric.Length != 0; } + if (SupressedMode) SupressWrappedInfo(); } private void LoadItemTypeValues(ItemKind k, ushort index) @@ -241,6 +259,8 @@ private void LoadItemTypeValues(ItemKind k, ushort index) CHK_Wrapped.Visible = true; FLP_Flag1.Visible = false; + + if (SupressedMode) SupressWrappedInfo(); } private void ToggleEditorVisibility(ItemKind k, ushort id) diff --git a/NHSE.WinForms/Controls/VillagerEditor.cs b/NHSE.WinForms/Controls/VillagerEditor.cs index 6f5aabe..e534399 100644 --- a/NHSE.WinForms/Controls/VillagerEditor.cs +++ b/NHSE.WinForms/Controls/VillagerEditor.cs @@ -14,14 +14,16 @@ public partial class VillagerEditor : UserControl public IVillagerOrigin Origin; private readonly HorizonSave SAV; private int VillagerIndex = -1; + private int PlayerIndex = -1; private bool Loading; - public VillagerEditor(IVillager[] villagers, IVillagerOrigin origin, HorizonSave sav, bool hasHouses) + public VillagerEditor(IVillager[] villagers, IVillagerOrigin origin, HorizonSave sav, bool hasHouses, int playerIndex) { InitializeComponent(); Villagers = villagers; Origin = origin; SAV = sav; + PlayerIndex = playerIndex; LoadVillagers(); B_EditHouses.Visible = hasHouses; @@ -218,13 +220,10 @@ private void B_EditVillagerRoom_Click(object sender, EventArgs e) private void B_EditVillagerDesign_Click(object sender, EventArgs e) { - var playerID = SAV.Players[0].Personal.GetPlayerIdentity(); // fetch ID for overwrite ownership - var townID = SAV.Players[0].Personal.GetTownIdentity(); // fetch ID for overwrite ownership + var player = SAV.Players[PlayerIndex]; var v = Villagers[VillagerIndex]; DesignPatternPRO[] tmp = [v.Design]; - using var editor = new PatternEditorPRO(tmp); - playerID.CopyTo(tmp[0].Data[0x54..]); // overwrite playerID bytes - townID.CopyTo(tmp[0].Data[0x38..]); // overwrite townID bytes + using var editor = new PatternEditorPRO(tmp, player); if (editor.ShowDialog() == DialogResult.OK) v.Design = tmp[0]; } diff --git a/NHSE.WinForms/Editor.Designer.cs b/NHSE.WinForms/Editor.Designer.cs index 18ca5fa..e0bc700 100644 --- a/NHSE.WinForms/Editor.Designer.cs +++ b/NHSE.WinForms/Editor.Designer.cs @@ -51,6 +51,7 @@ private void InitializeComponent() Tab_Map = new System.Windows.Forms.TabPage(); B_EditFruitFlower = new System.Windows.Forms.Button(); B_EditCampsite = new System.Windows.Forms.Button(); + B_EditPlayerPostBox = new System.Windows.Forms.ToolStripMenuItem(); NUD_WeatherSeed = new System.Windows.Forms.NumericUpDown(); L_WeatherSeed = new System.Windows.Forms.Label(); B_EditDesignsTailor = new System.Windows.Forms.Button(); @@ -136,7 +137,7 @@ private void InitializeComponent() Menu_Editor.Location = new System.Drawing.Point(0, 0); Menu_Editor.Name = "Menu_Editor"; Menu_Editor.Padding = new System.Windows.Forms.Padding(7, 2, 0, 2); - Menu_Editor.Size = new System.Drawing.Size(471, 25); + Menu_Editor.Size = new System.Drawing.Size(471, 24); Menu_Editor.TabIndex = 0; Menu_Editor.Text = "menuStrip1"; // @@ -144,14 +145,14 @@ private void InitializeComponent() // Menu_File.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { Menu_Save }); Menu_File.Name = "Menu_File"; - Menu_File.Size = new System.Drawing.Size(39, 21); + Menu_File.Size = new System.Drawing.Size(37, 20); Menu_File.Text = "File"; // // Menu_Save // Menu_Save.Name = "Menu_Save"; Menu_Save.ShortcutKeys = System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.S; - Menu_Save.Size = new System.Drawing.Size(147, 22); + Menu_Save.Size = new System.Drawing.Size(138, 22); Menu_Save.Text = "Save"; Menu_Save.Click += Menu_Save_Click; // @@ -159,14 +160,14 @@ private void InitializeComponent() // Menu_Tools.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { Menu_DumpDecrypted, Menu_VerifyHashes, Menu_LoadDecrypted, Menu_RAMEdit, Menu_ItemImages }); Menu_Tools.Name = "Menu_Tools"; - Menu_Tools.Size = new System.Drawing.Size(51, 21); + Menu_Tools.Size = new System.Drawing.Size(47, 20); Menu_Tools.Text = "Tools"; // // Menu_DumpDecrypted // Menu_DumpDecrypted.Name = "Menu_DumpDecrypted"; Menu_DumpDecrypted.ShortcutKeys = System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.D; - Menu_DumpDecrypted.Size = new System.Drawing.Size(221, 22); + Menu_DumpDecrypted.Size = new System.Drawing.Size(206, 22); Menu_DumpDecrypted.Text = "Dump Decrypted"; Menu_DumpDecrypted.Click += Menu_DumpDecrypted_Click; // @@ -174,7 +175,7 @@ private void InitializeComponent() // Menu_VerifyHashes.Name = "Menu_VerifyHashes"; Menu_VerifyHashes.ShortcutKeys = System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.H; - Menu_VerifyHashes.Size = new System.Drawing.Size(221, 22); + Menu_VerifyHashes.Size = new System.Drawing.Size(206, 22); Menu_VerifyHashes.Text = "Verify Hashes"; Menu_VerifyHashes.Click += Menu_VerifyHashes_Click; // @@ -182,7 +183,7 @@ private void InitializeComponent() // Menu_LoadDecrypted.Name = "Menu_LoadDecrypted"; Menu_LoadDecrypted.ShortcutKeys = System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.L; - Menu_LoadDecrypted.Size = new System.Drawing.Size(221, 22); + Menu_LoadDecrypted.Size = new System.Drawing.Size(206, 22); Menu_LoadDecrypted.Text = "Load Decrypted"; Menu_LoadDecrypted.Click += Menu_LoadDecrypted_Click; // @@ -190,7 +191,7 @@ private void InitializeComponent() // Menu_RAMEdit.Name = "Menu_RAMEdit"; Menu_RAMEdit.ShortcutKeys = System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.R; - Menu_RAMEdit.Size = new System.Drawing.Size(221, 22); + Menu_RAMEdit.Size = new System.Drawing.Size(206, 22); Menu_RAMEdit.Text = "RAM Edit"; Menu_RAMEdit.Click += Menu_RAMEdit_Click; // @@ -198,7 +199,7 @@ private void InitializeComponent() // Menu_ItemImages.Name = "Menu_ItemImages"; Menu_ItemImages.ShortcutKeys = System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.M; - Menu_ItemImages.Size = new System.Drawing.Size(221, 22); + Menu_ItemImages.Size = new System.Drawing.Size(206, 22); Menu_ItemImages.Text = "Item Images"; Menu_ItemImages.Click += Menu_ItemImages_Click; // @@ -206,7 +207,7 @@ private void InitializeComponent() // Menu_Options.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { Menu_Language, Menu_Theme, Menu_Settings }); Menu_Options.Name = "Menu_Options"; - Menu_Options.Size = new System.Drawing.Size(66, 21); + Menu_Options.Size = new System.Drawing.Size(61, 20); Menu_Options.Text = "Options"; // // Menu_Language @@ -214,7 +215,7 @@ private void InitializeComponent() Menu_Language.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; Menu_Language.Items.AddRange(new object[] { "English", "日本語", "Deutsch", "Español", "Français", "Italiano", "한국어", "简体中文", "繁體中文" }); Menu_Language.Name = "Menu_Language"; - Menu_Language.Size = new System.Drawing.Size(115, 25); + Menu_Language.Size = new System.Drawing.Size(115, 23); Menu_Language.SelectedIndexChanged += Menu_Language_SelectedIndexChanged; // // Menu_Theme @@ -227,21 +228,21 @@ private void InitializeComponent() // Menu_Theme_System // Menu_Theme_System.Name = "Menu_Theme_System"; - Menu_Theme_System.Size = new System.Drawing.Size(160, 22); + Menu_Theme_System.Size = new System.Drawing.Size(152, 22); Menu_Theme_System.Text = "System Theme"; Menu_Theme_System.Click += Menu_Theme_System_Click; // // Menu_Theme_Classic // Menu_Theme_Classic.Name = "Menu_Theme_Classic"; - Menu_Theme_Classic.Size = new System.Drawing.Size(160, 22); + Menu_Theme_Classic.Size = new System.Drawing.Size(152, 22); Menu_Theme_Classic.Text = "Light (Classic)"; Menu_Theme_Classic.Click += Menu_Theme_Classic_Click; // // Menu_Theme_Dark // Menu_Theme_Dark.Name = "Menu_Theme_Dark"; - Menu_Theme_Dark.Size = new System.Drawing.Size(160, 22); + Menu_Theme_Dark.Size = new System.Drawing.Size(152, 22); Menu_Theme_Dark.Text = "Dark"; Menu_Theme_Dark.Click += Menu_Theme_Dark_Click; // @@ -259,12 +260,12 @@ private void InitializeComponent() CM_Picture.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { Menu_SavePNG }); CM_Picture.Name = "CM_Picture"; CM_Picture.ShowImageMargin = false; - CM_Picture.Size = new System.Drawing.Size(109, 26); + CM_Picture.Size = new System.Drawing.Size(101, 26); // // Menu_SavePNG // Menu_SavePNG.Name = "Menu_SavePNG"; - Menu_SavePNG.Size = new System.Drawing.Size(108, 22); + Menu_SavePNG.Size = new System.Drawing.Size(100, 22); Menu_SavePNG.Text = "Save .png"; Menu_SavePNG.Click += Menu_SavePNG_Click; // @@ -286,11 +287,11 @@ private void InitializeComponent() Tab_Map.Controls.Add(B_EditPatterns); Tab_Map.Controls.Add(B_EditTurnipExchange); Tab_Map.Controls.Add(B_RecycleBin); - Tab_Map.Location = new System.Drawing.Point(4, 36); + Tab_Map.Location = new System.Drawing.Point(4, 34); Tab_Map.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); Tab_Map.Name = "Tab_Map"; Tab_Map.Padding = new System.Windows.Forms.Padding(4, 3, 4, 3); - Tab_Map.Size = new System.Drawing.Size(463, 342); + Tab_Map.Size = new System.Drawing.Size(463, 297); Tab_Map.TabIndex = 2; Tab_Map.Text = "Map"; Tab_Map.UseVisualStyleBackColor = true; @@ -298,10 +299,10 @@ private void InitializeComponent() // B_EditFruitFlower // B_EditFruitFlower.Anchor = System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right; - B_EditFruitFlower.Location = new System.Drawing.Point(236, 270); + B_EditFruitFlower.Location = new System.Drawing.Point(236, 236); B_EditFruitFlower.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); B_EditFruitFlower.Name = "B_EditFruitFlower"; - B_EditFruitFlower.Size = new System.Drawing.Size(107, 64); + B_EditFruitFlower.Size = new System.Drawing.Size(107, 56); B_EditFruitFlower.TabIndex = 67; B_EditFruitFlower.Text = "Edit Island Fruits + Flowers"; B_EditFruitFlower.UseVisualStyleBackColor = true; @@ -310,10 +311,10 @@ private void InitializeComponent() // B_EditCampsite // B_EditCampsite.Anchor = System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right; - B_EditCampsite.Location = new System.Drawing.Point(121, 270); + B_EditCampsite.Location = new System.Drawing.Point(121, 236); B_EditCampsite.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); B_EditCampsite.Name = "B_EditCampsite"; - B_EditCampsite.Size = new System.Drawing.Size(107, 64); + B_EditCampsite.Size = new System.Drawing.Size(107, 56); B_EditCampsite.TabIndex = 66; B_EditCampsite.Text = "Edit Campsite"; B_EditCampsite.UseVisualStyleBackColor = true; @@ -322,7 +323,7 @@ private void InitializeComponent() // NUD_WeatherSeed // NUD_WeatherSeed.Font = new System.Drawing.Font("Courier New", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, 0); - NUD_WeatherSeed.Location = new System.Drawing.Point(236, 77); + NUD_WeatherSeed.Location = new System.Drawing.Point(236, 68); NUD_WeatherSeed.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); NUD_WeatherSeed.Maximum = new decimal(new int[] { -1, 0, 0, 0 }); NUD_WeatherSeed.Name = "NUD_WeatherSeed"; @@ -333,19 +334,19 @@ private void InitializeComponent() // L_WeatherSeed // L_WeatherSeed.AutoSize = true; - L_WeatherSeed.Location = new System.Drawing.Point(351, 79); + L_WeatherSeed.Location = new System.Drawing.Point(351, 70); L_WeatherSeed.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); L_WeatherSeed.Name = "L_WeatherSeed"; - L_WeatherSeed.Size = new System.Drawing.Size(89, 17); + L_WeatherSeed.Size = new System.Drawing.Size(79, 15); L_WeatherSeed.TabIndex = 64; L_WeatherSeed.Text = "Weather Seed"; // // B_EditDesignsTailor // - B_EditDesignsTailor.Location = new System.Drawing.Point(350, 128); + B_EditDesignsTailor.Location = new System.Drawing.Point(350, 113); B_EditDesignsTailor.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); B_EditDesignsTailor.Name = "B_EditDesignsTailor"; - B_EditDesignsTailor.Size = new System.Drawing.Size(107, 64); + B_EditDesignsTailor.Size = new System.Drawing.Size(107, 56); B_EditDesignsTailor.TabIndex = 63; B_EditDesignsTailor.Text = "Edit Tailor Designs"; B_EditDesignsTailor.UseVisualStyleBackColor = true; @@ -353,10 +354,10 @@ private void InitializeComponent() // // B_EditPatternFlag // - B_EditPatternFlag.Location = new System.Drawing.Point(236, 128); + B_EditPatternFlag.Location = new System.Drawing.Point(236, 113); B_EditPatternFlag.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); B_EditPatternFlag.Name = "B_EditPatternFlag"; - B_EditPatternFlag.Size = new System.Drawing.Size(107, 64); + B_EditPatternFlag.Size = new System.Drawing.Size(107, 56); B_EditPatternFlag.TabIndex = 62; B_EditPatternFlag.Text = "Edit Flag Design"; B_EditPatternFlag.UseVisualStyleBackColor = true; @@ -366,29 +367,29 @@ private void InitializeComponent() // CB_AirportColor.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; CB_AirportColor.FormattingEnabled = true; - CB_AirportColor.Location = new System.Drawing.Point(236, 42); + CB_AirportColor.Location = new System.Drawing.Point(236, 37); CB_AirportColor.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); CB_AirportColor.Name = "CB_AirportColor"; - CB_AirportColor.Size = new System.Drawing.Size(107, 25); + CB_AirportColor.Size = new System.Drawing.Size(107, 23); CB_AirportColor.TabIndex = 61; // // L_AirportColor // L_AirportColor.AutoSize = true; - L_AirportColor.Location = new System.Drawing.Point(350, 45); + L_AirportColor.Location = new System.Drawing.Point(350, 40); L_AirportColor.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); L_AirportColor.Name = "L_AirportColor"; - L_AirportColor.Size = new System.Drawing.Size(85, 17); + L_AirportColor.Size = new System.Drawing.Size(76, 15); L_AirportColor.TabIndex = 60; L_AirportColor.Text = "Airport Color"; // // L_Hemisphere // L_Hemisphere.AutoSize = true; - L_Hemisphere.Location = new System.Drawing.Point(350, 11); + L_Hemisphere.Location = new System.Drawing.Point(350, 10); L_Hemisphere.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); L_Hemisphere.Name = "L_Hemisphere"; - L_Hemisphere.Size = new System.Drawing.Size(78, 17); + L_Hemisphere.Size = new System.Drawing.Size(71, 15); L_Hemisphere.TabIndex = 58; L_Hemisphere.Text = "Hemisphere"; // @@ -396,19 +397,19 @@ private void InitializeComponent() // CB_Hemisphere.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; CB_Hemisphere.FormattingEnabled = true; - CB_Hemisphere.Location = new System.Drawing.Point(236, 8); + CB_Hemisphere.Location = new System.Drawing.Point(236, 7); CB_Hemisphere.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); CB_Hemisphere.Name = "CB_Hemisphere"; - CB_Hemisphere.Size = new System.Drawing.Size(107, 25); + CB_Hemisphere.Size = new System.Drawing.Size(107, 23); CB_Hemisphere.TabIndex = 57; // // B_EditPlayerHouses // B_EditPlayerHouses.Anchor = System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right; - B_EditPlayerHouses.Location = new System.Drawing.Point(7, 270); + B_EditPlayerHouses.Location = new System.Drawing.Point(7, 236); B_EditPlayerHouses.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); B_EditPlayerHouses.Name = "B_EditPlayerHouses"; - B_EditPlayerHouses.Size = new System.Drawing.Size(107, 64); + B_EditPlayerHouses.Size = new System.Drawing.Size(107, 56); B_EditPlayerHouses.TabIndex = 56; B_EditPlayerHouses.Text = "Edit Player Houses"; B_EditPlayerHouses.UseVisualStyleBackColor = true; @@ -418,10 +419,10 @@ private void InitializeComponent() // B_EditMap.Anchor = System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right; B_EditMap.ContextMenuStrip = CM_EditMap; - B_EditMap.Location = new System.Drawing.Point(350, 270); + B_EditMap.Location = new System.Drawing.Point(350, 236); B_EditMap.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); B_EditMap.Name = "B_EditMap"; - B_EditMap.Size = new System.Drawing.Size(107, 64); + B_EditMap.Size = new System.Drawing.Size(107, 56); B_EditMap.TabIndex = 2; B_EditMap.Text = "Edit Map..."; B_EditMap.UseVisualStyleBackColor = true; @@ -432,49 +433,49 @@ private void InitializeComponent() CM_EditMap.ImageScalingSize = new System.Drawing.Size(20, 20); CM_EditMap.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { B_EditLandFlags, B_EditFieldItems, B_EditBulletin, B_EditMuseum_Click, B_EditVisitors }); CM_EditMap.Name = "CM_EditMap"; - CM_EditMap.Size = new System.Drawing.Size(183, 114); + CM_EditMap.Size = new System.Drawing.Size(172, 114); // // B_EditLandFlags // B_EditLandFlags.Name = "B_EditLandFlags"; - B_EditLandFlags.Size = new System.Drawing.Size(182, 22); + B_EditLandFlags.Size = new System.Drawing.Size(171, 22); B_EditLandFlags.Text = "Edit Flags"; B_EditLandFlags.Click += B_EditLandFlags_Click; // // B_EditFieldItems // B_EditFieldItems.Name = "B_EditFieldItems"; - B_EditFieldItems.Size = new System.Drawing.Size(182, 22); + B_EditFieldItems.Size = new System.Drawing.Size(171, 22); B_EditFieldItems.Text = "Edit Field Items"; B_EditFieldItems.Click += B_EditFieldItems_Click; // // B_EditBulletin // B_EditBulletin.Name = "B_EditBulletin"; - B_EditBulletin.Size = new System.Drawing.Size(182, 22); + B_EditBulletin.Size = new System.Drawing.Size(171, 22); B_EditBulletin.Text = "Edit Bulletin Board"; B_EditBulletin.Click += B_EditBulletin_Click; // // B_EditMuseum_Click // B_EditMuseum_Click.Name = "B_EditMuseum_Click"; - B_EditMuseum_Click.Size = new System.Drawing.Size(182, 22); + B_EditMuseum_Click.Size = new System.Drawing.Size(171, 22); B_EditMuseum_Click.Text = "Edit Museum"; B_EditMuseum_Click.Click += B_EditMuseum_Click_Click; // // B_EditVisitors // B_EditVisitors.Name = "B_EditVisitors"; - B_EditVisitors.Size = new System.Drawing.Size(182, 22); + B_EditVisitors.Size = new System.Drawing.Size(171, 22); B_EditVisitors.Text = "Edit Visitors"; B_EditVisitors.Click += B_EditVisitors_Click; // // B_EditPRODesigns // - B_EditPRODesigns.Location = new System.Drawing.Point(121, 128); + B_EditPRODesigns.Location = new System.Drawing.Point(121, 113); B_EditPRODesigns.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); B_EditPRODesigns.Name = "B_EditPRODesigns"; - B_EditPRODesigns.Size = new System.Drawing.Size(107, 64); + B_EditPRODesigns.Size = new System.Drawing.Size(107, 56); B_EditPRODesigns.TabIndex = 55; B_EditPRODesigns.Text = "Edit PRO Designs"; B_EditPRODesigns.UseVisualStyleBackColor = true; @@ -482,10 +483,10 @@ private void InitializeComponent() // // B_EditPatterns // - B_EditPatterns.Location = new System.Drawing.Point(7, 128); + B_EditPatterns.Location = new System.Drawing.Point(7, 113); B_EditPatterns.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); B_EditPatterns.Name = "B_EditPatterns"; - B_EditPatterns.Size = new System.Drawing.Size(107, 64); + B_EditPatterns.Size = new System.Drawing.Size(107, 56); B_EditPatterns.TabIndex = 54; B_EditPatterns.Text = "Edit Patterns"; B_EditPatterns.UseVisualStyleBackColor = true; @@ -493,10 +494,10 @@ private void InitializeComponent() // // B_EditTurnipExchange // - B_EditTurnipExchange.Location = new System.Drawing.Point(7, 8); + B_EditTurnipExchange.Location = new System.Drawing.Point(7, 7); B_EditTurnipExchange.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); B_EditTurnipExchange.Name = "B_EditTurnipExchange"; - B_EditTurnipExchange.Size = new System.Drawing.Size(107, 52); + B_EditTurnipExchange.Size = new System.Drawing.Size(107, 46); B_EditTurnipExchange.TabIndex = 15; B_EditTurnipExchange.Text = "Edit Turnip Exchange"; B_EditTurnipExchange.UseVisualStyleBackColor = true; @@ -504,10 +505,10 @@ private void InitializeComponent() // // B_RecycleBin // - B_RecycleBin.Location = new System.Drawing.Point(7, 68); + B_RecycleBin.Location = new System.Drawing.Point(7, 60); B_RecycleBin.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); B_RecycleBin.Name = "B_RecycleBin"; - B_RecycleBin.Size = new System.Drawing.Size(107, 52); + B_RecycleBin.Size = new System.Drawing.Size(107, 46); B_RecycleBin.TabIndex = 13; B_RecycleBin.Text = "Edit Recycle Bin"; B_RecycleBin.UseVisualStyleBackColor = true; @@ -515,11 +516,11 @@ private void InitializeComponent() // // Tab_Villagers // - Tab_Villagers.Location = new System.Drawing.Point(4, 36); + Tab_Villagers.Location = new System.Drawing.Point(4, 34); Tab_Villagers.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); Tab_Villagers.Name = "Tab_Villagers"; Tab_Villagers.Padding = new System.Windows.Forms.Padding(4, 3, 4, 3); - Tab_Villagers.Size = new System.Drawing.Size(463, 342); + Tab_Villagers.Size = new System.Drawing.Size(463, 299); Tab_Villagers.TabIndex = 0; Tab_Villagers.Text = "Villagers"; Tab_Villagers.UseVisualStyleBackColor = true; @@ -552,100 +553,107 @@ private void InitializeComponent() Tab_Players.Controls.Add(L_PlayerName); Tab_Players.Controls.Add(CB_Players); Tab_Players.Controls.Add(PB_Player); - Tab_Players.Location = new System.Drawing.Point(4, 36); + Tab_Players.Location = new System.Drawing.Point(4, 34); Tab_Players.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); Tab_Players.Name = "Tab_Players"; Tab_Players.Padding = new System.Windows.Forms.Padding(4, 3, 4, 3); - Tab_Players.Size = new System.Drawing.Size(463, 342); + Tab_Players.Size = new System.Drawing.Size(463, 297); Tab_Players.TabIndex = 1; Tab_Players.Text = "Players"; Tab_Players.UseVisualStyleBackColor = true; // + // B_EditPostBox + // + B_EditPlayerPostBox.Name = "B_EditPlayerPostBox"; + B_EditPlayerPostBox.Size = new System.Drawing.Size(107, 56); + B_EditPlayerPostBox.Text = "Edit Post Box"; + B_EditPlayerPostBox.Click += B_EditPlayerPostBox_Click; + // // L_HotelTickets // - L_HotelTickets.Location = new System.Drawing.Point(166, 309); + L_HotelTickets.Location = new System.Drawing.Point(166, 273); L_HotelTickets.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); L_HotelTickets.Name = "L_HotelTickets"; - L_HotelTickets.Size = new System.Drawing.Size(98, 26); + L_HotelTickets.Size = new System.Drawing.Size(98, 23); L_HotelTickets.TabIndex = 30; L_HotelTickets.Text = "Hotel Tickets:"; L_HotelTickets.TextAlign = System.Drawing.ContentAlignment.MiddleRight; // // NUD_HotelTickets // - NUD_HotelTickets.Location = new System.Drawing.Point(271, 309); + NUD_HotelTickets.Location = new System.Drawing.Point(271, 273); NUD_HotelTickets.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); NUD_HotelTickets.Maximum = new decimal(new int[] { int.MaxValue, 0, 0, 0 }); NUD_HotelTickets.Name = "NUD_HotelTickets"; - NUD_HotelTickets.Size = new System.Drawing.Size(117, 25); + NUD_HotelTickets.Size = new System.Drawing.Size(117, 23); NUD_HotelTickets.TabIndex = 29; // // L_Poki // - L_Poki.Location = new System.Drawing.Point(166, 278); + L_Poki.Location = new System.Drawing.Point(166, 245); L_Poki.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); L_Poki.Name = "L_Poki"; - L_Poki.Size = new System.Drawing.Size(98, 26); + L_Poki.Size = new System.Drawing.Size(98, 23); L_Poki.TabIndex = 28; L_Poki.Text = "Poki:"; L_Poki.TextAlign = System.Drawing.ContentAlignment.MiddleRight; // // NUD_Poki // - NUD_Poki.Location = new System.Drawing.Point(271, 278); + NUD_Poki.Location = new System.Drawing.Point(271, 245); NUD_Poki.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); NUD_Poki.Maximum = new decimal(new int[] { int.MaxValue, 0, 0, 0 }); NUD_Poki.Name = "NUD_Poki"; - NUD_Poki.Size = new System.Drawing.Size(117, 25); + NUD_Poki.Size = new System.Drawing.Size(117, 23); NUD_Poki.TabIndex = 27; // // L_EarnedMiles // - L_EarnedMiles.Location = new System.Drawing.Point(166, 153); + L_EarnedMiles.Location = new System.Drawing.Point(166, 135); L_EarnedMiles.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); L_EarnedMiles.Name = "L_EarnedMiles"; - L_EarnedMiles.Size = new System.Drawing.Size(98, 26); + L_EarnedMiles.Size = new System.Drawing.Size(98, 23); L_EarnedMiles.TabIndex = 26; L_EarnedMiles.Text = "Earned Miles:"; L_EarnedMiles.TextAlign = System.Drawing.ContentAlignment.MiddleRight; // // NUD_TotalNookMiles // - NUD_TotalNookMiles.Location = new System.Drawing.Point(271, 153); + NUD_TotalNookMiles.Location = new System.Drawing.Point(271, 135); NUD_TotalNookMiles.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); NUD_TotalNookMiles.Maximum = new decimal(new int[] { int.MaxValue, 0, 0, 0 }); NUD_TotalNookMiles.Name = "NUD_TotalNookMiles"; - NUD_TotalNookMiles.Size = new System.Drawing.Size(117, 25); + NUD_TotalNookMiles.Size = new System.Drawing.Size(117, 23); NUD_TotalNookMiles.TabIndex = 25; // // L_StorageCount // L_StorageCount.AutoSize = true; - L_StorageCount.Location = new System.Drawing.Point(233, 189); + L_StorageCount.Location = new System.Drawing.Point(233, 167); L_StorageCount.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); L_StorageCount.Name = "L_StorageCount"; - L_StorageCount.Size = new System.Drawing.Size(92, 17); + L_StorageCount.Size = new System.Drawing.Size(83, 15); L_StorageCount.TabIndex = 24; L_StorageCount.Text = "Storage Count"; L_StorageCount.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; // // NUD_StorageCount // - NUD_StorageCount.Location = new System.Drawing.Point(176, 186); + NUD_StorageCount.Location = new System.Drawing.Point(176, 164); NUD_StorageCount.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); NUD_StorageCount.Maximum = new decimal(new int[] { int.MaxValue, 0, 0, 0 }); NUD_StorageCount.Name = "NUD_StorageCount"; - NUD_StorageCount.Size = new System.Drawing.Size(54, 25); + NUD_StorageCount.Size = new System.Drawing.Size(54, 23); NUD_StorageCount.TabIndex = 23; NUD_StorageCount.Value = new decimal(new int[] { 5000, 0, 0, 0 }); // // L_PocketCount2 // L_PocketCount2.AutoSize = true; - L_PocketCount2.Location = new System.Drawing.Point(233, 252); + L_PocketCount2.Location = new System.Drawing.Point(233, 222); L_PocketCount2.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); L_PocketCount2.Name = "L_PocketCount2"; - L_PocketCount2.Size = new System.Drawing.Size(95, 17); + L_PocketCount2.Size = new System.Drawing.Size(88, 15); L_PocketCount2.TabIndex = 22; L_PocketCount2.Text = "Pocket Count 2"; L_PocketCount2.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; @@ -653,32 +661,32 @@ private void InitializeComponent() // L_PocketCount1 // L_PocketCount1.AutoSize = true; - L_PocketCount1.Location = new System.Drawing.Point(233, 223); + L_PocketCount1.Location = new System.Drawing.Point(233, 197); L_PocketCount1.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); L_PocketCount1.Name = "L_PocketCount1"; - L_PocketCount1.Size = new System.Drawing.Size(95, 17); + L_PocketCount1.Size = new System.Drawing.Size(88, 15); L_PocketCount1.TabIndex = 21; L_PocketCount1.Text = "Pocket Count 1"; L_PocketCount1.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; // // NUD_PocketCount2 // - NUD_PocketCount2.Location = new System.Drawing.Point(176, 247); + NUD_PocketCount2.Location = new System.Drawing.Point(176, 218); NUD_PocketCount2.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); NUD_PocketCount2.Maximum = new decimal(new int[] { int.MaxValue, 0, 0, 0 }); NUD_PocketCount2.Name = "NUD_PocketCount2"; - NUD_PocketCount2.Size = new System.Drawing.Size(54, 25); + NUD_PocketCount2.Size = new System.Drawing.Size(54, 23); NUD_PocketCount2.TabIndex = 20; NUD_PocketCount2.Value = new decimal(new int[] { 20, 0, 0, 0 }); NUD_PocketCount2.ValueChanged += NUD_PocketCount_ValueChanged; // // NUD_PocketCount1 // - NUD_PocketCount1.Location = new System.Drawing.Point(176, 220); + NUD_PocketCount1.Location = new System.Drawing.Point(176, 194); NUD_PocketCount1.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); NUD_PocketCount1.Maximum = new decimal(new int[] { int.MaxValue, 0, 0, 0 }); NUD_PocketCount1.Name = "NUD_PocketCount1"; - NUD_PocketCount1.Size = new System.Drawing.Size(54, 25); + NUD_PocketCount1.Size = new System.Drawing.Size(54, 23); NUD_PocketCount1.TabIndex = 19; NUD_PocketCount1.Value = new decimal(new int[] { 20, 0, 0, 0 }); NUD_PocketCount1.ValueChanged += NUD_PocketCount_ValueChanged; @@ -686,10 +694,10 @@ private void InitializeComponent() // B_EditPlayer // B_EditPlayer.ContextMenuStrip = CM_EditPlayer; - B_EditPlayer.Location = new System.Drawing.Point(7, 280); + B_EditPlayer.Location = new System.Drawing.Point(7, 247); B_EditPlayer.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); B_EditPlayer.Name = "B_EditPlayer"; - B_EditPlayer.Size = new System.Drawing.Size(152, 52); + B_EditPlayer.Size = new System.Drawing.Size(152, 46); B_EditPlayer.TabIndex = 18; B_EditPlayer.Text = "Edit Player..."; B_EditPlayer.UseVisualStyleBackColor = true; @@ -698,65 +706,65 @@ private void InitializeComponent() // CM_EditPlayer // CM_EditPlayer.ImageScalingSize = new System.Drawing.Size(20, 20); - CM_EditPlayer.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { B_EditPlayerStorage, B_EditPlayerReceivedItems, B_EditAchievements, B_EditPlayerRecipes, B_EditPlayerFlags, B_EditPlayerReactions, B_EditPlayerMisc }); + CM_EditPlayer.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { B_EditPlayerStorage, B_EditPlayerReceivedItems, B_EditAchievements, B_EditPlayerRecipes, B_EditPlayerPostBox, B_EditPlayerFlags, B_EditPlayerReactions, B_EditPlayerMisc }); CM_EditPlayer.Name = "CM_EditPlayer"; - CM_EditPlayer.Size = new System.Drawing.Size(190, 158); + CM_EditPlayer.Size = new System.Drawing.Size(177, 158); // // B_EditPlayerStorage // B_EditPlayerStorage.Name = "B_EditPlayerStorage"; - B_EditPlayerStorage.Size = new System.Drawing.Size(189, 22); + B_EditPlayerStorage.Size = new System.Drawing.Size(176, 22); B_EditPlayerStorage.Text = "Edit Storage"; B_EditPlayerStorage.Click += B_Storage_Click; // // B_EditPlayerReceivedItems // B_EditPlayerReceivedItems.Name = "B_EditPlayerReceivedItems"; - B_EditPlayerReceivedItems.Size = new System.Drawing.Size(189, 22); + B_EditPlayerReceivedItems.Size = new System.Drawing.Size(176, 22); B_EditPlayerReceivedItems.Text = "Edit Received Items"; B_EditPlayerReceivedItems.Click += B_EditPlayerReceivedItems_Click; // // B_EditAchievements // B_EditAchievements.Name = "B_EditAchievements"; - B_EditAchievements.Size = new System.Drawing.Size(189, 22); + B_EditAchievements.Size = new System.Drawing.Size(176, 22); B_EditAchievements.Text = "Edit Achievements"; B_EditAchievements.Click += B_EditAchievements_Click; // // B_EditPlayerRecipes // B_EditPlayerRecipes.Name = "B_EditPlayerRecipes"; - B_EditPlayerRecipes.Size = new System.Drawing.Size(189, 22); + B_EditPlayerRecipes.Size = new System.Drawing.Size(176, 22); B_EditPlayerRecipes.Text = "Edit Recipes"; B_EditPlayerRecipes.Click += B_EditPlayerRecipes_Click; // // B_EditPlayerFlags // B_EditPlayerFlags.Name = "B_EditPlayerFlags"; - B_EditPlayerFlags.Size = new System.Drawing.Size(189, 22); + B_EditPlayerFlags.Size = new System.Drawing.Size(176, 22); B_EditPlayerFlags.Text = "Edit Flags"; B_EditPlayerFlags.Click += B_EditPlayerFlags_Click; // // B_EditPlayerReactions // B_EditPlayerReactions.Name = "B_EditPlayerReactions"; - B_EditPlayerReactions.Size = new System.Drawing.Size(189, 22); + B_EditPlayerReactions.Size = new System.Drawing.Size(176, 22); B_EditPlayerReactions.Text = "Edit Reactions"; B_EditPlayerReactions.Click += B_EditPlayerReactions_Click; // // B_EditPlayerMisc // B_EditPlayerMisc.Name = "B_EditPlayerMisc"; - B_EditPlayerMisc.Size = new System.Drawing.Size(189, 22); + B_EditPlayerMisc.Size = new System.Drawing.Size(176, 22); B_EditPlayerMisc.Text = "Edit Misc"; B_EditPlayerMisc.Click += B_EditPlayerMisc_Click; // // B_EditPlayerItems // - B_EditPlayerItems.Location = new System.Drawing.Point(7, 220); + B_EditPlayerItems.Location = new System.Drawing.Point(7, 194); B_EditPlayerItems.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); B_EditPlayerItems.Name = "B_EditPlayerItems"; - B_EditPlayerItems.Size = new System.Drawing.Size(152, 52); + B_EditPlayerItems.Size = new System.Drawing.Size(152, 46); B_EditPlayerItems.TabIndex = 12; B_EditPlayerItems.Text = "Edit Items"; B_EditPlayerItems.UseVisualStyleBackColor = true; @@ -764,94 +772,94 @@ private void InitializeComponent() // // L_Wallet // - L_Wallet.Location = new System.Drawing.Point(166, 67); + L_Wallet.Location = new System.Drawing.Point(166, 59); L_Wallet.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); L_Wallet.Name = "L_Wallet"; - L_Wallet.Size = new System.Drawing.Size(98, 26); + L_Wallet.Size = new System.Drawing.Size(98, 23); L_Wallet.TabIndex = 11; L_Wallet.Text = "Wallet:"; L_Wallet.TextAlign = System.Drawing.ContentAlignment.MiddleRight; // // NUD_Wallet // - NUD_Wallet.Location = new System.Drawing.Point(271, 67); + NUD_Wallet.Location = new System.Drawing.Point(271, 59); NUD_Wallet.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); NUD_Wallet.Maximum = new decimal(new int[] { int.MaxValue, 0, 0, 0 }); NUD_Wallet.Name = "NUD_Wallet"; - NUD_Wallet.Size = new System.Drawing.Size(117, 25); + NUD_Wallet.Size = new System.Drawing.Size(117, 23); NUD_Wallet.TabIndex = 10; NUD_Wallet.ValueChanged += NUD_Wallet_ValueChanged; // // L_NookMiles // - L_NookMiles.Location = new System.Drawing.Point(166, 125); + L_NookMiles.Location = new System.Drawing.Point(166, 110); L_NookMiles.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); L_NookMiles.Name = "L_NookMiles"; - L_NookMiles.Size = new System.Drawing.Size(98, 26); + L_NookMiles.Size = new System.Drawing.Size(98, 23); L_NookMiles.TabIndex = 9; L_NookMiles.Text = "Nook Miles:"; L_NookMiles.TextAlign = System.Drawing.ContentAlignment.MiddleRight; // // NUD_NookMiles // - NUD_NookMiles.Location = new System.Drawing.Point(271, 125); + NUD_NookMiles.Location = new System.Drawing.Point(271, 110); NUD_NookMiles.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); NUD_NookMiles.Maximum = new decimal(new int[] { int.MaxValue, 0, 0, 0 }); NUD_NookMiles.Name = "NUD_NookMiles"; - NUD_NookMiles.Size = new System.Drawing.Size(117, 25); + NUD_NookMiles.Size = new System.Drawing.Size(117, 23); NUD_NookMiles.TabIndex = 8; // // L_BankBells // - L_BankBells.Location = new System.Drawing.Point(166, 95); + L_BankBells.Location = new System.Drawing.Point(166, 84); L_BankBells.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); L_BankBells.Name = "L_BankBells"; - L_BankBells.Size = new System.Drawing.Size(98, 26); + L_BankBells.Size = new System.Drawing.Size(98, 23); L_BankBells.TabIndex = 7; L_BankBells.Text = "Bank Bells:"; L_BankBells.TextAlign = System.Drawing.ContentAlignment.MiddleRight; // // NUD_BankBells // - NUD_BankBells.Location = new System.Drawing.Point(271, 95); + NUD_BankBells.Location = new System.Drawing.Point(271, 84); NUD_BankBells.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); NUD_BankBells.Maximum = new decimal(new int[] { int.MaxValue, 0, 0, 0 }); NUD_BankBells.Name = "NUD_BankBells"; - NUD_BankBells.Size = new System.Drawing.Size(117, 25); + NUD_BankBells.Size = new System.Drawing.Size(117, 23); NUD_BankBells.TabIndex = 6; // // TB_TownName // - TB_TownName.Location = new System.Drawing.Point(271, 37); + TB_TownName.Location = new System.Drawing.Point(271, 33); TB_TownName.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); TB_TownName.Name = "TB_TownName"; - TB_TownName.Size = new System.Drawing.Size(116, 25); + TB_TownName.Size = new System.Drawing.Size(116, 23); TB_TownName.TabIndex = 5; // // TB_Name // - TB_Name.Location = new System.Drawing.Point(271, 9); + TB_Name.Location = new System.Drawing.Point(271, 8); TB_Name.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); TB_Name.Name = "TB_Name"; - TB_Name.Size = new System.Drawing.Size(116, 25); + TB_Name.Size = new System.Drawing.Size(116, 23); TB_Name.TabIndex = 3; // // L_TownName // - L_TownName.Location = new System.Drawing.Point(166, 37); + L_TownName.Location = new System.Drawing.Point(166, 33); L_TownName.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); L_TownName.Name = "L_TownName"; - L_TownName.Size = new System.Drawing.Size(98, 26); + L_TownName.Size = new System.Drawing.Size(98, 23); L_TownName.TabIndex = 4; L_TownName.Text = "Town Name:"; L_TownName.TextAlign = System.Drawing.ContentAlignment.MiddleRight; // // L_PlayerName // - L_PlayerName.Location = new System.Drawing.Point(166, 9); + L_PlayerName.Location = new System.Drawing.Point(166, 8); L_PlayerName.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); L_PlayerName.Name = "L_PlayerName"; - L_PlayerName.Size = new System.Drawing.Size(98, 26); + L_PlayerName.Size = new System.Drawing.Size(98, 23); L_PlayerName.TabIndex = 2; L_PlayerName.Text = "Player Name:"; L_PlayerName.TextAlign = System.Drawing.ContentAlignment.MiddleRight; @@ -860,10 +868,10 @@ private void InitializeComponent() // CB_Players.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; CB_Players.FormattingEnabled = true; - CB_Players.Location = new System.Drawing.Point(7, 8); + CB_Players.Location = new System.Drawing.Point(7, 7); CB_Players.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); CB_Players.Name = "CB_Players"; - CB_Players.Size = new System.Drawing.Size(151, 25); + CB_Players.Size = new System.Drawing.Size(151, 23); CB_Players.TabIndex = 1; CB_Players.SelectedIndexChanged += LoadPlayer; // @@ -871,10 +879,10 @@ private void InitializeComponent() // PB_Player.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; PB_Player.ContextMenuStrip = CM_Picture; - PB_Player.Location = new System.Drawing.Point(7, 43); + PB_Player.Location = new System.Drawing.Point(7, 38); PB_Player.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); PB_Player.Name = "PB_Player"; - PB_Player.Size = new System.Drawing.Size(151, 170); + PB_Player.Size = new System.Drawing.Size(151, 150); PB_Player.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom; PB_Player.TabIndex = 0; PB_Player.TabStop = false; @@ -885,19 +893,19 @@ private void InitializeComponent() TC_Editors.Controls.Add(Tab_Villagers); TC_Editors.Controls.Add(Tab_Map); TC_Editors.Dock = System.Windows.Forms.DockStyle.Fill; - TC_Editors.Location = new System.Drawing.Point(0, 25); + TC_Editors.Location = new System.Drawing.Point(0, 24); TC_Editors.Margin = new System.Windows.Forms.Padding(4); TC_Editors.Name = "TC_Editors"; TC_Editors.Padding = new System.Drawing.Point(8, 8); TC_Editors.SelectedIndex = 0; - TC_Editors.Size = new System.Drawing.Size(471, 382); + TC_Editors.Size = new System.Drawing.Size(471, 335); TC_Editors.TabIndex = 1; // // Editor // - AutoScaleDimensions = new System.Drawing.SizeF(7F, 17F); + AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F); AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - ClientSize = new System.Drawing.Size(471, 407); + ClientSize = new System.Drawing.Size(471, 359); Controls.Add(TC_Editors); Controls.Add(Menu_Editor); Icon = Properties.Resources.icon; @@ -1008,6 +1016,7 @@ private void InitializeComponent() private System.Windows.Forms.Label L_HotelTickets; private System.Windows.Forms.NumericUpDown NUD_HotelTickets; private System.Windows.Forms.Button B_EditCampsite; + private System.Windows.Forms.ToolStripMenuItem B_EditPlayerPostBox; private System.Windows.Forms.ToolStripMenuItem Menu_Theme; private System.Windows.Forms.ToolStripMenuItem Menu_Theme_System; private System.Windows.Forms.ToolStripMenuItem Menu_Theme_Classic; diff --git a/NHSE.WinForms/Editor.cs b/NHSE.WinForms/Editor.cs index a2f9603..cbc89a6 100644 --- a/NHSE.WinForms/Editor.cs +++ b/NHSE.WinForms/Editor.cs @@ -242,7 +242,7 @@ private VillagerEditor LoadVillagers() { var p0 = SAV.Players[0].Personal; var villagers = SAV.Main.GetVillagers(); - var v = new VillagerEditor(villagers, p0, SAV, true) { Dock = DockStyle.Fill }; + var v = new VillagerEditor(villagers, p0, SAV, true, PlayerIndex) { Dock = DockStyle.Fill }; Tab_Villagers.Controls.Add(v); return v; } @@ -359,6 +359,15 @@ private void B_EditPlayerMisc_Click(object sender, EventArgs e) editor.ShowDialog(); } + private void B_EditPlayerPostBox_Click(object sender, EventArgs e) + { + var player = SAV.Players[PlayerIndex]; + var save = SAV.Main; + var pb = SAV.Players[PlayerIndex].PostBox; + using var editor = new PostBoxEditor(player, pb); + editor.ShowDialog(); + } + private void LoadPlayer(int index) { if (PlayerIndex >= 0) @@ -520,36 +529,36 @@ private void B_EditLandFlags_Click(object sender, EventArgs e) private void B_EditPatterns_Click(object sender, EventArgs e) { - var playerID = SAV.Players[0].Personal.GetPlayerIdentity(); // fetch ID for overwrite ownership - var townID = SAV.Players[0].Personal.GetTownIdentity(); // fetch ID for overwrite ownership + var player = SAV.Players[PlayerIndex]; var patterns = SAV.Main.GetDesigns(); - using var editor = new PatternEditor(patterns); + using var editor = new PatternEditor(patterns, player); if (editor.ShowDialog() == DialogResult.OK) - SAV.Main.SetDesigns(patterns, playerID, townID); + SAV.Main.SetDesigns(patterns); } private void B_EditPRODesigns_Click(object sender, EventArgs e) { - var playerID = SAV.Players[0].Personal.GetPlayerIdentity(); // fetch ID for overwrite ownership - var townID = SAV.Players[0].Personal.GetTownIdentity(); // fetch ID for overwrite ownership + var player = SAV.Players[PlayerIndex]; var patterns = SAV.Main.GetDesignsPRO(); - using var editor = new PatternEditorPRO(patterns); + using var editor = new PatternEditorPRO(patterns, player); if (editor.ShowDialog() == DialogResult.OK) - SAV.Main.SetDesignsPRO(patterns, playerID, townID); + SAV.Main.SetDesignsPRO(patterns); } private void B_EditPatternFlag_Click(object sender, EventArgs e) { + var player = SAV.Players[PlayerIndex]; var patterns = new[] { SAV.Main.FlagMyDesign }; - using var editor = new PatternEditor(patterns); + using var editor = new PatternEditor(patterns, player); if (editor.ShowDialog() == DialogResult.OK) SAV.Main.FlagMyDesign = patterns[0]; } private void B_EditDesignsTailor_Click(object sender, EventArgs e) { + var player = SAV.Players[PlayerIndex]; var patterns = SAV.Main.GetDesignsTailor(); - using var editor = new PatternEditorPRO(patterns); + using var editor = new PatternEditorPRO(patterns, player); if (editor.ShowDialog() == DialogResult.OK) SAV.Main.SetDesignsTailor(patterns); } diff --git a/NHSE.WinForms/Resources/text/lang_de.txt b/NHSE.WinForms/Resources/text/lang_de.txt index 19234a4..cc24b1b 100644 --- a/NHSE.WinForms/Resources/text/lang_de.txt +++ b/NHSE.WinForms/Resources/text/lang_de.txt @@ -399,6 +399,43 @@ PlayerItemEditor.L_Flag0=Flag0: PlayerItemEditor.L_Flag1=Flag1: PlayerItemEditor.L_Uses=Uses: PlayerItemEditor.L_WaterDays=Days: +PostBoxEditor.B_Cancel=Cancel +PostBoxEditor.B_Save=Save Slot +PostBoxEditor.B_Delete=Delete Mail +PostBoxEditor.B_Import=Import Mail +PostBoxEditor.B_Dump=Dump Mail +PostBoxEditor.B_Post_DumpAll=Dump All +PostBoxEditor.CK_Post_Read=Mark Read +PostBoxEditor.CK_Post_Faved=Favorited +PostBoxEditor.GB_Post_Villager=Villager +PostBoxEditor.GB_Post_Player=Player +PostBoxEditor.GB_Post_NPC=NPC +PostBoxEditor.GB_Post_ReceiverPlayer=Receiver Player +PostBoxEditor.GB_Post_Stationery=Stationery Type +PostBoxEditor.GB_Post_AttachedInfo=Attachment Info +PostBoxEditor.GB_Post_ReceiverIsland=Receiver Island +PostBoxEditor.L_Sender_Edit=Edit Sender: +PostBoxEditor.L_Sender_ExternalName=Sender Name: +PostBoxEditor.L_ExternalName=unknown +PostBoxEditor.L_InternalName=unknown +PostBoxEditor.L_Variant=Variant +PostBoxEditor.L_Species=Species +PostBoxEditor.L_Post_To=To Line: +PostBoxEditor.L_Post_Message=Message: +PostBoxEditor.L_Post_From=From Line: +PostBoxEditor.L_Post_UsedSlots=Used Slots: +PostBoxEditor.L_Post_UsedSlots_Value=unknown +PostBoxEditor.L_Post_SelectedSlot=Selected Slot: +PostBoxEditor.L_SenderType=Sender Type +PostBoxEditor.L_Post_TimeStamp=Timestamp +PostBoxEditor.L_Post_Language=Language +PostBoxEditor.L_Post_CountTo=count +PostBoxEditor.L_Post_CountMsg=count +PostBoxEditor.L_Post_CountFrom=count +PostBoxEditor.L_Post_MailType=Mail Type: +PostBoxEditor.L_Post_AttachmentSkin=Attachment Skin: +PostBoxEditor.TP_Post_SR=Details +PostBoxEditor.TP_Post_Items=Attachments ReactionEditor.B_Cancel=Cancel ReactionEditor.B_GiveAll=Give All ReactionEditor.B_Save=Save diff --git a/NHSE.WinForms/Resources/text/lang_en.txt b/NHSE.WinForms/Resources/text/lang_en.txt index bcb1895..91d175a 100644 --- a/NHSE.WinForms/Resources/text/lang_en.txt +++ b/NHSE.WinForms/Resources/text/lang_en.txt @@ -399,6 +399,43 @@ PlayerItemEditor.L_Flag0=Flag0: PlayerItemEditor.L_Flag1=Flag1: PlayerItemEditor.L_Uses=Uses: PlayerItemEditor.L_WaterDays=Days: +PostBoxEditor.B_Cancel=Cancel +PostBoxEditor.B_Save=Save Slot +PostBoxEditor.B_Delete=Delete Mail +PostBoxEditor.B_Import=Import Mail +PostBoxEditor.B_Dump=Dump Mail +PostBoxEditor.B_Post_DumpAll=Dump All +PostBoxEditor.CK_Post_Read=Mark Read +PostBoxEditor.CK_Post_Faved=Favorited +PostBoxEditor.GB_Post_Villager=Villager +PostBoxEditor.GB_Post_Player=Player +PostBoxEditor.GB_Post_NPC=NPC +PostBoxEditor.GB_Post_ReceiverPlayer=Receiver Player +PostBoxEditor.GB_Post_Stationery=Stationery Type +PostBoxEditor.GB_Post_AttachedInfo=Attachment Info +PostBoxEditor.GB_Post_ReceiverIsland=Receiver Island +PostBoxEditor.L_Sender_Edit=Edit Sender: +PostBoxEditor.L_Sender_ExternalName=Sender Name: +PostBoxEditor.L_ExternalName=unknown +PostBoxEditor.L_InternalName=unknown +PostBoxEditor.L_Variant=Variant +PostBoxEditor.L_Species=Species +PostBoxEditor.L_Post_To=To Line: +PostBoxEditor.L_Post_Message=Message: +PostBoxEditor.L_Post_From=From Line: +PostBoxEditor.L_Post_UsedSlots=Used Slots: +PostBoxEditor.L_Post_UsedSlots_Value=unknown +PostBoxEditor.L_Post_SelectedSlot=Selected Slot: +PostBoxEditor.L_SenderType=Sender Type +PostBoxEditor.L_Post_TimeStamp=Timestamp +PostBoxEditor.L_Post_Language=Language +PostBoxEditor.L_Post_CountTo=count +PostBoxEditor.L_Post_CountMsg=count +PostBoxEditor.L_Post_CountFrom=count +PostBoxEditor.L_Post_MailType=Mail Type: +PostBoxEditor.L_Post_AttachmentSkin=Attachment Skin: +PostBoxEditor.TP_Post_SR=Details +PostBoxEditor.TP_Post_Items=Attachments ReactionEditor.B_Cancel=Cancel ReactionEditor.B_GiveAll=Give All ReactionEditor.B_Save=Save diff --git a/NHSE.WinForms/Resources/text/lang_es.txt b/NHSE.WinForms/Resources/text/lang_es.txt index f65048d..0658143 100644 --- a/NHSE.WinForms/Resources/text/lang_es.txt +++ b/NHSE.WinForms/Resources/text/lang_es.txt @@ -399,6 +399,43 @@ PlayerItemEditor.L_Flag0=Flag0: PlayerItemEditor.L_Flag1=Flag1: PlayerItemEditor.L_Uses=Usos: PlayerItemEditor.L_WaterDays=Días: +PostBoxEditor.B_Cancel=Cancel +PostBoxEditor.B_Save=Save Slot +PostBoxEditor.B_Delete=Delete Mail +PostBoxEditor.B_Import=Import Mail +PostBoxEditor.B_Dump=Dump Mail +PostBoxEditor.B_Post_DumpAll=Dump All +PostBoxEditor.CK_Post_Read=Mark Read +PostBoxEditor.CK_Post_Faved=Favorited +PostBoxEditor.GB_Post_Villager=Villager +PostBoxEditor.GB_Post_Player=Player +PostBoxEditor.GB_Post_NPC=NPC +PostBoxEditor.GB_Post_ReceiverPlayer=Receiver Player +PostBoxEditor.GB_Post_Stationery=Stationery Type +PostBoxEditor.GB_Post_AttachedInfo=Attachment Info +PostBoxEditor.GB_Post_ReceiverIsland=Receiver Island +PostBoxEditor.L_Sender_Edit=Edit Sender: +PostBoxEditor.L_Sender_ExternalName=Sender Name: +PostBoxEditor.L_ExternalName=unknown +PostBoxEditor.L_InternalName=unknown +PostBoxEditor.L_Variant=Variant +PostBoxEditor.L_Species=Species +PostBoxEditor.L_Post_To=To Line: +PostBoxEditor.L_Post_Message=Message: +PostBoxEditor.L_Post_From=From Line: +PostBoxEditor.L_Post_UsedSlots=Used Slots: +PostBoxEditor.L_Post_UsedSlots_Value=unknown +PostBoxEditor.L_Post_SelectedSlot=Selected Slot: +PostBoxEditor.L_SenderType=Sender Type +PostBoxEditor.L_Post_TimeStamp=Timestamp +PostBoxEditor.L_Post_Language=Language +PostBoxEditor.L_Post_CountTo=count +PostBoxEditor.L_Post_CountMsg=count +PostBoxEditor.L_Post_CountFrom=count +PostBoxEditor.L_Post_MailType=Mail Type: +PostBoxEditor.L_Post_AttachmentSkin=Attachment Skin: +PostBoxEditor.TP_Post_SR=Details +PostBoxEditor.TP_Post_Items=Attachments ReactionEditor.B_Cancel=Cancelar ReactionEditor.B_GiveAll=Far Todo ReactionEditor.B_Save=Guardar diff --git a/NHSE.WinForms/Resources/text/lang_fr.txt b/NHSE.WinForms/Resources/text/lang_fr.txt index 7eeaab4..df827db 100644 --- a/NHSE.WinForms/Resources/text/lang_fr.txt +++ b/NHSE.WinForms/Resources/text/lang_fr.txt @@ -399,6 +399,43 @@ PlayerItemEditor.L_Flag0=Flag0: PlayerItemEditor.L_Flag1=Flag1: PlayerItemEditor.L_Uses=Uses: PlayerItemEditor.L_WaterDays=Days: +PostBoxEditor.B_Cancel=Cancel +PostBoxEditor.B_Save=Save Slot +PostBoxEditor.B_Delete=Delete Mail +PostBoxEditor.B_Import=Import Mail +PostBoxEditor.B_Dump=Dump Mail +PostBoxEditor.B_Post_DumpAll=Dump All +PostBoxEditor.CK_Post_Read=Mark Read +PostBoxEditor.CK_Post_Faved=Favorited +PostBoxEditor.GB_Post_Villager=Villager +PostBoxEditor.GB_Post_Player=Player +PostBoxEditor.GB_Post_NPC=NPC +PostBoxEditor.GB_Post_ReceiverPlayer=Receiver Player +PostBoxEditor.GB_Post_Stationery=Stationery Type +PostBoxEditor.GB_Post_AttachedInfo=Attachment Info +PostBoxEditor.GB_Post_ReceiverIsland=Receiver Island +PostBoxEditor.L_Sender_Edit=Edit Sender: +PostBoxEditor.L_Sender_ExternalName=Sender Name: +PostBoxEditor.L_ExternalName=unknown +PostBoxEditor.L_InternalName=unknown +PostBoxEditor.L_Variant=Variant +PostBoxEditor.L_Species=Species +PostBoxEditor.L_Post_To=To Line: +PostBoxEditor.L_Post_Message=Message: +PostBoxEditor.L_Post_From=From Line: +PostBoxEditor.L_Post_UsedSlots=Used Slots: +PostBoxEditor.L_Post_UsedSlots_Value=unknown +PostBoxEditor.L_Post_SelectedSlot=Selected Slot: +PostBoxEditor.L_SenderType=Sender Type +PostBoxEditor.L_Post_TimeStamp=Timestamp +PostBoxEditor.L_Post_Language=Language +PostBoxEditor.L_Post_CountTo=count +PostBoxEditor.L_Post_CountMsg=count +PostBoxEditor.L_Post_CountFrom=count +PostBoxEditor.L_Post_MailType=Mail Type: +PostBoxEditor.L_Post_AttachmentSkin=Attachment Skin: +PostBoxEditor.TP_Post_SR=Details +PostBoxEditor.TP_Post_Items=Attachments ReactionEditor.B_Cancel=Cancel ReactionEditor.B_GiveAll=Give All ReactionEditor.B_Save=Save diff --git a/NHSE.WinForms/Resources/text/lang_it.txt b/NHSE.WinForms/Resources/text/lang_it.txt index d9f786f..8ac97ea 100644 --- a/NHSE.WinForms/Resources/text/lang_it.txt +++ b/NHSE.WinForms/Resources/text/lang_it.txt @@ -399,6 +399,43 @@ PlayerItemEditor.L_Flag0=Flag0: PlayerItemEditor.L_Flag1=Flag1: PlayerItemEditor.L_Uses=Utilizzi: PlayerItemEditor.L_WaterDays=Giorni: +PostBoxEditor.B_Cancel=Cancel +PostBoxEditor.B_Save=Save Slot +PostBoxEditor.B_Delete=Delete Mail +PostBoxEditor.B_Import=Import Mail +PostBoxEditor.B_Dump=Dump Mail +PostBoxEditor.B_Post_DumpAll=Dump All +PostBoxEditor.CK_Post_Read=Mark Read +PostBoxEditor.CK_Post_Faved=Favorited +PostBoxEditor.GB_Post_Villager=Villager +PostBoxEditor.GB_Post_Player=Player +PostBoxEditor.GB_Post_NPC=NPC +PostBoxEditor.GB_Post_ReceiverPlayer=Receiver Player +PostBoxEditor.GB_Post_Stationery=Stationery Type +PostBoxEditor.GB_Post_AttachedInfo=Attachment Info +PostBoxEditor.GB_Post_ReceiverIsland=Receiver Island +PostBoxEditor.L_Sender_Edit=Edit Sender: +PostBoxEditor.L_Sender_ExternalName=Sender Name: +PostBoxEditor.L_ExternalName=unknown +PostBoxEditor.L_InternalName=unknown +PostBoxEditor.L_Variant=Variant +PostBoxEditor.L_Species=Species +PostBoxEditor.L_Post_To=To Line: +PostBoxEditor.L_Post_Message=Message: +PostBoxEditor.L_Post_From=From Line: +PostBoxEditor.L_Post_UsedSlots=Used Slots: +PostBoxEditor.L_Post_UsedSlots_Value=unknown +PostBoxEditor.L_Post_SelectedSlot=Selected Slot: +PostBoxEditor.L_SenderType=Sender Type +PostBoxEditor.L_Post_TimeStamp=Timestamp +PostBoxEditor.L_Post_Language=Language +PostBoxEditor.L_Post_CountTo=count +PostBoxEditor.L_Post_CountMsg=count +PostBoxEditor.L_Post_CountFrom=count +PostBoxEditor.L_Post_MailType=Mail Type: +PostBoxEditor.L_Post_AttachmentSkin=Attachment Skin: +PostBoxEditor.TP_Post_SR=Details +PostBoxEditor.TP_Post_Items=Attachments ReactionEditor.B_Cancel=Indietro ReactionEditor.B_GiveAll=Tutto ReactionEditor.B_Save=Salva diff --git a/NHSE.WinForms/Resources/text/lang_jp.txt b/NHSE.WinForms/Resources/text/lang_jp.txt index d0e2578..31225b1 100644 --- a/NHSE.WinForms/Resources/text/lang_jp.txt +++ b/NHSE.WinForms/Resources/text/lang_jp.txt @@ -399,6 +399,43 @@ PlayerItemEditor.L_Flag0=Flag0: PlayerItemEditor.L_Flag1=Flag1: PlayerItemEditor.L_Uses=Uses: PlayerItemEditor.L_WaterDays=Days: +PostBoxEditor.B_Cancel=Cancel +PostBoxEditor.B_Save=Save Slot +PostBoxEditor.B_Delete=Delete Mail +PostBoxEditor.B_Import=Import Mail +PostBoxEditor.B_Dump=Dump Mail +PostBoxEditor.B_Post_DumpAll=Dump All +PostBoxEditor.CK_Post_Read=Mark Read +PostBoxEditor.CK_Post_Faved=Favorited +PostBoxEditor.GB_Post_Villager=Villager +PostBoxEditor.GB_Post_Player=Player +PostBoxEditor.GB_Post_NPC=NPC +PostBoxEditor.GB_Post_ReceiverPlayer=Receiver Player +PostBoxEditor.GB_Post_Stationery=Stationery Type +PostBoxEditor.GB_Post_AttachedInfo=Attachment Info +PostBoxEditor.GB_Post_ReceiverIsland=Receiver Island +PostBoxEditor.L_Sender_Edit=Edit Sender: +PostBoxEditor.L_Sender_ExternalName=Sender Name: +PostBoxEditor.L_ExternalName=unknown +PostBoxEditor.L_InternalName=unknown +PostBoxEditor.L_Variant=Variant +PostBoxEditor.L_Species=Species +PostBoxEditor.L_Post_To=To Line: +PostBoxEditor.L_Post_Message=Message: +PostBoxEditor.L_Post_From=From Line: +PostBoxEditor.L_Post_UsedSlots=Used Slots: +PostBoxEditor.L_Post_UsedSlots_Value=unknown +PostBoxEditor.L_Post_SelectedSlot=Selected Slot: +PostBoxEditor.L_SenderType=Sender Type +PostBoxEditor.L_Post_TimeStamp=Timestamp +PostBoxEditor.L_Post_Language=Language +PostBoxEditor.L_Post_CountTo=count +PostBoxEditor.L_Post_CountMsg=count +PostBoxEditor.L_Post_CountFrom=count +PostBoxEditor.L_Post_MailType=Mail Type: +PostBoxEditor.L_Post_AttachmentSkin=Attachment Skin: +PostBoxEditor.TP_Post_SR=Details +PostBoxEditor.TP_Post_Items=Attachments ReactionEditor.B_Cancel=Cancel ReactionEditor.B_GiveAll=Give All ReactionEditor.B_Save=Save diff --git a/NHSE.WinForms/Resources/text/lang_ko.txt b/NHSE.WinForms/Resources/text/lang_ko.txt index 22ae1ec..9175610 100644 --- a/NHSE.WinForms/Resources/text/lang_ko.txt +++ b/NHSE.WinForms/Resources/text/lang_ko.txt @@ -399,6 +399,43 @@ PlayerItemEditor.L_Flag0=플래그0: PlayerItemEditor.L_Flag1=플래그1: PlayerItemEditor.L_Uses=사용 횟수: PlayerItemEditor.L_WaterDays=일수: +PostBoxEditor.B_Cancel=Cancel +PostBoxEditor.B_Save=Save Slot +PostBoxEditor.B_Delete=Delete Mail +PostBoxEditor.B_Import=Import Mail +PostBoxEditor.B_Dump=Dump Mail +PostBoxEditor.B_Post_DumpAll=Dump All +PostBoxEditor.CK_Post_Read=Mark Read +PostBoxEditor.CK_Post_Faved=Favorited +PostBoxEditor.GB_Post_Villager=Villager +PostBoxEditor.GB_Post_Player=Player +PostBoxEditor.GB_Post_NPC=NPC +PostBoxEditor.GB_Post_ReceiverPlayer=Receiver Player +PostBoxEditor.GB_Post_Stationery=Stationery Type +PostBoxEditor.GB_Post_AttachedInfo=Attachment Info +PostBoxEditor.GB_Post_ReceiverIsland=Receiver Island +PostBoxEditor.L_Sender_Edit=Edit Sender: +PostBoxEditor.L_Sender_ExternalName=Sender Name: +PostBoxEditor.L_ExternalName=unknown +PostBoxEditor.L_InternalName=unknown +PostBoxEditor.L_Variant=Variant +PostBoxEditor.L_Species=Species +PostBoxEditor.L_Post_To=To Line: +PostBoxEditor.L_Post_Message=Message: +PostBoxEditor.L_Post_From=From Line: +PostBoxEditor.L_Post_UsedSlots=Used Slots: +PostBoxEditor.L_Post_UsedSlots_Value=unknown +PostBoxEditor.L_Post_SelectedSlot=Selected Slot: +PostBoxEditor.L_SenderType=Sender Type +PostBoxEditor.L_Post_TimeStamp=Timestamp +PostBoxEditor.L_Post_Language=Language +PostBoxEditor.L_Post_CountTo=count +PostBoxEditor.L_Post_CountMsg=count +PostBoxEditor.L_Post_CountFrom=count +PostBoxEditor.L_Post_MailType=Mail Type: +PostBoxEditor.L_Post_AttachmentSkin=Attachment Skin: +PostBoxEditor.TP_Post_SR=Details +PostBoxEditor.TP_Post_Items=Attachments ReactionEditor.B_Cancel=취소 ReactionEditor.B_GiveAll=모두 지급 ReactionEditor.B_Save=저장 diff --git a/NHSE.WinForms/Resources/text/lang_zhs.txt b/NHSE.WinForms/Resources/text/lang_zhs.txt index 9b4ba98..0b833d0 100644 --- a/NHSE.WinForms/Resources/text/lang_zhs.txt +++ b/NHSE.WinForms/Resources/text/lang_zhs.txt @@ -399,6 +399,43 @@ PlayerItemEditor.L_Flag0=属性 0: PlayerItemEditor.L_Flag1=属性 1: PlayerItemEditor.L_Uses=耐久: PlayerItemEditor.L_WaterDays=天数: +PostBoxEditor.B_Cancel=Cancel +PostBoxEditor.B_Save=Save Slot +PostBoxEditor.B_Delete=Delete Mail +PostBoxEditor.B_Import=Import Mail +PostBoxEditor.B_Dump=Dump Mail +PostBoxEditor.B_Post_DumpAll=Dump All +PostBoxEditor.CK_Post_Read=Mark Read +PostBoxEditor.CK_Post_Faved=Favorited +PostBoxEditor.GB_Post_Villager=Villager +PostBoxEditor.GB_Post_Player=Player +PostBoxEditor.GB_Post_NPC=NPC +PostBoxEditor.GB_Post_ReceiverPlayer=Receiver Player +PostBoxEditor.GB_Post_Stationery=Stationery Type +PostBoxEditor.GB_Post_AttachedInfo=Attachment Info +PostBoxEditor.GB_Post_ReceiverIsland=Receiver Island +PostBoxEditor.L_Sender_Edit=Edit Sender: +PostBoxEditor.L_Sender_ExternalName=Sender Name: +PostBoxEditor.L_ExternalName=unknown +PostBoxEditor.L_InternalName=unknown +PostBoxEditor.L_Variant=Variant +PostBoxEditor.L_Species=Species +PostBoxEditor.L_Post_To=To Line: +PostBoxEditor.L_Post_Message=Message: +PostBoxEditor.L_Post_From=From Line: +PostBoxEditor.L_Post_UsedSlots=Used Slots: +PostBoxEditor.L_Post_UsedSlots_Value=unknown +PostBoxEditor.L_Post_SelectedSlot=Selected Slot: +PostBoxEditor.L_SenderType=Sender Type +PostBoxEditor.L_Post_TimeStamp=Timestamp +PostBoxEditor.L_Post_Language=Language +PostBoxEditor.L_Post_CountTo=count +PostBoxEditor.L_Post_CountMsg=count +PostBoxEditor.L_Post_CountFrom=count +PostBoxEditor.L_Post_MailType=Mail Type: +PostBoxEditor.L_Post_AttachmentSkin=Attachment Skin: +PostBoxEditor.TP_Post_SR=Details +PostBoxEditor.TP_Post_Items=Attachments ReactionEditor.B_Cancel=取消 ReactionEditor.B_GiveAll=获得全部 ReactionEditor.B_Save=保存 diff --git a/NHSE.WinForms/Resources/text/lang_zht.txt b/NHSE.WinForms/Resources/text/lang_zht.txt index bd2704b..9145e28 100644 --- a/NHSE.WinForms/Resources/text/lang_zht.txt +++ b/NHSE.WinForms/Resources/text/lang_zht.txt @@ -399,6 +399,43 @@ PlayerItemEditor.L_Flag0=屬性 0: PlayerItemEditor.L_Flag1=屬性 1: PlayerItemEditor.L_Uses=耐久: PlayerItemEditor.L_WaterDays=天數: +PostBoxEditor.B_Cancel=Cancel +PostBoxEditor.B_Save=Save Slot +PostBoxEditor.B_Delete=Delete Mail +PostBoxEditor.B_Import=Import Mail +PostBoxEditor.B_Dump=Dump Mail +PostBoxEditor.B_Post_DumpAll=Dump All +PostBoxEditor.CK_Post_Read=Mark Read +PostBoxEditor.CK_Post_Faved=Favorited +PostBoxEditor.GB_Post_Villager=Villager +PostBoxEditor.GB_Post_Player=Player +PostBoxEditor.GB_Post_NPC=NPC +PostBoxEditor.GB_Post_ReceiverPlayer=Receiver Player +PostBoxEditor.GB_Post_Stationery=Stationery Type +PostBoxEditor.GB_Post_AttachedInfo=Attachment Info +PostBoxEditor.GB_Post_ReceiverIsland=Receiver Island +PostBoxEditor.L_Sender_Edit=Edit Sender: +PostBoxEditor.L_Sender_ExternalName=Sender Name: +PostBoxEditor.L_ExternalName=unknown +PostBoxEditor.L_InternalName=unknown +PostBoxEditor.L_Variant=Variant +PostBoxEditor.L_Species=Species +PostBoxEditor.L_Post_To=To Line: +PostBoxEditor.L_Post_Message=Message: +PostBoxEditor.L_Post_From=From Line: +PostBoxEditor.L_Post_UsedSlots=Used Slots: +PostBoxEditor.L_Post_UsedSlots_Value=unknown +PostBoxEditor.L_Post_SelectedSlot=Selected Slot: +PostBoxEditor.L_SenderType=Sender Type +PostBoxEditor.L_Post_TimeStamp=Timestamp +PostBoxEditor.L_Post_Language=Language +PostBoxEditor.L_Post_CountTo=count +PostBoxEditor.L_Post_CountMsg=count +PostBoxEditor.L_Post_CountFrom=count +PostBoxEditor.L_Post_MailType=Mail Type: +PostBoxEditor.L_Post_AttachmentSkin=Attachment Skin: +PostBoxEditor.TP_Post_SR=Details +PostBoxEditor.TP_Post_Items=Attachments ReactionEditor.B_Cancel=取消 ReactionEditor.B_GiveAll=獲得全部 ReactionEditor.B_Save=儲存 diff --git a/NHSE.WinForms/Subforms/Map/PatternEditor.Designer.cs b/NHSE.WinForms/Subforms/Map/PatternEditor.Designer.cs index b9510bc..730ff03 100644 --- a/NHSE.WinForms/Subforms/Map/PatternEditor.Designer.cs +++ b/NHSE.WinForms/Subforms/Map/PatternEditor.Designer.cs @@ -28,178 +28,185 @@ protected override void Dispose(bool disposing) /// private void InitializeComponent() { - this.components = new System.ComponentModel.Container(); - this.B_Save = new System.Windows.Forms.Button(); - this.B_Cancel = new System.Windows.Forms.Button(); - this.LB_Items = new System.Windows.Forms.ListBox(); - this.PB_Palette = new System.Windows.Forms.PictureBox(); - this.L_PatternName = new System.Windows.Forms.Label(); - this.B_DumpLoadDesign = new System.Windows.Forms.Button(); - this.CM_DLDesign = new System.Windows.Forms.ContextMenuStrip(this.components); - this.B_DumpDesign = new System.Windows.Forms.ToolStripMenuItem(); - this.B_DumpDesignAll = new System.Windows.Forms.ToolStripMenuItem(); - this.B_LoadDesign = new System.Windows.Forms.ToolStripMenuItem(); - this.B_LoadDesignAll = new System.Windows.Forms.ToolStripMenuItem(); - this.PB_Pattern = new System.Windows.Forms.PictureBox(); - this.CM_Picture = new System.Windows.Forms.ContextMenuStrip(this.components); - this.Menu_SavePNG = new System.Windows.Forms.ToolStripMenuItem(); - ((System.ComponentModel.ISupportInitialize)(this.PB_Palette)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.PB_Pattern)).BeginInit(); - this.CM_Picture.SuspendLayout(); - this.CM_DLDesign.SuspendLayout(); - this.SuspendLayout(); + components = new System.ComponentModel.Container(); + B_Save = new System.Windows.Forms.Button(); + B_Cancel = new System.Windows.Forms.Button(); + LB_Items = new System.Windows.Forms.ListBox(); + PB_Palette = new System.Windows.Forms.PictureBox(); + L_PatternName = new System.Windows.Forms.Label(); + B_DumpLoadDesign = new System.Windows.Forms.Button(); + CM_DLDesign = new System.Windows.Forms.ContextMenuStrip(components); + B_DumpDesign = new System.Windows.Forms.ToolStripMenuItem(); + B_DumpDesignAll = new System.Windows.Forms.ToolStripMenuItem(); + B_LoadDesign = new System.Windows.Forms.ToolStripMenuItem(); + B_LoadDesignAll = new System.Windows.Forms.ToolStripMenuItem(); + PB_Pattern = new System.Windows.Forms.PictureBox(); + CM_Picture = new System.Windows.Forms.ContextMenuStrip(components); + Menu_SavePNG = new System.Windows.Forms.ToolStripMenuItem(); + CB_Pattern_OverwriteDesigner = new System.Windows.Forms.CheckBox(); + ((System.ComponentModel.ISupportInitialize)PB_Palette).BeginInit(); + ((System.ComponentModel.ISupportInitialize)PB_Pattern).BeginInit(); + CM_Picture.SuspendLayout(); + SuspendLayout(); // // B_Save // - this.B_Save.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); - this.B_Save.Location = new System.Drawing.Point(488, 276); - this.B_Save.Name = "B_Save"; - this.B_Save.Size = new System.Drawing.Size(92, 40); - this.B_Save.TabIndex = 1; - this.B_Save.Text = "Save"; - this.B_Save.UseVisualStyleBackColor = true; - this.B_Save.Click += new System.EventHandler(this.B_Save_Click); + B_Save.Anchor = System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right; + B_Save.Location = new System.Drawing.Point(490, 276); + B_Save.Name = "B_Save"; + B_Save.Size = new System.Drawing.Size(92, 40); + B_Save.TabIndex = 1; + B_Save.Text = "Save"; + B_Save.UseVisualStyleBackColor = true; + B_Save.Click += B_Save_Click; // // B_Cancel // - this.B_Cancel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); - this.B_Cancel.Location = new System.Drawing.Point(390, 276); - this.B_Cancel.Name = "B_Cancel"; - this.B_Cancel.Size = new System.Drawing.Size(92, 40); - this.B_Cancel.TabIndex = 2; - this.B_Cancel.Text = "Cancel"; - this.B_Cancel.UseVisualStyleBackColor = true; - this.B_Cancel.Click += new System.EventHandler(this.B_Cancel_Click); + B_Cancel.Anchor = System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right; + B_Cancel.Location = new System.Drawing.Point(392, 276); + B_Cancel.Name = "B_Cancel"; + B_Cancel.Size = new System.Drawing.Size(92, 40); + B_Cancel.TabIndex = 2; + B_Cancel.Text = "Cancel"; + B_Cancel.UseVisualStyleBackColor = true; + B_Cancel.Click += B_Cancel_Click; // // LB_Items // - this.LB_Items.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) - | System.Windows.Forms.AnchorStyles.Left))); - this.LB_Items.FormattingEnabled = true; - this.LB_Items.Location = new System.Drawing.Point(12, 12); - this.LB_Items.Name = "LB_Items"; - this.LB_Items.Size = new System.Drawing.Size(149, 303); - this.LB_Items.TabIndex = 3; - this.LB_Items.SelectedIndexChanged += new System.EventHandler(this.LB_Items_SelectedIndexChanged); + LB_Items.Anchor = System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left; + LB_Items.FormattingEnabled = true; + LB_Items.Location = new System.Drawing.Point(12, 12); + LB_Items.Name = "LB_Items"; + LB_Items.Size = new System.Drawing.Size(149, 289); + LB_Items.TabIndex = 3; + LB_Items.SelectedIndexChanged += LB_Items_SelectedIndexChanged; // // PB_Palette // - this.PB_Palette.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; - this.PB_Palette.Location = new System.Drawing.Point(432, 12); - this.PB_Palette.Name = "PB_Palette"; - this.PB_Palette.Size = new System.Drawing.Size(152, 12); - this.PB_Palette.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom; - this.PB_Palette.TabIndex = 34; - this.PB_Palette.TabStop = false; + PB_Palette.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + PB_Palette.Location = new System.Drawing.Point(432, 12); + PB_Palette.Name = "PB_Palette"; + PB_Palette.Size = new System.Drawing.Size(152, 12); + PB_Palette.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom; + PB_Palette.TabIndex = 34; + PB_Palette.TabStop = false; // // L_PatternName // - this.L_PatternName.AutoSize = true; - this.L_PatternName.Location = new System.Drawing.Point(429, 28); - this.L_PatternName.Name = "L_PatternName"; - this.L_PatternName.Size = new System.Drawing.Size(73, 13); - this.L_PatternName.TabIndex = 33; - this.L_PatternName.Text = "*PatternName"; + L_PatternName.AutoSize = true; + L_PatternName.Location = new System.Drawing.Point(429, 28); + L_PatternName.Name = "L_PatternName"; + L_PatternName.Size = new System.Drawing.Size(82, 15); + L_PatternName.TabIndex = 33; + L_PatternName.Text = "*PatternName"; // // B_DumpLoadDesign // - this.B_DumpLoadDesign.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); - this.B_DumpLoadDesign.ContextMenuStrip = this.CM_DLDesign; - this.B_DumpLoadDesign.Location = new System.Drawing.Point(168, 276); - this.B_DumpLoadDesign.Name = "B_DumpLoadDesign"; - this.B_DumpLoadDesign.Size = new System.Drawing.Size(92, 40); - this.B_DumpLoadDesign.TabIndex = 31; - this.B_DumpLoadDesign.Text = "Dump/Import"; - this.B_DumpLoadDesign.UseVisualStyleBackColor = true; - this.B_DumpLoadDesign.Click += new System.EventHandler(this.B_DumpLoadDesign_Click); + B_DumpLoadDesign.Anchor = System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left; + B_DumpLoadDesign.ContextMenuStrip = CM_DLDesign; + B_DumpLoadDesign.Location = new System.Drawing.Point(168, 276); + B_DumpLoadDesign.Name = "B_DumpLoadDesign"; + B_DumpLoadDesign.Size = new System.Drawing.Size(92, 40); + B_DumpLoadDesign.TabIndex = 31; + B_DumpLoadDesign.Text = "Dump/Import"; + B_DumpLoadDesign.UseVisualStyleBackColor = true; + B_DumpLoadDesign.Click += B_DumpLoadDesign_Click; // // CM_DLDesign // - this.CM_DLDesign.ImageScalingSize = new System.Drawing.Size(20, 20); - this.CM_DLDesign.Name = "CM_DLDesign"; - this.CM_DLDesign.ShowImageMargin = false; - this.CM_DLDesign.Size = new System.Drawing.Size(93, 92); + CM_DLDesign.ImageScalingSize = new System.Drawing.Size(20, 20); + CM_DLDesign.Name = "CM_DLDesign"; + CM_DLDesign.ShowImageMargin = false; + CM_DLDesign.Size = new System.Drawing.Size(36, 4); // // B_DumpDesign // - this.B_DumpDesign.Name = "B_DumpDesign"; - this.B_DumpDesign.Size = new System.Drawing.Size(92, 22); - this.B_DumpDesign.Text = "Dump Design"; - this.B_DumpDesign.Click += new System.EventHandler(this.B_DumpDesign_Click); + B_DumpDesign.Name = "B_DumpDesign"; + B_DumpDesign.Size = new System.Drawing.Size(92, 22); + B_DumpDesign.Text = "Dump Design"; + B_DumpDesign.Click += B_DumpDesign_Click; // // B_DumpDesignAll // - this.B_DumpDesignAll.Name = "B_DumpDesignAll"; - this.B_DumpDesignAll.Size = new System.Drawing.Size(92, 22); - this.B_DumpDesignAll.Text = "Dump All Designs"; - this.B_DumpDesignAll.Click += new System.EventHandler(this.B_DumpDesign_Click); + B_DumpDesignAll.Name = "B_DumpDesignAll"; + B_DumpDesignAll.Size = new System.Drawing.Size(92, 22); + B_DumpDesignAll.Text = "Dump All Designs"; + B_DumpDesignAll.Click += B_DumpDesign_Click; // // B_LoadDesign // - this.B_LoadDesign.Name = "B_LoadDesign"; - this.B_LoadDesign.Size = new System.Drawing.Size(92, 22); - this.B_LoadDesign.Text = "Load Design"; - this.B_LoadDesign.Click += new System.EventHandler(this.B_LoadDesign_Click); + B_LoadDesign.Name = "B_LoadDesign"; + B_LoadDesign.Size = new System.Drawing.Size(92, 22); + B_LoadDesign.Text = "Load Design"; + B_LoadDesign.Click += B_LoadDesign_Click; // // B_LoadDesignAll // - this.B_LoadDesignAll.Name = "B_LoadDesignAll"; - this.B_LoadDesignAll.Size = new System.Drawing.Size(92, 22); - this.B_LoadDesignAll.Text = "Load All Designs"; - this.B_LoadDesignAll.Click += new System.EventHandler(this.B_LoadDesign_Click); + B_LoadDesignAll.Name = "B_LoadDesignAll"; + B_LoadDesignAll.Size = new System.Drawing.Size(92, 22); + B_LoadDesignAll.Text = "Load All Designs"; + B_LoadDesignAll.Click += B_LoadDesign_Click; // // PB_Pattern // - this.PB_Pattern.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; - this.PB_Pattern.ContextMenuStrip = this.CM_Picture; - this.PB_Pattern.Location = new System.Drawing.Point(168, 12); - this.PB_Pattern.Name = "PB_Pattern"; - this.PB_Pattern.Size = new System.Drawing.Size(258, 258); - this.PB_Pattern.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom; - this.PB_Pattern.TabIndex = 30; - this.PB_Pattern.TabStop = false; - this.PB_Pattern.MouseEnter += new System.EventHandler(this.PB_Pattern_MouseEnter); - this.PB_Pattern.MouseLeave += new System.EventHandler(this.PB_Pattern_MouseLeave); + PB_Pattern.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + PB_Pattern.ContextMenuStrip = CM_Picture; + PB_Pattern.Location = new System.Drawing.Point(168, 12); + PB_Pattern.Name = "PB_Pattern"; + PB_Pattern.Size = new System.Drawing.Size(258, 258); + PB_Pattern.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom; + PB_Pattern.TabIndex = 30; + PB_Pattern.TabStop = false; + PB_Pattern.MouseEnter += PB_Pattern_MouseEnter; + PB_Pattern.MouseLeave += PB_Pattern_MouseLeave; // // CM_Picture // - this.CM_Picture.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.Menu_SavePNG}); - this.CM_Picture.Name = "CM_Picture"; - this.CM_Picture.ShowImageMargin = false; - this.CM_Picture.Size = new System.Drawing.Size(156, 48); + CM_Picture.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { Menu_SavePNG }); + CM_Picture.Name = "CM_Picture"; + CM_Picture.ShowImageMargin = false; + CM_Picture.Size = new System.Drawing.Size(101, 26); // // Menu_SavePNG // - this.Menu_SavePNG.Name = "Menu_SavePNG"; - this.Menu_SavePNG.Size = new System.Drawing.Size(155, 22); - this.Menu_SavePNG.Text = "Save .png"; - this.Menu_SavePNG.Click += new System.EventHandler(this.Menu_SavePNG_Click); + Menu_SavePNG.Name = "Menu_SavePNG"; + Menu_SavePNG.Size = new System.Drawing.Size(100, 22); + Menu_SavePNG.Text = "Save .png"; + Menu_SavePNG.Click += Menu_SavePNG_Click; + // + // CB_Pattern_OverwriteDesigner + // + CB_Pattern_OverwriteDesigner.AutoSize = true; + CB_Pattern_OverwriteDesigner.Location = new System.Drawing.Point(263, 288); + CB_Pattern_OverwriteDesigner.Name = "CB_Pattern_OverwriteDesigner"; + CB_Pattern_OverwriteDesigner.Size = new System.Drawing.Size(126, 19); + CB_Pattern_OverwriteDesigner.TabIndex = 35; + CB_Pattern_OverwriteDesigner.Text = "Overwrite Designer"; + CB_Pattern_OverwriteDesigner.UseVisualStyleBackColor = true; // // PatternEditor // - this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Inherit; - this.ClientSize = new System.Drawing.Size(592, 328); - this.Controls.Add(this.PB_Palette); - this.Controls.Add(this.L_PatternName); - this.Controls.Add(this.B_DumpLoadDesign); - this.Controls.Add(this.PB_Pattern); - this.Controls.Add(this.LB_Items); - this.Controls.Add(this.B_Cancel); - this.Controls.Add(this.B_Save); - this.Icon = global::NHSE.WinForms.Properties.Resources.icon; - this.MaximizeBox = false; - this.MinimizeBox = false; - this.Name = "PatternEditor"; - this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; - this.Text = "Pattern Editor"; - ((System.ComponentModel.ISupportInitialize)(this.PB_Palette)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.PB_Pattern)).EndInit(); - this.CM_Picture.ResumeLayout(false); - this.CM_DLDesign.ResumeLayout(false); - this.ResumeLayout(false); - this.PerformLayout(); + AutoScaleMode = System.Windows.Forms.AutoScaleMode.Inherit; + ClientSize = new System.Drawing.Size(592, 328); + Controls.Add(CB_Pattern_OverwriteDesigner); + Controls.Add(PB_Palette); + Controls.Add(L_PatternName); + Controls.Add(B_DumpLoadDesign); + Controls.Add(PB_Pattern); + Controls.Add(LB_Items); + Controls.Add(B_Cancel); + Controls.Add(B_Save); + Icon = Properties.Resources.icon; + MaximizeBox = false; + MinimizeBox = false; + Name = "PatternEditor"; + StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; + Text = "Pattern Editor"; + ((System.ComponentModel.ISupportInitialize)PB_Palette).EndInit(); + ((System.ComponentModel.ISupportInitialize)PB_Pattern).EndInit(); + CM_Picture.ResumeLayout(false); + ResumeLayout(false); + PerformLayout(); } @@ -218,5 +225,6 @@ private void InitializeComponent() private System.Windows.Forms.PictureBox PB_Pattern; private System.Windows.Forms.ContextMenuStrip CM_Picture; private System.Windows.Forms.ToolStripMenuItem Menu_SavePNG; + private System.Windows.Forms.CheckBox CB_Pattern_OverwriteDesigner; } } \ No newline at end of file diff --git a/NHSE.WinForms/Subforms/Map/PatternEditor.cs b/NHSE.WinForms/Subforms/Map/PatternEditor.cs index 527d8c0..a3ca12b 100644 --- a/NHSE.WinForms/Subforms/Map/PatternEditor.cs +++ b/NHSE.WinForms/Subforms/Map/PatternEditor.cs @@ -1,25 +1,28 @@ -using System; +using NHSE.Core; +using NHSE.Sprites; +using System; using System.Drawing; using System.Drawing.Imaging; using System.IO; +using System.Runtime.Intrinsics.Arm; using System.Windows.Forms; -using NHSE.Core; -using NHSE.Sprites; namespace NHSE.WinForms; public partial class PatternEditor : Form { private readonly DesignPattern[] Patterns; + private readonly Player Player; private int Index; private const int scale = 8; - public PatternEditor(DesignPattern[] patterns) + public PatternEditor(DesignPattern[] patterns, Player player) { InitializeComponent(); this.TranslateInterface(GameInfo.CurrentLanguage); Patterns = patterns; + Player = player; DialogResult = DialogResult.Cancel; foreach (var p in patterns) @@ -146,8 +149,44 @@ private void RepopulateList(int index) LB_Items.SelectedIndex = index; } + public bool ContainsTransparentPixels(Bitmap image) + { + for (int y = 0; y < image.Height; ++y) + { + for (int x = 0; x < image.Width; ++x) + { + if (image.GetPixel(x, y).A < 255) // check alpha + { + return true; + } + } + } + return false; + } + private void LoadPattern(DesignPattern designPattern) { + if (designPattern.UsageCompatibility is not (0xEE00 or 0xEE02)) // known valid values (00=non-transparent, 02=transparent) + { + using var image = designPattern.GetImage(); + if (ContainsTransparentPixels(image)) + { + designPattern.UsageCompatibility = 0xEE02; // set to transparent + } + else + { + designPattern.UsageCompatibility = 0xEE00; // reset to default value (non-transparent) + } + } + + if (CB_Pattern_OverwriteDesigner.Checked) + { + designPattern.PlayerID = Player.Personal.PlayerID; + designPattern.PlayerName = Player.Personal.PlayerName; + designPattern.TownID = Player.Personal.TownID; + designPattern.TownName = Player.Personal.TownName; + } + PB_Pattern.Image = ImageUtil.ResizeImage(designPattern.GetImage(), DesignPattern.Width * scale, DesignPattern.Height * scale); PB_Palette.Image = ImageUtil.ResizeImage(designPattern.GetPalette(), 150, 10); L_PatternName.Text = designPattern.DesignName + Environment.NewLine + diff --git a/NHSE.WinForms/Subforms/Map/PatternEditor.resx b/NHSE.WinForms/Subforms/Map/PatternEditor.resx index 978a819..20f38d5 100644 --- a/NHSE.WinForms/Subforms/Map/PatternEditor.resx +++ b/NHSE.WinForms/Subforms/Map/PatternEditor.resx @@ -1,17 +1,17 @@  - @@ -117,7 +117,10 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - + 17, 17 + + 145, 17 + \ No newline at end of file diff --git a/NHSE.WinForms/Subforms/Map/PatternEditorPRO.Designer.cs b/NHSE.WinForms/Subforms/Map/PatternEditorPRO.Designer.cs index f337529..624f448 100644 --- a/NHSE.WinForms/Subforms/Map/PatternEditorPRO.Designer.cs +++ b/NHSE.WinForms/Subforms/Map/PatternEditorPRO.Designer.cs @@ -28,223 +28,230 @@ protected override void Dispose(bool disposing) /// private void InitializeComponent() { - this.components = new System.ComponentModel.Container(); - this.B_Save = new System.Windows.Forms.Button(); - this.B_Cancel = new System.Windows.Forms.Button(); - this.LB_Items = new System.Windows.Forms.ListBox(); - this.PB_Palette = new System.Windows.Forms.PictureBox(); - this.L_PatternName = new System.Windows.Forms.Label(); - this.B_DumpLoadDesign = new System.Windows.Forms.Button(); - this.CM_DLDesign = new System.Windows.Forms.ContextMenuStrip(this.components); - this.B_DumpDesign = new System.Windows.Forms.ToolStripMenuItem(); - this.B_DumpDesignAll = new System.Windows.Forms.ToolStripMenuItem(); - this.B_LoadDesign = new System.Windows.Forms.ToolStripMenuItem(); - this.B_LoadDesignAll = new System.Windows.Forms.ToolStripMenuItem(); - this.PB_Sheet0 = new System.Windows.Forms.PictureBox(); - this.CM_Picture = new System.Windows.Forms.ContextMenuStrip(this.components); - this.Menu_SavePNG = new System.Windows.Forms.ToolStripMenuItem(); - this.PB_Sheet1 = new System.Windows.Forms.PictureBox(); - this.PB_Sheet3 = new System.Windows.Forms.PictureBox(); - this.PB_Sheet2 = new System.Windows.Forms.PictureBox(); - ((System.ComponentModel.ISupportInitialize)(this.PB_Palette)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.PB_Sheet0)).BeginInit(); - this.CM_Picture.SuspendLayout(); - this.CM_DLDesign.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.PB_Sheet1)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.PB_Sheet3)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.PB_Sheet2)).BeginInit(); - this.SuspendLayout(); + components = new System.ComponentModel.Container(); + B_Save = new System.Windows.Forms.Button(); + B_Cancel = new System.Windows.Forms.Button(); + LB_Items = new System.Windows.Forms.ListBox(); + PB_Palette = new System.Windows.Forms.PictureBox(); + L_PatternName = new System.Windows.Forms.Label(); + B_DumpLoadDesign = new System.Windows.Forms.Button(); + CM_DLDesign = new System.Windows.Forms.ContextMenuStrip(components); + B_DumpDesign = new System.Windows.Forms.ToolStripMenuItem(); + B_DumpDesignAll = new System.Windows.Forms.ToolStripMenuItem(); + B_LoadDesign = new System.Windows.Forms.ToolStripMenuItem(); + B_LoadDesignAll = new System.Windows.Forms.ToolStripMenuItem(); + PB_Sheet0 = new System.Windows.Forms.PictureBox(); + CM_Picture = new System.Windows.Forms.ContextMenuStrip(components); + Menu_SavePNG = new System.Windows.Forms.ToolStripMenuItem(); + PB_Sheet1 = new System.Windows.Forms.PictureBox(); + PB_Sheet3 = new System.Windows.Forms.PictureBox(); + PB_Sheet2 = new System.Windows.Forms.PictureBox(); + CB_Pattern_OverwriteDesigner = new System.Windows.Forms.CheckBox(); + ((System.ComponentModel.ISupportInitialize)PB_Palette).BeginInit(); + ((System.ComponentModel.ISupportInitialize)PB_Sheet0).BeginInit(); + CM_Picture.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)PB_Sheet1).BeginInit(); + ((System.ComponentModel.ISupportInitialize)PB_Sheet3).BeginInit(); + ((System.ComponentModel.ISupportInitialize)PB_Sheet2).BeginInit(); + SuspendLayout(); // // B_Save // - this.B_Save.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); - this.B_Save.Location = new System.Drawing.Point(488, 276); - this.B_Save.Name = "B_Save"; - this.B_Save.Size = new System.Drawing.Size(92, 40); - this.B_Save.TabIndex = 1; - this.B_Save.Text = "Save"; - this.B_Save.UseVisualStyleBackColor = true; - this.B_Save.Click += new System.EventHandler(this.B_Save_Click); + B_Save.Anchor = System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right; + B_Save.Location = new System.Drawing.Point(490, 276); + B_Save.Name = "B_Save"; + B_Save.Size = new System.Drawing.Size(92, 40); + B_Save.TabIndex = 1; + B_Save.Text = "Save"; + B_Save.UseVisualStyleBackColor = true; + B_Save.Click += B_Save_Click; // // B_Cancel // - this.B_Cancel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); - this.B_Cancel.Location = new System.Drawing.Point(390, 276); - this.B_Cancel.Name = "B_Cancel"; - this.B_Cancel.Size = new System.Drawing.Size(92, 40); - this.B_Cancel.TabIndex = 2; - this.B_Cancel.Text = "Cancel"; - this.B_Cancel.UseVisualStyleBackColor = true; - this.B_Cancel.Click += new System.EventHandler(this.B_Cancel_Click); + B_Cancel.Anchor = System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right; + B_Cancel.Location = new System.Drawing.Point(392, 276); + B_Cancel.Name = "B_Cancel"; + B_Cancel.Size = new System.Drawing.Size(92, 40); + B_Cancel.TabIndex = 2; + B_Cancel.Text = "Cancel"; + B_Cancel.UseVisualStyleBackColor = true; + B_Cancel.Click += B_Cancel_Click; // // LB_Items // - this.LB_Items.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) - | System.Windows.Forms.AnchorStyles.Left))); - this.LB_Items.FormattingEnabled = true; - this.LB_Items.Location = new System.Drawing.Point(12, 12); - this.LB_Items.Name = "LB_Items"; - this.LB_Items.Size = new System.Drawing.Size(149, 303); - this.LB_Items.TabIndex = 3; - this.LB_Items.SelectedIndexChanged += new System.EventHandler(this.LB_Items_SelectedIndexChanged); + LB_Items.Anchor = System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left; + LB_Items.FormattingEnabled = true; + LB_Items.Location = new System.Drawing.Point(12, 12); + LB_Items.Name = "LB_Items"; + LB_Items.Size = new System.Drawing.Size(149, 289); + LB_Items.TabIndex = 3; + LB_Items.SelectedIndexChanged += LB_Items_SelectedIndexChanged; // // PB_Palette // - this.PB_Palette.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; - this.PB_Palette.Location = new System.Drawing.Point(432, 12); - this.PB_Palette.Name = "PB_Palette"; - this.PB_Palette.Size = new System.Drawing.Size(152, 12); - this.PB_Palette.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom; - this.PB_Palette.TabIndex = 34; - this.PB_Palette.TabStop = false; + PB_Palette.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + PB_Palette.Location = new System.Drawing.Point(432, 12); + PB_Palette.Name = "PB_Palette"; + PB_Palette.Size = new System.Drawing.Size(152, 12); + PB_Palette.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom; + PB_Palette.TabIndex = 34; + PB_Palette.TabStop = false; // // L_PatternName // - this.L_PatternName.AutoSize = true; - this.L_PatternName.Location = new System.Drawing.Point(429, 28); - this.L_PatternName.Name = "L_PatternName"; - this.L_PatternName.Size = new System.Drawing.Size(73, 13); - this.L_PatternName.TabIndex = 33; - this.L_PatternName.Text = "*PatternName"; + L_PatternName.AutoSize = true; + L_PatternName.Location = new System.Drawing.Point(429, 28); + L_PatternName.Name = "L_PatternName"; + L_PatternName.Size = new System.Drawing.Size(82, 15); + L_PatternName.TabIndex = 33; + L_PatternName.Text = "*PatternName"; // // B_DumpLoadDesign // - this.B_DumpLoadDesign.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); - this.B_DumpLoadDesign.ContextMenuStrip = this.CM_DLDesign; - this.B_DumpLoadDesign.Location = new System.Drawing.Point(168, 276); - this.B_DumpLoadDesign.Name = "B_DumpLoadDesign"; - this.B_DumpLoadDesign.Size = new System.Drawing.Size(92, 40); - this.B_DumpLoadDesign.TabIndex = 31; - this.B_DumpLoadDesign.Text = "Dump/Import"; - this.B_DumpLoadDesign.UseVisualStyleBackColor = true; - this.B_DumpLoadDesign.Click += new System.EventHandler(this.B_DumpLoadDesign_Click); + B_DumpLoadDesign.Anchor = System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left; + B_DumpLoadDesign.ContextMenuStrip = CM_DLDesign; + B_DumpLoadDesign.Location = new System.Drawing.Point(168, 276); + B_DumpLoadDesign.Name = "B_DumpLoadDesign"; + B_DumpLoadDesign.Size = new System.Drawing.Size(92, 40); + B_DumpLoadDesign.TabIndex = 31; + B_DumpLoadDesign.Text = "Dump/Import"; + B_DumpLoadDesign.UseVisualStyleBackColor = true; + B_DumpLoadDesign.Click += B_DumpLoadDesign_Click; // // CM_DLDesign // - this.CM_DLDesign.ImageScalingSize = new System.Drawing.Size(20, 20); - this.CM_DLDesign.Name = "CM_DLDesign"; - this.CM_DLDesign.ShowImageMargin = false; - this.CM_DLDesign.Size = new System.Drawing.Size(93, 92); + CM_DLDesign.ImageScalingSize = new System.Drawing.Size(20, 20); + CM_DLDesign.Name = "CM_DLDesign"; + CM_DLDesign.ShowImageMargin = false; + CM_DLDesign.Size = new System.Drawing.Size(36, 4); // // B_DumpDesign // - this.B_DumpDesign.Name = "B_DumpDesign"; - this.B_DumpDesign.Size = new System.Drawing.Size(92, 22); - this.B_DumpDesign.Text = "Dump Design"; - this.B_DumpDesign.Click += new System.EventHandler(this.B_DumpDesign_Click); + B_DumpDesign.Name = "B_DumpDesign"; + B_DumpDesign.Size = new System.Drawing.Size(92, 22); + B_DumpDesign.Text = "Dump Design"; + B_DumpDesign.Click += B_DumpDesign_Click; // // B_DumpDesignAll // - this.B_DumpDesignAll.Name = "B_DumpDesignAll"; - this.B_DumpDesignAll.Size = new System.Drawing.Size(92, 22); - this.B_DumpDesignAll.Text = "Dump All Designs"; - this.B_DumpDesignAll.Click += new System.EventHandler(this.B_DumpDesign_Click); + B_DumpDesignAll.Name = "B_DumpDesignAll"; + B_DumpDesignAll.Size = new System.Drawing.Size(92, 22); + B_DumpDesignAll.Text = "Dump All Designs"; + B_DumpDesignAll.Click += B_DumpDesign_Click; // // B_LoadDesign // - this.B_LoadDesign.Name = "B_LoadDesign"; - this.B_LoadDesign.Size = new System.Drawing.Size(92, 22); - this.B_LoadDesign.Text = "Load Design"; - this.B_LoadDesign.Click += new System.EventHandler(this.B_LoadDesign_Click); + B_LoadDesign.Name = "B_LoadDesign"; + B_LoadDesign.Size = new System.Drawing.Size(92, 22); + B_LoadDesign.Text = "Load Design"; + B_LoadDesign.Click += B_LoadDesign_Click; // // B_LoadDesignAll // - this.B_LoadDesignAll.Name = "B_LoadDesignAll"; - this.B_LoadDesignAll.Size = new System.Drawing.Size(92, 22); - this.B_LoadDesignAll.Text = "Load All Designs"; - this.B_LoadDesignAll.Click += new System.EventHandler(this.B_LoadDesign_Click); + B_LoadDesignAll.Name = "B_LoadDesignAll"; + B_LoadDesignAll.Size = new System.Drawing.Size(92, 22); + B_LoadDesignAll.Text = "Load All Designs"; + B_LoadDesignAll.Click += B_LoadDesign_Click; // // PB_Sheet0 // - this.PB_Sheet0.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; - this.PB_Sheet0.ContextMenuStrip = this.CM_Picture; - this.PB_Sheet0.Location = new System.Drawing.Point(168, 12); - this.PB_Sheet0.Name = "PB_Sheet0"; - this.PB_Sheet0.Size = new System.Drawing.Size(130, 130); - this.PB_Sheet0.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom; - this.PB_Sheet0.TabIndex = 30; - this.PB_Sheet0.TabStop = false; - this.PB_Sheet0.MouseEnter += new System.EventHandler(this.PB_Pattern_MouseEnter); - this.PB_Sheet0.MouseLeave += new System.EventHandler(this.PB_Pattern_MouseLeave); + PB_Sheet0.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + PB_Sheet0.ContextMenuStrip = CM_Picture; + PB_Sheet0.Location = new System.Drawing.Point(168, 12); + PB_Sheet0.Name = "PB_Sheet0"; + PB_Sheet0.Size = new System.Drawing.Size(130, 130); + PB_Sheet0.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom; + PB_Sheet0.TabIndex = 30; + PB_Sheet0.TabStop = false; + PB_Sheet0.MouseEnter += PB_Pattern_MouseEnter; + PB_Sheet0.MouseLeave += PB_Pattern_MouseLeave; // // CM_Picture // - this.CM_Picture.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.Menu_SavePNG}); - this.CM_Picture.Name = "CM_Picture"; - this.CM_Picture.ShowImageMargin = false; - this.CM_Picture.Size = new System.Drawing.Size(101, 26); + CM_Picture.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { Menu_SavePNG }); + CM_Picture.Name = "CM_Picture"; + CM_Picture.ShowImageMargin = false; + CM_Picture.Size = new System.Drawing.Size(101, 26); // // Menu_SavePNG // - this.Menu_SavePNG.Name = "Menu_SavePNG"; - this.Menu_SavePNG.Size = new System.Drawing.Size(100, 22); - this.Menu_SavePNG.Text = "Save .png"; - this.Menu_SavePNG.Click += new System.EventHandler(this.Menu_SavePNG_Click); + Menu_SavePNG.Name = "Menu_SavePNG"; + Menu_SavePNG.Size = new System.Drawing.Size(100, 22); + Menu_SavePNG.Text = "Save .png"; + Menu_SavePNG.Click += Menu_SavePNG_Click; // // PB_Sheet1 // - this.PB_Sheet1.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; - this.PB_Sheet1.ContextMenuStrip = this.CM_Picture; - this.PB_Sheet1.Location = new System.Drawing.Point(298, 12); - this.PB_Sheet1.Name = "PB_Sheet1"; - this.PB_Sheet1.Size = new System.Drawing.Size(130, 130); - this.PB_Sheet1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom; - this.PB_Sheet1.TabIndex = 35; - this.PB_Sheet1.TabStop = false; + PB_Sheet1.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + PB_Sheet1.ContextMenuStrip = CM_Picture; + PB_Sheet1.Location = new System.Drawing.Point(298, 12); + PB_Sheet1.Name = "PB_Sheet1"; + PB_Sheet1.Size = new System.Drawing.Size(130, 130); + PB_Sheet1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom; + PB_Sheet1.TabIndex = 35; + PB_Sheet1.TabStop = false; // // PB_Sheet3 // - this.PB_Sheet3.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; - this.PB_Sheet3.ContextMenuStrip = this.CM_Picture; - this.PB_Sheet3.Location = new System.Drawing.Point(298, 142); - this.PB_Sheet3.Name = "PB_Sheet3"; - this.PB_Sheet3.Size = new System.Drawing.Size(130, 130); - this.PB_Sheet3.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom; - this.PB_Sheet3.TabIndex = 37; - this.PB_Sheet3.TabStop = false; + PB_Sheet3.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + PB_Sheet3.ContextMenuStrip = CM_Picture; + PB_Sheet3.Location = new System.Drawing.Point(298, 142); + PB_Sheet3.Name = "PB_Sheet3"; + PB_Sheet3.Size = new System.Drawing.Size(130, 130); + PB_Sheet3.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom; + PB_Sheet3.TabIndex = 37; + PB_Sheet3.TabStop = false; // // PB_Sheet2 // - this.PB_Sheet2.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; - this.PB_Sheet2.ContextMenuStrip = this.CM_Picture; - this.PB_Sheet2.Location = new System.Drawing.Point(168, 142); - this.PB_Sheet2.Name = "PB_Sheet2"; - this.PB_Sheet2.Size = new System.Drawing.Size(130, 130); - this.PB_Sheet2.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom; - this.PB_Sheet2.TabIndex = 36; - this.PB_Sheet2.TabStop = false; + PB_Sheet2.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + PB_Sheet2.ContextMenuStrip = CM_Picture; + PB_Sheet2.Location = new System.Drawing.Point(168, 142); + PB_Sheet2.Name = "PB_Sheet2"; + PB_Sheet2.Size = new System.Drawing.Size(130, 130); + PB_Sheet2.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom; + PB_Sheet2.TabIndex = 36; + PB_Sheet2.TabStop = false; + // + // CB_Pattern_OverwriteDesigner + // + CB_Pattern_OverwriteDesigner.AutoSize = true; + CB_Pattern_OverwriteDesigner.Location = new System.Drawing.Point(263, 288); + CB_Pattern_OverwriteDesigner.Name = "CB_Pattern_OverwriteDesigner"; + CB_Pattern_OverwriteDesigner.Size = new System.Drawing.Size(126, 19); + CB_Pattern_OverwriteDesigner.TabIndex = 38; + CB_Pattern_OverwriteDesigner.Text = "Overwrite Designer"; + CB_Pattern_OverwriteDesigner.UseVisualStyleBackColor = true; // // PatternEditorPRO // - this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Inherit; - this.ClientSize = new System.Drawing.Size(592, 328); - this.Controls.Add(this.PB_Sheet3); - this.Controls.Add(this.PB_Sheet2); - this.Controls.Add(this.PB_Sheet1); - this.Controls.Add(this.PB_Palette); - this.Controls.Add(this.L_PatternName); - this.Controls.Add(this.B_DumpLoadDesign); - this.Controls.Add(this.PB_Sheet0); - this.Controls.Add(this.LB_Items); - this.Controls.Add(this.B_Cancel); - this.Controls.Add(this.B_Save); - this.Icon = global::NHSE.WinForms.Properties.Resources.icon; - this.MaximizeBox = false; - this.MinimizeBox = false; - this.Name = "PatternEditorPRO"; - this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; - this.Text = "Pro Design Editor"; - ((System.ComponentModel.ISupportInitialize)(this.PB_Palette)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.PB_Sheet0)).EndInit(); - this.CM_Picture.ResumeLayout(false); - this.CM_DLDesign.ResumeLayout(false); - ((System.ComponentModel.ISupportInitialize)(this.PB_Sheet1)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.PB_Sheet3)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.PB_Sheet2)).EndInit(); - this.ResumeLayout(false); - this.PerformLayout(); + AutoScaleMode = System.Windows.Forms.AutoScaleMode.Inherit; + ClientSize = new System.Drawing.Size(592, 328); + Controls.Add(CB_Pattern_OverwriteDesigner); + Controls.Add(PB_Sheet3); + Controls.Add(PB_Sheet2); + Controls.Add(PB_Sheet1); + Controls.Add(PB_Palette); + Controls.Add(L_PatternName); + Controls.Add(B_DumpLoadDesign); + Controls.Add(PB_Sheet0); + Controls.Add(LB_Items); + Controls.Add(B_Cancel); + Controls.Add(B_Save); + Icon = Properties.Resources.icon; + MaximizeBox = false; + MinimizeBox = false; + Name = "PatternEditorPRO"; + StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; + Text = "Pro Design Editor"; + ((System.ComponentModel.ISupportInitialize)PB_Palette).EndInit(); + ((System.ComponentModel.ISupportInitialize)PB_Sheet0).EndInit(); + CM_Picture.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)PB_Sheet1).EndInit(); + ((System.ComponentModel.ISupportInitialize)PB_Sheet3).EndInit(); + ((System.ComponentModel.ISupportInitialize)PB_Sheet2).EndInit(); + ResumeLayout(false); + PerformLayout(); } @@ -266,5 +273,6 @@ private void InitializeComponent() private System.Windows.Forms.PictureBox PB_Sheet1; private System.Windows.Forms.PictureBox PB_Sheet3; private System.Windows.Forms.PictureBox PB_Sheet2; + private System.Windows.Forms.CheckBox CB_Pattern_OverwriteDesigner; } } \ No newline at end of file diff --git a/NHSE.WinForms/Subforms/Map/PatternEditorPRO.cs b/NHSE.WinForms/Subforms/Map/PatternEditorPRO.cs index 47edadd..3e1570c 100644 --- a/NHSE.WinForms/Subforms/Map/PatternEditorPRO.cs +++ b/NHSE.WinForms/Subforms/Map/PatternEditorPRO.cs @@ -1,25 +1,28 @@ -using System; +using NHSE.Core; +using NHSE.Sprites; +using System; using System.Drawing; using System.Drawing.Imaging; using System.IO; +using System.Reflection; using System.Windows.Forms; -using NHSE.Core; -using NHSE.Sprites; namespace NHSE.WinForms; public partial class PatternEditorPRO : Form { private readonly DesignPatternPRO[] Patterns; + private readonly Player Player; private int Index; private const int scale = 4; - public PatternEditorPRO(DesignPatternPRO[] patterns) + public PatternEditorPRO(DesignPatternPRO[] patterns, Player player) { InitializeComponent(); this.TranslateInterface(GameInfo.CurrentLanguage); Patterns = patterns; + Player = player; DialogResult = DialogResult.Cancel; foreach (var p in patterns) @@ -147,6 +150,17 @@ private void RepopulateList(int index) private void LoadPattern(DesignPatternPRO dp) { + if (dp.UsageCompatibility is not (0xEE01 or 0xEE05)) // known valid values (01=pro, 05=default_unused) + dp.UsageCompatibility = 0xEE01; // reset to default pro design + + if (CB_Pattern_OverwriteDesigner.Checked) + { + dp.PlayerID = Player.Personal.PlayerID; + dp.PlayerName = Player.Personal.PlayerName; + dp.TownID = Player.Personal.TownID; + dp.TownName = Player.Personal.TownName; + } + const int w = DesignPatternPRO.Width * scale; const int h = DesignPatternPRO.Height * scale; PB_Sheet0.Image = ImageUtil.ResizeImage(dp.GetImage(0), w, h); diff --git a/NHSE.WinForms/Subforms/Map/PatternEditorPRO.resx b/NHSE.WinForms/Subforms/Map/PatternEditorPRO.resx index 978a819..20f38d5 100644 --- a/NHSE.WinForms/Subforms/Map/PatternEditorPRO.resx +++ b/NHSE.WinForms/Subforms/Map/PatternEditorPRO.resx @@ -1,17 +1,17 @@  - @@ -117,7 +117,10 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - + 17, 17 + + 145, 17 + \ No newline at end of file diff --git a/NHSE.WinForms/Subforms/Player/PostBoxEditor.Designer.cs b/NHSE.WinForms/Subforms/Player/PostBoxEditor.Designer.cs new file mode 100644 index 0000000..9114d66 --- /dev/null +++ b/NHSE.WinForms/Subforms/Player/PostBoxEditor.Designer.cs @@ -0,0 +1,812 @@ +using NHSE.Core; + +namespace NHSE.WinForms +{ + partial class PostBoxEditor + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + components = new System.ComponentModel.Container(); + CAL_PostTimestamp = new System.Windows.Forms.DateTimePicker(); + B_Cancel = new System.Windows.Forms.Button(); + B_Save = new System.Windows.Forms.Button(); + L_Sender_Edit = new System.Windows.Forms.Label(); + L_Sender_ExternalName = new System.Windows.Forms.Label(); + L_ExternalName = new System.Windows.Forms.Label(); + L_InternalName = new System.Windows.Forms.Label(); + NUD_Variant = new System.Windows.Forms.NumericUpDown(); + L_Variant = new System.Windows.Forms.Label(); + NUD_Species = new System.Windows.Forms.NumericUpDown(); + L_Species = new System.Windows.Forms.Label(); + PB_Villager = new System.Windows.Forms.PictureBox(); + TB_Post_Message = new System.Windows.Forms.TextBox(); + TB_Post_FromLine = new System.Windows.Forms.TextBox(); + TB_Post_ToLine = new System.Windows.Forms.TextBox(); + L_Post_To = new System.Windows.Forms.Label(); + L_Post_Message = new System.Windows.Forms.Label(); + L_Post_From = new System.Windows.Forms.Label(); + CB_Post_Language = new System.Windows.Forms.ComboBox(); + L_Post_UsedSlots = new System.Windows.Forms.Label(); + L_Post_UsedSlots_Value = new System.Windows.Forms.Label(); + L_Post_SelectedSlot = new System.Windows.Forms.Label(); + B_Delete = new System.Windows.Forms.Button(); + CK_Post_Read = new System.Windows.Forms.CheckBox(); + CK_Post_Faved = new System.Windows.Forms.CheckBox(); + CB_Post_SenderType = new System.Windows.Forms.ComboBox(); + L_SenderType = new System.Windows.Forms.Label(); + GB_Post_Villager = new System.Windows.Forms.GroupBox(); + GB_Post_Player = new System.Windows.Forms.GroupBox(); + TB_Post_PlayerName = new System.Windows.Forms.TextBox(); + L_Post_TimeStamp = new System.Windows.Forms.Label(); + L_Post_Language = new System.Windows.Forms.Label(); + L_Post_CountTo = new System.Windows.Forms.Label(); + L_Post_CountMsg = new System.Windows.Forms.Label(); + L_Post_CountFrom = new System.Windows.Forms.Label(); + GB_Post_NPC = new System.Windows.Forms.GroupBox(); + CB_Post_NPC = new System.Windows.Forms.ComboBox(); + TC_Post_SR = new System.Windows.Forms.TabControl(); + TP_Post_SR = new System.Windows.Forms.TabPage(); + GB_Post_ReceiverIsland = new System.Windows.Forms.GroupBox(); + TB_Post_ReceiverIsland = new System.Windows.Forms.TextBox(); + GB_Post_Stationery = new System.Windows.Forms.GroupBox(); + CB_Post_Stationery = new System.Windows.Forms.ComboBox(); + GB_Post_ReceiverPlayer = new System.Windows.Forms.GroupBox(); + TB_Post_ReceiverPlayer = new System.Windows.Forms.TextBox(); + TP_Post_Items = new System.Windows.Forms.TabPage(); + GB_Post_AttachedInfo = new System.Windows.Forms.GroupBox(); + ItemEditor = new ItemEditor(); + L_Post_AttachmentSkin = new System.Windows.Forms.Label(); + CB_Post_AttachmentSkin = new System.Windows.Forms.ComboBox(); + CB_Post_MailType = new System.Windows.Forms.ComboBox(); + L_Post_MailType = new System.Windows.Forms.Label(); + B_Import = new System.Windows.Forms.Button(); + B_Dump = new System.Windows.Forms.Button(); + B_Post_DumpAll = new System.Windows.Forms.Button(); + NUD_Post_Slots = new System.Windows.Forms.NumericUpDown(); + ((System.ComponentModel.ISupportInitialize)NUD_Variant).BeginInit(); + ((System.ComponentModel.ISupportInitialize)NUD_Species).BeginInit(); + ((System.ComponentModel.ISupportInitialize)PB_Villager).BeginInit(); + GB_Post_Villager.SuspendLayout(); + GB_Post_Player.SuspendLayout(); + GB_Post_NPC.SuspendLayout(); + TC_Post_SR.SuspendLayout(); + TP_Post_SR.SuspendLayout(); + GB_Post_ReceiverIsland.SuspendLayout(); + GB_Post_Stationery.SuspendLayout(); + GB_Post_ReceiverPlayer.SuspendLayout(); + TP_Post_Items.SuspendLayout(); + GB_Post_AttachedInfo.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)NUD_Post_Slots).BeginInit(); + SuspendLayout(); + // + // CAL_PostTimestamp + // + CAL_PostTimestamp.Location = new System.Drawing.Point(9, 446); + CAL_PostTimestamp.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); + CAL_PostTimestamp.Name = "CAL_PostTimestamp"; + CAL_PostTimestamp.Size = new System.Drawing.Size(233, 23); + CAL_PostTimestamp.TabIndex = 76; + // + // B_Cancel + // + B_Cancel.Anchor = System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right; + B_Cancel.Location = new System.Drawing.Point(385, 544); + B_Cancel.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); + B_Cancel.Name = "B_Cancel"; + B_Cancel.Size = new System.Drawing.Size(107, 46); + B_Cancel.TabIndex = 75; + B_Cancel.Text = "Cancel"; + B_Cancel.UseVisualStyleBackColor = true; + B_Cancel.Click += B_Cancel_Click; + // + // B_Save + // + B_Save.Anchor = System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right; + B_Save.Location = new System.Drawing.Point(496, 544); + B_Save.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); + B_Save.Name = "B_Save"; + B_Save.Size = new System.Drawing.Size(107, 46); + B_Save.TabIndex = 74; + B_Save.Text = "Save Slot"; + B_Save.UseVisualStyleBackColor = true; + B_Save.Click += B_Save_Click; + // + // L_Sender_Edit + // + L_Sender_Edit.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft; + L_Sender_Edit.Location = new System.Drawing.Point(123, 16); + L_Sender_Edit.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + L_Sender_Edit.Name = "L_Sender_Edit"; + L_Sender_Edit.Size = new System.Drawing.Size(72, 23); + L_Sender_Edit.TabIndex = 86; + L_Sender_Edit.Text = "Edit Sender:"; + L_Sender_Edit.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // L_Sender_ExternalName + // + L_Sender_ExternalName.Location = new System.Drawing.Point(126, 94); + L_Sender_ExternalName.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + L_Sender_ExternalName.Name = "L_Sender_ExternalName"; + L_Sender_ExternalName.Size = new System.Drawing.Size(86, 23); + L_Sender_ExternalName.TabIndex = 84; + L_Sender_ExternalName.Text = "Sender Name:"; + L_Sender_ExternalName.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // L_ExternalName + // + L_ExternalName.AutoSize = true; + L_ExternalName.Font = new System.Drawing.Font("Segoe UI", 9F); + L_ExternalName.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft; + L_ExternalName.Location = new System.Drawing.Point(126, 114); + L_ExternalName.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + L_ExternalName.Name = "L_ExternalName"; + L_ExternalName.Size = new System.Drawing.Size(57, 15); + L_ExternalName.TabIndex = 83; + L_ExternalName.Text = "unknown"; + L_ExternalName.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // L_InternalName + // + L_InternalName.AutoSize = true; + L_InternalName.Font = new System.Drawing.Font("Courier New", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, 0); + L_InternalName.Location = new System.Drawing.Point(8, 137); + L_InternalName.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + L_InternalName.Name = "L_InternalName"; + L_InternalName.Size = new System.Drawing.Size(56, 14); + L_InternalName.TabIndex = 82; + L_InternalName.Text = "unknown"; + L_InternalName.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // NUD_Variant + // + NUD_Variant.Location = new System.Drawing.Point(128, 65); + NUD_Variant.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); + NUD_Variant.Maximum = new decimal(new int[] { 255, 0, 0, 0 }); + NUD_Variant.Name = "NUD_Variant"; + NUD_Variant.Size = new System.Drawing.Size(46, 23); + NUD_Variant.TabIndex = 81; + NUD_Variant.ValueChanged += ChangeVillager; + // + // L_Variant + // + L_Variant.ImageAlign = System.Drawing.ContentAlignment.MiddleRight; + L_Variant.Location = new System.Drawing.Point(177, 64); + L_Variant.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + L_Variant.Name = "L_Variant"; + L_Variant.Size = new System.Drawing.Size(56, 23); + L_Variant.TabIndex = 80; + L_Variant.Text = "Variant"; + L_Variant.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // NUD_Species + // + NUD_Species.Location = new System.Drawing.Point(128, 40); + NUD_Species.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); + NUD_Species.Maximum = new decimal(new int[] { 400, 0, 0, 0 }); + NUD_Species.Name = "NUD_Species"; + NUD_Species.Size = new System.Drawing.Size(46, 23); + NUD_Species.TabIndex = 79; + NUD_Species.ValueChanged += ChangeVillager; + // + // L_Species + // + L_Species.ImageAlign = System.Drawing.ContentAlignment.MiddleRight; + L_Species.Location = new System.Drawing.Point(177, 39); + L_Species.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + L_Species.Name = "L_Species"; + L_Species.Size = new System.Drawing.Size(56, 23); + L_Species.TabIndex = 78; + L_Species.Text = "Species"; + L_Species.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // PB_Villager + // + PB_Villager.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + PB_Villager.Location = new System.Drawing.Point(9, 21); + PB_Villager.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); + PB_Villager.Name = "PB_Villager"; + PB_Villager.Size = new System.Drawing.Size(114, 114); + PB_Villager.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom; + PB_Villager.TabIndex = 77; + PB_Villager.TabStop = false; + // + // TB_Post_Message + // + TB_Post_Message.Location = new System.Drawing.Point(7, 138); + TB_Post_Message.Multiline = true; + TB_Post_Message.Name = "TB_Post_Message"; + TB_Post_Message.Size = new System.Drawing.Size(220, 218); + TB_Post_Message.TabIndex = 87; + TB_Post_Message.TextChanged += UpdateMailCounters; + // + // TB_Post_FromLine + // + TB_Post_FromLine.Location = new System.Drawing.Point(7, 383); + TB_Post_FromLine.Name = "TB_Post_FromLine"; + TB_Post_FromLine.Size = new System.Drawing.Size(220, 23); + TB_Post_FromLine.TabIndex = 88; + TB_Post_FromLine.TextChanged += UpdateMailCounters; + // + // TB_Post_ToLine + // + TB_Post_ToLine.Location = new System.Drawing.Point(7, 88); + TB_Post_ToLine.Name = "TB_Post_ToLine"; + TB_Post_ToLine.Size = new System.Drawing.Size(220, 23); + TB_Post_ToLine.TabIndex = 89; + TB_Post_ToLine.TextChanged += UpdateMailCounters; + // + // L_Post_To + // + L_Post_To.Location = new System.Drawing.Point(3, 64); + L_Post_To.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + L_Post_To.Name = "L_Post_To"; + L_Post_To.Size = new System.Drawing.Size(52, 23); + L_Post_To.TabIndex = 90; + L_Post_To.Text = "To Line:"; + L_Post_To.TextAlign = System.Drawing.ContentAlignment.MiddleRight; + // + // L_Post_Message + // + L_Post_Message.Location = new System.Drawing.Point(5, 113); + L_Post_Message.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + L_Post_Message.Name = "L_Post_Message"; + L_Post_Message.Size = new System.Drawing.Size(58, 23); + L_Post_Message.TabIndex = 91; + L_Post_Message.Text = "Message:"; + L_Post_Message.TextAlign = System.Drawing.ContentAlignment.MiddleRight; + // + // L_Post_From + // + L_Post_From.Location = new System.Drawing.Point(5, 358); + L_Post_From.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + L_Post_From.Name = "L_Post_From"; + L_Post_From.Size = new System.Drawing.Size(64, 23); + L_Post_From.TabIndex = 92; + L_Post_From.Text = "From Line:"; + L_Post_From.TextAlign = System.Drawing.ContentAlignment.MiddleRight; + // + // CB_Post_Language + // + CB_Post_Language.Anchor = System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left; + CB_Post_Language.FormattingEnabled = true; + CB_Post_Language.Location = new System.Drawing.Point(7, 477); + CB_Post_Language.Name = "CB_Post_Language"; + CB_Post_Language.Size = new System.Drawing.Size(115, 23); + CB_Post_Language.TabIndex = 93; + // + // L_Post_UsedSlots + // + L_Post_UsedSlots.Location = new System.Drawing.Point(8, 7); + L_Post_UsedSlots.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + L_Post_UsedSlots.Name = "L_Post_UsedSlots"; + L_Post_UsedSlots.Size = new System.Drawing.Size(74, 23); + L_Post_UsedSlots.TabIndex = 94; + L_Post_UsedSlots.Text = "Used Slots:"; + L_Post_UsedSlots.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // L_Post_UsedSlots_Value + // + L_Post_UsedSlots_Value.AutoSize = true; + L_Post_UsedSlots_Value.Font = new System.Drawing.Font("Segoe UI", 9F); + L_Post_UsedSlots_Value.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft; + L_Post_UsedSlots_Value.Location = new System.Drawing.Point(90, 11); + L_Post_UsedSlots_Value.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + L_Post_UsedSlots_Value.Name = "L_Post_UsedSlots_Value"; + L_Post_UsedSlots_Value.Size = new System.Drawing.Size(57, 15); + L_Post_UsedSlots_Value.TabIndex = 95; + L_Post_UsedSlots_Value.Text = "unknown"; + L_Post_UsedSlots_Value.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // L_Post_SelectedSlot + // + L_Post_SelectedSlot.Location = new System.Drawing.Point(8, 33); + L_Post_SelectedSlot.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + L_Post_SelectedSlot.Name = "L_Post_SelectedSlot"; + L_Post_SelectedSlot.Size = new System.Drawing.Size(81, 23); + L_Post_SelectedSlot.TabIndex = 96; + L_Post_SelectedSlot.Text = "Selected Slot:"; + L_Post_SelectedSlot.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // B_Delete + // + B_Delete.Anchor = System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left; + B_Delete.Location = new System.Drawing.Point(134, 551); + B_Delete.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); + B_Delete.Name = "B_Delete"; + B_Delete.Size = new System.Drawing.Size(92, 32); + B_Delete.TabIndex = 99; + B_Delete.Text = "Delete Mail"; + B_Delete.UseVisualStyleBackColor = true; + B_Delete.Click += B_Delete_Click; + // + // CK_Post_Read + // + CK_Post_Read.Anchor = System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left; + CK_Post_Read.AutoSize = true; + CK_Post_Read.Location = new System.Drawing.Point(7, 412); + CK_Post_Read.Name = "CK_Post_Read"; + CK_Post_Read.Size = new System.Drawing.Size(82, 19); + CK_Post_Read.TabIndex = 100; + CK_Post_Read.Text = "Mark Read"; + CK_Post_Read.UseVisualStyleBackColor = true; + // + // CK_Post_Faved + // + CK_Post_Faved.Anchor = System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left; + CK_Post_Faved.AutoSize = true; + CK_Post_Faved.Location = new System.Drawing.Point(7, 435); + CK_Post_Faved.Name = "CK_Post_Faved"; + CK_Post_Faved.Size = new System.Drawing.Size(82, 19); + CK_Post_Faved.TabIndex = 101; + CK_Post_Faved.Text = "Favourited"; + CK_Post_Faved.UseVisualStyleBackColor = true; + // + // CB_Post_SenderType + // + CB_Post_SenderType.FormattingEnabled = true; + CB_Post_SenderType.Location = new System.Drawing.Point(6, 26); + CB_Post_SenderType.Name = "CB_Post_SenderType"; + CB_Post_SenderType.Size = new System.Drawing.Size(114, 23); + CB_Post_SenderType.TabIndex = 103; + CB_Post_SenderType.SelectedIndexChanged += UpdateSenderType; + // + // L_SenderType + // + L_SenderType.Location = new System.Drawing.Point(5, 3); + L_SenderType.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + L_SenderType.Name = "L_SenderType"; + L_SenderType.Size = new System.Drawing.Size(106, 22); + L_SenderType.TabIndex = 104; + L_SenderType.Text = "Sender Type"; + L_SenderType.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // GB_Post_Villager + // + GB_Post_Villager.Controls.Add(PB_Villager); + GB_Post_Villager.Controls.Add(L_Species); + GB_Post_Villager.Controls.Add(NUD_Species); + GB_Post_Villager.Controls.Add(L_Variant); + GB_Post_Villager.Controls.Add(NUD_Variant); + GB_Post_Villager.Controls.Add(L_InternalName); + GB_Post_Villager.Controls.Add(L_ExternalName); + GB_Post_Villager.Controls.Add(L_Sender_ExternalName); + GB_Post_Villager.Controls.Add(L_Sender_Edit); + GB_Post_Villager.Location = new System.Drawing.Point(6, 104); + GB_Post_Villager.Name = "GB_Post_Villager"; + GB_Post_Villager.Size = new System.Drawing.Size(283, 161); + GB_Post_Villager.TabIndex = 105; + GB_Post_Villager.TabStop = false; + GB_Post_Villager.Text = "Villager"; + // + // GB_Post_Player + // + GB_Post_Player.Controls.Add(TB_Post_PlayerName); + GB_Post_Player.Location = new System.Drawing.Point(130, 6); + GB_Post_Player.Name = "GB_Post_Player"; + GB_Post_Player.Size = new System.Drawing.Size(159, 48); + GB_Post_Player.TabIndex = 106; + GB_Post_Player.TabStop = false; + GB_Post_Player.Text = "Player"; + // + // TB_Post_PlayerName + // + TB_Post_PlayerName.Location = new System.Drawing.Point(6, 19); + TB_Post_PlayerName.Name = "TB_Post_PlayerName"; + TB_Post_PlayerName.Size = new System.Drawing.Size(147, 23); + TB_Post_PlayerName.TabIndex = 113; + // + // L_Post_TimeStamp + // + L_Post_TimeStamp.Location = new System.Drawing.Point(7, 422); + L_Post_TimeStamp.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + L_Post_TimeStamp.Name = "L_Post_TimeStamp"; + L_Post_TimeStamp.Size = new System.Drawing.Size(70, 23); + L_Post_TimeStamp.TabIndex = 107; + L_Post_TimeStamp.Text = "Timestamp:"; + L_Post_TimeStamp.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // L_Post_Language + // + L_Post_Language.Anchor = System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left; + L_Post_Language.Location = new System.Drawing.Point(5, 454); + L_Post_Language.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + L_Post_Language.Name = "L_Post_Language"; + L_Post_Language.Size = new System.Drawing.Size(67, 23); + L_Post_Language.TabIndex = 108; + L_Post_Language.Text = "Language:"; + L_Post_Language.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // L_Post_CountTo + // + L_Post_CountTo.AutoSize = true; + L_Post_CountTo.Font = new System.Drawing.Font("Segoe UI", 9F); + L_Post_CountTo.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft; + L_Post_CountTo.Location = new System.Drawing.Point(231, 92); + L_Post_CountTo.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + L_Post_CountTo.Name = "L_Post_CountTo"; + L_Post_CountTo.Size = new System.Drawing.Size(38, 15); + L_Post_CountTo.TabIndex = 109; + L_Post_CountTo.Text = "count"; + L_Post_CountTo.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // L_Post_CountMsg + // + L_Post_CountMsg.AutoSize = true; + L_Post_CountMsg.Font = new System.Drawing.Font("Segoe UI", 9F); + L_Post_CountMsg.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft; + L_Post_CountMsg.Location = new System.Drawing.Point(231, 138); + L_Post_CountMsg.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + L_Post_CountMsg.Name = "L_Post_CountMsg"; + L_Post_CountMsg.Size = new System.Drawing.Size(38, 15); + L_Post_CountMsg.TabIndex = 110; + L_Post_CountMsg.Text = "count"; + L_Post_CountMsg.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // L_Post_CountFrom + // + L_Post_CountFrom.AutoSize = true; + L_Post_CountFrom.Font = new System.Drawing.Font("Segoe UI", 9F); + L_Post_CountFrom.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft; + L_Post_CountFrom.Location = new System.Drawing.Point(231, 387); + L_Post_CountFrom.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + L_Post_CountFrom.Name = "L_Post_CountFrom"; + L_Post_CountFrom.Size = new System.Drawing.Size(38, 15); + L_Post_CountFrom.TabIndex = 111; + L_Post_CountFrom.Text = "count"; + L_Post_CountFrom.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // GB_Post_NPC + // + GB_Post_NPC.Controls.Add(CB_Post_NPC); + GB_Post_NPC.Location = new System.Drawing.Point(6, 55); + GB_Post_NPC.Name = "GB_Post_NPC"; + GB_Post_NPC.Size = new System.Drawing.Size(283, 48); + GB_Post_NPC.TabIndex = 108; + GB_Post_NPC.TabStop = false; + GB_Post_NPC.Text = "NPC"; + // + // CB_Post_NPC + // + CB_Post_NPC.FormattingEnabled = true; + CB_Post_NPC.Location = new System.Drawing.Point(6, 18); + CB_Post_NPC.Name = "CB_Post_NPC"; + CB_Post_NPC.Size = new System.Drawing.Size(206, 23); + CB_Post_NPC.TabIndex = 107; + CB_Post_NPC.SelectedIndexChanged += UpdateSenderNPC; + // + // TC_Post_SR + // + TC_Post_SR.Anchor = System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right; + TC_Post_SR.Controls.Add(TP_Post_SR); + TC_Post_SR.Controls.Add(TP_Post_Items); + TC_Post_SR.Location = new System.Drawing.Point(300, 32); + TC_Post_SR.Name = "TC_Post_SR"; + TC_Post_SR.SelectedIndex = 0; + TC_Post_SR.Size = new System.Drawing.Size(304, 507); + TC_Post_SR.TabIndex = 112; + // + // TP_Post_SR + // + TP_Post_SR.Controls.Add(GB_Post_ReceiverIsland); + TP_Post_SR.Controls.Add(GB_Post_Stationery); + TP_Post_SR.Controls.Add(GB_Post_ReceiverPlayer); + TP_Post_SR.Controls.Add(L_SenderType); + TP_Post_SR.Controls.Add(GB_Post_NPC); + TP_Post_SR.Controls.Add(CB_Post_SenderType); + TP_Post_SR.Controls.Add(GB_Post_Villager); + TP_Post_SR.Controls.Add(L_Post_TimeStamp); + TP_Post_SR.Controls.Add(GB_Post_Player); + TP_Post_SR.Controls.Add(CAL_PostTimestamp); + TP_Post_SR.Location = new System.Drawing.Point(4, 24); + TP_Post_SR.Name = "TP_Post_SR"; + TP_Post_SR.Padding = new System.Windows.Forms.Padding(3); + TP_Post_SR.Size = new System.Drawing.Size(296, 479); + TP_Post_SR.TabIndex = 0; + TP_Post_SR.Text = "Details"; + TP_Post_SR.UseVisualStyleBackColor = true; + // + // GB_Post_ReceiverIsland + // + GB_Post_ReceiverIsland.Controls.Add(TB_Post_ReceiverIsland); + GB_Post_ReceiverIsland.Location = new System.Drawing.Point(6, 370); + GB_Post_ReceiverIsland.Name = "GB_Post_ReceiverIsland"; + GB_Post_ReceiverIsland.Size = new System.Drawing.Size(283, 48); + GB_Post_ReceiverIsland.TabIndex = 117; + GB_Post_ReceiverIsland.TabStop = false; + GB_Post_ReceiverIsland.Text = "Receiver Island"; + // + // TB_Post_ReceiverIsland + // + TB_Post_ReceiverIsland.Location = new System.Drawing.Point(8, 19); + TB_Post_ReceiverIsland.Name = "TB_Post_ReceiverIsland"; + TB_Post_ReceiverIsland.Size = new System.Drawing.Size(157, 23); + TB_Post_ReceiverIsland.TabIndex = 115; + // + // GB_Post_Stationery + // + GB_Post_Stationery.Controls.Add(CB_Post_Stationery); + GB_Post_Stationery.Location = new System.Drawing.Point(6, 268); + GB_Post_Stationery.Name = "GB_Post_Stationery"; + GB_Post_Stationery.Size = new System.Drawing.Size(283, 48); + GB_Post_Stationery.TabIndex = 114; + GB_Post_Stationery.TabStop = false; + GB_Post_Stationery.Text = "Stationery Type"; + // + // CB_Post_Stationery + // + CB_Post_Stationery.FormattingEnabled = true; + CB_Post_Stationery.Location = new System.Drawing.Point(6, 18); + CB_Post_Stationery.Name = "CB_Post_Stationery"; + CB_Post_Stationery.Size = new System.Drawing.Size(271, 23); + CB_Post_Stationery.TabIndex = 107; + // + // GB_Post_ReceiverPlayer + // + GB_Post_ReceiverPlayer.Controls.Add(TB_Post_ReceiverPlayer); + GB_Post_ReceiverPlayer.Location = new System.Drawing.Point(6, 319); + GB_Post_ReceiverPlayer.Name = "GB_Post_ReceiverPlayer"; + GB_Post_ReceiverPlayer.Size = new System.Drawing.Size(283, 48); + GB_Post_ReceiverPlayer.TabIndex = 113; + GB_Post_ReceiverPlayer.TabStop = false; + GB_Post_ReceiverPlayer.Text = "Receiver Player"; + // + // TB_Post_ReceiverPlayer + // + TB_Post_ReceiverPlayer.Location = new System.Drawing.Point(8, 19); + TB_Post_ReceiverPlayer.Name = "TB_Post_ReceiverPlayer"; + TB_Post_ReceiverPlayer.Size = new System.Drawing.Size(157, 23); + TB_Post_ReceiverPlayer.TabIndex = 115; + // + // TP_Post_Items + // + TP_Post_Items.Controls.Add(GB_Post_AttachedInfo); + TP_Post_Items.Controls.Add(CB_Post_MailType); + TP_Post_Items.Controls.Add(L_Post_MailType); + TP_Post_Items.Location = new System.Drawing.Point(4, 24); + TP_Post_Items.Name = "TP_Post_Items"; + TP_Post_Items.Padding = new System.Windows.Forms.Padding(3); + TP_Post_Items.Size = new System.Drawing.Size(296, 479); + TP_Post_Items.TabIndex = 1; + TP_Post_Items.Text = "Attachments"; + TP_Post_Items.UseVisualStyleBackColor = true; + // + // GB_Post_AttachedInfo + // + GB_Post_AttachedInfo.Controls.Add(ItemEditor); + GB_Post_AttachedInfo.Controls.Add(L_Post_AttachmentSkin); + GB_Post_AttachedInfo.Controls.Add(CB_Post_AttachmentSkin); + GB_Post_AttachedInfo.Location = new System.Drawing.Point(5, 32); + GB_Post_AttachedInfo.Name = "GB_Post_AttachedInfo"; + GB_Post_AttachedInfo.Size = new System.Drawing.Size(288, 443); + GB_Post_AttachedInfo.TabIndex = 114; + GB_Post_AttachedInfo.TabStop = false; + GB_Post_AttachedInfo.Text = "Attachment Info"; + // + // ItemEditor + // + ItemEditor.Anchor = System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right; + ItemEditor.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + ItemEditor.Location = new System.Drawing.Point(7, 65); + ItemEditor.Name = "ItemEditor"; + ItemEditor.Size = new System.Drawing.Size(275, 371); + ItemEditor.TabIndex = 113; + // + // L_Post_AttachmentSkin + // + L_Post_AttachmentSkin.Location = new System.Drawing.Point(7, 14); + L_Post_AttachmentSkin.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + L_Post_AttachmentSkin.Name = "L_Post_AttachmentSkin"; + L_Post_AttachmentSkin.Size = new System.Drawing.Size(201, 23); + L_Post_AttachmentSkin.TabIndex = 114; + L_Post_AttachmentSkin.Text = "Attachment Skin:"; + L_Post_AttachmentSkin.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // CB_Post_AttachmentSkin + // + CB_Post_AttachmentSkin.FormattingEnabled = true; + CB_Post_AttachmentSkin.Location = new System.Drawing.Point(7, 37); + CB_Post_AttachmentSkin.Name = "CB_Post_AttachmentSkin"; + CB_Post_AttachmentSkin.Size = new System.Drawing.Size(240, 23); + CB_Post_AttachmentSkin.TabIndex = 115; + // + // CB_Post_MailType + // + CB_Post_MailType.FormattingEnabled = true; + CB_Post_MailType.Location = new System.Drawing.Point(123, 7); + CB_Post_MailType.Name = "CB_Post_MailType"; + CB_Post_MailType.Size = new System.Drawing.Size(129, 23); + CB_Post_MailType.TabIndex = 113; + CB_Post_MailType.SelectedIndexChanged += UpdateMailType; + // + // L_Post_MailType + // + L_Post_MailType.Location = new System.Drawing.Point(11, 6); + L_Post_MailType.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + L_Post_MailType.Name = "L_Post_MailType"; + L_Post_MailType.Size = new System.Drawing.Size(68, 23); + L_Post_MailType.TabIndex = 113; + L_Post_MailType.Text = "Mail Type:"; + L_Post_MailType.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // B_Import + // + B_Import.Anchor = System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left; + B_Import.Location = new System.Drawing.Point(134, 472); + B_Import.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); + B_Import.Name = "B_Import"; + B_Import.Size = new System.Drawing.Size(92, 31); + B_Import.TabIndex = 113; + B_Import.Text = "Import Mail"; + B_Import.UseVisualStyleBackColor = true; + B_Import.Click += B_Import_Click; + // + // B_Dump + // + B_Dump.Anchor = System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left; + B_Dump.Location = new System.Drawing.Point(134, 436); + B_Dump.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); + B_Dump.Name = "B_Dump"; + B_Dump.Size = new System.Drawing.Size(92, 31); + B_Dump.TabIndex = 114; + B_Dump.Text = "Dump Mail"; + B_Dump.UseVisualStyleBackColor = true; + B_Dump.Click += B_Dump_Click; + // + // B_Post_DumpAll + // + B_Post_DumpAll.Location = new System.Drawing.Point(191, 29); + B_Post_DumpAll.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); + B_Post_DumpAll.Name = "B_Post_DumpAll"; + B_Post_DumpAll.Size = new System.Drawing.Size(88, 32); + B_Post_DumpAll.TabIndex = 115; + B_Post_DumpAll.Text = "Dump All"; + B_Post_DumpAll.UseVisualStyleBackColor = true; + B_Post_DumpAll.Click += B_Dump_Click; + // + // NUD_Post_Slots + // + NUD_Post_Slots.Location = new System.Drawing.Point(88, 34); + NUD_Post_Slots.Name = "NUD_Post_Slots"; + NUD_Post_Slots.Size = new System.Drawing.Size(60, 23); + NUD_Post_Slots.TabIndex = 116; + NUD_Post_Slots.ValueChanged += LoadMailItem; + // + // PostBoxEditor + // + AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F); + AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + ClientSize = new System.Drawing.Size(614, 601); + Controls.Add(NUD_Post_Slots); + Controls.Add(B_Post_DumpAll); + Controls.Add(B_Dump); + Controls.Add(B_Import); + Controls.Add(TC_Post_SR); + Controls.Add(L_Post_CountFrom); + Controls.Add(L_Post_CountMsg); + Controls.Add(L_Post_CountTo); + Controls.Add(L_Post_Language); + Controls.Add(CK_Post_Faved); + Controls.Add(CK_Post_Read); + Controls.Add(B_Delete); + Controls.Add(L_Post_SelectedSlot); + Controls.Add(L_Post_UsedSlots_Value); + Controls.Add(L_Post_UsedSlots); + Controls.Add(CB_Post_Language); + Controls.Add(L_Post_From); + Controls.Add(L_Post_Message); + Controls.Add(L_Post_To); + Controls.Add(TB_Post_ToLine); + Controls.Add(TB_Post_FromLine); + Controls.Add(TB_Post_Message); + Controls.Add(B_Cancel); + Controls.Add(B_Save); + Icon = Properties.Resources.icon; + Name = "PostBoxEditor"; + StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; + Text = "Post Box Editor"; + ((System.ComponentModel.ISupportInitialize)NUD_Variant).EndInit(); + ((System.ComponentModel.ISupportInitialize)NUD_Species).EndInit(); + ((System.ComponentModel.ISupportInitialize)PB_Villager).EndInit(); + GB_Post_Villager.ResumeLayout(false); + GB_Post_Villager.PerformLayout(); + GB_Post_Player.ResumeLayout(false); + GB_Post_Player.PerformLayout(); + GB_Post_NPC.ResumeLayout(false); + TC_Post_SR.ResumeLayout(false); + TP_Post_SR.ResumeLayout(false); + GB_Post_ReceiverIsland.ResumeLayout(false); + GB_Post_ReceiverIsland.PerformLayout(); + GB_Post_Stationery.ResumeLayout(false); + GB_Post_ReceiverPlayer.ResumeLayout(false); + GB_Post_ReceiverPlayer.PerformLayout(); + TP_Post_Items.ResumeLayout(false); + GB_Post_AttachedInfo.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)NUD_Post_Slots).EndInit(); + ResumeLayout(false); + PerformLayout(); + } + + #endregion + + private System.Windows.Forms.DateTimePicker CAL_PostTimestamp; + private System.Windows.Forms.Button B_Cancel; + private System.Windows.Forms.Button B_Save; + private System.Windows.Forms.Label L_Sender_Edit; + private System.Windows.Forms.Label L_Sender_ExternalName; + private System.Windows.Forms.Label L_ExternalName; + private System.Windows.Forms.Label L_InternalName; + private System.Windows.Forms.NumericUpDown NUD_Variant; + private System.Windows.Forms.Label L_Variant; + private System.Windows.Forms.NumericUpDown NUD_Species; + private System.Windows.Forms.Label L_Species; + private System.Windows.Forms.PictureBox PB_Villager; + private System.Windows.Forms.TextBox TB_Post_Message; + private System.Windows.Forms.TextBox TB_Post_FromLine; + private System.Windows.Forms.TextBox TB_Post_ToLine; + private System.Windows.Forms.Label L_Post_To; + private System.Windows.Forms.Label L_Post_Message; + private System.Windows.Forms.Label L_Post_From; + private System.Windows.Forms.ComboBox CB_Post_Language; + private System.Windows.Forms.Label L_Post_UsedSlots; + private System.Windows.Forms.Label L_Post_UsedSlots_Value; + private System.Windows.Forms.Label L_Post_SelectedSlot; + private System.Windows.Forms.Button B_Delete; + private System.Windows.Forms.CheckBox CK_Post_Read; + private System.Windows.Forms.CheckBox CK_Post_Faved; + private System.Windows.Forms.ComboBox CB_Post_SenderType; + private System.Windows.Forms.Label L_SenderType; + private System.Windows.Forms.GroupBox GB_Post_Villager; + private System.Windows.Forms.GroupBox GB_Post_Player; + private System.Windows.Forms.Label L_Post_TimeStamp; + private System.Windows.Forms.Label L_Post_Language; + private System.Windows.Forms.Label L_Post_CountTo; + private System.Windows.Forms.Label L_Post_CountMsg; + private System.Windows.Forms.Label L_Post_CountFrom; + private System.Windows.Forms.GroupBox GB_Post_NPC; + private System.Windows.Forms.ComboBox CB_Post_NPC; + private System.Windows.Forms.TabControl TC_Post_SR; + private System.Windows.Forms.TabPage TP_Post_SR; + private System.Windows.Forms.TabPage TP_Post_Items; + private System.Windows.Forms.GroupBox GB_Post_ReceiverPlayer; + private System.Windows.Forms.GroupBox GB_Post_Stationery; + private System.Windows.Forms.ComboBox CB_Post_Stationery; + private System.Windows.Forms.Label L_Post_MailType; + private System.Windows.Forms.ComboBox CB_Post_MailType; + private System.Windows.Forms.GroupBox GB_Post_AttachedInfo; + private System.Windows.Forms.Label L_Post_AttachmentSkin; + private System.Windows.Forms.ComboBox CB_Post_AttachmentSkin; + private ItemEditor ItemEditor; + private System.Windows.Forms.TextBox TB_Post_PlayerName; + private System.Windows.Forms.Button B_Import; + private System.Windows.Forms.Button B_Dump; + private System.Windows.Forms.Button B_Post_DumpAll; + private System.Windows.Forms.GroupBox GB_Post_ReceiverIsland; + private System.Windows.Forms.TextBox TB_Post_ReceiverIsland; + private System.Windows.Forms.TextBox TB_Post_ReceiverPlayer; + private System.Windows.Forms.NumericUpDown NUD_Post_Slots; + } +} \ No newline at end of file diff --git a/NHSE.WinForms/Subforms/Player/PostBoxEditor.cs b/NHSE.WinForms/Subforms/Player/PostBoxEditor.cs new file mode 100644 index 0000000..595dc42 --- /dev/null +++ b/NHSE.WinForms/Subforms/Player/PostBoxEditor.cs @@ -0,0 +1,572 @@ +using NHSE.Core; +using NHSE.Sprites; +using NHSE.WinForms.Properties; +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Media; +using System.Windows.Forms; +using static NHSE.Core.Mail; + +namespace NHSE.WinForms; + +public partial class PostBoxEditor : Form +{ + private readonly Player Player; + private readonly PostBox PostBox; + + private readonly string[] Wrap; + private readonly string[] Box; + private Item Attachment; + private List PostSlots; + + private string GetUpdatedVillagerInternalName() => VillagerUtil.GetInternalVillagerName((VillagerSpecies)NUD_Species.Value, (int)NUD_Variant.Value); + + public PostBoxEditor(Player p, PostBox pb) + { + InitializeComponent(); + this.TranslateInterface(GameInfo.CurrentLanguage); + + Player = p; + PostBox = pb; + Attachment = new Item(); + + PostSlots = PostBox.GetUsedPostBoxSlots(); + + NUD_Post_Slots.Maximum = MaxSlots; + + L_Post_UsedSlots_Value.Text = PostSlots.Count + " / 300"; + + CB_Post_SenderType.Items.AddRange(NPCTypeList.ToArray()); + var senderNPC = SenderNPCData.Values.Select(npc => GameInfo.Strings.GetVillager(npc.NameConversion)); + CB_Post_NPC.Items.AddRange(senderNPC.ToArray()); + CB_Post_Language.Items.AddRange(BCP47LanguageString.Keys.ToArray()); + + CB_Post_Stationery.Items.AddRange(LetterStationerySkin.Values.Select(skin => GameInfo.Strings.GetMail(skin.name)).ToArray()); + + TB_Post_ToLine.MaxLength = LetterToTextLength; + TB_Post_Message.MaxLength = LetterMessageTextLength; + TB_Post_FromLine.MaxLength = LetterFromTextLength; + + ItemEditor.Initialize(GameInfo.Strings.ItemDataSource, true, true); + + CB_Post_MailType.Items.AddRange(MailTypeList.ToArray()); + + Wrap = ItemWrappingExtended.ItemWrappingSkin.Values.Select(skin => GameInfo.Strings.GetMail(skin.name)).ToArray(); + Box = ItemWrappingExtended.ItemBoxSkin.Values.Select(skin => GameInfo.Strings.GetMail(skin.name)).ToArray(); + + LoadMailItem(); + + DialogResult = DialogResult.Cancel; + } + + private void ChangeVillager(object sender, EventArgs e) => ChangeVillager(); + private void ChangeVillager() + { + var index = (int)NUD_Post_Slots.Value; + + if (PostBox.GetMailCheck((int)NUD_Post_Slots.Value) == false) + { + return; + } + + if (CB_Post_SenderType.SelectedIndex != 0) + { + var spVal = (int)NUD_Species.Value; + var vaVal = (int)NUD_Variant.Value; + + if (spVal >= 35 || (spVal == 25 && vaVal == 0) || (spVal == 22 && vaVal == 0)) + { + CB_Post_SenderType.SelectedIndex = 2; + } + else + { + CB_Post_SenderType.SelectedIndex = 1; + } + } + + var name = GetUpdatedVillagerInternalName(); + L_InternalName.Text = name; + L_ExternalName.Text = GameInfo.Strings.GetVillager(name); + + var sprite = VillagerSprite.GetVillagerSprite(name); + + if (CB_Post_SenderType.SelectedIndex == 1) // Villager + { + GB_Post_NPC.Enabled = false; + GB_Post_Player.Enabled = false; + + PB_Villager.Image = sprite; + + CB_Post_SenderType.SelectedIndex = 1; + CB_Post_NPC.SelectedIndex = -1; + } + else if (CB_Post_SenderType.SelectedIndex == 2) // NPC + { + GB_Post_NPC.Enabled = true; + GB_Post_Player.Enabled = false; + + + var speciesValue = (int)NUD_Species.Value; + if (!SenderNPCData.TryGetValue(speciesValue, out var npcData)) + { + PB_Villager.Image = sprite; + CB_Post_SenderType.SelectedIndex = 2; + CB_Post_NPC.SelectedIndex = -1; + return; + } + name = npcData.Image; + + sprite = VillagerSprite.GetVillagerSprite(name); + var nameNPC = SenderNPCData[(int)NUD_Species.Value].NameConversion; + L_InternalName.Text = nameNPC; + L_ExternalName.Text = GameInfo.Strings.GetVillager(nameNPC); + + PB_Villager.Image = sprite; + + CB_Post_SenderType.SelectedIndex = 2; + CB_Post_NPC.SelectedIndex = npcData.MappingIndex; + } + else if (CB_Post_SenderType.SelectedIndex == 0) // Player + { + GB_Post_NPC.Enabled = false; + GB_Post_Player.Enabled = true; + + sprite = VillagerSprite.GetVillagerSprite("Leaf"); + L_InternalName.Text = PostBox.GetSenderName(index); + L_ExternalName.Text = PostBox.GetSenderName(index); + + PB_Villager.Image = sprite; + + CB_Post_SenderType.SelectedIndex = 0; + CB_Post_NPC.SelectedIndex = -1; + } + else + { + var senderType = PostBox.GetSenderType(index); + throw new NotSupportedException($"Unknown sender type: 0x{senderType:X2}"); + } + } + + private void UpdateSenderNPC(object sender, EventArgs e) + { + var index = (int)NUD_Post_Slots.Value; + + var npcSelected = SenderNPCData.FirstOrDefault(x => x.Value.MappingIndex == CB_Post_NPC.SelectedIndex).Key; + NUD_Species.Value = npcSelected; + } + + private void UpdateMailType(object sender, EventArgs e) + { + if (CB_Post_MailType.SelectedIndex == 1) // Letter + { + CB_Post_Stationery.Enabled = true; + CB_Post_AttachmentSkin.Items.Clear(); + CB_Post_AttachmentSkin.Items.AddRange(Wrap); + CB_Post_AttachmentSkin.SelectedIndex = 0; + } + else if (CB_Post_MailType.SelectedIndex == 0) // Package + { + CB_Post_Stationery.Enabled = false; + CB_Post_AttachmentSkin.Items.Clear(); + CB_Post_AttachmentSkin.Items.AddRange(Box); + CB_Post_AttachmentSkin.SelectedIndex = 0; + CB_Post_Stationery.SelectedIndex = -1; + } + } + + private void UpdateSenderType(object sender, EventArgs e) + { + if (CB_Post_SenderType.SelectedIndex == 0) // Player + { + GB_Post_NPC.Enabled = false; + GB_Post_Player.Enabled = true; + L_InternalName.Text = "player"; + L_ExternalName.Text = "Player"; + PB_Villager.Image = null; + } + else if (CB_Post_SenderType.SelectedIndex == 1) // Villager + { + GB_Post_NPC.Enabled = false; + GB_Post_Player.Enabled = false; + } + else + { + GB_Post_NPC.Enabled = true; + GB_Post_Player.Enabled = false; + } + } + + private void UpdateMailCounters(object sender, EventArgs e) => UpdateMailCounters(); + private void UpdateMailCounters() + { + void UpdateCounter(Label label, TextBox textBox, int maxLength) + { + var currentLength = textBox.Text.Replace("\r\n", "\n").Length; + label.Text = currentLength + " / " + maxLength; + label.ForeColor = currentLength > maxLength + ? System.Drawing.Color.Red + : System.Drawing.SystemColors.WindowText; + } + + UpdateCounter(L_Post_CountTo, TB_Post_ToLine, LetterToTextLength); + UpdateCounter(L_Post_CountMsg, TB_Post_Message, LetterMessageTextLength); + UpdateCounter(L_Post_CountFrom, TB_Post_FromLine, LetterFromTextLength); + } + + private void ResetInterface() + { + L_InternalName.Text = ""; + L_ExternalName.Text = ""; + PB_Villager.Image = null; + TB_Post_ToLine.Text = ""; + TB_Post_Message.Text = ""; + TB_Post_FromLine.Text = ""; + CK_Post_Read.Checked = false; + CK_Post_Faved.Checked = false; + CAL_PostTimestamp.Value = DateTime.Now; + CB_Post_SenderType.SelectedIndex = -1; + CB_Post_NPC.SelectedIndex = -1; + TB_Post_PlayerName.Text = ""; + TB_Post_ReceiverPlayer.Text = ""; + TB_Post_ReceiverIsland.Text = ""; + CB_Post_Language.SelectedIndex = -1; + CB_Post_Stationery.SelectedIndex = -1; + CB_Post_MailType.SelectedIndex = -1; + CB_Post_AttachmentSkin.Items.Clear(); + } + + + private void LoadMailItem(object sender, EventArgs e) => LoadMailItem(); + private void LoadMailItem() + { + ResetInterface(); + + if (PostBox.GetUsedPostBoxSlots().Count == 0) + { + MessageBox.Show("No mail items found in the post box."); + return; + } + + if(PostBox.GetMailCheck((int)NUD_Post_Slots.Value) == false) + { + return; + } + + LoadVillagerFromMail(); + LoadMailText(); + LoadMailProperties(); + LoadMailAttachment(); + } + + private void LoadVillagerFromMail() + { + var index = (int)NUD_Post_Slots.Value; + NUD_Species.Value = PostBox.GetVillagerSenderSpeciesId(index); + NUD_Variant.Value = PostBox.GetVillagerSenderVariantId(index); + + CB_Post_SenderType.SelectedIndex = PostBox.GetSenderType(index); + + ChangeVillager(); + } + + private void LoadMailText() + { + var index = (int)NUD_Post_Slots.Value; + + var toText = PostBox.GetLetterToLineText(index); + TB_Post_ToLine.Text = toText; + var msgText = PostBox.GetLetterMessageText(index); + TB_Post_Message.Text = msgText.Replace("\n", "\r\n"); + var fromText = PostBox.GetLetterFromLineText(index); + TB_Post_FromLine.Text = fromText; + + UpdateMailCounters(); + } + + private void LoadMailProperties() + { + var index = (int)NUD_Post_Slots.Value; + + CK_Post_Read.Checked = PostBox.GetMailReadStatus(index); + CK_Post_Faved.Checked = PostBox.GetMailFavStatus(index); + CAL_PostTimestamp.Value = PostBox.GetTimestamp(index); + CB_Post_SenderType.SelectedIndex = PostBox.GetSenderType(index); + + SenderNPCData.TryGetValue((int)NUD_Species.Value, out var npcData); + + if (CB_Post_SenderType.SelectedIndex == 2 && npcData != null) // NPC + CB_Post_NPC.SelectedIndex = npcData.MappingIndex; + + if (CB_Post_SenderType.SelectedIndex == 0) // Player + TB_Post_PlayerName.Text = PostBox.GetSenderName(index); + + TB_Post_ReceiverPlayer.Text = PostBox.GetReceiverPlayerName(index); + TB_Post_ReceiverIsland.Text = PostBox.GetReceiverIslandName(index); + + var lang = PostBox.GetMailLanguageString(index); + if (lang != null && BCP47LanguageString.ContainsKey(lang)) + { + CB_Post_Language.SelectedIndex = BCP47LanguageString[lang]; + } + else + { + CB_Post_Language.SelectedIndex = -1; + } + + var stationerySkin = PostBox.GetMailStationerySkin(index); + if (LetterStationerySkin.ContainsKey(stationerySkin)) + { + CB_Post_Stationery.SelectedIndex = LetterStationerySkin[stationerySkin].index; + } + else + { + CB_Post_Stationery.SelectedIndex = -1; + } + } + + private void LoadMailAttachment() + { + var index = (int)NUD_Post_Slots.Value; + + var attachedItemId = PostBox.GetAttachedItem(index); + Attachment = ItemEditor.LoadItem(attachedItemId); + + var wrap = PostBox.GetItemWrappingType(index); + var letterType = PostBox.GetMailType(index); + + CB_Post_MailType.SelectedIndex = Convert.ToInt32(letterType); + + if (CB_Post_MailType.SelectedIndex == 1) + { + CB_Post_Stationery.Enabled = true; + CB_Post_AttachmentSkin.Items.Clear(); + CB_Post_AttachmentSkin.Items.AddRange(Wrap); + CB_Post_AttachmentSkin.SelectedIndex = ItemWrappingExtended.ItemWrappingSkin[wrap].index; + } + if (CB_Post_MailType.SelectedIndex == 0) + { + CB_Post_Stationery.Enabled = false; + CB_Post_AttachmentSkin.Items.Clear(); + CB_Post_AttachmentSkin.Items.AddRange(Box); + CB_Post_AttachmentSkin.SelectedIndex = ItemWrappingExtended.ItemBoxSkin[wrap].index; + CB_Post_Stationery.SelectedIndex = -1; + } + } + + private void UpdateMailSlotIndex(int index) + { + if (!PostBox.GetMailCheck(index) || PostBox.GetPostBoxSortIndex(index) == 0x00) + { + var nextSlot = PostBox.GetLatestUniqueId(); + PostBox.SetPostBoxSortIndex(index, (byte)nextSlot); + PostBox.SetLatestUniqueId(nextSlot + 1); + } + } + + private void UpdateMailSenderInfo(int index) + { + PostBox.SetSenderType(index, (byte)CB_Post_SenderType.SelectedIndex); + if (CB_Post_SenderType.SelectedIndex == 0x00) // Player + { + PostBox.SetPlayerSenderIslandId(index, Player.Personal.TownID); + PostBox.SetPlayerSenderIslandName(index, Player.Personal.TownName); + PostBox.SetSenderId(index, Player.Personal.PlayerID); + PostBox.SetSenderName(index, TB_Post_PlayerName.Text); + } + + if (CB_Post_SenderType.SelectedIndex == 0x01) // Villager + { + PostBox.SetVillagerSenderSpeciesId(index, (int)NUD_Species.Value); + PostBox.SetVillagerSenderVariantId(index, (int)NUD_Variant.Value); + PostBox.SetNPCSenderIslandId(index, Player.Personal.TownID); + PostBox.SetNPCSenderIslandName(index, Player.Personal.TownName); + PostBox.SetSenderId(index, 0x02); + // Don't set a sender nameNPC, this is blank for villagers. + } + + if (CB_Post_SenderType.SelectedIndex == 0x02) // NPC + { + PostBox.SetVillagerSenderSpeciesId(index, (int)NUD_Species.Value); + PostBox.SetVillagerSenderVariantId(index, (int)NUD_Variant.Value); + // Don't set a sender island ID or nameNPC, this is blank for NPCs. + PostBox.SetSenderId(index, 0x00); + // Don't set a sender nameNPC, this is blank for NPCs. + } + } + + private void UpdateMailAttachment(int index) + { + PostBox.SetAttachedItem(index, ItemEditor.SetItem(Attachment)); + + var selectedSkinIndex = CB_Post_AttachmentSkin.SelectedIndex; + if (CB_Post_MailType.SelectedIndex == 1) + { + PostBox.SetMailType(index, true); + var attachmentSkin = ItemWrappingExtended.ItemWrappingSkin.FirstOrDefault(x => x.Value.index == selectedSkinIndex); + if (attachmentSkin.Value != null) + { + PostBox.SetItemWrappingType(index, (byte)attachmentSkin.Key); + } + + var letterSkinIndex = CB_Post_Stationery.SelectedIndex; + var letterSkin = (ushort)LetterStationerySkin.FirstOrDefault(skin => skin.Value.index == letterSkinIndex).Key; + PostBox.SetMailStationerySkin(index, letterSkin); + } + else if (CB_Post_MailType.SelectedIndex == 0) + { + PostBox.SetMailType(index, false); + var attachmentSkin = ItemWrappingExtended.ItemBoxSkin.FirstOrDefault(x => x.Value.index == selectedSkinIndex); + if (attachmentSkin.Value != null) + { + PostBox.SetItemWrappingType(index, (byte)attachmentSkin.Key); + } + + PostBox.SetMailStationerySkin(index, 0); + } + } + + private void UpdateMailReceiverInfo(int index) + { + PostBox.SetReceiverPlayerName(index, TB_Post_ReceiverPlayer.Text); + PostBox.SetReceiverPlayerId(index, Player.Personal.PlayerID); + PostBox.SetReceiverIslandName(index, TB_Post_ReceiverIsland.Text); + PostBox.SetReceiverIslandId(index, Player.Personal.TownID); + } + + private void UpdateMailText(int index) + { + var langString = BCP47LanguageString.FirstOrDefault(x => x.Value == CB_Post_Language.SelectedIndex).Key; + PostBox.SetMailLanguageString(index, langString, CB_Post_SenderType.SelectedIndex == 0); + PostBox.SetLetterToLineText(index, TB_Post_ToLine.Text.Replace("\r\n", "\n").Replace("\n", "")); + PostBox.SetLetterMessageText(index, TB_Post_Message.Text.Replace("\r\n", "\n")); + PostBox.SetLetterFromLineText(index, TB_Post_FromLine.Text.Replace("\r\n", "\n").Replace("\n", "")); + } + + private void UpdateMailItem(object sender, EventArgs e) + { + var index = (int)NUD_Post_Slots.Value; + + UpdateMailSlotIndex(index); + + PostBox.WipeTxRxSection(index); + + PostBox.SetMailReadStatus(index, CK_Post_Read.Checked); + PostBox.SetMailFavStatus(index, CK_Post_Faved.Checked); + + UpdateMailSenderInfo(index); + + UpdateMailReceiverInfo(index); + + UpdateMailAttachment(index); + + UpdateMailText(index); + + PostBox.SetTimeStamp(index, CAL_PostTimestamp.Value); + } + + private void ImportPostItem(int index) + { + var currentIndex = PostBox.GetPostBoxSortIndex(index); + int currentUniqueId = PostBox.GetLatestUniqueId(); + + currentUniqueId = Math.Min(currentUniqueId, 299); // Cap unique ID to prevent overflow and ensure it stays within the 300 mail item limit. + + if(currentIndex != 0x00 || PostBox.GetMailCheck(index)) + { + using var ofd = new OpenFileDialog(); + ofd.Filter = "New Horizons Post (*.nhpb)|*.nhpb|All files (*.*)|*.*"; + if (ofd.ShowDialog() != DialogResult.OK) + return; + var d = File.ReadAllBytes(ofd.FileName); + PostBox.SetIndividualLetter(index, d); + PostBox.SetPostBoxSortIndex(index, (byte)currentIndex); + } + else + { + using var ofd = new OpenFileDialog(); + ofd.Filter = "New Horizons Post (*.nhpb)|*.nhpb|All files (*.*)|*.*"; + if (ofd.ShowDialog() != DialogResult.OK) + return; + var d = File.ReadAllBytes(ofd.FileName); + PostBox.SetIndividualLetter(index, d); + PostBox.SetPostBoxSortIndex(index, (byte)currentUniqueId); + PostBox.SetLatestUniqueId(Math.Min(currentUniqueId + 1, 299)); + } + LoadMailItem(); + } + private void DumpPostItem(int index) + { + var name = Player.Personal.PlayerName + "_Post_Slot" + index + "_" + DateTime.Now.ToString("yyyyMMddHHmmss"); + using var sfd = new SaveFileDialog(); + sfd.Filter = "New Horizons Post (*.nhpb)|*.nhpb|All files (*.*)|*.*"; + sfd.FileName = $"{name}.nhpb"; + if (sfd.ShowDialog() != DialogResult.OK) + return; + + var d = PostBox.GetIndividualLetter(index); + File.WriteAllBytes(sfd.FileName, d); + } + + private void DumpAllPostItems() + { + using var fbd = new FolderBrowserDialog(); + if (fbd.ShowDialog() != DialogResult.OK) + return; + var postSlots = PostBox.GetUsedPostBoxSlots(); + postSlots.ForEach(i => + { + var name = Player.Personal.PlayerName + "_Post_Slot" + i + "_" + DateTime.Now.ToString("yyyyMMddHHmmss"); + var path = Path.Combine(fbd.SelectedPath, $"{name}.nhpb"); + var d = PostBox.GetIndividualLetter(i); + File.WriteAllBytes(path, d); + }); + } + + private void B_Dump_Click(object sender, EventArgs e) + { + var index = (int)NUD_Post_Slots.Value; + + if (sender == B_Post_DumpAll) + { + DumpAllPostItems(); + SystemSounds.Asterisk.Play(); + } + else + { + DumpPostItem(index); + SystemSounds.Asterisk.Play(); + } + } + + private void B_Import_Click(object sender, EventArgs e) + { + var index = (int)NUD_Post_Slots.Value; + ImportPostItem(index); + SystemSounds.Asterisk.Play(); + } + + private void B_Delete_Click(object sender, EventArgs e) + { + var index = (int)NUD_Post_Slots.Value; + + var arr = new byte[Mail.SIZE]; + arr[AttachedItemID] = 0xFE; + arr[AttachedItemID + 1] = 0xFF; + arr[PostBoxSortIndex - 4] = 0xFE; + arr[PostBoxSortIndex - 3] = 0xFF; + Span bytes = arr; + PostBox.SetIndividualLetter(index, bytes); + + SystemSounds.Asterisk.Play(); + } + + private void B_Save_Click(object sender, EventArgs e) + { + UpdateMailItem(sender, e); + SystemSounds.Asterisk.Play(); + } + + private void B_Cancel_Click(object sender, EventArgs e) => Close(); +} diff --git a/NHSE.WinForms/Subforms/Player/PostBoxEditor.resx b/NHSE.WinForms/Subforms/Player/PostBoxEditor.resx new file mode 100644 index 0000000..68d1a99 --- /dev/null +++ b/NHSE.WinForms/Subforms/Player/PostBoxEditor.resx @@ -0,0 +1,123 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + \ No newline at end of file diff --git a/NHSE.WinForms/Subforms/SingleItemEditor.Designer.cs b/NHSE.WinForms/Subforms/SingleItemEditor.Designer.cs index c027390..0faed43 100644 --- a/NHSE.WinForms/Subforms/SingleItemEditor.Designer.cs +++ b/NHSE.WinForms/Subforms/SingleItemEditor.Designer.cs @@ -28,56 +28,55 @@ protected override void Dispose(bool disposing) /// private void InitializeComponent() { - this.B_Save = new System.Windows.Forms.Button(); - this.B_Cancel = new System.Windows.Forms.Button(); - this.ItemEditor = new NHSE.WinForms.ItemEditor(); - this.SuspendLayout(); + B_Save = new System.Windows.Forms.Button(); + B_Cancel = new System.Windows.Forms.Button(); + ItemEditor = new ItemEditor(); + SuspendLayout(); // // B_Save // - this.B_Save.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); - this.B_Save.Location = new System.Drawing.Point(92, 236); - this.B_Save.Name = "B_Save"; - this.B_Save.Size = new System.Drawing.Size(75, 31); - this.B_Save.TabIndex = 1; - this.B_Save.Text = "Save"; - this.B_Save.UseVisualStyleBackColor = true; - this.B_Save.Click += new System.EventHandler(this.B_Save_Click); + B_Save.Anchor = System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right; + B_Save.Location = new System.Drawing.Point(94, 339); + B_Save.Name = "B_Save"; + B_Save.Size = new System.Drawing.Size(75, 31); + B_Save.TabIndex = 1; + B_Save.Text = "Save"; + B_Save.UseVisualStyleBackColor = true; + B_Save.Click += B_Save_Click; // // B_Cancel // - this.B_Cancel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); - this.B_Cancel.Location = new System.Drawing.Point(11, 236); - this.B_Cancel.Name = "B_Cancel"; - this.B_Cancel.Size = new System.Drawing.Size(75, 31); - this.B_Cancel.TabIndex = 2; - this.B_Cancel.Text = "Cancel"; - this.B_Cancel.UseVisualStyleBackColor = true; - this.B_Cancel.Click += new System.EventHandler(this.B_Cancel_Click); + B_Cancel.Anchor = System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right; + B_Cancel.Location = new System.Drawing.Point(13, 339); + B_Cancel.Name = "B_Cancel"; + B_Cancel.Size = new System.Drawing.Size(75, 31); + B_Cancel.TabIndex = 2; + B_Cancel.Text = "Cancel"; + B_Cancel.UseVisualStyleBackColor = true; + B_Cancel.Click += B_Cancel_Click; // - // itemEditor1 + // ItemEditor // - this.ItemEditor.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; - this.ItemEditor.Location = new System.Drawing.Point(12, 12); - this.ItemEditor.Name = "ItemEditor"; - this.ItemEditor.Size = new System.Drawing.Size(155, 210); - this.ItemEditor.TabIndex = 3; + ItemEditor.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + ItemEditor.Location = new System.Drawing.Point(12, 12); + ItemEditor.Name = "ItemEditor"; + ItemEditor.Size = new System.Drawing.Size(157, 316); + ItemEditor.TabIndex = 3; // // SingleItemEditor // - this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Inherit; - this.ClientSize = new System.Drawing.Size(179, 279); - this.Controls.Add(this.ItemEditor); - this.Controls.Add(this.B_Cancel); - this.Controls.Add(this.B_Save); - this.Icon = global::NHSE.WinForms.Properties.Resources.icon; - this.MaximizeBox = false; - this.MinimizeBox = false; - this.Name = "SingleItemEditor"; - this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; - this.Text = "Item Editor"; - this.ResumeLayout(false); + AutoScaleMode = System.Windows.Forms.AutoScaleMode.Inherit; + ClientSize = new System.Drawing.Size(181, 382); + Controls.Add(ItemEditor); + Controls.Add(B_Cancel); + Controls.Add(B_Save); + Icon = Properties.Resources.icon; + MaximizeBox = false; + MinimizeBox = false; + Name = "SingleItemEditor"; + StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; + Text = "Item Editor"; + ResumeLayout(false); } diff --git a/NHSE.WinForms/Subforms/SingleItemEditor.resx b/NHSE.WinForms/Subforms/SingleItemEditor.resx index 1af7de1..8b2ff64 100644 --- a/NHSE.WinForms/Subforms/SingleItemEditor.resx +++ b/NHSE.WinForms/Subforms/SingleItemEditor.resx @@ -1,17 +1,17 @@  -