mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-11 18:53:06 +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
|
continue
|
||||||
|
|
||||||
// check trait if not. CONFLICT-O-TRON ENGAGE
|
// check trait if not. CONFLICT-O-TRON ENGAGE
|
||||||
var/datum/trait/instance_test = GLOB.all_traits[P]
|
if(check_trait_conflict(linked_trait, GLOB.all_traits[P]))
|
||||||
if(path in instance_test.excludes)
|
|
||||||
conflict_traits |= P
|
conflict_traits |= P
|
||||||
has_conflict = TRUE
|
has_conflict = TRUE
|
||||||
continue
|
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
|
return has_conflict
|
||||||
|
|
||||||
/datum/gene/trait/activate(var/mob/M, var/connected, var/mut_flags)
|
/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))
|
if(trait_choice in (pref.pos_traits + pref.neu_traits + pref.neg_traits))
|
||||||
conflict = instance.name
|
conflict = instance.name
|
||||||
|
|
||||||
varconflict:
|
for(var/P in (pref.pos_traits + pref.neu_traits + pref.neg_traits))
|
||||||
for(var/P in (pref.pos_traits + pref.neu_traits + pref.neg_traits))
|
var/datum/trait/other_trait = GLOB.all_traits[P]
|
||||||
var/datum/trait/instance_test = GLOB.all_traits[P]
|
if(check_trait_conflict(instance, other_trait))
|
||||||
if(path in instance_test.excludes)
|
conflict = other_trait.name
|
||||||
conflict = instance_test.name
|
break
|
||||||
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
|
|
||||||
|
|
||||||
if(conflict)
|
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")
|
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()
|
mylist[path] = instance.get_default_prefs()
|
||||||
return TOPIC_REFRESH
|
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 POSITIVE_MODE
|
||||||
#undef NEUTRAL_MODE
|
#undef NEUTRAL_MODE
|
||||||
#undef NEGATIVE_MODE
|
#undef NEGATIVE_MODE
|
||||||
|
|||||||
Reference in New Issue
Block a user