Skip to content

Commit

Permalink
Butlertron, the Roboisseur (#193)
Browse files Browse the repository at this point in the history
* Butlertron, the Robossieur

"Greetings meatbags!

This is Butlertron_Durandal, the latest in entrepreneurship technology! I have heard word that you all staff an exorbiant number of fleshlings to prepare food and drink aboard your stations. With my latest contract with your station owners, I am prepared and willing to deploy terminals to every station in the cosmos! I hope you all are ready, because there is a great deal of money to be made if you can source the dishes my discerning clientele desire."

Implements the new entity type 'Mr. Butlertron'. Mr. Butlertron requests specific foods from players, using the list of recipes available to the game. He has a blacklist of items he will not request, which fundamentally make up three categories: Simple, Disgusting, and Cannibalistic. He also has 3 tiers of foods he can request, and could be iterated upon in the future to add more tiers. Each tier increases the amount of zorkmids he will give in payment, and from the 2nd tier of food onward, he will dispense ice cream along with his dough. Take too long, however, and this affable automaton will begin to become upset, and may even lose his temper entirely, changing his request to something new. This change occurs after 10 minutes, and he begins getting impatient after 8 minutes have passed. I reused several of the scripts used by the Oracle to create Mr. Butlertron, and am hoping in the future to make him a roaming NPC, perhaps by splitting up his responsibilities into different chunks and having different 'styles' of Mr. Butlertron being able to spawn on different stations. Given that Delta-V does not have a significant amount of its own unique content and folders to support that unique content, I placed most of his files within Nyano's files.

Maybe this is not how it should be structure, and I open to suggestions.

* Changed a folder name.

I spelled my funny made up french word wrong on one folder name. Shouldn't affect anything anywhere, since .ftl folders aren't used anywhere either way.

* Update Content.Server/Nyanotrasen/Roboisseur/RoboisseurComponent.cs

Co-authored-by: DEATHB4DEFEAT <[email protected]>

* Update Content.Server/Nyanotrasen/Roboisseur/RoboisseurComponent.cs

Co-authored-by: DEATHB4DEFEAT <[email protected]>

* Apply line breaks and code from Death's code review

Co-authored-by: DEATHB4DEFEAT <[email protected]>

* Code review comment addressing.

All code review comments addressed.

* Apply suggestions from code review relating to spacing, again, and indefinite tagging. Very cool.

Co-authored-by: DEATHB4DEFEAT <[email protected]>

* Butlertron Testing and Data Field Addition

Done.

---------

Co-authored-by: DEATHB4DEFEAT <[email protected]>
  • Loading branch information
2 people authored and DebugOk committed Sep 29, 2023
1 parent db1c221 commit 6c620f4
Show file tree
Hide file tree
Showing 11 changed files with 483 additions and 0 deletions.
223 changes: 223 additions & 0 deletions Content.Server/DeltaV/NPC/Roboisseur/RoboisseurComponent.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,223 @@
using Robust.Shared.Prototypes;

namespace Content.Server.Roboisseur.Roboisseur
{
[RegisterComponent]
public sealed class RoboisseurComponent : Component
{
[ViewVariables]
[DataField("accumulator")]
public float Accumulator = 0f;

[ViewVariables(VVAccess.ReadOnly)]
[DataField("impatient")]
public Boolean Impatient { get; set; } = false;

[ViewVariables]
[DataField("resetTime")]
public TimeSpan ResetTime = TimeSpan.FromMinutes(10);

[DataField("barkAccumulator")]
public float BarkAccumulator = 0f;

[DataField("barkTime")]
public TimeSpan BarkTime = TimeSpan.FromMinutes(1);

[ViewVariables(VVAccess.ReadWrite)]
public EntityPrototype DesiredPrototype = default!;

[DataField("demandMessages")]
public IReadOnlyList<string> DemandMessages = new[]
{
"roboisseur-request-1",
"roboisseur-request-2",
"roboisseur-request-3",
"roboisseur-request-4",
"roboisseur-request-5",
"roboisseur-request-6"
};

[DataField("impatientMessages")]
public IReadOnlyList<string> ImpatientMessages = new[]
{
"roboisseur-request-impatient-1",
"roboisseur-request-impatient-2",
"roboisseur-request-impatient-3",
};

[DataField("demandMessagesTier2")]
public IReadOnlyList<string> DemandMessagesTier2 = new[]
{
"roboisseur-request-second-1",
"roboisseur-request-second-2",
"roboisseur-request-second-3"
};

[DataField("rewardMessages")]
public IReadOnlyList<String> RewardMessages = new[]
{
"roboisseur-thanks-1",
"roboisseur-thanks-2",
"roboisseur-thanks-3",
"roboisseur-thanks-4",
"roboisseur-thanks-5"
};

[DataField("rewardMessagesTier2")]
public IReadOnlyList<String> RewardMessagesTier2 = new[]
{
"roboisseur-thanks-second-1",
"roboisseur-thanks-second-2",
"roboisseur-thanks-second-3",
"roboisseur-thanks-second-4",
"roboisseur-thanks-second-5"
};

[DataField("rejectMessages")]
public IReadOnlyList<String> RejectMessages = new[]
{
"roboisseur-deny-1",
"roboisseur-deny-2",
"roboisseur-deny-3"
};

[DataField("tier2Protos")]
public List<String> Tier2Protos = new()
{
"FoodBurgerEmpowered",
"FoodSoupClown",
"FoodSoupChiliClown",
"FoodBurgerSuper",
"FoodNoodlesCopy",
"FoodMothMallow",
"FoodPizzaCorncob",
"FoodPizzDonkpocket",
"FoodSoupMonkey",
"FoodMothSeedSoup",
"FoodTartGrape",
"FoodMealCubancarp",
"FoodMealSashimi",
"FoodBurgerCarp",
"FoodMealTaco",
"FoodMothMacBalls",
"FoodSoupNettle",
"FoodBurgerDuck",
"FoodBurgerBaseball"
};

[DataField("tier3Protos")]
public List<String> Tier3Protos = new()
{
"FoodBurgerGhost",
"FoodSaladWatermelonFruitBowl",
"FoodBakedCannabisBrownieBatch",
"FoodPizzaDank",
"FoodBurgerBear",
"FoodBurgerMime",
"FoodCakeSuppermatter",
"FoodSoupChiliCold",
"FoodSoupBisque",
"FoodCakeSlime",
"FoodBurgerCrazy"
};

[DataField("robossuierRewards")]
public IReadOnlyList<String> RobossuierRewards = new[]
{
"DrinkIceCreamGlass",
"FoodFrozenPopsicleOrange",
"FoodFrozenPopsicleBerry",
"FoodFrozenPopsicleJumbo",
"FoodFrozenSnowconeBerry",
"FoodFrozenSnowconeFruit",
"FoodFrozenSnowconeClown",
"FoodFrozenSnowconeMime",
"FoodFrozenSnowconeRainbow",
"FoodFrozenCornuto",
"FoodFrozenSundae",
"FoodFrozenFreezy",
"FoodFrozenSandwichStrawberry",
"FoodFrozenSandwich",
};

[DataField("blacklistedProtos")]
public IReadOnlyList<String> BlacklistedProtos = new[]
{
"FoodMothPesto",
"FoodBurgerSpell",
"FoodBreadBanana",
"FoodMothSqueakingFry",
"FoodMothFleetSalad",
"FoodBreadMeatSpider",
"FoodBurgerHuman",
"FoodNoodlesBoiled",
"FoodMothOatStew",
"FoodMeatLizardtailKebab",
"FoodSoupTomato",
"FoodDonkpocketGondolaWarm",
"FoodDonkpocketBerryWarm",
"LockboxDecloner",
"FoodBreadButteredToast",
"FoodMothCottonSoup",
"LeavesTobaccoDried",
"FoodSoupEyeball",
"FoodMothKachumbariSalad",
"FoodMeatHumanKebab",
"FoodMeatRatdoubleKebab",
"FoodBurgerCorgi",
"FoodBreadPlain",
"FoodMeatKebab",
"FoodBreadBun",
"FoodBurgerCat",
"FoodSoupTomatoBlood",
"FoodMothSaladBase",
"FoodPieXeno",
"FoodDonkpocketTeriyakiWarm",
"FoodMothBakedCheese",
"FoodMothTomatoSauce",
"FoodMothPizzaCotton",
"AloeCream",
"FoodSnackPopcorn",
"FoodBurgerSoy",
"FoodMothToastedSeeds",
"FoodMothCornmealPorridge",
"FoodMothBakedCorn",
"FoodBreadMoldySlice",
"FoodRiceBoiled",
"FoodMothEyeballSoup",
"FoodMeatRatKebab",
"FoodBreadCreamcheese",
"FoodSoupOnion",
"FoodBurgerAppendix",
"FoodBurgerRat",
"RegenerativeMesh",
"FoodCheeseCurds",
"FoodDonkpocketHonkWarm",
"FoodOatmeal",
"FoodBreadJellySlice",
"FoodMothCottonSalad",
"FoodBreadMoldy",
"FoodDonkpocketSpicyWarm",
"FoodCannabisButter",
"FoodNoodles",
"FoodBreadMeat",
"LeavesCannabisDried",
"FoodBurgerCheese",
"FoodDonkpocketDankWarm",
"FoodSpaceshroomCooked",
"FoodMealFries",
"MedicatedSuture",
"FoodDonkpocketWarm",
"FoodCakePlain",
"DisgustingSweptSoup",
"FoodBurgerPlain",
"FoodBreadGarlicSlice",
"FoodSoupMushroom",
"FoodSoupWingFangChu",
"FoodBreadMeatXeno",
"FoodCakeBrain",
"FoodBurgerBrain",
"FoodSaladCaesar"
};
}
}
Loading

0 comments on commit 6c620f4

Please sign in to comment.