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

◆ UpdateTime_SpawnTownNPCs()

static void Terraria.Main.UpdateTime_SpawnTownNPCs ( )
inlinestaticprivate

Definition at line 62302 of file Main.cs.

62303 {
62304 int worldUpdateRate = WorldGen.GetWorldUpdateRate();
62305 if (netMode == 1 || worldUpdateRate <= 0)
62306 {
62307 return;
62308 }
62310 if (checkForSpawns < 7200 / worldUpdateRate)
62311 {
62312 return;
62313 }
62314 checkForSpawns = 0;
62315 int num = 0;
62316 for (int i = 0; i < 255; i++)
62317 {
62318 if (player[i].active)
62319 {
62320 num++;
62321 }
62322 }
62323 for (int j = 0; j < NPCID.Count; j++)
62324 {
62325 townNPCCanSpawn[j] = false;
62326 }
62327 WorldGen.prioritizedTownNPCType = 0;
62328 int num2 = 0;
62329 int num3 = 0;
62330 int num4 = 0;
62331 int num5 = 0;
62332 int num6 = 0;
62333 int num7 = 0;
62334 int num8 = 0;
62335 int num9 = 0;
62336 int num10 = 0;
62337 int num11 = 0;
62338 int num12 = 0;
62339 int num13 = 0;
62340 int num14 = 0;
62341 int num15 = 0;
62342 int num16 = 0;
62343 int num17 = 0;
62344 int num18 = 0;
62345 int num19 = 0;
62346 int num20 = 0;
62347 int num21 = 0;
62348 int num22 = 0;
62349 int num23 = 0;
62350 int num24 = 0;
62351 int num25 = 0;
62352 int num26 = 0;
62353 int num27 = 0;
62354 int num28 = 0;
62355 int num29 = 0;
62356 int num30 = 0;
62357 int num31 = 0;
62358 int num32 = 0;
62359 int num33 = 0;
62360 int num34 = 0;
62361 int num35 = 0;
62362 int num36 = 0;
62363 int num37 = 0;
62364 int num38 = 0;
62365 int num39 = 0;
62366 int num40 = 0;
62367 for (int k = 0; k < 200; k++)
62368 {
62369 if (npc[k].active && npc[k].townNPC)
62370 {
62371 if (npc[k].type != 368 && npc[k].type != 37 && npc[k].type != 453 && !npc[k].homeless)
62372 {
62373 WorldGen.QuickFindHome(k);
62374 }
62375 if (npc[k].type == 37)
62376 {
62377 num7++;
62378 }
62379 if (npc[k].type == 17)
62380 {
62381 num2++;
62382 }
62383 if (npc[k].type == 18)
62384 {
62385 num3++;
62386 }
62387 if (npc[k].type == 19)
62388 {
62389 num5++;
62390 }
62391 if (npc[k].type == 20)
62392 {
62393 num4++;
62394 }
62395 if (npc[k].type == 22)
62396 {
62397 num6++;
62398 }
62399 if (npc[k].type == 38)
62400 {
62401 num8++;
62402 }
62403 if (npc[k].type == 54)
62404 {
62405 num9++;
62406 }
62407 if (npc[k].type == 107)
62408 {
62409 num11++;
62410 }
62411 if (npc[k].type == 108)
62412 {
62413 num10++;
62414 }
62415 if (npc[k].type == 124)
62416 {
62417 num12++;
62418 }
62419 if (npc[k].type == 142)
62420 {
62421 num13++;
62422 }
62423 if (npc[k].type == 160)
62424 {
62425 num14++;
62426 }
62427 if (npc[k].type == 178)
62428 {
62429 num15++;
62430 }
62431 if (npc[k].type == 207)
62432 {
62433 num16++;
62434 }
62435 if (npc[k].type == 208)
62436 {
62437 num17++;
62438 }
62439 if (npc[k].type == 209)
62440 {
62441 num18++;
62442 }
62443 if (npc[k].type == 227)
62444 {
62445 num19++;
62446 }
62447 if (npc[k].type == 228)
62448 {
62449 num20++;
62450 }
62451 if (npc[k].type == 229)
62452 {
62453 num21++;
62454 }
62455 if (npc[k].type == 353)
62456 {
62457 num22++;
62458 }
62459 if (npc[k].type == 369)
62460 {
62461 num23++;
62462 }
62463 if (npc[k].type == 441)
62464 {
62465 num24++;
62466 }
62467 if (npc[k].type == 550)
62468 {
62469 num25++;
62470 }
62471 if (npc[k].type == 588)
62472 {
62473 num26++;
62474 }
62475 if (npc[k].type == 633)
62476 {
62477 num27++;
62478 }
62479 if (npc[k].type == 637)
62480 {
62481 num28++;
62482 }
62483 if (npc[k].type == 638)
62484 {
62485 num29++;
62486 }
62487 if (npc[k].type == 656)
62488 {
62489 num30++;
62490 }
62491 if (npc[k].type == 670)
62492 {
62493 num31++;
62494 }
62495 if (npc[k].type == 678)
62496 {
62497 num32++;
62498 }
62499 if (npc[k].type == 679)
62500 {
62501 num33++;
62502 }
62503 if (npc[k].type == 680)
62504 {
62505 num34++;
62506 }
62507 if (npc[k].type == 681)
62508 {
62509 num35++;
62510 }
62511 if (npc[k].type == 682)
62512 {
62513 num36++;
62514 }
62515 if (npc[k].type == 683)
62516 {
62517 num37++;
62518 }
62519 if (npc[k].type == 684)
62520 {
62521 num38++;
62522 }
62523 if (npc[k].type == 663)
62524 {
62525 num39++;
62526 }
62527 num40++;
62528 }
62529 }
62530 if (WorldGen.prioritizedTownNPCType == 0)
62531 {
62532 bool flag = NPC.SpawnAllowed_Merchant();
62533 bool flag2 = NPC.SpawnAllowed_ArmsDealer();
62534 bool flag3 = NPC.SpawnAllowed_Nurse();
62535 bool flag4 = NPC.SpawnAllowed_DyeTrader();
62536 bool flag5 = NPC.SpawnAllowed_Demolitionist();
62538 if (!NPC.downedBoss3 && num7 == 0)
62539 {
62540 int num41 = NPC.NewNPC(NPC.GetSpawnSourceForTownSpawn(), dungeonX * 16 + 8, dungeonY * 16, 37);
62541 npc[num41].homeless = false;
62542 npc[num41].homeTileX = dungeonX;
62543 npc[num41].homeTileY = dungeonY;
62544 }
62545 bool flag6 = false;
62546 if (rand.Next(40) == 0)
62547 {
62548 flag6 = true;
62549 }
62550 bool flag7 = flag6 && num40 >= 14;
62551 if (NPC.unlockedPartyGirlSpawn)
62552 {
62553 flag7 = true;
62554 }
62556 if (NPC.unlockedSlimeGreenSpawn)
62557 {
62558 flag8 = true;
62559 }
62560 if (num6 < 1)
62561 {
62562 townNPCCanSpawn[22] = true;
62563 }
62564 if (flag && num2 < 1)
62565 {
62566 townNPCCanSpawn[17] = true;
62567 }
62568 if (flag3 && num3 < 1 && num2 > 0)
62569 {
62570 townNPCCanSpawn[18] = true;
62571 }
62572 if (flag2 && num5 < 1)
62573 {
62574 townNPCCanSpawn[19] = true;
62575 }
62576 if ((NPC.downedBoss1 || NPC.downedBoss2 || NPC.downedBoss3) && num4 < 1)
62577 {
62578 townNPCCanSpawn[20] = true;
62579 }
62580 if (flag5 && num2 > 0 && num8 < 1)
62581 {
62582 townNPCCanSpawn[38] = true;
62583 }
62584 if (NPC.savedStylist && num22 < 1)
62585 {
62586 townNPCCanSpawn[353] = true;
62587 }
62588 if (NPC.savedAngler && num23 < 1)
62589 {
62590 townNPCCanSpawn[369] = true;
62591 }
62592 if (NPC.downedBoss3 && num9 < 1)
62593 {
62594 townNPCCanSpawn[54] = true;
62595 }
62596 if (NPC.savedGoblin && num11 < 1)
62597 {
62598 townNPCCanSpawn[107] = true;
62599 }
62600 if (NPC.savedTaxCollector && num24 < 1)
62601 {
62602 townNPCCanSpawn[441] = true;
62603 }
62604 if (NPC.savedWizard && num10 < 1)
62605 {
62606 townNPCCanSpawn[108] = true;
62607 }
62608 if (NPC.savedMech && num12 < 1)
62609 {
62610 townNPCCanSpawn[124] = true;
62611 }
62612 if (NPC.downedFrost && num13 < 1 && xMas)
62613 {
62614 townNPCCanSpawn[142] = true;
62615 }
62616 if (((tenthAnniversaryWorld && !remixWorld) || NPC.downedMechBossAny) && num15 < 1)
62617 {
62618 townNPCCanSpawn[178] = true;
62619 }
62620 if (flag4 && num16 < 1 && num40 >= 4)
62621 {
62622 townNPCCanSpawn[207] = true;
62623 }
62624 if (NPC.downedQueenBee && num20 < 1)
62625 {
62626 townNPCCanSpawn[228] = true;
62627 }
62628 if (NPC.downedPirates && num21 < 1)
62629 {
62630 townNPCCanSpawn[229] = true;
62631 }
62632 if (num14 < 1 && hardMode)
62633 {
62634 townNPCCanSpawn[160] = true;
62635 }
62636 if (hardMode && NPC.downedPlantBoss && num18 < 1)
62637 {
62638 townNPCCanSpawn[209] = true;
62639 }
62640 if (num40 >= 8 && num19 < 1)
62641 {
62642 townNPCCanSpawn[227] = true;
62643 }
62644 if (flag7 && num17 < 1)
62645 {
62646 townNPCCanSpawn[208] = true;
62647 }
62648 if (NPC.savedBartender && num25 < 1)
62649 {
62650 townNPCCanSpawn[550] = true;
62651 }
62652 if (NPC.savedGolfer && num26 < 1)
62653 {
62654 townNPCCanSpawn[588] = true;
62655 }
62656 if (bestiaryProgressReport.CompletionPercent >= 0.1f && num27 < 1)
62657 {
62658 townNPCCanSpawn[633] = true;
62659 }
62660 if (NPC.boughtCat && num28 < 1)
62661 {
62662 townNPCCanSpawn[637] = true;
62663 }
62664 if (NPC.boughtDog && num29 < 1)
62665 {
62666 townNPCCanSpawn[638] = true;
62667 }
62668 if (NPC.boughtBunny && num30 < 1)
62669 {
62670 townNPCCanSpawn[656] = true;
62671 }
62672 if (NPC.unlockedSlimeBlueSpawn && num31 < 1)
62673 {
62674 townNPCCanSpawn[670] = true;
62675 }
62676 if (flag8 && num32 < 1)
62677 {
62678 townNPCCanSpawn[678] = true;
62679 }
62680 if (NPC.unlockedSlimeOldSpawn && num33 < 1)
62681 {
62682 townNPCCanSpawn[679] = true;
62683 }
62684 if (NPC.unlockedSlimePurpleSpawn && num34 < 1)
62685 {
62686 townNPCCanSpawn[680] = true;
62687 }
62688 if (NPC.unlockedSlimeRainbowSpawn && num35 < 1)
62689 {
62690 townNPCCanSpawn[681] = true;
62691 }
62692 if (NPC.unlockedSlimeRedSpawn && num36 < 1)
62693 {
62694 townNPCCanSpawn[682] = true;
62695 }
62696 if (NPC.unlockedSlimeYellowSpawn && num37 < 1)
62697 {
62698 townNPCCanSpawn[683] = true;
62699 }
62700 if (NPC.unlockedSlimeCopperSpawn && num38 < 1)
62701 {
62702 townNPCCanSpawn[684] = true;
62703 }
62704 bool flag9 = num2 > 0 && num3 > 0 && num4 > 0 && num5 > 0 && num6 > 0 && num8 > 0 && num9 > 0 && num10 > 0 && num11 > 0 && num12 > 0 && num14 > 0 && num15 > 0 && num16 > 0 && num17 > 0 && num18 > 0 && num19 > 0 && num20 > 0 && num21 > 0 && num22 > 0 && num23 > 0 && num24 > 0 && num25 > 0 && num26 > 0 && num27 > 0;
62706 {
62707 flag9 = true;
62708 }
62709 if (NPC.unlockedPrincessSpawn)
62710 {
62711 flag9 = true;
62712 }
62713 if (flag9 && num39 < 1)
62714 {
62715 townNPCCanSpawn[663] = true;
62716 }
62717 int num42 = WorldGen.prioritizedTownNPCType;
62718 if (num42 == 0 && NPC.boughtCat && num28 < 1)
62719 {
62720 num42 = 637;
62721 }
62722 if (num42 == 0 && NPC.boughtDog && num29 < 1)
62723 {
62724 num42 = 638;
62725 }
62726 if (num42 == 0 && NPC.boughtBunny && num30 < 1)
62727 {
62728 num42 = 656;
62729 }
62730 if (num42 == 0 && NPC.unlockedSlimeBlueSpawn && num31 < 1)
62731 {
62732 num42 = 670;
62733 }
62734 if (num42 == 0 && flag8 && num32 < 1)
62735 {
62736 num42 = 678;
62737 }
62738 if (num42 == 0 && NPC.unlockedSlimeOldSpawn && num33 < 1)
62739 {
62740 num42 = 679;
62741 }
62742 if (num42 == 0 && NPC.unlockedSlimePurpleSpawn && num34 < 1)
62743 {
62744 num42 = 680;
62745 }
62746 if (num42 == 0 && NPC.unlockedSlimeRainbowSpawn && num35 < 1)
62747 {
62748 num42 = 681;
62749 }
62750 if (num42 == 0 && NPC.unlockedSlimeRedSpawn && num36 < 1)
62751 {
62752 num42 = 682;
62753 }
62754 if (num42 == 0 && NPC.unlockedSlimeYellowSpawn && num37 < 1)
62755 {
62756 num42 = 683;
62757 }
62758 if (num42 == 0 && NPC.unlockedSlimeCopperSpawn && num38 < 1)
62759 {
62760 num42 = 684;
62761 }
62762 if (num42 == 0 && num6 < 1)
62763 {
62764 num42 = 22;
62765 }
62766 if (num42 == 0 && flag && num2 < 1)
62767 {
62768 num42 = 17;
62769 }
62770 if (num42 == 0 && flag3 && num3 < 1 && num2 > 0)
62771 {
62772 num42 = 18;
62773 }
62774 if (num42 == 0 && flag2 && num5 < 1)
62775 {
62776 num42 = 19;
62777 }
62778 if (num42 == 0 && NPC.savedGoblin && num11 < 1)
62779 {
62780 num42 = 107;
62781 }
62782 if (num42 == 0 && NPC.savedTaxCollector && num24 < 1)
62783 {
62784 num42 = 441;
62785 }
62786 if (num42 == 0 && NPC.savedWizard && num10 < 1)
62787 {
62788 num42 = 108;
62789 }
62790 if (num42 == 0 && hardMode && num14 < 1)
62791 {
62792 num42 = 160;
62793 }
62794 if (num42 == 0 && (NPC.downedBoss1 || NPC.downedBoss2 || NPC.downedBoss3) && num4 < 1)
62795 {
62796 num42 = 20;
62797 }
62798 if (num42 == 0 && flag5 && num2 > 0 && num8 < 1)
62799 {
62800 num42 = 38;
62801 }
62802 if (num42 == 0 && NPC.downedQueenBee && num20 < 1)
62803 {
62804 num42 = 228;
62805 }
62806 if (num42 == 0 && NPC.downedMechBossAny && num15 < 1)
62807 {
62808 num42 = 178;
62809 }
62810 if (num42 == 0 && NPC.savedMech && num12 < 1)
62811 {
62812 num42 = 124;
62813 }
62814 if (num42 == 0 && NPC.savedAngler && num23 < 1)
62815 {
62816 num42 = 369;
62817 }
62818 if (num42 == 0 && hardMode && NPC.downedPlantBoss && num18 < 1)
62819 {
62820 num42 = 209;
62821 }
62822 if (num42 == 0 && NPC.downedPirates && num21 < 1)
62823 {
62824 num42 = 229;
62825 }
62826 if (num42 == 0 && NPC.downedBoss3 && num9 < 1)
62827 {
62828 num42 = 54;
62829 }
62830 if (num42 == 0 && NPC.savedStylist && num22 < 1)
62831 {
62832 num42 = 353;
62833 }
62834 if (num42 == 0 && num40 >= 4 && flag4 && num16 < 1)
62835 {
62836 num42 = 207;
62837 }
62838 if (num42 == 0 && num40 >= 8 && num19 < 1)
62839 {
62840 num42 = 227;
62841 }
62842 if (num42 == 0 && flag7 && num17 < 1)
62843 {
62844 num42 = 208;
62845 }
62846 if (num42 == 0 && NPC.downedFrost && num13 < 1 && xMas)
62847 {
62848 num42 = 142;
62849 }
62850 if (num42 == 0 && NPC.savedBartender && num25 < 1)
62851 {
62852 num42 = 550;
62853 }
62854 if (num42 == 0 && NPC.savedGolfer && num26 < 1)
62855 {
62856 num42 = 588;
62857 }
62858 if (num42 == 0 && bestiaryProgressReport.CompletionPercent >= 0.1f && num27 < 1)
62859 {
62860 num42 = 633;
62861 }
62862 if (num42 == 0 && flag9 && num39 < 1)
62863 {
62864 num42 = 663;
62865 }
62866 WorldGen.prioritizedTownNPCType = num42;
62867 }
62868 }
static readonly short Count
Definition NPCID.cs:11744
static int checkForSpawns
Definition Main.cs:1316
static bool[] townNPCCanSpawn
Definition Main.cs:570
static int netMode
Definition Main.cs:2095
static bool xMas
Definition Main.cs:686
static BestiaryUnlockProgressReport GetBestiaryProgressReport()
Definition Main.cs:62285
static int dungeonX
Definition Main.cs:1218
static int dungeonY
Definition Main.cs:1220
static UnifiedRandom rand
Definition Main.cs:1387
static NPC[] npc
Definition Main.cs:1685
static bool tenthAnniversaryWorld
Definition Main.cs:343
static bool hardMode
Definition Main.cs:1022
static Player[] player
Definition Main.cs:1803
static bool remixWorld
Definition Main.cs:349

References Terraria.NPC.boughtBunny, Terraria.NPC.boughtCat, Terraria.NPC.boughtDog, Terraria.Main.checkForSpawns, Terraria.ID.NPCID.Count, Terraria.NPC.downedBoss1, Terraria.NPC.downedBoss2, Terraria.NPC.downedBoss3, Terraria.NPC.downedFrost, Terraria.NPC.downedMechBossAny, Terraria.NPC.downedPirates, Terraria.NPC.downedPlantBoss, Terraria.NPC.downedQueenBee, Terraria.Main.dungeonX, Terraria.Main.dungeonY, Terraria.GameContent.Events.BirthdayParty.GenuineParty, Terraria.Main.GetBestiaryProgressReport(), Terraria.NPC.GetSpawnSourceForTownSpawn(), Terraria.WorldGen.GetWorldUpdateRate(), Terraria.Main.hardMode, System.Text.RegularExpressions.i, Terraria.Main.netMode, Terraria.NPC.NewNPC(), Terraria.Main.npc, Terraria.Main.player, Terraria.WorldGen.prioritizedTownNPCType, Terraria.WorldGen.QuickFindHome(), Terraria.Main.rand, Terraria.Main.remixWorld, Terraria.NPC.savedAngler, Terraria.NPC.savedBartender, Terraria.NPC.savedGoblin, Terraria.NPC.savedGolfer, Terraria.NPC.savedMech, Terraria.NPC.savedStylist, Terraria.NPC.savedTaxCollector, Terraria.NPC.savedWizard, Terraria.NPC.SpawnAllowed_ArmsDealer(), Terraria.NPC.SpawnAllowed_Demolitionist(), Terraria.NPC.SpawnAllowed_DyeTrader(), Terraria.NPC.SpawnAllowed_Merchant(), Terraria.NPC.SpawnAllowed_Nurse(), Terraria.Main.tenthAnniversaryWorld, Terraria.Main.townNPCCanSpawn, System.type, Terraria.NPC.unlockedPartyGirlSpawn, Terraria.NPC.unlockedPrincessSpawn, Terraria.NPC.unlockedSlimeBlueSpawn, Terraria.NPC.unlockedSlimeCopperSpawn, Terraria.NPC.unlockedSlimeGreenSpawn, Terraria.NPC.unlockedSlimeOldSpawn, Terraria.NPC.unlockedSlimePurpleSpawn, Terraria.NPC.unlockedSlimeRainbowSpawn, Terraria.NPC.unlockedSlimeRedSpawn, Terraria.NPC.unlockedSlimeYellowSpawn, and Terraria.Main.xMas.

Referenced by Terraria.Main.UpdateTime().