JI_E_O_TT_O_JI_D
Новичок
Приветствую всех, кто читаю данную тему! Данная теме будет полезна для тех, кто пишет с вой мод с 0.
Кидаться своими "Баян","Было", "Я сам смогу за 10 минут написать и без тебя" и т.п. не надо! Во многих темах было не полностью описано!
1. К enum pInfo добавим
2. В public OnPlayerConnect
3. В public OnPlayerRegister
4. В public OnPlayerLogin
5. В stock SavePlayer//Или public.
6. Ко всем New.
7. В public OnPlayerSpawn
8. В stock ShowStats добавляем. У кого нету, то в конце мода создаём.
9. Создаём команду /invite.
9. Создаём /makeleader.
10. Ко всем forward'am.
11. В конец мода.
12. В public OnPlayerSelectedMenuRow(playerid, row)
13. Ко всем командам.
14. Создаём машины фракциям.
Ко всем new
15. В public OnGameModeInit()
16. В public OnPlayerStateChange(playerid, newstate, oldstate)
17. В конец мода добавляем.
Вроде всё. Если что-то упустил или вылезли ошибки, пишите в комментарии. Вырезал со своего мода.
Кидаться своими "Баян","Было", "Я сам смогу за 10 минут написать и без тебя" и т.п. не надо! Во многих темах было не полностью описано!
1. К enum pInfo добавим
PHP:
pLeader,//Лидерка игрока.
pMember,//Фракция игрока.
pRank,//Ранг игрока.
PHP:
PlayerInfo[playerid][pLeader] = 0;
PlayerInfo[playerid][pMember] = 0;
PlayerInfo[playerid][pRank] = 0;
PHP:
iniSetInt(File,"Leader",PlayerInfo[playerid][pLeader]);
iniSetInt(File,"Member",PlayerInfo[playerid][pMember]);
iniSetInt(File,"Rank",PlayerInfo[playerid][pRank]);
PHP:
iniGetInt(File,"Leader",PlayerInfo[playerid][pLeader]);
iniGetInt(File,"Member",PlayerInfo[playerid][pMember]);
iniGetInt(File,"Rank",PlayerInfo[playerid][pRank]);
PHP:
iniSetInt(File,"Leader",PlayerInfo[playerid][pLeader]);
iniSetInt(File,"Member",PlayerInfo[playerid][pMember]);
iniSetInt(File,"Rank",PlayerInfo[playerid][pRank]);
PHP:
new JoinPed[5][1] = { //5 - кол-во скинов.
{id skina1},
{id skina2},
{id skina3},
{id skina4},
{id skina5}
};
PHP:
if(PlayerInfo[playerid][pMember] == 1 || PlayerInfo[playerid][pLeader] == 1)
{
SetPlayerToTeamColor(playerid); //
SetPlayerPos(playerid,-2031.5259,-117.2315,1035.1719);//Координаты меняйте на свои. Место появления
SetPlayerFacingAngle(playerid,272.2109);//Поворот головы
SetPlayerInterior(playerid,3);// Интерьер в котором появиться игрок 0 - это улица
SetPlayerVirtualWorld(playerid, 2);// Виртуальный мир
return 1;
}
PHP:
stock ShowStats(playerid,targetid)
{
new cash = GetPlayerMoney(targetid);
new level = PlayerInfo[targetid][pLevel];
new exp = PlayerInfo[playerid][pExp];
new nxtlevel = PlayerInfo[playerid][pLevel]+1;
new expamount = nxtlevel*levelexp;
new name[MAX_PLAYER_NAME];
new atext[32];
if(PlayerInfo[targetid][pSex] == 1) { atext = "Мужчина"; }
else if(PlayerInfo[targetid][pSex] == 2) { atext = "Женщина"; }
new ttext[32];
if(PlayerInfo[targetid][pMember] == 0 && PlayerInfo[targetid][pLeader] == 0) { ttext = "Неизвестно."; }
else if(PlayerInfo[targetid][pMember] == 1 || PlayerInfo[targetid][pLeader] == 1) { ttext = "Фракция."; }
new rangz[20];
if(PlayerInfo[targetid][pMember] == 0)
{
if(PlayerInfo[targetid][pRank] == 0) { rangz = "Неизвестно"; }
}
if(PlayerInfo[targetid][pMember] == 1)
{
if(PlayerInfo[targetid][pRank] == 5) { rangz = "Лидер"; }
else if(PlayerInfo[targetid][pRank] == 4) { rangz = "Зам"; }
else if(PlayerInfo[targetid][pRank] == 3) { rangz = "3 ранг"; }
else if(PlayerInfo[targetid][pRank] == 2) { rangz = "2 ранг"; }
else if(PlayerInfo[targetid][pRank] == 1) { rangz = "1 ранг"; }
}
GetPlayerName(targetid, name, sizeof(name));
new Float:px,Float:py,Float:pz;
GetPlayerPos(targetid, px, py, pz);
new str[256],sctring[2000];
format(str,sizeof(str),"{ffffff}Ник: %s. \n",name);
strcat(sctring,str);
format(str,sizeof(str),"{ffffff}ЛВЛ: %d. \n",level);
strcat(sctring,str);
format(str,sizeof(str),"{ffffff}EXP: %d/%d. \n",exp,expamount);
strcat(sctring,str);
format(str,sizeof(str),"{ffffff}Деньги наличными: %d. \n",cash);
strcat(sctring,str);
format(str,sizeof(str),"{ffffff}Пол: %s. \n",atext);
strcat(sctring,str);
format(str,sizeof(str),"{ffffff}Организация: %s \n",ttext);
strcat(sctring,str);
format(str,sizeof(str),"{ffffff}Должность: %s. \n",rangz);
strcat(sctring,str);
new CM[63];
format(CM,sizeof(CM),"{ffffff}Статистика персонажа.");
ShowPlayerDialog(playerid,12,DIALOG_STYLE_MSGBOX,CM,sctring,"Закрыть","");
return true;
}
PHP:
if(strcmp(cmd, "/invite", true) == 0)
{
new para1;
new ftext[32];
if(IsPlayerConnected(playerid))
{
tmp = strtok(cmdtext, idx);
if(!strlen(tmp)) return SendClientMessage(playerid, COLOR_WHITE, "Введите: /invite [id]");
para1 = ReturnUser(tmp);
if(GetDistanceBetweenPlayers(playerid, para1) < 5.0)
{
if(PlayerInfo[playerid][pLeader] == 1 || PlayerInfo[playerid][pMember] == 1 && PlayerInfo[playerid][pRank] >= 4)
{
if(IsPlayerConnected(para1))
{
if(para1 != INVALID_PLAYER_ID)
{
new giveplayer[MAX_PLAYER_NAME];
new sendername[MAX_PLAYER_NAME];
if(IsPlayerInAnyVehicle(para1)) return SendClientMessage(playerid, COLOR_RED, "[ERROR] Игрок находится в транспорте!");
if(PlayerInfo[para1][pMember] != 0) return SendClientMessage(playerid, COLOR_RED, "[ERROR] Игрок уже состоит в какой-то организации!");
if(PlayerInfo[para1][pWarns] >= 1) return SendClientMessage(playerid, COLOR_RED, "[ERROR] У игрока Warn!");
//if(PlayerInfo[playerid][pLevel] < 2) return SendClientMessage(playerid, COLOR_RED, "[ERROR] Прием возможен только с 2-х лет проживания в штате");
if(PlayerInfo[playerid][pLeader] == 1 || PlayerInfo[playerid][pMember] == 1 && PlayerInfo[playerid][pRank] == 4) { ftext = "Фракция"; PlayerInfo[para1][pModel] = id скина; }
else { return true; }
GetPlayerName(para1, giveplayer, sizeof(giveplayer));
GetPlayerName(playerid, sendername, sizeof(sendername));
format(string, sizeof(string), "Вы приняли %s работать в %s", giveplayer,ftext);
SendClientMessage(playerid, COLOR_BLUE, string);
format(string, sizeof(string), "Вы были приняты в %s лидером %s", ftext, sendername);
SendClientMessage(para1, 0x6495EDFF, string);
//FormaFrac[para1] = 0;
PlayerInfo[para1][pMember] = 1;
PlayerInfo[para1][pRank] = 1;
PlayerInfo[para1][pJob] = 0;
SetPlayerToTeamColor(para1);
SavePlayer(para1);
}
}
}
else return SendClientMessage(playerid, COLOR_RED, "[ERROR] У вас не достаточно прав для использования данной команды!");
}
else return SendClientMessage(playerid, COLOR_RED, "[ERROR] Игрок должен быть рядом с вами!");
}
}
PHP:
if(strcmp(cmd, "/makeleader", true) == 0)
{
if(PlayerInfo[playerid][pAdmin] >= 6)
{
new sendername[MAX_PLAYER_NAME];
new giveplayer[MAX_PLAYER_NAME];
tmp = strtok(cmdtext, idx);
if(!strlen(tmp)) return SendClientMessage(playerid, COLOR_WHITE, "Введите: /makeleader [id игрока] [Number(1 - 1)]");
//if(dostup[playerid] != 1) return ShowPlayerDialog(playerid, 2934, DIALOG_STYLE_INPUT, "Админ авторизация", "Введите пароль\n\nПароль должен состоять из латинских букв и цифр\n размером от 6 до 15 символов", "Вход", "Отмена");
new para1;
new level;
para1 = ReturnUser(tmp);
tmp = strtok(cmdtext, idx);
level = strval(tmp);
if(level < 1 || level > 1) { SendClientMessage(playerid, COLOR_RED, "[ERROR] Нельзя меньше 1 и больше 1!"); return true; }
GetPlayerName(playerid, sendername, sizeof(sendername));
if(IsPlayerConnected(para1))
{
if(para1 != INVALID_PLAYER_ID)
{
if(PlayerInfo[para1][pWarns] >= 1) return SendClientMessage(playerid, COLOR_RED, "[ERROR] У игрока варн!");
//if(PlayerInfo[playerid][pLevel] < 3) return SendClientMessage(playerid, COLOR_GREY, "Игрок должен достигнуть 3 левела");
GetPlayerName(para1, giveplayer, sizeof(giveplayer));
PlayerInfo[para1][pLeader] = level;
PlayerInfo[para1][pMember] = level;
PlayerInfo[para1][pJob] = 0;
format(string, sizeof(string), "Администратор %s назначил вас контролировать данную фракцию", sendername);
SendClientMessage(para1, 0x6495EDFF, string);
SpawnPlayer(para1);
format(string, sizeof(string), "Вы назначили %s контролировать фракцию номер %d", giveplayer, level);
SendClientMessage(playerid, 0x6495EDFF, string);
new iniFile = ini_openFile("logs/logi/leaders.ini");
switch(level)
{
case 1: { PlayerInfo[para1][pRank] = 5; /*FormaFrac[para1] = 1;*/ ChangeSkin[para1] = id скина; if(PlayerInfo[para1][pAdmin] <= 0) { ini_removeKey(iniFile, "Фракция"); ini_setString(iniFile, "Фракция", giveplayer); } }
}
ini_closeFile(iniFile);
SetPlayerHealth(para1, 100);
PlayerInfo[para1][pHealth] = 100;
PlayerInfo[para1][pModel] = ChangeSkin[para1];
SetPlayerSkin(para1, PlayerInfo[para1][pModel]);
format(string, 256, "%s make %s to leader fract %d | ", sendername, giveplayer, level);
AdmLog(string);
DelGun(para1);
SavePlayer(para1);
}
}
}
return true;
}
PHP:
forward SetPlayerToTeamColor(playerid);
PHP:
public SetPlayerToTeamColor(playerid)//Клист фракции.
{
switch(PlayerInfo[playerid][pMember])
{
case 0: SetPlayerColor(playerid, TEAM_HIT_COLOR);
case 1: SetPlayerColor(playerid, 0x110CE7FF);
}
return 1;
}
PHP:
else if(Current == ChoseSkin)
{
switch(row)
{
case 0:
{
switch(SelectCharID[playerid])
{
case 1: //Фракция
{
if(SelectCharPlace[playerid] == 1) { SetPlayerSkin(playerid, JoinPed[0][0]); SelectCharPlace[playerid] = 2; ChangeSkin[playerid] = JoinPed[0][0]; }
else if(SelectCharPlace[playerid] == 2) { SetPlayerSkin(playerid, JoinPed[1][0]); SelectCharPlace[playerid] = 3; ChangeSkin[playerid] = JoinPed[1][0]; }
else if(SelectCharPlace[playerid] == 3) { SetPlayerSkin(playerid, JoinPed[2][0]); SelectCharPlace[playerid] = 4; ChangeSkin[playerid] = JoinPed[2][0]; }
else if(SelectCharPlace[playerid] == 4) { SetPlayerSkin(playerid, JoinPed[3][0]); SelectCharPlace[playerid] = 1; ChangeSkin[playerid] = JoinPed[3][0]; }
ShowMenuForPlayer(ChoseSkin,playerid);
}
}
}
}
}
PHP:
else if(strcmp(cmd, "/radio", true) == 0 || strcmp(cmd, "/r", true) == 0)
{
new sendername[MAX_PLAYER_NAME];
GetPlayerName(playerid, sendername, sizeof(sendername));
new length = strlen(cmdtext);
while ((idx < length) && (cmdtext[idx] <= ' '))
{
idx++;
}
new offset = idx;
new result[64];
while ((idx < length) && ((idx - offset) < (sizeof(result) - 1)))
{
result[idx - offset] = cmdtext[idx];
idx++;
}
result[idx - offset] = EOS;
if(!strlen(result)) return SendClientMessage(playerid, COLOR_GRAD2, "Используйте: (/r)adio [текст]");
if(PlayerInfo[playerid][pMuted] == 1) return SendClientMessage(playerid, COLOR_RED, "[ERROR] У вас бан чата!");
//if(gag[playerid] == 1) return SendClientMessage(playerid, COLOR_LIGHTRED, "У Вас кляп, вы не можете говорить!");
//if(Flood[playerid]> 0) return SendClientMessage(playerid, 0xFFD5BBAA, "Не флуди!");
//Flood[playerid] = 4;
if(PlayerInfo[playerid][pMember] == 1 || PlayerInfo[playerid][pLeader] == 1)
{
if(PlayerInfo[playerid][pRank] == 5) { format(string, sizeof(string), "[R] Лидер %s: %s", sendername, result); }
else if(PlayerInfo[playerid][pRank] == 4) { format(string, sizeof(string), "[R] Зам %s: %s", sendername, result); }
else if(PlayerInfo[playerid][pRank] == 3) { format(string, sizeof(string), "[R] 3 ранг %s: %s", sendername, result); }
else if(PlayerInfo[playerid][pRank] == 2) { format(string, sizeof(string), "[R] 2 ранг %s: %s", sendername,result); }
else if(PlayerInfo[playerid][pRank] == 1) { format(string, sizeof(string), "[R] 1 ранг %s: %s", sendername, result); }
else
{
format(string, sizeof(string), "[R] 1 ранг %s: %s", sendername, result);
}
SendRadioMessage(1, COLOR_ORANGE, string);
if(tipsterw == PlayerInfo[playerid][pMember])
{
for(new i = 0; i < MAX_PLAYERS; i++)
{
if(tipsterl[i]) SendClientMessage(i, COLOR_LIGHTRED, string);
}
}
}
return 1;
}
Ко всем new
PHP:
new cars[2];//cars меняйте на своё. [2] - Кол-во машин.
PHP:
cars[0] = AddStaticVehicle(сюда координаты машины.); // машина 1. Пример: cars[0] = AddStaticVehicle(560,1777.5592,-1912.2765,13.1664,270.0137,1,1);
cars[1] = AddStaticVehicle(сюда координаты машины.); // машина 2
PHP:
new newcar = GetPlayerVehicleID(playerid);
if(newcar >= cars[0] && newcar <= cars[1]) //
{
if(PlayerInfo[playerid][pMember] == 1||PlayerInfo[playerid][pLeader] == 1) // 1 это ид фракции
{
}
else
{
TogglePlayerControllable(playerid,1);
RemovePlayerFromVehicle(playerid);
SendClientMessage(playerid, COLOR_RED, "Вы не состоите в этой фракции!"); // тут пишите что-то своё.
}
}
PHP:
stock SendRadioMessage(member, color, string[])
{
for(new i = 0; i < MAX_PLAYERS; i++)
{
if(IsPlayerConnected(i))
{
if(PlayerInfo[i][pMember] == member || PlayerInfo[i][pLeader] == member)
{
SendClientMessage(i, color, string);
}
}
}
}
Последнее редактирование:
