Доступ к готовым решениям

Переход в группу "Пользователь"

300.00
Одноразовый платёж
Быстрый переход в группу "Пользователи", без надобности написания постов и ожидания.

Покупка дает возможность:
Быть полноправным участником форума
Нормальное копирование кода
Создавать темы
Скачивать файлы
Доступ к архиву Pawno-Info

Мануал Kill List на TextDraws

Vlad_Strong

Начинающий
Пользователь
Регистрация
1 Май 2017
Сообщения
91
Лучшие ответы
0
Репутация
55
Здравствуйте уважаемые пользователи портала.
Сегодня я бы хотел предоставить вам систему киллиста во время капта на текстдравах.
Надеюсь вам понравится, данной системы я не видел на портале, поэтому решил выложить.
От спасибки не откажусь:3



Код:
В начало мода добавим:​
PHP:
#include <a_samp>
#include <foreach>
#include <dc_cmd>// Если такой командный процессор
#include <sscanf2>

#define PlayerFraction(%0) PlayerInfo[%0][pMember] // заменяйте на свой массив
#define MAX_KILL_LIST_LINES 5 // кол-во текстдравов, которые будут выводиться на экран
main() {}
#if MAX_KILL_LIST_LINES <= 0
	#error MAX_KILL_LIST_LINES must be > 0
#endif
#endif

enum pInfo // убрать, заменить на своё
{
	pMember
};
new PlayerInfo[MAX_PLAYERS][pInfo]; // убрать, заменить на своё

new Kill_List_PPos[MAX_PLAYERS],							PlayerName[MAX_PLAYERS][MAX_PLAYER_NAME],
       Text:Kill_List_Box[MAX_KILL_LIST_LINES],					Text:Kill_List_Text[MAX_PLAYERS][MAX_KILL_LIST_LINES],
       Kill_List_Line_Text[MAX_KILL_LIST_LINES][MAX_PLAYERS][64],	KL_Player[MAX_PLAYERS],
       captureteam[2]; // убрать; заменить на своё
В public OnGameModeExit() добавим:​
PHP:
for(new i;i<MAX_KILL_LIST_LINES;i++) TextDrawDestroy(Kill_List_Box[i]);
В public OnGameModeInit() добавим​
PHP:
static const Float:posse[2] = { 0.25, -10.916657 }; // посчитал расстояние между двумя текстдравами и создал их циклом
	for(new i;i<MAX_KILL_LIST_LINES;i++)
	{
		Kill_List_Box[i] = TextDrawCreate(360.000000 + i*posse[0], 197.166671+i*posse[1], "i");
		TextDrawLetterSize(Kill_List_Box[i], 31.394374, 1.745834);
		TextDrawAlignment(Kill_List_Box[i], 1);
		TextDrawColor(Kill_List_Box[i], 255);
		TextDrawSetShadow(Kill_List_Box[i], 0);
		TextDrawSetOutline(Kill_List_Box[i], 1);
		TextDrawBackgroundColor(Kill_List_Box[i], 51);
		TextDrawFont(Kill_List_Box[i], 2);
		TextDrawSetProportional(Kill_List_Box[i], 1);
	}
public OnPlayerConnect(playerid) добавим:​
PHP:
KL_Player[playerid] = 1; // включена ли функция показа текстдравов, 1 - вкл, 0 - выкл
	GetPlayerName(playerid,PlayerName[playerid],MAX_PLAYER_NAME); // убрать, если в моде есть свой массив, в котором хранятся ники
	Kill_List_PPos[playerid] = 0; // с какого места будет начинаться показ текстдравов, советую только с 0
	static const Float:posse[2] = { 0.25, -10.916657 };  // расчитал расстояние между двумя текстдравами и создал их циклом
	for(new i;i<MAX_KILL_LIST_LINES;i++)
	{
		Kill_List_Text[playerid][i] = TextDrawCreate(458.125000+posse[0]*i, 201.833343+posse[1]*i, "Unknown");
		TextDrawLetterSize(Kill_List_Text[playerid][i], 0.122500, 0.742499);
		TextDrawAlignment(Kill_List_Text[playerid][i], 2);
		TextDrawColor(Kill_List_Text[playerid][i], -1);
		TextDrawSetShadow(Kill_List_Text[playerid][i], 0);
		TextDrawSetOutline(Kill_List_Text[playerid][i], 1);
		TextDrawBackgroundColor(Kill_List_Text[playerid][i], 51);
		TextDrawFont(Kill_List_Text[playerid][i], 2);
		TextDrawSetProportional(Kill_List_Text[playerid][i], 1);
	}
В public OnPlayerDisconnect(playerid,reason) добавим:​
PHP:
KL_Player[playerid] = 1;
	Kill_List_PPos[playerid] = 0;
	for(new i;i<MAX_KILL_LIST_LINES;i++)
	{
	    Kill_List_Line_Text[i][playerid][0] = EOS;
	    TextDrawHideForPlayer(playerid,Kill_List_Box[i]);
	    TextDrawDestroy(Kill_List_Text[playerid][i]);
	}
В public OnPlayerDeath(playerid,killerid,reason) добавим:​
PHP:
if(((captureteam[0] == PlayerFraction(playerid) && captureteam[1] == PlayerFraction(killerid))||(captureteam[1] == PlayerFraction(playerid) && captureteam[0] == PlayerFraction(killerid)))&&PlayerFraction(playerid) != 0&&PlayerFraction(killerid) != 0)
	{
		Kill_List(playerid,killerid,-1,-1);
 	}
Команды:​
PHP:
 //DC_CMD
CMD:klclear(playerid)
{
	for(new i;i<MAX_KILL_LIST_LINES;i++)
	{
	    TextDrawHideForPlayer(playerid,Kill_List_Text[playerid][i]);
	    TextDrawHideForPlayer(playerid,Kill_List_Box[i]);
	}
	Kill_List_PPos[playerid] = 0;
	SendClientMessage(playerid, 0x00ff00,"Вы очистили свой Килл Лист!");
	return 1;
}
CMD:kl(playerid)
{
	if(KL_Player[playerid] == 1)
	{
		KL_Player[playerid] = 0;
		SendClientMessage(playerid, 0xff00ff,"[KL]{ffffff}Вы успешно выключили свой Килл Лист!");
	}
	else
	{
	KL_Player[playerid] = 1;
	SendClientMessage(playerid, 0xff00ff,"[KL]{ffffff}Вы успешно включили свой Килл Лист!");
}
return 1;
}
//CMD
if(!strcmp("/klclear",cmdtext,true))
{
    for(new i;i<MAX_KILL_LIST_LINES;i++)
    {
        TextDrawHideForPlayer(playerid,Kill_List_Text[playerid][i]);
        TextDrawHideForPlayer(playerid,Kill_List_Box[i]);
    }
	Kill_List_PPos[playerid] = 0;
    SendClientMessage(playerid, 0x00ff00,"Вы очистили свой Килл Лист!");
	return 1;
}
else if(!strcmp("/kl",cmdtext,true))
{
	if(KL_Player[playerid] == 1)
	{
		KL_Player[playerid] = 0;
		SendClientMessage(playerid, 0xff00ff,"[KL]{ffffff}Вы успешно выключили свой Килл Лист!");
	}
	else
	{
		KL_Player[playerid] = 1;
		SendClientMessage(playerid, 0xff00ff,"[KL]{ffffff}Вы успешно включили свой Килл Лист!");
    }
	return 1;
}
return 1;
}
Этот stock можно в конец мода​
PHP:
stock Kill_List(playerid,killerid,teamone,teamtwo)
{
    new KL_string[64];
	format(KL_string,sizeof(KL_string),"%s kill %s",PlayerName[killerid],PlayerName[playerid]);
    foreach(new i:Player)
    {
	    if(KL_Player[i] == 1 && ((PlayerFraction(i) == teamone || PlayerFraction(i) == teamtwo) ||  (teamone == -1 && teamtwo == -1)))
		{
			if(MAX_KILL_LIST_LINES-1-Kill_List_PPos[i] == 0)
			{
			    for(new k=MAX_KILL_LIST_LINES-1;k!=0;k--)
			    {
			        strmid(Kill_List_Line_Text[k][i],Kill_List_Line_Text[k-1][i],0,64);
			    }
				strmid(Kill_List_Line_Text[0][i],KL_string,0,64);
			}
			else
				strmid(Kill_List_Line_Text[MAX_KILL_LIST_LINES-1-Kill_List_PPos[i]-1][i],KL_string,0,64);
			for(new j=MAX_KILL_LIST_LINES-1-Kill_List_PPos[i]-1,k=0;k!=Kill_List_PPos[i]+1;j++,k++)
			{
			    if(j<0)j=0;
				TextDrawSetString(Kill_List_Text[i][k],Kill_List_Line_Text[j][i]);
				TextDrawShowForPlayer(i,Kill_List_Text[i][k]);
				TextDrawShowForPlayer(i,Kill_List_Box[k]);
			}
			Kill_List_PPos[i]++;
			if(Kill_List_PPos[i] == MAX_KILL_LIST_LINES) Kill_List_PPos[i] = MAX_KILL_LIST_LINES-1;
		}
    }
    return 1;
}
Ссылка на пастебина​






Предыстория: еще в 2016 году я хотел открыть свой сервер на 03е(там очень легко набрать онлайн), так как там сервера не ахти я вполне мог привлечь всю аудиторию 03е на свой сервер чем-то своим уникальным... Ну так вот, я хотел реализовать киллист только во время каптов... но так как скупой 03е мне этого не позволял(ибо там был доступен только глобальный киллист), я придумал выход этому и сделал его на текстдравах. Уже сегодня выкладываю в паблик это детище.
 
Последнее редактирование:
Сверху Снизу