![]() |
|
|||||||
| Hilfe | Benutzerliste | Interessengemeinschaften | Kalender | Suchen | Heutige Beiträge | Alle Foren als gelesen markieren |
![]() |
|
|
LinkBack | Themen-Optionen |
|
|
#1 (permalink) |
|
12 of 5
![]() Registriert seit: 22.06.2007
Beiträge: 52
|
Eigene Funktion und Fehler!
Hi, ich hab mal was von dieser Chat-Funktion gelesen und da hab ich eine Funktion für Passwort-Tore geschrieben. Hier die Funktion:
Code:
function PasswortTor(_tor,_name,_entity,_nummer,_passwort,_text)
if not _name then _name = nil end
if not _entity then _entity = 0 end
if not _nummer then _nummer = 1 end
if not _passwort then _passwort = "KeinPasswort" end
gvTor = gvTor or {TorJob = StartSimpleJob("CheckTor")};
local TorTab = {
Name = _tor,
EntName = _name,
Entity = _entity,
Nummer = _nummer,
Passwort = _passwort,
Text = _text,
};
table.insert(gvTor,TorTab);
end
function CheckTor()
for Gate = 1, table.getn(gvTor) do
if AreEntitiesInArea(1,gvTor[Gate].Entity,GetPosition(gvTor[Gate].Name),1000,gvTor[Gate].Nummer) or
IsNear(gvTor[Gate].EntName,gvTor[Gate].Name,1000) then
XGUIEng.ShowWidget(XGUIEng.GetWidgetID("ChatInput"),1)
GameCallback_GUI_ChatStringInputDone = function (_ChatString)
if _ChatString == gvTor[Gate].Passwort then
ReplaceEntity(gvTor[Gate].Name,GetGateType(gvTor[Gate].Name))
Message(gvTor[Gate].Text)
else
Message("Passwort ist falsch!")
end
end
else
XGUIEng.ShowWidget(XGUIEng.GetWidgetID("ChatInput"),0)
end
end
if table.getn(gvTor) == 0 then
gvTor = nil
return true
end
end
function GetGateType(_gate)
local Type = Logic.GetEntityTypeName(Logic.GetEntityType(GetEntityId(_gate)))
--Gate Auf-Zu
if Type == "XD_WallStraightGate" then
return Entities.XD_WallStraightGate_Closed
--Gate Zu-Auf
elseif Type == "XD_WallStraightGate_Closed" then
return Entities.XD_WallStraightGate
--DarkGate Auf-Zu
elseif Type == "XD_DarkWallStraightGate" then
return Entities.XD_DarkWallStraightGate_Closed
--DarkGate Zu-Auf
elseif Type == "XD_DarkWallStraightGate_Closed" then
return Entities.XD_DarkWallStraightGate
--PalisadeGate Auf-Zu
elseif Type == "XD_PalisadeGate2" then
return Entities.XD_PalisadeGate1
--PalisadeGate Zu-Auf
elseif Type == "XD_PalisadeGate1" then
return Entities.XD_PalisadeGate2
--Zugbrücke1 Auf-Zu
elseif Type == "XD_DrawBridgeClosed1" then
return Entities.PB_DrawBridgeOpen1
--Zugbrücke2 Auf-Zu
elseif Type == "XD_DrawBridgeClosed2" then
return Entities.PB_DrawBridgeOpen2
--Zugbrücke1 Zu-Auf
elseif Type == "XD_DrawBridgeOpen1" then
return Entities.PB_DrawBridgeClosed1
--Zugbrücke2 Zu-Auf
elseif Type == "XD_DrawBridgeOpen2" then
return Entities.PB_DrawBridgeClosed2
end
end
VG TOSHMAX |
|
|
|
|
|
#2 (permalink) |
|
Hauptmann
![]() Registriert seit: 27.03.2005
Ort: Reference Manual
Beiträge: 1.856
|
AW: Eigene Funktion und Fehler!
Ich würde nach dem ShowWidget(...1) und der Funktionsänderung noch nen break setzen, damit der Chatinput nicht wieder bei einem weiteren Schleifendurchlauf entfernt wird.
Ausserdem wärs nicht schlecht die geöffneten Tore ausm Table zu entfernen, da du schon darauf prüfst. |
|
|
|
|
|
#3 (permalink) |
|
12 of 5
![]() Registriert seit: 22.06.2007
Beiträge: 52
|
AW: Eigene Funktion und Fehler!
Hier ist der funktionierende Code:
Code:
function PasswortTor(_tor,_name,_entity,_nummer,_passwort,_text)
if not _name then _name = nil end
if not _entity then _entity = 0 end
if not _nummer then _nummer = 1 end
if not _passwort then _passwort = "KeinPasswort" end
if not _text then _text = "Eure Männer haben das Tor geöffnet!" end
gvTor = gvTor or {TorJob = StartSimpleJob("CheckTor")};
local TorTab = {
Name = _tor,
EntName = _name,
Entity = _entity,
Nummer = _nummer,
Passwort = Umlaute(_passwort),
Text = _text,
};
table.insert(gvTor,TorTab);
end
function CheckTor()
for Gate = 1, table.getn(gvTor) do
if AreEntitiesInArea(1,gvTor[Gate].Entity,GetPosition(gvTor[Gate].Name),1000,gvTor[Gate].Nummer) or
IsNear(gvTor[Gate].EntName,gvTor[Gate].Name,1000) then
XGUIEng.ShowWidget(XGUIEng.GetWidgetID("ChatInput"),1)
GameCallback_GUI_ChatStringInputDone = function (_ChatString)
if _ChatString == gvTor[Gate].Passwort then
ReplaceEntity(gvTor[Gate].Name,GetGateType(gvTor[Gate].Name))
Message(gvTor[Gate].Text)
table.remove(gvTor,Gate)
else
Message("Passwort ist falsch!")
end
end
break;
else
XGUIEng.ShowWidget(XGUIEng.GetWidgetID("ChatInput"),0)
end
end
if table.getn(gvTor) == 0 then
gvTor = nil
return true
end
end
function GetGateType(_gate)
local Type = Logic.GetEntityTypeName(Logic.GetEntityType(GetEntityId(_gate)))
--Gate Auf-Zu
if Type == "XD_WallStraightGate" then
return Entities.XD_WallStraightGate_Closed
--Gate Zu-Auf
elseif Type == "XD_WallStraightGate_Closed" then
return Entities.XD_WallStraightGate
--DarkGate Auf-Zu
elseif Type == "XD_DarkWallStraightGate" then
return Entities.XD_DarkWallStraightGate_Closed
--DarkGate Zu-Auf
elseif Type == "XD_DarkWallStraightGate_Closed" then
return Entities.XD_DarkWallStraightGate
--PalisadeGate Auf-Zu
elseif Type == "XD_PalisadeGate2" then
return Entities.XD_PalisadeGate1
--PalisadeGate Zu-Auf
elseif Type == "XD_PalisadeGate1" then
return Entities.XD_PalisadeGate2
--Zugbrücke1 Auf-Zu
elseif Type == "XD_DrawBridgeClosed1" then
return Entities.PB_DrawBridgeOpen1
--Zugbrücke2 Auf-Zu
elseif Type == "XD_DrawBridgeClosed2" then
return Entities.PB_DrawBridgeOpen2
--Zugbrücke1 Zu-Auf
elseif Type == "XD_DrawBridgeOpen1" then
return Entities.PB_DrawBridgeClosed1
--Zugbrücke2 Zu-Auf
elseif Type == "XD_DrawBridgeOpen2" then
return Entities.PB_DrawBridgeClosed2
else
return Entities.XD_WallStraightGate
end
end
PasswortTor(_tor,_name,_entity,_nummer,_passwort,_ text) _tor ist hier der Name des Tores, der Zugbrücke oder der Palisade die, sich wenn das Passwort _passwort richtig eingegeben ist, sich in ihr Gegenstück verwandelt! Wenn _name angegeben ist und _name sich in der Nähe des Tores befindet oder die angegebene _entity sich in der Nähe befindet öffnet sich die Passwort-Eingabe(Chat)! Wenn _entity 0 ist sind alle Entities gemeint! _nummer meint wieviele Entities der Art _entity sich in der Nähe befinden müssen. Wenn das Passwort richtig ist wird _text ausgegeben. Beispiel: PasswortTor("Gate","Dario",0,10,"Mount Everest ist ein Berg!","@color:0,0,0 Dario hat das Tor geöffnet!") Wenn "Mount Everest ist ein Berg" eingegeben wird, während "Dario" oder irgendwelche "10" Entities sich in der Nähe von "Gate" befinden, wird "Gate" geschlossen/geöffnet und der Text "Dario hat das Tor geöffnet!" ausgegeben. PS: Was bedeutet es eigentlich wenn "break" benutzt wird und warum kann man es nur an bestimmte Stellen in Skript setzten? VG TOSHMAX Geändert von TOSHMAX (10.08.2007 um 08:58 Uhr) |
|
|
|
|
|
#4 (permalink) |
|
Hauptmann
![]() Registriert seit: 27.03.2005
Ort: Reference Manual
Beiträge: 1.856
|
AW: Eigene Funktion und Fehler!
Break beendet die aktuelle Schleife. In diesem Fall die for gate = ...
Die Umlaute lassen sich hinbekommen, nutz einfach das Umlaute Script aus dem Wiki und setz das in deine PasswortTor Funktion: Passwort = Umlaute( _passwort ), Dann ist mir noch aufgefallen, dass die Funktion eigentlich nicht Savegame sicher ist (GameCallback_GUI_ChatStringInputDone benutzt eine externe lokale Variable). Allerdings macht das in deinem Fall nichts, da du die Funktion jede Sekunde neu setzt. |
|
|
|
|
|
#5 (permalink) |
|
12 of 5
![]() Registriert seit: 22.06.2007
Beiträge: 52
|
AW: Eigene Funktion und Fehler!
Vielen dank, ich hatte es zuerst auch mit Umlauten versucht, aber ich dachte da muss man dann im Passwort auch so etwas wie \195\182 eingeben. Es klappt jetzt alles super und die Funktion in meinem oberen Beitrag ist angepasst und funktioniert super. Zusätzlich muss noch der Umlaute Code aus dem Wiki ins Skript eingefügt werden.
http://www.chromix.de/dedk/dokuwiki/...orials:umlaute |
|
|
|
|
|
#6 (permalink) |
|
Gast
Beiträge: n/a
|
AW: Eigene Funktion und Fehler!
@Hallo TOSHMAX
Wenn Function auf eine Brücke angewande wird, kann sie nicht funktionieren, weil der Mittelpunkt nicht erreicht werden kann. Hier sollte noch eine Distance als Parameter angegeben werden können. Code:
PasswortTor("Gate","Dario",0,10,"Mount Everest ist ein Berg!","@color:0,0,0 Dario hat das Tor geöffnet!")
PB_DrawBridgeClosed2 = breit=2100,tief=1300,hoch=1300 Gruß ********** Geändert von Ein Siedler (11.08.2007 um 21:14 Uhr) |
|
|
|
#7 (permalink) |
|
12 of 5
![]() Registriert seit: 22.06.2007
Beiträge: 52
|
AW: Eigene Funktion und Fehler!
Hier ist der Code: Ich habe ihn gerade nochmal getestet mit zwei verschiedenen Toren klappt super, allerdings würde ich euch nicht raten den Code mit DrawBridge zu machen. Ich kann diese Dinger nicht in meine Map tun. Immer wenn ich sie per Skript öffne/schließe ist sie weg und ich kann nichts mehr damit machen, genauso bei dieser Funktion, aber vielleicht kennt einer von euch das und hat es trotzdem geschafft. Aber hier ist der voll getestete Code mit Distance und er funktioniert super!
Code:
function PasswortTor(_tor,_name,_entity,_nummer,_distance,_passwort,_text)
if not _name then _name = nil end
if not _entity then _entity = 0 end
if not _nummer then _nummer = 1 end
if not _distance then _distance = 800 end
if not _passwort then _passwort = "KeinPasswort" end
if not _text then _text = "Eure Männer haben das Tor geöffnet!" end
gvTor = gvTor or {TorJob = StartSimpleJob("CheckTor")};
local TorTab = {
Name = _tor,
EntName = _name,
Entity = _entity,
Nummer = _nummer,
Distance = _distance,
Passwort = Umlaute(_passwort),
Text = _text,
};
table.insert(gvTor,TorTab);
end
function CheckTor()
for Gate = 1, table.getn(gvTor) do
if AreEntitiesInArea(1,gvTor[Gate].Entity,GetPosition(gvTor[Gate].Name),gvTor[Gate].Distance,gvTor[Gate].Nummer) or
IsNear(gvTor[Gate].EntName,gvTor[Gate].Name,gvTor[Gate].Distance) then
XGUIEng.ShowWidget(XGUIEng.GetWidgetID("ChatInput"),1)
GameCallback_GUI_ChatStringInputDone = function (_ChatString)
if _ChatString == gvTor[Gate].Passwort then
ReplaceEntity(gvTor[Gate].Name,GetGateType(gvTor[Gate].Name))
Message(gvTor[Gate].Text)
table.remove(gvTor,Gate)
else
Message("Passwort ist falsch!")
end
end
break;
else
XGUIEng.ShowWidget(XGUIEng.GetWidgetID("ChatInput"),0)
end
end
if table.getn(gvTor) == 0 then
gvTor = nil
return true
end
end
function GetGateType(_gate)
local Type = Logic.GetEntityTypeName(Logic.GetEntityType(GetEntityId(_gate)))
--Gate Auf-Zu
if Type == "XD_WallStraightGate" then
return Entities.XD_WallStraightGate_Closed
--Gate Zu-Auf
elseif Type == "XD_WallStraightGate_Closed" then
return Entities.XD_WallStraightGate
--DarkGate Auf-Zu
elseif Type == "XD_DarkWallStraightGate" then
return Entities.XD_DarkWallStraightGate_Closed
--DarkGate Zu-Auf
elseif Type == "XD_DarkWallStraightGate_Closed" then
return Entities.XD_DarkWallStraightGate
--PalisadeGate Auf-Zu
elseif Type == "XD_PalisadeGate2" then
return Entities.XD_PalisadeGate1
--PalisadeGate Zu-Auf
elseif Type == "XD_PalisadeGate1" then
return Entities.XD_PalisadeGate2
--Zugbrücke1 Auf-Zu
elseif Type == "XD_DrawBridgeClosed1" then
return Entities.PB_DrawBridgeOpen1
--Zugbrücke2 Auf-Zu
elseif Type == "XD_DrawBridgeClosed2" then
return Entities.PB_DrawBridgeOpen2
--Zugbrücke1 Zu-Auf
elseif Type == "XD_DrawBridgeOpen1" then
return Entities.PB_DrawBridgeClosed1
--Zugbrücke2 Zu-Auf
elseif Type == "XD_DrawBridgeOpen2" then
return Entities.PB_DrawBridgeClosed2
else
return Entities.XD_WallStraightGate
end
end
![]() VG TOSHMAX |
|
|
|
|
|
#8 (permalink) |
|
Gast
Beiträge: n/a
|
AW: Eigene Funktion und Fehler!
Es liegt vll. daran, das es keine
XD_DrawBridgeClosed1 XD_DrawBridgeClosed2 gibt es gibt nur zwei Zustände, für die jeweilige Brücke Entities.XD_DrawBridgeOpen1 -- Open = Brücke Hoch Entities.PB_DrawBridgeClosed1 -- Closed = Brücke runter Entities.XD_DrawBridgeOpen2 Entities.PB_DrawBridgeClosed2 Gruß ********** Geändert von Ein Siedler (12.08.2007 um 11:53 Uhr) |
|
|
|
#10 (permalink) |
|
Gast
Beiträge: n/a
|
AW: Eigene Funktion und Fehler!
Hi TOSHMAX
Diesen Brückenzustand meine ich Code:
function GetGateType(_gate)
local Type = Logic.GetEntityTypeName(Logic.GetEntityType(GetEntityId(_gate)))
--Gate Auf-Zu
if Type == "XD_WallStraightGate" then
return Entities.XD_WallStraightGate_Closed
--Gate Zu-Auf
elseif Type == "XD_WallStraightGate_Closed" then
return Entities.XD_WallStraightGate
--DarkGate Auf-Zu
elseif Type == "XD_DarkWallStraightGate" then
return Entities.XD_DarkWallStraightGate_Closed
--DarkGate Zu-Auf
elseif Type == "XD_DarkWallStraightGate_Closed" then
return Entities.XD_DarkWallStraightGate
--PalisadeGate Auf-Zu
elseif Type == "XD_PalisadeGate2" then
return Entities.XD_PalisadeGate1
--PalisadeGate Zu-Auf
elseif Type == "XD_PalisadeGate1" then
return Entities.XD_PalisadeGate2
--Zugbrücke1 Auf-Zu
elseif Type == "XD_DrawBridgeClosed1" then
return Entities.PB_DrawBridgeOpen1
--Zugbrücke2 Auf-Zu
elseif Type == "XD_DrawBridgeClosed2" then
return Entities.PB_DrawBridgeOpen2
--Zugbrücke1 Zu-Auf
elseif Type == "XD_DrawBridgeOpen1" then
return Entities.PB_DrawBridgeClosed1
--Zugbrücke2 Zu-Auf
elseif Type == "XD_DrawBridgeOpen2" then
return Entities.PB_DrawBridgeClosed2
else
return Entities.XD_WallStraightGate
end
end
|
|
|
|
#11 (permalink) |
|
12 of 5
![]() Registriert seit: 22.06.2007
Beiträge: 52
|
AW: Eigene Funktion und Fehler!
Meinst du damit das man statt
Code:
elseif Type == "XD_DrawBridgeClosed1" then
return Entities.PB_DrawBridgeOpen1
--Zugbrücke2 Auf-Zu
elseif Type == "XD_DrawBridgeClosed2" then
Code:
elseif Type == "Entities.XD_DrawBridgeClosed1" then
return Entities.PB_DrawBridgeOpen1
--Zugbrücke2 Auf-Zu
elseif Type == "Entities.XD_DrawBridgeClosed2" then
|
|
|
|
|
|
#13 (permalink) |
|
12 of 5
![]() Registriert seit: 22.06.2007
Beiträge: 52
|
AW: Eigene Funktion und Fehler!
Jetzt hab ich verstanden auf was du hinaus willst! Ich hab vollkommen übersehen dass hier in diesem Abschnitt
Code:
elseif Type == "PB_DrawBridgeClosed1" then
return Entities.XD_DrawBridgeOpen1
--Zugbrücke2 Auf-Zu
elseif Type == "PB_DrawBridgeClosed2" then
return Entities.XD_DrawBridgeOpen2
--Zugbrücke1 Zu-Auf
elseif Type == "XD_DrawBridgeOpen1" then
return Entities.PB_DrawBridgeClosed1
--Zugbrücke2 Zu-Auf
elseif Type == "XD_DrawBridgeOpen2" then
return Entities.PB_DrawBridgeClosed2
Hier ist der jetzt wirklich richtitge Code: Code:
function PasswortTor(_tor,_name,_entity,_nummer,_distance,_passwort,_text)
if not _name then _name = nil end
if not _entity then _entity = 0 end
if not _nummer then _nummer = 1 end
if not _distance then _distance = 800 end
if not _passwort then _passwort = "KeinPasswort" end
if not _text then _text = "Eure Männer haben das Tor geöffnet!" end
gvTor = gvTor or {TorJob = StartSimpleJob("CheckTor")};
local TorTab = {
Name = _tor,
EntName = _name,
Entity = _entity,
Nummer = _nummer,
Distance = _distance,
Passwort = Umlaute(_passwort),
Text = _text,
};
table.insert(gvTor,TorTab);
end
function CheckTor()
for Gate = 1, table.getn(gvTor) do
if AreEntitiesInArea(1,gvTor[Gate].Entity,GetPosition(gvTor[Gate].Name),gvTor[Gate].Distance,gvTor[Gate].Nummer) or
IsNear(gvTor[Gate].EntName,gvTor[Gate].Name,gvTor[Gate].Distance) then
XGUIEng.ShowWidget(XGUIEng.GetWidgetID("ChatInput"),1)
GameCallback_GUI_ChatStringInputDone = function (_ChatString)
if _ChatString == gvTor[Gate].Passwort then
ReplaceEntity(gvTor[Gate].Name,GetGateType(gvTor[Gate].Name))
Message(gvTor[Gate].Text)
table.remove(gvTor,Gate)
else
Message("Passwort ist falsch!")
end
end
break;
else
XGUIEng.ShowWidget(XGUIEng.GetWidgetID("ChatInput"),0)
end
end
if table.getn(gvTor) == 0 then
gvTor = nil
return true
end
end
function GetGateType(_gate)
local Type = Logic.GetEntityTypeName(Logic.GetEntityType(GetEntityId(_gate)))
--Gate Auf-Zu
if Type == "XD_WallStraightGate" then
return Entities.XD_WallStraightGate_Closed
--Gate Zu-Auf
elseif Type == "XD_WallStraightGate_Closed" then
return Entities.XD_WallStraightGate
--DarkGate Auf-Zu
elseif Type == "XD_DarkWallStraightGate" then
return Entities.XD_DarkWallStraightGate_Closed
--DarkGate Zu-Auf
elseif Type == "XD_DarkWallStraightGate_Closed" then
return Entities.XD_DarkWallStraightGate
--PalisadeGate Auf-Zu
elseif Type == "XD_PalisadeGate2" then
return Entities.XD_PalisadeGate1
--PalisadeGate Zu-Auf
elseif Type == "XD_PalisadeGate1" then
return Entities.XD_PalisadeGate2
--Zugbrücke1 Auf-Zu
elseif Type == "PB_DrawBridgeClosed1" then
return Entities.XD_DrawBridgeOpen1
--Zugbrücke2 Auf-Zu
elseif Type == "PB_DrawBridgeClosed2" then
return Entities.XD_DrawBridgeOpen2
--Zugbrücke1 Zu-Auf
elseif Type == "XD_DrawBridgeOpen1" then
return Entities.PB_DrawBridgeClosed1
--Zugbrücke2 Zu-Auf
elseif Type == "XD_DrawBridgeOpen2" then
return Entities.PB_DrawBridgeClosed2
else
return Entities.XD_WallStraightGate
end
end
|
|
|
|
![]() |
| Lesezeichen |
| Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1) | |
| Themen-Optionen | |
|
|
Ähnliche Themen
|
||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| no rush funktion mit tribut funktion verknüpfen | Header_SFC | Die Siedler 5 Scriptecke für Fortgeschrittene | 5 | 10.03.2007 09:45 |
| Eigene Songs | otter | Die Siedler 5 Das Erbe der Könige Allgemein | 1 | 24.01.2006 10:01 |
| eigene HP erstellen | Floh | Die Siedler Technik Ecke | 6 | 22.07.2005 17:40 |
| Erste eigene S4 MAP! | kleinerteufel90 | Siedler 4 Mapvorstellungen | 1 | 08.06.2005 16:23 |