Nach dem Vorschlag/Hilfegesuch bei Elrath.com von Neckie [hier: http://elrath.com/forums/index…=550&view=findpost&p=3387]
habe ich mal dieses Script geschrieben.
Es wandelt ein normales Gebäude auf der Karte (getestet mit Hütte des Magiers) in eine "Library of Enlightenment"(Bibliothek der Erleuchtung) um.
Wenn ein Held, der diese besucht, bestimmte Vorraussetzungen erfüllt, werden alle vier Grundattribute des Helden um 2 erhöht. Jeder Held kann sie natürlich nur einmal besuchen.
In der Funktion isHeroWorthy() wird überprüft, ob der Held berechtigt ist, die Bibliothek zu besuchen.
So wie es im Moment ist, darf der Held nur rein, wenn er
-entweder diplomatie hat und Level 4 oder höher ist,
-oder Führungskraft hat und Level 7 oder höher ist,
-oder Level 10 oder höher ist.
Das kann man aber nach Belieben anpassen. Wenn die Zeile "return 1" in der funktion ausgeführt wird, darf der Held rein, wenn die Zeile "return nil" ausgeführt wird, darf er nicht rein.
Die Nachrichten, die mit ShowFlyingSign angezeigt werden sind Textdateien im Unicode-Format im Verzeichnis der Map, wobei der Pfad natürlich an den Map-Namen angepasst werden muss. Sie enthalten bei mir den selben Text wie in den print() funktionen darüber.
Zur Installation:
Einem normalen Gebäude auf der Karte den Namen "Libraryofenlightenment" geben und dieses Script unter MapProperties/Script/Edit Script einfügen.
Achtung:
- Es funktioniert natürlich nur auf Singleplayermaps
- Es ist nicht vollständig getestet(also bitte Fehler, Bugs etc hier melden
- Ohne Veränderungen am Script funktioniert es nur mit einer Bibliothek.
Achso, der Bonus kann natürlich auch frei angepasst werden, in einer neueren Version lagere ich das vielleicht auch noch in eine externe Funktion aus, damit es leichter anzupassen ist.
---------------------------
--begin of library script--
--Version 0.1beta english--
--idea by Neckie[http://elrath.com/forums/index.php?showtopic=550]
--edited and completed by makrise[www.drachenwald.net]
--In my Testmap the ShowFlyingSign-messages contain the same text as in the print-function above them.
-------------------------
visitedHeroes={} --define table for heroes who already visited the library.
-------------------------
function isHeroWorthy(heroname)
if HasHeroSkill(heroname, 30) == true and GetHeroLevel(heroname) >=4 then -- if the hero got diplomacy and its level is higher or equal to 4
return 1 -- worthy
elseif HasHeroSkill(heroname, 4) == true and GetHeroLevel(heroname) >=7 then -- if the hero got leadership and its level is higher or equal to 7
return 1 -- worthy
elseif GetHeroLevel(heroname) >=10 then
return 1 -- worthy
else
return nil -- not worthy
end;
end;
-------------------------
function library(heroname)
print("Welcome to the Library, "..heroname);
if not isHeroWorthy(heroname)==nil then -- check by heroname, so hero can't reenter when hired by someone else
if not visitedHeroes[heroname]==1 then --if the hero has not already visited
print("You are worthy and you have not visited the Library before. You may enter now!");
ChangeHeroStat(heroname, 1, 2);
ChangeHeroStat(heroname, 2, 2);
ChangeHeroStat(heroname, 3, 2);
ChangeHeroStat(heroname, 4, 2);
-- Set visited flag to hero (so hero should not be able to re-enter the library, even if another player hired the hero)
visitedHeroes[heroname]=1;
print("Your Attributes were increased by 2. Thank you for visiting our library.");
ShowFlyingSign("/Maps/SingleMissions/libraryofenlightenment/library_visit_success.txt","Libraryofenlightenment",GetCurrentPlayer(),3);
--MarkObjectAsVisited('Libraryofenlightenment', heroname);--Doesn't seem to work as it should
else
print("I'm Sorry, but I can't help you. You already visited the Library.")
ShowFlyingSign("/Maps/SingleMissions/libraryofenlightenment/library_already_visited.txt","Libraryofenlightenment",GetCurrentPlayer(),2);
end;
else
print("Go Away. You are not worthy!");
--maybe add a MessageBox with requirements here
ShowFlyingSign("/Maps/SingleMissions/libraryofenlightenment/library_not_worthy.txt","Libraryofenlightenment",GetCurrentPlayer(),2);
end;
end;
------------------------
SetObjectEnabled('Libraryofenlightenment',nil);
Trigger(OBJECT_TOUCH_TRIGGER, 'Libraryofenlightenment', 'library');
--^^End of Library Script^^--
-----------------------------
Alles anzeigen