Forum Centralne

Wspólne forum Księstwa Sarmacji i jego prowincji

Przejdź do zawartości

W przypadku problemów z zalogowaniem usuń ciasteczka.

[Projekt] Eventy w folwarkach

[Projekt] Eventy w folwarkach

Postprzez Prokrustes 19 sie 2021, o 21:45

Celem projektu jest dodanie w systemie folwarków funkcjonalności eventów wpływających dodatnio lub ujemnie na produkcję danego produktu.

Stworzona została nowa tabela na bazie danych:

CREATE TABLE dsg_folwark_events (
eventId integer AUTO_INCREMENT,
produkt varchar(255),
efekt integer,
opis varchar(255),
poczatek datetime,
koniec datetime,
primary key (eventId)
)


... oraz definiujemy pierwszy event ...

INSERT INTO `dsg_folwark_events` (`eventId`, `produkt`, `efekt`, `opis`, `poczatek`, `koniec`) VALUES (NULL, 'pszenica', '50', 'W Księstwie Sarmacji trwają żniwa. Przez cały tydzień produkcja pszenicy jest większa o 50%.', '2021-08-23 00:00:00', '2021-08-29 23:59:59');


W dalszych krokach trzeba to obsłużyć w PHP.
Prokrustes
Diuk Athos
Markiz Awary Sarmackiej
Posłaniec Starych Bogów
... bo śmierć to nie koniec ...
Nikt jeszcze nie polubił tej wypowiedzi
Avatar użytkownika
Naczelna Izba Architektury
Starosarmacja
 

Re: [Projekt] Eventy w folwarkach

Postprzez Prokrustes 19 sie 2021, o 22:15

Po pierwsze chcemy by użytkownicy zostali poinformowani o trwających eventach.

Tworzymy nowy model (klasę modelu) dotyczącą eventów. W zasadzie jest to po prostu porządkowa przestrzeń nazw.
W modelu definiujemy jedną metodę która zwróci nam trwające eventy.

class Models_Folwark_Event {
public static function getOngoingEvents() : array {
global $database;
$database->query("SELECT * FROM dsg_folwark_events WHERE NOW() BETWEEN poczatek AND koniec");
return $database->getDane();
}
}


W klasie kontrolera pobierzemy te dane:

$view['events'] = Models_Folwark_Event::getOngoingEvents();


dzięki czemu będą dostępne dla "widoku" - czyli dla wyświetlanej użytkownikom strony.

W widoku ... w uproszczeniu wyświetlamy opisy trwających eventów

{% for event in events %}
{{ event.opis }}
{% endfor %}


co przekłada się na:


event.jpg


W kolejnym kroku trzeba nieco ulepszyć to jak informacja o evencie jest wyświetlana.
Prokrustes
Diuk Athos
Markiz Awary Sarmackiej
Posłaniec Starych Bogów
... bo śmierć to nie koniec ...
Nikt jeszcze nie polubił tej wypowiedzi
Avatar użytkownika
Naczelna Izba Architektury
Starosarmacja
 

Re: [Projekt] Eventy w folwarkach

Postprzez Prokrustes 19 sie 2021, o 22:37

Wyszło przy okazji, że fajnie by było mieć nazwę eventu.
Tak więc poszerzamy tabelę na bazie:

ALTER TABLE `dsg_folwark_events` ADD `nazwa` VARCHAR(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL AFTER `eventId`;


i aktualizujemy definicję eventu:

UPDATE `dsg_folwark_events` SET `nazwa` = 'Sarmackie Żniwa' WHERE `dsg_folwark_events`.`eventId` = 1;


W widoku używamy trochę czarnej magii "SemanticUI" (martwej alternatywy dla bootstrapa)

{% if events %}
<div class="ui grid">
{% for event in events %}
<div class="row">
<div class="column">
<div class="ui icon message">
<i class="star icon"></i>
<div class="content">
<div class="header">
{{ event.nazwa }}
</div>
<p>{{ event.opis }}</p>
</div>
</div>
</div>
</div>
{% endfor %}
</div>
{% endif %}


I mamy nieco lepszy komunikat:


event2.jpg


Tak więc... użytkownik jest już powiadomiony o evencie jeżeli tylko wejdzie na stronę folwarku.
W dalszej kolejności musimy się zająć tym, żeby efekt eventu faktycznie był brany pod uwagę przy przeliczeniach produkcji.
Chcemy też by informacja o evencie publikowała się na Discorda przy pierwszym przeliczeniu uwzględniającym event.
Prokrustes
Diuk Athos
Markiz Awary Sarmackiej
Posłaniec Starych Bogów
... bo śmierć to nie koniec ...
Nikt jeszcze nie polubił tej wypowiedzi
Avatar użytkownika
Naczelna Izba Architektury
Starosarmacja
 

Re: [Projekt] Eventy w folwarkach

Postprzez AFvTD 19 sie 2021, o 22:41

3 pytania:

1. Czy możliwe będzie, aby w jednym czasie trwał więcej niż jeden event wpływający na produkcję?
2. Jeżeli odpowiedź na pytanie 1. jest twierdząca, to czy podobne efekty będą sumować się, czy brany będzie pod uwagę tylko największy?
3. Jeżeli odpowiedź na pytanie 1. jest twierdząca - na jakiej zasadzie w przypadku dużej ilości trwających eventów, będzie wybierany ten, pokazujący się w "infoboxie"?
Nikt jeszcze nie polubił tej wypowiedzi
Avatar użytkownika
Rada Ministrów
Dwór Jego Książęcej Mości
Królestwo Hasselandu
Naczelna Izba Architektury
Dobry Obywatel
 

Re: [Projekt] Eventy w folwarkach

Postprzez Prokrustes 20 sie 2021, o 07:31

Na czuja bym powiedział, że wyciąganie wielu eventów to już jest więcej niż w życiu będzie potrzebne :D
Częściej nie będzie komu tego zaplanować niż żeby planować od razu wiele.

Natomiast jeżeli tak by się zdarzyło to efekty będą się "sumowały" - przy czym wiadomo mogą mieć wpływ na inne elementy folwarku.

Przy obecnej pętli w widoku pojawi się "x" infoboxów. Gdybym traktował poważnie ryzyko wystąpienia wielu eventów to pewnie bym zmienił tą pętlę żeby infobox był jeden a w nim "x" eventów.
Prokrustes
Diuk Athos
Markiz Awary Sarmackiej
Posłaniec Starych Bogów
... bo śmierć to nie koniec ...
Nikt jeszcze nie polubił tej wypowiedzi
Avatar użytkownika
Naczelna Izba Architektury
Starosarmacja
 

Re: [Projekt] Eventy w folwarkach

Postprzez AFvTD 20 sie 2021, o 12:19

A co z eventami typu deszcz, susza, awaria, szarańcza?
Nikt jeszcze nie polubił tej wypowiedzi
Avatar użytkownika
Rada Ministrów
Dwór Jego Książęcej Mości
Królestwo Hasselandu
Naczelna Izba Architektury
Dobry Obywatel
 

Re: [Projekt] Eventy w folwarkach

Postprzez Prokrustes 20 sie 2021, o 20:21

AFvTD napisał(a):A co z eventami typu deszcz, susza, awaria, szarańcza?


Co z nimi ? Nie widzę różnicy :D
Awaria tyle się różni, że prędzej powinna być indywidualna - per konkretny folwark lub ich grupę.
Jakieś zjawisko/kataklizm mogłyby być regionalne.

To jest kolejny ficzer do zaimplementowania ewentualnie. Myślę, że jakiś młody zdolny programista mógłby w folwarkach pogmerać bo to niczego "poważnego" nie wywali.

A kontynuując prace...

W jobie który codziennie w nocy przelicza produkcję dodano wywołanie metody pobierającej dane eventów.
Dodano kolejną metodę która te rekordy przekształca w tablicę w której kluczem jest nazwa produktu a wartością efekt (też przekształcony w mnożnik).

np.
$tab['pszenica'] = 1.5;
$tab['swinie'] = 0.5;

Mnożnik dodano do formuły wyliczającej wielkość produkcji.
Projekt zostanie zamknięty jak z poniedziałku na wtorek to się dobrze przeliczy ;)
Prokrustes
Diuk Athos
Markiz Awary Sarmackiej
Posłaniec Starych Bogów
... bo śmierć to nie koniec ...
Nikt jeszcze nie polubił tej wypowiedzi
Avatar użytkownika
Naczelna Izba Architektury
Starosarmacja
 


Powrót do Technikum im. Innowacji

Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 1 gość