[INC] CromChat - a better ColorChat!

В този раздел можете да намерите полезни кодове и уроци свързани с PAWN скриптинга.
Потребителски аватар

Автор на темата
OciXCrom™ MKD
Администратор
Администратор
Мнения: 2667
Регистриран: 06 окт 2016, 19:20
Местоположение: /resetscore
Години: 20
Контакти:

[INC] CromChat - a better ColorChat!

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

---------- [ Описание ] ----------


Тъй като всяка 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_COLORS_TYPE CC_COLORS_CUSTOM
new const CC_REPLACE_COLORS[][] = { "&x04", "^x04", "&x03", "^x03", "&x01", "^x01" }
new const CC_PLUS_COLORS[][] = { "&x07", "TERRORIST", "&x06", "CT", "&x05", "SPECTATOR" }
new const CC_COLORS_LIST[][] = { "&x07", "&x06", "&x05", "&x04", "&x03", "&x01", "&x00" }
new const CC_NO_PREFIX[] = "&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"
---------- [ Добавяне на префикс ] ----------


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

Код: Избери всички

public plugin_init()
    CC_SetPrefix("&x04[X-Servers]")
---------- [ Премахване на цветове ] ----------


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

Код: Избери всички

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


---------- [ Изтегли библиотеката ] ----------

Потребителски аватар

Автор на темата
OciXCrom™ MKD
Администратор
Администратор
Мнения: 2667
Регистриран: 06 окт 2016, 19:20
Местоположение: /resetscore
Години: 20
Контакти:

Re: [INC] CromChat

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

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

Потребителски аватар

Автор на темата
OciXCrom™ MKD
Администратор
Администратор
Мнения: 2667
Регистриран: 06 окт 2016, 19:20
Местоположение: /resetscore
Години: 20
Контакти:

Re: [INC] CromChat

Мнение от OciXCrom™ MKD » 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 LSD
Рекламатор
Рекламатор
Мнения: 207
Регистриран: 12 окт 2016, 16:45
Години: 19
Контакти:

[INC] CromChat

Мнение от Buzdrev LSD » 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™ MKD
Администратор
Администратор
Мнения: 2667
Регистриран: 06 окт 2016, 19:20
Местоположение: /resetscore
Години: 20
Контакти:

[INC] CromChat

Мнение от OciXCrom™ MKD » 28 сеп 2017, 14:52

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

Потребителски аватар

Buzdrev LSD
Рекламатор
Рекламатор
Мнения: 207
Регистриран: 12 окт 2016, 16:45
Години: 19
Контакти:

[INC] CromChat

Мнение от Buzdrev LSD » 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™ MKD
Администратор
Администратор
Мнения: 2667
Регистриран: 06 окт 2016, 19:20
Местоположение: /resetscore
Години: 20
Контакти:

[INC] CromChat

Мнение от OciXCrom™ MKD » 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 LSD
Рекламатор
Рекламатор
Мнения: 207
Регистриран: 12 окт 2016, 16:45
Години: 19
Контакти:

[INC] CromChat

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

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

Потребителски аватар

Автор на темата
OciXCrom™ MKD
Администратор
Администратор
Мнения: 2667
Регистриран: 06 окт 2016, 19:20
Местоположение: /resetscore
Години: 20
Контакти:

[INC] CromChat

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

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

Потребителски аватар

Buzdrev LSD
Рекламатор
Рекламатор
Мнения: 207
Регистриран: 12 окт 2016, 16:45
Години: 19
Контакти:

[INC] CromChat

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

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

Код: Избери всички

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

Отговори

Върни се в “Полезни кодове/уроци”

Кой е на линия

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