Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches

◆ Prefix()

bool Terraria.Item.Prefix ( int prefixWeWant)
inline

Definition at line 487 of file Item.cs.

488 {
489 if (!WorldGen.gen && Main.rand == null)
490 {
491 Main.rand = new UnifiedRandom();
492 }
493 if (prefixWeWant == 0)
494 {
495 return false;
496 }
497 if (!CanHavePrefixes())
498 {
499 return false;
500 }
501 UnifiedRandom unifiedRandom = (WorldGen.gen ? WorldGen.genRand : Main.rand);
503 float dmg = 1f;
504 float kb = 1f;
505 float spd = 1f;
506 float size = 1f;
507 float shtspd = 1f;
508 float mcst = 1f;
509 int crt = 0;
510 bool flag = true;
511 while (flag)
512 {
513 flag = false;
514 if (rolledPrefix == -1 && unifiedRandom.Next(4) == 0)
515 {
516 rolledPrefix = 0;
517 }
518 if (prefixWeWant < -1)
519 {
520 rolledPrefix = -1;
521 }
523 {
524 return false;
525 }
526 switch (prefixWeWant)
527 {
528 case -3:
529 return true;
530 case -1:
532 {
533 rolledPrefix = 0;
534 }
535 break;
536 }
538 {
539 flag = true;
540 rolledPrefix = -1;
541 }
542 if (prefixWeWant == -2 && rolledPrefix == 0)
543 {
544 rolledPrefix = -1;
545 flag = true;
546 }
547 }
548 damage = (int)Math.Round((float)damage * dmg);
549 useAnimation = (int)Math.Round((float)useAnimation * spd);
550 useTime = (int)Math.Round((float)useTime * spd);
551 reuseDelay = (int)Math.Round((float)reuseDelay * spd);
552 mana = (int)Math.Round((float)mana * mcst);
553 knockBack *= kb;
554 scale *= size;
556 crit += crt;
557 float num = 1f * dmg * (2f - spd) * (2f - mcst) * size * kb * shtspd * (1f + (float)crt * 0.02f);
558 if (rolledPrefix == 62 || rolledPrefix == 69 || rolledPrefix == 73 || rolledPrefix == 77)
559 {
560 num *= 1.05f;
561 }
562 if (rolledPrefix == 63 || rolledPrefix == 70 || rolledPrefix == 74 || rolledPrefix == 78 || rolledPrefix == 67)
563 {
564 num *= 1.1f;
565 }
566 if (rolledPrefix == 64 || rolledPrefix == 71 || rolledPrefix == 75 || rolledPrefix == 79 || rolledPrefix == 66)
567 {
568 num *= 1.15f;
569 }
570 if (rolledPrefix == 65 || rolledPrefix == 72 || rolledPrefix == 76 || rolledPrefix == 80 || rolledPrefix == 68)
571 {
572 num *= 1.2f;
573 }
574 if ((double)num >= 1.2)
575 {
576 rare += 2;
577 }
578 else if ((double)num >= 1.05)
579 {
580 rare++;
581 }
582 else if ((double)num <= 0.8)
583 {
584 rare -= 2;
585 }
586 else if ((double)num <= 0.95)
587 {
588 rare--;
589 }
590 if (rare > -11)
591 {
592 if (rare < -1)
593 {
594 rare = -1;
595 }
596 if (rare > 11)
597 {
598 rare = 11;
599 }
600 }
601 num *= num;
602 value = (int)((float)value * num);
603 prefix = (byte)rolledPrefix;
604 return true;
605 }
static decimal Round(decimal d)
Definition Math.cs:1096
static bool[] ReducedNaturalChance
Definition PrefixID.cs:9
float knockBack
Definition Item.cs:169
int useAnimation
Definition Item.cs:145
int value
Definition Item.cs:259
bool TryGetPrefixStatMultipliersForItem(int rolledPrefix, out float dmg, out float kb, out float spd, out float size, out float shtspd, out float mcst, out int crt)
Definition Item.cs:644
int reuseDelay
Definition Item.cs:307
float scale
Definition Item.cs:189
int damage
Definition Item.cs:167
float shootSpeed
Definition Item.cs:237
bool CanHavePrefixes()
Definition Item.cs:474
int useTime
Definition Item.cs:147
bool RollAPrefix(UnifiedRandom random, ref int rolledPrefix)
Definition Item.cs:981
byte prefix
Definition Item.cs:295

References Terraria.Item.CanHavePrefixes(), Terraria.Item.crit, Terraria.Item.damage, Terraria.WorldGen.gen, Terraria.Item.knockBack, Terraria.Item.mana, Terraria.Item.prefix, Terraria.Main.rand, Terraria.Item.rare, Terraria.ID.PrefixID.Sets.ReducedNaturalChance, Terraria.Item.reuseDelay, Terraria.Item.RollAPrefix(), System.Math.Round(), Terraria.Item.scale, Terraria.Item.shootSpeed, Terraria.Item.TryGetPrefixStatMultipliersForItem(), Terraria.Item.useAnimation, Terraria.Item.useTime, and Terraria.Item.value.

Referenced by Terraria.WorldGen.AddBuriedChest(), Terraria.Item.DeserializeFrom(), Terraria.Player.DropItems(), Terraria.UI.ItemSlot.PickItemMovementAction(), Terraria.GameContent.Tile_Entities.TEDisplayDoll.ReadExtraData(), Terraria.GameContent.Tile_Entities.TEFoodPlatter.ReadExtraData(), Terraria.GameContent.Tile_Entities.TEHatRack.ReadExtraData(), Terraria.GameContent.Tile_Entities.TEItemFrame.ReadExtraData(), Terraria.GameContent.Tile_Entities.TEWeaponsRack.ReadExtraData(), Terraria.Item.Refresh(), Terraria.GameContent.UI.States.UICharacterCreation.SetupPlayerStatsAndInventoryBasedOnDifficulty(), Terraria.GameContent.Tile_Entities.TEFoodPlatter.TryPlacing(), Terraria.GameContent.Tile_Entities.TEItemFrame.TryPlacing(), and Terraria.GameContent.Tile_Entities.TEWeaponsRack.TryPlacing().