added new finnish translation

fixed AI with invisibility

removed ghosted usernames on server
This commit is contained in:
uid68803 2004-02-24 19:16:35 +00:00
parent eebad5ef67
commit 241fe41f6d
6 changed files with 233 additions and 61 deletions

View file

@ -114,9 +114,8 @@ game_prefix=""
game_postfix=":n peli"
heir_throne="Valtaistuimen perillinen"
hordes_undead="The Dark Hordes (teaser)"
error_no_campaigns="There are no campaigns available"
error_no_campaigns="Yhtäkään kampanjaa ei ole saatavilla"
choose_campaign="Valitse kampanja jonka haluat pelata:"
@ -125,7 +124,7 @@ EASY="&elvish-fighter.png,Taistelija (helppo)"
NORMAL="*&elvish-hero.png,Sankari (normaali)"
HARD="&elvish-champion.png,Mestari (vaikea)"
lawful_description="Lainkuuliaiaset yksiköt taistelevat parhaiten päivällä, ja huonoiten yöllä.
lawful_description="Lainkuuliaiset yksiköt taistelevat parhaiten päivällä, ja huonoiten yöllä.
Päivä: +25% vahinkoon
Yö: -25% vahinkoon"
@ -135,48 +134,44 @@ chaotic_description="Kaoottiset yksik
Päivä: -25% vahinkoon
Yö: +25% vahinkoon"
invisible_description="Tämä yksikkö on näkymätön. Vihollisyksiköt eivät ne sitä, eivätkä voi hyökätä sen kimppuun."
invisible_description="Tämä yksikkö on näkymätön. Vihollisyksiköt eivät näe sitä, eivätkä voi hyökätä sen kimppuun."
slowed_description="Tämä yksikkö on hidastettu. Se liikkuu puolella normaalinopeudesta ja hyökkää taistelussa kerran normaalia vähemmän."
poisoned_description="Tämä yksikkö on myrkytetty. Se menettää 8 HP joka vuoro kunnes se voi etsiä parannusta kylästä tai ystävälliseltä yksiköltä jolla on parannuskyky.
poisoned_description="Tämä yksikkö on myrkytetty. Se menettää 8 HP joka vuoro kunnes se voi etsiä parannusta kylästä tai ystävälliseltä yksiköltä jolla on lääkintäkyky.
Myrkky ei tapa yksikköä, vaan jättää vähintään 1 HP."
heals_description="Parannus:
Yksikkö voi parantaa viereiset ystävälliset yksiköt vuodon alussa.
Yksikkö voi parantaa viereiset ystävälliset yksiköt vuoron alussa.
Parannettu yksikkö saa 4 HP vuorossa.
Parantaja voi parantaa maksimissaan 8 HP vuorossa.
A poisoned unit cannot be cured of its poison by a healer, and must seek the care of a village or a unit that can cure."
Parantaja ei voi poistaa myrkkyä, vaan myrkytetty yksikkö täytyy lääkitä kylässä tai toisella yksiköllä joka osaa lääkintäkyvyn."
cures_description="Cures:
This unit combines herbal remedies with magic to heal units more quickly than is normally possible on the battlefield.
cures_description="Lääkintä:
Tämä yksikkö käyttää yrttilääkkeitä ja taikuutta parantaakseen yksiköt nopeammin kuin normaalisti olisi taistelukentällä mahdollista.
This unit will care for all adjacent friendly units that are injured at the beginning of the turn.
A unit cared for by a curer may heal up to 8 HP per turn.
A curer may heal a total of 18 HP per turn, for all units it cares for.
A curer can cure a unit of poison, although that unit will receive no additional healing on the turn it is cured of the poison."
Tämä yksikkö voi lääkitä kaikki viereiset ystävälliset yksiköt vuoron alussa.
Lääkitty yksikkö saa maksimissaan 8 HP vuorossa.
Lääkitsijä voi lääkitä maksimissaan 18 HP vuorossa.
Lääkitsijä voi poistaa myrkytetystä yksiköstä myrkyn, mutta se yksikkö ei sillä vuorolla saa muuta parannusta."
teleport_description="Teleport:
This unit may teleport between any two friendly villages instantly."
teleport_description="Kaukosiirto:
Tämä yksikkö voi kaukosiirtyä välittömästi kahden ystävällisen kylän välillä."
leadership_description="Leadership:
This unit can lead friendly units that are next to it, making them fight better.
leadership_description="Johtaminen:
Tämä yksikkö voi johtaa viereisiä ystävällisiä yksiköitä, jolloin ne taistelevat paremmin.
Adjacent friendly units of lower level will do more damage in battle."
Alempitasoiset viereiset ystävälliset yksiköt tekevät enemmän vahinkoa taistelussa."
ambush_description="Ambush:
This unit can hide in forest, and remain undetected by its enemies.
ambush_description="Väijytys:
Tämä yksikkö voi piiloutua metsään jolloin viholliset eivät huomaa sitä.
Enemy units cannot see or attack this unit when it is in forest, except for any turn immediately after this unit has attacked."
Vihollisyksiköt eivät näe eivätkä voi hyökätä tätä yksikköä, jos tämä yksikkö on metsässä, eikä hyökännyt edellisellä vuorolla."
illuminates_description="Illuminates:
This unit illuminates the surrounding area, making lawful units fight better, and chaotic units fight worse.
Any units adjacent to this unit will fight as if it were dusk when it is night, and as if it were day when it is dusk."
skirmisher_description="Skirmishes:
This unit is skilled in moving past enemies quickly, and ignores all Enemy Zones of Control."
illuminates_description="Valaistus:
Tämä yksikkö valaisee ympäröivän alueen, jolloin lainkuuliaiset yksiköt taistelevat paremmin, ja kaoottiset hunommin.
Kaikki viereiset yksiköt taistelevat aivan kuin yö olisi iltahämärä, ja iltahämärä olisi päivä."
no_leader_to_recruit="Sinulla ei ole johtajaa joka voisi värvätä."
leader_not_on_start="Sinulla täytyy olla johtaja linnakkeessa jos haluat värvätä tai palauttaa yksikköjä."
@ -187,6 +182,7 @@ your_turn="On sinun vuorosi"
leader="Johtaja"
#buttons
main_menu="Valikko"
#ok_button="Hyväksy"
ok_button="Valitse"
cancel_button="Peruuta"
@ -202,9 +198,9 @@ turn_dialog_button="Vuoron ikkuna"
turn_bell_button="Vuoron Äänimerkki"
show_side_colours="Näytä joukkueen värit"
lawful=Lainkuuliainen
neutral=Neutraali
chaotic=Kaoottinen
lawful="Lainkuuliainen"
neutral="Neutraali"
chaotic="Kaoottinen"
auto_save="Automaattinen tallennus"
save_replay_message="Haluatko tallentaa uusinnan tästä skenaariosta?"
@ -219,6 +215,7 @@ campaign_button="Kampanja"
load_button="Lataa"
multiplayer_button="Moninpeli"
quit_button="Lopeta"
quit="Lopeta peli"
language_button="Kieli"
configure_sides="Muokkaa puolia:"
@ -238,7 +235,7 @@ awaiting_connections="Odotetaan pelaajien mukaantuloa"
position_taken="Täytetty"
multiplayer_save_name="moninpelin tallenne"
position_vacant="Vapaa"
observer="Tarkkailija"
observer="&misc/observer.png,Tarkkailija"
generic_player="pelaaja"
host_game="Isännöi moninpeli"
@ -247,7 +244,17 @@ load_game="Lataa peli"
create_new_game="Luo uusi peli"
name_of_game="Pelin nimi"
map_to_play="Pelattava kartta"
village_gold="Kylä Kultaa"
village_gold="Kylän tuotto vuorossa"
num_players="Pelaajia"
map_generator="Kartan luonti"
ranmap="Satunnaisesti luotu kartta"
regenerate_map="Luo uusi"
generator_settings="Asetukset..."
map_height="Korkeus"
map_width="Leveys"
mapgen_hillsize="Kukkuloiden koko"
mapgen_iterations="Iteraatioita"
mapgen_villages="Kyliä"
login="Login"
must_login="Tälle palvelimelle vaaditaan kirjautumista"
@ -259,15 +266,16 @@ advance_unit_message="Miksi yksik
version_save_message="Tämä tallenne on pelin toisesta versiosta. Haluatko silti yrittää ladata sen?"
bad_save_message="Ladattava tiedosto on korruptoitunut"
no_saves_heading="Ei tallennettuja pelejä"
no_saves_message="There are no saved games to load.
(Games are saved automatically when you complete a scenario)"
no_saves_message="Yhtäkään tallennettua peliä ei löytynyt.
(Peli tallennetaan automaattisesti kun olet suorittanut skenaarion loppuun)"
load_game_heading="Lataa peli"
load_game_message="Valitse ladattava peli"
replay_game_message="Show replay of game up to save point?"
show_replay="Show replay"
replay_game_message="Näytä pelin uusinta tallennuspisteeseen asti?"
show_replay="Näytä uusinta"
save_game_error="Verkkoyhteys on katkennut eikä peli voi jatkua. Haluatko tallentaa?"
network_sync_error="The games are out of sync and will have to exit. Do you want to save an error log of your game?"
multiplayer_save_name="multiplayer save"
network_sync_error="Pelit eivät ole samassa tahdissa ja sinun täytyy lopettaa peli. Haluatko tallentaa virhelokin pelistäsi?"
# FIXME: is this used?
# multiplayer_save_name="moninpelin tallenne"
end_game_heading="Loppu"
end_game_message="Olet pelannut kaikki tällä hetkellä pelattavat tasot"
defeat_heading="Tappio"
@ -275,20 +283,18 @@ defeat_message="Sinut on voitettu!"
victory_heading="Voitto"
victory_message="Olet voittanut!"
remaining_gold="Jäljellä oleva kulta"
early_finish_bonus="Early finish bonus"
per_turn="per turn"
turns_finished_early="Turns finished early"
retained_gold="Retained Gold"
fifty_percent="80% kullasta säilyy seuraavaan skenaarioon."
bonus="Bonus"
gold="Kultapalaa"
turn="Vuoro"
# FIXME: is this used?
#turn="Vuoro"
villages="Kyliä"
units="Yksikkö"
units="Yksikkö"
upkeep="Ylläpito"
income="Tulot"
name="Nimi"
type="Tyyppi"
hp="HP"
xp="XP"
moves="Siirtoja"
@ -300,9 +306,7 @@ rename_unit="Nime
scenario_objectives="Skenaarion tavoitteet"
recruit="Värvää"
recall="Kutsu takaisin"
recall_disallowed="You are seperated from your soldiers and may not recall them"
unit_list="Yksikkölista"
status_table="Status Table"
save_game="Tallenna peli"
end_turn="Lopeta vuoro"
@ -337,10 +341,18 @@ action_recall="Recall"
action_recruit="Värvää"
action_repeatrecruit="Toista värväys"
action_mute="Hiljennä äänet"
action_createunit="Luo yksikkö (Debug!)"
action_objectives="Skenaarion tavoitteet"
action_preferences="Asetukset"
action_quit="Lopeta peli"
action_renameunit="Nimeä yksikkö"
action_speak="Puhu"
action_unitlist="Yksikkölista"
save_hotkeys_button="Tallenna"
change_hotkey_button="Muuta pikanäppäintä"
hotkeys_dialog="Pikanäppäinten asetukset"
set_hotkey="Paina valitsemaasi pikanäppäintä"
set_hotkey="Paina valitsemaasi näppäintä"
hotkey_already_used="Tämä pikanäppäin on jo käytössä."
speed="Nopeus:"
@ -358,15 +370,13 @@ choose_weapon="Valitse ase"
options="Options"
preferences="Asetukset"
weapon_none="ei mitään"
#weapon_none="ei mitään"
weapon_none="ei asetta"
choose_scenario="Valitse skenaario"
no_objectives="Ei tavoitteita"
no_recall="There are no troops available to recall
(You must have veteran survivors from a previous scenario)"
not_enough_gold_to_recall_1="Sinulla täytyy olla vähintään"
not_enough_gold_to_recall_2="kultapalaa voidaksesi kutsua yksikön takaisin."
@ -387,7 +397,6 @@ versus="vs"
cancel="Peruuta"
terrain_info="Terrain Modifiers"
movement="Liikkuminen"
defense="Puolustus"
@ -449,4 +458,148 @@ keep="Linnoitus"
cave="Luola"
cavewall="Luolan seinämä"
# Phases of day
dawn="Auringonnousu"
morning="Aamupäivä"
afternoon="Iltapäivä"
dusk="Auringonlasku"
first_watch="Ilta"
second_watch="Yö"
underground="Maan alla"
# weapons
weapon_name_Lightning bolt="salama"
weapon_name_axe="kirves"
weapon_name_baneblade="baneblade"
weapon_name_battle axe="taistelukirves"
weapon_name_berserker frenzy="berserker frenzy"
weapon_name_bow="jousi"
weapon_name_chill wave="kylmänaalto"
weapon_name_claw="kynnet"
weapon_name_claws="kynnet"
weapon_name_club="club"
weapon_name_crossbow="varsijousi"
weapon_name_dagger="tikari"
weapon_name_darts="tikat"
weapon_name_dummy="dummy"
weapon_name_ensnare="ensnare"
weapon_name_entangle="entangle"
weapon_name_faerie touch="faerie touch"
weapon_name_fangs="torahampaat"
weapon_name_fireball="tulipallo"
weapon_name_fist="nyrkki"
weapon_name_fists="nyrkit"
weapon_name_halbard="halbard"
weapon_name_hatchet="hatchet"
weapon_name_ink="muste"
weapon_name_knife="puukko"
weapon_name_lance="lance"
weapon_name_lightbeam="lightbeam"
weapon_name_lightning="lightning"
weapon_name_longbow="pitkäjousi"
weapon_name_mace="mace"
weapon_name_magic="magic"
weapon_name_missile="missile"
weapon_name_net="verkko"
weapon_name_pike="pike"
weapon_name_pistol="pistooli"
weapon_name_rapier="rapier"
weapon_name_runic hammer="riimuvasara"
weapon_name_short sword="lyhytmiekka"
weapon_name_sling="linko"
weapon_name_spear="keihäs"
weapon_name_staff="sauva"
weapon_name_sword="miekka"
weapon_name_tentacles="lonkerot"
weapon_name_thorns="thorns"
weapon_name_thunderstick="thunderstick"
weapon_name_torch="soihtu"
weapon_name_touch="kosketus"
weapon_name_training sword="harjoittelumiekka"
weapon_name_trident="trident"
weapon_name_wail="wail"
weapon_name_water spray="water spray"
weapon_name_web="web"
weapon_special_backstab="backstab"
weapon_special_charge="charge"
weapon_special_drain="drain"
weapon_special_magical="maaginen"
weapon_special_marksman="marksman"
weapon_special_plague="plague"
weapon_special_poison="poison"
weapon_special_slow="slow"
weapon_special_slows="slows"
weapon_type_blade="terä"
weapon_type_cold="kylmä"
weapon_type_fire="tuli"
weapon_type_holy="pyhä"
weapon_type_impact="isku"
weapon_type_pierce="läpäisy"
# abilities
ability_ambush="väijytys"
ability_cures="lääkintä"
ability_heals="parannus"
ability_illuminates,cures="valaistus,parannus"
ability_leadership="johtaminen"
ability_regenerates="regenerointi"
ability_teleport="kaukosiirto"
# tutorial
tutorial="Haltioiden suojeluksessa"
tutorial_objectives="
Tehtävät:
@1. Hallitse kahta kylää joen lähellä.
@2. Palaa linnaan ja värvää haltioita.
@3. Lyö viholliset, hallitse läntisiä kyliä.
@4. Voita pimeyden papit.
@5. Voita epäkuolleet.
@6. Voita ryöväreitten johtaja.
Tappio:
#Konrad kuolee
#Delfador kuolee
#Jokin haltioiden johtajista kuolee
#Aika loppuu kesken"
tutorial_1="Kun he olivat löytäneet turvapaikan Haltioiden mailta, vanhempi maagi Delfador yritti opettaa nuorelle Konradille kaikki tiedot ja taidot joita tämä tulisi tarvitsemaan johtaakseen kansaansa."
tutorial_2="Sillävälin läheisessä metsässä joukko tummaan pukeutuneita hengenmiehiä tekivät sopimuksen hurjapäisten ryöväreitten kanssa."
tut1="Täällä on ollut hyvä olla, Konrad. Ystäviemme haltioiden kanssa olemme saaneet nauttia monesta rauhan vuodesta.
Mutta sinä et ole enää lapsi, Konrad. Jokaisen valtiaan täytyy oppia taistelemaan, ja osata johtaa armeijansa vasten kaikkia vihollisia. Pian on sinun aika vaihtaa puinen harjoittelumiekkasi oikeaan ja lunastaa perintösi. Mutta ennen sitä sinun täytyy osata joitain tärkeitä asioita."
tut2="Mitä minun pitää osata, Delfador?"
tut3="Ennen taisteluun ryhtymistä, sinun täytyy värvätä sotilaita. Siihen tarvitset kultaa, jota saat hallitsemistasi kylistä. Saadaksesi kylän hallintaan, riittää että siirrät jonkun joukostasi sinne.
@HARJOITUS
Siirry lähimpään kylään, jotta sieltä saatavalla kullalla voimme jatkaa."
tut3a="Siirtääksesi yksikköä, ensin valitse se..."
tut3b=".. ja sitten valitse kohde johon haluat sen siirtyvän.
Jos kohde on kaukana, voi yksiköltä kestää useampi vuoro päästä sinne. Numero kertoo kuinka monta vuoroa yksiköltä kestää perillepääsyyn."
tut3c="Kun olet tehnyt kaikki siirtosi, paina 'Lopeta vuoro'-nappia."
tut4a="Hyökätäksesi yksiköllä, ensin valitse se..."
tut5a="...ja sitten valitse kohde.
Tämän tehtyäsi sinun täytyy valita ase."
obj_staff="Hmmm... Tämä on Delfadorin... Mitähän sillä oikein tehdään?"
tut_staff="Tämä on vanha taikasauvani. Vaikka se ei ole kovinkaan hyödyllinen lähitaistelussa, sen taikuus voi siltikin osoittautua tappavaksi. Sen voimat ovat hiipumassa, joten se ei kestä kovinkaan kauaa. Älä pelkää sen käyttämistä - minä pidän huolen siitä ettet vahingoita itseäsi."
tut_staff2="Taikaesineet voivat auttaa tehtävässäsi, mutta pidä mielessäsi että jotkin esineet voi poimia vain jokin tietty yksikkö."
amb1="Yllätys! Kävelit suoraan ansaamme, typerä poika!"
amb2="Konrad!"
amb3="Delfador! Apua!"
amb4="Pysy rauhallisena, Konrad. Olen tulossa pelastamaan sinut. Yritä sillävälin puolustaa itseäsi parhaasi mukaan. Kun olet kylässä on heillä pienemmät mahdollisuudet vahingoittaa sinua. Katso -- yksi heistä on joessa. Yritä osua häneen!"
amb5="Taisteleminen on paras keino parantaa kykyjäsi. Kun saat tarpeeksi kokemusta (XP), tulet paremmaksi taistelijaksi.
Kun hyökkäät, voit valita mitä asetta käytät. Jokaiselle aseelle näytetään kolme tärkeää numeroa: vahinko jonka se tekee, kuinka monta hyökkäystä voit sillä tehdä, ja osumismahdollisuus. Vastustajan arvot näytetään samalla tavoin."
tut15="Tämä oli vain harjoittelua, Konrad, mutta jos tämä olisi ollut oikea taistelu, olisit nyt kuollut."
tut16="Konrad, tein parhaani pysäyttääkseni ne, mutta sinulla oli myös velvoitteena suojella minua. Siinä oli harjoittelut tältä päivältä."
recr1="Olet nyt valmis värväämään yksiköitä (paina hiiren oikeaa nappia ja valitse Värvää)."
recr2="Millaisia sotilaita minun pitäisi värvätä, Delfador?"
[/language]

View file

@ -295,7 +295,11 @@ void ai::do_move()
return;
}
move_to_targets(possible_moves,srcdst,dstsrc,enemy_srcdst,enemy_dstsrc,leader);
const bool met_invisible_unit = move_to_targets(possible_moves,srcdst,dstsrc,enemy_srcdst,enemy_dstsrc,leader);
if(met_invisible_unit) {
do_move();
return;
}
//recruitment phase and leader movement phase
if(leader != units_.end()) {
@ -596,7 +600,7 @@ bool ai::retreat_units(std::map<gamemap::location,paths>& possible_moves, const
return false;
}
void ai::move_to_targets(std::map<gamemap::location,paths>& possible_moves, move_map& srcdst, move_map& dstsrc, const move_map& enemy_srcdst, const move_map& enemy_dstsrc, unit_map::const_iterator leader)
bool ai::move_to_targets(std::map<gamemap::location,paths>& possible_moves, move_map& srcdst, move_map& dstsrc, const move_map& enemy_srcdst, const move_map& enemy_dstsrc, unit_map::const_iterator leader)
{
std::cerr << "finding targets...\n";
std::vector<target> targets;
@ -606,7 +610,7 @@ void ai::move_to_targets(std::map<gamemap::location,paths>& possible_moves, move
targets.insert(targets.end(),additional_targets_.begin(),
additional_targets_.end());
if(targets.empty()) {
return;
return false;
}
}
@ -645,8 +649,14 @@ void ai::move_to_targets(std::map<gamemap::location,paths>& possible_moves, move
const location arrived_at = move_unit(move.first,move.second,possible_moves);
//we didn't arrive at our intended destination. We return true, meaning that
//the AI algorithm should be recalculated from the start.
if(arrived_at != move.second) {
return true;
}
//if we're going to attack someone
if(weapon != -1 && arrived_at == move.second) {
if(weapon != -1) {
const location& attacker = move.second;
@ -675,6 +685,8 @@ void ai::move_to_targets(std::map<gamemap::location,paths>& possible_moves, move
std::pair<Itor,Itor> del = dstsrc.equal_range(arrived_at);
dstsrc.erase(del.first,del.second);
}
return false;
}
void ai::do_recruitment()

View file

@ -81,7 +81,7 @@ private:
bool get_villages(std::map<gamemap::location,paths>& possible_moves, const move_map& srcdst, const move_map& dstsrc, const move_map& enemy_srcdst, const move_map& enemy_dstsrc, unit_map::const_iterator leader);
bool get_healing(std::map<gamemap::location,paths>& possible_moves, const move_map& srcdst, const move_map& dstsrc, const move_map& enemy_srcdst, const move_map& enemy_dstsrc);
bool retreat_units(std::map<gamemap::location,paths>& possible_moves, const move_map& srcdst, const move_map& dstsrc, const move_map& enemy_srcdst, const move_map& enemy_dstsrc, unit_map::const_iterator leader);
void move_to_targets(std::map<gamemap::location,paths>& possible_moves, move_map& srcdst, move_map& dstsrc, const move_map& enemy_srcdst, const move_map& enemy_dstsrc, unit_map::const_iterator leader);
bool move_to_targets(std::map<gamemap::location,paths>& possible_moves, move_map& srcdst, move_map& dstsrc, const move_map& enemy_srcdst, const move_map& enemy_dstsrc, unit_map::const_iterator leader);
bool should_retreat(const gamemap::location& loc, const move_map& srcdst, const move_map& dstsrc, const move_map& enemy_srcdst, const move_map& enemy_dstsrc) const;

View file

@ -88,10 +88,16 @@ RESULT enter(display& disp, config& game_data)
std::string name = (**i.first)["name"];
if(name.size() > 30)
name.resize(30);
users.push_back(name);
}
assert(users.empty() == false);
std::cerr << "have " << users.size() << " users\n";
if(users.empty()) {
std::cerr << "ERROR: empty user list received\n";
users.push_back("error");
}
gui::menu users_menu(disp,users);

View file

@ -178,8 +178,6 @@ void server::run()
continue;
}
std::cerr << "data to game: " << data.write() << "\n";
//if this is data describing the level for a game
if(data.child("side") != NULL) {
@ -254,6 +252,8 @@ void server::run()
games_.erase(g);
}
std::cerr << "sending quitting player game list: " << initial_response_.get_children("user").size() << "\n";
std::cerr << initial_response_.write() << "\n";
//send the player who has quit the new game list
network::send_data(initial_response_,sock);

View file

@ -688,6 +688,7 @@ namespace gui {
network::connection network_data_dialog(display& disp, const std::string& msg, config& cfg, network::connection connection_num)
{
cfg.clear();
for(;;) {
const std::pair<int,int> stats = network::current_transfer_stats();
std::stringstream str;