Spielerumfrage

» Siedler Map Source Forum » Siedler DEdK Script Forum » Spielerumfrage

Seiten: 1

Mordred
#1
28.04.2010 16:35
Beiträge: 939

Spielerumfrage

Das hier soll eine Spielerumfrage sein.
Das heißt, hier kann jeder Spieler Vorschläge zu DEdK-Maps allgemein machen.
DAS heißt: Hier könnt Ihr persönliche Meinungen, Wünsche zu Spielefunktionen und Landschaftsgestaltung abgeben.
Mapper können diese Vorschläge usw. durchlesen und in Ihre Maps einbinden.
Ich habe dies in der Hoffnung, manchen Spielern und Mappern (auch mir ) zu helfen,
da schon ein paar Kommentare über manche Arbeiten von Mappern erschienen sind,
die so vielleicht vermieden werden können.
Vorallem werden können Maps so besser auf die Spieler zugeschnitten werden.
Viel Spass!

warrior1024
#2
28.04.2010 16:52
Beiträge: 345

So was gibt´s schon. Leider haben sich die Spieler nicht so wirklich beteiligt.
Genannter Thread
Der Thread wäre besser in dem DEdK-Forum erstellt worden und von den Admins von irgendeinem Mapname auf DEdK abgeändert worden(hats schonmal gegeben). Leider kommen wahrscheinlich keine Spieler ins Skriptforum

Ich wünsche mir nur, dass mir niemand meine Story klaut und ich glaube nicht, dass ein Mapper einfach so Storys verschenkt. Meine Ideen für Skript-Add-Ons, die ich erstellen kann, verschenke ich auch nicht.

Aber:
Ich würde mir mal eine Map wünschen, in der man ähnlich wie in ItM2 Truppen nicht global aufwertet, sondern nur auf die Gruppe bezogen. Das am besten nur auf bestimmten Plätzen, um bessere Kontrolle von Seiten des Skripters zu erreichen. Z.B. fängt jeder Soldat als BattleSerf(Miliz) an.

warrior1024

____________________
"Banken machen keine Fehlentscheidungen! Haben Euch das Eure Eltern nicht beigebracht?"
- Bankier Samael Silren, Enderal

Kalle
#3
28.04.2010 20:30
Beiträge: 1150

nun, ähhh, ja.. ähmmmm, Ideen hagelt es bei mir nur so beim scripten. Leider lassen sich nicht alle umsetzen. Aber Wünsche hätte ich auch genug....

Was ich immer wieder schade finde, dass man bei den Maps entweder kaum oder viel zu viel Bauplatz hat. Es heißt doch Siedeln.... Mehr Anspruch, ob und welche Gebäude gebaut werden können ist schon was...

Oder im Bereich der KI: Die Gegner haben sogenannte Halte-Punkte (Way-Points). Das bedeutet: Wenn ich als Spieler denen auf halben Weg entgegen komme, rennen die einfach an mir vorbei... Finde ich blöd (lassen sich dabei aber einfach abputzen....) ! Mehr Taktik (im bauen oder kämpfen) wäre wünschenswert....

Oder mehr Gimmicks. Wie bei Anno die Bürgerrevolte, ein Jahrmarkt zur Belustigung, oder statt Forschung die reale Produktpiraterie: Wer keine Kanoen bauen kann, muss halt welche beim Feind "organisieren"....

Noch mehr?

Gruß Kalle

____________________
Lieber Siedeln statt (fern)sehen.....

Peter-FS
#4
28.04.2010 22:19
Beiträge: 1086

Den Spieler entscheiden lassen!

Ich denke, dass man es nicht allen Spielern recht machen kann. Man sieht es an den Kommentaren, den einen ist es zu viel Kampf, dem anderen zu leicht, dem nächsten ist es gerade recht.

Vielleicht sollten wir versuchen, mehr den Spieler entscheiden zu lassen.

Für meine neue Map überlege ich gerade, am Anfang ein Briefing zu machen, wo der Spieler selbst entscheiden kann ob er es leichter oder schwer haben möchte. Man kann dann z.B. die Anzahl der Angreifer reduzieren oder die Stärke der Einheiten anpassen. Die Resourcen spielen ja gerade am Anfang auch eine große Rolle, wie schnell man sein Dorf oder eine Verteidigung aufbauen kann.

Weitere Anregung: Länderspezifische Map, z.B. Sachsen, Hamburg usw. (Meine neue heißt 'Dario bei den Bayern' da kann man auch geschichtlich was lernen, vor allem ich. ). Mal sehen ob es den Testern gefällt?

Gruß aus Bayern
Peter

____________________
Man muss nicht alles wissen, man muss nur wissen wo es steht!

Mordred
#5
29.04.2010 16:37
Beiträge: 939

Zitat von kalle:

Wie bei Anno die Bürgerrevolte


da sind entwürfe von mir, klappen prächtig
die habe ich aus "Der Friedliche Söldner" kopiert. (von mir!!)
Frei zur verwendung

Mordred_Revoluzzer()

------------++Revoluzzer++----------------
function Mordred_Revoluzzer()
 Revoluzzertime		= 0
 Revoluzzertrigger	= math.random(1200,3000)
 idRevoluzzertrigg 	= StartSimpleJob("Revoluzzertrigg")
end
function Revoluzzertrigg()
 Revoluzzertime	= Revoluzzertime + 1
  if (Revoluzzertime > Revoluzzertrigger) then
   Revoluzzion()
   EndJob(idRevoluzzertrigg)
  end
end
function Revoluzzion()
Revoluzzersanzahl = 0
local mitte = Logic.WorldGetSize()/2,Logic.WorldGetSize()/2
 Revoluzzers = SucheAufDerWelt(1,0,8000,GetPosition(mitte))
  for i=1,table.getn(Revoluzzers) do
   Revoluzzer = Revoluzzers[i]
    if Logic.IsWorker(Revoluzzer) == 1 then
     CreateEntity(3,Entities.PU_BattleSerf,GetPosition(Revoluzzer))
	 DestroyEntity(Revoluzzer)
     Revoluzzersanzahl = Revoluzzersanzahl + 1
    end
  end
 Message("Eine Revolution!!")
 Revoluzzertime		= 0
 Revoluzzertrigger	= math.random(900,3000)
 idRevoluzzertrigg 	= StartSimpleJob("Revoluzzertrigg")
end


Mordred_Putsch()

-------++Putsch++-----------
function Mordred_Putsch()
 Putschtime = 0
 Putschtrigger = math.random(4000,5000)
 idPutschTr = StartSimpleJob("PutschTr")
end
function PutschTr()
Putschtime = Putschtime + 1
 if Putschtime > Putschtrigger then
  Putsch()
  EndJob(idPutschTr)
 end
end
function Putsch()
Deserteurnumber = 0
local mitte = Logic.WorldGetSize()/2,Logic.WorldGetSize()/2
 Deserteure = SucheAufDerWelt(1,0,Logic.WorldGetSize(),GetPosition(mitte))
  for i=1,table.getn(Deserteure) do
   if Logic.IsLeader(Deserteure[i]) == 1 then
    if Logic.IsHero(Deserteure[i]) == 0 then
     if Logic.IsSerf(Deserteure[i]) == 0 then
      ChangePlayer(Deserteure[i],3)
	  Deserteurnumber = Deserteurnumber + 1
     end
    else 
     SetHealth(Deserteure[i],0) -- kille Helden - dann ists schwieriger ;)
	end
   end
  end
 Message("Ein Putsch!")
 Mordred_Putsch()
end


braucht beides:

-------------+SucheaufderWelt+------------------
function SucheAufDerWelt(_player, _entity, _groesse, _punkt)
  local punktX1, punktX2, punktY1, punktY2, data
  local gefunden = {}
  local rueck
  -- version kingsia
  if not _groesse then
    _groesse = Logic.WorldGetSize()
	_groesse = math.floor(_groesse * 0.71)
  end
  if not _punkt then
    _punkt = {X = _groesse/2, Y = _groesse/2}
  end
  if _player == 0 then
    data ={Logic.GetEntitiesInArea(_entity, _punkt.X, _punkt.Y, _groesse, 16)}
  else
    data ={Logic.GetPlayerEntitiesInArea(_player,_entity, _punkt.X, _punkt.Y, _groesse, 16)}
  end
  if data[1] >= 16 then 
    local _klgroesse = _groesse / 2 
    local punktX1 = _punkt.X - _groesse / 4
    local punktX2 = _punkt.X + _groesse / 4
    local punktY1 = _punkt.Y - _groesse / 4
    local punktY2 = _punkt.Y + _groesse / 4
    rueck = SucheAufDerWelt(_player, _entity, _klgroesse, {X=punktX1,Y=punktY1})
    for i = 1, table.getn(rueck) do
      if not IstDrin(rueck[i], gefunden) then
		table.insert(gefunden, rueck[i])
		end
	end
	rueck = SucheAufDerWelt(_player, _entity, _klgroesse, {X=punktX1,Y=punktY2})
    for i = 1, table.getn(rueck) do
      if not IstDrin(rueck[i], gefunden) then
        table.insert(gefunden, rueck[i])
      end
    end
    rueck = SucheAufDerWelt(_player, _entity, _klgroesse, {X=punktX2,Y=punktY1})
    for i = 1, table.getn(rueck) do
      if not IstDrin(rueck[i], gefunden) then
        table.insert(gefunden, rueck[i])
      end
    end
    rueck = SucheAufDerWelt(_player, _entity, _klgroesse, {X=punktX2,Y=punktY2})
    for i = 1, table.getn(rueck) do
      if not IstDrin(rueck[i], gefunden) then
         table.insert(gefunden, rueck[i])
      end
    end
  else
    table.remove(data,1)
    for i = 1, table.getn(data) do
      if not IstDrin(data[i], gefunden) then
        table.insert(gefunden, data[i])
      end
    end
  end
  return gefunden
end
function IstDrin(_wert, _table)
  for i = 1, table.getn(_table) do
    if _table[i] == _wert then 
        return true 
    end 
  end
  return false
end


Zitat von Peter-FS:


Weitere Anregung: Länderspezifische Map, z.B. Sachsen, Hamburg usw. (Meine neue heißt 'Dario bei den Bayern' da kann man auch geschichtlich was lernen, vor allem ich. ). Mal sehen ob es den Testern gefällt?


Vorallem das geschichtliche ist sicher ein toller Aspekt.
Wenn du willst, kann ich dir helfen

Anarki
#6
29.04.2010 17:08
Beiträge: 518

(1)
Ich wünsche mir die Multiplayer-Tauglichkeit von ItM
Aber habe vorhin Noigi schonmal eine PM geschickt. Mal schaun was der sagt / davon hält.

(2)
Bürgerrevolte? Ich finde die Idee schonmal gut!
Wie wäre z.B. die Idee: Ab 80% 'Motivation' und niedriger hat jeder Siedler die Chance 'zu desertieren'. Der Trigger wäre dann das Steuerzahlen.
Beispieltabelle:
80% - Chance: 1%
70% - Chance: 2%
60% - Chance: 4%
50% - Chance: 8%
40% - Chance: 16%
30% - Chance: 32%
Keine fließenden Grenzen.

Sollte der Arbeiter 'revoltieren' verwandelt er sich in eine Miliz (vor dem ihm zugewiesenem Gebäude) die den Befehl 'Gehe Richtung Hauptquartier und greife alles auf dem Weg an' bekommt.

Aufruf also einmal jede Steuerrunde mit Revolte-Check für jeden Arbeiter.
ZUSATZ: Leibeigene können auch 'revoltieren'. Die Revoltechance für einzelne Leibeigene hängt von der 'Durchschnittsmotivation' nach obiger Tabelle ab.

Das ganze brächte einen zusätzlichen 'kick' gerade bis man keine Kathetrale hat! Steuern auf Höchstsatz stellen sollte also bedacht werden.

Falls jemand sowas scripten will, bitte sehr Weiss nicht wann ich dazu käme.

____________________
Siedler V Tool: Selbstextrahierende Maps erstellen
Bitte testen und kommentieren

Kalle
#7
29.04.2010 17:19
Beiträge: 1150

... was auch noch fehlt, ist die Balance zwischen den Einnahmen und Resourcen und den "vermeindlichen unnützen" Ausgaben wie Deko, Kirche, Gasthaus...

Soll heißen: je mehr Bevölkerung und Betriebe, um so mehr Output hat man. Bisher ist nur bei "Kampflastigen Spielen" die Schwierigkeit, bei nur einem DZ ! , sich zu entscheiden: mehr Militär oder mehr Steuern/Resourcen.

- Bei Questmaps fehlt das Gegenstück. -

Hier wäre es toll, eine Feinabstimmung zu finden, die zwar mehr Bewohner, aber auch mehr Pflichten wie Dekoartikel und nicht ganz so brauchbare Gebäude (und/oder Miliz im Sinne Polizei) benötigt.

Gruß

____________________
Lieber Siedeln statt (fern)sehen.....

Mordred
#8
29.04.2010 21:24
Beiträge: 939

Zitat von Anarki:
(1)
Ich wünsche mir die Multiplayer-Tauglichkeit von ItM
Aber habe vorhin Noigi schonmal eine PM geschickt. Mal schaun was der sagt / davon hält.


Multiplayertauglich?! Itm??
Soweit ich mich mit GUI auskenne, kann man das vergessen.
dann bräuchte jeder button noch eine abfrage, welcher spieler gedrückt hat usw. (ich weiss nicht mal, ob das geht)
Da der Script von ItmMaps ja sowieso schon riesig ist, könnte es bei 8 playern eng werden...

warrior1024
#9
29.04.2010 21:43
Beiträge: 345

Ich bezweifle eher die Tauglichkeit der GUI.irgendwas-Funktionen. Ansonsten gibt es ja noch Tables, for-Schleifen und table.getn!
Sollten die GUIs funktionieren, würde dem nichts im Weg stehen. Bis auf die eher kleine ItM-Fangemeinde D:

Zur Revolte:
Die Abhängigkeit könnte man per Hyperbel, Parabel oder 2^x lösen. Leider ist Mordred´s Revolte nicht steuerabhängig. Wenn es eine Funktion gibt, mit der man die Motivation eines bestimmten Arbeiters ermitteln kann, dann steht einer Umsetzung wenig im Weg. Und bei der Funktion wird dann objektorientierte Programmierung interessant, auch wenn es imperativer Programmierung ähnlet.
Für die OOP habe ich sogar schon das Konzept:
Per SimpleJob wird alle x Sekunden ein Arbeiter ausgewählt und die Motivation ermittelt. Dann setzt die Funktion zur Bestimmung des Revoluzzerrisikos ein. Dann wird per Zufall ermittelt, ob der Arbeiter zum Revoluzzer wird. Soweit ist noch alles imperativ. Jetzt beginnt die OOP:
Der Revoluzzer wird als Objekt der Klasse classRevoluzzer erzeugt, alle wichtigen Variablen werden gespeichert(Die Schwierigkeit liegt darin, alles benötigte zu finden). Per Trigger.RequestTrigger und Event.LOGIC_EVENT_EVERY_SECOND werden dann alle nahen Arbeiter/Serfs ermittelt und die Funktion zur Ermittlung des Revolten-Risikos beginnt wieder. Es wird per Zufall überprüft, ob der Arbeiter/Serf sich begeistern lässt und für den Arbeiter wird eine Klasse classRevoltenMitlaufer erzeugt, die den Arbeiter verwaltet. Hier muss unbedingt festgestellt werden, ob der Arbeiter/Serf schon beteiligt ist oder ob er Revoluzzer ist!
Hat jemand noch eine imperative Idee?

warrior1024

____________________
"Banken machen keine Fehlentscheidungen! Haben Euch das Eure Eltern nicht beigebracht?"
- Bankier Samael Silren, Enderal

Anarki
#10
05.05.2010 13:59
Beiträge: 518

Zitat von warrior1024:
Ich bezweifle eher die Tauglichkeit der GUI.irgendwas-Funktionen. Ansonsten gibt es ja noch Tables, for-Schleifen und table.getn!
Sollten die GUIs funktionieren, würde dem nichts im Weg stehen. Bis auf die eher kleine ItM-Fangemeinde D:



Tja, GUI und Multiplayer
Allerdings gibt es die Lösung aller Multiplayerprobleme bereits... Tribute!
Falls (was ich auch befürchte) das mit Gui-Callbackhacks (GUI-button Hacks funktionieren definitiv nicht) nicht funktioniert, gibt es noch die Alternative alles (und wirklich alles) über Tribute global passieren zu lassen.

Die Lösung sieht dann sehr umfangreich aus:
Für jede mögliche Funktion wird ein Tribut erstellt. Dieser wird mitsamt all seinen Daten in einem Table gespeichert.
Dann kann man den GUI-Buttons die Funktion einer Tributzahlung geben. Bei Auslösung der Tributzahlung wird die Aktion global auf allen Rechnern geschehen.

Hacken an der Sache: Das jetzt bestehende Tributmenü müsste faktisch komplett deaktiviert werden und alle Tribute müssten entsprechend 'virtuell' bestehen.

Bei all den Möglichkeiten am Beispiel ItM fragt sich jetzt, ob das ganze irgendwie den Hauch einer Chance hat

Aber... davon abgesehen könnte man dadurch alles lösen, wenn das Grundgerüst mal geschaffen wurde (z.B. auch Priester-/Schamanen Multiplayertauglichkeit).

Zitat von warrior1024:
Bis auf die eher kleine ItM-Fangemeinde D:


Naja, klein ist wohl noch untertrieben... oder gibt es schon überhaupt eine einzige ItM-Map ausser die Tutorial und Einführung? ...
... ItM hätte allerdings, bei Multiplayertauglichkeit, das absolute Potential 'Siedler IV' Multiplayer-Spieler für 'Siedler V' zu gewinnen.... zudem vermutlich die meisten 'Siedler IV' Spieler sogar DEDK besitzen - nur eben auf die Seite gelegt haben...
... und noch ein Vorteil für ItM vs Siedler IV: Sollte das ganze einmal geschaffen sein, können Siedler IV Spieler gegen den Computer in Kooperationsmodus antreten ohne Desyncs (die bei Siedler V alleine vom Skriptdesign abhängen, während diese bei Siedler IV unvermeidlich sind bei Computergegnern)

Anmerkung Tribute


Die jetzigen Tribut-Einlöse-GUI Buttons im Tribut-Menü haben im Multiplayer eine Effektive Verzögerung von 2-3 Sekunden nach meiner Erfahrung. Das kann natürlich entsprechend nerven... vor allem bei Aktionen die man mehrfach macht bei ItM (wie z.B. Aufträge an Rüstung, Goldumwandlung) sollte es die Möglichkeit einer Unendlichproduktion oder zumindest einer +5 Umschaltung geben.
...... Ob man nun aber einen Tribut überhaupt per Skript einlösen kann weiss ich jetzt auch nicht mhhhh

____________________
Siedler V Tool: Selbstextrahierende Maps erstellen
Bitte testen und kommentieren

Anarki
#11
05.05.2010 14:13
Beiträge: 518

PS:

Eine kleine Sammlung was interessant sein kann:

Trigger: LOGIC_EVENT_TRIBUTE_PAID
Event-Funktion-Variablen:
Event.GetTributeUniqueID()
Event.GetSourcePlayerID()
Event.GetTargetPlayerID()

Logic.GetAllTributes
GUI.PayTribute (hier vielleicht die Lösung für die GUI-Hacks???)
Logic.GetTributeCosts (vielleicht auch brauchbar, ich schätze mal Übergabevariable ist ID)
Logic.RemoveTribute (mit ID, falls nicht mehr gebraucht)
GameCallback_FulfillTribute (mh?)
SetupTributeJingle (?)
SetupTributePaid (?)
TributeJingleAction (?)
TributeJingleCondition (?)
TributeMessage (?)
TributePaid_Action (?)
tributeJingleTriggerId (?)

PPS:
Im Falle, dass jeder Spieler unendlich viele Tribute aktiv haben könnte, ist es meiner persönlichen Ansicht nach möglich, damit eigentlich fast alles MP-Tauglich zu machen

Über Tribute ist es dadurch möglich Aktionen über das Netzwerk zu kommunizieren und entsprechende Variablen global auf allen Rechnern zu setzen, bzw. Folgeaktionen auszuführen

____________________
Siedler V Tool: Selbstextrahierende Maps erstellen
Bitte testen und kommentieren

Dieser Beitrag wurde von Anarki am 05.05.2010 um 14:19 editiert.

Anarki
#12
05.05.2010 15:48
Beiträge: 518

So... habe etwas herumexperimentiert:
GUI.PayTribute
funktioniert mit folgenden Übergabewerten:
GUI.PayTribute( _PlayerID, _TributeID)

Ausserdem habe ich einfach just for fun 1000 Tribute erstellt.
Aber Achtung
Es gab bei mir einen Absturz wenn ich direkt eine Schleife i=1,1000 gemacht habe... anscheinend kommt der Rechner / LUA da einfach nicht so schnell mit.
Es funktionierte aber wenn ich das ganze über einen Simple-Job gemacht habe, indem ich jede Sekunde einfach mal 30 Tribute erstellt habe. Das ganze habe ich auf 1024 Tribute getrieben... anscheinend also absolut kein Problem.

Ich kann übrigens auch 'fremde Tribute' bezahlen über GUI.PayTribute, die nicht unbedingt von meiner eigenen PlayerID abhängen. Also könnte ich mit einem Aufruf:
GUI.PayTribute( 2, _TributeID)
diesen Tribut bezahlen.

DAS würde wiederrum 'neue' Möglichkeiten offenbaren.
Überlegung: Man legt ALLE Tribute auf PlayerID 7 oder 8.
Damit wären die Tribute über das normale Tributmenü für Spieler 1-6 nicht erreichbar.
Dies begrenzt die maximale Spieleranzahl auf 6... würde aber, über Tribute, sämtliche vorstellbaren Aktionen Multiplayertauglich machen.

Vielleicht vergesse ich gerade was..... aber erkennt jemand einen Hacken? *grübel*

____________________
Siedler V Tool: Selbstextrahierende Maps erstellen
Bitte testen und kommentieren

fritz_98
#13
05.05.2010 16:22
Beiträge: 472

@Anarki: Wenn man jetzt per Skript einen Player-8-Tribut bezahlt, wem kommt das dann zugute?

Mordred
#14
05.05.2010 16:37
Beiträge: 939

Multiplayersteuerung per tribute ist eine gute lösung. Ich bin aber auf folgende Probleme gestoßen:
Wie soll man das normale bezahlen managen, wenn höchstens 5 oder 6 tribute angezeigt werden?
Und wie kriegt man die überhaupt zum laufen?
@anarki:
was würde dieser aufwand denn an Zeilen kosten?
Nur grob geschätzt - aber vermutlich über die 10.000?

Anarki
#15
05.05.2010 16:40
Beiträge: 518

Zitat von Mordred:
Multiplayersteuerung per tribute ist eine gute lösung, die auch in meiner neusten map drinsteckt. Ich bin auf folgende Probleme gestoßen:
Wie soll man das bezahlen managen, wenn höchstens 5 oder 6 tribute angezeigt werden?
Und wie kriegt man die überhaupt zum laufen?



Hier ist die Lösung: GUI.PayTribute( _PlayerID, _TributeID)

NUR ist das jetzt etwas wage... ich hoffe sehr, dass das dann auch globale Auswirkung besitzt... und die selbe Funktion wie der Button im Tributmenü...
WENN, dann wären damit alle GUI-Probleme im Multiplayer durch Tribute zu umgehen.
FALLS NICHT, dann Mahlzeit und gute Nacht... dann hat sich meine Vision wohl verflüchtigt.

Leider habe ich gerade keinen Zweitrechner mit dem ich das ganze testen kann.

Edith:
Ohne testen also Rechergieren... Laut einer Aussage von Nevermind dem ich doch sehr vertraue, würde das mit GUI.PayTribute klappen... Quelle: Siedler-Portal (ganz unten). Also lasset uns hoffen. Wenn, dann fehlt es nur noch an der standardisierten Umsetzung.
PS: Das Thema des obigen Beitrags ist übrigens sehr geil für mich persönlich, weil ich ja genau diese Problematik in meinem MP-Comfort Skript gelöst habe ... leider sind ja schon alle Multiplayer wegen dieser ganzen Bugs verschwunden...

____________________
Siedler V Tool: Selbstextrahierende Maps erstellen
Bitte testen und kommentieren

Dieser Beitrag wurde von Anarki am 05.05.2010 um 17:02 editiert.

Seiten: 1

SiteEngine v1.5.0 by nevermind, ©2005-2007
Design by SpiderFive (www.siedler-games.de) - English translation by juja

Impressum