added damage and defense buffs

master
aegroto 2018-08-29 21:43:36 +02:00
parent 0571f20afd
commit 91d04bc952
7 changed files with 145 additions and 61 deletions

View File

@ -55,24 +55,28 @@ minetest.register_craftitem("drug_wars:weed", {
else
hbhunger.hunger[playername] = newhunger
player:set_hp(player:get_hp() + drug_wars.WEED_HEAL)
local speed_changed = drug_wars.speed_debuff(player, drug_wars.WEED_SPEED_DEBUFF, drug_wars.WEED_SPEED_DEBUFF_THRESHOLD)
drug_wars.increase_addiction(playername, drug_wars.WEED_ADDICTION)
table.insert(drug_wars.aftereffects, {
countdown = drug_wars.WEED_DURATION,
on_timeout = function()
if(speed_changed) then
drug_wars.speed_buff(player, drug_wars.WEED_SPEED_DEBUFF)
end
if(drug_wars.get_addiction(playername) > drug_wars.WEED_ADDICTION_THRESHOLD) then
drug_wars.drug_damage(player, drug_wars.WEED_HEAL)
end
end
})
end
local speed_changed = drug_wars.speed_debuff(player, drug_wars.WEED_SPEED_DEBUFF, drug_wars.WEED_SPEED_DEBUFF_THRESHOLD)
drug_wars.defense_buff(playername, drug_wars.WEED_DEFENSE_BUFF)
drug_wars.increase_addiction(playername, drug_wars.WEED_ADDICTION)
table.insert(drug_wars.aftereffects, {
countdown = drug_wars.WEED_DURATION,
on_timeout = function()
if(speed_changed) then
drug_wars.speed_buff(player, drug_wars.WEED_SPEED_DEBUFF)
end
if(drug_wars.get_addiction(playername) > drug_wars.WEED_ADDICTION_THRESHOLD) then
drug_wars.drug_damage(player, drug_wars.WEED_HEAL)
end
drug_wars.defense_buff(playername, -drug_wars.WEED_DEFENSE_BUFF)
end
})
end
end
})
@ -92,24 +96,28 @@ minetest.register_craftitem("drug_wars:hashish", {
else
hbhunger.hunger[playername] = newhunger
player:set_hp(player:get_hp() + drug_wars.HASHISH_HEAL)
local speed_changed = drug_wars.speed_debuff(player, drug_wars.HASHISH_SPEED_DEBUFF, drug_wars.HASHISH_SPEED_DEBUFF_THRESHOLD)
drug_wars.increase_addiction(playername, drug_wars.HASHISH_ADDICTION)
table.insert(drug_wars.aftereffects, {
countdown = drug_wars.HASHISH_DURATION,
on_timeout = function()
if(speed_changed) then
drug_wars.speed_buff(player, drug_wars.HASHISH_SPEED_DEBUFF)
end
if(drug_wars.get_addiction(playername) > drug_wars.HASHISH_ADDICTION_THRESHOLD) then
drug_wars.drug_damage(player, drug_wars.HASHISH_HEAL)
end
end
})
end
local speed_changed = drug_wars.speed_debuff(player, drug_wars.HASHISH_SPEED_DEBUFF, drug_wars.HASHISH_SPEED_DEBUFF_THRESHOLD)
drug_wars.defense_buff(playername, drug_wars.HASHISH_DEFENSE_BUFF)
drug_wars.increase_addiction(playername, drug_wars.HASHISH_ADDICTION)
table.insert(drug_wars.aftereffects, {
countdown = drug_wars.HASHISH_DURATION,
on_timeout = function()
if(speed_changed) then
drug_wars.speed_buff(player, drug_wars.HASHISH_SPEED_DEBUFF)
end
if(drug_wars.get_addiction(playername) > drug_wars.HASHISH_ADDICTION_THRESHOLD) then
drug_wars.drug_damage(player, drug_wars.HASHISH_HEAL)
end
drug_wars.defense_buff(playername, -drug_wars.HASHISH_DEFENSE_BUFF)
end
})
end
end
})

View File

@ -44,14 +44,16 @@ minetest.register_craftitem("drug_wars:cocaine", {
hbhunger.hunger[playername] = 30
end
drug_wars.speed_buff(player, drug_wars.COCAINE_SPEED_BUFF)
drug_wars.speed_buff(player, drug_wars.COCAINE_SPEED_BUFF)
drug_wars.damage_buff(playername, drug_wars.COCAINE_DAMAGE_BUFF)
drug_wars.increase_addiction(playername, drug_wars.COCAINE_ADDICTION)
table.insert(drug_wars.aftereffects, {
countdown = drug_wars.COCAINE_DURATION * (1.0 - drug_wars.addictions[playername]),
on_timeout = function()
drug_wars.speed_debuff(player, drug_wars.COCAINE_SPEED_BUFF, drug_wars.COCAINE_SPEED_BUFF)
drug_wars.drug_damage(player, drug_wars.COCAINE_DAMAGE * (1 + drug_wars.addictions[playername] * 2.0))
drug_wars.damage_buff(playername, -drug_wars.COCAINE_DAMAGE_BUFF)
drug_wars.drug_damage(player, drug_wars.COCAINE_DAMAGE)
end
})
@ -72,14 +74,16 @@ minetest.register_craftitem("drug_wars:crack", {
hbhunger.hunger[playername] = 30
end
drug_wars.speed_buff(player, drug_wars.CRACK_SPEED_BUFF)
drug_wars.speed_buff(player, drug_wars.CRACK_SPEED_BUFF)
drug_wars.damage_buff(playername, drug_wars.CRACK_DAMAGE_BUFF)
drug_wars.increase_addiction(playername, drug_wars.CRACK_ADDICTION)
table.insert(drug_wars.aftereffects, {
countdown = drug_wars.CRACK_DURATION * (1.0 - drug_wars.addictions[playername]),
on_timeout = function()
drug_wars.speed_debuff(player, drug_wars.CRACK_SPEED_BUFF, drug_wars.CRACK_SPEED_BUFF)
drug_wars.drug_damage(player, drug_wars.CRACK_DAMAGE * (1 + drug_wars.addictions[playername] * 2.0))
drug_wars.damage_buff(playername, -drug_wars.CRACK_DAMAGE_BUFF)
drug_wars.drug_damage(player, drug_wars.CRACK_DAMAGE)
end
})
end

View File

@ -1,6 +1,10 @@
--inventory search options
drug_wars.INV_SEARCH_MAX_DISTANCE = 5
--buffs options
drug_wars.DEFENSE_BUFF_CEILING = 0.75
drug_wars.DAMAGE_BUFF_CEILING = 0.75
--addiction options
drug_wars.ADDICTION_TICK = 30
drug_wars.ADDICTION_REDUCTION = 0.1
@ -12,7 +16,8 @@ drug_wars.ADDICTION_DAMAGE_THRESHOLD = 0.35
drug_wars.WEED_SPEED_DEBUFF = 0.2
drug_wars.WEED_SPEED_DEBUFF_THRESHOLD = 0.4
drug_wars.WEED_HUNGER_DEBUFF = 4
drug_wars.WEED_HEAL = 4
drug_wars.WEED_HEAL = 2
drug_wars.WEED_DEFENSE_BUFF = 0.15
drug_wars.WEED_ADDICTION = 0.02
drug_wars.WEED_ADDICTION_THRESHOLD = 0.5
drug_wars.WEED_DURATION = 30
@ -21,21 +26,24 @@ drug_wars.WEED_DURATION = 30
drug_wars.HASHISH_SPEED_DEBUFF = 0.25
drug_wars.HASHISH_SPEED_DEBUFF_THRESHOLD = 0.4
drug_wars.HASHISH_HUNGER_DEBUFF = 6
drug_wars.HASHISH_HEAL = 6
drug_wars.HASHISH_HEAL = 3
drug_wars.HASHISH_DEFENSE_BUFF = 0.3
drug_wars.HASHISH_ADDICTION = 0.05
drug_wars.HASHISH_ADDICTION_THRESHOLD = 0.5
drug_wars.HASHISH_DURATION = 30
drug_wars.HASHISH_DURATION = 60
-- cocaine stats
drug_wars.COCAINE_SPEED_BUFF = 0.6
drug_wars.COCAINE_HUNGER_BUFF = 8
drug_wars.COCAINE_DAMAGE_BUFF = 0.2
drug_wars.COCAINE_ADDICTION = 0.1
drug_wars.COCAINE_DAMAGE = 4
drug_wars.COCAINE_DURATION = 180
drug_wars.COCAINE_DURATION = 10
-- crack stats
drug_wars.CRACK_SPEED_BUFF = 0.8
drug_wars.CRACK_HUNGER_BUFF = 8
drug_wars.CRACK_ADDICTION = 0.125
drug_wars.CRACK_DAMAGE_BUFF = 0.25
drug_wars.CRACK_ADDICTION = 0.15
drug_wars.CRACK_DAMAGE = 3
drug_wars.CRACK_DURATION = 80
drug_wars.CRACK_DURATION = 60

View File

@ -18,12 +18,16 @@ minetest.register_globalstep(function(dtime)
if(drug_wars.addictions[k] >= drug_wars.ADDICTION_REDUCTION_THRESHOLD) then
local new_addiction = addiction - drug_wars.ADDICTION_REDUCTION
drug_wars.addictions[k] = new_addiction
if(drug_wars.addictions[k] < 0) then
drug_wars.addictions[k] = 0
end
minetest.chat_send_player(k, "Your drug addiction has been reduced to " .. drug_wars.addictions[k])
if(new_addiction <= drug_wars.ADDICTION_REDUCTION_THRESHOLD) then
drug_wars.addictions[k] = nil
minetest.chat_send_player(k, "You detoxed yourself, congratulations!")
else
minetest.chat_send_player(k, "Your drug addiction has been reduced to " .. drug_wars.addictions[k])
if(drug_wars.addictions[k] >= drug_wars.ADDICTION_DAMAGE_THRESHOLD) then
drug_wars.drug_damage(minetest.get_player_by_name(k), drug_wars.ADDICTION_DAMAGE)
minetest.chat_send_player(k, "You are intoxicated by drugs, you should stop with that crap")

View File

@ -38,27 +38,66 @@ function drug_wars.get_addiction(playername)
end
function drug_wars.drug_damage(player, value)
local changetable = {}
changetable["type"] = "punch"
player:set_hp(player:get_hp() - value, changetable)
if(player ~= nil) then
local changetable = {}
changetable["type"] = "punch"
local addiction = drug_wars.addictions[player:get_player_name()]
if(addiction ~= nil) then
player:set_hp(player:get_hp() - (value * (1 + addiction)), changetable)
else
player:set_hp(player:get_hp() - value, changetable)
end
end
end
function drug_wars.defense_buff(playername, value)
if(drug_wars.defense_buffs[playername] ~= nil) then
drug_wars.defense_buffs[playername] = drug_wars.defense_buffs[playername] + value
if(drug_wars.defense_buffs[playername] > drug_wars.DEFENSE_BUFF_CEILING) then
drug_wars.defense_buffs[playername] = drug_wars.DEFENSE_BUFF_CEILING
end
else
drug_wars.defense_buffs[playername] = value
end
end
function drug_wars.damage_buff(playername, value)
if(drug_wars.damage_buffs[playername] ~= nil) then
drug_wars.damage_buffs[playername] = drug_wars.damage_buffs[playername] + value
if(drug_wars.damage_buffs[playername] > drug_wars.DAMAGE_BUFF_CEILING) then
drug_wars.damage_buffs[playername] = drug_wars.DAMAGE_BUFF_CEILING
end
else
drug_wars.damage_buffs[playername] = value
end
end
function drug_wars.speed_buff(player, value)
local current_phy = player:get_physics_override()
local new_phy = current_phy
new_phy.speed = new_phy.speed + value
player:set_physics_override(new_phy)
if(player ~= nil) then
local current_phy = player:get_physics_override()
local new_phy = current_phy
new_phy.speed = new_phy.speed + value
player:set_physics_override(new_phy)
end
end
function drug_wars.speed_debuff(player, value, threshold)
local current_phy = player:get_physics_override()
local change_speed = current_phy.speed > threshold
if(change_speed) then
local new_phy = current_phy
new_phy.speed = new_phy.speed - value
player:set_physics_override(new_phy)
end
if(player ~= nil) then
local current_phy = player:get_physics_override()
if(current_phy ~= nil) then
local change_speed = current_phy.speed > threshold
if(change_speed) then
local new_phy = current_phy
new_phy.speed = new_phy.speed - value
player:set_physics_override(new_phy)
end
return change_speed
return change_speed
else
return nil
end
else
return nil
end
end

20
hpeffects.lua Normal file
View File

@ -0,0 +1,20 @@
drug_wars.damage_buffs = {}
drug_wars.defense_buffs = {}
minetest.register_on_player_hpchange(function(player, hp_change, reason)
if(hp_change < 0) then
if(drug_wars.defense_buffs[player:get_player_name()] ~= nil) then
hp_change = hp_change * (1.0 - drug_wars.defense_buffs[player:get_player_name()])
end
if(reason ~= nil and reason.type == 'punch' and reason.object ~= nil and minetest.is_player(reason.object)) then
local punchername = reason.object:get_player_name()
if(drug_wars.damage_buffs[punchername] ~= nil) then
hp_change = hp_change * (1.0 + drug_wars.damage_buffs[punchername])
end
end
end
return hp_change
end, true)

View File

@ -11,6 +11,7 @@ dofile(drug_wars.path.."/config.lua")
dofile(drug_wars.path.."/helpers.lua")
dofile(drug_wars.path.."/globalupdates.lua")
dofile(drug_wars.path.."/invsearch.lua")
dofile(drug_wars.path.."/hpeffects.lua")
dofile(drug_wars.path.."/melee.lua")
dofile(drug_wars.path.."/pipes.lua")
dofile(drug_wars.path.."/cannabis.lua")