- Регистрация
- 1 Май 2017
- Сообщения
- 91
- Лучшие ответы
- 0
- Репутация
- 55
Здравствуйте уважаемые пользователи портала.
Сегодня я бы хотел предоставить вам систему киллиста во время капта на текстдравах.
Надеюсь вам понравится, данной системы я не видел на портале, поэтому решил выложить.
От спасибки не откажусь:3
Код:
Сегодня я бы хотел предоставить вам систему киллиста во время капта на текстдравах.
Надеюсь вам понравится, данной системы я не видел на портале, поэтому решил выложить.
От спасибки не откажусь: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е мне этого не позволял(ибо там был доступен только глобальный киллист), я придумал выход этому и сделал его на текстдравах. Уже сегодня выкладываю в паблик это детище.
Последнее редактирование: