OnEntityTakeDamage
OxideCarbonEntityCalled when an entity take is damaged.
object OnEntityTakeDamage(ResourceEntity resourceEntity, HitInfo info)
object OnEntityTakeDamage(Rust.Ai.Gen2.LivestockAnimal livestockAnimal, HitInfo info)Работает — метод игры в этой сборке тот же, под который написан хук.
Параметры
- resourceEntity
- ResourceEntity
- info
- HitInfo
Возвращаемое значение
objectВерните не null, чтобы отменить действие игры.
Пример
object — можно повлиять на игру: вернуть значение, чтобы изменить или отменить действие.
private object OnEntityTakeDamage(ResourceEntity resourceEntity, HitInfo info)
{
Puts("OnEntityTakeDamage");
// ничего не меняем — игра продолжит как обычно
return null;
// повлиять на игру:
// return false; // не null — действие игры отменяется
}Работает и в Oxide, и в Carbon: Carbon загружает плагины Oxide без изменений.
Где вызывается
ядро Oxide (Oxide.Rust)
RustCore::IOnBaseCombatEntityHurt(BaseCombatEntity entity, HitInfo hitInfo)
Код ядра Oxide — отсюда вызывается хук
private object IOnBaseCombatEntityHurt(BaseCombatEntity entity, HitInfo hitInfo)
{
if (entity is BasePlayer || entity is LivestockAnimal)
{
return null;
}
return Interface.CallHook("OnEntityTakeDamage", entity, hitInfo);
}Где вызывается
ядро Oxide (Oxide.Rust)
RustCore::IOnBasePlayerAttacked(BasePlayer basePlayer, HitInfo hitInfo)
Код ядра Oxide — отсюда вызывается хук
private object IOnBasePlayerAttacked(BasePlayer basePlayer, HitInfo hitInfo)
{
if (!serverInitialized || basePlayer == null || hitInfo == null || basePlayer.IsDead() || isPlayerTakingDamage || basePlayer is NPCPlayer)
{
return null;
}
if (Interface.CallHook("OnEntityTakeDamage", basePlayer, hitInfo) != null)
{
return true;
}
isPlayerTakingDamage = true;
try
{
basePlayer.OnAttacked(hitInfo);
// …Где вызывается
ядро Oxide (Oxide.Rust)
RustCore::IOnBasePlayerHurt(BasePlayer basePlayer, HitInfo hitInfo)
Код ядра Oxide — отсюда вызывается хук
private object IOnBasePlayerHurt(BasePlayer basePlayer, HitInfo hitInfo)
{
return isPlayerTakingDamage ? null : Interface.CallHook("OnEntityTakeDamage", basePlayer, hitInfo);
}Место встраивания 1
Rust.opj (Oxide)
void ResourceEntity.OnAttacked(HitInfo)
Передаёт: ResourceEntity resourceEntity, HitInfo info
РаботаетReturnBehavior: ExitWhenValidTypeArgumentBehavior: AllAssembly-CSharp.dll
Где вызывается (код игры этой ветки)
public override void OnAttacked(HitInfo info)
{
if (!isServer || isKilled)
{
return;
}
if (Interface.CallHook("OnEntityTakeDamage", this, info) != null)
{
return;
}
if (resourceDispenser != null)
{
resourceDispenser.OnResourceDispenserAttacked(info);
}
if (!info.DidGather)
// …Место встраивания 2
Rust.opj (Oxide)
void Rust.Ai.Gen2.LivestockAnimal.Hurt(HitInfo)
Передаёт: Rust.Ai.Gen2.LivestockAnimal livestockAnimal, HitInfo info
РаботаетReturnBehavior: ExitWhenNonNullArgumentBehavior: AllAssembly-CSharp.dll
Где вызывается (код игры этой ветки)
public override void Hurt(HitInfo info)
{
if (Interface.CallHook("OnEntityTakeDamage", this, info) != null)
{
return;
}
base.Hurt(info);
if (!InSafeZone())
{
if (IsLeading())
{
// …Источники: Rust.opj из OxideMod/Oxide.Rust (MIT) и метаданные хуков документации Carbon (MIT). Код методов — декомпиляция сервера этой ветки.