Symulator fortowy - projekt

Status
Zamknięty.
Symulator fortowy - Perfectfort 1.01

↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
LINK DO FOLDERU
↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑


W linku znajduje się plik w formacie .cpp (możliwy do edycji) i gotowy do uruchomienia plik .exe
Jeśli ktoś nie ufa, może pobrać plik .cpp, otworzyć go w Devcpp (moja wersja 5.11), sprawdzić, a następnie samemu skompilować. Program jest darmowy.

W planach jest dodanie mapy drogowej, dodatkowego opisu w osobnym pliku, a także bieżące aktualizacje programu (poprzednie wersje będą trzymane), spis znanych błędów i patchnoty.

Jak to obecnie działa:
Po wpisaniu statystyk obu graczy (umiejętności, lvl, dmg broni) przeprowadzane są między nimi dwie bitwy: najpierw jeden atakuje, drugi broni i na odwrót. Przebieg bitwy jest wyświetlany, wynik póki co niet. Absorpcja i premia dowodzenia na razie nie są uwzględniane.
Bitwa przewidziana jest do wybicia jednej strony. Jednakże w przypadku słabych ataków względem obrony, niskich obrażeń lub sporego HP może trwać bardzo długo. Dlatego ograniczam to do 512 rund. (w warunkach rzeczywistych 2 żołnierzy nie powinno walczyć ze sobą dłużej niż 150 rund, jednakże przy 55 ciężko by było o wynik. Ma to zapobiegać też remisom.

Aby było łatwiej odczytać przebieg bitwy, zaleca się skopiować całość komendą ctrl+A i ctrl+C, a następnie wkleić w notatki.

Cały projekt będzie realizowany w podlinkowanym folderze. Na forum zamieszczam tylko podstawowe informacje, informacje o aktualizacji programu.

Zapraszam także do dyskusji, w której będę brać czynny udział, i na jej podstawie doskonalić projekt.

Uwaga!

Proszę wziąć pod uwagę, że podaje się tylko umiejętności, ubranek na chwilą obecną nie ma. Postać ustawiona na 100% HP może być niezwykle słaba, gdyż będzie miała tylko 25 ataku i 10 obrony. W realnym świecie nawet full HP otrzymuje niewielkie premie uniku (np. z amuletu), sporo z setów (3 ATT/DEF ze złotej strzelby i po 2 cechy), mnóstwo wytrzymałości z cechy siły. Bardzo popularne są sety, które nawet dając full HP dają dodatkowe i liczne umiejętności fortowe.


W razie konieczności proszę moderację o przeniesienie wątku i zgłaszanie uwag zamiast własnoręcznej moderacji/kasacji. Zastrzegam też prawo do postu pod postem w przypadku niewielkiej dyskusji i istotnego postępu w programie (regulamin na to przyzwala). Proszę również o kasację postów które zgłoszę, a w przypadku postów pożytecznych i równocześnie niewłaściwych - ich częściową edycję. Bo modka na jeden temat chyba się nie da...

Wyrażam zgodę na kopiowanie i modyfikowanie programu, jednakże proszę o edycję nicku autora (zmienić w pierwszym coutcie). Nie udzielam także wsparcia dla wersji tworzonych na bazie mojej, ale zmodyfikowanych. Przyjmuję za to pomoc (kontakt na priv).
 
Ostatnia edycja:
Mapa drogowa, informacje o błędach i dodatkowe informacje utworzone i dostępne.

Obecnie dla wersji 1.01 potrzeba wczytywania liczb z pliku i zapisu całego przebiegu do pliku.

Ktoś ogarnięty w C++ jest chętny pomóc w powyższym temacie? Kontakt na priv.
 
↓↓↓↓↓↓↓↓↓
LINK DO FOLDERU
↑↑↑↑↑↑↑↑↑


1.01
-wydawanie wyłącznie 32-bitowej wersji (różnicy to nie robi, jeśli tak, proszę o kontakt)
-regulowana liczba rund
-kara za odległość - można ją wpisać jako gotową wartość. Liczenie dystansu będzie później, o ile informacja będzie ogólnodostępna (wiki TW na razie jest niewystarczająca)
Kara za odległość / Ilość pól
-1 / 1
-2 / 2
-4 / 3
-5 / 4
-7 / 5
-9 / 6
-10/ 7
-12/ 8
-14/ 9
-16/ 10
-18/ 11
-19/ 12
-20/ 13
-22/ 14
-24/ 15
-zamiana kolejności wpisywanego lvlu i umiejętności
-gdy atakujący padnie, nie odda już strzału w tej samej rundzie
-Informacja o wyniku bitwy (kto wygrał i po ilu rundach)
-Przerwa pomiędzy dwoma bitwami
 
Ostatnia edycja:
https://wiki.the-west.net/wiki/Fort_Battles
Aiming
Each round, every player has an ‘attack’ and ‘defend’ bonus calculated for them. The greater the attack value, the more likely one is to hit their target and similarly the greater the defend value, the less likely one is to be hit themselves. (In other words, these values do not correspond to the attacking and defending sides.) When calculating whether a hit is landed successfully, the number used is randomly taken between zero (inclusive) and the corresponding value (exclusive). The higher of the randomised attack and defend values wins.

W skrócie: załóżmy że napakowałeś umiejek i masz 74 ataku i 61 obrony, a obrońca 55 ataku i 43 obrony.

Po krótce działa to tak, że jak ty strzelasz, to tobie losuje liczbę od 0 do 74, a przeciwnikowi od 0 do 43. Kto ma większą, trafia/unika.
Podczas kontry przeciwnikowi losuje liczbę od 0 do 55, a tobie od 0 do 61. Będziesz miał większą, unikasz. Mniejszą - gol.

Nie wiem jak to wygląda w praktyce z liczbami po przecinku (ma się np. 73.57). W programie uznałem zaokrąglenie do 2 miejsc po przecinku -a dokładnie pomnożyłem je przez sto, by były całkowite. Pozwala to wylosować liczbę całkowitą z przedziału, a takie się zdecydowanie łatwiej koduje, a błąd pomijalny bądź żaden.

Szczegóły znajdują się w kodzie programu, format .cpp daje się otworzyć zwykłym notatnikiem.
 
Ostatnia edycja:
z tego co slyszalem od jednego z adminow, to algorytm wykorzystywany w tw tak nie dziala

w odpowiedzi na ewentualne pytanie powiem, ze nie wiem jak dziala ale nie tak jak to opisales... choc taki sposob wydaje sie byc najbardziej intuicyjny i wlasnie dlatego o dokladnie taki sam zapytalem
 
Żeby być adminem nie trzeba ogarniać biegle wszystkiego, a z dobrymi układami nawet analfabeta może zdobyć stanowisko.

Póki nie spotkałem innej słusznej wersji, a obecna, z wiki najbardziej pokrywa się z długotrwałą obserwacją - będę takową stosować. Utrzyma się do czasu porządnego obalenia tej teorii, i to nie przez admina który bitwy nie rozegrał.
 
jak wiesz znam sie nieco na fortach i nie powolywalbym sie na admina, co do ktorego nie mam pewnosci co do kompetencji w aspekcie fortowej wiedzy
 
no nie ma teorii, po prostu dowiedzial sie od osob wyzej, ze tak to nie dziala ale nie powiedzieli mu jak

obstawialbym, ze są jakies przedzialy w stylu jak masz 0-20 to losuje Ci z 0-1 jak 21-30 to z 0-2, jak 80-100 to z 0-5 itd(oczywiscie wartosci sa wyssane z palca)

cos w tym stylu. oczywiscie nie mam zadnej pewnosci ze tak to moze dzialac, ale skoro napad i obrona wprost nie jest brana pod uwage, a ma jakąś wartośc to co innego niz przedzialy moze wchodzic w gre? w koncu da sie zauwazyc, ze jak masz wiecej to strzelasz/unikasz lepiej

a nicku nie podaje bo byla to prywatna rozmowa na szepcie, a nie ticket wiec szanujmy prywatnosc ;)
 
Nie zdziwiłbym się gdyby tak było. Ale w tym przypadku musiałaby wyjść niewiedza programistów.

Do wyznaczenia liczby losowej trzeba podać chyba ich ilość. Bez pomyślunku i jak rozpisać na np. 20 przedziałów - to łatwo podzelić na zakresy.

I tak zamiast ilości liczb równej atakowi/obronie można sobie zrobić przedział od np. 0-10 i zapisać że tych liczb jest 11. I tak dla każdego przedziału.

Tyle że TW robione jest chyba w Javie, a nie C++, to to może rządzić swoimi prawami, i wyznaczenie wielu tysięcy liczb z przedziału rzędu 10k może być bardziej skomplikowane niż w C++ (ten liczy to niemal natychmiast).
 
Po dłuższej przerwie powracam do projektu. Idzie on w stronę zamknięcia i przestanie być wspierany (jednakże dostępność kodu źródłowego pozwoli przejąć nad nim opiekę przez dowolną osobę). Póki co plany następujące:

-Porzucona idea ubrań i broni, można będzie jedynie wpisać docelowe dmg i bonusy wynikającego z łącznego ubrania (może się uda z parametrami ataku i obrony).
-Brak setów i klas postaci
-Docelowo dodane będą premie wynikające z umocnień, absorpcja, premia z dowodzenia i tego typu pierdoły.

Po usprawnieniu operacji odczytu i zapisu, a także wielu symulacjach - zostanie ogłoszony turniej pojedynkowy (fortowy).
-W skrócie
1. Gracze podsyłają rozkłady statystyk i wybierają np. zestaw broni wedle ustalonych zasad dla każdej rundy. Będzie obowiązywał sztywny formularz zgłoszeniowy, by można go było czytać programem (np. wpis rejestracyjny "AllOfThem 50 100 50 0 200 0 ...". Będą instrukcje co wpisać po kolei, a może nawet program który zada zestaw pytań i wykona plik, którego treść otworzy się notatnikiem i prześle.
2. System oparty na losowaniu par pojedynkowych - i zwycięzca przechodzi wyżej. (Czyli co rundę odpada połowa graczy). W przypadku liczby osób innej niż 4,8,16,32,64 etc - osoby bez pary przechodzą bez walki wyżej, ewentualnie wszyscy zawalczą z takim samym dodatkowym przeciwnikiem, i przejdzie 2^n najwyższych wyników.
3. Każdy serwer będzie miał osobny turniej (zapewne z wykluczeniem Chejena, Jici i nowszych). Będzie prowadzone po kolei lub dwa na raz - wszystkich równocześnie nie dam rady.
4. Nagrody będą na zasadzie rozdawnictwa. Na każdym serwerze jest co innego do ugrania - głównie mocniejsze i słabsze ubranka eventowe, spore ilości produktów (np. setki młotków na Arizonie), być może jakiś hajs. Wygrywać będzie po 3 graczy na serwer - nagrody kolejno słabsze lub różne, ale zbliżonej wartości, i wyższe miejsce wybiera. Dla pierwszych 2 miejsc nagrody powinny przekraczać wartość rynkową 100k$, niekiedy wielokrotnie. Możliwy patronat ze strony TWT, ale póki co takiego nie było.
5. Program oczywiście jest zbliżony do oryginalnej gry na bazie inżynierii wstecznej. Z uwagi na brak kodu źródłowego i nieudaną współpracę z supportem, nie uda się w pełni odtworzyć.
 
Próby dalszych działań na programie zakończyły się niepowodzeniem.

Program stawiam na nowo z innym podejściem (obiektowe zamiast "wszystko na raz"). Oznacza to dodatkowe opóźnienia, ale łatwiejszy postęp, a także wprowadzanie kolejnych, nawet wycofanych już, elementów.
 

DeletedUser9432

Gość
Gość
Gdybyś potrzebował pomocy, służę uprzejmie :)
Napisałem w wolnej chwili "reskillator" (wejście: umiejętności otrzymywane z eq; wyjście: najoptymalniejsze ze względu na sumę bonusów rozłożenie umiejętności i cech, modyfikowalny do samego ataku/obrony) oraz generator bonusów w setach (wejście: umiejętności i cechy postaci; wyjście: bonusy i HP w wybranym secie - do wyboru około ośmiu setów, ale to można łatwo i szybko zwiększyć).
Oba "projekciki" w C++ z uwzględnieniem klasy postaci, premki... :)

Przy okazji PROTIP: lepiej jest używać "\n" zamiast "endl". Endl wymusza opróżnianie bufora i przy częstym wywołaniu może Ci strasznie obciążyć program :)

Pozdrawiam,
V
 
Status
Zamknięty.
Do góry