Aufgrund einer akuten Spamwelle ist das Editieren für nicht angemeldete Benutzer zur Zeit deaktiviert. Wir bitten um Verständnis.
Scripte:SHA1
Aus Clonk Wiki
Allgemein
Hilfsfunktion, die den SHA1-Hash eines Strings berechnet. Kann man zum Beispiel verwenden, um in Raetselszenarien die richtige Antwort zu verbergen. Im Script prueft man dann nur, ob der Hash der eingegebenen Antwort stimmt und muss so nicht die richtige Loesung ins Script schreiben.
| SHA1 | |
|---|---|
| Kategorie: | Zeichenketten |
| Autor: | Sven2 |
| Behandelt: | {{{Behandelt}}} |
| Empfohlenes Vorwissen: | {{{Vorwissen}}} |
| Benötigt Objektpacks: | {{{Packs}}} |
| Stufe: | |
Script
/* Compute a hash of string */
#strict 2
global
func
SHA1m(string
s)
{
var
h0
=
0x67452301,
h1
=
0xEFCDAB89,
h2
=
0x98BADCFE,
h3
=
0x10325476,
h4
=
0xC3D2E1F0;
var
sal
=
((GetLength(s)+8)/64+1)*16;
var
sa
=
CreateArray(sal),
sat
=
CreateArray(80);
var
i,j,k,l=GetLength(s),a,b,c,d,e,f,g;
for
(i=0;
i<l;
++i)
sa[i/4]
|=
(GetChar(s,i)
<<
(8*(3-i%4)));
sa[i/4]
|=
(0x80
<<
(8*(3-i%4)));
sa[sal-1]=l*8;
i=0;
while
(i<sal)
{
for
(j=0;j<16;++j)
sat[j]=CastInt(sa[i+j]);
// C4Script erfindet C4IDs...
for
(;j<80;++j)
{
k
=
sat[j-3]^sat[j-8]^sat[j-14]^sat[j-16];
sat[j]=((k&0x7fffffff)<<1)|(k<0);
}
a=h0;
b=h1;
c=h2;
d=h3;
e=h4;
for
(j=0;j<80;++j)
{
if
(j<20)
{
f
=
(b&c)|((~b)&d);
k
=
0x5A827999;
}
else
if
(j<40)
{
f
=
b^c^d;
k
=
0x6ED9EBA1;
}
else
if
(j<60)
{
f
=
(b&c)|(b&d)|(c&d);
k
=
0x8F1BBCDC;
}
else
{
f
=
b^c^d;
k
=
0xCA62C1D6;
}
g
=
((a&0x7fffffff)<<5)|((a<0)*0x10)|((a&0x78000000)>>27);
g
+=
e+f+k+sat[j];
e
=
d;
d
=
c;
c
=
((b&0x7fffffff)<<30)|((b<0)*0x20000000)|((b&0x7ffffffc)>>2);
b
=
a;
a
=
g;
}
h0+=a;
h1+=b;
h2+=c;
h3+=d;
h4+=e;
i+=16;
}
return
Format("%08x%08x%08x%08x%08x",h0,h1,h2,h3,h4);
}Das Script kann beispielsweise in einer Datei in der System.c4g des Szenarios abgelegt werden.
Beispiel
Angenommen, der Spieler wurde per CallMessageBoard-Aufruf dazu aufgefordert, eine Antort einzugeben. Dann wird die Antwort im InputCallback geprueft:
func
InputCallback(string
answer)
{
if
(SHA1m(answer)
==
"1d8adb64415fef5895e8611a96bca8d02e39c4ce")
{
Message("Die Antwort ist richtig!");
}
else
{
Message("Die Antwort ist falsch!");
}
}"Die Antwort ist richtig!" wird nur ausgegeben, wenn der Spieler "Clonk" eingetippt hat. Dabei steht das Loesungswort nirgends im Script.
| Scripte des Scripte-Projekts | |
| Bonbon · Context-Eintrag · EliminateTeam · Flint:Partikelschleuder · Hüpfbonbon · TeamMessage | |
| Flint:HitCounter · Flint:Partikelkreis · Flint:Partikelschleuder2 · Is-Funktionen · Menü:Beim Start der Runde · Normaler Flint · Partikel-Linie in den Himmel · Rakete · Random · Relaunch · Return · Sichtweite · Spawn · Startposition | |
| Clantag · Gift-Effekt · Unverwundbarkeit · Scoreboard · Zufallsgespräch | |
| Lebensbalken · Nachrichten bei Sichtkontakt · Object2Overlay · SHA1 | |
| Dieser Artikel wurde gemäß der Scriptrichtlinien veröffentlicht. |
