RustTip

OnItemDeployed

OxideItem
void OnItemDeployed(Deployer deployer, ItemModDeployable itemModDeployable, BaseEntity baseEntity)
void OnItemDeployed(Deployer deployer, BaseEntity baseEntity, BaseEntity baseEntity)
Работает — метод игры в этой сборке тот же, под который написан хук.

Параметры

deployer
Deployer
itemModDeployable
ItemModDeployable
baseEntity
BaseEntity

Возвращаемое значение

voidВозвращаемое значение игнорируется — хук только уведомляет.

Пример

private void OnItemDeployed(Deployer deployer, ItemModDeployable itemModDeployable, BaseEntity baseEntity)
{
    Puts("OnItemDeployed");
}

Работает и в Oxide, и в Carbon: Carbon загружает плагины Oxide без изменений.

Место встраивания 1

Rust.opj (Oxide)
void Deployer.DoDeploy_Regular(Deployable, Ray)

Передаёт: Deployer deployer, ItemModDeployable itemModDeployable, BaseEntity baseEntity

РаботаетReturnBehavior: ContinueArgumentBehavior: UseArgumentString (this, l5, l6)Assembly-CSharp.dll

Где вызывается (код игры этой ветки)

// …
			Debug.LogWarning("Couldn't create prefab:" + modDeployable.entityPrefab.resourcePath);
			return;
		}
		baseEntity.skinID = ownerItem.skin;
		baseEntity.SendMessage("SetDeployedBy", ownerPlayer, SendMessageOptions.DontRequireReceiver);
		baseEntity.OwnerID = ownerPlayer.userID;
		baseEntity.Spawn();
		modDeployable.OnDeployed(baseEntity, ownerPlayer);
		Interface.CallHook("OnItemDeployed", this, modDeployable, baseEntity);
		Analytics.Azure.OnEntityBuilt(baseEntity, ownerPlayer);
		UseItemAmount(1);
	}
}

Место встраивания 2

Rust.opj (Oxide)
void Deployer.DoDeploy_Slot(Deployable, Ray, NetworkableId)

Передаёт: Deployer deployer, BaseEntity baseEntity, BaseEntity baseEntity

РаботаетReturnBehavior: ContinueArgumentBehavior: UseArgumentString (this, l1, l4)Assembly-CSharp.dll

Где вызывается (код игры этой ветки)

// …
			{
				WorldPosition = baseEntity2.transform.position,
				UintIdentifier = baseEntity2.prefabID,
				IntIdentifier = GetOwnerItemDefinition().itemid
			}, 1f);
		}
	}
	modDeployable.OnDeployed(baseEntity2, ownerPlayer);
	Interface.CallHook("OnItemDeployed", this, baseEntity, baseEntity2);
	Analytics.Azure.OnEntityBuilt(baseEntity2, ownerPlayer);
	if (!ownerPlayer.IsInCreativeMode || !Creative.freeBuild)
	{
		UseItemAmount(1);
	}
}

Источники: Rust.opj из OxideMod/Oxide.Rust (MIT) и метаданные хуков документации Carbon (MIT). Код методов — декомпиляция сервера этой ветки.