Jump to content
Search In
  • More options...
Find results that contain...
Find results in...
  • Need help?

    Create a topic in the appropriate section
    Don't write everything in the chat!
  • Take a look at the marketplace

    There you can buy
    everything related to game servers
  • Don't want a ban?

    Please read our rules
    Don't disturb the order!
  • Sell or buy?

    Use services of the guarantor
    We will make your deal safe
  • 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();
    }

 

Share this post


Link to post
Share on other sites

10 answers to this question

Recommended Posts

  • 0

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

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

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

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

Share this post


Link to post
Share on other sites



  • 0
9 минут назад, 123new сказал:

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

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

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

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

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

Share this post


Link to post
Share on other sites
  • 0
2 часа назад, 123new сказал:

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

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

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

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

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

 

Edited by FreddyCruger (see edit history)

Share this post


Link to post
Share on other sites
  • 0
27 минут назад, FreddyCruger сказал:

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

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

Share this post


Link to post
Share on other sites
  • 0
1 час назад, FreddyCruger сказал:

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

 

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

Share this post


Link to post
Share on other sites
  • 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, там все полностью идентично кроме ингредиентов и их количества, но при этом все составляющие удаляются. В моем же скрипте - почему то нет

Edited by FreddyCruger (see edit history)

Share this post


Link to post
Share on other sites
  • 0

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

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

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

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

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

Edited by 123new (see edit history)

Share this post


Link to post
Share on other sites
  • 0
1 час назад, 123new сказал:

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

modded class Vodka extends ItemBase
{

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

 

Share this post


Link to post
Share on other sites
  • 0

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

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

Например,

 FindAttachmentBySlotName( ATTACHMENT_SLOT_VODKA )

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

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

GetGame().ObjectDelete( this );

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

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

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

 

Share this post


Link to post
Share on other sites
  • 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);
            }
        }
            
    }
};

 

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site, you automaticly agree to our Guidelines and Privacy Policy.
We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.