[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
[FAQ]Создание объектов в игре
Дата: 07.09.2010, Вторник, 19:12:29 | Сообщение # $NUMBER
Группа: Пользователи
Сообщений: 31
Репутация: 5+
Вот решил сделать небольшую вещицу. Теперь можно ставить объекты в игре. Можно использовать для фракции строители.

Начнём, вставляем всё это в public OnPlayerCommandText(playerid, cmdtext[]):

Code
if(strcmp(cmd, "/ob", true) == 0)
   {
    if(    !(PlayerInfo[playerid][pMember] == 1 || PlayerInfo[playerid][pLeader] == 1 ||
     PlayerInfo[playerid][pMember] == 2 || PlayerInfo[playerid][pLeader] == 2 ||
     PlayerInfo[playerid][pMember] == 3 || PlayerInfo[playerid][pLeader] == 3 )    ){ // Проверка, кто может/не может строить   
        return 1;
    }
       if(GetFreePlayerBort(playerid) == -1){
           SendClientMessage(playerid, COLOR_RED, " Объекты заканчились");
           return 1;
       }
       if(CurrentBort[playerid] != -1){
           SendClientMessage(playerid, COLOR_RED, " Сначало закрепите текищий объект командой /fixob");
           return 1;
       }
       CurrentBort[playerid] = GetFreePlayerBort(playerid);
       PlayerBorts[playerid][CurrentBort[playerid]] = CreateObject(983,0,0,0,0,0,0); // 983 ид объекта (можно поменять на свой)
       AttachObjectToPlayer(PlayerBorts[playerid][CurrentBort[playerid]], playerid, 0,1,-0.3,0,0,90);
       new tmpstr[MAX_STRING];
       format(tmpstr, sizeof(tmpstr), " Объект %d создан, осталось %d объектов", CurrentBort[playerid]+1, NumFreePlayerBorts(playerid));
       SendClientMessage(playerid, COLOR_WHITE, tmpstr);
       SendClientMessage(playerid, COLOR_YELLOW, " Теперь закрепите объект командой /fixob");
       return 1;
   }
   if(strcmp(cmd, "/fixbort", true) == 0)
   {
    if(    !(PlayerInfo[playerid][pMember] == 1 || PlayerInfo[playerid][pLeader] == 1 ||
     PlayerInfo[playerid][pMember] == 12 || PlayerInfo[playerid][pLeader] == 12)    ){ // проверка кто может/не может прикреплять объекты
        return 1;
    }
       if(CurrentBort[playerid] == -1){
           SendClientMessage(playerid, COLOR_RED, " Сначало пропишите  /ob");
           return 1;
       }
       new Float:PlPos[4];
       GetPlayerPos(playerid, PlPos[0], PlPos[1], PlPos[2]);
    GetPlayerFacingAngle(playerid,PlPos[3]);
       DestroyObject(PlayerBorts[playerid][CurrentBort[playerid]]);
       PlayerBorts[playerid][CurrentBort[playerid]] = CreateObject(983,
    PlPos[0]+floatcos(PlPos[3]+90, degrees), PlPos[1]+floatsin(PlPos[3]+90, degrees), PlPos[2]-0.3, 0, 0, PlPos[3]+90); 983 ид объекта (можно поменять на свой)
       CurrentBort[playerid] = -1;
       SendClientMessage(playerid, COLOR_YELLOW, " Объект успешно поставлен");
       return 1;
   }
   if(strcmp(cmd, "/delbort", true) == 0)
   {
    if(    !(PlayerInfo[playerid][pMember] == 1 || PlayerInfo[playerid][pLeader] == 1 ||
     PlayerInfo[playerid][pMember] == 12 || PlayerInfo[playerid][pLeader] == 12)    ){ // проверка кто может/не может удалять  объекты
        return 1;
    }
    tmp = strtok(cmdtext, idx);
    if(!strlen(tmp)){
        SendClientMessage(playerid, COLOR_RED, " Используйте: /delob [номер]");
        return 1;
    }
    new bortid = strval(tmp);
    if(bortid < 1 || bortid > MAX_PLAYER_BORTS){
        SendClientMessage(playerid, COLOR_RED, " объект должен быть от 1 до 10");
        return 1;
    }
    bortid--;
    if(DelPlayerBort(playerid, bortid)){
        new tmpstr[MAX_STRING];
        format(tmpstr, sizeof(tmpstr), " Объект %d удалён", bortid+1);
        SendClientMessage(playerid, COLOR_YELLOW, tmpstr);
    }
    else{
        SendClientMessage(playerid, COLOR_RED, " Объект не найден.");
    }
       return 1;
   }

Ну и последнее вставляем всё в public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger):

Code
#define MAX_PLAYER_BORTS 10 // Max построение число объектов   
new PlayerBorts[MAX_PLAYERS][MAX_PLAYER_BORTS];
new CurrentBort[MAX_PLAYERS];

GetFreePlayerBort(playerid){
   for(new i=0;i<MAX_PLAYER_BORTS;i++){
       if(!PlayerBorts[playerid][i]){
           return i;
       }
   }
   return -1;
}
NumFreePlayerBorts(playerid){
   new result = 0;
   for(new i=0;i<MAX_PLAYER_BORTS;i++){
       if(!PlayerBorts[playerid][i])
           result++;
   }
   return result;
}DelPlayerBort(playerid, bortid){
      if(PlayerBorts[playerid][bortid]){
          DestroyObject(PlayerBorts[playerid][bortid]);
          PlayerBorts[playerid][bortid] = 0;
          return 1;
      }
      return 0;
}

Кому понадобилось от + не откажусь

Дата: 07.09.2010, Вторник, 20:05:35 | Сообщение # $NUMBER
Группа: Пользователи
Сообщений: 31
Репутация: 5+
Enriko, По поводу сохранения специально не сделано, так как делал для себя для фракции ментов, фбр, армия. не большие обгародки =) Так что вот так =). По поводу вырезания да не отрицаю вырезал но из своего мода =) Спасибо за + Выкладываю всё что могу =) не суди строго я уверен что кому то понадобится =)
Дата: 22.09.2010, Среда, 05:39:15 | Сообщение # $NUMBER
Группа: Пользователи
Сообщений: 99
Репутация: 122+
HeGeL, + уже дал такчто сори через 24 часика дам ешо один и так репа -3 будит -2 всё луше чем -3 :D :D :D
  • Страница 1 из 1
  • 1
Поиск: