Crafting changes/new system - the idea

Moderators: Benn, Calix, senji

Calix
MOTODEAMON
Posts: 6109
Joined: Sat Dec 27, 2003 10:05 am

Re: Crafting changes/new system - the idea

Post by Calix »

Joe wrote:
I think being able to make val runic type of weapons without any limitations in this way though could also be dangerous and move the focus into crafting rather than PVM (which you want for the fights to happen etc) where you can just script up a load of materials overnight and make yourself a load of val weps with 0 effort, there isn't much player interaction with that to be honest so I think some way to link it to the PVM side of things would be good.
You're probably right in a way Joe. PvM = still the only way to get scrolls and artifacts though.

Joe
Posts: 588
Joined: Mon Sep 27, 2004 1:26 pm

Re: Crafting changes/new system - the idea

Post by Joe »

Yea I know that is the only way to get those two thing but those are quite a narrow focus of mobs/areas. I'm not saying that's a bad thing but I do just feel there has to be more.
I'm just thinking if we truly are wanting to build a community you need some sort of player interaction to make those better weps/ar in my opinion.

Back in the day GM weps used to be about 'force' in terms of weps and then only the better weps could be gained through pvm. I think some similar level should be applied, so it's no problem to make up to Gold runic modded items but you need some sort of pvm/trading with players to be able to craft the top end stuff.

Night
fIlThY cUnT
Posts: 651
Joined: Thu Feb 05, 2004 9:56 pm
Location: visiting zole in prison

Re: Crafting changes/new system - the idea

Post by Night »

Calix wrote:Right, this is the plan. Intended to return crafters to how they were pre-UOR, in combination with lack of trammel and a working economy - as well as making certain useless skills useful again.

A few ways to achieve the aims, both in coding and theory. Oz is going to chime in with coding options when he can.

The changes:
Runic kits of all kinds cease to exist. As PvM loot, BOD rewards, or whatever. Crafters regain the ability to craft competitive items(which in AOS means runic quality)without the need for runics. The quality will be decided just by crafter skill level and material type. No jumping through hoops to get rewards. If you work to harvest the materials and work your skill up, you can make the best items. How it used to be.
This is a cool idea. I would imagine scaling the difficulty of what you craft would be an issue in the code. It's easy with a BKIT for example as you already know what it will produce, more or less regardless of skill. So would you insist that you need to be 120 tailoring before you can craft BKIT quality armour or is there a sliding scale from GM > 120.
Calix wrote: Secondary skills will now come into the equation. For example. Arms Lore will become the required secondary for Blacksmithing. For this Smith to have the best possible chance to create an item with maximum mods and the highest intensities of these mods, he would need to have GM(120 even better) Smithing and Arms Lore. He would also be using Valorite or Verite Ingots. If he were to use Gold or Agapite Ingots, the chances would be reduced slightly. A further reduction would occur for Copper or Bronze.
Too heavy a requirement of secondary skills will screw templates. Most crafters will have a template they like/prefer and if they can't get close to it they won't bother (crafters that stick will probably be rare on a freeshard). A decent crafter template for a freeshard with new crafting features might be:

120 Blacksmith
120 Tailoring
100 Arms Lore
100 Magery (this will be essential - crafters like to get around and farm fame/karma)
100 Tinkering
100 Mining/Lumberjack
XXX Something else (Fishing/Inscription/Poisoning/Alchemy/Carpentry etc)

If you don't leave enough flexibility for a little diversity there will only be one template for a crafter and imo it won't be enough.

The reliance on Verite / Valorite to craft best weapons is not good imo. One of the great things about runic crafting is the capability to craft and enhance elemental weapons (ie 100% fire). This is a really cool crafter thing (also highly valued by high end pvm'ers) and something dedicated crafters will spend hours and hours on. Much like the quest to build perfect suits etc etc.

Calix wrote: 'Special' wood types (as released by ML, I think?) would be used to determine the same for Fletching. I need to look into these. Obviously the various types of leather would do the same for tailoring.
Similar comments to above. Depending on how crafting of armour will work for example it might be an option to craft a base item (ie leather legs) in normal lether first and then enhance with Spined, Horned, Barbed to get a better spread of resists, max luck etc. Enhancing to achieve better items is also a big draw for crafters. One thing you could do that would be popular is give Spined enhanced armour a nicer spread of resists - maybe 9 or 10 total but with 5 still for phys and 4 or 5 randomly assigned to other resists. Spined armour more or less only got used for luck suits which was pretty wank.
Calix wrote: Oz's tinker kits would need to be modified. Either the kits would be made available on vendors as a normal purchase, or the properties of them could be transferred to normal tinker kits. Whichever was easiest. To prevent the mass use of these kits and the flooding of the market with tons of overpowered jewelry, the resource requirement would be increased massively. Say 50 Gems/Ingots a time. This would obviously increase the importance of the harvesting skills. Fishing will be put in place as the easiest/fastest way to gain large quantities of the gem's required, both making the skill useful again - and creating a secondary way(beyond pvm) for them to be obtained.
Haven't seen these so not sure what their purpose is ?
Calix wrote: Using another ML or SE(I forget) idea, Scribes will be able to craft spelllbooks with AOS mods. Obviously limited below the stupid things available on OSI. This is to make the skill important again as a craft skill and not just something for PvPers. To differentiate between 'craft' and 'pvp' scribes, Item ID will be the secondary skill required in the creation of these books. I'm not actually sure how these worked with materials etc as of yet, I need to look into it. I'm also thinking of using cooking here as a 'harvesting' skill. Creating something to use in the making of spellbooks. This might be uneccessary complications? I was just thinking of making cooking useful again, but seeming like less of a good idea when I think about the coding.
I would make Magery the secondary skill for Inscription otherwise as per earlier comments it will break a lot of crafter templates. I think slayer properties are very popular (it's only PvM after all) and I always thought you should be able to get Mage Weapon properties on Spellbooks ... never understood why you couldn't !
Calix wrote: Alchemy Poisoning and Carpentry were basically untouched by AOS as far as crafting goes. Been thinking of adding Taste ID as a secondary skill to Alchemy/Poisoning for the creation of 'greater' potions, simply to help prevent the 'super mule' type chars with loads of craft skills, although this might be overkill?
I'm fairly sure Alchemy got some tweaks, just can't remember details. Again I wouldn't bother with secondary skills. I don't think Super Mules is such a big deal tbh. Pots should be ok as they are with maybe the exception of gcure depending on what you do with poison etc.
Calix wrote: Does this make sense? In summary, crafters are becoming relevant again just with skills + materials. No boring BOD shit, no relying on PvM. Some useless skills are being factored in and made useful. 'Mule' chars aren't possible because of the need for secondary skills. Oz's fletching/tinkering improvements are modified slightly, and Inscription is made relevant as a craft skill again with craftable spell books. Fishing becomes a viable skill again due to gems. Cooking may also be factored in in some way. Lumberjacking and Mining become viable options as a main source of income because their ingots/boards will be highly valued.
It's worth remembering that lots of crafters loved bod collection (crafters by nature seem to be hoarders/collectors) and not having bods will prevent a % of crafters from playing. The bod era was also one of the busiest/most exciting/most rewarding/most challenging periods for crafters and there was massive crafter collaboration that came out of it.
Calix wrote: Really appreciate any input. Without a good crafting system we really can't make an AOS shard work.
Truth. Decay is the other thing to consider tweaking ?
Image

Calix
MOTODEAMON
Posts: 6109
Joined: Sat Dec 27, 2003 10:05 am

Re: Crafting changes/new system - the idea

Post by Calix »

ubeste.

Right replying without making a massive quote tree:

As regards secondary skills. Do you think there's a place for them at all, even a less limiting system than the one I set out? Or are crafter templates tight enough as is? I know what you mean about Magery being the secondary for Scribe, but was thinking along the lines of differentiating between a PvP and craft scribe. Not 100% necessary ofc.

I like the suggestion about enhancing with different resource types. Do you mean something along the lines of - crafter makes item - has to use 'basic' resource (normal boards, normal ingots, etc) - and you can create some kind of mid-range runic type items? Then it becomes the actual enhancing itself that gives you the real amazing items, if you're lucky enough? With each type of resource used for the enhancing giving a higher % chance of certain mods or resistances? So for example, Smith makes a Longsword with normal ingots, comes out as a reasonable wep. He then enhances with say Gold Ingots, which are known to give a good % chance of say SSI and HCI. The higher the crafters skill, the better the chance of getting high mod intensities/more mods/less chance of item breaking during enhancing? Or have I got it wrong? I like the idea in that it works even more to return crafting to the basics, and also makes all the different resources valuable, rather than just the top end stuff like Valorite.

Oz's tinker kits = runic ring/brace crafting, with Fletcher kits being for bows, obviously.

Night
fIlThY cUnT
Posts: 651
Joined: Thu Feb 05, 2004 9:56 pm
Location: visiting zole in prison

Re: Crafting changes/new system - the idea

Post by Night »

Yeah with the exception of Arms Lore there's no need for secondary skills imo. Crafter templates are always tight as most crafters (who don't script) like to resource / fame gather on a single char. With only 2 chars per account you would need to get all your chosen crafting skills onto one char. In this timeline isn't it very unlikely that there will be any Mage/Scribe PvP'ers ?

That's a slightly different interpretation of what I was getting at but it could definitely work and I do like the concept. The way ingots work currently when enhancing a weapon is that enhancing with Bronze for example will convert 40% of Physical Elemental Damage Type into Fire Damage type so if the weapon was 40% Physical Damage 60% Fire Damage you could enhance with Bronze ore / ingots and create a 100% Fire Damage weapon. High end pvm'ers will prefer elemental damage weapons depending on what they are fighting / farming.

Enhancing to add bonus item properties is a great idea but you would probably lose the elemental weapon angle. If for example you were trying to enhance to get a 100% Fire weapon but Bronze ingots also added HCI and DI but you really wanted SSI and DCI then it wouldn't be possible and would end up being frustrating. To add a luck element into it you could make the added properties random, this would have the benefit of making great weapons rare and give crafters something to really go after. for exmaple a 100% fire weapon with 30% SSI 50% Hit Spell HCI HLD etc etc
Image

Calix
MOTODEAMON
Posts: 6109
Joined: Sat Dec 27, 2003 10:05 am

Re: Crafting changes/new system - the idea

Post by Calix »

Right, makes sense. How would you work this ideally then? The skill + resource + enhancing = item equation, I mean?

Loads of people were mage/scribe memory man. Half of us at least.

...and yeah with secondary skills, it's just to stop someone being able to fit ALL the craft skills onto one temp. I'll look at it again.

Joe
Posts: 588
Joined: Mon Sep 27, 2004 1:26 pm

Re: Crafting changes/new system - the idea

Post by Joe »

Yea I like the idea of creating standard mid range (bronze/gold runic level) items and then being able to improve them. I still think there needs to be some pvm element involved though so that there is trading and player interaction created but not sure how this would work with the different ore enchancing really, maybe you keep them seperate, so some other resource does the improved mods and then the ores do the different elemental dmg etc that Night was talking about?

I dunno just thinking out loud here really

Mercury
[Trial, I-C]
Posts: 1063
Joined: Sat Nov 13, 2004 3:34 pm

Re: Crafting changes/new system - the idea

Post by Mercury »

il use tailoring as how i think an example should go.

120 tailor.

crafts exp leather chest with normal sewing kit and normal leather (creating a piece with i dont know, the quality of a spined piece, 30 resists+2 mods at 30-50%?)
enhances with barbed runic kit (gives +3mods at 50-100%) and barbed leather (gives plus resists say all +3) - chance of breaking linked to tailor skill, in this equation at 120- chance = 0%?

so...............

Failures

50tailor 0% suceed
120tailor 100% suceed
and scale between.

kits...

Spined - enhances to give +1 mod at 50-100% + increase 1 of base mods by 10-30%
Horned - enhances to give +2 mods at 50-100% + increase 1-2 of base mods by 10-30%
Barbed - enhances to give +3 mods at 50-100% + + increase 2 of base mods by 30-50%

Leather

Spined - enhances to give plus resists say all +1
Horned - enhances to give plus resists say all +2
Barbed - enhances to give plus resists say all +3

This will have to be balanced and tested ofc.
BUT i would say incorperates joes desire for the pvm element (still get kits as drops), The increased quality of basic kit, and a slighty more controled kit creating enviroment (ie/ only enhance kit with high base fire and mr1/lmc4 - gives a good shot with a barbed upgrade to create a high end mage piece?

Using that example;

5/9/5/5/5 mr1 lmc4 base piece
upgraded with barbed kit and barbed leather. (no chance to fail as 120 tailor)
rolls gives max for all, so +3mods at 100% and 2 base mods by 50%.
barbed leather gives +3 to all resists.
Piece created is;

8/12/8/8/8 mr2(+50%) lmc8 (+50%) + 3 more mods at 100% so say phys+12 cold+12, LRC20. Results in;

20/12/20/8/8 mr2 lmc8 lrc20 (ie best ever piece of kit)

might require fine tuning of course, and how easy to scriptz is another thing all together.

Calix
MOTODEAMON
Posts: 6109
Joined: Sat Dec 27, 2003 10:05 am

Re: Crafting changes/new system - the idea

Post by Calix »

Yeah I think that's the direction we should move in. Also need to take into account Night's comments about creating elemental dmg weps, and need Oz or Ingo to chime in on ease/feasability of coding when they get chance.

Night
fIlThY cUnT
Posts: 651
Joined: Thu Feb 05, 2004 9:56 pm
Location: visiting zole in prison

Re: Crafting changes/new system - the idea

Post by Night »

I haven't thought through it all so it would need some refinement but here's how I would envisage it working:

No more runic kits - not even as loot drops.

For example Tailoring skill could scale as follows:

0-100 - Normal progress up to making GM armour
105-109.9 Crafting creates equivalent of Spined Runic kit
110-119.9 Create equivalent of Horned Runic kit
120 Create equivalent of Barbed Runic kit

So you could craft with any materials to get roughly equivalent to runic kit quality.

You could make enhancing a lot more fun and rewarding by changing the rules slightly. So, if you craft with normal leather rather than spined, horned, barbed you would get a maximum of 2 random properties and then (and here's where I think the magic begins):

Enhancing process itself would add 1 random property
Enhancing with Spined would add 2 more properties with a slightly higher propensity to add Luck and LRC
Horned would add 2 more random properties
Barbed would add 2 more random properties

Then the really magic bit would be to also allow the enhanced properties to double up on the already crafted properties so by enhancing you could end up with only 3 properties but 2 of them could be doubled up so for example:

You craft plain leather sleeves and get some resists plus 12 LRC and 90 Luck.

Enhancing with Spined adds Self Repair 3 15 LRC and 60 Luck thus combining to add up with SR3 27 LRC and 150 Luck. You might think this could get imbalanced but you can tweak the RNG % for intensities to make it extremely unlikely to max everything. This "challenge" for crafters could get them crafting for ages to make the best suits, which will obviously be in high demand for pvm/p'ers

There would always need to be a reasonably significant chance to fail at enhancing otherwise it would be too easy to create great armour, but not make it so harsh that half or more of your attempts failed.

Crafting PS would change to drop from champs, but with 20's being as rare as eval / magery. This would give a bit of longevity and also introduce the best suits over a longer time period.

Bit of a brain dump but hopefully the concept is clear'ish :mrgreen:
Image

Calix
MOTODEAMON
Posts: 6109
Joined: Sat Dec 27, 2003 10:05 am

Re: Crafting changes/new system - the idea

Post by Calix »

As Night and Joe suggested linking some form of PvM into this system, we make the crafting power scrolls an extremely rare PvM only loot drop. Doom mobs (in Felucca) rather than Champs, IMO.

Other than that we need to make it as simplistic as possible, it's starting to look like a bit of a coding nightmare(I think).

I'm a bit vague on how runics work anyway, what is the % chance of a certain amount of properties? What's the maximum properties per item? Weapons can currently have more props than armour?

I'm just looking through resourceinfo.cs, bare with me on this:

Code: Select all


public static readonly CraftAttributeInfo Blank;
		public static readonly CraftAttributeInfo DullCopper, ShadowIron, Copper, Bronze, Golden, Agapite, Verite, Valorite;
		public static readonly CraftAttributeInfo Spined, Horned, Barbed;
		public static readonly CraftAttributeInfo RedScales, YellowScales, BlackScales, GreenScales, WhiteScales, BlueScales;
		public static readonly CraftAttributeInfo OakWood, AshWood, YewWood, Heartwood, Bloodwood, Frostwood;

		static CraftAttributeInfo()
		{
			Blank = new CraftAttributeInfo();

			CraftAttributeInfo dullCopper = DullCopper = new CraftAttributeInfo();

			dullCopper.ArmorPhysicalResist = 6;
			dullCopper.ArmorDurability = 50;
			dullCopper.ArmorLowerRequirements = 20;
			dullCopper.WeaponDurability = 100;
			dullCopper.WeaponLowerRequirements = 50;
			dullCopper.RunicMinAttributes = 1;
			dullCopper.RunicMaxAttributes = 2;
			if ( Core.ML )
			{
				dullCopper.RunicMinIntensity = 40;
				dullCopper.RunicMaxIntensity = 100;
			}
			else
			{
				dullCopper.RunicMinIntensity = 10;
				dullCopper.RunicMaxIntensity = 35;
			}

			CraftAttributeInfo shadowIron = ShadowIron = new CraftAttributeInfo();

			shadowIron.ArmorPhysicalResist = 2;
			shadowIron.ArmorFireResist = 1;
			shadowIron.ArmorEnergyResist = 5;
			shadowIron.ArmorDurability = 100;
			shadowIron.WeaponColdDamage = 20;
			shadowIron.WeaponDurability = 50;
			shadowIron.RunicMinAttributes = 2;
			shadowIron.RunicMaxAttributes = 2;
			if ( Core.ML )
			{
				shadowIron.RunicMinIntensity = 45;
				shadowIron.RunicMaxIntensity = 100;
			}
			else
			{
				shadowIron.RunicMinIntensity = 20;
				shadowIron.RunicMaxIntensity = 45;
			}

			CraftAttributeInfo copper = Copper = new CraftAttributeInfo();

			copper.ArmorPhysicalResist = 1;
			copper.ArmorFireResist = 1;
			copper.ArmorPoisonResist = 5;
			copper.ArmorEnergyResist = 2;
			copper.WeaponPoisonDamage = 10;
			copper.WeaponEnergyDamage = 20;
			copper.RunicMinAttributes = 2;
			copper.RunicMaxAttributes = 3;
			if ( Core.ML )
			{
				copper.RunicMinIntensity = 50;
				copper.RunicMaxIntensity = 100;
			}
			else
			{
				copper.RunicMinIntensity = 25;
				copper.RunicMaxIntensity = 50;
			}

			CraftAttributeInfo bronze = Bronze = new CraftAttributeInfo();

			bronze.ArmorPhysicalResist = 3;
			bronze.ArmorColdResist = 5;
			bronze.ArmorPoisonResist = 1;
			bronze.ArmorEnergyResist = 1;
			bronze.WeaponFireDamage = 40;
			bronze.RunicMinAttributes = 3;
			bronze.RunicMaxAttributes = 3;
			if ( Core.ML )
			{
				bronze.RunicMinIntensity = 55;
				bronze.RunicMaxIntensity = 100;
			}
			else
			{
				bronze.RunicMinIntensity = 30;
				bronze.RunicMaxIntensity = 65;
			}

			CraftAttributeInfo golden = Golden = new CraftAttributeInfo();

			golden.ArmorPhysicalResist = 1;
			golden.ArmorFireResist = 1;
			golden.ArmorColdResist = 2;
			golden.ArmorEnergyResist = 2;
			golden.ArmorLuck = 40;
			golden.ArmorLowerRequirements = 30;
			golden.WeaponLuck = 40;
			golden.WeaponLowerRequirements = 50;
			golden.RunicMinAttributes = 3;
			golden.RunicMaxAttributes = 4;
			if ( Core.ML )
			{
				golden.RunicMinIntensity = 60;
				golden.RunicMaxIntensity = 100;
			}
			else
			{
				golden.RunicMinIntensity = 35;
				golden.RunicMaxIntensity = 75;
			}

			CraftAttributeInfo agapite = Agapite = new CraftAttributeInfo();

			agapite.ArmorPhysicalResist = 2;
			agapite.ArmorFireResist = 3;
			agapite.ArmorColdResist = 2;
			agapite.ArmorPoisonResist = 2;
			agapite.ArmorEnergyResist = 2;
			agapite.WeaponColdDamage = 30;
			agapite.WeaponEnergyDamage = 20;
			agapite.RunicMinAttributes = 4;
			agapite.RunicMaxAttributes = 4;
			if ( Core.ML )
			{
				agapite.RunicMinIntensity = 65;
				agapite.RunicMaxIntensity = 100;
			}
			else
			{
				agapite.RunicMinIntensity = 40;
				agapite.RunicMaxIntensity = 80;
			}

			CraftAttributeInfo verite = Verite = new CraftAttributeInfo();

			verite.ArmorPhysicalResist = 3;
			verite.ArmorFireResist = 3;
			verite.ArmorColdResist = 2;
			verite.ArmorPoisonResist = 3;
			verite.ArmorEnergyResist = 1;
			verite.WeaponPoisonDamage = 40;
			verite.WeaponEnergyDamage = 20;
			verite.RunicMinAttributes = 4;
			verite.RunicMaxAttributes = 5;
			if ( Core.ML )
			{
				verite.RunicMinIntensity = 70;
				verite.RunicMaxIntensity = 100;
			}
			else
			{
				verite.RunicMinIntensity = 45;
				verite.RunicMaxIntensity = 90;
			}

			CraftAttributeInfo valorite = Valorite = new CraftAttributeInfo();

			valorite.ArmorPhysicalResist = 4;
			valorite.ArmorColdResist = 3;
			valorite.ArmorPoisonResist = 3;
			valorite.ArmorEnergyResist = 3;
			valorite.ArmorDurability = 50;
			valorite.WeaponFireDamage = 10;
			valorite.WeaponColdDamage = 20;
			valorite.WeaponPoisonDamage = 10;
			valorite.WeaponEnergyDamage = 20;
			valorite.RunicMinAttributes = 5;
			valorite.RunicMaxAttributes = 5;
			if ( Core.ML )
			{
				valorite.RunicMinIntensity = 85;
				valorite.RunicMaxIntensity = 100;
			}
			else
			{
				valorite.RunicMinIntensity = 50;
				valorite.RunicMaxIntensity = 100;
			}

			CraftAttributeInfo spined = Spined = new CraftAttributeInfo();

			spined.ArmorPhysicalResist = 5;
			spined.ArmorLuck = 40;
			spined.RunicMinAttributes = 1;
			spined.RunicMaxAttributes = 3;
			if ( Core.ML )
			{
				spined.RunicMinIntensity = 40;
				spined.RunicMaxIntensity = 100;
			}
			else
			{
				spined.RunicMinIntensity = 20;
				spined.RunicMaxIntensity = 40;
			}

			CraftAttributeInfo horned = Horned = new CraftAttributeInfo();

			horned.ArmorPhysicalResist = 2;
			horned.ArmorFireResist = 3;
			horned.ArmorColdResist = 2;
			horned.ArmorPoisonResist = 2;
			horned.ArmorEnergyResist = 2;
			horned.RunicMinAttributes = 3;
			horned.RunicMaxAttributes = 4;
			if ( Core.ML )
			{
				horned.RunicMinIntensity = 45;
				horned.RunicMaxIntensity = 100;
			}
			else
			{
				horned.RunicMinIntensity = 30;
				horned.RunicMaxIntensity = 70;
			}

			CraftAttributeInfo barbed = Barbed = new CraftAttributeInfo();

			barbed.ArmorPhysicalResist = 2;
			barbed.ArmorFireResist = 1;
			barbed.ArmorColdResist = 2;
			barbed.ArmorPoisonResist = 3;
			barbed.ArmorEnergyResist = 4;
			barbed.RunicMinAttributes = 4;
			barbed.RunicMaxAttributes = 5;
			if ( Core.ML )
			{
				barbed.RunicMinIntensity = 50;
				barbed.RunicMaxIntensity = 100;
			}
			else
			{
				barbed.RunicMinIntensity = 40;
				barbed.RunicMaxIntensity = 100;
			}

			CraftAttributeInfo red = RedScales = new CraftAttributeInfo();

			red.ArmorFireResist = 10;
			red.ArmorColdResist = -3;

			CraftAttributeInfo yellow = YellowScales = new CraftAttributeInfo();

			yellow.ArmorPhysicalResist = -3;
			yellow.ArmorLuck = 20;

			CraftAttributeInfo black = BlackScales = new CraftAttributeInfo();

			black.ArmorPhysicalResist = 10;
			black.ArmorEnergyResist = -3;

			CraftAttributeInfo green = GreenScales = new CraftAttributeInfo();

			green.ArmorFireResist = -3;
			green.ArmorPoisonResist = 10;

			CraftAttributeInfo white = WhiteScales = new CraftAttributeInfo();

			white.ArmorPhysicalResist = -3;
			white.ArmorColdResist = 10;

			CraftAttributeInfo blue = BlueScales = new CraftAttributeInfo();

			blue.ArmorPoisonResist = -3;
			blue.ArmorEnergyResist = 10;

			//public static readonly CraftAttributeInfo OakWood, AshWood, YewWood, Heartwood, Bloodwood, Frostwood;

			CraftAttributeInfo oak = OakWood = new CraftAttributeInfo();

			CraftAttributeInfo ash = AshWood = new CraftAttributeInfo();

			CraftAttributeInfo yew = YewWood = new CraftAttributeInfo();

			CraftAttributeInfo heart = Heartwood = new CraftAttributeInfo();

			CraftAttributeInfo blood = Bloodwood = new CraftAttributeInfo();

			CraftAttributeInfo frost = Frostwood = new CraftAttributeInfo();
		}

That's the code. wtf are scales for? Anyway, I'm assuming I'm right in thinking that's the attributes and mods that using these particular resources adds to an item, with or without runic use? Very very easy to edit.

Calix
MOTODEAMON
Posts: 6109
Joined: Sat Dec 27, 2003 10:05 am

Re: Crafting changes/new system - the idea

Post by Calix »

...and the WEAPON formula from base runic

Code: Select all


public static void ApplyAttributesTo( BaseWeapon weapon, bool isRunicTool, int luckChance, int attributeCount, int min, int max )
		{
			m_IsRunicTool = isRunicTool;
			m_LuckChance = luckChance;

			AosAttributes primary = weapon.Attributes;
			AosWeaponAttributes secondary = weapon.WeaponAttributes;

			m_Props.SetAll( false );

			if ( weapon is BaseRanged )
				m_Props.Set( 2, true ); // ranged weapons cannot be ubws or mageweapon

			for ( int i = 0; i < attributeCount; ++i )
			{
				int random = GetUniqueRandom( 25 );

				if ( random == -1 )
					break;

				switch ( random )
				{
					case 0:
					{
						switch ( Utility.Random( 5 ) )
						{
							case 0: ApplyAttribute( secondary, min, max, AosWeaponAttribute.HitPhysicalArea,2, 50, 2 ); break;
							case 1: ApplyAttribute( secondary, min, max, AosWeaponAttribute.HitFireArea,	2, 50, 2 ); break;
							case 2: ApplyAttribute( secondary, min, max, AosWeaponAttribute.HitColdArea,	2, 50, 2 ); break;
							case 3: ApplyAttribute( secondary, min, max, AosWeaponAttribute.HitPoisonArea,	2, 50, 2 ); break;
							case 4: ApplyAttribute( secondary, min, max, AosWeaponAttribute.HitEnergyArea,	2, 50, 2 ); break;
						}

						break;
					}
					case 1:
					{
						switch ( Utility.Random( 4 ) )
						{
							case 0: ApplyAttribute( secondary, min, max, AosWeaponAttribute.HitMagicArrow,	2, 50, 2 ); break;
							case 1: ApplyAttribute( secondary, min, max, AosWeaponAttribute.HitHarm,		2, 50, 2 ); break;
							case 2: ApplyAttribute( secondary, min, max, AosWeaponAttribute.HitFireball,	2, 50, 2 ); break;
							case 3: ApplyAttribute( secondary, min, max, AosWeaponAttribute.HitLightning,	2, 50, 2 ); break;
						}

						break;
					}
					case 2:
					{
						switch ( Utility.Random( 2 ) )
						{
							case 0: ApplyAttribute( secondary, min, max, AosWeaponAttribute.UseBestSkill,	1, 1 ); break;
							case 1: ApplyAttribute( secondary, min, max, AosWeaponAttribute.MageWeapon,		1, 10 ); break;
						}

						break;
					}
					case  3: ApplyAttribute( primary,	min, max, AosAttribute.WeaponDamage,				1, 50 ); break;
					case  4: ApplyAttribute( primary,	min, max, AosAttribute.DefendChance,				1, 15 ); break;
					case  5: ApplyAttribute( primary,	min, max, AosAttribute.CastSpeed,					1, 1 ); break;
					case  6: ApplyAttribute( primary,	min, max, AosAttribute.AttackChance,				1, 15 ); break;
					case  7: ApplyAttribute( primary,	min, max, AosAttribute.Luck,						1, 100 ); break;
					case  8: ApplyAttribute( primary,	min, max, AosAttribute.WeaponSpeed,					5, 30, 5 ); break;
					case  9: ApplyAttribute( primary,	min, max, AosAttribute.SpellChanneling,				1, 1 ); break;
					case 10: ApplyAttribute( secondary, min, max, AosWeaponAttribute.HitDispel,				2, 50, 2 ); break;
					case 11: ApplyAttribute( secondary,	min, max, AosWeaponAttribute.HitLeechHits,			2, 50, 2 ); break;
					case 12: ApplyAttribute( secondary,	min, max, AosWeaponAttribute.HitLowerAttack,		2, 50, 2 ); break;
					case 13: ApplyAttribute( secondary,	min, max, AosWeaponAttribute.HitLowerDefend,		2, 50, 2 ); break;
					case 14: ApplyAttribute( secondary,	min, max, AosWeaponAttribute.HitLeechMana,			2, 50, 2 ); break;
					case 15: ApplyAttribute( secondary,	min, max, AosWeaponAttribute.HitLeechStam,			2, 50, 2 ); break;
					case 16: ApplyAttribute( secondary,	min, max, AosWeaponAttribute.LowerStatReq,			10, 100, 10 ); break;
					case 17: ApplyAttribute( secondary,	min, max, AosWeaponAttribute.ResistPhysicalBonus,	1, 15 ); break;
					case 18: ApplyAttribute( secondary,	min, max, AosWeaponAttribute.ResistFireBonus,		1, 15 ); break;
					case 19: ApplyAttribute( secondary,	min, max, AosWeaponAttribute.ResistColdBonus,		1, 15 ); break;
					case 20: ApplyAttribute( secondary,	min, max, AosWeaponAttribute.ResistPoisonBonus,		1, 15 ); break;
					case 21: ApplyAttribute( secondary,	min, max, AosWeaponAttribute.ResistEnergyBonus,		1, 15 ); break;
					case 22: ApplyAttribute( secondary, min, max, AosWeaponAttribute.DurabilityBonus,		10, 100, 10 ); break;
					case 23: weapon.Slayer = GetRandomSlayer(); break;
					case 24: GetElementalDamages( weapon ); break;
				}
			}
		}

		public static void GetElementalDamages( BaseWeapon weapon )
		{
			GetElementalDamages( weapon, true );
		}

		public static void GetElementalDamages( BaseWeapon weapon, bool randomizeOrder )
		{
			int fire, phys, cold, nrgy, pois, chaos, direct;

			weapon.GetDamageTypes( null, out phys, out fire, out cold, out pois, out nrgy, out chaos, out direct );

			int totalDamage = phys;

			AosElementAttribute[] attrs = new AosElementAttribute[]
			{
				AosElementAttribute.Cold,
				AosElementAttribute.Energy,
				AosElementAttribute.Fire,
				AosElementAttribute.Poison
			};

			if( randomizeOrder )
			{
				for( int i = 0; i < attrs.Length; i++ )
				{
					int rand = Utility.Random( attrs.Length );
					AosElementAttribute temp = attrs[i];

					attrs[i] = attrs[rand];
					attrs[rand] = temp;
				}
			}


			/*
			totalDamage = AssignElementalDamage( weapon, AosElementAttribute.Cold,		totalDamage );
			totalDamage = AssignElementalDamage( weapon, AosElementAttribute.Energy,	totalDamage );
			totalDamage = AssignElementalDamage( weapon, AosElementAttribute.Fire,		totalDamage );
			totalDamage = AssignElementalDamage( weapon, AosElementAttribute.Poison,	totalDamage );

			weapon.AosElementDamages[AosElementAttribute.Physical] = 100 - totalDamage;
			 * */

			for( int i = 0; i < attrs.Length; i++ )
				totalDamage = AssignElementalDamage( weapon, attrs[i], totalDamage );


			//Order is Cold, Energy, Fire, Poison -> Physical left
			//Cannot be looped, AoselementAttribute is 'out of order'

			weapon.Hue = weapon.GetElementalDamageHue();
		}

		private static int AssignElementalDamage( BaseWeapon weapon, AosElementAttribute attr, int totalDamage )
		{
			if( totalDamage <= 0 )
				return 0;

			int random = Utility.Random( (int)(totalDamage/10) + 1 ) * 10;
			weapon.AosElementDamages[attr] = random;

			return (totalDamage - random);
		}

		public static SlayerName GetRandomSlayer()
		{
			// TODO: Check random algorithm on OSI

			SlayerGroup[] groups = SlayerGroup.Groups;

			if ( groups.Length == 0 )
				return SlayerName.None;

			SlayerGroup group = groups[Utility.Random( groups.Length -1 )]; //-1 To Exclude the Fey Slayer which appears ONLY on a certain artifact.
			SlayerEntry entry;

			if ( 10 > Utility.Random( 100 ) ) // 10% chance to do super slayer
			{
				entry = group.Super;
			}
			else
			{
				SlayerEntry[] entries = group.Entries;

				if ( entries.Length == 0 )
					return SlayerName.None;

				entry = entries[Utility.Random( entries.Length )];
			}

			return entry.Name;

Calix
MOTODEAMON
Posts: 6109
Joined: Sat Dec 27, 2003 10:05 am

Re: Crafting changes/new system - the idea

Post by Calix »

Armour

Code: Select all


public void ApplyAttributesTo( BaseArmor armor )
		{
			CraftResourceInfo resInfo = CraftResources.GetInfo( m_Resource );

			if ( resInfo == null )
				return;

			CraftAttributeInfo attrs = resInfo.AttributeInfo;

			if ( attrs == null )
				return;

			int attributeCount = Utility.RandomMinMax( attrs.RunicMinAttributes, attrs.RunicMaxAttributes );
			int min = attrs.RunicMinIntensity;
			int max = attrs.RunicMaxIntensity;

			ApplyAttributesTo( armor, true, 0, attributeCount, min, max );
		}

		public static void ApplyAttributesTo( BaseArmor armor, int attributeCount, int min, int max )
		{
			ApplyAttributesTo( armor, false, 0, attributeCount, min, max );
		}

		public static void ApplyAttributesTo( BaseArmor armor, bool isRunicTool, int luckChance, int attributeCount, int min, int max )
		{
			m_IsRunicTool = isRunicTool;
			m_LuckChance = luckChance;

			AosAttributes primary = armor.Attributes;
			AosArmorAttributes secondary = armor.ArmorAttributes;

			m_Props.SetAll( false );

			bool isShield = ( armor is BaseShield );
			int baseCount = ( isShield ? 5 : 20 );
			int baseOffset = ( isShield ? 0 : 4 );

			if ( !isShield && armor.MeditationAllowance == ArmorMeditationAllowance.All )
				m_Props.Set( 3, true ); // remove mage armor from possible properties
			if ( armor.Resource >= CraftResource.RegularLeather && armor.Resource <= CraftResource.BarbedLeather )
			{
				m_Props.Set( 0, true ); // remove lower requirements from possible properties for leather armor
				m_Props.Set( 2, true ); // remove durability bonus from possible properties
			}
			if ( armor.RequiredRace == Race.Elf )
				m_Props.Set( 7, true ); // elves inherently have night sight and elf only armor doesn't get night sight as a mod

			for ( int i = 0; i < attributeCount; ++i )
			{
				int random = GetUniqueRandom( baseCount );

				if ( random == -1 )
					break;

				random += baseOffset;

				switch ( random )
				{
						/* Begin Sheilds */
					case  0: ApplyAttribute( primary,	min, max, AosAttribute.SpellChanneling,			1, 1 ); break;
					case  1: ApplyAttribute( primary,	min, max, AosAttribute.DefendChance,			1, 15 ); break;
					case  2:
						if (Core.ML) {
							ApplyAttribute( primary,    min, max, AosAttribute.ReflectPhysical,                 1, 15 );
							} else {
							ApplyAttribute( primary,    min, max, AosAttribute.AttackChance,                    1, 15 );
							}
						break;
					case  3: ApplyAttribute( primary,	min, max, AosAttribute.CastSpeed,				1, 1 ); break;
						/* Begin Armor */
					case  4: ApplyAttribute( secondary,	min, max, AosArmorAttribute.LowerStatReq,		10, 100, 10 ); break;
					case  5: ApplyAttribute( secondary,	min, max, AosArmorAttribute.DurabilityBonus,	10, 100, 10 ); break;
						/* End Shields */
					case  6: ApplyAttribute( secondary,	min, max, AosArmorAttribute.MageArmor,			1, 1 ); break;
					case  7: ApplyAttribute( primary,	min, max, AosAttribute.RegenHits,				1, 2 ); break;
					case  8: ApplyAttribute( primary,	min, max, AosAttribute.RegenStam,				1, 3 ); break;
					case  9: ApplyAttribute( primary,	min, max, AosAttribute.RegenMana,				1, 2 ); break;
					case 10: ApplyAttribute( primary,	min, max, AosAttribute.NightSight,				1, 1 ); break;
					case 11: ApplyAttribute( primary,	min, max, AosAttribute.BonusHits,				1, 5 ); break;
					case 12: ApplyAttribute( primary,	min, max, AosAttribute.BonusStam,				1, 8 ); break;
					case 13: ApplyAttribute( primary,	min, max, AosAttribute.BonusMana,				1, 8 ); break;
					case 14: ApplyAttribute( primary,	min, max, AosAttribute.LowerManaCost,			1, 8 ); break;
					case 15: ApplyAttribute( primary,	min, max, AosAttribute.LowerRegCost,			1, 20 ); break;
					case 16: ApplyAttribute( primary,	min, max, AosAttribute.Luck,					1, 100 ); break;
					case 17: ApplyAttribute( primary,	min, max, AosAttribute.ReflectPhysical,			1, 15 ); break;
					case 18: ApplyResistance( armor,	min, max, ResistanceType.Physical,				1, 15 ); break;
					case 19: ApplyResistance( armor,	min, max, ResistanceType.Fire,					1, 15 ); break;
					case 20: ApplyResistance( armor,	min, max, ResistanceType.Cold,					1, 15 ); break;
					case 21: ApplyResistance( armor,	min, max, ResistanceType.Poison,				1, 15 ); break;
					case 22: ApplyResistance( armor,	min, max, ResistanceType.Energy,				1, 15 ); break;
					/* End Armor */
				}
			}
		}

		public static void ApplyAttributesTo( BaseHat hat, int attributeCount, int min, int max )
		{
			ApplyAttributesTo( hat, false, 0, attributeCount, min, max );
		}

		public static void ApplyAttributesTo( BaseHat hat, bool isRunicTool, int luckChance, int attributeCount, int min, int max )
		{
			m_IsRunicTool = isRunicTool;
			m_LuckChance = luckChance;

			AosAttributes primary = hat.Attributes;
			AosArmorAttributes secondary = hat.ClothingAttributes;
			AosElementAttributes resists = hat.Resistances;

			m_Props.SetAll( false );

			for ( int i = 0; i < attributeCount; ++i )
			{
				int random = GetUniqueRandom( 19 );

				if ( random == -1 )
					break;

				switch ( random )
				{
					case  0: ApplyAttribute( primary,	min, max, AosAttribute.ReflectPhysical,			1, 15 ); break;
					case  1: ApplyAttribute( primary,	min, max, AosAttribute.RegenHits,				1, 2 ); break;
					case  2: ApplyAttribute( primary,	min, max, AosAttribute.RegenStam,				1, 3 ); break;
					case  3: ApplyAttribute( primary,	min, max, AosAttribute.RegenMana,				1, 2 ); break;
					case  4: ApplyAttribute( primary,	min, max, AosAttribute.NightSight,				1, 1 ); break;
					case  5: ApplyAttribute( primary,	min, max, AosAttribute.BonusHits,				1, 5 ); break;
					case  6: ApplyAttribute( primary,	min, max, AosAttribute.BonusStam,				1, 8 ); break;
					case  7: ApplyAttribute( primary,	min, max, AosAttribute.BonusMana,				1, 8 ); break;
					case  8: ApplyAttribute( primary,	min, max, AosAttribute.LowerManaCost,			1, 8 ); break;
					case  9: ApplyAttribute( primary,	min, max, AosAttribute.LowerRegCost,			1, 20 ); break;
					case 10: ApplyAttribute( primary,	min, max, AosAttribute.Luck,					1, 100 ); break;
					case 11: ApplyAttribute( secondary,	min, max, AosArmorAttribute.LowerStatReq,		10, 100, 10 ); break;
					case 12: ApplyAttribute( secondary,	min, max, AosArmorAttribute.SelfRepair,			1, 5 ); break;
					case 13: ApplyAttribute( secondary,	min, max, AosArmorAttribute.DurabilityBonus,	10, 100, 10 ); break;
					case 14: ApplyAttribute( resists,	min, max, AosElementAttribute.Physical,			1, 15 ); break;
					case 15: ApplyAttribute( resists,	min, max, AosElementAttribute.Fire,				1, 15 ); break;
					case 16: ApplyAttribute( resists,	min, max, AosElementAttribute.Cold,				1, 15 ); break;
					case 17: ApplyAttribute( resists,	min, max, AosElementAttribute.Poison,			1, 15 ); break;
					case 18: ApplyAttribute( resists,	min, max, AosElementAttribute.Energy,			1, 15 ); break;
				}
			}
		}

		public static void ApplyAttributesTo( BaseJewel jewelry, int attributeCount, int min, int max )
		{
			ApplyAttributesTo( jewelry, false, 0, attributeCount, min, max );
		}
		
		public void ApplyAttributesTo( BaseJewel jewelry ) {
			
		CraftResourceInfo resInfo = CraftResources.GetInfo( m_Resource );

			if ( resInfo == null )
				return;

			CraftAttributeInfo attrs = resInfo.AttributeInfo;

			if ( attrs == null )
				return;

			int attributeCount = Utility.RandomMinMax( attrs.RunicMinAttributes, attrs.RunicMaxAttributes );
			int min = attrs.RunicMinIntensity;
			int max = attrs.RunicMaxIntensity;
			
			ApplyAttributesTo( jewelry, true, 0, attributeCount, min, max );
			
		}

Calix
MOTODEAMON
Posts: 6109
Joined: Sat Dec 27, 2003 10:05 am

Re: Crafting changes/new system - the idea

Post by Calix »

Jewelry(Oz's system)

Code: Select all


	public static void ApplyAttributesTo( BaseJewel jewelry, bool isRunicTool, int luckChance, int attributeCount, int min, int max )
		{
			m_IsRunicTool = isRunicTool;
			m_LuckChance = luckChance;

			AosAttributes primary = jewelry.Attributes;
			AosElementAttributes resists = jewelry.Resistances;
			AosSkillBonuses skills = jewelry.SkillBonuses;
			GemType gType = jewelry.GemType;
			
			//Mod reduction - 80% chance of 3 mods, 15% chance of 4 mods, 5% chance of 5 mods.
                        double reduction = Utility.RandomDouble();
                        if( 0.80 > reduction )
                        attributeCount -= 2;
                        else if ( 0.95 > reduction )
                        attributeCount -= 1;

			m_Props.SetAll( false );
			
			if ( gType == GemType.Emerald )  // Normal ring, uses all mods.
					for ( int i = 0; i < attributeCount; ++i )
					{
						int random = GetUniqueRandom( 24 );

						if ( random == -1 )
						break;

						switch ( random )
						{
						case  0: ApplyAttribute( resists,	min, max, AosElementAttribute.Physical,			1, 15 ); break;
						case  1: ApplyAttribute( resists,	min, max, AosElementAttribute.Fire,				1, 15 ); break;
						case  2: ApplyAttribute( resists,	min, max, AosElementAttribute.Cold,				1, 15 ); break;
						case  3: ApplyAttribute( resists,	min, max, AosElementAttribute.Poison,			1, 15 ); break;
						case  4: ApplyAttribute( resists,	min, max, AosElementAttribute.Energy,			1, 15 ); break;
						case  5: ApplyAttribute( primary,	min, max, AosAttribute.WeaponDamage,			1, 25 ); break;
						case  6: ApplyAttribute( primary,	min, max, AosAttribute.DefendChance,			1, 15 ); break;
						case  7: ApplyAttribute( primary,	min, max, AosAttribute.AttackChance,			1, 15 ); break;
						case  8: ApplyAttribute( primary,	min, max, AosAttribute.BonusStr,				1, 8 ); break;
						case  9: ApplyAttribute( primary,	min, max, AosAttribute.BonusDex,				1, 8 ); break;
						case 10: ApplyAttribute( primary,	min, max, AosAttribute.BonusInt,				1, 8 ); break;
						case 11: ApplyAttribute( primary,	min, max, AosAttribute.EnhancePotions,			5, 25, 5 ); break;
						case 12: ApplyAttribute( primary,	min, max, AosAttribute.CastSpeed,				1, 1 ); break;
						case 13: ApplyAttribute( primary,	min, max, AosAttribute.CastRecovery,			1, 3 ); break;
						case 14: ApplyAttribute( primary,	min, max, AosAttribute.LowerManaCost,			1, 8 ); break;
						case 15: ApplyAttribute( primary,	min, max, AosAttribute.LowerRegCost,			1, 20 ); break;
						case 16: ApplyAttribute( primary,	min, max, AosAttribute.Luck,					1, 100 ); break;
						case 17: ApplyAttribute( primary,	min, max, AosAttribute.SpellDamage,				1, 12 ); break;
						case 18: ApplyAttribute( primary,	min, max, AosAttribute.NightSight,				1, 1 ); break;
						case 19: ApplySkillBonus( skills,	min, max, 0,									1, 15 ); break;
						case 20: ApplySkillBonus( skills,	min, max, 1,									1, 15 ); break;
						case 21: ApplySkillBonus( skills,	min, max, 2,									1, 15 ); break;
						case 22: ApplySkillBonus( skills,	min, max, 3,									1, 15 ); break;
						case 23: ApplySkillBonus( skills,	min, max, 4,									1, 15 ); break;
						}
					}					
				else if ( gType == GemType.Sapphire ) //Sapphire ring. Cold-energy focused ring.
					for ( int i = 0; i < attributeCount; ++i )
					{
						int random = GetUniqueRandom( 20 );

						if ( random == -1 )
						break;

						switch ( random )
						{
						case  0: ApplyAttribute( resists,	min, max, AosElementAttribute.Cold,				1, 15 ); break;
						case  1: ApplyAttribute( resists,	min, max, AosElementAttribute.Energy,			1, 15 ); break;
						case  2: ApplyAttribute( primary,	min, max, AosAttribute.WeaponDamage,			1, 25 ); break;
						case  3: ApplyAttribute( primary,	min, max, AosAttribute.DefendChance,			1, 15 ); break;
						case  4: ApplyAttribute( primary,	min, max, AosAttribute.AttackChance,			1, 15 ); break;
						case  5: ApplyAttribute( primary,	min, max, AosAttribute.BonusStr,				1, 8 ); break;
						case  6: ApplyAttribute( primary,	min, max, AosAttribute.BonusDex,				1, 8 ); break;
						case  7: ApplyAttribute( primary,	min, max, AosAttribute.BonusInt,				1, 8 ); break;
						case  8: ApplyAttribute( primary,	min, max, AosAttribute.EnhancePotions,			5, 25, 5 ); break;
						case  9: ApplyAttribute( primary,	min, max, AosAttribute.CastSpeed,				1, 1 ); break;
						case 10: ApplyAttribute( primary,	min, max, AosAttribute.CastRecovery,			1, 3 ); break;
						case 11: ApplyAttribute( primary,	min, max, AosAttribute.LowerManaCost,			1, 8 ); break;
						case 12: ApplyAttribute( primary,	min, max, AosAttribute.LowerRegCost,			1, 20 ); break;
						case 13: ApplyAttribute( primary,	min, max, AosAttribute.Luck,					1, 100 ); break;
						case 14: ApplyAttribute( primary,	min, max, AosAttribute.SpellDamage,				1, 12 ); break;
						case 15: ApplySkillBonus( skills,	min, max, 0,									1, 15 ); break;
						case 16: ApplySkillBonus( skills,	min, max, 1,									1, 15 ); break;
						case 17: ApplySkillBonus( skills,	min, max, 2,									1, 15 ); break;
						case 18: ApplySkillBonus( skills,	min, max, 3,									1, 15 ); break;
						case 19: ApplySkillBonus( skills,	min, max, 4,									1, 15 ); break;
						}
					}					
				else // Ruby ring. Fire-nox focused ring.			
					for ( int i = 0; i < attributeCount; ++i )
					{
						int random = GetUniqueRandom( 20 );

						if ( random == -1 )
						break;

						switch ( random )
						{
						case  0: ApplyAttribute( resists,	min, max, AosElementAttribute.Fire,				1, 15 ); break;
						case  1: ApplyAttribute( resists,	min, max, AosElementAttribute.Poison,			1, 15 ); break;
						case  2: ApplyAttribute( primary,	min, max, AosAttribute.WeaponDamage,			1, 25 ); break;
						case  3: ApplyAttribute( primary,	min, max, AosAttribute.DefendChance,			1, 15 ); break;
						case  4: ApplyAttribute( primary,	min, max, AosAttribute.AttackChance,			1, 15 ); break;
						case  5: ApplyAttribute( primary,	min, max, AosAttribute.BonusStr,				1, 8 ); break;
						case  6: ApplyAttribute( primary,	min, max, AosAttribute.BonusDex,				1, 8 ); break;
						case  7: ApplyAttribute( primary,	min, max, AosAttribute.BonusInt,				1, 8 ); break;
						case  8: ApplyAttribute( primary,	min, max, AosAttribute.EnhancePotions,			5, 25, 5 ); break;
						case  9: ApplyAttribute( primary,	min, max, AosAttribute.CastSpeed,				1, 1 ); break;
						case 10: ApplyAttribute( primary,	min, max, AosAttribute.CastRecovery,			1, 3 ); break;
						case 11: ApplyAttribute( primary,	min, max, AosAttribute.LowerManaCost,			1, 8 ); break;
						case 12: ApplyAttribute( primary,	min, max, AosAttribute.LowerRegCost,			1, 20 ); break;
						case 13: ApplyAttribute( primary,	min, max, AosAttribute.Luck,					1, 100 ); break;
						case 14: ApplyAttribute( primary,	min, max, AosAttribute.SpellDamage,				1, 12 ); break;
						case 15: ApplySkillBonus( skills,	min, max, 0,									1, 15 ); break;
						case 16: ApplySkillBonus( skills,	min, max, 1,									1, 15 ); break;
						case 17: ApplySkillBonus( skills,	min, max, 2,									1, 15 ); break;
						case 18: ApplySkillBonus( skills,	min, max, 3,									1, 15 ); break;
						case 19: ApplySkillBonus( skills,	min, max, 4,									1, 15 ); break;
						}
					}				
		}


Calix
MOTODEAMON
Posts: 6109
Joined: Sat Dec 27, 2003 10:05 am

Re: Crafting changes/new system - the idea

Post by Calix »

Right, sorry for the code spam, just trying to make it a bit easier for everyone to understand how the code works. There's a few key elements in the above.

Code: Select all

public static void ApplyAttributesTo( Spellbook spellbook, bool isRunicTool, int luckChance, int attributeCount, int min, int max )
		{
			m_IsRunicTool = isRunicTool;

That is obviously part of how the game recognises a runic is being used. I believe that is relatively simple to change to either class normal NPC-bought craftsman tools as runics, or to remove the runic requirement completely.

Code: Select all


			CraftAttributeInfo agapite = Agapite = new CraftAttributeInfo();

			agapite.ArmorPhysicalResist = 2;
			agapite.ArmorFireResist = 3;
			agapite.ArmorColdResist = 2;
			agapite.ArmorPoisonResist = 2;
			agapite.ArmorEnergyResist = 2;
			agapite.WeaponColdDamage = 30;
			agapite.WeaponEnergyDamage = 20;
			agapite.RunicMinAttributes = 4;
			agapite.RunicMaxAttributes = 4;
			if ( Core.ML )
			{
				agapite.RunicMinIntensity = 65;
				agapite.RunicMaxIntensity = 100;
			}
			else
			{
				agapite.RunicMinIntensity = 40;
				agapite.RunicMaxIntensity = 80;
			}

Obviously the list of mods can be modified to include new mods, higher intensities, or whatever we like, quite simply. You note the 'WeaponColdDamage' part Night? Means that's easy for us to play with as well however we change the system.

Anyway, reason I'm highlighting these is perhaps we change to using Gems for enhancing. It's slightly different than Oz's jewelry crafting system, but the idea comes from that. The one thing I've not noticed yet in this code is how each runic type is differentiated.

So;

You'd craft with a normal NPC-bought crafter tool. This works as if you were using a runic tool. As Night suggested, below GM skill = equivalent to third tier runic, so bronze or spined, for example? GM>115 = horned/agapite, for example. 115+ = barbed, valorite.

We change the mods/intensities in the code above then to balance out the mods given by different craft resources. So for example we make spined leather DIFFERENT to barbed, but not necessarily worse, just giving a different type of mod, allowing for a degree of specialisation/customisation.

Oz's jewelry system currently works on the basis of TWO resources being used in the crafting process, Ingots and Gems. I propose we change that back to one(ingots). Gems then become the enhancing resource. Not just for jewelry, but for all items.

Each type of Gem gives you the chance to add either/or(random) a particular resist or a mod. So for example, if you were to try enhancing with a Ruby, you would have a chance of adding an extra 4 fire resist to an item, OR an extra 2 LMC, OR - you could break the item. High breakage chance as well.

Thoughts please! I actually really like that.

Post Reply