Hi again, i need to add codelock on Door if player have it in his inventory, when he placed a door, what i do:
No errors in consol, after placing door i see in chat: lock.code[5215215(i mean uid of this code)], but i dont see this code on door.Code:void OnEntityBuilt(Planner plan, GameObject go) { var player = plan.GetOwnerPlayer(); var door = go.ToBaseEntity(); if (door.PrefabName.StartsWith("assets/prefabs/building/door")) { if (player.inventory.containerMain.FindItemByItemID(-975723312).amount>0) { player.inventory.containerMain.Take(null, -975723312, 1); //take it from his inventory BaseEntity x = GameManager.server.CreateEntity("assets/prefabs/locks/keypad/lock.code.prefab"); // creating entity door.SetSlot(BaseEntity.Slot.Lock, x); // set this parent like child for door x.Spawn(); // spawn object SendReply(player, $"{door.GetSlot(BaseEntity.Slot.Lock)}"); //check, all is right? } } }
So, question, how to create objects/entities and set them on door's for example?
Creating codelock on a door?
Discussion in 'Rust Development' started by HOUGAN_Y, Jun 19, 2017.
-
Try it:
Code:var codeLock = GameManager.server.CreateEntity("assets/prefabs/locks/keypad/lock.code.prefab", new Vector3(), new Quaternion(), true); if (codeLock == null) return; codeLock.gameObject.Identity(); codeLock.SetParent(door, door.GetSlotAnchorName(BaseEntity.Slot.Lock)); codeLock.OnDeployed(door); codeLock.Spawn(); door.SetSlot(deployable.slot, codeLock);
Скорее всего проблема в том что дверь ещё не до конца инициализировалась. -
Yes, that helped.
But i want to undestand, what u did and what helped me, because our algorithms arent very difficult.
How it affected the work? (codeLock.gameObject.Identity()When i should use it?
How it affected the work? (codeLock.OnDeployed(door)When i should use it? I can't find info about this hook.
-------
Спасибо, действительно помог.
Но я хочу именно разобраться, что конкретно здесь повлияло на работу? Ибо методом научного тыка я всё таки заставил замок появляться, но он появлялся в нижнем углу и я не мог изменить его положение. Наши алгоритмы отличаются:
Вы объявляете: new Vector3(), new Quaternion(), true
Также вы используете codeLock.gameObject.Identity(); Когда и зачем мне следует её использовать?
И что за хук OnDepoyed(door)?
Спасибо заранее. -
I do not know, I just took the algorithm of the spawned object from the game source.
Я не знаю, просто взял алгоритм спавна прикрепляемых объекта из исходников игры. Пиши плагины в Microsoft Visual Studio и прикрепи к нему библиотеки раста, будет намного легче писать.
[DOUBLEPOST=1497905355][/DOUBLEPOST]http://i.imgur.com/1n4d5fc.png
П.С. Создание объекта точно тут не причём, скорее всего просто приоритет спавна и установка parent сыграла главную роль.