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

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

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

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

Урок Создание фракции с 0. Доработал.

Статус
В этой теме нельзя размещать новые ответы.

JI_E_O_TT_O_JI_D

Новичок
Приветствую всех, кто читаю данную тему! Данная теме будет полезна для тех, кто пишет с вой мод с 0.
Кидаться своими "Баян","Было", "Я сам смогу за 10 минут написать и без тебя" и т.п. не надо! Во многих темах было не полностью описано!

1. К enum pInfo добавим
PHP:
pLeader,//Лидерка игрока.
pMember,//Фракция игрока.
pRank,//Ранг игрока.
2. В public OnPlayerConnect
PHP:
PlayerInfo[playerid][pLeader] = 0;
PlayerInfo[playerid][pMember] = 0;
PlayerInfo[playerid][pRank] = 0;
3. В public OnPlayerRegister
PHP:
iniSetInt(File,"Leader",PlayerInfo[playerid][pLeader]);
iniSetInt(File,"Member",PlayerInfo[playerid][pMember]);
iniSetInt(File,"Rank",PlayerInfo[playerid][pRank]);
4. В public OnPlayerLogin
PHP:
iniGetInt(File,"Leader",PlayerInfo[playerid][pLeader]);
iniGetInt(File,"Member",PlayerInfo[playerid][pMember]);
iniGetInt(File,"Rank",PlayerInfo[playerid][pRank]);
5. В stock SavePlayer//Или public.
PHP:
iniSetInt(File,"Leader",PlayerInfo[playerid][pLeader]);
iniSetInt(File,"Member",PlayerInfo[playerid][pMember]);
iniSetInt(File,"Rank",PlayerInfo[playerid][pRank]);
6. Ко всем New.
PHP:
new JoinPed[5][1] = { //5 - кол-во скинов.
{id skina1},
{id skina2},
{id skina3},
{id skina4},
{id skina5}
};
7. В public OnPlayerSpawn
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;
    }
8. В stock ShowStats добавляем. У кого нету, то в конце мода создаём.
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;
}
9. Создаём команду /invite.
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] Игрок должен быть рядом с вами!");
    }
   }
9. Создаём /makeleader.
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;
   }
10. Ко всем forward'am.
PHP:
forward SetPlayerToTeamColor(playerid);
11. В конец мода.
PHP:
public SetPlayerToTeamColor(playerid)//Клист фракции.
{
   switch(PlayerInfo[playerid][pMember])
   {
   case 0:    SetPlayerColor(playerid, TEAM_HIT_COLOR);
   case 1: SetPlayerColor(playerid, 0x110CE7FF);
   }
   return 1;
}
12. В public OnPlayerSelectedMenuRow(playerid, row)

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);
       }
      }
     }
    }
   }
13. Ко всем командам.
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;
   }
14. Создаём машины фракциям.

Ко всем new

PHP:
new cars[2];//cars меняйте на  своё. [2] - Кол-во машин.
15. В public OnGameModeInit()

PHP:
cars[0] = AddStaticVehicle(сюда координаты машины.); // машина 1. Пример: cars[0] = AddStaticVehicle(560,1777.5592,-1912.2765,13.1664,270.0137,1,1);
cars[1] = AddStaticVehicle(сюда координаты машины.); // машина 2
16. В public OnPlayerStateChange(playerid, newstate, oldstate)
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, "Вы не состоите в этой фракции!"); // тут пишите что-то своё.
      	}
    }
17. В конец мода добавляем.

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);
			}
		}
	}
}
Вроде всё. Если что-то упустил или вылезли ошибки, пишите в комментарии. Вырезал со своего мода.
 
Последнее редактирование:
Статус
В этой теме нельзя размещать новые ответы.
Сверху Снизу