Files
Bubberstation/code/game/objects/items/singularityhammer.dm
Zonespace 8fabd54ad6 Mirrors #72354 (#18654)
* [no gbp] removes all duplicate armor datums (#72354)

closes #72348
Title

My bad

Heres the script I used this time if you want to
```cs
var baseDir = Environment.CurrentDirectory;

var allFiles = Directory.EnumerateFiles($@"{baseDir}\code", "*.dm", SearchOption.AllDirectories).ToList();
var known = new Dictionary<string, List<KeyValuePair<string, int>>>();

foreach (var file in allFiles)
{
	var fileLines = File.ReadAllLines(file);
	for (var i = 0; i < fileLines.Length; i++)
	{
		var line = fileLines[i];
		if (line.StartsWith("/datum/armor/"))
		{
			var armorName = line.Replace("/datum/armor/", "").Trim();
			if (!known.ContainsKey(armorName))
				known[armorName] = new List<KeyValuePair<string, int>>();
			var knownList = known[armorName];
			knownList.Add(new KeyValuePair<string, int>(file, i));
		}
	}
}

Console.WriteLine($"There are {known.Sum(d => d.Value.Count)} duplicate armor datums.");

var duplicates = new Dictionary<string, List<int>>();
foreach (var (_, entries) in known)
{
	var actuals = entries.Skip(1).ToList();
	foreach (var actual in actuals)
	{
		if (!duplicates.ContainsKey(actual.Key))
			duplicates[actual.Key] = new List<int>();
		duplicates[actual.Key].Add(actual.Value);
	}
}

Console.WriteLine($"There are {duplicates.Count} files to update.");

foreach (var (file, idxes) in duplicates)
{
	var fileContents = File.ReadAllLines(file).ToList();
	foreach (var idx in idxes.OrderByDescending(i => i))
	{
		string line;
		do
		{
			line = fileContents[idx];
			fileContents.RemoveAt(idx);
		}
		while (!String.IsNullOrWhiteSpace(line));
	}
	File.WriteAllLines(file, fileContents);
}
```

* modular

Co-authored-by: Zephyr <12817816+ZephyrTFA@users.noreply.github.com>
2023-01-13 18:05:12 -05:00

130 lines
3.8 KiB
Plaintext

/obj/item/singularityhammer
name = "singularity hammer"
desc = "The pinnacle of close combat technology, the hammer harnesses the power of a miniaturized singularity to deal crushing blows."
icon_state = "singularity_hammer0"
base_icon_state = "singularity_hammer"
lefthand_file = 'icons/mob/inhands/weapons/hammers_lefthand.dmi'
righthand_file = 'icons/mob/inhands/weapons/hammers_righthand.dmi'
worn_icon_state = "singularity_hammer"
flags_1 = CONDUCT_1
slot_flags = ITEM_SLOT_BACK
force = 5
throwforce = 15
throw_range = 1
w_class = WEIGHT_CLASS_HUGE
armor_type = /datum/armor/item_singularityhammer
resistance_flags = FIRE_PROOF | ACID_PROOF
force_string = "LORD SINGULOTH HIMSELF"
///Is it able to pull shit right now?
var/charged = TRUE
/datum/armor/item_singularityhammer
melee = 50
bullet = 50
laser = 50
bomb = 50
fire = 100
acid = 100
/obj/item/singularityhammer/Initialize(mapload)
. = ..()
AddElement(/datum/element/kneejerk)
AddComponent(/datum/component/two_handed, \
force_multiplier = 4, \
icon_wielded = "[base_icon_state]1", \
)
/obj/item/singularityhammer/update_icon_state()
icon_state = "[base_icon_state]0"
return ..()
/obj/item/singularityhammer/proc/recharge()
charged = TRUE
/obj/item/singularityhammer/proc/vortex(turf/pull, mob/wielder)
for(var/atom/X in orange(5,pull))
if(ismovable(X))
var/atom/movable/A = X
if(A == wielder)
continue
if(isliving(A))
var/mob/living/vortexed_mob = A
if(vortexed_mob.mob_negates_gravity())
continue
else
vortexed_mob.Paralyze(2 SECONDS)
if(!A.anchored && !isobserver(A))
step_towards(A,pull)
step_towards(A,pull)
step_towards(A,pull)
/obj/item/singularityhammer/afterattack(atom/A as mob|obj|turf|area, mob/living/user, proximity)
. = ..()
if(!proximity)
return
. |= AFTERATTACK_PROCESSED_ITEM
if(HAS_TRAIT(src, TRAIT_WIELDED))
if(charged)
charged = FALSE
if(isliving(A))
var/mob/living/Z = A
Z.take_bodypart_damage(20,0)
playsound(user, 'sound/weapons/marauder.ogg', 50, TRUE)
var/turf/target = get_turf(A)
vortex(target,user)
addtimer(CALLBACK(src, PROC_REF(recharge)), 100)
return .
/obj/item/mjollnir
name = "Mjolnir"
desc = "A weapon worthy of a god, able to strike with the force of a lightning bolt. It crackles with barely contained energy."
icon_state = "mjollnir0"
base_icon_state = "mjollnir"
worn_icon_state = "mjolnir"
lefthand_file = 'icons/mob/inhands/weapons/hammers_lefthand.dmi'
righthand_file = 'icons/mob/inhands/weapons/hammers_righthand.dmi'
flags_1 = CONDUCT_1
slot_flags = ITEM_SLOT_BACK
force = 5
throwforce = 30
throw_range = 7
w_class = WEIGHT_CLASS_HUGE
/obj/item/mjollnir/Initialize(mapload)
. = ..()
AddComponent(/datum/component/two_handed, \
force_multiplier = 5, \
icon_wielded = "[base_icon_state]1", \
attacksound = SFX_SPARKS, \
)
/obj/item/mjollnir/update_icon_state()
icon_state = "[base_icon_state]0"
return ..()
/obj/item/mjollnir/proc/shock(mob/living/target)
target.Stun(1.5 SECONDS)
target.Knockdown(10 SECONDS)
var/datum/effect_system/lightning_spread/s = new /datum/effect_system/lightning_spread
s.set_up(5, 1, target.loc)
s.start()
target.visible_message(span_danger("[target.name] is shocked by [src]!"), \
span_userdanger("You feel a powerful shock course through your body sending you flying!"), \
span_hear("You hear a heavy electrical crack!"))
var/atom/throw_target = get_edge_target_turf(target, get_dir(src, get_step_away(target, src)))
target.throw_at(throw_target, 200, 4)
/obj/item/mjollnir/attack(mob/living/target_mob, mob/user)
..()
if(QDELETED(target_mob))
return
if(HAS_TRAIT(user, TRAIT_PACIFISM))
return
if(HAS_TRAIT(src, TRAIT_WIELDED))
shock(target_mob)
/obj/item/mjollnir/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum)
. = ..()
if(!QDELETED(hit_atom) && isliving(hit_atom))
shock(hit_atom)