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
Plut

Удаление лута в определенном радиусе в нескольких точках.

Добрый день, ув. форумчане. 

Наваял скрипт, который по определенному рандому и определенным координатам наваливает сундук так же с определенным лутом по заранее прописанному рандому.

Вписал все в Инит, запустил и о чудо! Он пашет! Мой первый серьезный скрипт

Собственно вопрос в чем, так как скрипт прописан в Инит,  то сундук записывается в БД и не удаляется после рестарта, а мне жизненно необходимы несколько строчек кода, которые перед исполнением скрипта будут очищать те самые заранее определенные точки.   

 

Спасибо!  

Share this post


Link to post
Share on other sites

9 answers to this question

Recommended Posts

  • 0
2 часа назад, Plut сказал:

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

учитесь искать напрямую в коде игры, родной scripts.pbo как раз для таких целей у вас имеется под рукой всегда.

void DeleteOldObjects()
{
	private array<string> Massive_objects_for_search = {"","",""};
	private vector position = "";
	private float radius = 10.0;
	private array<Object> ScannedObjects = ScanInMapObjectsAtPositionInRadius(position, radius, Massive_objects_for_search);
	if(ScannedObjects)
	{
		if(ScannedObjects.Count() > 0)
		{
			foreach(private Object obj:ScannedObjects)
			{
				WriteDebugLog("[Clean] Remove the old object '" + obj.GetType() + "' in position '" + obj.GetPosition().ToString() +  "'!");
				GetGame().ObjectDelete(obj);
			}
		}
	}
}	
private array<Object> ScanInMapObjectsAtPositionInRadius(vector pos, float radius, array<string> Massive_objects_for_search)
{
	private array<Object> nearest_objects = new array<Object>;
	private array<Object> Massive_searched_objects = new array<Object>;		
	GetGame().GetObjectsAtPosition(pos, radius, nearest_objects, NULL); 
	Massive_searched_objects.Clear();
	for ( private int i = 0; i < nearest_objects.Count(); i++ )
	{
		private Object object = nearest_objects.Get(i);
		if ( Massive_objects_for_search.Find(object.GetType()) >= 0 )
		{
			Massive_searched_objects.Insert(object);
		}
	}
	nearest_objects.Clear();
	return Massive_searched_objects;
}

вот вам готовое. Надеюсь какую функцию вызвать и как применять догадаетесь?

Share this post


Link to post
Share on other sites







  • 0

@Plut
В types.xml пропиши свой сундук и измени соответствующие строчки на эти значения, он будет после рестарта пропадать, а если нужно удалять ещё и лут рядом, то тут уже надо позапариваться))
<nominal>0</nominal>
 <lifetime>1</lifetime>
 <restock>0</restock>
 <min>0</min>

Edited by NeonMurdered (see edit history)

Share this post


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

@Plut
В types.xml пропиши свой сундук и измени соответствующие строчки на эти значения, он будет после рестарта пропадать, а если нужно удалять ещё и лут рядом, то тут уже надо позапариваться))
<nominal>0</nominal>
 <lifetime>1</lifetime>
 <restock>0</restock>
 <min>0</min>

Думал над этим, но это обычный итем SeaChest у меня, так что не совсем подходит, т к у игроков то же покошу. 

Ну если ничего путного не придумаю(т), то да. Придётся создавать свой модовский сундук и прописывать его в тайпс. 

Share this post


Link to post
Share on other sites
  • 0

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

Share this post


Link to post
Share on other sites
  • 0
32 минуты назад, 123new сказал:

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

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

Share this post


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

учитесь искать напрямую в коде игры, родной scripts.pbo как раз для таких целей у вас имеется под рукой всегда.

void DeleteOldObjects() { private array<string> Massive_objects_for_search = {"","",""}; private vector position = ""; private float radius = 10.0; private array<Object> ScannedObjects = ScanInMapObjectsAtPositionInRadius(position, radius, Massive_objects_for_search); if(ScannedObjects) { if(ScannedObjects.Count() > 0) { foreach(private Object obj:ScannedObjects) { WriteDebugLog("[Clean] Remove the old object '" + obj.GetType() + "' in position '" + obj.GetPosition().ToString() + "'!"); GetGame().ObjectDelete(obj); } } } } private array<Object> ScanInMapObjectsAtPositionInRadius(vector pos, float radius, array<string> Massive_objects_for_search) { private array<Object> nearest_objects = new array<Object>; private array<Object> Massive_searched_objects = new array<Object>; GetGame().GetObjectsAtPosition(pos, radius, nearest_objects, NULL); Massive_searched_objects.Clear(); for ( private int i = 0; i < nearest_objects.Count(); i++ ) { private Object object = nearest_objects.Get(i); if ( Massive_objects_for_search.Find(object.GetType()) >= 0 ) { Massive_searched_objects.Insert(object); } } nearest_objects.Clear(); return Massive_searched_objects; }


void DeleteOldObjects()
{
	private array<string> Massive_objects_for_search = {"","",""};
	private vector position = "";
	private float radius = 10.0;
	private array<Object> ScannedObjects = ScanInMapObjectsAtPositionInRadius(position, radius, Massive_objects_for_search);
	if(ScannedObjects)
	{
		if(ScannedObjects.Count() > 0)
		{
			foreach(private Object obj:ScannedObjects)
			{
				WriteDebugLog("[Clean] Remove the old object '" + obj.GetType() + "' in position '" + obj.GetPosition().ToString() +  "'!");
				GetGame().ObjectDelete(obj);
			}
		}
	}
}	
private array<Object> ScanInMapObjectsAtPositionInRadius(vector pos, float radius, array<string> Massive_objects_for_search)
{
	private array<Object> nearest_objects = new array<Object>;
	private array<Object> Massive_searched_objects = new array<Object>;		
	GetGame().GetObjectsAtPosition(pos, radius, nearest_objects, NULL); 
	Massive_searched_objects.Clear();
	for ( private int i = 0; i < nearest_objects.Count(); i++ )
	{
		private Object object = nearest_objects.Get(i);
		if ( Massive_objects_for_search.Find(object.GetType()) >= 0 )
		{
			Massive_searched_objects.Insert(object);
		}
	}
	nearest_objects.Clear();
	return Massive_searched_objects;
}

вот вам готовое. Надеюсь какую функцию вызвать и как применять догадаетесь?

"учитесь искать напрямую в коде игры" -  про меня можно просто - учись! Ибо в скриптах не шарю, но инженер по профессии и аналитик в душе . Разбираюсь со временем. 

Как функцию  и применить - плавали, знаем... 

А вот как массив position обработать из определенного списка, это тугодум пока что, если не сложно,  то буду рад подсказке, если сложно, то спасибо и на этом. 

Share this post


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

"учитесь искать напрямую в коде игры" -  про меня можно просто - учись! Ибо в скриптах не шарю, но инженер по профессии и аналитик в душе . Разбираюсь со временем. 

Как функцию  и применить - плавали, знаем... 

А вот как массив position обработать из определенного списка, это тугодум пока что, если не сложно,  то буду рад подсказке, если сложно, то спасибо и на этом. 

private array<vector> positions = {"","",""};
foreach(private vector position:positions)
{
	/// тут то что надо с переменной position типа vector
}

 

Share this post


Link to post
Share on other sites
  • 0
08.06.2021 в 23:23, 123new сказал:

private array<vector> positions = {"","",""}; foreach(private vector position:positions) { /// тут то что надо с переменной position типа vector }


private array<vector> positions = {"","",""};
foreach(private vector position:positions)
{
	/// тут то что надо с переменной position типа vector
}

 

Не смог все же я грамотно использовать private array<vector> positions, не победил ошибку "Cannot convert 'array<vector>' to 'float' for argument '0' to method 'ScanInMapObjectsAtPositionInRadius'".  Но все равно спасибо за ответ.  Решил проблему отдельным скриптом за донат.  

Share this post


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

Не смог все же я грамотно использовать private array<vector> positions, не победил ошибку "Cannot convert 'array<vector>' to 'float' for argument '0' to method 'ScanInMapObjectsAtPositionInRadius'".  Но все равно спасибо за ответ.  Решил проблему отдельным скриптом за донат.  

Спасибо за ответ, конечно.

Ну а для остальных читающих тему, можно сказать нравоучение, или урок на будущее: в теме явный пример того, что стоит задуматься над изучением языка игры когда оно вам лично нужно...  Хороший повод можно сказать.Учите 'матчасть', учите язык и читайте код. Как только начнете понимать что есть функция, что есть параметры функции, что есть тип переменной, что есть условие, и что как выглядит, будете уже на 50% понимать код, данный в данной теме написан, и уже сможете объединить правильно эти 2 написанных блока кода. И делать это за вас бесплатно никто не будет, так как это вам в первую очередь надо, не нам. Ну а коль не понимаете, готовьтесь платить. Причем явно много, потому как каждую хотелку будет делать кто-то за вас по той цене, которую он сочтет приемлемой для себя (время же личное тратится на это). Примеры даны в теме, информации на обучение выше крыши, начиная от гайдов по с++ или c# например и заканчивая родными scripts для понимания структуры игры. А вот что вам ближе выберете сами.

Многие, кто прочитал, уверен на 100% скажут 'чел, ты че токсичишь, помоги товарищу, он че, много просит? зачем эти нравоучения'. Объясняю, это щас вам так кажется, от незнания. Поверхностно сомтрите. А вот если совету последуете, потом еще и сами спасибо скажете за него. Знаю, есть люди на форуме, которые этому совету уже следовали, и уверен, точно не ругают меня за него 😉

 

Edited by 123new (see edit history)

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.