| 
 
 
	
		
		
			| Типы переменных |  |  |  | 
| Vitaminoz | Дата: Понедельник, 24.02.2014, 21:14:53 | Сообщение # 16 |  |   
|  |  | Сообщений: 141 Репутация: 1 [ +/- ]
 |  | Прошу прощения не совсем верно сформулировал. Запрос кидаю в глобальные функции. |  |  |  |  |  | 
| Valeriks | Дата: Пятница, 01.08.2014, 21:57:22 | Сообщение # 17 |  |   
|  |  | Сообщений: 100 Репутация: 3 [ +/- ]
 |  | Подскажите пожалуйста, если мы делаем 
 Код new bool:Player[MAXPLAYERS+1];то это для каждого игрока будут хранится значения true|false ?
 И вообще, можно использовать [MAXPLAYERS+1] для bool ?
 |  |  |  |  |  | 
| horr0r | Дата: Пятница, 01.08.2014, 22:06:49 | Сообщение # 18 |  |   
|  |  | Сообщений: 149 Репутация: 40 [ +/- ]
 |  | Valeriks, да. Можно. И это будет "как-бы" для каждого игрока.
 А без "как-бы", это будет для каждой ячейки массива.
 
 
 Сообщение отредактировал horr0r - Пятница, 01.08.2014, 22:07:45 |  |  |  |  |  | 
| Valeriks | Дата: Пятница, 01.08.2014, 22:08:31 | Сообщение # 19 |  |   
|  |  | Сообщений: 100 Репутация: 3 [ +/- ]
 |  | Цитата horr0r (  ) да. Можно.Благодарю.
 |  |  |  |  |  | 
| www22 | Дата: Вторник, 16.10.2018, 09:02:47 | Сообщение # 20 |  |   
|  |  | Сообщений: 84 Репутация: -1 [ +/- ]
 |  | Что то голову сломал , как сделать : вообщем у меня есть 2 целых числа, после деления 1 на 2 , конечно же может получится число с остатком . Но мне надо опять получить его целым . Вот как быть , что то никак не пойму .. Цитата  [float rnum,knum,dnum;knum=GetEventInt(event, "attacker");
 dnum=GetEventInt(event, "victim");
 rnum=RoundFloat(knum/dnum);
 snum=knum/dnum;
 PrintToChatAll("\x04RatioKillsDeaths = %f - %d",rnum,snum);
Да и вот такой вопрос - выделили красным - такие операции внутри функции вообще возможен в sourcemod(pawn).
 Или отдельно нужно делать ?
 P.s. это типа мини статистики фрагов/смертей за раунд/карту.
 Добавлено (16.10.2018, 09:15:01)---------------------------------------------
 да и еще вопрос с этими числами - Float , которые используют для чисел с плавающей точкой (небольших). К примеру в условии , какое число писать с точкой или можно и без . К примере мне надо сравнить число "3" с полученным результатом . Вот число 3 , как писать 3.0 или можно просто "3" ?
 
 
 Сообщение отредактировал www22 - Вторник, 16.10.2018, 09:09:52 |  |  |  |  |  | 
| _wS_ | Дата: Вторник, 16.10.2018, 09:45:01 | Сообщение # 21 |  |   | Цитата www22 (  )  Вот число 3 , как писать 3.0 или можно просто "3" ?При сравнении двух переменных у них должен быть одинаковый тип (не только сравнении, а если складываешь их и тд, любые операции).
 Так точно должно работать:
 
 
 Код new knum = GetEventInt(event, "attacker");new dnum = GetEventInt(event, "victim");
 new Float:rnum = dnum > 0 ? RoundFloat(float(knum) / float(dnum)) : 0.0;
 snum = dnum > 0 ? (knum / dnum) : 0;
 PrintToChatAll("\x04RatioKillsDeaths = %.1f - %d", rnum, snum);
Учитывай что на 0 делить нельзя, а то ошибка будет.
 |  |  |  |  |  | 
| www22 | Дата: Вторник, 16.10.2018, 10:42:44 | Сообщение # 22 |  |   
|  |  | Сообщений: 84 Репутация: -1 [ +/- ]
 |  | Цитата _wS_ (  )  При сравнении двух переменных у них должен быть одинаковый типТо есть и записывать их надо так же , по тому типу который объявлен ?!
 Я правильно понимаю ?!
 То есть если число float = 3.0 если int = 3 в условии . Просто если написать "3" для сравнения float , он это учтет ?!
 
 Цитата _wS_ (  )  Учитывай что на 0 делить нельзя, а то ошибка будет.это я знаю , вот только когда прибавлял 1 к числу когда целые были числа выводилась , useid=0 , почему ..
 |  |  |  |  |  | 
| _wS_ | Дата: Вторник, 16.10.2018, 11:01:40 | Сообщение # 23 |  |   | Тебе тяжело самому всё это проверить?Я увидел что можно смешивать переменные разных типов, получается можно, но во избежание ошибок я всегда приравниваю типы.
 
 
 Код public OnPluginStart(){
 new x = 1;
 new Float:y = 1.0;
 PrintToServer("%d == %f (%s)", x, y, x == y ? "yes" : "no");
 
 y = 1.01;
 PrintToServer("%d == %f (%s)", x, y, x == y ? "yes" : "no");
 
 x = 5;
 y = 2.5;
 PrintToServer("%d / %f = %f", x, y, x / y);
 PrintToServer("%f / %f = %f", float(x), y, float(x) / y);
 }
 
 Цитата  ] sm plugins reload b1 == 1.000000 (yes)
 1 == 1.009999 (no)
 5 / 2.500000 = 2.000000
 5.000000 / 2.500000 = 2.000000
 |  |  |  |  |  | 
| www22 | Дата: Вторник, 16.10.2018, 11:34:26 | Сообщение # 24 |  |   
|  |  | Сообщений: 84 Репутация: -1 [ +/- ]
 |  | _wS_, да мне еще сложно что то написать самому .. вон и так даже с этими переменными тут попал ..А почему спросил , я думал ты знаешь , ты же уже давно в скриптинге , вдруг сам сталкивался .. Вот и спросил..
 Спасибо !!!
 
 
 
 Сообщение отредактировал www22 - Вторник, 16.10.2018, 11:51:56 |  |  |  |  |  | 
| _wS_ | Дата: Вторник, 16.10.2018, 12:51:26 | Сообщение # 25 |  |   |  |  |  |  |  |  | 
| www22 | Дата: Вторник, 16.10.2018, 17:37:31 | Сообщение # 26 |  |   
|  |  | Сообщений: 84 Репутация: -1 [ +/- ]
 |  | _wS_, блин вот я замарочился с этим Float , можно же было проще сделать , через целое число, типа такого И потом уже сравнивать - стареем похоже уже :)))Цитата _wS_ (  )  new dnum = GetEventInt(event, "victim") *3(коэфф); 
 
 Сообщение отредактировал www22 - Вторник, 16.10.2018, 17:38:28 |  |  |  |  |  | 
| Shouldercannon | Дата: Среда, 21.02.2024, 10:40:41 | Сообщение # 27 |  |   
|  |  | Сообщений: 21 Репутация: 0 [ +/- ]
 |  | Я создал через new Handle:dir, затем я его закрыл и далее по коду начал снова использовать этот dir. Мой способ работы с Handle в данном коде верен? Ошибок нет, но чувствую, что что-то не так.
 Код public OnPluginStart(){
 new Handle:dir = OpenDirectory("sound/1/");
 if (dir != INVALID_HANDLE)
 {
 {
 // Something
 }
 CloseHandle(dir);
 }
 Handle:dir = OpenDirectory("sound/2/");
 if (dir != INVALID_HANDLE)
 {
 {
 // Something
 }
 CloseHandle(dir);
 }
 Handle:dir = OpenDirectory("sound/3/");
 if (dir != INVALID_HANDLE)
 {
 {
 // Something
 }
 CloseHandle(dir);
 }
 }
 
 
 Сообщение отредактировал Shouldercannon - Среда, 21.02.2024, 10:43:51 |  |  |  |  |  | 
| _wS_ | Дата: Среда, 21.02.2024, 11:09:19 | Сообщение # 28 |  |   | Всё правильно, только нет смысла писать Handle:dir =, можно просто dir =. Если бы dir была глобальной переменной и где-то ещё использовалась, то скорее всего, после последнего CloseHandle, нужно было бы ещё добавить dir = null или dir = INVALID_HANDLE. И вместо if (dir != INVALID_HANDLE) и if (dir != null), можно проще: if (dir).
 
 Цитата Shouldercannon (  )  Я создал через new Handle:dirЗдесь new и нужен, т.к. объявили переменную и сразу присвоили ей значение OpenDirectory.
 decl советуют использовать только со строками.
 Постараюсь обновить уроки под новый синтаксис, т.к. не стоит учиться писать на старом, там и нет забот с decl.
 
 
 Код // Ещё вместоdir = OpenDirectory("sound/3/")
 if (dir)
 
 // Часто удобнее
 if ((dir = OpenDirectory("sound/3/")))
 И все эти однообразные OpenDirectory можно вынести в одну функцию.
 |  |  |  |  |  | 
| Shouldercannon | Дата: Пятница, 23.02.2024, 15:35:13 | Сообщение # 29 |  |   
|  |  | Сообщений: 21 Репутация: 0 [ +/- ]
 |  | Допустимо ли указывать переменные в одну строку? Компилятор не ругается.
 Код char name[MAX_STR_LEN], place[MAX_STR_LEN], file[MAX_PATH_LENGTH];int a, b, c;
 new UserMsg:g_umRadioText, UserMsg:g_umSendAudio;
 ArrayList g_Join, g_Connect;
Только не прокатывает с
 
 Код new Handle:cvarJoin = INVALID_HANDLE, cvarConnect = INVALID_HANDLE; 
 
 Сообщение отредактировал Shouldercannon - Пятница, 23.02.2024, 15:36:20 |  |  |  |  |  | 
| _wS_ | Дата: Пятница, 23.02.2024, 16:08:44 | Сообщение # 30 |  |   | Цитата Shouldercannon (  )  Допустимо ли указывать переменные в одну строку?Да, но все они должны быть того же типа.
 
 
 Цитата Shouldercannon (  )  Только не прокатывает сnew Handle:cvarJoin = INVALID_HANDLE, cvarConnect = INVALID_HANDLE;
И это работает.
 
 Код Handle a = null, b = null; // null такое же, но короче/удобнее.
 В соглашениях по написанию кода рекомендуют объявлять переменные каждую с новой строки.
 
 Синтаксис лучше не смешивать, а писать всё на новом. Это поможет:
 
 Код #pragma newdecls required |  |  |  |  |  
 |