BurgZergArcade tutorial 20 help (this is really important to solve)

I have a animal RPG scheduled for release on or sometime after christmas but because of this bug it’s impossible to test the game. And this script is needed because a lot of other scripts depend on it. Here is the video:

and here is my script:

using UnityEngine;
using System.Collections;
using System;               //added to access the enum class

public class BaseCharacter : MonoBehaviour {
	private string _name;
	private int _level;
	private uint _freeExp;
	
	private Attribute[] _primaryAttribute;
	private Vital[] _vital;
	private Skill[] _skill;
	
	public void Awake() {
		_name = string.Empty;
		_level = 0;
		_freeExp = 0;
		
		_primaryAttribute = new Attribute[Enum.GetValues(typeof(AttributeName)).Length];
		_vital = new Vital[Enum.GetValues(typeof(VitalName)).Length];
		_skill = new Skill[Enum.GetValues(typeof(VitalName)).Length];
		
		SetupPrimaryAttributes();
		SetupVitals();
		SetupSkills();
		
	}
	
	public string Name {
		get{ return _name; }
		set{ _name = value; }
	}
	
	public int level {
		get{ return _level; }
		set{ _level = value; }
	}
	
	public uint FreeExp {
		get{ return _freeExp; }
		set{ _freeExp = value; }
	}
	
	public void AddExp(uint exp) {
		_freeExp += exp;
		
		CalculateLevel();
	}
	
	
	// take avg of all players skills and assign that as the player level
	public void CalculateLevel() {
	}
	
	
	private void SetupPrimaryAttributes() {
		for(int cnt = 0; cnt < _primaryAttribute.Length; cnt ++) {
			_primaryAttribute[cnt] = new Attribute();
		}
    }
	
	private void SetupVitals() {
			for(int cnt = 0; cnt < _vital.Length; cnt ++) {
			_vital[cnt] = new Vital();
		}
	}
	
	private void SetupSkills() {
		for(int cnt = 0; cnt < _skill.Length; cnt ++) {
			_skill[cnt] = new Skill();
		}
	}
	
	public Attribute GetPrimaryAttribute(int index) {
		return _primaryAttribute[index];
}
	
		public Vital GetVital(int index) {
		return _primaryvital[index];
	}
	
		public Skill GetSkill(int index) {
		return _skill[index];
	}
	
	private void SetupVitalModifiers() {
		//health
		ModifyingAttribute health = new ModifyingAttribute();
		health.attribute = GetPrimaryAttribute((int)AttributeName.Constitution);
		health.ratio = .5f;
		
		GetVital((int) VitalName.Health).AddModifier(health);
		
		//energy
		ModifyingAttribute energyModifier = new ModifyingAttribute();
		energyModifier.attribute = GetPrimaryAttribute((int)AttributeName.Constitution);
		energyModifier.ratio = 1;
		
		GetVital((int) VitalName.Health).AddModifier(energyModifier);
		
		//mana
	   ModifyingAttribute manaModifier = new ModifyingAttribute();
		manaModifier.attribute = GetPrimaryAttribute((int)AttributeName.Willpower);
		manaModifier.ratio = 1;
		
		GetVital((int) VitalName.Health).AddModifier(energyModifier);
}
		
	
	private void SetupSkillModifiers() {
		//melee offence
		GetSkill((int)SkillName.Melee_Offence).AddModifier(new ModifyingAttribute(GetPrimaryAttribute((int)AttributeName.Might), .33f));
		GetSkill((int)SkillName.Melee_Offence).AddModifier(new ModifyingAttribute(GetPrimaryAttribute((int)AttributeName.Nimbleness), .33f));
		//melee defence
		GetSkill((int)SkillName.Melee_Defence).AddModifier(new ModifyingAttribute(GetPrimaryAttribute((int)AttributeName.Speed), .33f));
		GetSkill((int)SkillName.Melee_Defence).AddModifier(new ModifyingAttribute(GetPrimaryAttribute((int)AttributeName.Constitution), .33f));
		//magic offence
		GetSkill((int)SkillName.Magic_Offence).AddModifier(new ModifyingAttribute(GetPrimaryAttribute((int)AttributeName.Concentration), .33f));
		GetSkill((int)SkillName.Magic_Offence).AddModifier(new ModifyingAttribute(GetPrimaryAttribute((int)AttributeName.Willpower), .33f));
		//magic defence
		GetSkill((int)SkillName.Magic_Defence).AddModifier(new ModifyingAttribute(GetPrimaryAttribute((int)AttributeName.Concentration), .33f));
		GetSkill((int)SkillName.Magic_Defence).AddModifier(new ModifyingAttribute(GetPrimaryAttribute((int)AttributeName.Willpower), .33f));
		//ranged offence
		GetSkill((int)SkillName.Ranged_Offence).AddModifier(new ModifyingAttribute(GetPrimaryAttribute((int)AttributeName.Concentration), .33f));
		GetSkill((int)SkillName.Ranged_Offence).AddModifier(new ModifyingAttribute(GetPrimaryAttribute((int)AttributeName.Speed), .33f));
		//ranged defence
		GetSkill((int)SkillName.Ranged_Defence).AddModifier(new ModifyingAttribute(GetPrimaryAttribute((int)AttributeName.Speed), .33f));
		GetSkill((int)SkillName.Ranged_Defence).AddModifier(new ModifyingAttribute(GetPrimaryAttribute((int)AttributeName.Nimbleness), .33f));
	}
	
	public void StatUpdate() {
		for(int cnt = 0; cnt < _vital.Length; cnt++)
			_vital[cnt].Update();
		
		for(int cnt = 0; cnt < _skill.Length; cnt++)
			_skill[cnt].Update();
	}
}

As far as I can tell, it’s the same as the script on screen and I haven’t been able to find what the problem is for 3 days. This is really important and I need your help right now, I’ve already tried elsewhere with no luck.

What’s the actual problem? Are you getting compile errors? Does the code not work as expected?

The errors are:

Assets/Scripts/Character Classes/BaseCharacter.cs(125,57): error CS1503: Argument #1' cannot convert object’ expression to type `ModifyingAttribute’

Assets/Scripts/Character Classes/BaseCharacter.cs(127,144): error CS1729: The type ModifyingAttribute' does not contain a constructor that takes 2’ arguments

Assets/Scripts/Character Classes/BaseCharacter.cs(127,57): error CS1502: The best overloaded method match for `ModifiedStat.AddModifier(ModifyingAttribute)’ has some invalid arguments

and they just repeat 37 times

Ok, can you post the constructor functions for ModifyingAttribute.

I don’t know what that is, but i’ll just post the codes i think your referring to.

using System.Collections.Generic;

public class ModifiedStat : BaseStat {
	private List<ModifyingAttribute> _mods;    //list of Attributes that modify this stat
	private int _modValue;                     //the amount added to the base value from the modifiers
	
	public ModifiedStat() {
		_mods = new List<ModifyingAttribute>();
		_modValue = 0;
	}
	
	public void AddModifier( ModifyingAttribute mod) {
		_mods.Add (mod);
	}
	
	private void CalculateModValue() {
		_modValue = 0;
		
		if(_mods.Count < 0)
			foreach(ModifyingAttribute att in _mods)
				_modValue += (int)(att.attribute.AdjustedBaseValue * att.ratio);
	}
	
	public new int AdjustedBaseValue {
	    get{ return BaseValue + BuffValue + _modValue; }
	}
	
	public void Update() {
		CalculateModValue();
	}
}

public struct ModifyingAttribute {
	public Attribute attribute;
	public float ratio;
}
public class Attribute : BaseStat {

	public Attribute() {
		ExpToLevel = 50;
		LevelModifier = 1.05f;
	}
}

public enum AttributeName {
	Might,
	Constitution,
	Nimbleness,
	Speed,
	Concentration,
	Willpower,
	Charisma
}

The code is C# by the way so I don’t know if it has a constructor function like javascript

(I know nothing, sorry)

Ok, looks like the ModifyingAttribute attribute struct is missing a constructor.

Try replace this bit of code:

public struct ModifyingAttribute {
    public Attribute attribute;
    public float ratio;
}

With this:

public struct ModifyingAttribute {
	public ModifyingAttribute(Attribute _attribute, float _ratio) {
		attribute = _attribute;
		ratio = _ratio;
	}

    public Attribute attribute;
    public float ratio;
}

That helped a lot, but now there’s one error left

Assets/Scripts/Character Classes/BaseCharacter.cs(79,24): error CS0103: The name `_primaryvital’ does not exist in the current context

Looks like a typo. Try replace _primaryvital with _vital.

Thank you so much :smile:

Now that all the errors are gone I can finish all the work I missed out on