Skip to content

Commit

Permalink
Merge pull request #5614 from MjnMixael/fix_setting_mission_stats
Browse files Browse the repository at this point in the history
Fix setting mission stats
  • Loading branch information
TRBlount committed Sep 20, 2023
2 parents ad25418 + 5972457 commit 8fed443
Show file tree
Hide file tree
Showing 2 changed files with 48 additions and 20 deletions.
64 changes: 45 additions & 19 deletions code/scripting/api/objs/player.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,7 @@ ADE_VIRTVAR(Stats, l_Player, "scoring_stats stats", "The scoring stats of this p
if (!plr->isValid())
return ade_set_error(L, "o", l_ScoringStats.Set(scoring_stats_h()));

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

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

scoring_stats_h::scoring_stats_h() = default;
scoring_stats_h::scoring_stats_h(const scoring_struct& stats)
scoring_stats_h::scoring_stats_h(const scoring_struct& stats, player *player)
{
_score.assign(stats);
_valid = true;
_plr = player;
}
bool scoring_stats_h::isValid() const { return _valid; }
scoring_struct* scoring_stats_h::get() { return &_score; }
player* scoring_stats_h::getPlayer() { return _plr; }

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

Expand Down Expand Up @@ -552,14 +554,17 @@ ADE_VIRTVAR(MissionPrimaryShotsFired,
return ade_set_error(L, "i", -1);
}

int r_val = ssh->get()->mp_shots_fired;

if (ADE_SETTING_VAR) {
if (setv < 0) {
setv = 0;
}
ssh->get()->mp_shots_fired = setv;
ssh->getPlayer()->stats.mp_shots_fired = setv;
r_val = ssh->getPlayer()->stats.mp_shots_fired;
}

return ade_set_args(L, "i", ssh->get()->mp_shots_fired);
return ade_set_args(L, "i", r_val);
}

ADE_VIRTVAR(MissionPrimaryShotsHit,
Expand All @@ -579,14 +584,17 @@ ADE_VIRTVAR(MissionPrimaryShotsHit,
return ade_set_error(L, "i", -1);
}

int r_val = ssh->get()->mp_shots_hit;

if (ADE_SETTING_VAR) {
if (setv < 0) {
setv = 0;
}
ssh->get()->mp_shots_hit = setv;
ssh->getPlayer()->stats.mp_shots_hit = setv;
r_val = ssh->getPlayer()->stats.mp_shots_hit;
}

return ade_set_args(L, "i", ssh->get()->mp_shots_hit);
return ade_set_args(L, "i", r_val);
}

ADE_VIRTVAR(MissionPrimaryFriendlyHit,
Expand All @@ -606,14 +614,17 @@ ADE_VIRTVAR(MissionPrimaryFriendlyHit,
return ade_set_error(L, "i", -1);
}

int r_val = ssh->get()->mp_bonehead_hits;

if (ADE_SETTING_VAR) {
if (setv < 0) {
setv = 0;
}
ssh->get()->mp_bonehead_hits = setv;
ssh->getPlayer()->stats.mp_bonehead_hits = setv;
r_val = ssh->getPlayer()->stats.mp_bonehead_hits;
}

return ade_set_args(L, "i", ssh->get()->mp_bonehead_hits);
return ade_set_args(L, "i", r_val);
}

ADE_VIRTVAR(MissionSecondaryShotsFired,
Expand All @@ -633,14 +644,17 @@ ADE_VIRTVAR(MissionSecondaryShotsFired,
return ade_set_error(L, "i", -1);
}

int r_val = ssh->get()->ms_shots_fired;

if (ADE_SETTING_VAR) {
if (setv < 0) {
setv = 0;
}
ssh->get()->ms_shots_fired = setv;
ssh->getPlayer()->stats.ms_shots_fired = setv;
r_val = ssh->getPlayer()->stats.ms_shots_fired;
}

return ade_set_args(L, "i", ssh->get()->ms_shots_fired);
return ade_set_args(L, "i", r_val);
}

ADE_VIRTVAR(MissionSecondaryShotsHit,
Expand All @@ -660,14 +674,17 @@ ADE_VIRTVAR(MissionSecondaryShotsHit,
return ade_set_error(L, "i", -1);
}

int r_val = ssh->get()->ms_shots_hit;

if (ADE_SETTING_VAR) {
if (setv < 0) {
setv = 0;
}
ssh->get()->ms_shots_hit = setv;
ssh->getPlayer()->stats.ms_shots_hit = setv;
r_val = ssh->getPlayer()->stats.ms_shots_hit;
}

return ade_set_args(L, "i", ssh->get()->ms_shots_hit);
return ade_set_args(L, "i", r_val);
}

ADE_VIRTVAR(MissionSecondaryFriendlyHit,
Expand All @@ -687,14 +704,17 @@ ADE_VIRTVAR(MissionSecondaryFriendlyHit,
return ade_set_error(L, "i", -1);
}

int r_val = ssh->get()->ms_bonehead_hits;

if (ADE_SETTING_VAR) {
if (setv < 0) {
setv = 0;
}
ssh->get()->ms_bonehead_hits = setv;
ssh->getPlayer()->stats.ms_bonehead_hits = setv;
r_val = ssh->getPlayer()->stats.ms_bonehead_hits;
}

return ade_set_args(L, "i", ssh->get()->ms_bonehead_hits);
return ade_set_args(L, "i", r_val);
}

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

int r_val = ssh->get()->m_kill_count_ok;

if (ADE_SETTING_VAR) {
if (setv < 0) {
setv = 0;
}
ssh->get()->m_kill_count_ok = setv;
ssh->getPlayer()->stats.m_kill_count_ok = setv;
r_val = ssh->getPlayer()->stats.m_kill_count_ok;
}

return ade_set_args(L, "i", ssh->get()->m_kill_count_ok);
return ade_set_args(L, "i", r_val);
}

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

int r_val = ssh->get()->m_assists;

if (ADE_SETTING_VAR) {
if (setv < 0) {
setv = 0;
}
ssh->get()->m_assists = setv;
ssh->getPlayer()->stats.m_assists = setv;
r_val = ssh->getPlayer()->stats.m_assists;
}

return ade_set_args(L, "i", ssh->get()->m_assists);
return ade_set_args(L, "i", r_val);
}

ADE_FUNC(getMissionShipclassKills,
Expand Down Expand Up @@ -795,7 +821,7 @@ ADE_FUNC(setMissionShipclassKills,
if (setv < 0) {
setv = 0;
}
ssh->get()->m_kills[ship_idx] = setv;
ssh->getPlayer()->stats.m_kills[ship_idx] = setv;

return ADE_RETURN_TRUE;
}
Expand Down
4 changes: 3 additions & 1 deletion code/scripting/api/objs/player.h
Original file line number Diff line number Diff line change
Expand Up @@ -32,13 +32,15 @@ DECLARE_ADE_OBJ(l_Player, player_h);
class scoring_stats_h {
scoring_struct _score;
bool _valid = false;
player *_plr = nullptr;
public:
scoring_stats_h();
scoring_stats_h(const scoring_struct& stats);
scoring_stats_h(const scoring_struct& stats, player *player);

bool isValid() const;

scoring_struct* get();
player* getPlayer();
};

DECLARE_ADE_OBJ(l_ScoringStats, scoring_stats_h);
Expand Down

0 comments on commit 8fed443

Please sign in to comment.