Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Система постеров для революции #3021

Closed
wants to merge 4 commits into from
Closed

Система постеров для революции #3021

wants to merge 4 commits into from

Conversation

cyberalexix
Copy link

@cyberalexix cyberalexix commented Jul 30, 2020

Собственно, постеры для революции.
Имеют уникальный спрайт на стене(выглядит не очень, но в ишуе всё равно о спрайте не говорилось).
image

Вообще, лучше бы создать отдельную ветку для реворка революции.

Каждой area присвоены очки(сейчас во всех зонах score равняется 1, кроме мостика, для него - 4), которые начисляются каждую минуту, если в них есть революционные постеры. Это лучше позже поправить, задав разное количество очков для разных зон.

Со старта раунда с гейммодом революция, создаётся глобальный пустой список revolution_posters для хранения ссылок на развешенные революционные постеры. Хед ревам с раундстарта выдаётся по два постера(для теста).
Сами свернутые революционные постеры наследуют /obj/item/weapon/contraband/poster и находятся, как это можно было понять ранее, под путём /obj/item/weapon/contraband/poster/revolutionary.
Свернутый постер нельзя повесить на z-уровнях отличающихся от станционных, а также в космосе и в area'х, в которых уже есть повешенный революционный постер.
После того, как вешается постер, создаётся /obj/structure/sign/poster и добавляется в глобальный список revolution_posters. Если его снять - он удаляет из этого же списка.
Каждую минуту раунда происходит цикл, который проходится по всем постерам в глобальном списке revolution_posters. За каждый постер начисляется сумма очков соответствующая значению в переменной score, которая находится в area постера. Если каким-то образом постер перестаёт существовать или вовсе пропадает из станции - он удаляется из глобального списка.

Если будут какие-то вопросы, пожелания, предложения или проблемы - пишите, исправлю.

Вот пример работы. Первое число - время с начала раунда, второе - время, когда пора проходиться по списку revolution_posters. tick означает, что прошел тик.
dreamseeker_BVRabxNm2g

close #975

  • Pull Request полностью завершен, мне не нужна помощь чтобы его закончить.
  • Я внимательно прочитал все свои изменения и багов в них не нашел.
  • Я запускал сервер со своими изменениями локально и все протестировал.
  • Я ознакомился c Guide to Contribute.

@cyberalexix cyberalexix requested a review from a team as a code owner July 30, 2020 18:30
@MrMagick2104
Copy link
Contributor

Фича крутая, но постер бы сам поярче сделать. Чтобы заметить проще было.
У нас, вроде, был красный постер в виде кулака с подписью REVOLUTION, где-то?

@ArmolitskiyCarpoeb
Copy link
Contributor

Что за очки и зачем они нужны?

@cyberalexix
Copy link
Author

cyberalexix commented Jul 30, 2020

Что за очки и зачем они нужны?

В ишуе сказано:

Добавить возможность захватывать области карты путем расклейки революционных постеров. Чем важнее зона, тем больше условных очков получают ревы. Нужно придумать к чему прикрутить очки и вынести в отдельные issues.

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

@anihillator
Copy link

Выдайте кабинетам глав по 2 поинта мб? Либо бригу, как вариант.

@cyberalexix
Copy link
Author

Выдайте кабинетам глав по 2 поинта мб? Либо бригу, как вариант.

Честно говоря, не знаю как геймдизайнеры/кодеры/кто-то ещё отреагируют на моё распределение очков, поэтому я и поставил только мостику количество скора больше, чем 1, и то, только для того, чтобы протестить правильную работу кода.

@Epicus7 Epicus7 added the 🔺 приоритет Нужно решить в первую очередь! label Jul 31, 2020
@Pos13
Copy link
Member

Pos13 commented Jul 31, 2020

А зачем вообще хранить все постеры в глобальном списке, да ещё и проверять их каждую минуту? Просто каждый раз при размещении постера points увеличивается, и при снятии или уничтожении (в Destroy()) уменьшается.

@cyberalexix
Copy link
Author

cyberalexix commented Jul 31, 2020

А зачем вообще хранить все постеры в глобальном списке, да ещё и проверять их каждую минуту? Просто каждый раз при размещении постера points увеличивается, и при снятии или уничтожении (в Destroy()) уменьшается.

При тесте, случилась интересная вещь.
К примеру, если поставить постер на втором з уровне станции и дропнуть бомбу прямо на постер, он телепортируется в карманное измерение на координаты 0, 0, 0 и не уничтожится. Ex_act я не решился прописать, так как боялся что-то задеть или нарушить. К тому же, спрайтов оврелеев повреждения постеров у меня нет, а просто удалять постер или оставлять от него спрайт содранного постера - не очень хорошо.
К тому же, если удалить стену под постером, то он просто провалится в опен спейс. Мы не можем знать заранее в момент написания кода что будет находится в этом опенспейсе - космос либо помещение, станция либо какой-то другой объект. Так что поэтому я и выбрал именно такой подход.

А ещё - не думаю, что сервер сильно напрягается во время проверки постеров. Функцию считаю не лишней.

Но, если при даже самом малейшем взрыве вас устроит полное удаление постера либо что-то подобное - могу дописать Ex_act и Destroy методы.

Comment on lines +750 to +751
if("revolution_posters")
return GLOB.revolution_posters;
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Нафиг это нужно?

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Нужно для отображения в списке глобальных переменных, который находится в вкладке Debug. Делал для тестов, оставил на всякий случай.

Comment on lines 55 to 71
/datum/antagonist/revolutionary/proc/equip_poster(mob/living/carbon/human/player)

var/obj/item/weapon/contraband/poster/revolutionary/P = new(get_turf(player))
var/list/slots = list (
"backpack" = slot_in_backpack,
"left pocket" = slot_l_store,
"right pocket" = slot_r_store,
"left hand" = slot_l_hand,
"right hand" = slot_r_hand,
)
for(var/slot in slots)
player.equip_to_slot(P, slot)
if(P.loc == player)
break
var/obj/item/weapon/storage/S = locate() in player.contents
if(istype(S))
P.forceMove(S)
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Не городи велосипеды, используй хелперы из inventory.dm. Например, equip_to_appropriate_slot и equip_to_storage_or_drop.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Спасибо, сейчас исправлю.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Заменил на equip_to_storage_or_drop, изменения загружены

Comment on lines +24 to +25
/datum/game_mode/revolution/process()
if(last_poster_update <= round_duration_in_ticks)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
/datum/game_mode/revolution/process()
if(last_poster_update <= round_duration_in_ticks)
/datum/game_mode/revolution/process()
..()
if(last_poster_update <= round_duration_in_ticks)

@@ -13,6 +13,7 @@
desc = "The poster comes with its own automatic adhesive mechanism, for easy pinning to any vertical surface."
icon_state = "rolled_poster"
var/serial_number = 0
var/revolution = FALSE
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Здесь лучше переменную назвать не "революция", а "революционный", т.е. revolutionary

Comment on lines +89 to +95
if(istype(B, /area/space))
to_chat(user, SPAN_WARNING("You can't place this poster in space."))
return

if(!(user.z in GLOB.using_map.station_levels))
to_chat(user, SPAN_WARNING("You can place this poster only on station levels,"))
return
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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

Comment on lines +97 to +100
for(var/obj/structure/P in GLOB.revolution_posters)
if(istype(B, get_area(P.loc)))
to_chat(user, SPAN_WARNING("A poster has been placed in this area already."))
return
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Тоже какие-то странные механоограничения вылазят. Пусть обклеивают отсек полностью, чо такого то? Просто когда считаем - надо собирать некий список зон, в который каждая зона может попасть ровно один раз. А потом по этому списку считаем очки.

Так логичнее будет, тебе так не кажется?

@@ -85,16 +112,22 @@
var/serial_number //Will hold the value of src.loc if nobody initialises it
var/poster_type //So mappers can specify a desired poster
var/ruined = 0
var/revolutionary = FALSE
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

О, а здесь нормальная переменная :)

Comment on lines +172 to +173
if(revolutionary)
GLOB.revolution_posters -= src
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Это лучше запихать в roll_and_drop

@@ -7,6 +7,7 @@
var/global/global_uid = 0
var/uid
var/area_flags
var/score = 1
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Лучше переименовать в strategic_importance. А то слово score ни о чем не говорит.

points += get_area(P.loc).score
else
GLOB.revolution_posters -= P
last_poster_update = round_duration_in_ticks + 1 MINUTES
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ты здесь складываешь ТИКИ и децисекунды. Нельзя так делать)

Нужно либо все считать в тиках, либо все в децисекундах.

revolution = TRUE

/obj/item/weapon/contraband/poster/revolutionary/New(turf/loc)
..(loc, serial_number=666)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

В poster/New нет аргумента serial_number. Кажется он тут вообще не нужен.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Зачем вообще New переопределять здесь? Кажется это лишнее.

Comment on lines +48 to +57
/datum/antagonist/revolutionary/equip(mob/living/carbon/human/revolutionary)
if(!..())
return 0

equip_poster(revolutionary)
equip_poster(revolutionary)

/datum/antagonist/revolutionary/proc/equip_poster(mob/living/carbon/human/player)
var/obj/item/weapon/contraband/poster/revolutionary/P = new(get_turf(player))
player.equip_to_storage(P)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Давай это пока спилим, ибо сами постеры по себе бесполезные сейчас. Думаю их пока не стоит вводить в игру.

@Epicus7 Epicus7 added 🔵 нужны ревью Ждет аппрувов от разработчиков или контрибутеров 💰 награда За эту задачу выставлена награда ⚪ ожидает автора В стадии разработки или требует какого-то еще действия от автора ПРа labels Aug 2, 2020
@TobyThorne
Copy link
Member

Больше трёх месяцев ожидает автора.

@TobyThorne TobyThorne closed this Dec 14, 2020
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
⚪ ожидает автора В стадии разработки или требует какого-то еще действия от автора ПРа 💰 награда За эту задачу выставлена награда 🔵 нужны ревью Ждет аппрувов от разработчиков или контрибутеров 🔺 приоритет Нужно решить в первую очередь!
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Революция: захват областей
8 participants