Все вопросы по скриптингу для AMXX, помощь в редактировании плагинов.
Модераторы: Subb98, liFe iS GoOD
Правила форума
1. Запрещено материться и оскорблять других участников форума.
2. Запрещен флуд, оффтоп, дабл постинг во всех разделах форума, кроме раздела "Болтовня".
3. Запрещено взламывать сайт/форум или наносить любой вред проекту.
4. Запрещено рекламировать другие ресурсы.
5. Запрещено создавать темы без информативного названия. Название темы должно отображать ее смысл.
В данном разделе форума разрешено создавать темы, касающие только скриптинга для AMX Mod X.
Правила при создании новой темы:
1. При вставке кода плагина необходимо использовать тег [code=php].
2. Любые изображения должны быть загружены, как вложения к вашему сообщению.
3. При описании проблемы или запросе на помощь в редактировании плагина обязательно выкладывайте исходник sma плагина.
nemec21 » 22 ноя 2023, 14:16
- Код: Выделить всё
stock bool:non_repeatable_random(const iNumbers[], &iNonRepeatNum) {
static
iAction,
iBuffer[32],
iSizeNumbers;
if(!iSizeNumbers)
iSizeNumbers = strlen(iNumbers)
new
bool:bReplay,
iRandomNum = iNumbers[random(iSizeNumbers)];
for(new i; i <= iSizeNumbers; ++i) {
if(iBuffer[i] == iRandomNum)
bReplay = true;
}
if(!bReplay) {
iNonRepeatNum = iBuffer[iAction] = iRandomNum;
if(iAction++ == iSizeNumbers -1) {
iAction = 0;
arrayset(iBuffer, 0, iSizeNumbers);
}
return bReplay;
}
non_repeatable_random(iNumbers, iNonRepeatNum);
return bReplay;
}
Не большой пример использования
- Код: Выделить всё
public plugin_init() {
register_plugin("Non Repeat Random Number", "rz 0.1", "(: [C][O][D][E] x");
RegisterHookChain(RG_CBasePlayer_Spawn, "CBasePlayer_Spawn", 1);
}
public CBasePlayer_Spawn(const id) {
if(!is_user_alive(id))
return;
new
iNumbers[] = {4, 7, 19, 1, 2},
iNonRepeatNum;
non_repeatable_random(iNumbers, iNonRepeatNum);
server_print("****** %i", iNonRepeatNum);
}
stock bool:non_repeatable_random(const iNumbers[], &iNonRepeatNum) {
static
iAction,
iBuffer[32],
iSizeNumbers;
if(!iSizeNumbers)
iSizeNumbers = strlen(iNumbers)
new
bool:bReplay,
iRandomNum = iNumbers[random(iSizeNumbers)];
for(new i; i <= iSizeNumbers; ++i) {
if(iBuffer[i] == iRandomNum)
bReplay = true;
}
if(!bReplay) {
iNonRepeatNum = iBuffer[iAction] = iRandomNum;
if(iAction++ == iSizeNumbers -1) {
iAction = 0;
arrayset(iBuffer, 0, iSizeNumbers);
}
return bReplay;
}
non_repeatable_random(iNumbers, iNonRepeatNum);
return bReplay;
}
-

nemec21

-
- Сообщения: 835
- Зарегистрирован: 07 фев 2016, 17:08
- Откуда: Беларусь
- Благодарил (а): 216 раз.
- Поблагодарили: 49 раз.
- Опыт программирования: Около 6 месяцев
- Языки программирования: Counter-Strike 1.6
nemec21 » 29 ноя 2023, 22:37
Получаем количество русских и английских букв из строки.
Пример:
*** RUS - 15, EN - 5
- Код: Выделить всё
stock get_count_letter(const szLine[], szBuffer[], const LenBuffer) {
new
En,
Rus,
Len = strlen(szLine);
for(new i; i < Len; ++i) {
if('A' <= szLine[i] <= 'Z' || 'a' <= szLine[i] <= 'z') {
++En;
continue;
}
if(szLine[i] > 'z')
++Rus;
}
Rus = Rus/2;
formatex(szBuffer, LenBuffer, "RUS - %i, EN - %i", Rus, En);
}
Не большой пример использования
- Код: Выделить всё
public plugin_init() {
register_plugin("Count letter", "rz 0.1", "(: [C][O][D][E] x");
new szBuffer[191];
get_count_letter("(: [C][O][D][E] x это и есть Виталик", szBuffer, charsmax(szBuffer));
server_print("**** %s", szBuffer);
}
stock get_count_letter(const szLine[], szBuffer[], const LenBuffer) {
new
En,
Rus,
Len = strlen(szLine);
for(new i; i < Len; ++i) {
if('A' <= szLine[i] <= 'Z' || 'a' <= szLine[i] <= 'z') {
++En;
continue;
}
if(szLine[i] > 'z')
++Rus;
}
Rus = Rus/2;
formatex(szBuffer, LenBuffer, "RUS - %i, EN - %i", Rus, En);
}
-

nemec21

-
- Сообщения: 835
- Зарегистрирован: 07 фев 2016, 17:08
- Откуда: Беларусь
- Благодарил (а): 216 раз.
- Поблагодарили: 49 раз.
- Опыт программирования: Около 6 месяцев
- Языки программирования: Counter-Strike 1.6
Mistrick » 02 дек 2023, 15:53
nemec21,
- Код: Выделить всё
get_count_letter("{|}~仰仱仲仳仴仵件价仸仹仺任仼份仾仿", szBuffer, charsmax(szBuffer));
- Код: Выделить всё
**** RUS - 26, EN - 0
Точно русские считает?
-

Mistrick

-
- Сообщения: 2944
- Зарегистрирован: 04 ноя 2012, 18:15
- Благодарил (а): 43 раз.
- Поблагодарили: 1251 раз.
- Языки программирования: PAWN
С/С++(few above zero)
nemec21 » 02 дек 2023, 21:55
Подправим
-

nemec21

-
- Сообщения: 835
- Зарегистрирован: 07 фев 2016, 17:08
- Откуда: Беларусь
- Благодарил (а): 216 раз.
- Поблагодарили: 49 раз.
- Опыт программирования: Около 6 месяцев
- Языки программирования: Counter-Strike 1.6
nemec21 » 05 апр 2024, 22:01
Изменяет игроку угол (BETTA) обзора.
- Код: Выделить всё
public bool:UTIL_Angle(const pUser, const iValueAngle) {
if(!is_user_alive(pUser) || 1 > iValueAngle > 180)
return false;
enum any: DATA {
VALUE_BETTA,
ALFA,
BETTA
};
new Float:fParameters[DATA +1];
fParameters[VALUE_BETTA] = float(iValueAngle);
get_entvar(pUser, var_v_angle, fParameters[ALFA]);
if(fParameters[BETTA] > 0.0)
fParameters[BETTA] -= fParameters[VALUE_BETTA];
else fParameters[BETTA] += fParameters[VALUE_BETTA];
set_entvar(pUser, var_v_angle, fParameters[ALFA]);
set_entvar(pUser, var_angles, fParameters[ALFA]);
set_entvar(pUser, var_fixangle, 1);
return true;
}
-

nemec21

-
- Сообщения: 835
- Зарегистрирован: 07 фев 2016, 17:08
- Откуда: Беларусь
- Благодарил (а): 216 раз.
- Поблагодарили: 49 раз.
- Опыт программирования: Около 6 месяцев
- Языки программирования: Counter-Strike 1.6
sb123 » 20 май 2024, 14:11
Names contain forbidden characters
new name[32]
get_user_name(id, name, 31)
if (!is_legal_name(name))
- Код: Выделить всё
stock is_legal_name(name[])
{
new ret = 1
for (new i; i < 32; i++)
{
switch(name[i])
{
case '"', '\', '%', 9: // 9 -> tab
{
return 0
}
case 0:
{
break
}
}
}
return ret
}
-

sb123
-
- Сообщения: 4
- Зарегистрирован: 18 ноя 2021, 19:55
- Благодарил (а): 1 раз.
- Поблагодарили: 2 раз.
- Языки программирования: Я ничего не знаю
nemec21 » 20 май 2024, 22:03
sb123, ну тогда уж лучше так
- Код: Выделить всё
stock bool:is_legal_name(const name[]) {
for(new i; i < strlen(name); i++) {
switch(name[i]) {
case '"', '\', '%', 9: // 9 -> tab
return false;
}
}
return true;
}
-

nemec21

-
- Сообщения: 835
- Зарегистрирован: 07 фев 2016, 17:08
- Откуда: Беларусь
- Благодарил (а): 216 раз.
- Поблагодарили: 49 раз.
- Опыт программирования: Около 6 месяцев
- Языки программирования: Counter-Strike 1.6
sb123 » 04 июн 2024, 19:00
// Duplicate name check
new name[32]
get_user_name(id, name, 31)
one_name(id, name, 31)
- Код: Выделить всё
one_name(id, name[], len)
{
new sample[32], s
copy(sample, 31, name)
for (new i=0; i<33; i++)
{
if (s>0)
formatex(sample, 31, "(%d)%s", s, name)
if (!is_name_inuse(id, sample))
break
s++
}
copy(name, len, sample)
}
is_name_inuse(id, const sample[])
{
new name[32]
for (new i=1; i<=get_maxplayers(); i++)
{
if (!is_user_connected(i)) continue
if (id==i) continue
get_user_name(i, name, 31)
if (strcmp(name, sample)==0)
return 1
}
return 0
}
-

sb123
-
- Сообщения: 4
- Зарегистрирован: 18 ноя 2021, 19:55
- Благодарил (а): 1 раз.
- Поблагодарили: 2 раз.
- Языки программирования: Я ничего не знаю
Вернуться в Скриптинг
Кто сейчас на конференции
Сейчас этот форум просматривают: Google [Bot] и гости: 1