Worldedit
  Worldedit
Le site sur l'éditeur de warcraft 3 !
 
  FAQFAQ   RechercherRechercher   Liste des MembresListe des Membres    Groupes d'utilisateursGroupes d'utilisateurs   medals.php?sid=322dde1ace422bab69c7ccebc0a45bbaMédailles   S'enregistrerS'enregistrer 
 ProfilProfil   Se connecter pour vérifier ses messages privésSe connecter pour vérifier ses messages privés   ConnexionConnexion 
  FAQFAQ World Editor   UploadUploader une map ou une image    UploadAjouter sa map à l'annuaire   UploadConsulter l'annuaire

Sauvegarde d'entier comprimee

 
Poster un nouveau sujet   Répondre au sujet    Worldedit Index du Forum -> Aide sur les déclencheurs
Voir le sujet précédent :: Voir le sujet suivant  
Auteur Message
 Wareditor
The Master of Nothing


Inscrit le: 22 Déc 2008
Messages: 1638
Sujets: 88
Spécialité en worldedit: Effacer


MessagePosté le: 24/04/11 11:39    Sujet du message: Sauvegarde d'entier comprimee Citer

Voila j'ai compris le fonctionnement d'un système de save pour rpg mais j'arrive toujours pas a sauvegarder des variables a 6 chiffres ( le gold par exemple ). C'est pas que j'y arrive pas mais c est que je ne veux pas gaspillez 6 lettres de mon code pour l'or. J'ai entendu dire que grâce aux chiffres Alpha on pouvait diminuer la taille du code.
Alors j'aimerai bien savoir comment les utiliser en détails car je veux save des variables et pas seulement l'or.

Merci
_________________
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé  
 Troll-Brain
Ri1kamoua


Inscrit le: 23 Aoû 2007
Messages: 7146
Sujets: 147
Spécialité en worldedit: le troll, le flood, la vulgarité, mon coeur balance
Médailles: 2 (En savoir plus...)
Rédacteur de tuto #3 (Quantité : 1) Grand mage créateur de sort (Quantité : 1)

MessagePosté le: 24/04/11 12:03    Sujet du message: Citer

Aucune idée de ce que tu veux dire par "chiffre alpha", mais tu peux changer la base, choisir une autre base que la base décimale, plus la base sera grande moins il te faudra de caractères.

Si tu tiens compte de la casse (majuscule/minuscule), rien qu'en utilisant les lettres de l'alphabet tu as à disposition 26*2 caractères, à cela tu peux bien sur ajouter les chiffres de 0 à 9, ce qui nous fait donc une base de 62 (52 +10).

Tu peux encore augmenter la base en ajoutant des caractères spéciaux tel que "/" "_" , "." , etc ...

Avec une base de 62 il te faut un seul caractère pour coder les valeur numériques de 0 à 61 (62¹ -1), pour une valeur inférieure ou égale 3843 (62² -1) il faut 2 caractères, pour une valeur inférieure ou égale à 238327 (62³ -1) il te faut 3 caractères, etc ...

Mais un tel code n'est pas terrible car non crypté.
_________________
Le violet, c'est moche.


Dernière édition par Troll-Brain le 24/04/11 13:38; édité 1 fois
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé  
 Wareditor
The Master of Nothing


Inscrit le: 22 Déc 2008
Messages: 1638
Sujets: 88
Spécialité en worldedit: Effacer


MessagePosté le: 24/04/11 12:22    Sujet du message: Citer

Je voulais parler de sa : http://world-editor-tutorials.thehelper.net/cat_usersubmit.php?view=37153

Mmm, sa veux dire que plus la base est grande pus le code sera petit...

Si j'arrive pas a comprendre les chiffres Alphas j'utiliserai ta technique
_________________
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé  
 Tirlititi



Inscrit le: 21 Fév 2010
Messages: 1785
Sujets: 22
Spécialité en worldedit: La modestie
Médailles: 1 (En savoir plus...)
Grand mage créateur de sort (Quantité : 1)

MessagePosté le: 24/04/11 13:00    Sujet du message: Citer

Heu....

Ben en fait, c'est exactement la même chose Laughing .
Simplement, comme dans ton tuto ils n'utilisent que les majuscules et les chiffres, ça fait une base de 36 au lieu de 62.

Je crois que "AlphaNumber" veut dire "Nombres AlphaNumériques" = "Nombres qui utilisent des lettres et des chiffres". En fait, c'est juste un système de "bases".
_________________
Warcraft III, c'était mieux avant. Y'avait des purs chefs-d'oeuvres du mapping !
Road Of Glory (par moi)
Casse-briques (par moi)
Temple de Glace (par moi)
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé  
 Wareditor
The Master of Nothing


Inscrit le: 22 Déc 2008
Messages: 1638
Sujets: 88
Spécialité en worldedit: Effacer


MessagePosté le: 24/04/11 13:17    Sujet du message: Citer

C'est bon je crois comprendre Very Happy

Ps: Il le dit lui meme que sa reduit la taille par 2 si tu met le double de caractheres mais que sa sere uniquement pour les nbrs tres larges
_________________
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé  
 Troll-Brain
Ri1kamoua


Inscrit le: 23 Aoû 2007
Messages: 7146
Sujets: 147
Spécialité en worldedit: le troll, le flood, la vulgarité, mon coeur balance
Médailles: 2 (En savoir plus...)
Grand mage créateur de sort (Quantité : 1) Rédacteur de tuto #3 (Quantité : 1)

MessagePosté le: 24/04/11 13:49    Sujet du message: Citer

Wareditor a écrit:
C'est bon je crois comprendre Very Happy

Ps: Il le dit lui meme que sa reduit la taille par 2 si tu met le double de caractheres mais que sa sere uniquement pour les nbrs tres larges


Ca ne veut rien dire "réduit la taille par 2" et "uniquement pour les nombres très larges".

Ex :

36³ - 1 = 46655 ; 36² -1 = 1295

62³ - 1 = 238327 ; 62² - 1 = 3843

Autant utiliser la base la plus forte possible, et pour que le joueur fasse bien la distinction entre les minuscules, majuscules,chiffres et caractères spéciaux tu peux coloriser le string :

http://worldedit.free.fr/forum/viewtopic.php?t=1921&start=0

Et pour convertir aisément de la base décimale à une autre et vice versa :

http://worldedit.free.fr/forum/viewtopic.php?t=704
_________________
Le violet, c'est moche.
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé  
 Wareditor
The Master of Nothing


Inscrit le: 22 Déc 2008
Messages: 1638
Sujets: 88
Spécialité en worldedit: Effacer


MessagePosté le: 24/04/11 14:10    Sujet du message: Citer

Cette info vient pas de moi Razz

Merci pour les liens Smile
Sinon tu as des idées de cryptage ?( j'utilise deja la "clé" pour le nom )
_________________
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé  
 Troll-Brain
Ri1kamoua


Inscrit le: 23 Aoû 2007
Messages: 7146
Sujets: 147
Spécialité en worldedit: le troll, le flood, la vulgarité, mon coeur balance
Médailles: 2 (En savoir plus...)
Grand mage créateur de sort (Quantité : 1) Rédacteur de tuto #3 (Quantité : 1)

MessagePosté le: 24/04/11 14:16    Sujet du message: Citer

Je ne me suis jamais intéressé au cryptage, de toute façon tant que la map est jouable, le script est accessible, donc on peut toujours accéder à l'algorithme de cryptage.
_________________
Le violet, c'est moche.
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé  
 Wareditor
The Master of Nothing


Inscrit le: 22 Déc 2008
Messages: 1638
Sujets: 88
Spécialité en worldedit: Effacer


MessagePosté le: 24/04/11 14:49    Sujet du message: Citer

Dommage Sad
Si quelqun a des idées qu'il les donne !
_________________
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé  
 Tirlititi



Inscrit le: 21 Fév 2010
Messages: 1785
Sujets: 22
Spécialité en worldedit: La modestie
Médailles: 1 (En savoir plus...)
Grand mage créateur de sort (Quantité : 1)

MessagePosté le: 24/04/11 16:13    Sujet du message: Citer

Le meilleur système de cryptage (W3) que j'ai vu, c'est dans la map "Warlock" qui utilise un système de wait pas facile à décrypter même quand on a accès au code.

Sinon, quand j'avais commencé mon système de Save/Load, je sauvegardais l'heure de la journée et je l'utilisais pour changer de base (càd que si l'or était codé par "AFH", il fallait utiliser l'heure de la journée pour avoir accès à la base : "AFH" pouvait vouloir dire "10 *62² + 16 *62 + 18" ou "25 *62² + 31 *62 + 33" selon l'heure).

Mais je suis sûr que je l'ai uploadé quelque part, je le retrouve et je te montre (ce sera en jass, par contre, mais comme c'est surtout du calcul...).

EDIT : Oulà, je me souvenais plus qu'il était si long ^^'. Et il est même pas fini (m'enfin y'a de bonnes bases). Voilà :
Secret:

Jass:
//================================================================================
//  Mots De Passe
//================================================================================
function ChangeBase takes string s, string table, integer length returns integer
    local integer i=0
    local integer j
    local integer base=StringLength(table)
    local integer res=0
    local boolean IsValid
    if (StringLength(s)!=length) then
        return -1
    endif
    loop
        exitwhen i>=length
        set j=0
        set IsValid=false
        loop
            exitwhen j>=base
            if (SubString(s,i,i+1)==SubString(table,j,j+1)) then
                set res=res+j*R2I(Pow(base,i))
                set IsValid=true
            endif
            set j=j+1
        endloop
        if (not(IsValid)) then
            return -1
        endif
        set i=i+1
    endloop
    return res
endfunction

function ChangeBase2 takes integer value, string table, integer length returns string
    local integer i=0
    local integer tempValue
    local integer base=StringLength(table)
    local string res=""
    loop
        exitwhen i>=length
        set tempValue=ModuloInteger(value,R2I(Pow(base,i+1)))/R2I(Pow(base,i))
        set res=res+SubString(table,tempValue,tempValue+1)
        set i=i+1
    endloop
    return res
endfunction

function IntegerRecognize takes string s, string table, integer Length returns integer
    local integer i=0
    local integer j=0
    if (StringLength(s)!=Length) then
        set udg_BooleanVariable=false
        return -1
    endif
    loop
        exitwhen i>=Length
        if (SubString(s,i,i+1)!=SubString(table,0,1)) then
            set j=i
        endif
        set i=i+1
    endloop
    set i=0
    loop
        exitwhen i>=StringLength(table)
        if (SubString(s,j,j+1)==SubString(table,i,i+1)) then
            return udg_CodeInteger[i+j*StringLength(table)]
        endif
        set i=i+1
    endloop
    set udg_BooleanVariable=false
    return -1
endfunction

function IntegerRecognize2 takes integer value, string table, integer Length returns string
    local integer i=0
    local integer j
    local string res=""
    loop
        exitwhen udg_CodeInteger[i]==value
        set i=i+1
    endloop
    set j=i
    set i=0
    loop
        exitwhen i>=Length
        if (j<StringLength(table)*(i+1) and j>=StringLength(table)*i) then
            set res=res+SubString(table,j,j+1)
        else
            set res=res+SubString(table,0,1)
        endif
        set i=i+1
    endloop
    return res
endfunction

function DecodeTime takes string s returns real
    local real res
    set res=ChangeBase(SubString(s,0,3),"2X3FONT5PLUS1CDEMAH8YU",3)
    if (res==-1) then
        set udg_BooleanVariable=false
    endif
    set res=ModuloReal(res*0.01,24)
    return res
endfunction

function DecodeNbJoueur takes string s returns integer
    local integer res=ChangeBase(SubString(s,0,3),"2X3FONT5PLUS1CDEMAH8YU",3)
    if (res==-1 or res>2400*CST_NBJOUEURMAX) then
        set udg_BooleanVariable=false
        return 0
    endif
    return res/2400+1
endfunction

function DecodePlayerIAttribut takes string s, integer codeIndex, integer nbJoueur, string whichAttribut returns integer
    local integer P=S2I(SubString(whichAttribut,StringLength(whichAttribut)-1,StringLength(whichAttribut))-1
    local integer Min
    local integer Length
    local integer modulo=nbJoueur*10
    local string table="ZuDj3aHfAvNn7eUrIdGqQzLtPo5iWmBwFl8cKgSxYh0yTC2pOJs4Ek1RbV6MX9"
    local boolean RecognizeType=true
    set whichAttribut=SubString(whichAttribut,0,StringLength(whichAttribut)-1)
    if (whichAttribut=="Hero") then
        set udg_CodeInteger[0]='Gard'
        set udg_CodeInteger[1]='HVMB'
        set udg_CodeInteger[2]='UVMN'
        set udg_CodeInteger[3]='EVCD'
        set Min=ModuloInteger(P+codeIndex,modulo)
        set Length=1
        set table=SubStringLoop(table,codeIndex+P*3+1,codeIndex+P*3+5)
    elseif (whichAttribut=="Xp") then
        set RecognizeType=false
        set Min=ModuloInteger(nbJoueur+P+codeIndex,modulo)
        set Length=3
        set table=SubStringLoop(table,codeIndex+P+31,codeIndex+P+31)
    elseif (whichAttribut=="Arme") then
        set udg_CodeInteger[0]='Inul'
        set udg_CodeInteger[1]='IBa1'
        set udg_CodeInteger[2]='IBa2'
        set udg_CodeInteger[3]='IBa3'
        set udg_CodeInteger[4]='IBa4'
        set udg_CodeInteger[5]='IBa5'
        set udg_CodeInteger[6]='IBa6'
        set Min=ModuloInteger(4*nbJoueur+P+codeIndex,modulo)
        set Length=1
        set table=SubStringLoop(table,codeIndex+P*P+12,codeIndex+P*P+19)
    elseif (whichAttribut=="Casque") then
        set udg_CodeInteger[0]='Inul'
        set Min=ModuloInteger(5*nbJoueur+P+codeIndex,modulo)
        set Length=1
        set table=SubStringLoop(table,codeIndex+P*P*2+37,codeIndex+P*P*2+38)
    elseif (whichAttribut=="Bouclier") then
        set udg_CodeInteger[0]='Inul'
        set Min=ModuloInteger(6*nbJoueur+P+codeIndex,modulo)
        set Length=1
        set table=SubStringLoop(table,codeIndex+P*2+20,codeIndex+P*2+21)
    elseif (whichAttribut=="Armure") then
        set udg_CodeInteger[0]='Inul'
        set Min=ModuloInteger(7*nbJoueur+P+codeIndex,modulo)
        set Length=1
        set table=SubStringLoop(table,codeIndex+P*12+28,codeIndex+P*12+29)
    elseif (whichAttribut=="Gant") then
        set udg_CodeInteger[0]='Inul'
        set Min=ModuloInteger(8*nbJoueur+P+codeIndex,modulo)
        set Length=1
        set table=SubStringLoop(table,codeIndex+P+9,codeIndex+P+10)
    elseif (whichAttribut=="Accessoire") then
        set udg_CodeInteger[0]='Inul'
        set Min=ModuloInteger(9*nbJoueur+P+codeIndex,modulo)
        set Length=1
        set table=SubStringLoop(table,P*codeIndex+50,P*codeIndex+51)
    endif
    if (RecognizeType) then
        return IntegerRecognize(SubStringLoop(s,Min,Min+Length),table,Length)
    endif
    return ChangeBase(SubStringLoop(s,Min,Min+Length),table,Length)
endfunction

function EncodeTP takes integer codeIndex returns string
    return ChangeBase2(codeIndex,"2X3FONT5PLUS1CDEMAH8YU",3)
endfunction

function EncodePlayerIAttribut takes string whichAttribut, integer codeIndex, integer value returns string
    local integer P=S2I(SubString(whichAttribut,StringLength(whichAttribut)-1,StringLength(whichAttribut)))-1
    local integer Length
    local integer modulo=udg_NombreJoueurs*10
    local string table="ZuDj3aHfAvNn7eUrIdGqQzLtPo5iWmBwFl8cKgSxYh0yTC2pOJs4Ek1RbV6MX9"
    local boolean RecognizeType=true
    set whichAttribut=SubString(whichAttribut,0,StringLength(whichAttribut)-1)
    if (whichAttribut=="Hero") then
        set udg_CodeInteger[0]='Gard'
        set udg_CodeInteger[1]='HVMB'
        set udg_CodeInteger[2]='UVMN'
        set udg_CodeInteger[3]='EVCD'
        set udg_EntierVariable=ModuloInteger(P+codeIndex,modulo)
        set Length=1
        set table=SubStringLoop(table,codeIndex+P*3+1,codeIndex+P*3+5)
    elseif (whichAttribut=="Xp") then
        set RecognizeType=false
        set udg_EntierVariable=ModuloInteger(udg_NombreJoueurs+P+codeIndex,modulo)
        set Length=3
        set table=SubStringLoop(table,codeIndex+P+31,codeIndex+P+31)
    elseif (whichAttribut=="Arme") then
        set udg_CodeInteger[0]='Inul'
        set udg_CodeInteger[1]='IBa1'
        set udg_CodeInteger[2]='IBa2'
        set udg_CodeInteger[3]='IBa3'
        set udg_CodeInteger[4]='IBa4'
        set udg_CodeInteger[5]='IBa5'
        set udg_CodeInteger[6]='IBa6'
        set udg_EntierVariable=ModuloInteger(4*udg_NombreJoueurs+P+codeIndex,modulo)
        set Length=1
        set table=SubStringLoop(table,codeIndex+P*P+12,codeIndex+P*P+19)
    elseif (whichAttribut=="Casque") then
        set udg_CodeInteger[0]='Inul'
        set udg_EntierVariable=ModuloInteger(5*udg_NombreJoueurs+P+codeIndex,modulo)
        set Length=1
        set table=SubStringLoop(table,codeIndex+P*P*2+37,codeIndex+P*P*2+38)
    elseif (whichAttribut=="Bouclier") then
        set udg_CodeInteger[0]='Inul'
        set udg_EntierVariable=ModuloInteger(6*udg_NombreJoueurs+P+codeIndex,modulo)
        set Length=1
        set table=SubStringLoop(table,codeIndex+P*2+20,codeIndex+P*2+21)
    elseif (whichAttribut=="Armure") then
        set udg_CodeInteger[0]='Inul'
        set udg_EntierVariable=ModuloInteger(7*udg_NombreJoueurs+P+codeIndex,modulo)
        set Length=1
        set table=SubStringLoop(table,codeIndex+P*12+28,codeIndex+P*12+29)
    elseif (whichAttribut=="Gant") then
        set udg_CodeInteger[0]='Inul'
        set udg_EntierVariable=ModuloInteger(8*udg_NombreJoueurs+P+codeIndex,modulo)
        set Length=1
        set table=SubStringLoop(table,codeIndex+P+9,codeIndex+P+10)
    elseif (whichAttribut=="Accessoire") then
        set udg_CodeInteger[0]='Inul'
        set udg_EntierVariable=ModuloInteger(9*udg_NombreJoueurs+P+codeIndex,modulo)
        set Length=1
        set table=SubStringLoop(table,P*codeIndex+50,P*codeIndex+51)
    endif
    if (RecognizeType) then
        return IntegerRecognize2(value,table,Length)
    endif
    return ChangeBase2(value,table,Length)
endfunction

function ReplaceCodeString takes string s, string value, integer minPos returns string
    local integer loopedPos=StringLength(value)+minPos-StringLength(s)
    if (minPos==0) then
        return value+SubString(s,StringLength(value),StringLength(s))
    elseif (loopedPos>0) then
        return SubString(value,StringLength(value)-loopedPos,StringLength(value))+SubString(s,loopedPos,minPos)+SubString(value,0,StringLength(value)-loopedPos)+SubString(s,minPos+StringLength(value),StringLength(s))
    endif
    return SubString(s,0,minPos)+value+SubString(s,minPos+StringLength(value),StringLength(s))
endfunction

function EncodeMain takes nothing returns nothing
    local string res
    local string temp=""
    local integer codeIndex=2400*(udg_NombreJoueurs-1)+R2I(GetFloatGameState(GAME_STATE_TIME_OF_DAY)*100)
    local integer i=1
    call DisplayTimedTextToForce(udg_Joueurs,30,"TRIGSTR_1890")
    if (udg_Heros[1]==null) then
        call DisplayTimedTextToForce(udg_Joueurs,30,"Mot de Passe : XU5BNE")
        return
    endif
    set res=EncodeTP(codeIndex)
    loop
        exitwhen i>udg_NombreJoueurs
        set temp=temp+"          "
        set i=i+1
    endloop
    set i=1
    loop
        exitwhen i>udg_NombreJoueurs
        set temp=ReplaceCodeString(temp,EncodePlayerIAttribut("Hero"+I2S(i),codeIndex,GetUnitTypeId(udg_Heros[i])),udg_EntierVariable)
        set temp=ReplaceCodeString(temp,EncodePlayerIAttribut("Xp"+I2S(i),codeIndex,GetHeroXP(udg_Heros[i])),udg_EntierVariable)
        set temp=ReplaceCodeString(temp,EncodePlayerIAttribut("Arme"+I2S(i),codeIndex,udg_ArmesHeros[i]),udg_EntierVariable)
        set temp=ReplaceCodeString(temp,EncodePlayerIAttribut("Casque"+I2S(i),codeIndex,udg_CasquesHeros[i]),udg_EntierVariable)
        set temp=ReplaceCodeString(temp,EncodePlayerIAttribut("Bouclier"+I2S(i),codeIndex,udg_BouclierHeros[i]),udg_EntierVariable)
        set temp=ReplaceCodeString(temp,EncodePlayerIAttribut("Armure"+I2S(i),codeIndex,udg_ArmuresHeros[i]),udg_EntierVariable)
        set temp=ReplaceCodeString(temp,EncodePlayerIAttribut("Gant"+I2S(i),codeIndex,udg_GantsHeros[i]),udg_EntierVariable)
        set temp=ReplaceCodeString(temp,EncodePlayerIAttribut("Accessoire"+I2S(i),codeIndex,udg_AccessoiresHeros[i]),udg_EntierVariable)
        set i=i+1
    endloop
    set res=res+temp
    call DisplayTimedTextToForce(udg_Joueurs,30,"Mot de Passe : "+res)
endfunction

function DecodeMain takes nothing returns nothing
    local string s=SubString(GetEventPlayerChatString(),5,100)
    local string temp
    local integer i=1
    local integer codeIndex
    local real Time
    local integer NbJoueur
    local integer array HeroType
    local integer array HeroXp
    local integer array HeroItem
    call ReloadGameCachesFromDisk()
    if (s=="XU5BNE") then
        call DisplayCineFilter(false)
        call EnableUserUI(true)
        call DestroyTrigger(GetTriggeringTrigger())
        call TriggerExecute(gg_trg_Cinematique_Debut)
        return
    endif
    set udg_BooleanVariable=true
    set Time=DecodeTime(s)
    set NbJoueur=DecodeNbJoueur(s)
    set codeIndex=ChangeBase(SubString(s,0,3),"2X3FONT5PLUS1CDEMAH8YU",3)
    set temp=SubString(s,3,3+10*NbJoueur)
    loop
        exitwhen i>NbJoueur
        set HeroType[i]=DecodePlayerIAttribut(temp,codeIndex,NbJoueur,"Hero"+I2S(i))
        set HeroXp[i]=DecodePlayerIAttribut(temp,codeIndex,NbJoueur,"Xp"+I2S(i))
        set HeroItem[i]=DecodePlayerIAttribut(temp,codeIndex,NbJoueur,"Arme"+I2S(i))
        set HeroItem[i+4]=DecodePlayerIAttribut(temp,codeIndex,NbJoueur,"Casque"+I2S(i))
        set HeroItem[i+8]=DecodePlayerIAttribut(temp,codeIndex,NbJoueur,"Bouclier"+I2S(i))
        set HeroItem[i+12]=DecodePlayerIAttribut(temp,codeIndex,NbJoueur,"Armure"+I2S(i))
        set HeroItem[i+16]=DecodePlayerIAttribut(temp,codeIndex,NbJoueur,"Gant"+I2S(i))
        set HeroItem[i+20]=DecodePlayerIAttribut(temp,codeIndex,NbJoueur,"Accessoire"+I2S(i))
        set i=i+1
    endloop
    if (udg_BooleanVariable) then
        call ClearTextMessages()
        call SetFloatGameState(GAME_STATE_TIME_OF_DAY,Time)
        set i=1
        loop
            exitwhen i>NbJoueur
            set udg_Heros[i]=CreateUnit(ConvertedPlayer(i),HeroType[i],-800,800,270)
            call SetHeroXP(udg_Heros[i],HeroXp[i],false)
            call UnitAddItemById(udg_Heros[i],HeroItem[i])
            set udg_ArmesHeros[i]=HeroItem[i]
            call UnitAddItemById(udg_Heros[i],HeroItem[i+4])
            set udg_CasquesHeros[i]=HeroItem[i+4]
            call UnitAddItemById(udg_Heros[i],HeroItem[i+8])
            set udg_BouclierHeros[i]=HeroItem[i+8]
            call UnitAddItemById(udg_Heros[i],HeroItem[i+12])
            set udg_ArmuresHeros[i]=HeroItem[i+12]
            call UnitAddItemById(udg_Heros[i],HeroItem[i+16])
            set udg_GantsHeros[i]=HeroItem[i+16]
            call UnitAddItemById(udg_Heros[i],HeroItem[i+20])
            set udg_AccessoiresHeros[i]=HeroItem[i+20]
            set i=i+1
        endloop
        call PanCameraTo(-800,800)
        call DestroyTrigger(GetTriggeringTrigger())
    else
        call DisplayTimedTextToPlayer(Player(0),0,0,30,"|cffff0000Erreur De Chargement|r")
    endif
endfunction


EDIT 2: T'aurais pu me le dire qu'il manquait une partie ! On va dire que le nom est suffisamment explicite et que t'avais tout compris.
Jass:
function SubStringLoop takes string s, integer min, integer max returns string
    local integer length=StringLength(s)
    set min=ModuloInteger(min,length)
    set max=ModuloInteger(max,length)
    if (min>=max) then
        return SubString(s,min,length)+SubString(s,0,max)
    endif
    return SubString(s,min,max)
endfunction



"XU5BNE" était le mot de passe de base quand rien n'avait été fait. J'avais déjà un sacré sens de l'humour à l'époque (que je n'ai pas perdu puisque je te conseille de comprendre ce code).

Le plus important, c'est dans la fonction "ChangeBase" et "ChangeBase2" (le suffixe "2" signifiant qu'il s'agit de l'encodage et pas du décodage). Les "Recognizes" sont utiles pour les IDs (parce que ce sont de très grands nombres et qu'on en utilise peu). Et le udg_BooleanVariable est mis sur false dès que le code est estimé incorrect.
Il y avait 4 joueurs maximum (les objets de tous les joueurs étaient tous dans la même variable déployée).
La partie "Encode" est sans doute plus facile à comprendre.

La table "ZuDj3aHfAvNn7eUrIdGqQzLtPo5iWmBwFl8cKgSxYh0yTC2pOJs4Ek1RbV6MX9" est l'ensemble des caractères que j'utilise mais la table "2X3FONT5PLUS1CDEMAH8YU" est une table de 'translation' qui me permet de changer de base dynamiquement. En plus de ça, je "fais tourner" le code (sauf les 3 premières lettres qui sont l'heure = TimePlayed dans EncodeTP).
Évidemment, il y a des variables (comme Heros[] ou les IDs des objets) qui sont spécifiques à ma map. C'est juste pour te donner une idée (et avoir ton suicide sur la conscience Very Happy).

Pour info, ça vient de la version RPG de ma map.
_________________
Warcraft III, c'était mieux avant. Y'avait des purs chefs-d'oeuvres du mapping !
Road Of Glory (par moi)
Casse-briques (par moi)
Temple de Glace (par moi)


Dernière édition par Tirlititi le 02/05/11 23:09; édité 1 fois
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé  
 Wareditor
The Master of Nothing


Inscrit le: 22 Déc 2008
Messages: 1638
Sujets: 88
Spécialité en worldedit: Effacer


MessagePosté le: 24/04/11 17:04    Sujet du message: Citer

Merci même si j'ai pas compris comment sa marche ( t’inquiète pas je vais relire une dizaine de fois et sa ira Very Happy )
XU5BNE = Hasbin ?
_________________
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé  
 Tirlititi



Inscrit le: 21 Fév 2010
Messages: 1785
Sujets: 22
Spécialité en worldedit: La modestie
Médailles: 1 (En savoir plus...)
Grand mage créateur de sort (Quantité : 1)

MessagePosté le: 24/04/11 17:19    Sujet du message: Citer

Nop, c'est juste mon propre MdP sur la map d'Archer Wars (1000000 de kills et 3 deaths, et ouais ... Twisted Evil , bon c'est juste pour débloquer les persos jouables).

En relisant, un truc que j'ai mis quelque temps à comprendre, c'est que le "udg_EntierVariable" est modifié dans la fonction "EncodePlayerIAttribut" pour être utilisé dans "ReplaceCodeString". J'avais tout mis en 1 ligne mais c'est moins lisible du coup.

Sinon, surtout ne te surmène pas trop. Il est sans doute pas trop difficile à cracker quand on y a accès (mais difficile sinon).
Tu peux aussi demander à jk2pach qui en a fait plusieurs et Rommstein qui a fait un tuto.
_________________
Warcraft III, c'était mieux avant. Y'avait des purs chefs-d'oeuvres du mapping !
Road Of Glory (par moi)
Casse-briques (par moi)
Temple de Glace (par moi)
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé  
 profet
Instanton Gravitationnel Singulier


Inscrit le: 21 Aoû 2007
Messages: 1633
Sujets: 53
Spécialité en worldedit: Pain d'épice multitâche (terrain, scripts, textures, modèles...)
Médailles: 2 (En savoir plus...)
Rédacteur de tuto #3 (Quantité : 1) Profet (Quantité : 1)

MessagePosté le: 02/05/11 22:51    Sujet du message: Citer

Sinon y'a ptetre quelqu'un qui a envie de recoder un SHA-1 ou un MD5 ? :p
J'ai une lib d'opérateurs binaires en jass si vous voulez =p
_________________

Bêta Systems: 70%
Bêta Spells: 13%
Bêta Arts & graphics: 70%
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web du posteur  
 Troll-Brain
Ri1kamoua


Inscrit le: 23 Aoû 2007
Messages: 7146
Sujets: 147
Spécialité en worldedit: le troll, le flood, la vulgarité, mon coeur balance
Médailles: 2 (En savoir plus...)
Grand mage créateur de sort (Quantité : 1) Rédacteur de tuto #3 (Quantité : 1)

MessagePosté le: 02/05/11 23:15    Sujet du message: Citer

profet a écrit:
Sinon y'a ptetre quelqu'un qui a envie de recoder un SHA-1 ou un MD5 ? :p
J'ai une lib d'opérateurs binaires en jass si vous voulez =p


Même si c'était plus du flood qu'autre chose, y'a un truc qui m'échappe.
Normalement le résultat de ces algorithmes n'est pas réversible, non ?
Si c'est bien le cas alors ça devrait être assez useless car il faut bien récupérer les données tel que le niveau du héros, l'or en possession toussa toussa dans le code.

Ca serait "utile" que pour des mots de passe, cheatcode, ...
Bref là ou l'on a pas besoin d'y extraire des données autre que la signature en elle même donnée par les algorithmes en fonction de l'entrée du joueur.

Eclairez ma lanterne si j'ai trébuché dans les méandres de l'ignorance.
_________________
Le violet, c'est moche.
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé  
Montrer les messages depuis:   
Poster un nouveau sujet   Répondre au sujet    Worldedit Index du Forum -> Aide sur les déclencheurs Toutes les heures sont au format GMT + 1 Heure
Page 1 sur 1

 
Sauter vers:  
Vous ne pouvez pas poster de nouveaux sujets dans ce forum
Vous ne pouvez pas répondre aux sujets dans ce forum
Vous ne pouvez pas éditer vos messages dans ce forum
Vous ne pouvez pas supprimer vos messages dans ce forum
Vous ne pouvez pas voter dans les sondages de ce forum


Powered by phpBB © 2001, 2005 phpBB Group
Traduction par : phpBB-fr.com