Witaj Wesnothańczyku
Nawigacja
-> Poradniki dla graczy
-> Poradniki dla twórców
-> Zrzuty ekranu
-> Komendy do BfW
-> Ladder of Wesnoth
-> JAK NIE DOSTAĆ BANA?
-> Kodeks strony
-> Kanały IRC
-> Darczyńcy
-> Galeria
-> Kontakt
-> Szukaj

-> Władcy Taktyk
-> Polski Ranking Graczy

-> Era Magii
-> Eastern Europe at War
-> Forgotten Legends
-> Nowy Porządek
-> Ku Nieznanym Krainom
 
Aktualnie online
-> Gości online: 4

-> Użytkowników online: 0

-> Łącznie użytkowników: 2,107
-> Najnowszy użytkownik: ytosuco
 
Ankieta
Jak oceniasz najnowszą odsłonę Władców Taktyk 2017?









Musisz zalogować się, aby móc zagłosować.
 
Linki

















Polecane portale

Sygnaturki i buttony wesnoth.com.pl


 
8. Jednostki
Tworzenie jednostek

Jednostki to nasze oddziały, które widzimy na mapie i którymi dowodzimy. W tym tutorialu nauczysz się robić własne jednostki, a dokładniej je programować (rysowaniem zajmiemy się kiedy indziej).

Z czego składa się jednostka:

Warto odpowiedzieć na to pytanie zanim zaczniemy. Dzięki temu szybciej zrozumiemy na czym to wszystko polega.

Jednostka w Battle for Wesnoth składa się z obrazka w formacie .png i pliku konfiguracyjnego .cfg:
units1
white-cleric.png i Mage_of_Light.cfg <- to jedna i ta sama jednostka - nazwy mogą się różnić!

Obrazek jednostki:
Jak już wcześniej zaznaczyłem, nie będę pisał o tym, jak rysować jednostki, ale muszę zwrócić uwagę na to, jak gra przetwarza obrazek, który widzimy na ekranie.

units2


Obrazek jednostki składa się z 3 części, choć nie jest to regułą.
Image to nasz główny obrazek.
Ellipse to takie dziwne cuś pod jednostką, które zmienia kolor w zależności od drużyny. Ellipse jest o tyle ważne, że istnieje jego wariant dla jednostek bez "strefy kontroli" (np. poziomów 0), który musimy ręcznie ustawić w pliku .cfg, ale o tym później.
Halo to obrazek wyświetlany nad jednostką. Głównie używa się go do różnego rodzaju aur magicznych itp.


Plik konfiguracyjny:

Jest to prosty plik tekstowy zawierający informacje na temat statystyk naszej jednostki, wszystkich jej animacji i zdolności. Im prostsza jednostka tym prostszy jej plik konfiguracyjny.

W porzednim tutorialu mieliśmy przykładową erę z jedną jednostką. Był to Chłop. Spójrzmy na jego plik .cfg:

[unit_type]
id=Moja_Era_Chlop
name= _ "Chlop"
race=human
image="frakcja1/chlop.png"
ellipse="misc/ellipse-nozoc"
{MAGENTA_IS_THE_TEAM_COLOR}
hitpoints=18
movement_type=smallfoot
movement=5
experience=23
level=0
alignment=lawful
advances_to=Spearman,Bowman
cost=8
usage=fighter
description= _ "opis"
die_sound={SOUND_LIST:HUMAN_DIE}
{DEFENSE_ANIM "frakcja1/chlop-defend.png" "frakcja1/chlop.png" {SOUND_LIST:HUMAN_OLD_HIT} }
[attack]
name=widly
description=_"widly"
type=pierce
range=melee
damage=5
number=2
icon=attacks/pitchfork.png
[/attack]
[attack]
name=rzut
description=_"rzut widlami"
type=pierce
range=ranged
damage=4
number=1
icon=attacks/pitchfork.png
[/attack]
[attack_anim]
[filter_attack]
name=rzut
[/filter_attack]

[missile_frame]
begin=-100
end=0
image="projectiles/pitchfork-n.png"
image_diagonal="projectiles/pitchfork-ne.png"
[/missile_frame]
[frame]
begin=-200
end=-100
image="frakcja1/chlop-attack2.png"
sound={SOUND_LIST:THROW}
[/frame]
[if]
hits=yes
[frame]
begin=-100
end=50
image="frakcja1/chlop-ranged.png"
sound=spear.ogg
[/frame]
[/if]
[else]
hits=no
[frame]
begin=-100
end=50
image="frakcja1/chlop-ranged.png"
[/frame]
[/else]
[/attack_anim]
[attack_anim]
[filter_attack]
name=widly
[/filter_attack]
[frame]
begin=-250
end=-200
image="frakcja1/chlop.png"
[/frame]
[if]
hits=yes
[frame]
begin=-200
end=50
image="frakcja1/chlop-attack.png"
sound=spear.ogg
[/frame]
[/if]
[else]
hits=no
[frame]
begin=-200
end=50
image="frakcja1/chlop-attack.png"
sound=spear-miss.ogg
[/frame]
[/else]
[frame]
begin=50
end=150
image="frakcja1/chlop-attack2.png"
[/frame]
[frame]
begin=150
end=200
image="frakcja1/chlop.png"
[/frame]
[/attack_anim]

[/unit_type]

Niezły bełkot. Uprośćmy to. Tak wygląda ten sam plik, ale bez części o animacjach:

[unit_type]
id=Moja_Era_Chlop
name= _ "Chlop"
race=human
image="frakcja1/chlop.png"
ellipse="misc/ellipse-nozoc"
{MAGENTA_IS_THE_TEAM_COLOR}
hitpoints=18
movement_type=smallfoot
movement=5
experience=23
level=0
alignment=lawful
advances_to=Spearman,Bowman
cost=8
usage=fighter
description= _ "opis"
die_sound={SOUND_LIST:HUMAN_DIE}
[attack]
name=widly
description=_"widly"
type=pierce
range=melee
damage=5
number=2
icon=attacks/pitchfork.png
[/attack]
[attack]
name=rzut
description=_"rzut widlami"
type=pierce
range=ranged
damage=4
number=1
icon=attacks/pitchfork.png
[/attack]
[/unit_type]

Teraz wygląda to znacznie lepiej. Czas omówić wszystkie te elementy.

id - to unikatowa nazwa jednostki, niewyświetlana w grze. To właśnie z id będziemy korzystać np. przy ustawianiu jednostek na mapie, czy tworzeniu listy rekrutów.
name - wyświetlana nazwa jednostki (bez polskich znaków, jak z resztą wszędzie).
race - rasa jednostki. O tym za chwilę.
image - to nasz główny obrazek jednostki. Musi się znajdować w folderze images (lub w podfolderze tego folderu jak tutaj, frakcja1).
ellipse - to te dziwne cuś. Przyjmuje 2 wartości:
"misc/ellipse-nozoc" dla jednostek bez strefy kontroli i "misc/ellipse" dla pozostałych.
halo - tego akurat nie ma w tym kodzie, ale gdybyśmy chcieli dać naszemu chłopowi aurę to użyjemy tego klucza i podamy ścieżkę do obrazka.
{MAGENTA_IS_THE_TEAM_COLOR} - to specjalne makro zamienia określone odcienie różowego koloru na naszej jednostce na kolor drużyny. Więcej o tym w poradniku o rysowaniu jednostek.

hitpoints - ilość punktów życia naszej jednostki.
movement_type - typ ruchu. O tym za chwilę.
movement - ilość punktów ruchu.
experience - doświadczenie wymagane do awansu.
level - poziom jednostki.
alignment - charakter jednostki (lawful - praworządny, chaotic - chaotyczny, neutral - neutralny).
advances_to - tu podajemy id jednostki, na którą nasza ma awansować. Jeśli chcemy dać więcej jednostek to piszemy ich id po przecinkach (tak jak na liście rekrutów - patrz poprzedni tutorial). Jeśli nasza jednostka ma już dalej nieawansować to wpisujemy tu słowo null, a pod spodem dopisujemy w nowej linijce {AMLA_DEFAULT}.
cost - koszt rekrutacji jednostki.
usage - zastosowanie jednostki (fighter - wojownik, archer - łucznik, mixed fighter - uniwersalny, healer - lekarz, scout - zwiadowca)
description - opis jednostki.
die_sound - dźwięk jaki wyda jednostka w chwili śmierci. O tym później.



Teraz omówię bardziej skomplikowane rzeczy.

Rasa (race):
Rasa określa losowe imiona jednostek. Klucz race= może przyjąć takie wartości:
bat - nietoperz
mechanical - maszyna
drake - smok
dwarf - krasnolud
elf
goblin
gryphon - gryf
human - człowiek
merman
monster - potwór
naga
ogre - ogr
orc - ork
lizard - jaszczurka
troll
undead - nieumarły
wolf - wilk
wose - drzewiec

Typ ruchu (movement_type):
Czynnik ten determinuje koszt ruchu danej jednostki, jej modyfikatory terenowe oraz odporności. Twórcy BfW przygotowali całą gamę różnych już ustalonych konfiguracji. Dzięki nim nie musimy wszystkiego ręcznie ustawiać. Oto gotowe wpisy jakie możemy wykorzystać:
smallfoot - (ang. małe stopy). Jest to typ ruchu charakterystyczny dla zwykłych ludzi.
orcishfoot - typ ruchu orków
largefoot - dla jednostek o dużych stopach
armoredfoot - dla opancerzonych piechurów
elusivefoot - dla zwinnych, lekkich jednostek jak np. złodziej
mounted - jednostka konna
woodland - jednostka leśna np. elf
woodlandfloat - jednostka leśna latająca
treefolk - dla drzewców
fly - jednostka latająca
smallfly - drobna jednostka latająca
deepsea - dla potworów morskich
swimmer - pływak np. mermen
naga - dla nag
mountainfoot - jednostka górska np. ogr
dwarvishfoot - dla krasnoludów
undeadfoot - dla pieszych nieumarłych
undeadfly - nieumarły latający
undeadspirit - duch
lizard - dla jaszczurek
drakefly - smok latający
drakefoot - smok piechur

Pod każdą z tych nazw kryją się bardzo duże fragmenty kodu. Np. pod smallfoot kryje się to:
[movement_costs]
shallow_water=3
reef=2
swamp_water=3
flat=1
sand=2
forest=2
hills=2
mountains=3
village=1
castle=1
cave=2
frozen=3
fungus=2
[/movement_costs]

[defense]
shallow_water=80
reef=70
swamp_water=80
flat=60
sand=70
forest=50
hills=50
mountains=40
village=40
castle=40
cave=60
frozen=80
fungus=50
[/defense]

[resistance]
blade=100
pierce=100
impact=100
fire=100
cold=100
arcane=80
[/resistance]

Możemy to wkleić do naszej jednostki i dzięki temu precyzyjnie zmodyfikować jej obronę terenową lub odporności. Nie musimy wklejać wszystkiego. Załóżmy, że chcemy, aby nasza jednostka chodziła jak smallfoot, ale żeby nie mogła wchodzić na góry. Wystarczy wtedy napisać:
[movement_costs]
mountains=99
[/movement_costs]

99 oznacza, że jednostka potrzebuje 99 punktów ruchu, aby wejść na jakąś górę. Jeśli ma do dyspozycji tylko 5, to raczej nigdy na taki typ terenu nie wejdzie.

Teraz słowo o obronie terenowej.
Zwykłe jednostki piesze mają na płaskim terenie (ang. flat) obronę równą 40%. Jednak w kodzie jest 60. Dlaczego? Gra trochę inaczej interpretuje dane. 60 oznacza, że na płaskim terenie istnieje 60% szansy, że jednostka zostanie trafiona. Tak więc jeśli chciałbyś, aby np. we wiosce jednostka miała obronę równą 70% to musisz od 100 odjąć 70. Zostanie Ci 30 i taką wartość wpiszesz do pliku jednostki. Gra odczyta to w ten sposób: ta jednostka we wiosce ma 30% szansy na otrzymanie ciosu.
[defense]
village=30
[/defense]

Odporności:
Jednostki z typem ruchu smallfoot, np. włócznik, mają 20% odporności na tajemny typ obrażeń (arcane). Jak jednak widzisz, gra znów inaczej to widzi. Dla niej to 80. Co to znaczy? Ano to, że jednostka taka otrzymuje 80% obrażeń po takim ataku. Gdybyśmy chcieli zmienić tę wartość i zamiast odporności zrobić podatność, powiedzmy 10%, to wpiszemy 110 (110% obrażeń):
[resistance]
arcane=110
[/resistance]


Dźwięki jednostki
Nasza jednostka może wydawać różne odgłosy. Głównie sprowadza się to jęków i przedśmiertnych jęków. W naszym uproszczonym kodzie mamy tylko klucz "die_sound=". Odpowiada on za dźwięk śmierci naszej jednostki. U nas nie jest to jednak konkretny plik dźwiękowy a makro. Jak już wiesz, pod makrem kryje się jakiś większy kod i tak jest i w tym przypadku. Twórcy BfW przygotowali sporą ilość dźwiękowych makr, które losują nam jakiś jeden odgłos z większej grupy tak, aby uniknąć monotonności. Ponieważ trochę tych makr jest ja wymienię tylko niektóre. Resztę możesz podejrzeć sobie w pliku sound-utils.cfg. Znajdziesz go w katalogu głównym gry /data/core/macros.
Odgłosy śmierci reprezentują makra, które mają w nazwie DIE. Oto kilka z nich:
{SOUND_LIST:HUMAN_DIE} - dla mężczyzny
{SOUND_LIST:HUMAN_FEMALE_DIE} - dla kobiety
{SOUND_LIST:ORC_DIE} - dla orka
{SOUND_LIST:DWARF_DIE} - dla krasnoluda

itd.

Dodatkowe klucze opisujące jednostkę:
To, co wcześniej wymieniłem to nie wszystko. Są też inne, opcjonalne parametry, dzięki którym możemy opisać naszą jednostkę jeszcze dokładniej. Oto one:
attacks - ile razy jednostka może atakować na turę (domyślnie 1).
gender - płeć (przydaje się tylko wtedy, jeśli robimy drugi wariant jednostki.
profile - portret jednostki.
undead_variation - w co zamienia się nasza jednostka po zamianie w nieumarłego (możliwe wartości najlepiej podejrzeć u jednostek z domyślnej, na których się wzorujemy).
zoc - strefa kontroli. Czy jednostka ma strefę kontroli, czy też nie. Możliwe są tylko 2 wartości - yes lub no. Dzięki temu możemy sprawić, że nasza jednostka będzie miała strefę kontroli bez względu na swój poziom. Normalnie jednostki poziomu 0 nie mają stref kontroli.
[abilities] - zdolności jednostki. Umieszczamy tu gotowe makra zdolności, lub tworzymy własne. Oto zdolności z ery domyślnej:
  • {ABILITY_AMBUSH} - zasadzka
  • {ABILITY_CURES} - uzdrawia +8
  • {ABILITY_HEALS} - leczy +4
  • {ABILITY_ILLUMINATES} - oświetla
  • {ABILITY_LEADERSHIP_LEVEL_1 do ABILITY_LEADERSHIP_LEVEL_5} - poziom dowodzenia (najlepiej ustawiać taki sam jak poziom jednostki).
  • {ABILITY_NIGHTSTALK} - skradanie się w nocy
  • {ABILITY_REGENERATES} - regeneracja
  • {ABILITY_SKIRMISHER} - harcownik
  • {ABILITY_STEADFAST} - niezłomny
  • {ABILITY_SUBMERGE} - zanurzenie
  • {ABILITY_TELEPORT} - teleportacja
Możemy użyć kilku zdolności wpisując je jedna pod drugą. Pamiętaj o zamknięciu wszystkiego tagiem [/abilities]

Przykładowy fragment kodu dla jednostki ze zdolnościami regeneracji i zasadzki
[abilities]
{ABILITY_REGENERATES}
{ABILITY_AMBUSH}
[/abilities]



Tworzenie ataków jednostki:

[attack] - to, co znajduje się w tym tagu, dotyczy statystyk jednego z dostępnych ataków jednostki. Ustawiamy tu rodzaj obrażeń, ilość uderzeń i wiele innych. Oto co znajduje się wewnątrz:

name - to identyfikator ataku. Jest niewidoczny w grze, ale przydaje się do filtrowania animacji i eventów.
description - wyświetlana nazwa ataku.
type - typ obrażeń (blade - sieczne, pierce - kłute, impact - obuchowe, fire - ogień, cold - chłód, arcane - tajemny)
range - zasięg ataku (melee - wręcz, ranged - na odległość). Możesz wymyślić własny, wtedy na taki atak nie da się odpowiedzieć ani wręcz ani na odległość.
damage - ilość obrażeń na jeden atak
number - ilość wyprowadzanych ataków
icon - to ścieżka do ikony reprezentującej dany atak (obrazek musi być w folderze images naszej ery lub w folderze gry).
[specials] - tu umieszczamy specjalną zdolność ataku. Korzystamy tu z makr (można użyć kilka jedno pod drugim):
  • {WEAPON_SPECIAL_BACKSTAB} - cios w plecy
  • {WEAPON_SPECIAL_BERSERK}
  • {WEAPON_SPECIAL_CHARGE} - szarża
  • {WEAPON_SPECIAL_DRAIN} - wysysa
  • {WEAPON_SPECIAL_FIRSTSTRIKE} - pierwszy cios
  • {WEAPON_SPECIAL_MAGICAL} - magiczny
  • {WEAPON_SPECIAL_MARKSMAN} - strzelec wyborowy
  • {WEAPON_SPECIAL_PLAGUE} - plaga
  • {WEAPON_SPECIAL_POISON} - trucizna
  • {WEAPON_SPECIAL_SLOW} - spowolnienie
  • {WEAPON_SPECIAL_STONE} - zamiana w kamień
  • {WEAPON_SPECIAL_SWARM} - rój
Pamiętaj, aby zamknąć wszystko tagiem [/specials]

Dodatkowe klucze:
movement_used - ilość punktów ruchu jakie jednostka traci przy wyprowadzaniu ataku (domyslnie traci wszystkie)
attack_weight - jeśli użyjemy tego klucza i ustawimy na 0 to jednostka nigdy nie użyje tego ataku w ofensywie.
defense_weight - to samo co wyżej, lecz tym razem chodzi o obronę.


Pozostałe tagi:

[female] - tu zawarte są informacje o żeńskim odpowiedniku danej jednostki. Jeśli chcesz wiedzieć jak to działa, proponuję podejrzeć kod jakiejś jednostki z domyślnej, np. maga.
[event] - możesz tworzyć w jednostce eventy. Będą one aktywne tylko wtedy, kiedy jednostka znajduje się na polu bitwy.
[base_unit] - (ang. jednostka bazowa). Korzystając z tego tagu możemy kopiować jednostki bez przepisywsania wszystkich statystyk. Poza tym możemy w prosty sposób tworzyć warianty już istniejących jednostek ze zmodyfikowanymi określonymi współczynnikami. Najlepiej wyjaśnię to na przykładzie. Chcemy mieć w naszej erze Włócznika z domyślnej, ale znacznie silniejszego (dajmy mu 90 punktów życia). Zamiast kopiować jego plik i zmieniać id i wartość hitpoints możemy stworzyć od zera taką jednostkę:
[unit_type]
[base_unit]
id=Spearman
[/base_unit]
id=Moja_Era_Spearman
hitpoints=90
[/unit_type]
To się dopiero nazywa prosta jednostka :D

Teraz powinieneś już umieć tworzyć własne jednostki bez animacji. Najprostszym sposobem na ich robienie jest korzystanie z [base_unit] lub skopiowanie jakieś jednostki i zmiana jej statystyk wraz z obrazkiem. Ja tak stworzyłem całą Erę Magii, a wszystko zaczęło się od zwykłego maga. Aż trudno uwierzyć, nie? ;)

Dodawanie własnej jednostki
Jak już zrobiłeś własną jednostkę i chcesz ją rzucić do boju, to po prostu dodaj jej id do "recruit=" w pliku frakcji (poprzedni tutorial). Zapisz wszystko, odpal grę i wybierz grę lokalną. Jeśli coś źle wpisałeś to w trakcie ładowania wyświetli Ci się błąd. Może zdarzyć się tak, że gra nie wyłapie błędu, ale nie będzie działać rekrutacja jednostek (nie pojawi się okno z listą). Oznaczać to może, że popełniłeś literówkę wpisując id jednostki do listy rekrutów. W razie problemów zgłoś je na forum.

W następnym odcinku zajmiemy się animowaniem jednostek.

Komentarze
#1 | adriano dnia grudzień 28 2010 15:39:33
przyda sięWink Świetna robota!.
#2 | Sylar dnia grudzień 28 2010 17:29:27
Świetny tutorial, ja niestety jeszcze poczekam, zanim zacznę robić moją erę (bez grafik na razie). Wyczekuję paru odpowiedzi na pewien temat od pewnego forumowicza ^^
#3 | medalikarz dnia grudzień 28 2010 17:46:19
Sam do większości dochodziłem podczas tworzenia eryPfft a teraz jak ludzie będą mieli to na tacy może ruszy się trochę na tym forum Wink
#4 | Vetch dnia grudzień 29 2010 01:51:25
Ładnie opisane, do wszystkiego doszedłem sam, ale myślałem że coś więcej tu będzie na ten temat. Teraz czekam niecierpliwie na animowanie jednostek (czas się tym zająć).
#5 | ZawaPL dnia grudzień 29 2010 11:52:42
Podobnie jak inni sam do większości tego co tutaj jest napisane doszedłem sam. Mam tylko jedno pytanie: czy da się zastąpić ellipse czymś własnym? Na przykład żeby był to narysowany samodzielnie kwadrat/pięciokąt czy inny, dowolny kształt.
#6 | Sylar dnia grudzień 29 2010 13:54:44
Na pewno, w age bohaterowie mieli jakieś dziwne sześcio-czy ileś-kąty. Ale dla zwykłych jednostek raczej nie widzę sensu tego zmieniać. I mam nadzieję, że będzie tłumaczenie, jak zrobić dobry cień, bo na razie z gamą barw do cienia jednostki itp. to idzie mi tragicznie... okazało się, że nożownik w dzień ma cień koloru jasno-szarego ^^
#7 | medalikarz dnia grudzień 29 2010 14:31:28
ZawaPL ja mam jedną elipsę w Age dodaną jak znajomy dodał. Jeśli chodzi o zabawę z robieniem większej ilości to jest to trochę zbędne bo niektórzy nawet tego mogą nie zauważyć Wink
#8 | Filar dnia grudzień 29 2010 14:42:57
Z tego, co wiem istnieją też makra dotyczące ruchu. Np. Elficki Wojownik posiada {LESS_NIMBLE_ELF}, można też o tym wspomnieć w artykule.
#9 | Kuki1537 dnia grudzień 29 2010 17:34:09
Superosko Cool Może zdołam ukończyć moją erę.
#10 | Klaper dnia styczeń 11 2011 20:50:44
Muszę się wziąć za robotęba jak na razie to nic nie zrobiłem Frown
Ale twoja robota super!
Dodaj komentarz
Zaloguj się, aby móc dodać komentarz.
Oceny
Tylko zarejestrowani użytkownicy mogą oceniać zawartość strony

Zaloguj się lub zarejestruj, żeby móc zagłosować.

Świetne! Świetne! 94% [16 głosów]
Bardzo dobre Bardzo dobre 6% [1 głos]
Dobre Dobre 0% [Brak oceny]
Średnie Średnie 0% [Brak oceny]
Słabe Słabe 0% [Brak oceny]
Logowanie
Nazwa użytkownika

Hasło



Nie masz jeszcze konta?
Zarejestruj się

Nie możesz się zalogować?
Poproś o nowe hasło
 
Shoutbox
Musisz zalogować się, aby móc dodać wiadomość.

19/10/2017 00:09
@Druid, a tak z innej beczki Grin , to zajrzyj do akademii. Cool Spokojnej nocki. Wink

18/10/2017 22:47
- w nagrodę i będziesz widział kogo "spójników" tutaj uczysz. Grin Nie ma tego złego, bo te "korepetycje" poprawiły znacznie Twoje własne pisanie... Grin Nie sądzisz? Pfft ...

18/10/2017 22:44
@Jarom, cieszę się, że "wiele błędów crakena puszczasz bez echa" i nie wiercisz się nerwowo w fotelu przed monitorem jak je widzisz Grin, a jak będziesz grzeczny, to dam tobie mojego fb w nagr

18/10/2017 20:28
@Jarom To trochę pewnie uspokoiłeś crakena i te jego "tęsknoty", będą odrobinę mniejsze. Grin Tylko nie wiem czy doceni komplement „odniosły skutek” . Grin

18/10/2017 18:50
Spokojnie Jarom, spokojnie. Grin

18/10/2017 17:59
@Piko wiele błędów crakena puszczam bez echa bo nie przeszkadzają w czytaniu tekstu. Ale wstawienie dodatkowego wyrazu to nie jest błąd podpadający pod mózgową autokorektę.

18/10/2017 17:57
logiki. Chyba że po prostu zacząłeś pisać o rzeczach, o których masz jakiekolwiek pojęcie i stąd ta poprawa.

18/10/2017 17:55
@craken tyle twoich wpisów, a większość nie do mnie. Czyżbyś spodziewał się, że będę próbował wyłapać każdy źle postawiony przecinek? Poza tym moje działania odniosły skutek, twoje wypowiedzi nabrały

18/10/2017 17:27
@craken1 Skoro tak szybko działasz, to wstępne info co do terminów i nie tylko, Wink jest już w Akademii. Cool Wyczuwam też Twoją "tęsknotę" za Jaromem. Grin

18/10/2017 12:45
@Jarom tyle moich wpisów i żadnej analizy. Shock Czyżbyś w końcu któryś z nich zrozumiał? Wink Zaczynam się o to niepokoić. Grin @Druid, będę dziś na serwerze po 22.00. Cool

 
Wygenerowano w sekund: 0.06
5,197,882 unikalnych wizyt