Перейти к содержимому



Добро пожаловать на пользовательский форум CR-MP.RU
Зарегистрируйтесь или авторизуйтесь на нашем форуме, чтобы получить доступ ко всем функциям.
Если у Вас уже имеется аккаунт, нажмите, чтобы войти.
Если у Вас нет аккаунта на нашем форуме, нажмите, чтобы перейти к регистрации. Возникли проблемы с регистрацией ? Обратитесь на почту admin@cr-mp.ru с вашей проблемой.
Фотография

Как дополнить работу лесопилки обработкой дерева. ( Gamenix RP )

- - - - - Вопрос

  • Закрытая тема Тема закрыта
Сообщений в теме: 3

#1
AndrewMikilov

a regular visitor to the forum.


Репутация: 59

Приветствую всех!

Я задался вопросом, как можно сделать что после рубки дерева, чтобы была еще обработка на станке.
То есть, игрок подходит рубит дерево, затем ему выдается объект рубленного дерева и он идет на станок, там, он обрабатывает их и получает дрова, затем несет на склад.

Игровой мод в котором хочу сделать такую систему - Gamenix RP.

public OnPlayerEnterCheckpoint(playerid)

if(GetPVarInt(playerid, "WoodWork") == 2 && PlayerToPoint(5, playerid, RandomWood[5][0], RandomWood[5][1], RandomWood[5][2]))
{
if(IsPlayerInAnyVehicle(playerid)) return true;
DisablePlayerCheckpoint(playerid);
RemovePlayerAttachedObject(playerid,0);
RemovePlayerAttachedObject(playerid,1);
RemovePlayerAttachedObject(playerid,2);
SetPlayerAttachedObject(playerid,0,341,6);
ApplyAnimation(playerid, "CARRY", "crry_prtial", 4.0, 0, 0, 0, 0, 1, 0);
new drova = 8+random(21);
AllPlayerDrova[playerid] += drova;
SendMes(playerid, COLOR_WHITE, "Вы принесли {F4A460}%i{ffffff} дров. Всего принесено дров: {CD5C5C}%i{ffffff} шт.", drova, AllPlayerDrova[playerid]);
drova = 0;
SetPVarInt(playerid, "WoodWork", 1);
new workjob = random(4);
SetPlayerCheckpoint(playerid, RandomWood[workjob][0], RandomWood[workjob][1], RandomWood[workjob][2],1.0);
return true;
}
if(GetPVarInt(playerid, "WoodWork") == 1)
{
if(IsPlayerInAnyVehicle(playerid)) return true;
DisablePlayerCheckpoint(playerid);
SetPlayerAttachedObject(playerid,0,341,6);
ApplyAnimation(playerid,"CHAINSAW","WEAPON_csaw",1.0,1,0,0,0,6200,0);
SetTimerEx("WoodLoaded",6000,false,"i",playerid);
return true;
}

case D_GUNJOB
case D_GUNJOB+2:
{
if(!response) return 1;
if(GetPVarInt(playerid, "WoodWork") == 0)
{
SetPVarInt(playerid, "SkinWood",GetPlayerSkin(playerid));
SetPVarInt(playerid, "WoodWork", 1);
if(PlayerInfo[playerid][pSex] == 1) SetPlayerSkin(playerid,16);
else SetPlayerSkin(playerid, 201);
SendClientMessage(playerid,COLOR_WHITE,"Поздравляем. Теперь идите на {0bda51}чекпоинт{FFFFFF}, чтобы срубить дерево.");
new workjob = random(4);
SetPlayerCheckpoint(playerid, RandomWood[workjob][0], RandomWood[workjob][1], RandomWood[workjob][2], 1.0);
SetPlayerAttachedObject(playerid, 0, 341, 6);
}
else
{
DeletePVar(playerid, "WoodWork");
SetPlayerSkin(playerid, GetPVarInt(playerid, "SkinWood"));
GiveMoney(playerid, AllPlayerDrova[playerid]*14);
format(string, sizeof(string), "Вы закончили работу. Ваш заработок: {00FF00}%d руб.", AllPlayerDrova[playerid]*7);
SendClientMessage(playerid, -1, string);
format(string, sizeof(string), "~b~+%d", AllPlayerDrova[playerid]*7);
GameTextForPlayer(playerid, string, 3000, 1);
if(IsPlayerAttachedObjectSlotUsed(playerid,0)) RemovePlayerAttachedObject(playerid,0);
if(IsPlayerAttachedObjectSlotUsed(playerid,1)) RemovePlayerAttachedObject(playerid,1);
if(IsPlayerAttachedObjectSlotUsed(playerid,2)) RemovePlayerAttachedObject(playerid,2);
DisablePlayerCheckpoint(playerid);
AllPlayerDrova[playerid] = 0;
SetPlayerSpecialAction(playerid, 0);
DeletePVar(playerid, "WoodSkin");
return true;
}
}


public WoodLoaded(playerid)

public WoodLoaded(playerid)
{
ApplyAnimation(playerid,"CARRY","crry_prtial",4.1,0,1,1,1,1);
RemovePlayerAttachedObject(playerid,0);
SetPlayerAttachedObject(playerid, 0, 1463, 1, 0.184699, 0.426247, 0.000000, 259.531341, 80.949592, 0.000000, 0.476124, 0.468181, 0.470769); // дрова в руках
SetPlayerCheckpoint(playerid,RandomWood[5][0],RandomWood[5][1],RandomWood[5][2],1.0);
SetPVarInt(playerid, "WoodWork", 2);
}



Буду очень благодарен, кто поможет решить эту проблему. С меня - спасибо!


Сообщение отредактировал juelz: 16 Май 2018 - 17:34
Чуть подправил красоты в спойлер <3


#2
EgasVegas

3D моделлер


Репутация: 730
"Буду очень благодарен, кто поможет решить эту проблему. С меня - спасибо!"

Спасибо, посмеялся.
За бесплатно никто не будет дописывать ничего.
А так, стучи в ЛС, за оплату всё сделаю.

#3
Vegos

Разработчик проекта Radiant RolePlay


Репутация: 30

 

 

Буду очень благодарен, кто поможет решить эту проблему. С меня - спасибо!

За "Спасибо" можно только сказать "Писать систему надо". А так пиши в личные сообщения форума или же в Вконтакте.



#4
Lefist

Гражданин


Репутация: 7

Мод не качал, время сильно не тратил, так что извините, если что-то не так.

 

Для того, чтобы это сделать, для начала нужно: 

  • Создать объекты для обработки на станке;
  • Координаты куда игрок будет сдавать дерево и где получать дрова;
  • Сделать какую-то систему работы станка, чтобы он обрабатывал этого дерево по очереди (если конечно это нужно);
  • Найти идентификаторы объектов и координаты куда крепить объект.

После чего нужно разобрать код работы и придумать изменения:

GetPVarInt(playerid, "WoodWork")

Как понимаю, это отвечает за статус работы, можно его продлить и усложнять свою работу до бесконечности. Продлеваем просто с помощью нового значения между рубкой дерева и его сдачей. В итоге получится для "WoodWork":

  1. Игрок рубит дерево;
  2. Игрок сдает дерево на обработку;
  3. Игрок получается дерева с обработки;
  4. Игрок сдает переработанное дерево.

Теперь можно приступить к написанию/изменению кода:

if(GetPVarInt(playerid, "WoodWork") == 2 && PlayerToPoint(5, playerid, RandomWood[5][0], RandomWood[5][1], RandomWood[5][2]))

За сдачу переработанного дерева взяли значение "4", поэтому изменяем на:

if(GetPVarInt(playerid, "WoodWork") == 4 && PlayerToPoint(5, playerid, RandomWood[5][0], RandomWood[5][1], RandomWood[5][2]))

Далее нужно изменить удаления объектов на игрке:

RemovePlayerAttachedObject(playerid,0);
RemovePlayerAttachedObject(playerid,1);
RemovePlayerAttachedObject(playerid,2); 

на свои:

SetPlayerAttachedObject(/* свои параметры */); 

После чего нужно изменить координаты следующего чекпоинта, после рубки дерева. Значит идем изменять:

public WoodLoaded(playerid)

Здесь нужно изменить:

RandomWood[5][0],RandomWood[5][1],RandomWood[5][2]

на свои координаты сдачи дерева на обработку, которые уже должны быть заготовлены.

 

Теперь нужно добавить обработку двух новых событий:

  1. Игрок сдает дерево на обработку;
  2. Игрок получается дерева с обработки.

Значит добавляем новые условия при входе на чекпоинт, за это у нас отвечает:

public OnPlayerEnterCheckpoint(playerid)

Добавляем наши скрипты на сдачу дерева и получения дров:

if(GetPVarInt(playerid, "WoodWork") == 2 && PlayerToPoint(5, playerid, /* координаты сдачи дерева */)) {
    /* Код для сдачи дерева на обработку... */
}
if(GetPVarInt(playerid, "WoodWork") == 3 && PlayerToPoint(5, playerid, /* координаты получения дров */)) {
    /* Код для получения дров... */
}
 

В итоге немного подумав и добавив пару строчек, можно получить готовую старую работу с новыми возможностями, а если подумать еще немного, то можно добавить еще много-много возможностей(например: обработку дерева самим игроком), тем самым сделать работу еще привлекательнее и интереснее.

 







Темы с аналогичным тегами Вопрос

Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 анонимных