Skip to content

Commit 0c2f1a3

Browse files
committed
fix crash?
1 parent da03129 commit 0c2f1a3

File tree

7 files changed

+149
-119
lines changed

7 files changed

+149
-119
lines changed

.github/workflows/build.yml

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,8 +41,7 @@ jobs:
4141
- name: Build the mod
4242
uses: geode-sdk/build-geode-mod@main
4343
with:
44-
#sdk: 'nightly'
45-
#cli: 'v3.0.0-beta.1'
44+
build-config: 'RelWithDebInfo'
4645
bindings: geode-sdk/bindings
4746
export-pdb: true
4847
bindings-ref: main

changelog.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,8 @@
11
# Changelog
2+
## <cj>v1.4.2</c> <cb>(2025-03-25)</c>
3+
* <cg>Added</c> notification announcements.
4+
* <cy>Fixed</c> random crash with notifications upon reconnecting.
5+
26
## <cj>v1.4.1</c> <cb>(2025-03-24)</c>
37
* <cg>Added</c> past notifications + setting.
48
* <cy>Updated</c> notifications system.

include/RateEvent.hpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,8 @@ namespace GDUtils::Events {
3535
return EventType::List;
3636
case 6: // Event
3737
return EventType::Event;
38+
case 7: // Announcement
39+
return EventType::Announcement;
3840
}
3941
}
4042
static int typeToInt(EventType type) {
@@ -55,6 +57,8 @@ namespace GDUtils::Events {
5557
return 5;
5658
case EventType::Event: // Event
5759
return 6;
60+
case EventType::Announcement: // Announcement
61+
return 7;
5862
}
5963
}
6064
};

include/Types.hpp

Lines changed: 43 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ enum EventType {
88
smallChest,
99
largeChest,
1010
List,
11+
Announcement,
1112
NA
1213
};
1314

@@ -33,17 +34,6 @@ template<>
3334
struct matjson::Serialize<EventData> {
3435
static geode::Result<EventData> fromJson(matjson::Value const& value) {
3536
EventData data;
36-
if (value.contains("demon")) {
37-
if (value["demon"].asUInt().isErr()) {
38-
GEODE_UNWRAP_INTO(data.demon, value["demon"].asBool());
39-
} else {
40-
GEODE_UNWRAP_INTO(auto demon, value["demon"].asUInt());
41-
data.demon = demon == 1;
42-
}
43-
}
44-
GEODE_UNWRAP_INTO(data.starsum, value["starsum"].asUInt());
45-
GEODE_UNWRAP_INTO(data.stars, value["stars"].asUInt());
46-
GEODE_UNWRAP_INTO(data.rate, value["rate"].asUInt());
4737
GEODE_UNWRAP_INTO(auto type, value["type"].asUInt());
4838
// yeahhhh im getting linker errors ok
4939
switch (type) {
@@ -71,35 +61,52 @@ struct matjson::Serialize<EventData> {
7161
case 6: // Event
7262
data.type = EventType::Event;
7363
break;
64+
case 7: // Announcement
65+
data.type = EventType::Announcement;
66+
break;
7467
}
7568
GEODE_UNWRAP_INTO(data.title, value["title"].asString());
76-
GEODE_UNWRAP_INTO(data.sprite, value["sprite"].asString());
77-
GEODE_UNWRAP_INTO(data.level_name, value["level_name"].asString());
78-
GEODE_UNWRAP_INTO(data.level_creator, value["level_creator"].asString());
79-
GEODE_UNWRAP_INTO(data.rate, value["rate"].asUInt());
80-
GEODE_UNWRAP_INTO(data.coins, value["coins"].asUInt());
81-
GEODE_UNWRAP_INTO(data.verified_coins, value["verified_coins"].asUInt());
82-
if (value.contains("platformer")) {
83-
if (value["platformer"].asUInt().isErr()) {
84-
GEODE_UNWRAP_INTO(data.platformer, value["platformer"].asBool());
85-
} else {
86-
GEODE_UNWRAP_INTO(auto platformer, value["platformer"].asUInt());
87-
data.platformer = platformer == 1;
88-
}
69+
if (value.contains("sprite")) {
70+
GEODE_UNWRAP_INTO(data.sprite, value["sprite"].asString());
8971
}
90-
if (value.contains("level_id")) {
91-
if (value["level_id"].asString().isErr()) {
92-
GEODE_UNWRAP_INTO(data.level_id, value["level_id"].asInt());
93-
} else {
94-
GEODE_UNWRAP_INTO(auto level_id, value["level_id"].asString());
95-
data.level_id = geode::utils::numFromString<int>(level_id).unwrapOrDefault();
72+
if (data.type != EventType::Announcement) {
73+
if (value.contains("demon")) {
74+
if (value["demon"].asUInt().isErr()) {
75+
GEODE_UNWRAP_INTO(data.demon, value["demon"].asBool());
76+
} else {
77+
GEODE_UNWRAP_INTO(auto demon, value["demon"].asUInt());
78+
data.demon = demon == 1;
79+
}
80+
}
81+
GEODE_UNWRAP_INTO(data.starsum, value["starsum"].asUInt());
82+
GEODE_UNWRAP_INTO(data.stars, value["stars"].asUInt());
83+
GEODE_UNWRAP_INTO(data.rate, value["rate"].asUInt());
84+
GEODE_UNWRAP_INTO(data.level_name, value["level_name"].asString());
85+
GEODE_UNWRAP_INTO(data.level_creator, value["level_creator"].asString());
86+
GEODE_UNWRAP_INTO(data.coins, value["coins"].asUInt());
87+
GEODE_UNWRAP_INTO(data.verified_coins, value["verified_coins"].asUInt());
88+
if (value.contains("platformer")) {
89+
if (value["platformer"].asUInt().isErr()) {
90+
GEODE_UNWRAP_INTO(data.platformer, value["platformer"].asBool());
91+
} else {
92+
GEODE_UNWRAP_INTO(auto platformer, value["platformer"].asUInt());
93+
data.platformer = platformer == 1;
94+
}
95+
}
96+
if (value.contains("level_id")) {
97+
if (value["level_id"].asString().isErr()) {
98+
GEODE_UNWRAP_INTO(data.level_id, value["level_id"].asInt());
99+
} else {
100+
GEODE_UNWRAP_INTO(auto level_id, value["level_id"].asString());
101+
data.level_id = geode::utils::numFromString<int>(level_id).unwrapOrDefault();
102+
}
103+
}
104+
if (value.contains("levels_list")) {
105+
GEODE_UNWRAP_INTO(data.levels_list, value["levels_list"].asString());
106+
}
107+
if (value.contains("maxToCompleteList")) {
108+
GEODE_UNWRAP_INTO(data.maxToCompleteList, value["maxToCompleteList"].asInt());
96109
}
97-
}
98-
if (value.contains("levels_list")) {
99-
GEODE_UNWRAP_INTO(data.levels_list, value["levels_list"].asString());
100-
}
101-
if (value.contains("maxToCompleteList")) {
102-
GEODE_UNWRAP_INTO(data.maxToCompleteList, value["maxToCompleteList"].asInt());
103110
}
104111
return geode::Ok(data);
105112
}

mod.json

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"geode": "4.3.1",
3-
"version": "v1.4.1",
3+
"version": "v1.4.2",
44
"gd": {
55
"win": "2.2074",
66
"mac": "2.2074",
@@ -133,6 +133,12 @@
133133
"type": "bool",
134134
"default": true
135135
},
136+
"announcement": {
137+
"name": "Announcement Notifications",
138+
"description": "Whether or not to notify about new <cy>Announcements from GDUtils</c>",
139+
"type": "bool",
140+
"default": true
141+
},
136142
"sfx": {
137143
"name": "Notification SFX",
138144
"description": "If notifications should play a sound when they are shown.",

src/Notifications/EventsPush.cpp

Lines changed: 36 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -397,6 +397,7 @@ bool EventsPush::init(EventData data) {
397397
bool smallChest = Mod::get()->template getSettingValue<bool>("smallChest");
398398
bool largeChest = Mod::get()->template getSettingValue<bool>("largeChest");
399399
bool list = Mod::get()->template getSettingValue<bool>("newListRate");
400+
bool announcement = Mod::get()->template getSettingValue<bool>("announcement");
400401
eventType = data.type;
401402
if (eventType == EventType::Rate && !newRate) {
402403
EventsPush::eventCompletedCallback(scene);
@@ -426,7 +427,10 @@ bool EventsPush::init(EventData data) {
426427
EventsPush::eventCompletedCallback(scene);
427428
return true;
428429
}
429-
430+
if (eventType == EventType::Announcement && !announcement) {
431+
EventsPush::eventCompletedCallback(scene);
432+
return true;
433+
}
430434
auto director = CCDirector::sharedDirector();
431435
auto winSize = director->getWinSize();
432436
auto bg = cocos2d::extension::CCScale9Sprite::create(data.sprite.c_str(), { .0f, .0f, 80.0f, 80.0f, });
@@ -456,7 +460,7 @@ bool EventsPush::init(EventData data) {
456460

457461
auto node = CCNode::create();
458462

459-
if (eventType != EventType::smallChest && eventType != EventType::largeChest) {
463+
if (eventType != EventType::smallChest && eventType != EventType::largeChest && eventType != EventType::Announcement) {
460464
CCSprite* diffFace;
461465
GJDifficultySprite* mythic = nullptr;
462466
if (!data.demon) {
@@ -721,35 +725,44 @@ bool EventsPush::init(EventData data) {
721725
title->setPosition({ -54, 26 });
722726
} else if (eventType == EventType::List) {
723727
title->setPosition({ -27, 27 });
728+
} else if (eventType == EventType::Announcement) {
729+
title->setString("Announcement");
730+
title->setPosition({ -65, 26 });
731+
auto subtitle = cocos2d::CCLabelBMFont::create(data.title.c_str(), "bigFont.fnt");
732+
subtitle->limitLabelWidth(200, 0.46f, 0.1f);
733+
subtitle->setAnchorPoint({ 0, 0.5 });
734+
subtitle->setPosition({ -65, 10 });
735+
node->addChild(subtitle);
724736
} else {
725737
title->setPosition({ -27, 23 });
726738
}
727739
title->setScale(.575F);
728740
title->setAnchorPoint({ 0, 0.5 });
729741
node->addChild(title);
742+
if (eventType != EventType::Announcement) {
743+
auto level_title = cocos2d::CCLabelBMFont::create(data.level_name.c_str(), "bigFont.fnt");
744+
if (eventType == EventType::List) {
745+
level_title->setPosition({ -27, 11 });
746+
} else {
747+
level_title->setPosition({ -27, 3 });
748+
}
749+
level_title->setScale(.46F);
750+
751+
level_title->setAnchorPoint({ 0, 0.5 });
730752

731-
auto level_title = cocos2d::CCLabelBMFont::create(data.level_name.c_str(), "bigFont.fnt");
732-
if (eventType == EventType::List) {
733-
level_title->setPosition({ -27, 11 });
734-
} else {
735-
level_title->setPosition({ -27, 3 });
753+
auto level_by = cocos2d::CCLabelBMFont::create(data.level_creator.c_str(), "goldFont.fnt");
754+
if (eventType == EventType::List) {
755+
level_by->setPosition({ -27, -2 });
756+
} else {
757+
level_by->setPosition({ -27, -11 });
758+
}
759+
level_by->setScale(.46F);
760+
level_by->limitLabelWidth(120, 0.46f, 0.1f);
761+
level_by->setAnchorPoint({ 0, 0.5 });
762+
node->addChild(level_by);
763+
level_title->limitLabelWidth(120, 0.46f, 0.1f);
764+
node->addChild(level_title);
736765
}
737-
level_title->setScale(.46F);
738-
739-
level_title->setAnchorPoint({ 0, 0.5 });
740-
741-
auto level_by = cocos2d::CCLabelBMFont::create(data.level_creator.c_str(), "goldFont.fnt");
742-
if (eventType == EventType::List) {
743-
level_by->setPosition({ -27, -2 });
744-
} else {
745-
level_by->setPosition({ -27, -11 });
746-
}
747-
level_by->setScale(.46F);
748-
level_by->limitLabelWidth(120, 0.46f, 0.1f);
749-
level_by->setAnchorPoint({ 0, 0.5 });
750-
node->addChild(level_by);
751-
level_title->limitLabelWidth(120, 0.46f, 0.1f);
752-
node->addChild(level_title);
753766

754767
if (eventType == EventType::Daily || eventType == EventType::Weekly || eventType == EventType::Event) {
755768
CCSprite* crown;

0 commit comments

Comments
 (0)