First of all, I have scripted a lot for fonline, so I know quite enough about fos to be able to offer my help scripting little things like all in this suggestion. I also use cvet's forum when help is needed with their native functions, but it won't be needed hereHenry, the Scavenger you described is too good to implement, I believe.
I think it would make more sense to split it into three perks:
Miner: Gives a chance to double/tripple the output during mining. (I think it would be interesting to have something like 20% to double and 5% to tripple the output. 75% to get normal output). Not very useful, but hey, makes mining A LOT more fun
If you think it can affect the economy negatively, add some chance to have no output from mining at all. The variety will make it more interesting for beginners.
I would also throw in some nice subtle dependencies on luck, strength and
slight influence endurance, scavenging skill and melee. I think it's fun when formulas are complex and contain many variables.
Naturalist: Does the same to natural resources gains: flowers, fiber, apples, wood, flint, etc. Although this mechanics is quite different from mining. I haven't looked at these scripts.
Scavenger: I have more issues with this one. I have scavenged A LOT and can say much about mechanics of scavenging I mostly want to comment on it. Henry, I'm very sorry for hijacking your topic, but I want to post it in context of yours since I believe your suggestion is awesome and we have to have more light support perks.
1. First of all, I have to say that the idea and implementation of this is completely amazing. It's the third awesomest thing in s3 after Lander's Point and the Farm (although the farm does influence the economy somewhat significantly).
2. Scavenging is capped at 100% Folks, 100% is too easy to reach. I want to offer to make the skill progression like three times slower
(I would really go for like 5-6 times slower progression, tbh) AND 3. Increase the cap to 300% even with no influence on outcome. It's still gonna be very satisfactory to players and will keep them engaged for longer. Even if there's no real added benefit.
4. Deal with the list of existing probable outcomes. I have no issues with the exp given for scavenging, but the items found... Folks, why cat's paw? I know there were talks about making it a book for sneaking skill, but why no other books?
5. Why so few caps? It would make sense to do something like 30% chance to find from 1-100 caps, 5% chance to find 100-1,000 caps, 0.1% chance to find a treasure (with a chat notification about the treasure) 1,000-10,000 caps. Won't influence the economy (0.1% chance of finding 10k is like finding one cap every time), but will make it A LOT more interesting for an average player. Especially for newbies.
6. Add clutter. I don't know if it's a good suggestion, but it is realistic for sure. And will make it more interesting for noobs. Like add a 90% probability to get a random
shititem like what you set in random containers in cities
(btw, very well done with these too). 50% to get another one, 20% for the third one, 5% for the fourth one. Only when scavenging is successful.
7. Add some fun items to the loot. What I can think of is items that you randomly spawn is
caves with the same shitty quality. But set a low chance for them and only give them one per successful scavenging. I would just call the item generation function that is used in Caves, but just once per, say, a hundred of successful scavenges, so 1% chance in case of success.
8. Bind all that I described above to the skill level. Say, in the
7. instead of 1%, use a formula something like:
//On scavenging success:
int itemChance = Random (0, int(SK_SCAVENGING/100));
if (itemChance>Random (0, 100){
//call the Cave function to add an item.
}
So the chance of getting a fun item is from 0% to scavenging/100 %, which is 0-3% (about 1.5% on average) when scavenging is 300%. and 0-1% (about 0.5% on average) when scavenging is 100%. And 0% when it's below 100. As I remember, int doesn't round. No, it doesn't. I believe it doesn't. Although it's angelscript. People who would give such a name to a programming language can do all kinds of things to casting into int
. KEK.
But it's super simplistic. Here's an example of functions I use for my maps. This is just to explain what I mean by more complex formulas, more unique and interesting outcomes that have slight binding to user's skills:
void _RepairReward(Critter& player, Critter@ npc)
{
//Log("_RepairReward");
//At this point we know that character's repair or science is >60
player.AddItem(PID_ELECTRONIC_PARTS, Random(int(player.Stat[ST_LUCK]/8), int(player.Stat[ST_LUCK]/3))+int(player.Skill[SK_REPAIR]/50+player.Skill[SK_SCIENCE]/20));
player.AddItem(PID_ALLOYS, Random(int(player.Stat[ST_LUCK]/5), int(player.Stat[ST_LUCK]/2))+int(player.Skill[SK_REPAIR]/60+player.Skill[SK_SCIENCE]/100));
player.AddItem(PID_METAL_PARTS, Random(int(player.Stat[ST_LUCK]/5), int(player.Stat[ST_LUCK]*1.5))+int(player.Skill[SK_REPAIR]/10+player.Skill[SK_SCIENCE]/40));
player.AddItem(PID_METAL_PARTS2, Random(int(player.Stat[ST_LUCK]/8), int(player.Stat[ST_LUCK]/3))+int(player.Skill[SK_REPAIR]/60+player.Skill[SK_SCIENCE]/100));
player.AddItem(PID_ELECTRONIC_PARTS2, Random(0, int(player.Stat[ST_LUCK]/3))+int(player.Skill[SK_REPAIR]/50+player.Skill[SK_SCIENCE]/20));
int exp = int(player.Skill[SK_REPAIR]/20+player.Skill[SK_SCIENCE]/20)*100;
player.StatBase[ST_EXPERIENCE] += exp;
//LogExperience(player, exp);
//dbLog(player, "You earned "+exp+" experience as a result of dismantling the robot");
}
Or stuff like:
void _MedReward(Critter& player, Critter@ npc)
{
//At this point we know that character's first aid OR doctor is > 46 AND the repair || science is >60
player.AddItem(PID_STIMPAK, Random(int(player.Stat[ST_LUCK]/8), int(player.Stat[ST_LUCK]/3))+int(player.Skill[SK_FIRST_AID]/20+player.Skill[SK_DOCTOR]/50));
player.AddItem(PID_RADAWAY, Random(int(player.Stat[ST_LUCK]/3), player.Stat[ST_LUCK]));
player.AddItem(PID_ANTIDOTE, Random(0, 1)+int(player.Skill[SK_FIRST_AID]/40+player.Skill[SK_DOCTOR]/60));
player.AddItem(PID_SUPER_STIMPAK, Random(int(player.Stat[ST_LUCK]/10), int(player.Stat[ST_LUCK]/5))+int(player.Skill[SK_FIRST_AID]/80+player.Skill[SK_DOCTOR]/80));
player.AddItem(PID_HYPO, Random(int(player.Stat[ST_LUCK]/10), int(player.Stat[ST_LUCK]/5))+int(player.Skill[SK_FIRST_AID]/100+player.Skill[SK_DOCTOR]/100));
int exp = int(player.Skill[SK_DOCTOR]/20+player.Skill[SK_FIRST_AID]/20)*100;
player.StatBase[ST_EXPERIENCE] += exp;
//LogExperience(player, exp);
//dbLog(player, "You earned "+exp+" experience as a result of dismantling the robot");
}
Again, I would be happy to play around with this snippet if help is needed.Thanks!PS
It pisses me off when stuff you find in different locations have no or very little connection to your skills/stats. I want a guy with BG 200%, sg 20% and EW 40% to have a lot more big guns in Muties lockers. Although for that the content should spawn on open rather than on map gen, which is a lot trickier
but you get the idea, right? Sometimes on mapGen we actually have a player. When it's an SE. Wouldn't it be fun if, for example, the Factory SE would always have a blueprint that is yet unknown to a player? I think it would be cool.