Code: Alles auswählen
Enumeration
#Change_NotFound
#Change_False
#Change_True
EndEnumeration
Global NewMap Vars.l()
Global NewMap Keys.s()
Procedure _checkChange(*Var, reset=0)
If Not *Var Or Not FindMapElement(Vars(),Str(*Var)) Or Not FindMapElement(Keys(),Str(*Var))
ProcedureReturn #Change_NotFound
EndIf
cache = PeekL(*Var)
UseMD5Fingerprint()
If cache <> Vars(Str(*Var)) Or Keys(Str(*Var)) <> StringFingerprint(Str(cache), #PB_Cipher_MD5)
If reset = 1
PokeL(*Var, Vars(Str(*Var)))
EndIf
ProcedureReturn #Change_True
EndIf
ProcedureReturn #Change_False
EndProcedure
Procedure _makeChange(*Var, Value)
If Not *Var : ProcedureReturn #Change_NotFound : EndIf
PokeL(*Var, Value)
UseMD5Fingerprint()
Vars(Str(*Var)) = Value
Keys(Str(*Var)) = StringFingerprint(Str(Value), #PB_Cipher_MD5)
ProcedureReturn #Change_True
EndProcedure
OpenConsole("Now let's have some fun!")
Define x.l
PrintN("0 = Not Found")
PrintN("1 = Var has not changed")
PrintN("2 = Var has changed!")
PrintN("")
Print("Set x = 20 --- Returned ") : PrintN(Str(_makeChange(@x, 20)))
Print("Has x changed? Returned ") : PrintN(Str(_checkChange(@x)))
PrintN("")
x = 30 ;Let's asume this is by access from outside
PrintN("[Var got changed to 30]")
Print("Has x changed? Returned ") : PrintN(Str(_checkChange(@x,1)))
PrintN("[Used auto-reset as Param]")
Print("Has x changed? Returned ") : PrintN(Str(_checkChange(@x)))
PrintN("X = "+Str(x))
PrintN("")
PrintN("==============================")
Input()
1) die Abgleich-Vars sind in einer globalen Liste.
2) ein echter Hacker kann es trotzdem umgehen
3) Die Performance ist Müll ... (du wirst nicht nur eine Variable haben)
4) Dein Hauptaugenmerk sollte erstmal darauf liegen alle Funktionen fertig zu haben.
Mfg,
Kirito