Типы переменных
| |
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 b 1 == 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
|
|
| |
|