29-01-2016, 18:57
To w kantońskim napisane prawda?
Ok, a ten network_server.cpp gdzie można znaleźć i jak otworzyć? Ja tam i tak raczej nie będę niczego zmieniał. Po prostu nie bardzo wiem, co tak naprawdę modyfikuje ten kod i nie mam odniesienia, a wątpliwości jednak jakieś mam.
1.Co na pewno, to samoloty powinny mieć wartość = 1 - przypuszczam, że one najmniej obciążają pathfindera. Statki też chyba powinny mieć mniejszy mnożnik (może 3? sprawdzę później). To jednak łatwo skorygować.
2.Pytanie, czy przypadkiem to...:
if (!Company::IsValidID(vc->owner) || !vc->IsPrimaryVehicle()) continue;
if (vc->type == VEH_ROAD)
vehicles += 1;
else if (vc->type == VEH_TRAIN)
vehicles += 3;
else if (vc->type == VEH_SHIP)
vehicles += 10;
else if (vc->type == VEH_AIRCRAFT)
vehicles += 10;
...nie będzie odczytywane np. wprost jako "limit" pojazdów dla firmy. Powinno być mnożnikiem dla obliczenia łącznej ilości wszystkich pojazdów, wszystkich obecnych firm w grze.
Dla przykładu:
Są 2 firmy: A, B
ilość w grze ; odczyt dla warunku
Firma A
pojazdy: 10; 10
pociągi: 200; 600
statki: 0; 0
samoloty: 0; 0
----------------------------------------------------------
Firma B
pojazdy: 300; 300
pociągi: 0; 0
statki: 30; 90
samoloty: 10; 10
----------------------------------------------------------
Łączna ilość pojazdów w grze: 550
Odczyt dla warunku uwzględniający wpływ na obciążenie gry: 1010
Ale z takim prostym warunkowaniem pojawia pewien istotny problem: np. wystarczy, że po x godzinach ktoś kupi ileś pojazdów i przekroczy limit - wtedy w jednym momencie może paść kilka firm.
Ewentualnie możnaby tak zrobić, aby czas nieobecności był naliczany dopiero po przekroczeniu jednego z limitów - to oczywiście wymaga odpowiedniego skrócenia czasu ochrony.
Ale, te wszystkie efekty, o których napisałem wcześniej najlepiej by było osiągnąć nie poprzez blokadę usuwania, ale modulację szybkości naliczania czasu nieobecności. Brzmi nieco zawile i być może nie jest zbyt proste, ale mogę się mylić.
Dla przykładu w pliku konfiguracyjnym tak by mniej więcej wyglądały nowe opcje (warto by było dać możliwość zmian):
--------------obecne-----------------------
autoclean_company = true
autoclean_protected = 960 (ta wartość powinna mieć znacznie wyższy limit niż 240, najlepiej bez ograniczeń)
autoclean_unprotected = 1
---------------nowe-------------------------
progressive_speed_ac = true
fastest_autoclean = 24
min_company_for_quicker_ac = 10
company_for_fastest_ac = 15
min_veh_for_quicker_ac = 1000
veh_for_fastest_ac = 2000
ac_mod_road_vehicles = 1
ac_mod_trains = 3
ac_mod_ships = 3
ac_mod_airplanes = 1
quicker_ac_young_company = true
young_company_maxage = 60
ac_young_company = 3
-----------------------------------------------
Jak to rozumieć? Jak by to działało?
Jeśli w grze jest mniej niż 10 firm i mniej niż 1000 pojazdów (mnożniki ac_mod), czas nieobecności jest naliczany powoli, bez zmian - w tym przypadku byłoby to 960 miesięcy.
Jeśli w grze jest więcej niż 10 firm lub więcej niż 1000 pojazdów, naliczanie czasu nieobecności ulega stopniowemu przyśpieszeniu. Brany pod uwagę byłby mocniej przekroczony limit.
Jeśli w grze pojawi się maksymalna wyznaczona w ustawieniach liczba firm lub pojazdów, naliczanie czasu osiąga maksymalną szybkość - w tym przypadku firmy bez graczy usuwane byłyby po 24 miesiącach nieobecności - czas naliczania nieobecności uległby przyśpieszeniu x960/24 = x40
Dodatkowo nowe firmy - tutaj poniżej 5 lat - miałyby znacznie skrócony okres ochronny do zaledwie 3 miesięcy. Można by też zastosować mnożnik czasu ochrony określany przez zyski jakie osiąga firma względem średniej wartości obecnych firm.
Ok, a ten network_server.cpp gdzie można znaleźć i jak otworzyć? Ja tam i tak raczej nie będę niczego zmieniał. Po prostu nie bardzo wiem, co tak naprawdę modyfikuje ten kod i nie mam odniesienia, a wątpliwości jednak jakieś mam.
1.Co na pewno, to samoloty powinny mieć wartość = 1 - przypuszczam, że one najmniej obciążają pathfindera. Statki też chyba powinny mieć mniejszy mnożnik (może 3? sprawdzę później). To jednak łatwo skorygować.
2.Pytanie, czy przypadkiem to...:
if (!Company::IsValidID(vc->owner) || !vc->IsPrimaryVehicle()) continue;
if (vc->type == VEH_ROAD)
vehicles += 1;
else if (vc->type == VEH_TRAIN)
vehicles += 3;
else if (vc->type == VEH_SHIP)
vehicles += 10;
else if (vc->type == VEH_AIRCRAFT)
vehicles += 10;
...nie będzie odczytywane np. wprost jako "limit" pojazdów dla firmy. Powinno być mnożnikiem dla obliczenia łącznej ilości wszystkich pojazdów, wszystkich obecnych firm w grze.
Dla przykładu:
Są 2 firmy: A, B
ilość w grze ; odczyt dla warunku
Firma A
pojazdy: 10; 10
pociągi: 200; 600
statki: 0; 0
samoloty: 0; 0
----------------------------------------------------------
Firma B
pojazdy: 300; 300
pociągi: 0; 0
statki: 30; 90
samoloty: 10; 10
----------------------------------------------------------
Łączna ilość pojazdów w grze: 550
Odczyt dla warunku uwzględniający wpływ na obciążenie gry: 1010
Ale z takim prostym warunkowaniem pojawia pewien istotny problem: np. wystarczy, że po x godzinach ktoś kupi ileś pojazdów i przekroczy limit - wtedy w jednym momencie może paść kilka firm.
Ewentualnie możnaby tak zrobić, aby czas nieobecności był naliczany dopiero po przekroczeniu jednego z limitów - to oczywiście wymaga odpowiedniego skrócenia czasu ochrony.
Ale, te wszystkie efekty, o których napisałem wcześniej najlepiej by było osiągnąć nie poprzez blokadę usuwania, ale modulację szybkości naliczania czasu nieobecności. Brzmi nieco zawile i być może nie jest zbyt proste, ale mogę się mylić.
Dla przykładu w pliku konfiguracyjnym tak by mniej więcej wyglądały nowe opcje (warto by było dać możliwość zmian):
--------------obecne-----------------------
autoclean_company = true
autoclean_protected = 960 (ta wartość powinna mieć znacznie wyższy limit niż 240, najlepiej bez ograniczeń)
autoclean_unprotected = 1
---------------nowe-------------------------
progressive_speed_ac = true
fastest_autoclean = 24
min_company_for_quicker_ac = 10
company_for_fastest_ac = 15
min_veh_for_quicker_ac = 1000
veh_for_fastest_ac = 2000
ac_mod_road_vehicles = 1
ac_mod_trains = 3
ac_mod_ships = 3
ac_mod_airplanes = 1
quicker_ac_young_company = true
young_company_maxage = 60
ac_young_company = 3
-----------------------------------------------
Jak to rozumieć? Jak by to działało?
Jeśli w grze jest mniej niż 10 firm i mniej niż 1000 pojazdów (mnożniki ac_mod), czas nieobecności jest naliczany powoli, bez zmian - w tym przypadku byłoby to 960 miesięcy.
Jeśli w grze jest więcej niż 10 firm lub więcej niż 1000 pojazdów, naliczanie czasu nieobecności ulega stopniowemu przyśpieszeniu. Brany pod uwagę byłby mocniej przekroczony limit.
Jeśli w grze pojawi się maksymalna wyznaczona w ustawieniach liczba firm lub pojazdów, naliczanie czasu osiąga maksymalną szybkość - w tym przypadku firmy bez graczy usuwane byłyby po 24 miesiącach nieobecności - czas naliczania nieobecności uległby przyśpieszeniu x960/24 = x40
Dodatkowo nowe firmy - tutaj poniżej 5 lat - miałyby znacznie skrócony okres ochronny do zaledwie 3 miesięcy. Można by też zastosować mnożnik czasu ochrony określany przez zyski jakie osiąga firma względem średniej wartości obecnych firm.
![OpenTTD #Polska - Polskie forum gry OpenTTD [ARCHIWUM] OpenTTD #Polska - Polskie forum gry OpenTTD [ARCHIWUM]](https://forum.openttd.pl/images/logo.png)
