Помощ за hook chat

Ако имате затруднения при изработката/преработката на даден плъгин - пишете тук, ще се опитаме да ви помогнем!
Аватар
Radeon
Извън линия
Потребител
Потребител
Мнения: 143
Регистриран на: 04 Апр 2021, 11:30
Се отблагодари: 2 пъти
Получена благодарност: 34 пъти
Обратна връзка:

Помощ за hook chat

Мнение от Radeon » 02 Май 2022, 15:36

Здравейте. Нов съм в скриптирането и искам да се науча на повече неща. Сега съм започнал да правя плъгин, който да слага убийствата на играча в префикс и да ги пази завинаги. Но в частта с префикса има неща които не разбирам.

Код за потвърждение: Избери целия код

#include <amxmodx>

public plugin_init()
{
register_plugin("Test", "0.0.1", "ConnorMcLeod")
register_message(get_user_msgid("SayText"), "Message_SayText")
}

public Message_SayText()
{
new szChannel[40]
get_msg_arg_string(2, szChannel, charsmax(szChannel))

if(equal(szChannel, "#Cstrike_Chat", 13))
{
if(equal(szChannel, "#Cstrike_Chat_All"))
{
format(szChannel, charsmax(szChannel), "^4[Haha] ^3%%s1 ^1: %%s2")
}
else
{
format(szChannel, charsmax(szChannel), "^4[Haha] ^3%s", szChannel)
}
set_msg_arg_string(2, szChannel)
}
}
В този код не знам какво означава if(equal(szChannel, "#Cstrike_Chat", 13)) Ако канала ни е равен на #Cstrike_Chat", 13 , какво означава ? И аргумента 13 какво показва

if(equal(szChannel, "#Cstrike_Chat_All")) Тук #Cstrike_Chat_All какво означава ?

get_msg_arg_string(2, szChannel, charsmax(szChannel)) Какво означава този аргумент 2 ?

Друг въпрос. Защо този код не работи
if(!is_user_connected(id) && !(get_user_flags(id) & ADMIN_BAN)) return
А този код работи.
if(!is_user_connected(id) || !(get_user_flags(id) & ADMIN_BAN)) return
Нали "&&" означава "и" , а "||" означава "или"

Аватар
SmirnoffBG
Извън линия
Потребител
Потребител
Мнения: 267
Регистриран на: 27 Ное 2016, 19:43
Местоположение: nz
Се отблагодари: 77 пъти
Получена благодарност: 38 пъти
Обратна връзка:

Помощ за hook chat

Мнение от SmirnoffBG » 02 Май 2022, 22:42

Здрасти.

За #Cstrike нещата виж фаила "cstrike/resource/cstrike_english.txt'
Когато работиш с евент можеш да видиш всичките му аргументи тук:
https://wiki.alliedmods.net/Half-life_1 ... ts#SayText

в

Код за потвърждение: Избери целия код

if(equal(szChannel, "#Cstrike_Chat", 13))
ако видиш в inc файла за натива equal
https://www.amxmodx.org/api/string/equal
ще разбереш, че 13 е колко символа да провери
и ако се чудиш защо е #Cstrike_Chat а не да кажем Cstrike_Chat_CT
еми точно за това е 13-ката, сиреч сканира димата до 13тия символ и останалите може да са всякви

А относно не работещия код

Код за потвърждение: Избери целия код

if(!is_user_connected(id) && !(get_user_flags(id) & ADMIN_BAN)) return 
ако потребителя не е конектнат И няма бан тогава спира кода

Код за потвърждение: Избери целия код

if(!is_user_connected(id) || !(get_user_flags(id) & ADMIN_BAN)) return
Когато потребителя не е конектнат ИЛИ няма бан права тогава спира

Кода "не работи" в горния случай, защото ако е конектнат целият if се води за невалиден и няма да спре кода
El-Super Respawn = 87.121.54.85:27016
BG Trewa Respawn = 91.92.137.205:27015

Аватар
Radeon
Извън линия
Потребител
Потребител
Мнения: 143
Регистриран на: 04 Апр 2021, 11:30
Се отблагодари: 2 пъти
Получена благодарност: 34 пъти
Обратна връзка:

Помощ за hook chat

Мнение от Radeon » 03 Май 2022, 10:17

Благодаря за отговора, доста ми помогна. Само едно нещо остана което не ми е ясно. След като сравняваме съобщението на играча дали съдържа #Cstrike_Chat , което означава всички възможни сценарии за чата, защо след това сравнява и с #Cstrike_Chat_All като то е включен в първата проверка ?


Да проверим дали съм разбрал логически нещата.
if( is_user_connected(id) && ( get_user_flags(id) & ADMIN_BAN)) В този случай ако играча е конектнат и има флаг бан ще се изпълни кода нали така ?

Аватар
SmirnoffBG
Извън линия
Потребител
Потребител
Мнения: 267
Регистриран на: 27 Ное 2016, 19:43
Местоположение: nz
Се отблагодари: 77 пъти
Получена благодарност: 38 пъти
Обратна връзка:

Помощ за hook chat

Мнение от SmirnoffBG » 03 Май 2022, 22:21

1: Следкато си проверил, че евента е за чата вече правиш втори филтър дали е за ALL чат или за друг.
2: Логическото ти обеснение е правилно.
Съвет: Винаги такива логически неща си ги превеждай на говорим език, ако тряя си го над реда с думи и си ги препрочети.
El-Super Respawn = 87.121.54.85:27016
BG Trewa Respawn = 91.92.137.205:27015

Аватар
Radeon
Извън линия
Потребител
Потребител
Мнения: 143
Регистриран на: 04 Апр 2021, 11:30
Се отблагодари: 2 пъти
Получена благодарност: 34 пъти
Обратна връзка:

Помощ за hook chat

Мнение от Radeon » 04 Май 2022, 11:52

Може да се заключва. Разбрах всичко по тази тема от което имах нужда.

Аватар
zolfeca
Извън линия
Администратор
Администратор
Мнения: 417
Регистриран на: 10 Окт 2016, 23:48
Се отблагодари: 24 пъти
Получена благодарност: 92 пъти

Помощ за hook chat

Мнение от zolfeca » 04 Май 2022, 13:24

Аз бих ти дал 1 съвет. Ползвай този плъгин. Освен, че е изключително добър, то вече има и това, което искаш. Единствено трябва да си направиш база, в която да се запазват киловете.

Код за потвърждение: Избери целия код

$frags$ -- убийствата на играча

Аватар
Radeon
Извън линия
Потребител
Потребител
Мнения: 143
Регистриран на: 04 Апр 2021, 11:30
Се отблагодари: 2 пъти
Получена благодарност: 34 пъти
Обратна връзка:

Помощ за hook chat

Мнение от Radeon » 04 Май 2022, 15:01

Благодаря , направих го с плъгина на OciXCrom

Заключено
  • Подобни теми
    Отговори
    Преглеждания
     Последно мнение

Обратно към “Помощ в скриптирането”

Кой е на линия

Потребители разглеждащи този форум: 0 регистрирани и 11 госта