Upload from upload_mods.ps1
This commit is contained in:
52
Score/NPCv2/ReadMe.txt
Normal file
52
Score/NPCv2/ReadMe.txt
Normal file
@@ -0,0 +1,52 @@
|
||||
NPCv2
|
||||
=====
|
||||
New class format and code designed to allow a replacement EntityAliveSDX for A22.
|
||||
|
||||
The goal of this project is to improve performance for the custom entities, as well as clean up the code significantly.
|
||||
|
||||
EntityAliveV2 (prototype name only)
|
||||
=============
|
||||
- Inherits off EntityNPC
|
||||
- Smaller code foot print
|
||||
- Base class only has the basic code to:
|
||||
- Add items to their inventory
|
||||
- Allow Dialog
|
||||
- Checks to see if immune to damage
|
||||
- etc.
|
||||
|
||||
- Support Classes have been configured to handle additional tasks that may be optional for the NPC.
|
||||
- Found under Features\NPCv2\Scripts\Entity\SupportClasses
|
||||
- Examples:
|
||||
- LeaderUtils handles all logic and checks if the NPC has a leader.
|
||||
- MissionUtils handles all logic and checks if the NPC is away on a mission.
|
||||
- NPCQuest Utils handles all logic and checks if the NPC can give quests.
|
||||
- PushOutOfBounds handles all logic and checks if the Entity is out of bounds.
|
||||
- NPCUtils handles misc logic for generic NPCs
|
||||
|
||||
- Some of these utils are added via EntityAliveV2's Init call.
|
||||
- These are considered be useful for all NPCs, regardless of what the NPCs are meant for.
|
||||
public override void Init(int _entityClass) {
|
||||
base.Init(_entityClass);
|
||||
_pushOutOfBlocksUtils = new PushOutOfBlocksUtils(this);
|
||||
_npcUtils = new NPCUtils(this);
|
||||
}
|
||||
- For more advanced NPCs, there is now an exposed XML format for the entityclass to configure:
|
||||
<property class="NPCConfiguration" >
|
||||
<property name="Hireable" value="true" />
|
||||
<property name="Missions" value="true"/>
|
||||
</property>
|
||||
- The XML configurations are handled in the CopyPropertiesFromEntityClass, via a switch statement:
|
||||
case "Hireable":
|
||||
if (StringParsers.ParseBool(keyValuePair.Value.ToString()))
|
||||
_leaderUtils = new LeaderUtils(this);
|
||||
|
||||
- This will create a new reference to the LeaderUtils class.
|
||||
- Elsewhere in code, the following hooks have been added. If _leaderUtils != null, then it'll execute the LeaderUpdate() call.
|
||||
- If it does not exist, it does nothing.
|
||||
|
||||
public override void OnUpdateLive() {
|
||||
_leaderUtils?.LeaderUpdate();
|
||||
_pushOutOfBlocksUtils.CheckStuck(position, width, depth);
|
||||
_npcUtils?.CheckCollision();
|
||||
_npcUtils?.CheckFallAndGround();
|
||||
|
||||
Reference in New Issue
Block a user