Elin Decompiled Documentation EA 23.331 Nightly
Loading...
Searching...
No Matches
AI_Fuck Class Reference
Inheritance diagram for AI_Fuck:
AIAct Act Element EClass AI_TendAnimal

Public Types

enum  FuckType { fuck , tame }
 
enum  Variation {
  Normal , Bitch , Succubus , NTR ,
  Bloodsuck , Slime , Tentacle , MotherMilk
}
 
- Public Types inherited from AIAct
enum  Status { Running , Fail , Success }
 
- Public Types inherited from Act
enum  CostType { None , MP , SP }
 

Public Member Functions

override bool ShouldAllyAttack (Chara tg)
 
override IEnumerable< StatusRun ()
 
void Finish ()
 
- Public Member Functions inherited from AIAct
override string ToString ()
 
override MultiSprite GetStateIcon ()
 
virtual bool ShouldAllyAttack (Chara tg)
 
virtual Point GetDestination ()
 
AIProgress GetProgress ()
 
string GetCurrentActionText ()
 
override bool IsToolValid ()
 
GetChild< T > ()
 
virtual void OnStart ()
 
void SetOwner (Chara c)
 
virtual void OnSetOwner ()
 
void SetChild (AIAct seq, Func< Status > _onChildFail=null)
 
void Start ()
 
override bool Perform ()
 
Status Restart ()
 
Status Success (Action action=null)
 
virtual void OnSuccess ()
 
bool TryCancel (Card c)
 
virtual Status Cancel ()
 
virtual void OnCancel ()
 
virtual void OnCancelOrSuccess ()
 
virtual bool CanManualCancel ()
 
Status KeepRunning ()
 
void Reset ()
 
virtual void OnReset ()
 
Status Tick ()
 
virtual IEnumerable< StatusRun ()
 
Status TickChild ()
 
Status Do (AIAct _seq, Func< Status > _onChildFail=null)
 
Status DoGotoInteraction (Point pos, Func< Status > _onChildFail=null)
 
Status DoGoto (Point pos, int dist=0, bool ignoreConnection=false, Func< Status > _onChildFail=null)
 
Status DoGoto (Card card, Func< Status > _onChildFail=null)
 
Status DoGoto (Card card, int dist, bool ignoreConnection=false, Func< Status > _onChildFail=null)
 
Status DoGotoSpot (Card card, Func< Status > _onChildFail=null)
 
Status DoGoto< T > (Func< Status > _onChildFail=null)
 
Status DoGotoSpot< T > (Func< Status > _onChildFail=null, bool ignoreAccessType=false)
 
Status DoGrab (Card card, int num=-1, bool pickHeld=false, Func< Status > _onChildFail=null)
 
Status DoGrab< T > ()
 
Status DoProgress ()
 
Status DoIdle (int repeat=3)
 
Status DoWait (int count=1)
 
virtual AIProgress CreateProgress ()
 
virtual void OnCreateProgress (Progress_Custom p)
 
virtual bool CanProgress ()
 
virtual void OnBeforeProgress ()
 
virtual void OnProgress ()
 
virtual void OnProgressComplete ()
 
void SimulateZone (int days)
 
virtual void OnSimulateZone (int days)
 
virtual void OnSimulatePosition ()
 
- Public Member Functions inherited from Act
virtual CursorInfo GetCursorIcon (Card c)
 
virtual MultiSprite GetStateIcon ()
 
override Sprite GetSprite ()
 
virtual bool ShowMouseHint (Card c)
 
virtual bool IsValidTC (Card c)
 
virtual string GetHintText (string str="")
 
virtual string GetText (string str="")
 
virtual string GetTextSmall (Card c)
 
bool IsTargetHostileParty ()
 
virtual Color GetActPlanColor ()
 
virtual bool Perform ()
 
bool Perform (Chara _cc, Card _tc=null, Point _tp=null)
 
virtual bool ValidatePerform (Chara _cc, Card _tc, Point _tp)
 
virtual bool CanPerform ()
 
bool CanPerform (Chara _cc, Card _tc=null, Point _tp=null)
 
virtual bool IsToolValid ()
 
new void SetImage (Image image)
 
virtual void OnMarkMapHighlights ()
 
virtual bool ShouldMapHighlight (Point p)
 
- Public Member Functions inherited from Element
virtual SourceElement.Row GetSource ()
 
virtual int GetSourcePotential (int v)
 
virtual Sprite GetSprite ()
 
int GetMaterialSourceValue (Thing t, int v)
 
virtual long GetSourceValue (long v, int lv, SourceValueType type)
 
virtual Sprite GetIcon (string suffix="")
 
bool IsActive (Card c)
 
int SortVal (bool charaSheet=false)
 
virtual bool CanLink (ElementContainer owner)
 
bool HasTag (string tag)
 
void SetImage (Image i)
 
virtual string GetDetail ()
 
bool IsFactionElement (Chara c)
 
Element GetParent (Card c)
 
void WriteNote (UINote n, ElementContainer owner=null, Action< UINote > onWriteNote=null)
 
void WriteNoteWithRef (UINote n, ElementContainer owner, Action< UINote > onWriteNote, Element refEle)
 
void _WriteNote (UINote n, Chara c, Act act)
 
void AddHeaderAbility (UINote n)
 
void _WriteNote (UINote n, ElementContainer owner, Action< UINote > onWriteNote, bool isRef, bool addHeader=true)
 
void AddEncNote (UINote n, Card Card, ElementContainer.NoteMode mode=ElementContainer.NoteMode.Default, Func< Element, string, string > funcText=null, Action< UINote, Element > onAddNote=null)
 
virtual void OnWriteNote (UINote n, ElementContainer owner)
 
virtual void OnChangeValue ()
 
void CheckLevelBonus (ElementContainer owner, UINote n=null)
 
int GetSortVal (UIList.SortMode m)
 
virtual Act.Cost GetCost (Chara c)
 
virtual int GetPower (Card c)
 
virtual void SetTextValue (UIText text, bool shorten=false)
 
virtual bool IsPurchaseFeatReqMet (ElementContainer owner, int lv=-1)
 
virtual void WritePurchaseReq (UINote n, int lv=1)
 

Public Attributes

Variation variation
 
Chara target
 
bool sell
 
bool succubus
 
int maxProgress
 
int progress
 
int fails
 
int totalAffinity
 
- Public Attributes inherited from AIAct
new Chara owner
 
Status status
 
IEnumerator< StatusEnumerator
 
AIAct child
 
AIAct parent
 
byte restartCount
 
Func< StatusonChildFail
 
Func< bool > isFail
 
- Public Attributes inherited from Element
SourceElement.Row _source
 
int id
 
int vBase
 
int vExp
 
int vPotential
 
int vTempPotential
 
int vLink
 
int vSource
 
int vSourcePotential
 
ElementContainer owner
 

Properties

virtual FuckType Type [get]
 
bool IsSacredLovemaking [get]
 
override bool PushChara [get]
 
override bool IsAutoTurn [get]
 
override TargetType TargetType [get]
 
override int MaxProgress [get]
 
override int CurrentProgress [get]
 
override bool CancelOnAggro [get]
 
override bool CancelWhenDamaged [get]
 
- Properties inherited from AIAct
virtual bool IsRunning [get]
 
bool IsChildRunning [get]
 
bool IsMoveAI [get]
 
virtual int MaxRestart [get]
 
virtual new string Name [get]
 
virtual MultiSprite stateIcon [get]
 
virtual Sprite actionIcon [get]
 
virtual bool IsNoGoal [get]
 
virtual bool IsAutoTurn [get]
 
virtual bool IsIdle [get]
 
virtual bool CancelOnAggro [get]
 
virtual bool PushChara [get]
 
virtual int MaxProgress [get]
 
virtual bool ShowProgress [get]
 
virtual bool UseTurbo [get]
 
virtual int CurrentProgress [get]
 
virtual bool ShowCursor [get]
 
virtual bool CancelWhenDamaged [get]
 
virtual bool CancelWhenMoved [get]
 
virtual bool InformCancel [get]
 
virtual Thing RenderThing [get]
 
AIAct Current [get]
 
override bool IsAct [get]
 
override bool ShowPotential [get]
 
override bool UsePotential [get]
 
override bool ShowRelativeAttribute [get]
 
virtual bool HasProgress [get]
 
- Properties inherited from Act
override bool ShowPotential [get]
 
override bool UsePotential [get]
 
override bool ShowRelativeAttribute [get]
 
virtual CursorInfo CursorIcon [get]
 
virtual string ID [get]
 
virtual bool IsAct [get]
 
virtual bool WillEndTurn [get]
 
virtual bool CloseLayers [get]
 
virtual int LeftHand [get]
 
virtual int RightHand [get]
 
virtual int ElementPowerMod [get]
 
virtual bool ShowMapHighlight [get]
 
virtual bool ShowMapHighlightBlock [get]
 
virtual bool PickHeldOnStart [get]
 
virtual bool DropHeldOnStart [get]
 
virtual bool CanPressRepeat [get]
 
virtual bool CanAutofire [get]
 
virtual bool ResetAxis [get]
 
virtual bool RequireTool [get]
 
virtual bool IsHostileAct [get]
 
virtual bool HideRightInfo [get]
 
virtual bool ShouldEndMimicry [get]
 
virtual bool HaveLongPressAction [get]
 
virtual float Radius [get]
 
virtual int PerformDistance [get]
 
virtual int MaxRadius [get]
 
virtual TargetType TargetType [get]
 
virtual bool LocalAct [get]
 
virtual bool CanRapidFire [get]
 
virtual float RapidDelay [get]
 
virtual bool ShowAuto [get]
 
- Properties inherited from Element
SourceElement.Row source [get]
 
virtual int DisplayValue [get]
 
virtual int MinValue [get]
 
int Value [get]
 
int ValueWithoutLink [get]
 
virtual int MinPotential [get]
 
int Potential [get]
 
virtual bool CanGainExp [get]
 
bool IsFlag [get]
 
virtual string Name [get]
 
virtual string FullName [get]
 
virtual int ExpToNext [get]
 
virtual bool UseExpMod [get]
 
virtual int CostTrain [get]
 
virtual int CostLearn [get]
 
virtual bool ShowXP [get]
 
virtual bool ShowMsgOnValueChanged [get]
 
virtual bool ShowValue [get]
 
virtual bool ShowPotential [get]
 
virtual bool UsePotential [get]
 
virtual bool PotentialAsStock [get]
 
virtual bool ShowRelativeAttribute [get]
 
virtual bool ShowBonuses [get]
 
virtual string ShortName [get]
 
bool IsGlobalElement [get]
 
bool IsFactionWideElement [get]
 
bool IsPartyWideElement [get]
 
virtual bool ShowEncNumber [get]
 
bool IsTrait [get]
 
bool IsFoodTrait [get]
 
bool IsFoodTraitMain [get]
 
bool IsMainAttribute [get]
 
Act act [get]
 
- Properties inherited from EClass
static Game game [get]
 
static bool AdvMode [get]
 
static Player player [get]
 
static Chara pc [get]
 
static UI ui [get]
 
static Map _map [get]
 
static Zone _zone [get]
 
static FactionBranch Branch [get]
 
static FactionBranch BranchOrHomeBranch [get]
 
static Faction Home [get]
 
static Faction Wilds [get]
 
static Scene scene [get]
 
static BaseGameScreen screen [get]
 
static GameSetting setting [get]
 
static GameData gamedata [get]
 
static ColorProfile Colors [get]
 
static World world [get]
 
static SourceManager sources [get]
 
static SourceManager editorSources [get]
 
static SoundManager Sound [get]
 
static CoreDebug debug [get]
 

Additional Inherited Members

- Static Public Member Functions inherited from Act
static void SetReference (Chara _cc, Card _tc=null, Point _tp=null)
 
static void SetTool (Thing t)
 
- Static Public Member Functions inherited from Element
static string GetName (string alias)
 
static SourceElement.Row Get (int id)
 
static Dictionary< int, int > GetElementMap (int[] list)
 
static Dictionary< int, int > GetElementMap (int[] list, Dictionary< int, int > map)
 
static SourceElement.Row GetRandomElement (int lv=1, bool useWeight=true)
 
static Element Create (int id, int v=0)
 
static Element Create (string id, int v=1)
 
static int GetId (string alias)
 
static int GetResistLv (int v)
 
static long GetResistDamage (long dmg, int v, int power=0)
 
- Static Public Member Functions inherited from EClass
static int rndSeed (int a, int seed)
 
static int rnd (long a)
 
static int rnd (int a)
 
static int curve (long _a, int start, int step, int rate=75)
 
static int sqrt (int a)
 
static int rndHalf (int a)
 
static float rndf (float a)
 
static int rndSqrt (int a)
 
static void Wait (float a, Card c)
 
static void Wait (float a, Point p)
 
static int Bigger (int a, int b)
 
static int Smaller (int a, int b)
 
- Static Public Attributes inherited from Act
static Chara CC
 
static Card TC
 
static Point TP = new Point()
 
static Thing TOOL
 
static int powerMod = 100
 
static bool forcePt
 
static Act CurrentAct
 
- Static Public Attributes inherited from Element
const int Div = 5
 
static Element Void = new Element()
 
static int[] List_MainAttributes = new int[9] { 70, 72, 71, 77, 74, 75, 76, 73, 79 }
 
static int[] List_MainAttributesMajor = new int[8] { 70, 72, 71, 77, 74, 75, 76, 73 }
 
static int[] List_Body = new int[4] { 70, 72, 71, 77 }
 
static int[] List_Mind = new int[4] { 74, 75, 76, 73 }
 
static List< SourceElement.RowListElements = new List<SourceElement.Row>()
 
static List< SourceElement.RowListAttackElements = new List<SourceElement.Row>()
 
- Static Public Attributes inherited from EClass
static Core core
 

Detailed Description

Definition at line 4 of file AI_Fuck.cs.

Member Enumeration Documentation

◆ FuckType

Enumerator
fuck 
tame 

Definition at line 6 of file AI_Fuck.cs.

◆ Variation

Enumerator
Normal 
Bitch 
Succubus 
NTR 
Bloodsuck 
Slime 
Tentacle 
MotherMilk 

Definition at line 12 of file AI_Fuck.cs.

Member Function Documentation

◆ Finish()

void AI_Fuck.Finish ( )
inline

Definition at line 314 of file AI_Fuck.cs.

315 {
316 Chara chara = (sell ? target : owner);
317 Chara chara2 = (sell ? owner : target);
318 if (chara.isDead || chara2.isDead)
319 {
320 return;
321 }
322 bool flag = EClass.rnd(2) == 0;
323 switch (Type)
324 {
325 case FuckType.fuck:
326 {
327 switch (variation)
328 {
329 case Variation.Bloodsuck:
330 case Variation.Slime:
331 if (EClass.rnd(2) == 0)
332 {
333 chara2.AddCondition<ConConfuse>(500);
334 }
335 if (EClass.rnd(2) == 0)
336 {
337 chara2.AddCondition<ConDim>(500);
338 }
339 if (EClass.rnd(2) == 0)
340 {
341 chara2.AddCondition<ConParalyze>(500);
342 }
343 if (EClass.rnd(10) == 0)
344 {
345 chara2.AddCondition<ConInsane>(100 + EClass.rnd(100));
346 }
347 break;
348 default:
349 {
350 for (int i = 0; i < 2; i++)
351 {
352 Chara chara3 = ((i == 0) ? chara : chara2);
353 chara3.RemoveCondition<ConDrunk>();
354 if (EClass.rnd(15) == 0 && !chara3.HasElement(1216))
355 {
356 chara3.AddCondition<ConDisease>(200);
357 }
358 chara3.ModExp(77, 250);
359 chara3.ModExp(71, 250);
360 chara3.ModExp(75, 250);
361 }
362 if (!chara2.HasElement(1216))
363 {
364 if (EClass.rnd(5) == 0)
365 {
366 chara2.AddCondition<ConParalyze>(500);
367 }
368 if (EClass.rnd(3) == 0)
369 {
370 chara2.AddCondition<ConInsane>(100 + EClass.rnd(100));
371 }
372 }
373 break;
374 }
375 case Variation.MotherMilk:
376 break;
377 }
378 chara.Talk("tail_after");
379 bool flag3 = false;
380 if (variation == Variation.Succubus)
381 {
382 chara.ShowEmo(Emo.love);
383 chara2.ShowEmo(Emo.love);
384 EClass.player.forceTalk = true;
385 chara2.Talk("seduced");
386 }
387 else if (variation != Variation.NTR && variation != Variation.Bloodsuck && variation != Variation.Slime && variation != Variation.MotherMilk && chara != EClass.pc)
388 {
390 {
391 flag = true;
392 }
393 else
394 {
395 int num3 = CalcMoney.Whore(chara2, chara);
396 Chara chara4 = chara;
397 Chara chara5 = chara2;
398 if (variation == Variation.Bitch)
399 {
400 chara = chara5;
401 chara2 = chara4;
402 }
403 Debug.Log("buyer:" + chara.Name + " seller:" + chara2.Name + " money:" + num3);
404 if (!chara.IsPC)
405 {
406 chara.ModCurrency(EClass.rndHalf(num3));
407 }
408 if (!chara2.IsPC && chara.GetCurrency() < num3 && EClass.rnd(2) == 0)
409 {
410 num3 = chara.GetCurrency();
411 }
412 Debug.Log("money:" + num3 + " buyer:" + chara.GetCurrency());
413 if (chara.GetCurrency() >= num3)
414 {
415 chara.Talk("tail_pay");
416 }
417 else
418 {
419 chara.Talk("tail_nomoney");
420 num3 = chara.GetCurrency();
421 chara2.Say("angry", chara2);
422 chara2.Talk("angry");
423 flag = (sell ? true : false);
424 if (EClass.rnd(chara.IsPC ? 2 : 20) == 0)
425 {
426 flag3 = true;
427 }
428 }
429 chara.ModCurrency(-num3);
430 if (chara2 == EClass.pc)
431 {
432 if (num3 > 0)
433 {
436 }
437 }
438 else
439 {
440 int num4 = (chara2.CHA * 10 + 100) / ((chara2.IsPCFaction && chara2.memberType == FactionMemberType.Default) ? 1 : 10);
441 if (chara2.GetCurrency() - num4 > 0)
442 {
443 chara2.c_allowance += num3;
444 }
445 else
446 {
447 chara2.ModCurrency(num3);
448 }
449 }
450 chara = chara4;
451 chara2 = chara5;
452 }
453 }
454 if (flag3)
455 {
456 chara2.DoHostileAction(chara);
457 }
458 if (variation == Variation.Bloodsuck)
459 {
460 int value = chara.hunger.value;
461 Thing food = CraftUtil.MakeBloodMeal(chara, chara2);
462 FoodEffect.Proc(chara, food, consume: false);
463 chara2.AddCondition<ConBleed>(EClass.rndHalf(value * 10));
464 }
465 else
466 {
467 if (chara.IsPCParty || chara2.IsPCParty)
468 {
469 chara.stamina.Mod(-5 - EClass.rnd(chara.stamina.max / 10 + ((variation == Variation.Succubus || variation == Variation.MotherMilk) ? StaminaCost(chara2, chara) : 0) + 1));
470 chara2.stamina.Mod(-5 - EClass.rnd(chara2.stamina.max / 20 + ((variation == Variation.Succubus || variation == Variation.MotherMilk) ? StaminaCost(chara, chara2) : 0) + 1));
471 }
472 SuccubusExp(chara, chara2);
473 SuccubusExp(chara2, chara);
474 }
475 chara2.ModAffinity(chara, (flag || (chara.IsPC && chara2.affinity.CanSleepBeside() && EClass.rnd(10) != 0)) ? 10 : (-5));
476 if (chara == EClass.pc || chara2 == EClass.pc)
477 {
478 if (variation == Variation.MotherMilk)
479 {
482 {
483 EClass.pc.SetFeat(1291, 1, msg: true);
484 }
485 }
486 else
487 {
489 }
490 }
491 switch (variation)
492 {
493 case Variation.NTR:
494 {
495 Thing thing2 = chara2.things.Find<TraitDreamBug>();
496 if (thing2 != null)
497 {
498 thing2.ModNum(-1);
499 if (chara.IsPC)
500 {
501 Msg.Say("dream_spell", EClass.sources.elements.map[9156].GetName().ToLowerInvariant());
502 EClass.pc.GainAbility(9156, EClass.rnd(2) + 1);
503 }
504 }
505 if (!chara.HasElement(1239) || chara2.HasElement(1216))
506 {
507 break;
508 }
509 if (chara2.HasElement(758))
510 {
511 if (chara.ExistsOnMap)
512 {
513 chara.stamina.Mod(-1000000);
514 }
515 }
516 else if (chara2.ExistsOnMap)
517 {
518 chara2.stamina.Mod((!chara2.IsPCFaction) ? (-10000) : (chara2.IsPC ? (-25) : (-50)));
519 }
520 break;
521 }
522 case Variation.Bloodsuck:
523 if (chara2.HasElement(758) && chara.ExistsOnMap)
524 {
525 chara.stamina.Mod(-1000000);
526 }
527 break;
528 case Variation.Slime:
529 {
530 Thing thing = null;
531 for (int j = 0; j < 10; j++)
532 {
533 for (int k = 0; k < 20; k++)
534 {
535 thing = target.MakeGene((j < 3) ? DNA.Type.Superior : DNA.Type.Default);
536 if (EClass.rnd(10) < chara.body.slots.Count - 2)
537 {
538 break;
539 }
540 if (thing.c_DNA.GetBodySlot() != -1)
541 {
542 if (chara.body.GetSlot(35, onlyEmpty: false) == null && EClass.rnd(2) == 0)
543 {
544 thing.c_DNA.ReplaceBodySlot(35);
545 }
546 else if (chara.body.GetSlot(32, onlyEmpty: false) == null && EClass.rnd(2) == 0)
547 {
548 thing.c_DNA.ReplaceBodySlot(32);
549 }
550 break;
551 }
552 }
553 thing.c_DNA.MakeSlimeFood(chara);
554 if (thing.c_DNA.GetInvalidAction(chara) != null || thing.c_DNA.GetInvalidFeat(chara) != null)
555 {
556 thing.c_DNA.vals.Clear();
557 thing.c_DNA.type = DNA.Type.Inferior;
558 continue;
559 }
560 thing.MakeFoodFrom(target);
561 thing.elements.ModBase(10, 20);
562 thing.elements.ModBase(18, 100);
563 break;
564 }
565 FoodEffect.Proc(chara, thing, consume: false);
566 chara.elements.ModExp(6608, 1000f);
567 break;
568 }
569 }
571 {
572 chara.Say("tender_hug", chara, chara2);
573 }
574 break;
575 }
576 case FuckType.tame:
577 {
578 int num = ((!chara2.IsPCFaction) ? (chara2.IsHuman ? 10 : 5) : (chara2.IsHuman ? 5 : 0));
579 Msg.Say("tame_end", target);
580 target.PlaySound("groomed");
581 target.PlayEffect("heal_tick");
582 target.hygiene.Mod(15);
583 if (chara == EClass.pc)
584 {
586 }
587 if (target == owner)
588 {
589 break;
590 }
591 if (totalAffinity > 0)
592 {
593 chara.Say("brush_success", target, owner);
594 }
595 else
596 {
597 chara.Say("brush_fail", target, owner);
598 num *= 5;
599 }
601 bool flag2 = num2 && chara2.affinity.CanInvite() && chara2.GetBestAttribute() < EClass.pc.CHA;
602 if (num2)
603 {
604 if (flag2)
605 {
606 chara.Say("tame_success", owner, target);
607 chara2.MakeAlly();
608 }
609 else
610 {
611 chara.Say("tame_fail", chara, chara2);
612 }
613 }
614 if (fails > 0 && num > EClass.rnd(100))
615 {
616 chara2.DoHostileAction(chara);
617 chara2.calmCheckTurn *= 3;
618 }
619 break;
620 }
621 }
622 static int StaminaCost(Chara c1, Chara c2)
623 {
624 return (int)Mathf.Max(10f * (float)c1.END / (float)Mathf.Max(c2.END, 1), 0f);
625 }
626 void SuccubusExp(Chara c, Chara tg)
627 {
628 if (!c.HasElement(1216) || c.isDead)
629 {
630 return;
631 }
632 foreach (Element item in tg.elements.ListBestAttributes())
633 {
634 if (c.elements.ValueWithoutLink(item.id) < item.ValueWithoutLink)
635 {
636 c.elements.ModTempPotential(item.id, Mathf.Min(EClass.rnd(item.ValueWithoutLink - c.elements.ValueWithoutLink(item.id) / 5), (variation == Variation.MotherMilk) ? 100 : 500));
637 c.Say("succubus_exp", c, item.Name.ToLower());
638 break;
639 }
640 }
641 }
642 }
Emo
Definition: Emo.cs:2
FactionMemberType
new Chara owner
Definition: AIAct.cs:14
bool sell
Definition: AI_Fuck.cs:28
int totalAffinity
Definition: AI_Fuck.cs:38
Variation
Definition: AI_Fuck.cs:13
int fails
Definition: AI_Fuck.cs:36
Chara target
Definition: AI_Fuck.cs:26
Variation variation
Definition: AI_Fuck.cs:24
FuckType
Definition: AI_Fuck.cs:7
virtual FuckType Type
Definition: AI_Fuck.cs:40
bool IsSacredLovemaking
Definition: AI_Fuck.cs:43
static int Whore(Chara seller, Chara buyer)
Definition: CalcMoney.cs:55
virtual Chara Chara
Definition: Card.cs:2122
ElementContainerCard elements
Definition: Card.cs:42
int END
Definition: Card.cs:2407
SoundSource PlaySound(string id, float v=1f, bool spatial=true)
Definition: Card.cs:6613
void Talk(string idTopic, string ref1=null, string ref2=null, bool forceSync=false)
Definition: Card.cs:7173
string Name
Definition: Card.cs:2191
int CHA
Definition: Card.cs:2417
bool ExistsOnMap
Definition: Card.cs:2137
Thing SetNum(int a)
Definition: Card.cs:3669
int GetCurrency(string id="money")
Definition: Card.cs:4149
Effect PlayEffect(string id, bool useRenderPos=true, float range=0f, Vector3 fix=default(Vector3))
Definition: Card.cs:6647
void ShowEmo(Emo _emo=Emo.none, float duration=0f, bool skipSame=true)
Definition: Card.cs:6581
void ModCurrency(int a, string id="money")
Definition: Card.cs:4135
Card MakeFoodFrom(string _id)
Definition: Card.cs:5805
ThingContainer things
Definition: Card.cs:39
void ModExp(string alias, int a)
Definition: Card.cs:2781
DNA c_DNA
Definition: Card.cs:1933
void ModNum(int a, bool notify=true)
Definition: Card.cs:3689
bool HasElement(int ele, bool includeNagative=false)
Definition: Card.cs:6351
void Say(string lang, string ref1=null, string ref2=null)
Definition: Card.cs:7291
BodySlot GetSlot(Thing t, bool onlyEmpty=false, bool secondSlot=false)
Definition: CharaBody.cs:369
Definition: Chara.cs:10
CharaBody body
Definition: Chara.cs:94
Condition AddCondition(string id, int p=100, bool force=false)
Definition: Chara.cs:9773
override bool IsPC
Definition: Chara.cs:630
void SetFeat(int id, int value=1, bool msg=false)
Definition: Chara.cs:10428
override bool IsPCParty
Definition: Chara.cs:633
Stats hygiene
Definition: Chara.cs:1211
Stats hunger
Definition: Chara.cs:1201
void GainAbility(int ele, int mtp=100, Thing origin=null)
Definition: Chara.cs:10628
Stats stamina
Definition: Chara.cs:1205
Thing MakeGene(DNA.Type? type=null)
Definition: Chara.cs:8617
Religion faith
Definition: Chara.cs:443
void DoHostileAction(Card _tg, bool immediate=false)
Definition: Chara.cs:6668
bool isDead
Definition: Chara.cs:393
Definition: ConDim.cs:2
static Thing MakeBloodMeal(Chara sucker, Chara feeder, bool msg=true)
Definition: CraftUtil.cs:155
Definition: DNA.cs:8
void MakeSlimeFood(Chara c)
Definition: DNA.cs:754
Element GetInvalidFeat(Chara c)
Definition: DNA.cs:684
Type
Definition: DNA.cs:10
int GetBodySlot()
Definition: DNA.cs:730
List< int > vals
Definition: DNA.cs:24
void ReplaceBodySlot(int slot)
Definition: DNA.cs:743
Element GetInvalidAction(Chara c)
Definition: DNA.cs:710
Definition: EClass.cs:6
static Game game
Definition: EClass.cs:9
static int rnd(long a)
Definition: EClass.cs:59
static SourceManager sources
Definition: EClass.cs:43
static int rndHalf(int a)
Definition: EClass.cs:97
static Player player
Definition: EClass.cs:13
static Chara pc
Definition: EClass.cs:15
void ModExp(int ele, float a, bool chain=false)
Element ModTempPotential(int ele, int v, int threshMsg=0)
int ValueWithoutLink(int ele)
Element ModBase(int ele, int v)
List< Element > ListBestAttributes()
static void Proc(Chara c, Thing food, bool consume=true)
Definition: FoodEffect.cs:16
ReligionManager religions
Definition: Game.cs:159
Definition: Msg.cs:5
static string Say(string idLang, string ref1, string ref2=null, string ref3=null, string ref4=null)
Definition: Msg.cs:58
long brush
Definition: Player.cs:189
long kimo
Definition: Player.cs:165
long mama
Definition: Player.cs:237
void ModKarma(int a)
Definition: Player.cs:2610
Stats stats
Definition: Player.cs:1083
Thing DropReward(Thing t, bool silent=false)
Definition: Player.cs:2642
ReligionMoonShadow MoonShadow
SourceElement elements
virtual void Mod(int a)
Definition: Stats.cs:135
virtual int value
Definition: Stats.cs:56
virtual int max
Definition: Stats.cs:68
Thing Find(int uid)
static Thing Create(string id, int idMat=-1, int lv=-1)
Definition: ThingGen.cs:53
Definition: Thing.cs:8
static bool IsTamePossible(Chara c)

References Chara.AddCondition(), Chara.affinity, Chara.body, Player.Stats.brush, Card.c_DNA, Affinity.CanInvite(), Affinity.CanSleepBeside(), Card.CHA, Card.Chara, ThingGen.Create(), Debug, Chara.DoHostileAction(), Player.DropReward(), Card.elements, SourceManager.elements, Card.END, Card.ExistsOnMap, fails, Chara.faith, ThingContainer.Find(), food, Chara.GainAbility(), EClass.game, Card.GetBestAttribute(), DNA.GetBodySlot(), Card.GetCurrency(), DNA.GetInvalidAction(), DNA.GetInvalidFeat(), CharaBody.GetSlot(), Card.HasElement(), Chara.hunger, Chara.hygiene, Chara.isDead, Chara.IsHuman, Chara.IsPC, Chara.IsPCFaction, Chara.IsPCParty, IsSacredLovemaking, TraitToolBrush.IsTamePossible(), item, Player.Stats.kimo, ElementContainer.ListBestAttributes(), Chara.MakeAlly(), CraftUtil.MakeBloodMeal(), Card.MakeFoodFrom(), Chara.MakeGene(), DNA.MakeSlimeFood(), Player.Stats.mama, Stats.max, Chara.memberType, Stats.Mod(), Chara.ModAffinity(), ElementContainer.ModBase(), Card.ModCurrency(), ElementContainer.ModExp(), Card.ModExp(), Player.ModKarma(), Card.ModNum(), ElementContainer.ModTempPotential(), ReligionManager.MoonShadow, Card.Name, AIAct.owner, EClass.pc, Card.PlayEffect(), EClass.player, Card.PlaySound(), FoodEffect.Proc(), Game.religions, DNA.ReplaceBodySlot(), EClass.rnd(), EClass.rndHalf(), Msg.Say(), Card.Say(), sell, Chara.SetFeat(), Card.SetNum(), Card.ShowEmo(), EClass.sources, Chara.stamina, Player.stats, Card.Talk(), target, Card.things, totalAffinity, Type, DNA.vals, Stats.value, ElementContainer.ValueWithoutLink(), variation, and CalcMoney.Whore().

Referenced by Run().

◆ Run()

override IEnumerable< Status > AI_Fuck.Run ( )
inlinevirtual

Reimplemented from AIAct.

Definition at line 87 of file AI_Fuck.cs.

88 {
89 if (target == null)
90 {
91 foreach (Chara chara in EClass._map.charas)
92 {
93 if (!chara.IsHomeMember() && !chara.IsDeadOrSleeping && chara.Dist(owner) <= 5)
94 {
95 target = chara;
96 break;
97 }
98 }
99 }
100 if (target == null)
101 {
102 yield return Cancel();
103 }
104 Chara cc = (sell ? target : owner);
105 Chara tc = (sell ? owner : target);
106 int destDist = ((Type == FuckType.fuck) ? 1 : 1);
107 if (owner.host != target)
108 {
109 yield return DoGoto(target.pos, destDist, ignoreConnection: true);
110 }
111 cc.Say((this.variation == Variation.Slime) ? "slime_start" : ((this.variation == Variation.Bloodsuck) ? "suck_start" : (Type.ToString() + "_start")), cc, tc);
112 isFail = () => !tc.IsAliveInCurrentZone || tc.Dist(owner) > 3;
113 maxProgress = ((this.variation == Variation.NTR || this.variation == Variation.Bloodsuck) ? 10 : 25);
114 if (Type == FuckType.tame)
115 {
116 cc.SetTempHand(1104, -1);
117 }
119 if ((uint)(variation - 3) <= 2u)
120 {
121 maxProgress = maxProgress * 100 / (100 + owner.Evalue(1664) * 50);
122 }
123 switch (this.variation)
124 {
125 case Variation.Succubus:
126 cc.Talk("seduce");
127 break;
128 case Variation.Bloodsuck:
129 cc.PlaySound("bloodsuck");
130 break;
131 case Variation.Slime:
132 cc.PlaySound("slime");
133 target.AddCondition<ConEntangle>(500, force: true);
134 break;
135 }
136 int i;
137 for (i = 0; i < maxProgress; i++)
138 {
139 progress = i;
140 if (owner.host != target)
141 {
142 yield return DoGoto(target.pos, destDist, ignoreConnection: true);
143 }
144 switch (Type)
145 {
146 case FuckType.fuck:
147 {
148 if (this.variation == Variation.NTR)
149 {
150 cc.Say("ntr", cc, tc);
151 }
152 cc.LookAt(tc);
153 tc.LookAt(cc);
154 switch (i % 4)
155 {
156 case 0:
157 cc.renderer.PlayAnime(AnimeID.Attack, tc);
158 if (EClass.rnd(3) == 0 || sell)
159 {
160 if (cc.IsPC && this.variation == Variation.MotherMilk)
161 {
162 EClass.player.forceTalk = true;
163 }
164 cc.Talk((this.variation == Variation.MotherMilk) ? "play_baby" : "tail");
165 }
166 break;
167 case 2:
168 tc.renderer.PlayAnime(AnimeID.Shiver);
169 if (EClass.rnd(3) == 0)
170 {
171 if (tc.IsPC && this.variation == Variation.MotherMilk)
172 {
173 EClass.player.forceTalk = true;
174 }
175 tc.Talk((this.variation == Variation.MotherMilk) ? "play_mama" : "tailed");
176 }
177 break;
178 }
179 int num = ((cc.HasElement(1216) || tc.HasElement(1216)) ? 100 : 20);
180 if (this.variation == Variation.MotherMilk)
181 {
182 num *= 5;
183 }
184 if (num > EClass.rnd(100))
185 {
186 ((EClass.rnd(2) == 0) ? cc : tc).PlayEffect("love2");
187 }
188 if (this.variation == Variation.Slime)
189 {
191 }
192 if (EClass.rnd(3) == 0 || sell)
193 {
194 if (this.variation == Variation.Slime)
195 {
196 target.AddCondition<ConSupress>(200, force: true);
197 if (!owner.IsPC)
198 {
199 int num2 = EClass.rndHalf(target.MaxHP / (target.IsPowerful ? 100 : 10)) + 1;
200 owner.HealHP(num2);
201 target.DamageHP(num2, AttackSource.Condition, owner);
202 }
203 }
204 else
205 {
206 target.AddCondition<ConWait>(50, force: true);
207 }
208 }
209 if (this.variation == Variation.Bloodsuck || this.variation == Variation.Slime)
210 {
211 owner.pos.TryWitnessCrime(cc, tc, 4, (Chara c) => EClass.rnd(cc.HasCondition<ConTransmuteBat>() ? 50 : 20) == 0);
212 }
213 break;
214 }
215 case FuckType.tame:
216 if (i == 0 || i == 10)
217 {
218 cc.Talk("goodBoy");
219 }
220 if (i % 5 == 0)
221 {
222 tc.PlaySound("brushing");
223 }
224 if (cc.Tool != null && cc.Tool.Evalue(770) > 0)
225 {
226 foreach (Chara item in cc.pos.ListCharasInRadius(cc, 2 + cc.Tool.Evalue(770) / 10, (Chara c) => true))
227 {
228 if (cc == tc || item != cc)
229 {
230 Brush(item);
231 if (cc.isDead)
232 {
233 break;
234 }
235 }
236 }
237 }
238 else
239 {
240 Brush(tc);
241 }
242 break;
243 }
244 }
245 Finish();
246 void Brush(Chara c)
247 {
248 if (c.interest >= 0)
249 {
250 int num3 = 100;
251 if (!c.IsAnimal)
252 {
253 num3 += 50;
254 }
255 if (c.IsHuman)
256 {
257 num3 += 50;
258 }
259 if (c.IsInCombat)
260 {
261 num3 += 100;
262 }
263 if (c == cc)
264 {
265 num3 = 50;
266 }
267 else if (c.affinity.CurrentStage < Affinity.Stage.Respected && EClass.rnd((c.IsPCFaction ? 30 : 10) * 100 / num3) == 0)
268 {
269 tc.AddCondition<ConFear>(60);
270 }
271 c.interest -= (c.IsPCFaction ? 20 : (2 * num3 / 100));
272 if (i % 5 == 0)
273 {
274 int num4 = 0;
275 int num5 = cc.CHA / 2 + cc.Evalue(237) - c.CHA * 2;
276 if (EClass.rnd(cc.CHA / 2 + cc.Evalue(237)) > EClass.rnd(c.CHA * num3 / 100))
277 {
278 num4 = 5 + Mathf.Clamp(num5 / 20, 0, 20);
279 }
280 else
281 {
282 num4 = -5 + ((!tc.IsPCFaction) ? Mathf.Clamp(num5 / 10, -30, 0) : 0);
283 fails++;
284 }
285 int num6 = 20;
287 {
288 num4 = ((EClass.rnd(3) == 0) ? 4 : 0);
289 num6 = 10;
290 }
291 totalAffinity += num4;
292 c.ModAffinity(EClass.pc, num4, show: true, showOnlyEmo: true);
293 cc.elements.ModExp(237, num6);
294 if (EClass.rnd(4) == 0)
295 {
296 cc.stamina.Mod(-1);
297 }
298 }
299 if (c.interest < 0 && c != tc)
300 {
301 Msg.Say("tame_end", c);
302 c.PlaySound("groomed");
303 c.PlayEffect("heal_tick");
304 c.hygiene.Mod(15);
305 if (cc == EClass.pc)
306 {
308 }
309 }
310 }
311 }
312 }
AnimeID
Definition: AnimeID.cs:2
AttackSource
Definition: AttackSource.cs:2
virtual Status Cancel()
Definition: AIAct.cs:305
Func< bool > isFail
Definition: AIAct.cs:28
Status DoGoto(Point pos, int dist=0, bool ignoreConnection=false, Func< Status > _onChildFail=null)
Definition: AIAct.cs:446
void Finish()
Definition: AI_Fuck.cs:314
int progress
Definition: AI_Fuck.cs:34
int maxProgress
Definition: AI_Fuck.cs:32
Stage CurrentStage
Definition: Affinity.cs:32
void PlayAnime(AnimeID id, bool force)
bool IsPCFactionOrMinion
Definition: Card.cs:2342
Thing Tool
Definition: Card.cs:2480
Point pos
Definition: Card.cs:60
virtual void HealHP(long a, HealSource origin=HealSource.None)
Definition: Card.cs:4181
bool IsPowerful
Definition: Card.cs:2146
void DamageHP(long dmg, AttackSource attackSource=AttackSource.None, Card origin=null)
Definition: Card.cs:4269
int Evalue(int ele)
Definition: Card.cs:2704
int Dist(Card c)
Definition: Card.cs:8172
CardRenderer renderer
Definition: Card.cs:64
override bool IsAliveInCurrentZone
Definition: Chara.cs:567
void ModAffinity(Chara c, int a, bool show=true, bool showOnlyEmo=false)
Definition: Chara.cs:8344
Chara host
Definition: Chara.cs:33
int interest
Definition: Chara.cs:321
bool IsInCombat
Definition: Chara.cs:911
bool HasCondition(string alias)
Definition: Chara.cs:9938
bool IsHuman
Definition: Chara.cs:926
bool IsAnimal
Definition: Chara.cs:914
override bool IsPCFaction
Definition: Chara.cs:689
override int MaxHP
Definition: Chara.cs:726
override bool IsDeadOrSleeping
Definition: Chara.cs:579
void SetTempHand(int right=0, int left=0)
Definition: Chara.cs:7050
bool IsHomeMember()
Definition: Chara.cs:6915
Affinity affinity
Definition: Chara.cs:318
override void LookAt(Card c)
Definition: Chara.cs:3752
static Map _map
Definition: EClass.cs:19
List< Chara > charas
Definition: Map.cs:81
List< Chara > ListCharasInRadius(Chara cc, int dist, Func< Chara, bool > func, bool onlyVisible=true)
Definition: Point.cs:1226
bool TryWitnessCrime(Chara criminal, Chara target=null, int radius=4, Func< Chara, bool > funcWitness=null)
Definition: Point.cs:878

References EClass._map, Chara.AddCondition(), Chara.affinity, Player.Stats.brush, AIAct.Cancel(), Card.CHA, Map.charas, Affinity.CurrentStage, Card.DamageHP(), Card.Dist(), AIAct.DoGoto(), Chara.DoHostileAction(), Card.elements, Card.Evalue(), fails, Finish(), Chara.HasCondition(), Card.HasElement(), Card.HealHP(), Chara.host, Chara.hygiene, Chara.interest, Chara.IsAliveInCurrentZone, Chara.IsAnimal, Chara.isDead, Chara.IsDeadOrSleeping, AIAct.isFail, Chara.IsHomeMember(), Chara.IsHuman, Chara.IsInCombat, Chara.IsPC, Chara.IsPCFaction, Card.IsPCFactionOrMinion, Card.IsPowerful, item, Point.ListCharasInRadius(), Chara.LookAt(), Chara.MaxHP, maxProgress, Stats.Mod(), Chara.ModAffinity(), ElementContainer.ModExp(), AIAct.owner, EClass.pc, CardRenderer.PlayAnime(), Card.PlayEffect(), EClass.player, Card.PlaySound(), Card.pos, progress, Card.renderer, EClass.rnd(), EClass.rndHalf(), Msg.Say(), Card.Say(), sell, Chara.SetTempHand(), Chara.stamina, Player.stats, Card.Talk(), target, Card.Tool, totalAffinity, Point.TryWitnessCrime(), Type, and variation.

◆ ShouldAllyAttack()

override bool AI_Fuck.ShouldAllyAttack ( Chara  tg)
inlinevirtual

Reimplemented from AIAct.

Definition at line 82 of file AI_Fuck.cs.

83 {
84 return tg != target;
85 }

References target.

Member Data Documentation

◆ fails

int AI_Fuck.fails

Definition at line 36 of file AI_Fuck.cs.

Referenced by Finish(), and Run().

◆ maxProgress

int AI_Fuck.maxProgress

Definition at line 32 of file AI_Fuck.cs.

Referenced by Run().

◆ progress

int AI_Fuck.progress

Definition at line 34 of file AI_Fuck.cs.

Referenced by Run().

◆ sell

bool AI_Fuck.sell

Definition at line 28 of file AI_Fuck.cs.

Referenced by Finish(), and Run().

◆ succubus

bool AI_Fuck.succubus

Definition at line 30 of file AI_Fuck.cs.

◆ target

Chara AI_Fuck.target

Definition at line 26 of file AI_Fuck.cs.

Referenced by Finish(), Run(), ShouldAllyAttack(), and ConSleep.SuccubusSleep().

◆ totalAffinity

int AI_Fuck.totalAffinity

Definition at line 38 of file AI_Fuck.cs.

Referenced by Finish(), and Run().

◆ variation

Variation AI_Fuck.variation

Definition at line 24 of file AI_Fuck.cs.

Referenced by Finish(), and Run().

Property Documentation

◆ CancelOnAggro

override bool AI_Fuck.CancelOnAggro
get

Definition at line 68 of file AI_Fuck.cs.

69 {
70 get
71 {
72 if (variation != Variation.NTR && variation != Variation.Bloodsuck)
73 {
74 return variation != Variation.Slime;
75 }
76 return false;
77 }
78 }

◆ CancelWhenDamaged

override bool AI_Fuck.CancelWhenDamaged
get

Definition at line 80 of file AI_Fuck.cs.

◆ CurrentProgress

override int AI_Fuck.CurrentProgress
get

Definition at line 66 of file AI_Fuck.cs.

◆ IsAutoTurn

override bool AI_Fuck.IsAutoTurn
get

Definition at line 60 of file AI_Fuck.cs.

◆ IsSacredLovemaking

bool AI_Fuck.IsSacredLovemaking
get

Definition at line 42 of file AI_Fuck.cs.

43 {
44 get
45 {
46 if (variation == Variation.Normal && owner != null && target != null && target != owner && (owner == EClass.pc || owner.IsMarried))
47 {
48 if (target != EClass.pc)
49 {
50 return target.IsMarried;
51 }
52 return true;
53 }
54 return false;
55 }
56 }
bool IsMarried
Definition: Chara.cs:615

Referenced by Finish().

◆ MaxProgress

override int AI_Fuck.MaxProgress
get

Definition at line 64 of file AI_Fuck.cs.

◆ PushChara

override bool AI_Fuck.PushChara
get

Definition at line 58 of file AI_Fuck.cs.

◆ TargetType

override TargetType AI_Fuck.TargetType
get

Definition at line 62 of file AI_Fuck.cs.

◆ Type

virtual FuckType AI_Fuck.Type
get

Definition at line 40 of file AI_Fuck.cs.

Referenced by Finish(), and Run().


The documentation for this class was generated from the following file: