A friend of mine and I are actually trying some things with maniascript, and we're actually trying to deal with pickup objects.
We're actually facing a problem, we would like the object to drop at player position when the player carrying the item is killed.
We tried to use DetachItem but the item just desapear. Still it's well detached cause we managed to create a timer on DetachItem to do it respawn at the initial anchor after a while.
We have no idea whats we're doing wrong here... Can you please help us ?
Here some parts of our MS:
***StartMap***
Code: Select all
declare Integer Intel1StartDate = 0;
declare Integer IntelDrop = 0;
/* Create Pickables Items*/
ItemList_Begin();
declare ArmorId = ItemList_Add("SMCommon\\Pickups\\Armor.Item.gbx");
ItemList_End();
declare ItemArmor = CreateItem(ArmorId);
log("Debut Ancre");
foreach (ItemAnchor in ItemAnchors)
{
log(ItemAnchor.ItemName);
switch (ItemAnchor.ItemName)
{
case "SMCommon\\Pickups\\Armor.Item.gbx":
{
log("attach");
AttachItemToAnchor(ItemArmor, ItemAnchor);
}
}
}
Code: Select all
if (ItemArmor.IsDetached)
{
if ( (Now - IntelDrop) >= 16000)
{
IntelDrop = Now;
foreach (ItemAnchor in ItemAnchors)
{
switch (ItemAnchor.ItemName)
{
case "SMCommon\\Pickups\\Armor.Item.gbx":
{
log("attach");
AttachItemToAnchor(ItemArmor, ItemAnchor);
}
}
}
}
}
/* Manage what happen when picked object */
if (Event.Type == CSmModeEvent::EType::OnPlayerTouchesItem)
{
if (Event.Player != Null && Event.Player.SpawnStatus == CSmPlayer::ESpawnStatus::Spawned)
{
AttachItemToPlayer(Event.Item, Event.Player);
Intel1StartDate = Now;
log("at : "^Intel1StartDate);
Event.Player.ForceColor = SpyColor;
Event.Player.AmmoGain = 4.0;
Event.Player.ArmorMax = 400;
Event.Player.Armor = 400;
SetPlayerWeapon(Event.Player, CSmMode::EWeapon::Nucleus, False);
SetPlayerAmmoMax(Event.Player, CSmMode::EWeapon::Nucleus, 2);
Event.Player.StaminaGain = 1.0;
Score::AddPoints(Event.Player, 20);
PassOn(Event);
}
}
// On armor empty
if (Event.Type == CSmModeEvent::EType::OnArmorEmpty)
{
IntelDrop = DetachIntel(ItemArmor, Event.Victim);
if (Event.Shooter == Event.Victim || Event.Shooter == Null)
{
Score::RemovePoints(Event.Victim, 1);
}
XmlRpc::OnArmorEmpty(Event);
PassOn(Event);
}
Code: Select all
Integer DetachIntel (CSmItem Intel, CSmPlayer Player)
{
if (Player.ForceColor == SpyColor)
{
log("------------");
log("Item position before detaching it: "^Intel.Position);
log("Player position before detaching item: "^Player.Position);
log("------------");
DetachItem(Intel);
log("Item position after detaching it: "^Intel.Position);
log("Player position after detaching item: "^Player.Position);
log("------------");
return Now;
}
return 0;
}