[INC] CromChat - a better ColorChat!

В този раздел можете да намерите полезни кодове и уроци свързани с PAWN скриптинга.
Аватар
OciXCrom
Извън линия
Администратор
Администратор
Мнения: 7206
Регистриран на: 06 Окт 2016, 19:20
Местоположение: /resetscore
Се отблагодари: 117 пъти
Получена благодарност: 1295 пъти
Обратна връзка:

[INC] CromChat - a better ColorChat!

Мнение от OciXCrom » 16 Мар 2017, 20:15

Изображение
---------- [ Описание ] ----------

От Март 2021 (версия 3.0), CromChat вече работи за всякакъв мод, а не само за Counter-Strike! Можете да ползвате библиотеката във всички игри, обаче цветовете ще са активни само в CS.

Тъй като всяка colorchat библиотека, която съм ползвал, има неща, които не ми харесват, реших да направя моя версия и да оправя нещата, които ме дразнят. Примерно, не ми харесва ползване на RED/BLUE/TEAM_COLOR като отделен параметър в ColorChat библиотеката. Друга библиотека изкарваше грешка при изпращане съобщение в празен сървър, трета не показваше правилно цветовете при изпращане на съобщение до всички играчи, и прочие. Тъй че, ето моята версия.

---------- [ Цветни кодове ] ----------

Освен символите по подразбиране - ^x04, ^x03 & ^x01, можете да ползвате и тези:

&x07 = червено
&x06 = синьо
&x05 = бяло
&x04 = зелено
&x03 = според отбора
&x01 = нормално
&x00 = премахва префикса (само ако се намира в началото на съобщението)


Можете да ползвате само едно от следните в едно съобщение: &x07, &x06, &x05, &x03. Ако ползвате повече, автоматично ще избере първия цвят в списъка и ще замени всички останали с него. Комбиниране на повече от един отборен цвят не е възможно в CS 1.6!!!

Символите, които се ползват, може да се променят с добавяне на само един ред в .sma файла. На долната снимка можете да видите всички различни видове символи. По подразбиране се ползва групата CROMCHAT.

Изображение

За да активирате дадена група символи, просто добавяте #define CC_COLORS_TYPE CC_COLORS_<име на групата> преди #include <cromchat> в кода. Пример: ако искате да активирате групата SHORT, кодът трябва да изглежда така:

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

#define CC_COLORS_TYPE CC_COLORS_SHORT
#include <cromchat>
Имайте предвид, че кодовете от групата STANDARD не може да се ползват в lang, .ini и останали файлове. Те са само за .sma файла, тъй че не я ползвайте ако плъгинът има повече файлове.

Възможно е да направите и собствени кодове, като ползвате групата CUSTOM по следния начин:

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

#define CC_SYM_CHAT_NORMAL "&x01"
#define CC_SYM_CHAT_TEAM   "&x03"
#define CC_SYM_CHAT_GREEN  "&x04"
#define CC_SYM_CHAT_WHITE  "&x05"
#define CC_SYM_CHAT_BLUE   "&x06"
#define CC_SYM_CHAT_RED    "&x07"
#define CC_SYM_CHAT_NOPREF "&x00"
#include <cromchat>
Съответно тук заменяте &x0 символите с каквото искате.

---------- [ Изпращане на съобщение ] ----------

За да изпратите съобщение, ползвате функцията CC_SendMessage или CromChat:

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

CC_SendMessage(id, szMessage[], any:...)
С функцията CC_LogMessage можете да изпратите съобщение в чата и в логовете наведнъж:

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

// Това ще изпрати чат съобщение до "id" и ще го запише в лог файла по подразбиране.
CC_LogMessage(id, _, "&x04green &x01is not &x07red")

// Това ще изпрати чат съобщение до всички играчи и ще го запише във файла "test.txt".
CC_LogMessage(0, "test.txt", "&x03Cooool story bro!")
Функцията CC_SendMatched се ползва за изпращане на съобщение, което спазва отборния цвят на даден играч. Можете да ползвате и ColorChat или client_print_color:

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

CC_SendMatched(const id, const iPlayer, const szInput[], any:...)
Където на мястото на iPlayer добавяте "id"-то на играча от който да бъде ползван цветът. Вместо играч, можете да добавите и един от следните цветни кодове: CC_COLOR_TEAM, CC_COLOR_GREY, CC_COLOR_BLUE, CC_COLOR_RED.

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

CC_SendMatched(id, iTarget, "message")
CC_SendMatched(0, CC_COLOR_GREY, "message")
Възможно е и да изпратите съобщение до определена група играчи ползвайки същите флагове както при функцията get_players. За тази цел е добавена функцията CC_GroupMessage. Долният пример показва как да изпратите съобщение до всички живи терористи.

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

CC_GroupMessage("ae", "TERRORIST", "message")
Библиотеката съдържа и функция с която можете да изпратите съобщение до играчи които имат определени администраторски флагове. Това е функцията CC_SendAdminMessage.

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

CC_SendAdminMessage("abcei", true, "message")
Ако вторият параметър е сложен на true, съобщението ще бъде изпратено до играчите които ги имат ВСИЧКИ избрани флагове, в противен случай, ако е сложено на false, ще бъде изпратено до играчите които имат ПОНЕ ЕДИН от избраните флагове.

Можете и да промените цвета за всяка CC_* функция с ползване на CC_SetColor.
По този начин следващото извикване на CC_* функция ще ползва зададения цвят.

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

CC_SetColor(CC_COLOR_GREY)
CC_GroupMessage("a", _, "message")
Имайте предвид, че ако съобщението съдържа символи за някой друг отборен цвят, ще бъде изпратен ползвайки този цвят.
За да предотвратите това, сложете втория аргумент на true:

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

CC_SetColor(CC_COLOR_GREY, true)
Освен горните функции, библиотеката разполага и със заместители за show_activity функциите които се ползват в обикновените AMXX плъгини. По подразбиране, при добавяне на #include <cromchat> в плъгина ви, всички "activity" функции автоматично ще бъдат заместени с функциите от cromchat, с което много лесно можете да направите съобщенията от обикновените плъгини цветни. Ако искате да изключите автоматичното превръщане на въпросните функции, просто добавете #define CC_DONT_OVERWRITE_ACTIVITY преди #include <cromchat>.

---------- [ Добавяне на префикс ] ----------

С функцията CC_SetPrefix можете да добавите глобален префикс, който автоматично ще стои преди всяко съобщение. Доста по-удачен вариант отколкото да добавяте префикса ръчно на всеки ред. Функцията се добавя в plugin_init() (или на друго място, ако има нужда).

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

public plugin_init()
    CC_SetPrefix("&x04[X-Servers]")
За да премахнете префикса, можете да ползвате функцията CC_RemovePrefix.

---------- [ Премахване на цветове ] ----------

За да премахнете цветните кодове от съобщение:

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

CC_RemoveColors(szMessage[], iLen, bool:bChat = true, bool:bMenu = false)
Ако bChat = true, ще премахне кодовете за цветен чат.
Ако bMenu = true, ще премахне кодовете за цветни менюта.

Има и функция за премахване на chat exploits - цветни кодове и символа %.

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

CC_RemoveExploits(message, len)
---------- [ Погледни документацията ] ----------
---------- [ Изтегли библиотеката ] ----------

Аватар
OciXCrom
Извън линия
Администратор
Администратор
Мнения: 7206
Регистриран на: 06 Окт 2016, 19:20
Местоположение: /resetscore
Се отблагодари: 117 пъти
Получена благодарност: 1295 пъти
Обратна връзка:

Re: [INC] CromChat

Мнение от OciXCrom » 18 Мар 2017, 18:07

Добавена е функция за премахване на цветни символи от съобщението - CC_RemoveColors.
Добавен е начин да изпратите съобщение без префикс, като сложите &x00 в началото на съобщението.

Аватар
OciXCrom
Извън линия
Администратор
Администратор
Мнения: 7206
Регистриран на: 06 Окт 2016, 19:20
Местоположение: /resetscore
Се отблагодари: 117 пъти
Получена благодарност: 1295 пъти
Обратна връзка:

Re: [INC] CromChat

Мнение от OciXCrom » 28 Май 2017, 22:08

Добавена е фунцкия, с която можете да изпратите съобщение, което ще ползва отборния цвят на даден играч:

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

CC_SendMatched(id, iPlayer, szMessage[], any:...)
Съобщението ще бъде изпратено до id (или 0 за всички играчи), ползвайки отборния цвят на iPlayer. Ако в съобщението е въведен някой от специалните цветове (&x07, &x06, &x05), ще се ползва този. Вместо играч, на мястото на втория параметър можете да зададете и цвят - CC_COLOR_[RED|BLUE|GREY|DEFAULT].

Примери:

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

CC_SendMatched(id, iPlayer, "test")
CC_SendMatched(id, CC_COLOR_BLUE, "test")
CC_SendMatched(0, id, "test")

Аватар
Buzdrev
Извън линия
Потребител
Потребител
Мнения: 247
Регистриран на: 12 Окт 2016, 16:45
Се отблагодари: 5 пъти
Получена благодарност: 1 път
Обратна връзка:

[INC] CromChat

Мнение от Buzdrev » 27 Сеп 2017, 23:31

Как да оцветя това съобщение:

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

message_begin(MSG_ONE_UNRELIABLE, 76, .player = id);
write_byte(id);
write_string("&x01[&x04Prefix&x01] You have just reset your score!");
message_end();
Пробвах така CromChat(id, "&x01[&x04Prefix&x01] You have just reset your score!");, но тогава сървъра крашва Segmentation Fault (съобщението било изпратено твърде рано, нещо си ала бала..)

Аватар
OciXCrom
Извън линия
Администратор
Администратор
Мнения: 7206
Регистриран на: 06 Окт 2016, 19:20
Местоположение: /resetscore
Се отблагодари: 117 пъти
Получена благодарност: 1295 пъти
Обратна връзка:

[INC] CromChat

Мнение от OciXCrom » 28 Сеп 2017, 14:52

Точно така трябва да е, обаче дай целия код за да видя защо не може.

Аватар
Buzdrev
Извън линия
Потребител
Потребител
Мнения: 247
Регистриран на: 12 Окт 2016, 16:45
Се отблагодари: 5 пъти
Получена благодарност: 1 път
Обратна връзка:

[INC] CromChat

Мнение от Buzdrev » 28 Сеп 2017, 19:10

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

#include <amxmodx>
#include <reapi>
#include <cromchat>

#define PLUGIN 	"resetscore(ReAPI)"
#define VERSION "1.0"
#define AUTHOR  "Phantom"

public plugin_init() {
	register_plugin(PLUGIN, VERSION, AUTHOR);
	register_clcmd("say /rs", "resetscore"); 
	register_clcmd("say_team /rs", "resetscore");
	register_clcmd("say /resetscore", "resetscore"); 
	register_clcmd("say_team /resetscore", "resetscore");
}

public resetscore(id) {
	if(!is_user_connected(id)) return;

	set_entvar(id, var_frags, 0.0);
	set_member(id, m_iDeaths, 0);

	message_begin(MSG_ONE_UNRELIABLE, 76, .player = id);
	write_byte(id);
	write_string("&x01[&x04BetterPlay&x01] You have just reset your score!");
	message_end();

	message_begin(MSG_ALL, 85);
	write_byte(id);
	write_short(0); write_short(0); write_short(0); write_short(0);
	message_end();
}

Аватар
OciXCrom
Извън линия
Администратор
Администратор
Мнения: 7206
Регистриран на: 06 Окт 2016, 19:20
Местоположение: /resetscore
Се отблагодари: 117 пъти
Получена благодарност: 1295 пъти
Обратна връзка:

[INC] CromChat

Мнение от OciXCrom » 28 Сеп 2017, 20:03

Тази част от кода какво точно прави?

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

message_begin(MSG_ALL, 85);
write_byte(id);
write_short(0); write_short(0); write_short(0); write_short(0);
message_end();
Опитай без нея или сложи съобщението след нея.

Аватар
Buzdrev
Извън линия
Потребител
Потребител
Мнения: 247
Регистриран на: 12 Окт 2016, 16:45
Се отблагодари: 5 пъти
Получена благодарност: 1 път
Обратна връзка:

[INC] CromChat

Мнение от Buzdrev » 28 Сеп 2017, 22:55

Ами изтрих я тази част и си добавих съобщението както си знам и си работи сега.

Аватар
OciXCrom
Извън линия
Администратор
Администратор
Мнения: 7206
Регистриран на: 06 Окт 2016, 19:20
Местоположение: /resetscore
Се отблагодари: 117 пъти
Получена благодарност: 1295 пъти
Обратна връзка:

[INC] CromChat

Мнение от OciXCrom » 16 Окт 2017, 20:36

Изображение
  • Добавени са различни комбинации на цветни кодове, които се активират с добавяне на само един ред в .sma файла. Можете да ползвате кодове от вида на &x04, !g, {green}, {g}, ^4, както и да направите собствени такива. Вижте първия пост за повече информация.

Аватар
Buzdrev
Извън линия
Потребител
Потребител
Мнения: 247
Регистриран на: 12 Окт 2016, 16:45
Се отблагодари: 5 пъти
Получена благодарност: 1 път
Обратна връзка:

[INC] CromChat

Мнение от Buzdrev » 31 Окт 2017, 16:53

Идея: Да се направи да работи с тези съобщения:

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

format(strName, 191, "%s(%s) &x01[^x04%s^x01] &x03%s ", alive, playerTeamName,  g_szTag[admin], g_name)

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

Обратно към “Полезни кодове/уроци”

Кой е на линия

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