Перейти к публикации
Поиск в
  • Дополнительно...
Искать результаты, содержащие...
Искать результаты в...
  • Нужна помощь?

    Создайте тему в соответствующем разделе
    Не нужно писать всё в чат!
  • Загляните на торговую площадку

    Там вы можете купить
    всё что касается игровых серверов
  • Не хотите бан?

    Пожалуйста, ознакомьтесь с нашими правилами
    Не нарушайте порядок!
  • Продаёте или покупаете?

    Пользуйтесь услугами гаранта
    Мы сделаем вашу сделку безопасной
  • 0
FreddyCruger

Удаление предметов после выполнения действия

Почему не удаляются предметы с атачментов после выполнения действия? Подскажите кто знает
 

void DeleteRPRZMashPot()
    {
        MashPot RPRZMashPot = MashPot.Cast( FindAttachmentBySlotName( ATTACHMENT_SLOT_POT ) );
        RPRZMashPot.RPRZ_MashPotDestroy();
    }
    void DeleteRPRZFermentedMashPot()
    {
        FermentedMashPot RPRZFermentedMashPot = FermentedMashPot.Cast( FindAttachmentBySlotName( ATTACHMENT_SLOT_FPOT ) );
        RPRZFermentedMashPot.RPRZ_FermentedMashPotDestroy();
    }
    void DeleteRPRZkv5_mung()
    {
        kv5_mung RPRZkv5_mung = kv5_mung.Cast( FindAttachmentBySlotName( ATTACHMENT_SLOT_KV5MUNG ) );
        RPRZkv5_mung.RPRZ_kv5_mungDestroy();
    }
    void DeleteRPRZVodka()
    {
        Vodka RPRZVodka = Vodka.Cast( FindAttachmentBySlotName( ATTACHMENT_SLOT_VODKA ) );
        RPRZVodka.RPRZ_VodkaDestroy();
    }
    void MoonshineVarka()
    {
            Moonshine = GetGame().CreateObject("Samogon", this.GetPosition() +"0 0 0.7", false );
            DeleteRPRZMashPot();
            DeleteRPRZFermentedMashPot();
            DeleteRPRZVodka();
    }

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Рекомендованные сообщения

  • 0

И чем тут помогать то?

Что такое RPRZ_MashPotDestroy RPRZ_FermentedMashPotDestroy RPRZ_kv5_mungDestroy RPRZ_VodkaDestroy

Что за MashPot FermentedMashPot kv5_mung и т.п.

кароче тут тупо набор символов ни о  чем не говорящий

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
MagicByte MagicByte MagicByte
  • 0
9 минут назад, 123new сказал:

И чем тут помогать то?

Что такое RPRZ_MashPotDestroy RPRZ_FermentedMashPotDestroy RPRZ_kv5_mungDestroy RPRZ_VodkaDestroy

Что за MashPot FermentedMashPot kv5_mung и т.п.

кароче тут тупо набор символов ни о  чем не говорящий

Это части самогонного аппарата.....Наверное.:)))

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0
2 часа назад, 123new сказал:

И чем тут помогать то?

Что такое RPRZ_MashPotDestroy RPRZ_FermentedMashPotDestroy RPRZ_kv5_mungDestroy RPRZ_VodkaDestroy

Что за MashPot FermentedMashPot kv5_mung и т.п.

кароче тут тупо набор символов ни о  чем не говорящий

это часть скрипта с удалением передметов из слотов самогонного аппарата. Остальная часть скрипта работает нормально

 

Изменено пользователем FreddyCruger (история изменений)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0
27 минут назад, FreddyCruger сказал:

далением передметов из слотов самогонного аппарата

.....ни чихуа себе,я угадал!!!! Мдя, опыт не пропьёшь...

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0
1 час назад, FreddyCruger сказал:

это часть скрипта с удалением передметов из слотов самогонного аппарата. Остальная часть скрипта работает нормально

 

ну это понятно что часть, тока легче от этого в решении вопроса не станет ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0
class J_Moonstill : ItemBase
{ 	
	const string 				ATTACHMENT_SLOT_POT = "Material_MashPot";
	const string 				ATTACHMENT_SLOT_FPOT = "Material_FermentedMashPot";
	const string 				ATTACHMENT_SLOT_KV5MUNG = "Material_kv5_mung";
	const string 				ATTACHMENT_SLOT_VODKA = "Material_Vodka";
	static const string 		MOON_ATTACH_SOUND = "sparkplug_attach_SoundSet";
	static const string 		MOON_DETACH_SOUND = "sparkplug_detach_SoundSet";

	protected Object			Moonshine;


	ItemBase	m_MashPot; // Attacheditem
	ItemBase	m_FermentedMashPot; // Attached item
	ItemBase	m_kv5_mung; // Attached item
	ItemBase	m_Vodka; // Attached item
    
	void J_Moonstill()
    {   
		m_MashPot = NULL;
		m_FermentedMashPot = NULL;
		m_kv5_mung = NULL;
		m_Vodka = NULL;
		RegisterNetSyncVariableBool("m_IsSoundSynchRemote");
		RegisterNetSyncVariableBool("m_IsPlaceSound");
    }

	//COUNTS THE INGRED FOR BOTH CONTRUSTION AND DESTRUCTION
	int getQuantity( string slotName )
	{
		int slot_id;
        ItemBase ingredient;
		slot_id = InventorySlots.GetSlotIdFromString(slotName);
		ingredient = ItemBase.Cast( GetInventory().FindAttachment(slot_id) ); 
		return ingredient.GetQuantity();
	}
	
	void removeQuanity( int amount, string slotName )
	{
		int slot_id;
        ItemBase ingredient;
		slot_id = InventorySlots.GetSlotIdFromString(slotName);
		ingredient = ItemBase.Cast( GetInventory().FindAttachment(slot_id) ); 
		ingredient.SetQuantity(ingredient.GetQuantity() - amount);
	}
	


	override void EEItemAttached ( EntityAI item, string slot_name )
	{
		super.EEItemAttached ( item, slot_name );
		
		ItemBase item_IB = ItemBase.Cast( item );
		
		if ( item_IB.IsKindOf("MashPot") )
		{

			m_MashPot = item_IB;
			
			if ( !GetGame().IsServer()  ||  !GetGame().IsMultiplayer() )
			{
				SEffectManager.PlaySound(MOON_ATTACH_SOUND, GetPosition() );
			}
		}
		if ( item_IB.IsKindOf("FermentedMashPot") )
		{

			m_FermentedMashPot = item_IB;
			
			if ( !GetGame().IsServer()  ||  !GetGame().IsMultiplayer() )
			{
				SEffectManager.PlaySound(MOON_ATTACH_SOUND, GetPosition() );
			}
		}
		if ( item_IB.IsKindOf("kv5_mung") )
		{

			m_kv5_mung = item_IB;
			
			if ( !GetGame().IsServer()  ||  !GetGame().IsMultiplayer() )
			{
				SEffectManager.PlaySound(MOON_ATTACH_SOUND, GetPosition() );
			}
		}
		if ( item_IB.IsKindOf("Vodka") )
		{

			m_Vodka = item_IB;
			
			if ( !GetGame().IsServer()  ||  !GetGame().IsMultiplayer() )
			{
				SEffectManager.PlaySound(MOON_ATTACH_SOUND, GetPosition() );
			}
		}
	}
	override void EEItemDetached ( EntityAI item, string slot_name )
	{
		super.EEItemDetached ( item, slot_name );
		
		ItemBase item_IB = ItemBase.Cast( item );
		
		if ( item_IB.IsKindOf("MashPot") )
		{
			m_MashPot = NULL;
			if ( !GetGame().IsServer()  ||  !GetGame().IsMultiplayer() )
			{
				SEffectManager.PlaySound(MOON_DETACH_SOUND, GetPosition() );
			}
		}
		if ( item_IB.IsKindOf("FermentedMashPot") )
		{
			m_FermentedMashPot = NULL;
			if ( !GetGame().IsServer()  ||  !GetGame().IsMultiplayer() )
			{
				SEffectManager.PlaySound(MOON_DETACH_SOUND, GetPosition() );
			}
		}
		if ( item_IB.IsKindOf("kv5_mung") )
		{
			m_kv5_mung = NULL;

			if ( !GetGame().IsServer()  ||  !GetGame().IsMultiplayer() )
			{
				SEffectManager.PlaySound(MOON_DETACH_SOUND, GetPosition() );
			}
		}
		if ( item_IB.IsKindOf("Vodka") )
		{
			m_Vodka = NULL;
			if ( !GetGame().IsServer()  ||  !GetGame().IsMultiplayer() )
			{
				SEffectManager.PlaySound(MOON_DETACH_SOUND, GetPosition() );
			}
		}
	}	
	override bool CanPutInCargo( EntityAI parent )
    {
        if( !super.CanPutInCargo(parent) ) {return false;}        
        if ( GetNumberOfItems() == 0)
        {
            return true;
        }
        return true;
    }
    override bool CanPutIntoHands(EntityAI parent)
    {
        if( !super.CanPutIntoHands( parent ) )
        {
            return true;
        }
        if ( GetNumberOfItems() == 0 )
        {
            return true;
        }
        return true;
    }
	// Checks Textiles
	bool HasMashPot()
	{
		if ( m_MashPot )
		{
			if ( !m_MashPot.IsRuined() )
			{
				return true;
			}
		}
		
		return false;
	}	
	// Checks TemplateTop
	bool HasFermentedMashPot()
	{
		if ( m_FermentedMashPot )
		{
			if ( !m_FermentedMashPot.IsRuined() )
			{
				return true;
			}
		}
		
		return false;
	}	
	// Checks TemplateTrousers
	bool Haskv5_mung()
	{
		if ( m_kv5_mung )
		{
			if ( !m_kv5_mung.IsRuined() )
			{
				return true;
			}
		}
		
		return false;
	}	
	// Checks TemplateMask
	bool HasVodka()
	{
		if ( m_Vodka )
		{
			if ( !m_Vodka.IsRuined() )
			{
				return true;
			}
		}
		
		return false;
	}	
    void DeleteRPRZMashPot()
    {
        MashPot RPRZMashPot = MashPot.Cast( FindAttachmentBySlotName( ATTACHMENT_SLOT_POT ) );
        RPRZMashPot.RPRZ_MashPotDestroy();
    }
	void DeleteRPRZFermentedMashPot()
    {
        FermentedMashPot RPRZFermentedMashPot = FermentedMashPot.Cast( FindAttachmentBySlotName( ATTACHMENT_SLOT_FPOT ) );
        RPRZFermentedMashPot.RPRZ_FermentedMashPotDestroy();
    }
	/* void DeleteRPRZkv5_mung()
    {
        kv5_mung RPRZkv5_mung = kv5_mung.Cast( FindAttachmentBySlotName( ATTACHMENT_SLOT_KV5MUNG ) );
        RPRZkv5_mung.RPRZ_kv5_mungDestroy();
    } */
	void DeleteRPRZVodka()
    {
        Vodka RPRZVodka = Vodka.Cast( FindAttachmentBySlotName( ATTACHMENT_SLOT_VODKA ) );
        RPRZVodka.RPRZ_VodkaDestroy();
    }
	void MoonshineVarka()
	{
			Moonshine = GetGame().CreateObject("Moonshine", this.GetPosition() +"0 0 0.7", false );
			DeleteRPRZMashPot();
			DeleteRPRZFermentedMashPot();
			DeleteRPRZVodka();
	}

}

 

13 часов назад, 123new сказал:

ну это понятно что часть, тока легче от этого в решении вопроса не станет ?

а сейчас? скрипт писал на основе мода Virus, там все полностью идентично кроме ингредиентов и их количества, но при этом все составляющие удаляются. В моем же скрипте - почему то нет

Изменено пользователем FreddyCruger (история изменений)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

также ничего, так как что такое RPRZ_VodkaDestroy например остается только гадать.

Понятно что что-то связанное с удаление, но что и как оно удаляет это загадка века.

Тут тока один вариант - предоставлять вообще все, либо смотреть самому.

Getgame().DeleteObject(переменная);

насколько помню так удаляется предмет без каких-либо проблем, так что смотрите у себя где косяк.

Изменено пользователем 123new (история изменений)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0
1 час назад, 123new сказал:

что такое RPRZ_VodkaDestroy например

modded class Vodka extends ItemBase
{

    void Vodka() 
    {
    }
    
  
   
    void RPRZ_VodkaDestroy()
    {
        //delete object
        GetGame().ObjectDelete( this );
    }
}

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

замечательно. Теперь осталось понять что и при каких условиях у тебя запускается, так как например наличие функции MoonshineVarka запускающий набор из действий, включая функцию DeleteRPRZVodka, которая ищет аттачмент и запускает действие RPRZ_VodkaDestroy в его классе.

Грубо говоря надо смотреть точку входа действия, добавить принты после каждого запуска экшена или проверки и посмотреть какие из них перестают срабатывать. И уже смотреть.

Например,

 FindAttachmentBySlotName( ATTACHMENT_SLOT_VODKA )

может не найти объекта, но пороверки на это нету.

Также, не вижу логики запуска

GetGame().ObjectDelete( this );

из класса того же объекта я бы не рекоммендовал выполнять, как минимум в одном потоке вычислений.

Да и если вы строите код так, проще уж вместо DeleteRPRZVodka()  вызывать сразу

if(FindAttachmentBySlotName( ATTACHMENT_SLOT_VODKA ))
	{
		GetGame().ObjectDelete( FindAttachmentBySlotName( ATTACHMENT_SLOT_VODKA ) );
	}

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

4 ингредиента приаттачены, появляется надпись "сварить самогон", после нажатия на F появляется бутылка с самогоном, но так как предметы из слотов не удаляются, то это процесс можно повторять бесконечно. 

вот сам экшн
 

ref Timer                     RPRZ_MoonshineVarka;

class ActionMoonshineVarka: ActionInteractBase
{    
    vector position;
    
    void ActionMoonshineVarka()
    {
        
    }
    
    override string GetText()
    {
        return "Сварить самогон";
    }

    override bool ActionCondition( PlayerBase player, ActionTarget target, ItemBase item )
    {
        Object targetObject = target.GetObject();
        J_Moonstill JMoonstill = J_Moonstill.Cast( targetObject );
        if ( JMoonstill  &&  JMoonstill.HasMashPot()  &&  JMoonstill.HasFermentedMashPot()  &&  JMoonstill.Haskv5_mung() &&  JMoonstill.HasVodka() )
        {
                return true;
        }
        return false;
    }
    
    override void OnExecuteServer( ActionData action_data )
    {
        Object targetObject = action_data.m_Target.GetObject();
        vector targetObjectPos = targetObject.GetPosition();
        position = targetObjectPos;
        if ( targetObject )
        {
            EntityAI target_EAI = EntityAI.Cast( targetObject );
            
            if ( !RPRZ_MoonshineVarka )
            {
                RPRZ_MoonshineVarka =             new Timer( CALL_CATEGORY_SYSTEM );
            }
            
            if ( !RPRZ_MoonshineVarka.IsRunning() ) // Makes sure the timer is NOT running already
            {
                RPRZ_MoonshineVarka.Run(0.9, targetObject, "MoonshineVarka", NULL, false);
            }
        }
            
    }
};

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас

×
×
  • Создать...

Важная информация

Используя этот сайт, вы автоматически обязуетесь соблюдать наши Правила и Политика конфиденциальности.
Чтобы сделать этот веб-сайт лучше, мы разместили cookies на вашем устройстве. Вы можете изменить свои настройки cookies, в противном случае мы будем считать, что вы согласны с этим.

Поддержка