Berserker 
 
 
		
		
		
			
			
 
 
			
 
 
			
Posts: 16788 
	
		
	 | 
	
		
 | 
	| 04.09.2020 02:24 | 
	
		
	 | 
	
		
		Algor 
 
 
		
		
		
			
			
 
 
			
 
 
			
Posts: 3883 
	
		
	 | 
	
		
			
			 
			
				3.0.4:
Синтакис освобождения, типа !#VA(-myArts); вызывает ошибку:
  
1000 era - consts.erm:
!#DC(PRIM_SKILL_FIRST) = 0; 
!#DC(SKILL_ATTACK)     = 0;
 !#DC(SKILL_DEFENSE)    = 0; 
!#DC(SKILL_POWER)      = 0; 
!#DC(SKILL_KNOWLEDGE)  = 0; 
!#DC(PRIM_SKILL_LAST)  = 3;
 1000 era - stdlib.erm:
Не мешало бы добавить (week), (month) и переименовать (isAi) в (isAI)
 
Точно проверить не могу (см п.1), но сильно подозреваю, что в общем случае пример из changelog'а не корректен, т.к номера могут выделяться не последовательно: 
			 
			
			
  
			
		 |  
	 
 | 
	| 05.09.2020 22:32 | 
	
		
	 | 
	
		
		Berserker 
 
 
		
		
		
			
			
 
 
			
 
 
			
Posts: 16788 
	
		
	 | 
	
		
			
			 
			
				Algor, спасибо, исправляю.
 
Я в именовании придерживаюсь соглашения о только первой заглавной в аббревиатурах. То есть ToHtml вместо ToHTML и GetId вместо GetID. Поскольку много капса сложно печатать.
 Quote:Не мешало бы добавить (week), (month) 
И monthWeek (0..3). Тут будет удобнее набор глобальных переменных. Их и проверять проще прямо в условии триггера.
 
Предлагаю:
 
i^timerDay^ 1..+inf 
i^timerWeekDay^ 1..7 
i^timerMonthDay^ 1..28 
i^timerWeek^ 1..+inf 
i^timerMonthWeek^ 1..4 
i^timerMonth^ 1..+inf 
i^timerOnce^ 0..1 
i^timerOwner^ 0..7 
i^timerIsAi^ 0..1 
i^timerIsHuman^ 0..1
 Quote:Точно проверить не могу (см п.1), но сильно подозреваю, что в общем случае пример из changelog'а не корректен, т.к номера могут выделяться не последовательно: 
Я зарелизю мод сегодня, посмотришь. Индексы для массивов всегда последовательные.
			  
			
			
  
Скачать Герои 3 Эра и всё, что с ней связано / ERA 2.46f для старых модов 
Поддержать проект 
			
		 |  
	 
 | 
	| 05.09.2020 22:52 | 
	
		
	 | 
	
		
		Algor 
 
 
		
		
		
			
			
 
 
			
 
 
			
Posts: 3883 
	
		
	 | 
	
		
			
			 
			
				 (05.09.2020 22:52)Berserker Wrote:  Я зарелизю мод сегодня, посмотришь. Индексы для массивов всегда последовательные. 
Да, ругается, что не может выделить, если нет нужного  последовательного куска. С одной стороны это хорошо, можно использовать такое свойство непрерывности. С другой - могут появиться проблемы с фрагментацией. 
Нужно ли что-то менять? Наверное, нет. Просто учитывать, что большой массив из локальных переменных не всегда можно выкусить и использовать временные SN:M-слоты с последующим освобождением.
			  
			
			
  
			
		 |  
	 
 | 
	| 06.09.2020 01:57 | 
	
		
	 | 
	
		
		Algor 
 
 
		
		
		
			
			
 
 
			
 
 
			
Posts: 3883 
	
		
	 | 
	
		
			
			 
			
				 (06.09.2020 02:04)Berserker Wrote:  Algor, для этих целей в SN:M добавилось значение 4-го параметра в виде (SN_M_TRIGGER_LOCAL). 
Угу, видел в описании. Удобно.
  (06.09.2020 02:04)Berserker Wrote:  По фрагментации всё верно. Можно через !#VA в начале функции объявить массивы, которые потом освобождать. 
Если в своей функции, то зачем освобождать, если при выходе они и так обнулятся? 
А если в общем триггере, это не поможет, т.к. хрен знает сколько таких переменных уже занято и не освобождено сторонними скриптами. Или я что-то не так понимаю? На примере сферического кода в вакууме:
 
UPD: туплю (сонный уже), написал код, а запустить и посмотреть не судьба. 
Будет 1. 
Но вопрос не в том, а в том, что объявление (myVar:y) затерло фактически использовавшуюся y1, т.е.
 
С этим могут быть проблемы. Наверное. Подумаю на свежую голову.
			  
			
			
  
			
		 |  
	 
 | 
	| 06.09.2020 02:14 | 
	
		
	 | 
	
		
		daemon_n 
 
 
		
		
		
			
			
 
 
			
 
 
			
Posts: 4366 
	
		
	 | 
	
		
 | 
	| 06.09.2020 02:17 | 
	
		
	 | 
	
		
		Berserker 
 
 
		
		
		
			
			
 
 
			
 
 
			
Posts: 16788 
	
		
	 | 
	
		
 | 
	| 06.09.2020 02:22 | 
	
		
	 | 
	
		
		Algor 
 
 
		
		
		
			
			
 
 
			
 
 
			
Posts: 3883 
	
		
	 | 
	
		
			
			 
			
				 (06.09.2020 02:22)Berserker Wrote:  Собственно, всё верно. Каждый обработчик будет насиловать y1..y100 по-своему. 
Т.е., фактически, можно вообще никогда не использовать синтаксис освобождения, кроме отдельных способов особо циничного извращения (это я про попытки использования многих больших  временных массивов без SN:M)
 daemon_n, взаимно, но я пока еще не надолго.
			  
			
			
  
			
		 |  
	 
 | 
	| 06.09.2020 02:30 | 
	
		
	 | 
	
		
		Bes 
 
 
		
		
		
			
			
			
 
 
			
Posts: 5453 
	
		
	 | 
	
		
			
			 
			
				 (06.09.2020 02:14)Algor Wrote:  Но вопрос не в том, а в том, что объявление (myVar:y) затерло фактически использовавшуюся y1, т.е. 
 
 
С этим могут быть проблемы. Наверное. Подумаю на свежую голову. 
Berserker, а вот да, вопрос почему !!VR(myVar:y):S1; возьмёт y1, а не y2. ERM2 разве не смотрит, есть ли в использовании y1 до присвоения ей метки myVar ???  
			 
			
			
			
		 |  
	 
 | 
	| 06.09.2020 02:34 | 
	
		
	 | 
	
		
		Algor 
 
 
		
		
		
			
			
 
 
			
 
 
			
Posts: 3883 
	
		
	 | 
	
		
			
			 
			
				 (06.09.2020 02:41)Berserker Wrote:  Algor, да, но вдруг тебе сперва нужен массив на 50 ячеек, потом высчитать среднее по ним, потом сгенерировать другие 50 чисел на основе среднего + рандома. Вот тут и придётся 
Это как раз тот случай, который я выше описал как "особо циничное извращение".
  (06.09.2020 02:41)Berserker Wrote:  Bes, локальные переменные локальны для одного триггера до следующего триггера в тексте. Реальный код точно также переиспользует y1. 
Берс, даже внутри одного триггера:
 
Т.е. использовать смешанный стиль вообще раскованно и, по-хорошему, недопустимо.
 
Это  НЕ плохо. 
 
Если  взялся за оружие написал ZVSE 2, будь  готов получить пулю добр использовать только новые правила. Главное, чтобы при этом не возникало коллизий с используемым в сборке старым кодом. Навскидку, да, не должно. На практике - посмотрим.
			  
			
			
  
			
		 |  
	 
 | 
	| 06.09.2020 12:18 | 
	
		
	 | 
	
		
		Berserker 
 
 
		
		
		
			
			
 
 
			
 
 
			
Posts: 16788 
	
		
	 | 
	
		
 | 
	| 06.09.2020 16:11 | 
	
		
	 |