Заказать игровой сервер Контакты (заказать плагин/исправить ошибки/другое) Поиск

[ вход ]
[ последние сообщения ]

  • Страница 2 из 2
  • «
  • 1
  • 2
Форум » SourceMod >> CS:Source >> CSGO » Уроки SourceMod (SourcePawn) Скриптинга » Типы переменных (float, char, Handle, bool, int)
Типы переменных
Vitaminoz Дата: Понедельник, 24.02.2014, 21:14:53 | Сообщение # 16
Сообщений: 142
Репутация: 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
Thanks
Цитата 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
Thanks
Тебе тяжело самому всё это проверить?
Я увидел что можно смешивать переменные разных типов, получается можно, но во избежание ошибок я всегда приравниваю типы.

Код
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
Thanks
klas
 
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
Thanks
Всё правильно, только нет смысла писать 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
Thanks
Цитата Shouldercannon ()
Допустимо ли указывать переменные в одну строку?

Да, но все они должны быть того же типа.

Цитата Shouldercannon ()
Только не прокатывает с
new Handle:cvarJoin = INVALID_HANDLE, cvarConnect = INVALID_HANDLE;

И это работает.
Код
Handle a = null, b = null; // null такое же, но короче/удобнее.


В соглашениях по написанию кода рекомендуют объявлять переменные каждую с новой строки.

Синтаксис лучше не смешивать, а писать всё на новом. Это поможет:
Код
#pragma newdecls required
 
Форум » SourceMod >> CS:Source >> CSGO » Уроки SourceMod (SourcePawn) Скриптинга » Типы переменных (float, char, Handle, bool, int)
  • Страница 2 из 2
  • «
  • 1
  • 2
Поиск: