• Страница 1 из 1
  • 1
Форум » PAWNO » Уроки Pawno » Создание фракции с 0.
Создание фракции с 0.
Дмитрий Дата: Понедельник, 03.11.2014, 22:25 | Сообщение # 1 | Сообщить о нерабочей теме


Аватар для Дмитрий

Приветствую всех, кто читаю данную тему! Данная теме будет полезна для тех, кто пишет с вой мод с 0.
Речь пойдет о создании своей фракции с полного нуля.
Приступим:
1. К enum pInfo добавим
Код
pLeader,//Лидерка игрока.
pMember,//Фракция игрока.
pRank,//Ранг игрока.


2. В public OnPlayerConnect
Код
PlayerInfo[playerid][pLeader] = 0;
PlayerInfo[playerid][pMember] = 0;
PlayerInfo[playerid][pRank] = 0;  


3. В public OnPlayerRegister
Код
iniSetInt(File,"Leader",PlayerInfo[playerid][pLeader]);
iniSetInt(File,"Member",PlayerInfo[playerid][pMember]);
iniSetInt(File,"Rank",PlayerInfo[playerid][pRank]);  


4. В public OnPlayerLogin
Код
iniGetInt(File,"Leader",PlayerInfo[playerid][pLeader]);
iniGetInt(File,"Member",PlayerInfo[playerid][pMember]);
iniGetInt(File,"Rank",PlayerInfo[playerid][pRank]);  


5. В stock SavePlayer//Или public.
Код
iniSetInt(File,"Leader",PlayerInfo[playerid][pLeader]);
iniSetInt(File,"Member",PlayerInfo[playerid][pMember]);
iniSetInt(File,"Rank",PlayerInfo[playerid][pRank]);


6. Ко всем New.
Код
new JoinPed[5][1] = { //5 - кол-во скинов.
{id skina1},
{id skina2},
{id skina3},
{id skina4},
{id skina5}
};  


7. В public OnPlayerSpawn
Код
  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 добавляем. У кого нету, то в конце мода создаём.
Код
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.
Код
    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.
Код
    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.
Код
forward SetPlayerToTeamColor(playerid);


11. В конец мода.
Код
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)
Код
  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. Ко всем командам.
Код
    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
Код
new cars[2];//cars меняйте на  своё. [2] - Кол-во машин.  


15. В public OnGameModeInit()
Код
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)
Код
    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. В конец мода добавляем.
Код
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);
             }
         }
     }
}  


Вот и все. Удачи. Автор: JI_E_O_TT_O_JI_D


From Russia With Love!
Форум » PAWNO » Уроки Pawno » Создание фракции с 0.
  • Страница 1 из 1
  • 1
Поиск: