Berserker 
 
 
		
		
		
			
			
 
 
			
 
 
			
Posts: 16789 
	
		
	 | 
	
		
 | 
	| 12.04.2021 23:31 | 
	
		
	 | 
	
		
		Archer30 
 
 
		
		
		
			
			
 
 
			
 
 
			
Posts: 1192 
	
		
	 | 
	
		
 | 
	| 13.04.2021 00:07 | 
	
		
	 | 
	
		
		Berserker 
 
 
		
		
		
			
			
 
 
			
 
 
			
Posts: 16789 
	
		
	 | 
	
		
 | 
	| 13.04.2021 00:39 | 
	
		
	 | 
	
		
		daemon_n 
 
 
		
		
		
			
			
 
 
			
 
 
			
Posts: 4366 
	
		
	 | 
	
		
 | 
	| 13.04.2021 04:50 | 
	
		
	 | 
	
		
		Algor 
 
 
		
		
		
			
			
 
 
			
 
 
			
Posts: 3883 
	
		
	 | 
	
		
			
			 
			
				 (13.04.2021 05:04)Berserker Wrote:  [+] Добавлена новая команда ERM VR:B. Она преобразует любое число в логическое значение (1 или 0). Любое ненулевое значение становится 1. 
 
Пример: 
 
 
Эм, Берс, а можно какой-нить другой пример, оправдывающий существование VR:B? 
А то (hasGold)=(TRUE) вместо (goldAmount)>0 звучит неубедительно. И к тому же еще и возможные отрицательные значения золота не учитывает.
			  
			
			
  
			
		 |  
	 
 | 
	| 14.04.2021 22:43 | 
	
		
	 | 
	
		
		Berserker 
 
 
		
		
		
			
			
 
 
			
 
 
			
Posts: 16789 
	
		
	 | 
	
		
			
			 
			
				Скажем так, в коде на разных языках программирования приходится много раз конвертировать числовое значение в булево. Мне на ЕРМ тоже приходилось. Далее это булево значение использовать в проверках. Смысл: есть хоть какие-то флаги установлены или «не пустое», «не 0» или «не ошибка». 
На ЕРМ без оператора приведения типов это делается так:
 
И короче никак. Если разрешены отрицательные значения, то hasSomething писать нельзя,  конечно же.
 
Установка булевой переменной в (TRUE), если флаг присутствует. Сами логические переменные упрощают написание и понимание кода. Без них смысл проверок необходимо комментировать. В хорошем коде не нужно комментировать каждую строку. Логическое значение можно передать функциям, ожидающих только TRUE/FALSE в качестве определённого аргумента.
 
=>
 
			 
			
			
  
Скачать Герои 3 Эра и всё, что с ней связано / ERA 2.46f для старых модов 
Поддержать проект 
			
		 |  
	 
 | 
	| 15.04.2021 03:01 | 
	
		
	 | 
	
		
		Algor 
 
 
		
		
		
			
			
 
 
			
 
 
			
Posts: 3883 
	
		
	 | 
	
		
			
			 
			
				Berserker, я, наверняка, занудствую, но это все равно попахивает натягиванием известной птицы на глобус. 
Имхо, 
!!VR(undeadPresent:y):S(monFlags) &(MON_FLAG_UNDEAD) B; 
от  
!!VR(undeadPresent:y):S(monFlags) &(MON_FLAG_UNDEAD); 
ничем принципиально не отличается. 
Один хрен, результат складывается в int-переменную, которая и далее обрабатывается также как int. И читабильности кода это ни убавляет, ни добавляет - константы TRUE и FALSE можно интерпретировать и как 1/0 и как !0/0 - без типа BOOLEAN всё это только привычки/установки в голове кодера. А при попытке загнать результат во флаг, понадобится доп. строка кода. 
 
Лучше бы запилил как во многих языках (и как для флагов в ERM) условия без знаков сравнения, т.е. 
 
!!IF&(undeadPresent):M^Кажется, тут кто-то не совсем живой...^; 
вместо  
!!IF&(undeadPresent)=(TRUE):M^Кажется, тут кто-то не совсем живой...^; 
или 
!!IF&(undeadPresent)>0:M^Кажется, тут кто-то не совсем живой...^; 
 
Хотя это всё тоже сахар, количество которого в последнее время в ERM+Framework и так стремится к (JOPA_SLIPNETSA).
			 
			
			
  
			
		 |  
	 
 | 
	| 15.04.2021 14:05 | 
	
		
	 | 
	
		
		Berserker 
 
 
		
		
		
			
			
 
 
			
 
 
			
Posts: 16789 
	
		
	 | 
	
		
			
			 
			
				Algor, условия без сравнения уже есть. Трактуются как проверка f-флага. Кривая штука.
 
Не выведет ничего. Условие в ветке OR вообще не проверяется. 
Но за идею ещё раз спасибо, посмотрю.
 
Не соглашусь. Если не привести значение к boolean, то везде, где ожидается boolean, и проверка не вида <>(FALSE), а =(TRUE), всплывут баги. 
Более того, я ещё и boolean как 1 в математических выражениях использую. Зная, что это 0/1. Умножаю или вычитаю. Не должно логическое значение хранить 31733 ни в ЕРМ, ни в любом другом ЯП.
 
C++, PHP (bool) 
Javascript Boolean(value) 
Pascal: boolean(value) 
ERM 2: VR:B
			  
			
			
  
Скачать Герои 3 Эра и всё, что с ней связано / ERA 2.46f для старых модов 
Поддержать проект 
			
		 |  
	 
 | 
	| 15.04.2021 17:57 | 
	
		
	 | 
	
		
		Berserker 
 
 
		
		
		
			
			
 
 
			
 
 
			
Posts: 16789 
	
		
	 | 
	
		
 | 
	| 15.04.2021 18:04 | 
	
		
	 | 
	
		
		Berserker 
 
 
		
		
		
			
			
 
 
			
 
 
			
Posts: 16789 
	
		
	 | 
	
		
 | 
	| 16.04.2021 05:42 | 
	
		
	 | 
	
		
		Archer30 
 
 
		
		
		
			
			
 
 
			
 
 
			
Posts: 1192 
	
		
	 | 
	
		
			
			 
			
				Hi  Berserker, is there an OnAfterBattleReplay event, or is it only from ERA changelog?
 Quote:[*] Fixed non-working "OnBeforeBattleReplay" and "OnAfterBattleReplay events". Newest "BattleReplay" plugin by igrik is required. 
If it's not valid, then the auto-complete of sublime needs to be updated.   
			 
			
			
  
Latest ERA mods and scripts in development -  My GitHub
			
				
(This post was last modified: 16.04.2021 17:28 by Archer30.)
 
			 
		 |  
	 
 | 
	| 16.04.2021 17:24 | 
	
		
	 | 
	
		
		Berserker 
 
 
		
		
		
			
			
 
 
			
 
 
			
Posts: 16789 
	
		
	 | 
	
		
 | 
	| 16.04.2021 17:39 | 
	
		
	 | 
	
		
		Algor 
 
 
		
		
		
			
			
 
 
			
 
 
			
Posts: 3883 
	
		
	 | 
	
		
			
			 
			
				 (16.04.2021 05:42)Berserker Wrote:  Algor, готово. Заодно стало возможным использовать любое число пробельных символов между аргументами и операторами. 
 
хм, надо бы мне реже появляться  и чаще нудеть
			 
			
			
  
			
		 |  
	 
 | 
	| 16.04.2021 22:37 | 
	
		
	 |