Alternatives Belohnungssystem in Form von "Cheats"
» Siedler Map Source Forum » Siedler DEdK Script Forum » Alternatives Belohnungssystem in Form von "Cheats"
Seiten: 1
fritz_98
|
#1 12.02.2010 18:19 Beiträge: 472 |
Alternatives Belohnungssystem in Form von "Cheats"
Achtung! Dies ist keine Comfortfunktion!
Manchmal möchte man den Spieler doch auch belohnen, wenn er eine Quest gewonnen hat. (Vllt eine freiwillige Quest?)
Und weil er so fleissig war, bekommt er einen Cheatcode, den er im Pausefenster eingeben kann. Ob er diesen nun nur einmal oder dutzendmal eingeben kann, bleibt allein dem Mapper überlassen.
Hier ein kleines Anwendungsbeispiel:
--Das in die FMA: function FirstMapAction() Cheaz_Variablen() end --Das irgendwoanders hin... 100% anpassbar. function Cheaz_Variablen() pause_cheat1Used = false pause_cheat2Used = false pause_cheat3Used = false pause_cheat4Used = false end KeyPauseOld=KeyBindings_TogglePause KeyBindings_TogglePause=function() if pausecount == 0 then XGUIEng.ShowWidget( XGUIEng.GetWidgetID( "ChatInput" ), 1 ) GameCallback_GUI_ChatStringInputDone = function(_N) pause_cheatinput = _N end KeyPauseOld() pausecount = 1 elseif pausecount == 1 then if string.upper(pause_cheatinput) == "AN OLD MAN FROM CALCUTTA" and pause_cheat1Used == false then local mouseX, mouseY = GUI.Debug_GetMapPositionUnderMouse() local g = Logic.WorldGetSize() data={Logic.GetPlayerEntitiesInArea(1,Entities.PB_Headquarters1, mouseX, mouseY, g*10, 16)} local pos = GetPosition(data[2]) Tools.CreateGroup(1,Entities.PU_LeaderSword3,8,pos.X - 900,pos.Y,180) Message("Ein kleiner Trupp steht vor Eurem Haupthaus!") pause_cheat1Used = true elseif string.upper(pause_cheatinput) == "JUST FOR ONE MOMENT" and pause_cheat2Used == false then local mouseX, mouseY = GUI.Debug_GetMapPositionUnderMouse() local g = Logic.WorldGetSize() data={Logic.GetPlayerEntitiesInArea(1,Entities.PB_Headquarters1, mouseX, mouseY, g*10, 16)} local pos = GetPosition(data[2]) Tools.CreateGroup(1,Entities.PU_LeaderSword3,8,pos.X - 900,pos.Y,180) Tools.CreateGroup(1,Entities.PU_LeaderBow3,8,pos.X - 1200,pos.Y,180) Message("Ein mittelgrosser Trupp steht vor Eurem Haputhaus!") pause_cheat2Used = true elseif string.upper(pause_cheatinput) == "WHEN YOU ARE NOT IN TIME" and pause_cheat3Used == false then local mouseX, mouseY = GUI.Debug_GetMapPositionUnderMouse() local g = Logic.WorldGetSize() data={Logic.GetPlayerEntitiesInArea(1,Entities.PB_Headquarters1, mouseX, mouseY, g*10, 16)} local pos = GetPosition(data[2]) Tools.CreateGroup(1,Entities.PU_LeaderSword3,8,pos.X - 900,pos.Y,180) Tools.CreateGroup(1,Entities.PU_LeaderBow3,8,pos.X - 1200,pos.Y,180) Tools.CreateGroup(1,Entities.PU_LeaderPoleArm3,8,pos.X - 1050,pos.Y+250,180) Tools.CreateGroup(1,Entities.PU_LeaderPoleArm3,8,pos.X - 1050,pos.Y-250,180) Message("Ein grosser Trupp steht vor Eurem Haputhaus!") pause_cheat3Used = true elseif string.upper(pause_cheatinput) == "A REAL FRIEND" and pause_cheat4Used == false then local mouseX, mouseY = GUI.Debug_GetMapPositionUnderMouse() local g = Logic.WorldGetSize() data={Logic.GetPlayerEntitiesInArea(1,Entities.PB_Headquarters1, mouseX, mouseY, g*10, 16)} local pos = GetPosition(data[2]) Tools.CreateGroup(1,Entities.PU_LeaderSword3,8,pos.X - 900,pos.Y,180) Tools.CreateGroup(1,Entities.PU_LeaderBow3,8,pos.X - 1200,pos.Y,180) Tools.CreateGroup(1,Entities.PU_LeaderPoleArm3,8,pos.X - 1050,pos.Y+250,180) Tools.CreateGroup(1,Entities.PU_LeaderPoleArm3,8,pos.X - 1050,pos.Y-250,180) Tools.CreateGroup(1,Entities.PU_LeaderHeavyCavalry2,4,pos.X - 1200,pos.Y+500,180) Tools.CreateGroup(1,Entities.PU_LeaderHeavyCavalry2,4,pos.X - 1200,pos.Y-500,180) Tools.CreateGroup(1,Entities.PU_LeaderCavalry2,4,pos.X - 900,pos.Y+500,180) Tools.CreateGroup(1,Entities.PU_LeaderCavalry2,4,pos.X - 900,pos.Y-500,180) Message("Eine kleine Armee steht vor Eurem Haputhaus!") pause_cheat4Used = true end KeyPauseOld() XGUIEng.ShowWidget( XGUIEng.GetWidgetID( "ChatInput" ), 0 ) pause_cheatinput = "Fritz" pausecount = 0 end end
Ihr könnt genau erkennen, was passiert: Sobald ein bestimmter Satz im Pausefenster eingegeben wird, erscheinen so und so viele Truppen vor dem Haupthaus (hier eine Burg, wie gesagt: anpassbar!)
Diese Codes sollten möglichst "intelligente" Sätze sein, die eigentlich wenig mit der Sache zu tun haben.
Nochmal: Mir ging es hier mehr um die Idee, macht mit dem Beispiel oben, was ihr wollt.
LG
Fritz
warrior1024
|
#3 12.02.2010 18:52 Beiträge: 345 |
Wieso nur Truppen?
Gute Idee,
was man damit machen könnte! Man könnte Steine zerstören(Weg zu neuen Gebieten), Ressourcen wiederauffüllen, Ressourcen dem Spieler überlassen, man könnte sogar dafür sorgen, dass Einheiten billiger werden(per Logic-Funktionen), man könnte Technologien freischalten, man könnte ein Militärgebäude des Gegners zerstören und und und...
Tolle Idee!
____________________
"Banken machen keine Fehlentscheidungen! Haben Euch das Eure Eltern nicht beigebracht?"
- Bankier Samael Silren, Enderal
fritz_98
|
#4 12.02.2010 18:54 Beiträge: 472 |
Einstellungsache.
Ach ja, noch eins vergessen zu sagen:
Das hier muss auch noch in die FMA:
pausecount = 0
Sonst bekommt ihr einen Error.
Fritz
kingsia
|
#5 12.02.2010 19:05 Beiträge: 750 |
Was man auch damit machen könnte (aber das wird wirklich fies) ist der Karte so erstellen dass es nur zu gewinnen ist wenn man mit Hilfe diese "Cheats" "mogelt".
Es wird manche Spieler fast zum Wahnsinn bringen wenn sie ständig versuchen die Karte zu gewinnen, ohne Hilfe von diese "Cheats", wenn es dabei überhaupt nicht möglich ist.
Gruss
Kingsia
andre111
|
#6 12.02.2010 19:58 Beiträge: 220 |
Als Comfort-function:
Ich habs mal in ne comfort function "verwandelt":
--Das in die FMA: function FirstMapAction() Cheaz_Variablen("HALLO",cheat1,"BUHU",cheat2,"BLABLA",cheat3,"HEHEHE",cheat4) --Die Cheateingabe wird mit folgenden functionen gestartet: --1)Wird "HALLO" eingegeben, wird die function cheat1() aufgerufen --2)Wird "BUHU" eingegeben, wird die function cheat2() aufgerufen --3)... --4)... --Die Cheats können wärend der Pause eingegeben werden. end --Das irgendwoanders hin... function Cheaz_Variablen(_name1,_cal1,_name2,_cal2,_name3,_cal3,_name4,_cal4) pausecount = 0 pause_cheat1Used = false pause_cheat2Used = false pause_cheat3Used = false pause_cheat4Used = false aktivCheats(_name1,_cal1,_name2,_cal2,_name3,_cal3,_name4,_cal4) end function aktivCheats(_a,_aC,_b,_bC,_c,_cC,_d,_dC) CheatTable = { {text = _a,callb = _aC}, {text = _b,callb = _bC}, {text = _c,callb = _cC}, {text = _d,callb = _dC}, } KeyPauseOld=KeyBindings_TogglePause KeyBindings_TogglePause=function() if pausecount == 0 then XGUIEng.ShowWidget( XGUIEng.GetWidgetID( "ChatInput" ), 1 ) GameCallback_GUI_ChatStringInputDone = function(_N) pause_cheatinput = _N end KeyPauseOld() pausecount = 1 elseif pausecount == 1 then if string.upper(pause_cheatinput) == CheatTable[1].text and pause_cheat1Used == false then CheatTable[1].callb() pause_cheat1Used = true elseif string.upper(pause_cheatinput) == CheatTable[2].text and pause_cheat2Used == false then CheatTable[2].callb() pause_cheat2Used = true elseif string.upper(pause_cheatinput) == CheatTable[3].text and pause_cheat3Used == false then CheatTable[3].callb() pause_cheat3Used = true elseif string.upper(pause_cheatinput) == CheatTable[4].text and pause_cheat4Used == false then CheatTable[4].callb() pause_cheat4Used = true end KeyPauseOld() XGUIEng.ShowWidget( XGUIEng.GetWidgetID( "ChatInput" ), 0 ) pause_cheatinput = "Fritz" pausecount = 0 end end end
Erklährung steht im script!
vieleicht kann man es so einfacher nutzen.
FG
andre111
Dieser Beitrag wurde von andre111 am 13.02.2010 um 09:30 editiert.
aCid
|
#7 13.02.2010 00:39 Beiträge: 275 |
respekt!!!
____________________
Das ist und bleibt ein Spiel! - Wir sind hier nicht vor Gericht.
----------------------------------------------------------------------
Mapperhilfen für S5:
http://www.siedler-maps.de/forum/Siedler-DEdK-Script-Forum-27/index.htm
http://www.siedler-maps.de/for...und-andere-Ressourcen-8688.htm
http://www.siedler-maps.de/for...unktionen-Skripte-etc-8706.htm
fritz_98
|
#8 13.02.2010 10:31 Beiträge: 472 |
@andre:
Nur 4 "Cheats" wären möglich.
Ausserdem braucht die Pause-Funktion insgesamt nur einmal verändert werden, weshalb sich bei einer Comfortfunktion insgesamt nicht viel schenken würde.
andre111
|
#9 13.02.2010 11:47 Beiträge: 220 |
@fritz 98:
Stimmt! Deswegen habe ich die function nochmal umgeschrieben:
Der Vorteil: Man kann einen neuen Cheats irgendwann im Verlauf erstellen.
Erklährung steht wieder im Script:
--########################### --In die FMA: --aktivCheats() --########################### --Aufruf zum erstellen eines Cheats: --_text : Was eingegeben werden muss --_callback: Die function die bei richtiger eingabe aufgerufen wird. --Bsp: AddCheat("HALLO",cheat1) --In den Script: function AddCheat(_text,_callback) table.insert(CheatTable,{text = _text,callb = _callback,used = false}) end function aktivCheats() pausecount = 0 CheatTable = {} KeyPauseOld=KeyBindings_TogglePause KeyBindings_TogglePause=function() if pausecount == 0 then XGUIEng.ShowWidget( XGUIEng.GetWidgetID( "ChatInput" ), 1 ) GameCallback_GUI_ChatStringInputDone = function(_N) pause_cheatinput = _N end KeyPauseOld() pausecount = 1 elseif pausecount == 1 then cheatGeben = false for i = 1,table.getn(CheatTable) do if string.upper(pause_cheatinput) == CheatTable[i].text and CheatTable[i].used == false then CheatTable[i].callb() CheatTable[i].used = true cheatGeben = true elseif string.upper(pause_cheatinput) == CheatTable[i].text and CheatTable[i].used == true then Message("Du hast diesen Cheat bereits verwendet!") cheatGeben = true elseif i == table.getn(CheatTable) and not cheatGeben then Message("Dieser Cheat existiert nicht. \195\156berpr\195\188fe deine Eingabe!") end end KeyPauseOld() XGUIEng.ShowWidget( XGUIEng.GetWidgetID( "ChatInput" ), 0 ) pause_cheatinput = "Fritz" pausecount = 0 end end end
@fritz 98: Wenn der Code immernoch Nachteile hat kannstes mir ja wieder sagen.
FG
andre111
Dieser Beitrag wurde von andre111 am 13.02.2010 um 11:59 editiert.
aCid
|
#10 13.02.2010 19:02 Beiträge: 275 |
statt used auf true zu stellen, kannst auch gleich per remove den eintrag entfernen.
wird der durchlauf immer kuerzer.
____________________
Das ist und bleibt ein Spiel! - Wir sind hier nicht vor Gericht.
----------------------------------------------------------------------
Mapperhilfen für S5:
http://www.siedler-maps.de/forum/Siedler-DEdK-Script-Forum-27/index.htm
http://www.siedler-maps.de/for...und-andere-Ressourcen-8688.htm
http://www.siedler-maps.de/for...unktionen-Skripte-etc-8706.htm
andre111
|
#11 13.02.2010 19:31 Beiträge: 220 |
Zitat von aCid:
statt used auf true zu stellen, kannst auch gleich per remove den eintrag entfernen.
wird der durchlauf immer kuerzer.
@aCid:
Ja, aber dann kommt immer die Nachricht,dass der Cheat nicht existiert.(manche werden dann wahrscheinlich verrückt, und fragen sich warum der Cheat nicht functioniert. So wird mitgeteilt, dass der Cheat zwar existiert, aber nicht mehr verwendet werden kann)
FG
andre111
Seiten: 1