Laravel background jobs

C++ JAVA
Post Reply
User avatar
Revelation
Потребител
Потребител
Posts: 777
Joined: Sun Mar 24, 2013 1:23 pm
Answers: 57

Post by Revelation » Fri Apr 27, 2018 5:01 pm

resources - съдържа събраните от потребителя ресурси
[sql]
user_id
total_gold
total_iron
total_stone
[/sql]

Пример:
Потребителя в момента има:
* Злато - 1500
* Желязо - 300
* Камък - 765
________________________________________

resources_per_min - съдържа по колко ресурси да събира на минута(ако искаш ги пази и на час, просто ще трябва да делиш на 60)
[sql]
user_id
gold_per_min
iron_per_min
stone_per_min
[/sql]

Пример:
Потребителя на час трябва да прави:
* Злато - 840 (или по 14 на минута)
* Желязо - 180 (или по 3 на минута)
* Камък - 540 (или по 9 на минута)
________________________________________

Процес на минута: (работа на scheduler-a)
Тик 1:
* Злато = 1500 + 14 = 1514
* Желязо = 300 + 3 = 303
* Камък = 765 + 9 = 774

Тик 2:
* Злато = 1514 + 14 = 1528
* Желязо = 303 + 3 = 306
* Камък = 774 + 9 = 783

... продължава надолу ...
________________________________________

Строеж на желязна мина за потребител Х:
1. Взимаме ресурси за построяването
* Злато = 1528 - 180 = 1348
* Желязо = 306 - 30 = 276
* Камък = 783 - 83 = 700

2. Регистрира се задача, която трябва да се изпълни след 10 минути
3. След 10 минути се изпълнява задачата
4. Желязната мина вече трябва да дава по 300 на час(5 на мин)
5. Ъпдейт на resources_per_min
* Злато - 840 (14 на мин) - не се променя
* Желязо - (стари 180 (3 на мин) ) - 300 (5 на мин) - само тази колона променяме от UpdateResourcesPerMinJob
* Камък - 540 (9 на мин) - не се променя
_________________________________________

след 10 минути (предполагаемото време за построяването на новата сграда) ресурсите са следните:

* Злато = 1348 + (14з./мин * 10 мин) = 1488
* Желязо = 276 + (3ж./мин * 10 мин) = 306
* Камък = 700 + (9к./мин * 10 мин) = 790
(Тези са се обновявали през това време от scheduler-a)

От тука вече имаме построена сграда и нова стойност за добива на желязо
... Тик 13:
* Злато = 1488 + 14 = 1502
* Желязо = 306 + 5 = 311
* Камък = 790 + 9 = 799

Тик 14:
* Злато = 1502 + 14 = 1516
* Желязо = 311 + 5 = 316
* Камък = 799 + 9 = 808

И т.н.


Баси, трябва да напиша статия. Аз колкото неща описах тука и както ги описах трябва да си търся и авторско право, хаха. :D

User avatar
teroristd
Много Редовен
Много Редовен
Posts: 1769
Joined: Thu Feb 18, 2010 11:50 am
Answers: 83

Post by teroristd » Fri Apr 27, 2018 5:13 pm

Ще ти дам да поиграеш безплатно :D.

User avatar
Revelation
Потребител
Потребител
Posts: 777
Joined: Sun Mar 24, 2013 1:23 pm
Answers: 57

Post by Revelation » Fri Apr 27, 2018 6:55 pm

Ти я направи пък. :D

User avatar
teroristd
Много Редовен
Много Редовен
Posts: 1769
Joined: Thu Feb 18, 2010 11:50 am
Answers: 83

Post by teroristd » Tue May 01, 2018 5:55 am

До тука всичко е ок, обаче закъсах с цените на сградите. Имам предвид че искам различните сгради да струват повече от един вид ресурс.

Пример:
Златна мина:
* Ниво 1 - 50 злато
* Ниво 2 - 50 злато и 50 камъни
* Ниво 3 - 100 камъни 50 желязо

Някакви идеи?

User avatar
anonimen
Много Редовен
Много Редовен
Posts: 1523
Joined: Mon Jun 11, 2012 6:07 pm
Answers: 162
Location: Parse error: unexpected "}" in /home/index.php on line 26

Post by anonimen » Tue May 01, 2018 6:10 pm

Към реда на съответната сграда в таблицата с нивата добави полета за цените - price_stone, price_gold. price_steel.

Ако е ясно, че няма да има други ресурси, това е най-удобния вариант.
Ако често сменяш видове ресурси може би ще трябва да извадиш цените в отделна таблица с колони примерно:
element_id [id към таблицата с нивата на сградите]
price_type [ enum 'stone'/'gold'/'steel' ]
price_value int

Но ако ще са само 3 веднъж завинаги, ще ти е по-удобно да си ги държиш като колони в таблицата с нивата.

User avatar
teroristd
Много Редовен
Много Редовен
Posts: 1769
Joined: Thu Feb 18, 2010 11:50 am
Answers: 83

Post by teroristd » Wed May 02, 2018 5:00 am

Да ги държа в таблицата с нивата мисля че няма да се получи, защото ново id се създава само при нов юзър, а нивата се ъпдейтват. Дори да добавя още полета няма да може да е различна цената за всяко ниво.

Пример:
Таблица с нивата:
* user_id - 1
* gold_mine - 0
* iron_mine - 0
* stone_mine - 0

Дори да направя още една таблица пак не виждам как ще определям цената за всяка мина и всяко ниво. За да стане май трябва да направя отделна таблица за всяка мина, която да е попълнена според това колко нива ще имам, например 10.

Може и да греша тотално, което няма да е невероятно :D .

User avatar
Revelation
Потребител
Потребител
Posts: 777
Joined: Sun Mar 24, 2013 1:23 pm
Answers: 57

Post by Revelation » Wed May 02, 2018 11:58 am

Не е нужно. В една таблица слагаш данните за всяко ниво на всяка сграда.

[sql]
building_id
level
price_gold
price_stone
price_iron
[/sql]

Като building_id и level могат да са ти индекси.

Така, когато строиш взимаш id на текущата сграда и текущото ниво на сградата + 1 и взимаш данните.

Така или иначе, ако нямаш формула за някакво експоненционално увеличение на ресурсите, ще трябва да си направиш таблица.

User avatar
teroristd
Много Редовен
Много Редовен
Posts: 1769
Joined: Thu Feb 18, 2010 11:50 am
Answers: 83

Post by teroristd » Wed May 02, 2018 12:05 pm

Нещо не можах да схвана идеята. Как ще изведа цената за всяка мина на всеки юзър ако е съставена от повече от един ресурс?

User avatar
Revelation
Потребител
Потребител
Posts: 777
Joined: Sun Mar 24, 2013 1:23 pm
Answers: 57

Post by Revelation » Wed May 02, 2018 12:18 pm

В тази примерна таблица записваш данните на всяка сграда, която имаш, като за съответното ниво записваш колко ресурс да иска. Следователно, ако искаш 2 ресурса за определено ниво, просто пишеш 0 на мястото на конкретния ресурс.
В отделна таблица си записваш за всеки потребител нивото на сградите.

Нужни ресурси на ниво на сграда
[sql]
building_id
level
price_gold
price_iron
price_stone
[/sql]

Нива на сградите за потребителите
[sql]
user_id
building_id
level
[/sql]

Сгради
[sql]
id
building_name
[/sql]

Така много лесно можеш обработваш данните.

User avatar
teroristd
Много Редовен
Много Редовен
Posts: 1769
Joined: Thu Feb 18, 2010 11:50 am
Answers: 83

Post by teroristd » Wed May 02, 2018 12:47 pm

Значи това са три таблици?

Post Reply