mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-09 16:12:17 +00:00
[MIRROR] unified conflict check for traits and genes (#11924)
Co-authored-by: Will <7099514+Willburd@users.noreply.github.com> Co-authored-by: Kashargul <144968721+Kashargul@users.noreply.github.com>
This commit is contained in:
committed by
GitHub
parent
7ddccf3a76
commit
5d99b133c9
@@ -101,23 +101,11 @@
|
||||
continue
|
||||
|
||||
// check trait if not. CONFLICT-O-TRON ENGAGE
|
||||
var/datum/trait/instance_test = GLOB.all_traits[P]
|
||||
if(path in instance_test.excludes)
|
||||
if(check_trait_conflict(linked_trait, GLOB.all_traits[P]))
|
||||
conflict_traits |= P
|
||||
has_conflict = TRUE
|
||||
continue
|
||||
for(var/V in linked_trait.var_changes)
|
||||
if(V == "flags")
|
||||
continue
|
||||
if(V in instance_test.var_changes)
|
||||
conflict_traits |= P
|
||||
has_conflict = TRUE
|
||||
continue
|
||||
for(var/V in linked_trait.var_changes_pref)
|
||||
if(V in instance_test.var_changes_pref)
|
||||
conflict_traits |= P
|
||||
has_conflict = TRUE
|
||||
continue
|
||||
|
||||
return has_conflict
|
||||
|
||||
/datum/gene/trait/activate(var/mob/M, var/connected, var/mut_flags)
|
||||
|
||||
@@ -381,24 +381,11 @@
|
||||
if(trait_choice in (pref.pos_traits + pref.neu_traits + pref.neg_traits))
|
||||
conflict = instance.name
|
||||
|
||||
varconflict:
|
||||
for(var/P in (pref.pos_traits + pref.neu_traits + pref.neg_traits))
|
||||
var/datum/trait/instance_test = GLOB.all_traits[P]
|
||||
if(path in instance_test.excludes)
|
||||
conflict = instance_test.name
|
||||
break varconflict
|
||||
|
||||
for(var/V in instance.var_changes)
|
||||
if(V == "flags")
|
||||
continue
|
||||
if(V in instance_test.var_changes)
|
||||
conflict = instance_test.name
|
||||
break varconflict
|
||||
|
||||
for(var/V in instance.var_changes_pref)
|
||||
if(V in instance_test.var_changes_pref)
|
||||
conflict = instance_test.name
|
||||
break varconflict
|
||||
for(var/P in (pref.pos_traits + pref.neu_traits + pref.neg_traits))
|
||||
var/datum/trait/other_trait = GLOB.all_traits[P]
|
||||
if(check_trait_conflict(instance, other_trait))
|
||||
conflict = other_trait.name
|
||||
break
|
||||
|
||||
if(conflict)
|
||||
tgui_alert_async(user, "You cannot take this trait and [conflict] at the same time. Please remove that trait, or pick another trait to add.", "Error")
|
||||
@@ -408,6 +395,23 @@
|
||||
mylist[path] = instance.get_default_prefs()
|
||||
return TOPIC_REFRESH
|
||||
|
||||
/// Compare traits and return TRUE if the traits alter the same vars or would conflict through some other method, such as their exclusion list.
|
||||
/proc/check_trait_conflict(datum/trait/our_trait, datum/trait/other_trait)
|
||||
if(our_trait.type in other_trait.excludes)
|
||||
return TRUE
|
||||
|
||||
for(var/V in our_trait.var_changes)
|
||||
if(V == "flags") // Flags can stack
|
||||
continue
|
||||
if(V in other_trait.var_changes)
|
||||
return TRUE
|
||||
|
||||
for(var/V in our_trait.var_changes_pref)
|
||||
if(V in other_trait.var_changes_pref)
|
||||
return TRUE
|
||||
|
||||
return FALSE
|
||||
|
||||
#undef POSITIVE_MODE
|
||||
#undef NEUTRAL_MODE
|
||||
#undef NEGATIVE_MODE
|
||||
|
||||
Reference in New Issue
Block a user