PDA

Просмотр полной версии : [Вопрос] Использование RemoveBuildingForPlayer в stock с объектами



KillStreak
06.03.2017, 08:58
Есть два стока, в одном хранятся удалённые объекты в другом созданные. Можно ли как то использовать RemoveBuildingForPlayer в стоке с созданными объектами притом что технически он находится в стоке с удалёнными но визуально располагается в стоке с созданными. Это вопрос оформления кода и его расположения для более лучшей навигации.




#include <a_samp>
#include <streamer>

public OnGameModeInit()
{
LoadObjects();
return 1;
}

public OnPlayerConnect(playerid)
{
LoadRemoveObjects(playerid);
return 1;
}

stock LoadObjects()
{
CreateDynamicObject(1111, 1000.39999, 2000.49999, 30.59999, 0.00000, 90.00000, 90.00000);
CreateDynamicObject(1111, 1000.39999, 2000.49999, 30.59999, 0.00000, 90.00000, 90.00000);
CreateDynamicObject(1111, 1000.39999, 2000.49999, 30.59999, 0.00000, 90.00000, 90.00000);
}

stock LoadRemoveObjects(playerid)
{
RemoveBuildingForPlayer(playerid, 2222, 1000.3999, -1999.3999, 10.8999, 0.20);
RemoveBuildingForPlayer(playerid, 2222, 1000.3999, -1999.3999, 10.8999, 0.20);
RemoveBuildingForPlayer(playerid, 2222, 1000.3999, -1999.3999, 10.8999, 0.20);
return 1;
}

Nash_Brigers
06.03.2017, 10:14
Если я верно понял вопрос, то нет, т.к. создаёшь ты объекты сразу для всех игроков (вызов один раз при загрузке мода), а удаляешь для каждого игрока индивидуально (вызов при каждом новом коннекте игрока).

DeimoS
06.03.2017, 10:43
В этом смысла мало, но вот:


#include <a_samp>
#include <streamer>

public OnGameModeInit()
{
LoadObjects();
return 1;
}

public OnPlayerConnect(playerid)
{
LoadObjects(playerid);
return 1;
}


stock LoadObjects(playerid = INVALID_PLAYER_ID)
{
if(playerid == INVALID_PLAYER_ID)
{
CreateDynamicObject(1111, 1000.39999, 2000.49999, 30.59999, 0.00000, 90.00000, 90.00000);
CreateDynamicObject(1111, 1000.39999, 2000.49999, 30.59999, 0.00000, 90.00000, 90.00000);
CreateDynamicObject(1111, 1000.39999, 2000.49999, 30.59999, 0.00000, 90.00000, 90.00000);
}
else
{
RemoveBuildingForPlayer(playerid, 2222, 1000.3999, -1999.3999, 10.8999, 0.20);
RemoveBuildingForPlayer(playerid, 2222, 1000.3999, -1999.3999, 10.8999, 0.20);
RemoveBuildingForPlayer(playerid, 2222, 1000.3999, -1999.3999, 10.8999, 0.20);
}
}

Гораздо лучше создать отдельную функцию для удаления объектов и дать ей название, по которому было бы понятно, что функция удаляет стандартные объекты

KillStreak
06.03.2017, 10:56
Если я верно понял вопрос, то нет, т.к. создаёшь ты объекты сразу для всех игроков (вызов один раз при загрузке мода), а удаляешь для каждого игрока индивидуально (вызов при каждом новом коннекте игрока).

Это я знал, просто думал как то визуально изменить код. А можно удалять объекты не для одного игрока индивидуально а сразу для всех удалить?

- - - Добавлено - - -


В этом смысла мало, но вот:


#include <a_samp>
#include <streamer>

public OnGameModeInit()
{
LoadObjects();
return 1;
}

public OnPlayerConnect(playerid)
{
LoadObjects(playerid);
return 1;
}


stock LoadObjects(playerid = INVALID_PLAYER_ID)
{
if(playerid == INVALID_PLAYER_ID)
{
CreateDynamicObject(1111, 1000.39999, 2000.49999, 30.59999, 0.00000, 90.00000, 90.00000);
CreateDynamicObject(1111, 1000.39999, 2000.49999, 30.59999, 0.00000, 90.00000, 90.00000);
CreateDynamicObject(1111, 1000.39999, 2000.49999, 30.59999, 0.00000, 90.00000, 90.00000);
}
else
{
RemoveBuildingForPlayer(playerid, 2222, 1000.3999, -1999.3999, 10.8999, 0.20);
RemoveBuildingForPlayer(playerid, 2222, 1000.3999, -1999.3999, 10.8999, 0.20);
RemoveBuildingForPlayer(playerid, 2222, 1000.3999, -1999.3999, 10.8999, 0.20);
}
}

Гораздо лучше создать отдельную функцию для удаления объектов и дать ей название, по которому было бы понятно, что функция удаляет стандартные объекты

А что даст создание такой функции, внесёт ясность в код и всё? Буду придерживаться своих убеждений в этом деле, но твой вариант тоже не плохой, спасибо.

DeimoS
06.03.2017, 11:02
А можно удалять объекты не для одного игрока индивидуально а сразу для всех удалить?

Нет. Удаление объектов возможно только когда игрок подключён к серверу.



А что даст создание такой функции, внесёт ясность в код и всё? Буду придерживаться своих убеждений в этом деле, но твой вариант тоже не плохой, спасибо.

Да.
Помещение кода в одну функцию тоже ничего не изменит, кроме как нарушит читаемость кода (не считаешь странным то, что функция называется "загрузка объектов", но в ней происходит удаление?)

KillStreak
06.03.2017, 11:14
Помещение кода в одну функцию тоже ничего не изменит, кроме как нарушит читаемость кода (не считаешь странным то, что функция называется "загрузка объектов", но в ней происходит удаление?)

Вертим как хотим, переименование никто не отменял.

ziggi
06.03.2017, 22:13
Вертим как хотим, переименование никто не отменял.

С таким "видением", в скрипте можно вообще одну функцию оставить, почему бы и нет?

KillStreak
07.03.2017, 08:02
С таким "видением", в скрипте можно вообще одну функцию оставить, почему бы и нет?

С таким не с таким, но это относится к маппингу и разве это так важно как называется его функция по большому счёту. Удаление там происходит или создание, тот кто сделал этот маппинг и поместил его туда сам задаёт название как удобно будет.

DeimoS
07.03.2017, 10:18
С таким не с таким, но это относится к маппингу и разве это так важно как называется его функция по большому счёту. Удаление там происходит или создание, тот кто сделал этот маппинг и поместил его туда сам задаёт название как удобно будет.

Читать код в последующем будет скриптер, а не маппер. И подобное название будет лишь вводить в заблуждение.
Представь, что ты приходишь в магазин и просишь продать тебе булку хлеба за 20 рублей. А тебе вместо хлеба дают палку колбасы за 120 рублей, на которой написано "булка хлеба". Не очень приятно будет, да?

KillStreak
07.03.2017, 11:17
Читать код в последующем будет скриптер, а не маппер. И подобное название будет лишь вводить в заблуждение.

Это только в том случае если маппинг передаётся скриптеру. А в другом маппер может работать индивидуально с маппингом в моде без помощи скриптера. Как ты мне сам еще и писал, закинул в инклуд и забыл.



Представь, что ты приходишь в магазин и просишь продать тебе булку хлеба за 20 рублей. А тебе вместо хлеба дают палку колбасы за 120 рублей, на которой написано "булка хлеба". Не очень приятно будет, да?

Я бы отнёс данный пример скорей к ошибочным запросам в той же БД, где на запрос получить хлеб за 20р мне выдаёт колбасу с названием хлеб за 120р. Этим примером ты скорей обозначил глупость маркетологов и производителей которые умудрились так назвать колбасу :)

DeimoS
07.03.2017, 11:24
В любом случае тебе придётся либо перехваты прописывать, либо скриптеру придётся вызов твоей функции в основном моде прописать.

Да и я всё ещё не понимаю почему ты так упёрто хочешь называть функции непонятными именами... Хотя твоё право.
Вопрос решён?

KillStreak
07.03.2017, 13:13
Давно уже решён.