Jump to content

Recommended Posts

Posted
1 hour ago, skyrimfet said:

i dont understand?

Currently, the way NPCs randomly comment on the character being a cow is through the script bac_watchdog function emitRandomComment.

This function does a bunch of checks to find a suitable nearby NPC to say a fitting comment, randomly chosen, from an array of the topics available inside the ESP plugin.

This could be redone to work entirely through the .ESP plugin's Dialog Topic section instead of using scripting. The conditions section of the Dialog Topics would be used instead, meaning script wouldn't be needed as the ESP plugin would use already existing vanilla features.

The only downside to this change is that it would take a couple hours to rework in TES5Edit, however I feel it's worth it in the long term to cut down on script usage.

 

Basically, everything inside this function can already be achieved through the ESP without the use of a script.

Spoiler

function emitRandomComment(Actor target,int recur)


	debug.trace("recursive:"+recur)

	if recur>5 || BACConfig.commentProb==0 || speakMode == true
		return
	endif

	Topic TopicToSay = None
	Actor randomActor = Game.FindRandomActorFromRef(target, 512.0)
	
	if randomActor == lastActor
		emitRandomComment(target,1+recur)
		return
	endif
	
	if randomActor!=None && randomActor != BACStore.Paul && randomActor!=target && randomActor.GetRelationshipRank(target) < 3 && randomActor.isDead() == false && randomActor.isGhost() == false && randomActor.isInCombat()==false && randomActor.HasLOS(target) && randomActor.getFactionRank(bac_milkmaid) < 2
	
		 if randomActor.getRace() == blackStorage.redguardRace || randomActor.getRace() == blackStorage.orcRace || randomActor.getRace() == blackStorage.nordRace || randomActor.getRace() == blackStorage.khajiitRace || randomActor.getRace() == blackStorage.imperialRace || randomActor.getRace() == blackStorage.darkElfRace || randomActor.getRace() == blackStorage.bretonRace || randomActor.getRace() == blackStorage.woodElfRace || randomActor.getRace() == blackStorage.highElfRace || randomActor.getRace() == blackStorage.argonianRace		
	
		int max = 0
		
debug.trace(BACConfig.generalComments)
debug.trace(BACConfig.generalComments1)
debug.trace(BACConfig.generalComments2)
debug.trace("random comment pla"+BACActor.npcs_phase[Slot])
debug.trace("random comment act"+randomActor )


		max = BACConfig.generalComments.Length 
		TopicToSay = BACConfig.generalComments[Utility.randomInt(0, max - 1 ) ]
		
		if BACActor.npcs_phase[Slot] >= 9
			max = BACConfig.generalComments1.Length 
			TopicToSay = BACConfig.generalComments1[Utility.randomInt(0, max - 1 ) ]
		endif

		if BACActor.npcs_phase[Slot] >= 16
			max = BACConfig.generalComments2.Length 
			TopicToSay = BACConfig.generalComments2[Utility.randomInt(0, max - 1 ) ]
		endif
		
		
		;attr comments
		
		int count = 6
		count = count * 2
		
		if BACActor.npcs_fatCow[Slot] == true && Utility.randomInt(0,count) == 0
			max = BACConfig.generalCommentsFat.Length 
			TopicToSay = BACConfig.generalCommentsFat[Utility.randomInt(0, max - 1 ) ]
		endif

		if BACConfig.solveDirt == true && BACActor.npcs_dirtCow[Slot] == true && Utility.randomInt(0,count) == 0
			max = BACConfig.generalCommentsStink.Length 
			TopicToSay = BACConfig.generalCommentsStink[Utility.randomInt(0, max - 1 ) ]
		endif		

		if BACActor.npcs_celluliteCow[Slot] == true && Utility.randomInt(0,count) == 0
			ActorBase randomActorBase = randomActor.GetBaseObject() as ActorBase
			if randomActorBase.getSex() == 0
				max = BACConfig.generalCommentsCelMal.Length 
				TopicToSay = BACConfig.generalCommentsCelMal[Utility.randomInt(0, max - 1 ) ]
			else
				max = BACConfig.generalCommentsCelFem.Length 
				TopicToSay = BACConfig.generalCommentsCelFem[Utility.randomInt(0, max - 1 ) ]
			endif
		endif		

		if BACActor.npcs_faceCow3[Slot] == true && Utility.randomInt(0,count) == 0
			max = BACConfig.generalCommentsFace.Length 
			TopicToSay = BACConfig.generalCommentsFace[Utility.randomInt(0, max - 1 ) ]
		endif		

		if BACActor.npcs_hornyCow[Slot] == true && Utility.randomInt(0,count) == 0
			max = BACConfig.generalCommentsWet.Length 
			TopicToSay = BACConfig.generalCommentsWet[Utility.randomInt(0, max - 1 ) ]
		endif	
		
		if BACActor.npcs_pregCow[Slot] == true && Utility.randomInt(0,count) == 0
			max = BACConfig.generalCommentsPreg.Length 
			TopicToSay = BACConfig.generalCommentsPreg[Utility.randomInt(0, max - 1 ) ]
		endif			
		
		if BACActor.npcs_phase[Slot] > 7
			if randomActor.GetRelationshipRank(target) < 0
				max = BACConfig.generalCommentsEN.Length 
				TopicToSay = BACConfig.generalCommentsEN[Utility.randomInt(0, max - 1 ) ]
			endif
			
			if randomActor.GetRelationshipRank(target) > 0  && Utility.randomInt(0,1)==0
				max = BACConfig.generalCommentsFR.Length 
				TopicToSay = BACConfig.generalCommentsFR[Utility.randomInt(0, max - 1 ) ]
			endIf
		
		endif
	
		if TopicToSay == lastTopic
			emitRandomComment(target,1+recur)
			return
		endif
	
		if TopicToSay != None
			if Utility.randomInt(0,100) <= BACConfig.commentProb
				randomActor.Say(TopicToSay)
				lastTopic = TopicToSay
				lastActor = randomActor
			endif
			return
		endif
	
	else
		emitRandomComment(target,1+recur)
	endIf
	
	else
		emitRandomComment(target,1+recur)
	endif
endFunction

 

 

Two mods I can think of that do it this way are DeepBlueFrog's SexLab Hormones and Sanguine Debauchery enhanced.

Posted
11 minutes ago, hylysi said:

Currently, the way NPCs randomly comment on the character being a cow is through the script bac_watchdog function emitRandomComment.

This function does a bunch of checks to find a suitable nearby NPC to say a fitting comment, randomly chosen, from an array of the topics available inside the ESP plugin.

This could be redone to work entirely through the .ESP plugin's Dialog Topic section instead of using scripting. The conditions section of the Dialog Topics would be used instead, meaning script wouldn't be needed as the ESP plugin would use already existing vanilla features. 

The only downside to this change is that it would take a couple hours to rework in TES5Edit, however I feel it's worth it in the long term to cut down on script usage.

 

Basically, everything inside this function can already be achieved through the ESP without the use of a script.

  Hide contents


function emitRandomComment(Actor target,int recur)


	debug.trace("recursive:"+recur)

	if recur>5 || BACConfig.commentProb==0 || speakMode == true
		return
	endif

	Topic TopicToSay = None
	Actor randomActor = Game.FindRandomActorFromRef(target, 512.0)
	
	if randomActor == lastActor
		emitRandomComment(target,1+recur)
		return
	endif
	
	if randomActor!=None && randomActor != BACStore.Paul && randomActor!=target && randomActor.GetRelationshipRank(target) < 3 && randomActor.isDead() == false && randomActor.isGhost() == false && randomActor.isInCombat()==false && randomActor.HasLOS(target) && randomActor.getFactionRank(bac_milkmaid) < 2
	
		 if randomActor.getRace() == blackStorage.redguardRace || randomActor.getRace() == blackStorage.orcRace || randomActor.getRace() == blackStorage.nordRace || randomActor.getRace() == blackStorage.khajiitRace || randomActor.getRace() == blackStorage.imperialRace || randomActor.getRace() == blackStorage.darkElfRace || randomActor.getRace() == blackStorage.bretonRace || randomActor.getRace() == blackStorage.woodElfRace || randomActor.getRace() == blackStorage.highElfRace || randomActor.getRace() == blackStorage.argonianRace		
	
		int max = 0
		
debug.trace(BACConfig.generalComments)
debug.trace(BACConfig.generalComments1)
debug.trace(BACConfig.generalComments2)
debug.trace("random comment pla"+BACActor.npcs_phase[Slot])
debug.trace("random comment act"+randomActor )


		max = BACConfig.generalComments.Length 
		TopicToSay = BACConfig.generalComments[Utility.randomInt(0, max - 1 ) ]
		
		if BACActor.npcs_phase[Slot] >= 9
			max = BACConfig.generalComments1.Length 
			TopicToSay = BACConfig.generalComments1[Utility.randomInt(0, max - 1 ) ]
		endif

		if BACActor.npcs_phase[Slot] >= 16
			max = BACConfig.generalComments2.Length 
			TopicToSay = BACConfig.generalComments2[Utility.randomInt(0, max - 1 ) ]
		endif
		
		
		;attr comments
		
		int count = 6
		count = count * 2
		
		if BACActor.npcs_fatCow[Slot] == true && Utility.randomInt(0,count) == 0
			max = BACConfig.generalCommentsFat.Length 
			TopicToSay = BACConfig.generalCommentsFat[Utility.randomInt(0, max - 1 ) ]
		endif

		if BACConfig.solveDirt == true && BACActor.npcs_dirtCow[Slot] == true && Utility.randomInt(0,count) == 0
			max = BACConfig.generalCommentsStink.Length 
			TopicToSay = BACConfig.generalCommentsStink[Utility.randomInt(0, max - 1 ) ]
		endif		

		if BACActor.npcs_celluliteCow[Slot] == true && Utility.randomInt(0,count) == 0
			ActorBase randomActorBase = randomActor.GetBaseObject() as ActorBase
			if randomActorBase.getSex() == 0
				max = BACConfig.generalCommentsCelMal.Length 
				TopicToSay = BACConfig.generalCommentsCelMal[Utility.randomInt(0, max - 1 ) ]
			else
				max = BACConfig.generalCommentsCelFem.Length 
				TopicToSay = BACConfig.generalCommentsCelFem[Utility.randomInt(0, max - 1 ) ]
			endif
		endif		

		if BACActor.npcs_faceCow3[Slot] == true && Utility.randomInt(0,count) == 0
			max = BACConfig.generalCommentsFace.Length 
			TopicToSay = BACConfig.generalCommentsFace[Utility.randomInt(0, max - 1 ) ]
		endif		

		if BACActor.npcs_hornyCow[Slot] == true && Utility.randomInt(0,count) == 0
			max = BACConfig.generalCommentsWet.Length 
			TopicToSay = BACConfig.generalCommentsWet[Utility.randomInt(0, max - 1 ) ]
		endif	
		
		if BACActor.npcs_pregCow[Slot] == true && Utility.randomInt(0,count) == 0
			max = BACConfig.generalCommentsPreg.Length 
			TopicToSay = BACConfig.generalCommentsPreg[Utility.randomInt(0, max - 1 ) ]
		endif			
		
		if BACActor.npcs_phase[Slot] > 7
			if randomActor.GetRelationshipRank(target) < 0
				max = BACConfig.generalCommentsEN.Length 
				TopicToSay = BACConfig.generalCommentsEN[Utility.randomInt(0, max - 1 ) ]
			endif
			
			if randomActor.GetRelationshipRank(target) > 0  && Utility.randomInt(0,1)==0
				max = BACConfig.generalCommentsFR.Length 
				TopicToSay = BACConfig.generalCommentsFR[Utility.randomInt(0, max - 1 ) ]
			endIf
		
		endif
	
		if TopicToSay == lastTopic
			emitRandomComment(target,1+recur)
			return
		endif
	
		if TopicToSay != None
			if Utility.randomInt(0,100) <= BACConfig.commentProb
				randomActor.Say(TopicToSay)
				lastTopic = TopicToSay
				lastActor = randomActor
			endif
			return
		endif
	
	else
		emitRandomComment(target,1+recur)
	endIf
	
	else
		emitRandomComment(target,1+recur)
	endif
endFunction

 

 

Two mods I can think of that do it this way are DeepBlueFrog's SexLab Hormones and Sanguine Debauchery enhanced.

i will check this - but im afraid that it will ended like with no-script hooves and bell sounds - in script i can controll all what i need i can turn on/off it / change conditions / probability  - i agreed to change script based bell to armor sound i then i was flooded (and im still flooded) by reports. But thx for your explain and possible solutions!

Posted
5 minutes ago, skyrimfet said:

i will check this - but im afraid that it will ended like with no-script hooves and bell sounds - in script i can controll all what i need i can turn on/off it / change conditions / probability  - i agreed to change script based bell to armor sound i then i was flooded (and im still flooded) by reports. But thx for your explain and possible solutions!

Changing the conditions (including turning it on/off) and probability are all things that could be done just the same from the ESP as a script.

Posted

@skyrimfet, my problem is that my Body isnt scaling. I know i know something with the Body or Skeleton. I checked it over and over and reinstalled all. But only the Belly and breast are scaling but nothing else. I do have all dependencys.

Posted
14 minutes ago, DrVec said:

@skyrimfet, my problem is that my Body isnt scaling. I know i know something with the Body or Skeleton. I checked it over and over and reinstalled all. But only the Belly and breast are scaling but nothing else. I do have all dependencys.

:)
it's not my fault - check topics related with HDT bodies. Im almost sure - that your body have undefined weights related with nodes like butt L / R etc...

look for HDT body that support more nodes - btw im going to create my own pack with support for many mods like DD, Zaz, BAC and DLC + Vanilia (and more)

Posted

Good Day.

Do you plan to work more with bodies, currently with bodyslide optionth within transformation progress?

I really like CBBE "skiiny to big" set, and if you could add some such body-deformations to your transformation - it would be really cool.

Posted

Hi,

i also encounter a bug with cow tears quest.After i finish the parade,those hunter brought me to auction(HA).

The first time,my character just stand in the cage without any movement.

After several reload save, i finally get into the milking machine.

Unfortunately,it seems no sign to get further follow up action.

whether how much time to reload,the quest seems stuck for me.

 

Any good advice to get the quest done??

Posted

function runme(arg, iter=0){
  if iter >= 666 return;

  runme(arg,++iter)
}

 

Consider that with your example there are more than 1300 Variables stored onto the stack !

Posted
9 hours ago, skyrimfet said:

 

i did it in in new version, be patient please;)
i forget about it - thx :D ASAP!

i can upload unp if someone is able to convert or redraw it - i can help and share files.
 

im also sick - i reduced volume and in next update all will be fine ;)

Any idea why the bell sound doesn't work in the latest version for me? I can rollback to before the sound volume was removed and everything is fine.

Posted
10 hours ago, skyrimfet said:

did you try to reload game? it's almost impossible - i never had problems with this part - are you using new version of mod? did you unpack .bsa files in past? - it's sounds like bugged copy - unique problem

i have reloaded the game and i am using the newest version of the mod, all i did was install with MO i can try re-installing if that might help? 

Posted

Wonderful mod, thank you!

 

How long do I need to wait in the Dragonreach milking machine? 

I have the felling that nothing happens and the quest ist stuck.

How Can I skip to the next stage without getting into the milking machine?

Thank you

Posted
4 hours ago, Adetu said:

function runme(arg, iter=0){
  if iter >= 666 return;

  runme(arg,++iter)
}

 

Consider that with your example there are more than 1300 Variables stored onto the stack !

It was only example - someone  warn me here that recusrion is "risky programming"- so i wrote this pseudo-code as example how to prevent endless recursion - im using in papyrus  limits for 4 or 5 iteration.

I decided to use recursion in emitRandomComment function, becouse IHMO it was necessary - in papyrus, language without break; or continue; instruction it was just more suitable.

Posted
49 minutes ago, ZI0MATRIX said:

Wonderful mod, thank you!

 

How long do I need to wait in the Dragonreach milking machine? 

I have the felling that nothing happens and the quest ist stuck.

How Can I skip to the next stage without getting into the milking machine?

Thank you

dont remember  - i think that script count milked units and set you free after let's say 50units? its take a time -1 or 2 minutes, is depend on milk mod economy milking configuration?
let me know
im using milking with 1s and without feeding, so in my case it is:
1s * 50 units = 1minute (about)

with default settings it is about 5-6minutes?
or? someone remember? :)
 

Posted
11 hours ago, skyrimfet said:

maybe pony play - as extra plugin to devious training - but without story background.

Oh I like this idea. Even more so if it had a story background!  But I’m not a mod creator so I will be grateful for what ever I get ❤️

Posted

thx for this great mod, and nice quest i just have a weird bug with the bell maybe my char have too much big breast but the ring bell trigger every fucking sec make it unplayable so i just muted it

Posted
5 minutes ago, Anogia said:

thx for this great mod, and nice quest i just have a weird bug with the bell maybe my char have too much big breast but the ring bell trigger every fucking sec make it unplayable so i just muted it

i will fix it in next version - problem  with loud sound is good known :(

Posted
15 hours ago, skyrimfet said:

freeze - so you need to reset your PC or terminate game?

Not like that, my Pc is standing in the wagon but cant move or do anything the only way to move is with the command "epc", and also the hunters go away i see them walking away

Posted
15 hours ago, skyrimfet said:

:)
it's not my fault - check topics related with HDT bodies. Im almost sure - that your body have undefined weights related with nodes like butt L / R etc...

look for HDT body that support more nodes - btw im going to create my own pack with support for many mods like DD, Zaz, BAC and DLC + Vanilia (and more)

Quick question are you still planning on integrating devious butt with bac somehow? And are there still plans for a on four mode? 

Posted
20 hours ago, skyrimfet said:

did you try to reload game? it's almost impossible - i never had problems with this part - are you using new version of mod? did you unpack .bsa files in past? - it's sounds like bugged copy - unique problem

i got it to work, had to start a new game must have been something i did haha, also have you thought of extending the captured quest? say if the pc doesnt get out of the milking machine before X time the hunters wake up and finish the travel to sell the pc as a cow? could be quite interesting

Posted

I love pretty much everything about this mod and everything seems to work fine for me.

The only thing I don't like is the "Naked Ass" mutation, any time my character gets this mutation I have to go back to my last save and hope I don't get it again. Is it possible to (or are you all right with) adding a way to let us disable select mutations before we begin turning into a cow? If not, is there a way for me to turn it off on my end?

Posted
8 minutes ago, obviouslyincognito said:

I love pretty much everything about this mod and everything seems to work fine for me.

The only thing I don't like is the "Naked Ass" mutation, any time my character gets this mutation I have to go back to my last save and hope I don't get it again. Is it possible to (or are you all right with) adding a way to let us disable select mutations before we begin turning into a cow? If not, is there a way for me to turn it off on my end?

Technicaly yes - I can add disable/enable option but im not going to add it - every mutation is selected randomly,  - Of course - if you turn off body weight support you will never get fat/slim cow, without slif you will not get curvy cow. But you cant create your own wishlist with mutaion queue. If you realy dont accept one of - just reload game and try again - if it is realy nacassary. It is IHMO power of this system : unpredictability what you get at level 20 of transformation - beauty cow or 100% freak ..or both. You can be more scared that you are. I'm going to add new one - assymetrical breasts. ]:-> soon :D

Posted

Any chance of a standalone bodyparts mod? I'd like to use the udders from the start without doing a quest.

Posted
15 hours ago, Terteniard said:

Any chance of a standalone bodyparts mod? I'd like to use the udders from the start without doing a quest.

no chance :|

Posted
17 minutes ago, CheshiCat said:

Maybe any chance of adding buffs/debuffs? Its really strange that PC could use weapons after her hand turns into hooves.

thats true but how should i add this feature and still keep game playable?

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...