Skip to content

Commit 8fed443

Browse files
authored
Merge pull request #5614 from MjnMixael/fix_setting_mission_stats
Fix setting mission stats
2 parents ad25418 + 5972457 commit 8fed443

File tree

2 files changed

+48
-20
lines changed

2 files changed

+48
-20
lines changed

code/scripting/api/objs/player.cpp

Lines changed: 45 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ ADE_VIRTVAR(Stats, l_Player, "scoring_stats stats", "The scoring stats of this p
6060
if (!plr->isValid())
6161
return ade_set_error(L, "o", l_ScoringStats.Set(scoring_stats_h()));
6262

63-
return ade_set_args(L, "o", l_ScoringStats.Set(scoring_stats_h(plr->get()->stats)));
63+
return ade_set_args(L, "o", l_ScoringStats.Set(scoring_stats_h(plr->get()->stats, plr->get())));
6464
}
6565

6666
ADE_VIRTVAR(ImageFilename, l_Player, "string name", "The image filename of this pilot", "string",
@@ -365,13 +365,15 @@ ADE_FUNC(loadCampaign, l_Player, "string campaign", "Loads the specified campaig
365365
}
366366

367367
scoring_stats_h::scoring_stats_h() = default;
368-
scoring_stats_h::scoring_stats_h(const scoring_struct& stats)
368+
scoring_stats_h::scoring_stats_h(const scoring_struct& stats, player *player)
369369
{
370370
_score.assign(stats);
371371
_valid = true;
372+
_plr = player;
372373
}
373374
bool scoring_stats_h::isValid() const { return _valid; }
374375
scoring_struct* scoring_stats_h::get() { return &_score; }
376+
player* scoring_stats_h::getPlayer() { return _plr; }
375377

376378
ADE_OBJ(l_ScoringStats, scoring_stats_h, "scoring_stats", "Player related scoring stats.");
377379

@@ -552,14 +554,17 @@ ADE_VIRTVAR(MissionPrimaryShotsFired,
552554
return ade_set_error(L, "i", -1);
553555
}
554556

557+
int r_val = ssh->get()->mp_shots_fired;
558+
555559
if (ADE_SETTING_VAR) {
556560
if (setv < 0) {
557561
setv = 0;
558562
}
559-
ssh->get()->mp_shots_fired = setv;
563+
ssh->getPlayer()->stats.mp_shots_fired = setv;
564+
r_val = ssh->getPlayer()->stats.mp_shots_fired;
560565
}
561566

562-
return ade_set_args(L, "i", ssh->get()->mp_shots_fired);
567+
return ade_set_args(L, "i", r_val);
563568
}
564569

565570
ADE_VIRTVAR(MissionPrimaryShotsHit,
@@ -579,14 +584,17 @@ ADE_VIRTVAR(MissionPrimaryShotsHit,
579584
return ade_set_error(L, "i", -1);
580585
}
581586

587+
int r_val = ssh->get()->mp_shots_hit;
588+
582589
if (ADE_SETTING_VAR) {
583590
if (setv < 0) {
584591
setv = 0;
585592
}
586-
ssh->get()->mp_shots_hit = setv;
593+
ssh->getPlayer()->stats.mp_shots_hit = setv;
594+
r_val = ssh->getPlayer()->stats.mp_shots_hit;
587595
}
588596

589-
return ade_set_args(L, "i", ssh->get()->mp_shots_hit);
597+
return ade_set_args(L, "i", r_val);
590598
}
591599

592600
ADE_VIRTVAR(MissionPrimaryFriendlyHit,
@@ -606,14 +614,17 @@ ADE_VIRTVAR(MissionPrimaryFriendlyHit,
606614
return ade_set_error(L, "i", -1);
607615
}
608616

617+
int r_val = ssh->get()->mp_bonehead_hits;
618+
609619
if (ADE_SETTING_VAR) {
610620
if (setv < 0) {
611621
setv = 0;
612622
}
613-
ssh->get()->mp_bonehead_hits = setv;
623+
ssh->getPlayer()->stats.mp_bonehead_hits = setv;
624+
r_val = ssh->getPlayer()->stats.mp_bonehead_hits;
614625
}
615626

616-
return ade_set_args(L, "i", ssh->get()->mp_bonehead_hits);
627+
return ade_set_args(L, "i", r_val);
617628
}
618629

619630
ADE_VIRTVAR(MissionSecondaryShotsFired,
@@ -633,14 +644,17 @@ ADE_VIRTVAR(MissionSecondaryShotsFired,
633644
return ade_set_error(L, "i", -1);
634645
}
635646

647+
int r_val = ssh->get()->ms_shots_fired;
648+
636649
if (ADE_SETTING_VAR) {
637650
if (setv < 0) {
638651
setv = 0;
639652
}
640-
ssh->get()->ms_shots_fired = setv;
653+
ssh->getPlayer()->stats.ms_shots_fired = setv;
654+
r_val = ssh->getPlayer()->stats.ms_shots_fired;
641655
}
642656

643-
return ade_set_args(L, "i", ssh->get()->ms_shots_fired);
657+
return ade_set_args(L, "i", r_val);
644658
}
645659

646660
ADE_VIRTVAR(MissionSecondaryShotsHit,
@@ -660,14 +674,17 @@ ADE_VIRTVAR(MissionSecondaryShotsHit,
660674
return ade_set_error(L, "i", -1);
661675
}
662676

677+
int r_val = ssh->get()->ms_shots_hit;
678+
663679
if (ADE_SETTING_VAR) {
664680
if (setv < 0) {
665681
setv = 0;
666682
}
667-
ssh->get()->ms_shots_hit = setv;
683+
ssh->getPlayer()->stats.ms_shots_hit = setv;
684+
r_val = ssh->getPlayer()->stats.ms_shots_hit;
668685
}
669686

670-
return ade_set_args(L, "i", ssh->get()->ms_shots_hit);
687+
return ade_set_args(L, "i", r_val);
671688
}
672689

673690
ADE_VIRTVAR(MissionSecondaryFriendlyHit,
@@ -687,14 +704,17 @@ ADE_VIRTVAR(MissionSecondaryFriendlyHit,
687704
return ade_set_error(L, "i", -1);
688705
}
689706

707+
int r_val = ssh->get()->ms_bonehead_hits;
708+
690709
if (ADE_SETTING_VAR) {
691710
if (setv < 0) {
692711
setv = 0;
693712
}
694-
ssh->get()->ms_bonehead_hits = setv;
713+
ssh->getPlayer()->stats.ms_bonehead_hits = setv;
714+
r_val = ssh->getPlayer()->stats.ms_bonehead_hits;
695715
}
696716

697-
return ade_set_args(L, "i", ssh->get()->ms_bonehead_hits);
717+
return ade_set_args(L, "i", r_val);
698718
}
699719

700720
ADE_VIRTVAR(MissionTotalKills, l_ScoringStats, "number", "The total number of kills in the current mission.", "number", "The score value")
@@ -709,14 +729,17 @@ ADE_VIRTVAR(MissionTotalKills, l_ScoringStats, "number", "The total number of ki
709729
return ade_set_error(L, "i", -1);
710730
}
711731

732+
int r_val = ssh->get()->m_kill_count_ok;
733+
712734
if (ADE_SETTING_VAR) {
713735
if (setv < 0) {
714736
setv = 0;
715737
}
716-
ssh->get()->m_kill_count_ok = setv;
738+
ssh->getPlayer()->stats.m_kill_count_ok = setv;
739+
r_val = ssh->getPlayer()->stats.m_kill_count_ok;
717740
}
718741

719-
return ade_set_args(L, "i", ssh->get()->m_kill_count_ok);
742+
return ade_set_args(L, "i", r_val);
720743
}
721744

722745
ADE_VIRTVAR(MissionAssists, l_ScoringStats, "number", "The total number of assists in the current mission.", "number", "The score value")
@@ -731,14 +754,17 @@ ADE_VIRTVAR(MissionAssists, l_ScoringStats, "number", "The total number of assis
731754
return ade_set_error(L, "i", -1);
732755
}
733756

757+
int r_val = ssh->get()->m_assists;
758+
734759
if (ADE_SETTING_VAR) {
735760
if (setv < 0) {
736761
setv = 0;
737762
}
738-
ssh->get()->m_assists = setv;
763+
ssh->getPlayer()->stats.m_assists = setv;
764+
r_val = ssh->getPlayer()->stats.m_assists;
739765
}
740766

741-
return ade_set_args(L, "i", ssh->get()->m_assists);
767+
return ade_set_args(L, "i", r_val);
742768
}
743769

744770
ADE_FUNC(getMissionShipclassKills,
@@ -795,7 +821,7 @@ ADE_FUNC(setMissionShipclassKills,
795821
if (setv < 0) {
796822
setv = 0;
797823
}
798-
ssh->get()->m_kills[ship_idx] = setv;
824+
ssh->getPlayer()->stats.m_kills[ship_idx] = setv;
799825

800826
return ADE_RETURN_TRUE;
801827
}

code/scripting/api/objs/player.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,13 +32,15 @@ DECLARE_ADE_OBJ(l_Player, player_h);
3232
class scoring_stats_h {
3333
scoring_struct _score;
3434
bool _valid = false;
35+
player *_plr = nullptr;
3536
public:
3637
scoring_stats_h();
37-
scoring_stats_h(const scoring_struct& stats);
38+
scoring_stats_h(const scoring_struct& stats, player *player);
3839

3940
bool isValid() const;
4041

4142
scoring_struct* get();
43+
player* getPlayer();
4244
};
4345

4446
DECLARE_ADE_OBJ(l_ScoringStats, scoring_stats_h);

0 commit comments

Comments
 (0)