Just tried your mod and was curious: Will the grey market collector only accept certain bots? I've got a couple of modded bots and one of the originals, but I can't seem to sell to them.Im failing to understand this price multiplier in the grey market.
"bot_social": (2.0,"mul_exp3",0.1,3.0), - Changes reward value based on social skill, but what is that range?
Anyway, here's a couple more buyers for the grey market if anybody wants them. They will not appear until you cycle your day at least once. *Hint* I dropped a buyer in the junk section too.
Yea, for now I limited that one to F and E bots. Kinda the low-level nerd guy. I was building more vendors along the idea that each vendor wanted a certain type of bot.. only C rank for this one, and a B-S tech for that one... that idea.Just tried your mod and was curious: Will the grey market collector only accept certain bots? I've got a couple of modded bots and one of the originals, but I can't seem to sell to them.
Ok, just wasn't sure if it was something I was missing. Actually, now knowing that, I can see that it's obvious in the JSON file.Yea, for now I limited that one to F and E bots. Kinda the low-level nerd guy. I was building more vendors along the idea that each vendor wanted a certain type of bot.. only C rank for this one, and a B-S tech for that one... that idea.
You can white/black list actions with bot roles for now. May add model/part/trait specific lists too, i guess, but can't promise right now.Rad, are we able to disable training functions on altered bots? Hu-cows would be fun to sex and all, but would you teach them how to fight or be social? (yeah, sure, just dont give them that role). But what about bots that would be better if sex wasnt an option.. Arachia or Lamia for example.. or this Beholder that is my store clerk.
If no disable capable, how about just a 'good idea, bad idea' message to tag in a placeholder?
Yes, i added 30k cap at flea market, it really didn't made any sense you can go to slums with ultralux bot and local cheap traders would pay you couple of millions just like that.Are the selling prices of bots supposed to be capped now? Best I can get for a bot at the flea market is 30K and 75K on the grey net. If that is the case it means that some of the modded bots are not even worth getting now as I've seen them selling at the flea market for 385 to 500K with only only C rank parts and no skills, meaning I can never make a profit selling them. Also makes it so I can get more cash buy just stripping bots fro parts and selling those.
Keep some possible defect for every integrity level. Defaults are None and destroyed. If you remove destroyed, you will also need to remove None,0,0 or add some weight to it, otherwise it will break things as in your traceback, i believe. Will look to add some safeguards to avoid crashes, by defaulting to None in such cases.I keep getting this when I configure my altered bot.Code:I'm sorry, but an uncaught exception occurred. While running game code: File "game/modules/0020_dscs/game/locations/dump_site/dump_site_scavenge.rpy", line 33, in <module> File "game/modules/0010_dscs_base/game/characters/bot_base/part.rpy", line 147, in apply_damage File "game/modules/0005_core/core/utils.rpy", line 89, in randwchoice ValueError: empty range for randrange() (0,0, 0) -- Full Traceback ------------------------------------------------------------ Full traceback: File "modules/0005_core/core/main_loop.rpyc", line 62, in script call File "modules/0020_dscs/game/locations/dump_site/dump_site_scavenge.rpyc", line 25, in script File "renpy/ast.py", line 928, in execute renpy.python.py_exec_bytecode(self.code.bytecode, self.hide, store=self.store) File "renpy/python.py", line 2245, in py_exec_bytecode exec(bytecode, globals, locals) File "game/modules/0020_dscs/game/locations/dump_site/dump_site_scavenge.rpy", line 33, in <module> File "game/modules/0010_dscs_base/game/characters/bot_base/part.rpy", line 147, in apply_damage File "game/modules/0005_core/core/utils.rpy", line 89, in randwchoice File "/home/tom/ab/renpy-build/tmp/install.linux-x86_64/lib/python2.7/random.py", line 244, in randint File "/home/tom/ab/renpy-build/tmp/install.linux-x86_64/lib/python2.7/random.py", line 220, in randrange ValueError: empty range for randrange() (0,0, 0) Windows-10-10.0.19041 Ren'Py 7.4.10.2178 DSCS 0.3.1 Sun Feb 13 07:52:28 2022
Second half of February, first half of March. ApproximatelyQuestion : Approximately when will the next version will be available? No rush just asking
hmm... I was using a mod version of destroyed at first, then removed it during troubleshooting. Good to know how they pair up.Keep some possible defect for every integrity level. Defaults are None and destroyed. If you remove destroyed, you will also need to remove None,0,0 or add some weight to it, otherwise it will break things as in your traceback, i believe. Will look to add some safeguards to avoid crashes, by defaulting to None in such cases.
Yep, i have more detailed DNS settings screen on todo. Hate to manually mark parts myself.I thought of another useful feature that could be added:
Right now we can choose to have DNS on or off. I would like to be able to have it on and set a quality level threshold. I can't really play with it turned on because of the chance of my best parts being sold. It would be upsetting to have a NeuroTech v7 be sold when they are kind of hard to come by. This feature would still be of limited use because there are still only quality D eyes and quality D,E, & F skins, but when those parts have higher quality versions available, this feature will be quite useful for me.
I posted possible_defects testing script somewhere on this thread, i think. It will run through 100-0 integrity and list which defects are possible. Try searching for it, may make modding bit easier. Eventually may make some sort of mod editor "game", which will make testing/editing mods easier, but this is surely not any soon, just an idea of something i think will be useful.hmm... I was using a mod version of destroyed at first, then removed it during troubleshooting. Good to know how they pair up.
Thanks!This is a surprisingly good time. By which I mean I expected it to be casually fun, but then I found myself really enjoying the gameplay loop. And there's so much potential. Even after the regular part hierarchy is complete, with parts from E to S for each category, there are also sidegrades - parts that are better for specific roles. Which lends itself to customising bots for specific roles above and beyond their intended role. Like making a JKB into an assassin with high combat and specialised limbs or the like.
Which then lends itself to different events, different buyers, different reasons to retain various bots for yourself. Having a bodyguard bot might be a good idea in the future, be it protection from rivals or megacorps, or getting shaken down by street gangs. A hacking/EW bot might be a thing to introduce. So much potential.
I think more variability in the market needs to be a thing though, different (randomised?) sellers and a range of prices for the same item. Make the world feel more organic.
Excellent work, again. I'm really looking forward to the future here.
Valid ideas, added to todo, can't promise when/how i will implement these, but will think about it.Well business is going great. Once things became more organized.
What is in a name? So you have tons of bots in your store room. What can you tell about them just looking?
I have renamed my bots.
For example.
JKB-SeSSob This tells me she has an S in sex and B in social.
I use Se for sex. So for social. Me Mechanical. El for electrical. Co for combat.
Only my personal bots get names and this little naming for organizing thing works(trust me when you have 50+ fully repaired bots in storage it is worth it.
I try to not store models without any skill,but if I do I just name them by base model(JKB for example) and at Harem Inc we never store damaged bots.
Back to work. Someone has to train all these bots how to have better sex(anyone have spare skin?)
Day 340 of being my own man.
Two things that could really be improved.
Inventory. Not Sorting but Numbers. For example you are working on a bot and need to replace an arm(anything really)and you have one,but how many do you actually have? You could have 1 or you could have 100. You have no way of knowing without going through your inventory and counting them. So number of parts available.
Next is Bot storage. Can we at least sort by model type?
Events, especially moddable, surely would make game richer and more fun to play, it is high enough priority thing, so probably will work on it sooner than later.Question for Radnor:
I would be interested in mods for minor factions and related events.
The basic idea would be a random event in 2 screens :
- screen 1 : demand >> you can accept or refuse
>> if accepted : consequence [1]
>> if refused : test vs your bots capabilities // 2 exit status : win [2] or loss [3]...
- result of the event is defined by the mod by type
The mod would contain:
Root : faction name and description, faction base reputation
And then, for each event :
- event probability (based on main quest stage & reputation)
- event trigger event (end of day period, at night, when visiting junkyard, when visiting flea market, when visiting brothel...)
- challenge type (sex, social, combat, mechanic, electronic, hacking)
- challenge requirements
- event description (page 1) with image
- challenge failed description (page 2) with image or video
- challenge passed description (page 3) with image or video
Examples:
Faction : Local mob
Event : they come and ask money for "protection" - you can pay or combat
If reputation is very bad, they send goons who attack you and take money
If reputation is good, they send stolen bot parts for very cheap prices or ask you for untraceable combat mods
Faction : Dirty vice cops
Event : idem, but sex oriented
If reputation is very bad, they force you to watch while fucking your bots
If reputation is good, they give you their discarded playthings (broken high-end sex bots)
Faction : Local clinic
Dr Monroe is trying to maintain a clinic for the homeless and the junkies in the area but she doesn't have a lot of money. She comes and ask help (money, reparation of medical equipment...) and pays with her body if reputation is high enough (and challenge and rewards may raise with reputation).
etc...
I think it would be a great way for others to expand content without breaking the game or the main quest.
It is more of content question i guess, but yes, it does make sense and likely to be implemented some day.Rad I was thinking another 'what if'.. being able to limit or raise repair_task chances per bot, based on mc rep or skill on that bot. Customers are more likely to bring you higher spec bots after you have higher skill with that model.
Price function is big and somewhat convoluted thing.Im failing to understand this price multiplier in the grey market.
"bot_social": (2.0,"mul_exp3",0.1,3.0), - Changes reward value based on social skill, but what is that range?
define default_bot_price_skill_mods={
"bot_combat": (1.0,"mul_exp3",0.0,5.0),
"bot_electronics": (1.0,"mul_exp3",0.0,5.0),
"bot_mechanics": (1.0,"mul_exp3",0.0,5.0),
"bot_sex": (1.0,"mul_exp3",0.0,5.0),
"bot_social": (1.0,"mul_exp3",0.0,5.0),
}
define bot_price_skills_unimportant={
"bot_combat": (1.0,"mul_exp3",0.0,1.0),
"bot_electronics": (1.0,"mul_exp3",0.0,1.0),
"bot_mechanics": (1.0,"mul_exp3",0.0,1.0),
"bot_sex": (1.0,"mul_exp3",0.0,1.0),
"bot_social": (1.0,"mul_exp3",0.0,1.0),
}
define bot_price_ignore_skills={
}
init python:
def bot_price_function(bot,**kwargs):
"""
base_price_mult: float, default 1.0
skill_mods: dict of skill: (skill_mod,mod_type,min_level_mod,max_level_mod)
part_price_mult: float, default 1.0
part_low_bound: int, default 25
chassis_integrity_mult: float, default 0.5
"""
# print("bot price",bot)
## start with base model price
base_price_mult=kwargs.get("base_price_mult",1.0)
price=int(round(bot.base_price*base_price_mult))
# print(" base price",price)
## apply skill level mods, if any
skill_mods=kwargs.get("skill_mods",default_bot_price_skill_mods)
for skill_id,(skill_mod,mod_type,min_level_mod,max_level_mod) in sorted(skill_mods.items()):
max_level=getattr(bot,skill_id).max_level
min_level=getattr(bot,skill_id).min_level
level=getattr(bot,skill_id).level
price_mod=(max_level_mod-min_level_mod)*(level-min_level)/float(max_level-min_level)+min_level_mod
neg_price_mod=price_mod<0
price_mod=abs(price_mod)
if mod_type=="add":
price_mod=price_mod*skill_mod
elif mod_type=="add_exp2":
price_mod=price_mod**2*skill_mod
elif mod_type=="add_exp3":
price_mod=price_mod**3*skill_mod
elif mod_type in ("mul","mult"):
price_mod=1.0+(price_mod-1.0)*skill_mod
elif mod_type in ("mul_exp2","mult_exp2"):
price_mod=1.0+(price_mod**2-1.0)*skill_mod
elif mod_type in ("mul_exp3","mult_exp3"):
price_mod=1.0+(price_mod**3-1.0)*skill_mod
if neg_price_mod:
price_mod=-price_mod
if mod_type in ("add","add_exp2","add_exp3"):
# print(" skill",skill_id,level,"+",int(round(price_mod)))
price=int(round(price+price_mod))
elif mod_type in ("mul","mult","mul_exp2","mult_exp2","mul_exp3","mult_exp3"):
# print(" skill",skill_id,level,getattr(bot,skill_id).level_name,"*",price_mod)
price+=int(round(bot.base_price*price_mod))
## apply chassis parts mods
part_price_mult=kwargs.get("part_price_mult",1.0)
part_low_bound=kwargs.get("part_low_bound",25)
for slot in bot.outfit_slots:
part=bot.item_on_slot(slot)
if part and part.integrity>=part_low_bound:
price_mod=part.base_price*(1.0+(part.integrity/100.0-1.0)*part_price_mult)
for defect in part.defects:
price_mod*=defect.part_price_mult
price=int(round(price+price_mod))
# print(" part",part,"+",int(round(price_mod)))
## apply chassis integrity mod
chassis_integrity_mult=kwargs.get("chassis_integrity_mult",0.5)
price_mod=1.0+(bot.chassis.integrity/100.0-1.0)*chassis_integrity_mult
# print(" chassis mult *",price_mod)
price=int(round(price*price_mod))
## apply psychocore traits mods
## TODO
## apply psychocore stability mod
## TODO
# print(" final price",price)
return price
def bot_part_price_function(part,flat_price_below=0):
integrity=max(flat_price_below,part.integrity)
price=part.base_price*(integrity/100.0)**2
for defect in part.defects:
price*=defect.part_price_mult
return price