Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Gang Warfare : Boogaloo edition #8807

Merged
merged 5 commits into from
Jun 20, 2020
Merged
Show file tree
Hide file tree
Changes from 4 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
39 changes: 29 additions & 10 deletions yogstation/code/game/gamemodes/gangs/gang_items.dm
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
var/name
var/item_path
var/cost
var/weapon_cost
var/spawn_msg
var/category
var/list/gang_whitelist = list()
Expand All @@ -17,6 +18,15 @@
to_chat(user, "<span class='notice'>You bought \the [name].</span>")
return TRUE

/datum/gang_item/proc/weapon_purchase(mob/living/carbon/user, datum/team/gang/gang, obj/item/gangtool/gangtool, check_canbuy_weapon = TRUE)
if(check_canbuy_weapon && !can_buy_weapon(user, gang, gangtool))
return FALSE
var/actual_cost = get_weapon_cost(user, gang, gangtool)
if(!spawn_item(user, gang, gangtool))
gang.adjust_uniform_influence(-actual_cost)
to_chat(user, "<span class='notice'>You bought \the [name].</span>")
return TRUE

/datum/gang_item/proc/spawn_item(mob/living/carbon/user, datum/team/gang/gang, obj/item/gangtool/gangtool) // If this returns anything other than null, something fucked up and influence won't lower.
if(item_path)
var/obj/item/O = new item_path(user.loc)
Expand All @@ -29,15 +39,24 @@
/datum/gang_item/proc/can_buy(mob/living/carbon/user, datum/team/gang/gang, obj/item/gangtool/gangtool)
return gang && (gang.influence >= get_cost(user, gang, gangtool)) && can_see(user, gang, gangtool)

/datum/gang_item/proc/can_buy_weapon(mob/living/carbon/user, datum/team/gang/gang, obj/item/gangtool/gangtool)
return gang && (gang.uniform_influence >= get_weapon_cost(user, gang, gangtool)) && can_see(user, gang, gangtool)

/datum/gang_item/proc/can_see(mob/living/carbon/user, datum/team/gang/gang, obj/item/gangtool/gangtool)
return TRUE

/datum/gang_item/proc/get_cost(mob/living/carbon/user, datum/team/gang/gang, obj/item/gangtool/gangtool)
return cost

/datum/gang_item/proc/get_weapon_cost(mob/living/carbon/user, datum/team/gang/gang, obj/item/gangtool/gangtool)
return weapon_cost

/datum/gang_item/proc/get_cost_display(mob/living/carbon/user, datum/team/gang/gang, obj/item/gangtool/gangtool)
return "([get_cost(user, gang, gangtool)] Influence)"

/datum/gang_item/proc/get_weapon_cost_display(mob/living/carbon/user, datum/team/gang/gang, obj/item/gangtool/gangtool)
return "([get_weapon_cost(user, gang, gangtool)] Supply)"

/datum/gang_item/proc/get_name_display(mob/living/carbon/user, datum/team/gang/gang, obj/item/gangtool/gangtool)
return name

Expand Down Expand Up @@ -159,61 +178,61 @@
/datum/gang_item/weapon/shuriken
name = "Shuriken"
id = "shuriken"
cost = 3
weapon_cost = 3
item_path = /obj/item/throwing_star

/datum/gang_item/weapon/switchblade
name = "Switchblade"
id = "switchblade"
cost = 5
weapon_cost = 5
item_path = /obj/item/switchblade

/datum/gang_item/weapon/surplus
name = "Surplus Rifle"
id = "surplus"
cost = 8
weapon_cost = 8
item_path = /obj/item/gun/ballistic/automatic/surplus

/datum/gang_item/weapon/ammo/surplus_ammo
name = "Surplus Rifle Ammo"
id = "surplus_ammo"
cost = 5
weapon_cost = 5
item_path = /obj/item/ammo_box/magazine/m10mm/rifle

/datum/gang_item/weapon/improvised
name = "Sawn-Off Improvised Shotgun"
id = "sawn"
cost = 6
weapon_cost = 6
item_path = /obj/item/gun/ballistic/shotgun/doublebarrel/improvised/sawn

/datum/gang_item/weapon/ammo/improvised_ammo
name = "Box of Buckshot"
id = "buckshot"
cost = 5
weapon_cost = 5
item_path = /obj/item/storage/box/lethalshot

/datum/gang_item/weapon/pistol
name = "10mm Pistol"
id = "pistol"
cost = 30
weapon_cost = 30
item_path = /obj/item/gun/ballistic/automatic/pistol

/datum/gang_item/weapon/ammo/pistol_ammo
name = "10mm Ammo"
id = "pistol_ammo"
cost = 10
weapon_cost = 10
item_path = /obj/item/ammo_box/magazine/m10mm

/datum/gang_item/weapon/uzi
name = "Uzi SMG"
id = "uzi"
cost = 60
weapon_cost = 60
item_path = /obj/item/gun/ballistic/automatic/mini_uzi

/datum/gang_item/weapon/ammo/uzi_ammo
name = "Uzi Ammo"
id = "uzi_ammo"
cost = 40
weapon_cost = 40
item_path = /obj/item/ammo_box/magazine/uzim9mm

///////////////////
Expand Down
35 changes: 25 additions & 10 deletions yogstation/code/game/gamemodes/gangs/gangtool.dm
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@
dat += "<center><font color='red'>Takeover In Progress:<br><B>[DisplayTimeText(gang.domination_time_remaining() * 10)] remain</B></font></center>"

dat += "Registration: <B>[gang.name] Gang Boss</B><br>"
dat += "Organization Size: <B>[gang.members.len]</B> | Station Control: <B>[gang.territories.len] territories under control.</B> | Influence: <B>[gang.influence]</B><br>"
dat += "Organization Size: <B>[gang.members.len]</B> | Station Control: <B>[gang.territories.len] territories under control.</B> | Influence: <B>[gang.influence]</B> | Supply: <B>[gang.uniform_influence]</B><br>"
dat += "Time until Influence grows: <B>[time2text(gang.next_point_time - world.time, "mm:ss")]</B><br>"
dat += "<a href='?src=[REF(src)];commute=1'>Send message to Gang</a><br>"
dat += "<a href='?src=[REF(src)];recall=1'>Recall shuttle</a><br>"
Expand All @@ -77,19 +77,29 @@
var/datum/gang_item/G = buyable_items[cat][id]
if(!G.can_see(user, gang, src))
continue
if(G.category != "Purchase Weapons:")
var/cost = G.get_cost_display(user, gang, src)
if(cost)
dat += cost + " "

var/cost = G.get_cost_display(user, gang, src)
if(cost)
dat += cost + " "
var/toAdd = G.get_name_display(user, gang, src)
if(G.can_buy(user, gang, src))
toAdd = "<a href='?src=[REF(src)];purchase=1;id=[id];cat=[cat]'>[toAdd]</a>"
dat += toAdd
dat += "<br>"
else if(G.category == "Purchase Weapons:")
var/weapon_cost = G.get_weapon_cost_display(user, gang, src)
if(weapon_cost)
dat += weapon_cost + " "

var/toAdd = G.get_name_display(user, gang, src)
if(G.can_buy(user, gang, src))
toAdd = "<a href='?src=[REF(src)];purchase=1;id=[id];cat=[cat]'>[toAdd]</a>"
dat += toAdd
var/toAdd = G.get_name_display(user, gang, src)
if(G.can_buy_weapon(user, gang, src))
toAdd = "<a href='?src=[REF(src)];weapon_purchase=1;id=[id];cat=[cat]'>[toAdd]</a>"
dat += toAdd
dat += "<br>"
var/extra = G.get_extra_info(user, gang, src)
if(extra)
dat += "<br><i>[extra]</i>"
dat += "<br>"
dat += "<br>"

dat += "<a href='?src=[REF(src)];choice=refresh'>Refresh</a><br>"
Expand All @@ -116,7 +126,12 @@
var/datum/gang_item/G = L[href_list["id"]]
if(G && G.can_buy(usr, gang, src))
G.purchase(usr, gang, src, FALSE)

if(href_list["weapon_purchase"])
if(islist(buyable_items[href_list["cat"]]))
var/list/L = buyable_items[href_list["cat"]]
var/datum/gang_item/G = L[href_list["id"]]
if(G && G.can_buy_weapon(usr, gang, src))
G.weapon_purchase(usr, gang, src, FALSE)
if(href_list["commute"])
ping_gang(usr)
if(href_list["recall"])
Expand Down
44 changes: 41 additions & 3 deletions yogstation/code/modules/antagonists/gang/gang.dm
Original file line number Diff line number Diff line change
Expand Up @@ -98,6 +98,7 @@
. = ..()
.["Promote"] = CALLBACK(src,.proc/admin_promote)
.["Set Influence"] = CALLBACK(src, .proc/admin_adjust_influence)
.["Set Uniform Influence"] = CALLBACK(src, .proc/admin_adjust_uniform_influence)
if(gang.domination_time != NOT_DOMINATING)
.["Set domination time left"] = CALLBACK(src, .proc/set_dom_time_left)

Expand Down Expand Up @@ -141,6 +142,13 @@
message_admins("[key_name_admin(usr)] changed [gang.name]'s influence to [inf].")
log_admin("[key_name(usr)] changed [gang.name]'s influence to [inf].")

/datum/antagonist/gang/proc/admin_adjust_uniform_influence()
var/inf = input("Uniform Influence for [gang.name]", "Uniform influence", gang.uniform_influence) as null | num
if(!isnull(inf))
gang.uniform_influence = inf
message_admins("[key_name_admin(usr)] changed [gang.name]'s uniform influence to [inf].")
log_admin("[key_name(usr)] changed [gang.name]'s uniform influence to [inf].")

/datum/antagonist/gang/proc/add_to_gang()
gang.add_member(owner)
owner.current.log_message("<font color='red'>Has been converted to the [gang.name] gang!</font>", INDIVIDUAL_ATTACK_LOG)
Expand Down Expand Up @@ -287,6 +295,7 @@
var/hud_entry_num // because if you put something other than a number in GLOB.huds, god have mercy on your fucking soul friend
var/list/leaders = list() // bosses
var/max_leaders = MAX_LEADERS_GANG
var/members_amount = 0 // Counting members
var/list/territories = list() // territories owned by the gang.
var/list/lost_territories = list() // territories lost by the gang.
var/list/new_territories = list() // territories captured by the gang.
Expand All @@ -295,6 +304,8 @@
var/dom_attempts = INITIAL_DOM_ATTEMPTS
var/color
var/influence = 0 // influence of the gang, based on how many territories they own. Can be used to buy weapons and tools from a gang uplink.
var/uniform_influence = 0 // Influence gained from members wearing uniforms. Counts only to weapons. yogs
var/passive_uniform_income // Passive income for weapons. The more gang members you have, the less you will get. Wear your uniform.
var/winner // Once the gang wins with a dominator, this becomes true. For roundend credits purposes.
var/list/inner_outfits = list()
var/list/outer_outfits = list()
Expand Down Expand Up @@ -400,10 +411,14 @@
message += "<b>[domination_time_remaining()] seconds remain</b> in hostile takeover.<BR>"
else
var/new_influence = check_territory_income()
var/new_uniform_influence = check_uniform_income()
if(new_influence != influence)
message += "Gang influence has increased by [new_influence - influence] for defending [territories.len] territories and [uniformed] uniformed gangsters.<BR>"
message += "Gang influence has increased by [new_influence - influence] for defending [territories.len] territories<BR>"
if(new_uniform_influence != uniform_influence) // yogs
message += "Gang supply has increased by [new_uniform_influence - uniform_influence] for having [uniformed] uniformed gangsters<BR>"
influence = new_influence
message += "Your gang now has <b>[influence] influence</b>.<BR>"
uniform_influence = new_uniform_influence
message += "Your gang now has <b>[influence] influence</b> and <b>[uniform_influence] supply points</b>.<BR>"
message_gangtools(message)
addtimer(CALLBACK(src, .proc/handle_territories), INFLUENCE_INTERVAL)

Expand All @@ -417,9 +432,15 @@
return valid_territories.len

/datum/team/gang/proc/check_territory_income()
var/new_influence = min(999,influence + 15 + (check_clothing() * 2) + territories.len)
var/new_influence = min(999,influence + 15 + territories.len)
return new_influence

/datum/team/gang/proc/check_uniform_income()
members_amount = 0 // reset so it doesnt just add last cycles to next
count_members()
var/new_uniform_influence = min(999,uniform_influence + passive_uniform_income + (check_clothing() * 5)) // 5 weapon supply points per uniformed gangster + free income per cycle based on members
return new_uniform_influence

/datum/team/gang/proc/check_clothing()
//Count uniformed gangsters
var/uniformed = 0
Expand Down Expand Up @@ -449,6 +470,23 @@
/datum/team/gang/proc/adjust_influence(value)
influence = max(0, influence + value)

/datum/team/gang/proc/adjust_uniform_influence(value)
uniform_influence = max(0, uniform_influence + value)

/datum/team/gang/proc/count_members()
for(var/datum/mind/gangmind in members)
if(ishuman(gangmind.current))
var/mob/living/carbon/human/gangster = gangmind.current
if(gangster.stat != DEAD)
members_amount++
if(members_amount <= 3)
SomeguyManperson marked this conversation as resolved.
Show resolved Hide resolved
passive_uniform_income = 15
if(members_amount > 3 && members_amount <= 5)
passive_uniform_income = 10
if(members_amount >= 6)
passive_uniform_income = 0


/datum/team/gang/proc/message_gangtools(message)
if(!gangtools.len || !message)
return
Expand Down