DOF/sqr/User/Object/ActiveObject/CharacterObjectClass_AI.nut

73 lines
2.5 KiB
Plaintext
Raw Normal View History

2024-12-11 15:08:57 +08:00
/*
文件名:AiCharacterObjectClass.nut
路径:User/GameClass/ObjectClass/AiCharacterObjectClass.nut
创建日期:2024-05-14 10:05
文件用途:APC
*/
class AICharacter extends Character {
//职业
Job = null;
//APC编号
Id = null;
function Init(Idx) {
Id = Idx;
Info = sq_DeepCopy(ScriptData.GetAICharacter(Idx));
//因为Info会被重新赋值 这里copy一下 下面读取属性要用
local ScriptInfo = sq_DeepCopy(Info);
Job = ScriptInfo["minimum info"][1];
//根据脚本穿上装备
ReloadEquipment();
//根据职业构造基础角色 注意这一步会直接重新赋值Info
base.Init(Job);
//加载脚本属性
Attribute.Init(ScriptInfo.Attributes, this);
}
//重载装备
function ReloadEquipment() {
// Util.PrintTable(Info);
for (local i = 0; i< Info["equipment"].len(); i += 3) {
local EquiId = Info["equipment"][i];
local EquiInfo = ScriptData.GetEquipment(EquiId);
if (EquiInfo.type.path == "skin avatar") skin = Info["equipment"][i];
else if (EquiInfo.type.path == "weapon") weapon = Info["equipment"][i];
else if (EquiInfo.type.path == "cap avatar") cap = Info["equipment"][i];
else if (EquiInfo.type.path == "hair avatar") hair = Info["equipment"][i];
else if (EquiInfo.type.path == "coat avatar") coat = Info["equipment"][i];
else if (EquiInfo.type.path == "pants avatar") pants = Info["equipment"][i];
else if (EquiInfo.type.path == "shoes avatar") shoes = Info["equipment"][i];
}
}
function OnAddchild(Parent) {
if (getroottable().AiCharacterObjectFunction.rawin("AiCharacterObject_Create_" + Id))
getroottable().AiCharacterObjectFunction["AiCharacterObject_Create_" + Id](this, Parent);
base.OnAddchild(Parent);
}
function OnRemove(Parent) {
if (getroottable().AiCharacterObjectFunction.rawin("AiCharacterObject_Destroy_" + Id))
getroottable().AiCharacterObjectFunction["AiCharacterObject_Destroy_" + Id](this, Parent);
base.OnRemove(Parent);
}
//被调用
function OnUpdate(dt) {
//如果有APC的Proc脚本则调用
if (getroottable().AiCharacterObjectFunction.rawin("AiCharacterObject_Proc_" + Id))
getroottable().AiCharacterObjectFunction["AiCharacterObject_Proc_" + Id](this, dt);
//属性更新
if (Attribute) Attribute.Proc(this, dt);
base.OnUpdate(dt);
}
}