mob
players
var/tmp
firebolt_damage
witherbolt_damage
novabolt_damage
icesquirt_damage
icebolt_damage
lightningbolt_damage
flashbolt_damage
flame_damage
arcticwind_damage
flashboom_damage
shadowwind_damage
consecutivenova_damage
chainlightning_damage
dark_damage
list/spell_picked = list()
/**************************Add new spells spot*************************/
list/missile_spell_list = list(/obj/spells/firebolt, /obj/spells/witherbolt)
list/spell_effect_list = list(/obj/spells/fireboltburn, /obj/spells/withering)
list/mp_required = list (2, 2)
/****************************************************************************/
list/pick_damage = list ()
list/resistances = list ()
list/weaknesses = list ()
proc
cast(spell_number)
if (istype(usr, /mob/players))
usr.check_spell_damage()
var/mob/players/caster = usr
var/damage = caster.pick_damage[spell_number]
if(caster.MP < (caster.spell_picked[spell_number] * caster.mp_required[spell_number]))
caster << output("You do not have enough MP.", "GameInfo.GameInfo")
else
var/mob/mobs_found
var/mob/players/player
var/mob/enemies/enemy
var/list/foundmobs = new()
for (mobs_found in view(3, caster))
if (istype(mobs_found, /mob/players))
var/mob/players/select_player = mobs_found
if (!select_player.PVP)
continue
if (mobs_found == src)
continue
foundmobs.Add(mobs_found)
if (foundmobs.len < 1)
return
mobs_found = foundmobs[1]
if (caster.char_class == "Mage" && caster.level >= 80 && prob(9))
caster.HP -= 1 + (caster.spell_picked[spell_number] * 1)
else
caster.MP -= 1 + (caster.spell_picked[spell_number] * 2)
missile(caster.missile_spell_list[spell_number], caster, mobs_found)
sleep(get_dist(caster, mobs_found))
if(!mobs_found)
return
mobs_found.overlays += caster.spell_effect_list[spell_number]
spawn(5)
if(!mobs_found)
return
mobs_found.overlays -= caster.spell_effect_list[spell_number]
if(caster.char_class == "Wizard" && caster.level >= 40 && prob(1))
damage = round(damage * 2)
caster.HP -= round(damage / 100)
if(caster.HP < 1)
caster.HP = 1
/*if(istype(mobs_found, /mob/players) & caster.PVP == TRUE)
player = mobs_found
if(player.Fireres>0)
damage-=round(damage*(player.Fireres/100),1)*/
player.HP -= damage
damage_numbers(player, damage)
usr.Dead_Mob(player)
else if (istype(mobs_found, /mob/enemies))
enemy = mobs_found
damage = enemy_damage_change("weakness", spell_number, enemy)
damage -= enemy_damage_change("resist", spell_number, enemy)
var/finish_damage = round(damage)
enemy.HP -= finish_damage
damage_numbers(enemy, finish_damage)
usr.Dead_Mob(enemy)
return
enemy_stats(atom/A)
var/mob/players/caster
var/mob/enemies/enemy
if (!istype(usr, /mob/players)) return
if (!istype(A, /mob/enemies)) return
caster = usr
enemy = A
caster.resistances = list()
caster.weaknesses = list()
/*Add new resistances and weaknesses spot*/
caster.resistances.Add(enemy.fireres, enemy.darkres)
caster.weaknesses.Add(enemy.firewk, enemy.darkwk)
/*******************************************/
return
enemy_damage_change(type, spell_number, atom/A)
var/mob/players/caster
var/mob/enemies/enemy
var/change_damage = 0
if (!istype(usr, /mob/players)) return
if (!istype(A, /mob/enemies)) return
caster = usr
enemy = A
enemy_stats(enemy)
if(findtext(type, "weakness") && caster.weaknesses[spell_number] > 0)
change_damage = round(caster.pick_damage[spell_number] * (1 + (caster.weaknesses[spell_number] / 100)), 1)
if(findtext(type, "resist") && caster.resistances[spell_number] > 0)
change_damage = round(caster.pick_damage[spell_number] * (caster.resistances[spell_number] / 100), 1)
caster << output(change_damage, "GameInfo.GameInfo")
return change_damage
check_spell_damage()
if(istype(usr, /mob/players))
var/mob/players/determiner = usr
determiner.spell_picked = list()
determiner.pick_damage = list()
/*****************************************************************Add new spells spot***************************************************************************/
determiner.firebolt_damage = round(((rand(2 + (determiner.fireboltlevel * 2), 4 + (determiner.fireboltlevel * 3))) * ((determiner.Intelligence / 100) + 1)), 1)
determiner.witherbolt_damage = round(((rand(2 + (determiner.witherboltlevel * 1),4 + (determiner.witherboltlevel * 2))) * ((determiner.Strength / 100) + 1)), 1)
determiner.spell_picked.Add(determiner.fireboltlevel, determiner.witherboltlevel)
determiner.pick_damage.Add(determiner.firebolt_damage, determiner.witherbolt_damage)
/**************************************************************************************/
return
Problem description:
resistances or weaknesses causing negative numbers