RENAISSANCE - OpenMMO/openMMO GitHub Wiki

##Sommaire

  • 1 Calcul à la renaissance

  • 2 Reverse pour les points séraphin

  • 3 Reverse pour le calcul des statistiques

  • 4 Algorithme du calcul de la renaissance

##Calcul à la renaissance

Sur cette page vous expose les algorithmes des calculs de points séraphin et statistique du personnage lors de la renaissance.

##Reverse pour les points séraphin

Ici nous avons rechercher l'endroit ou le flag 30477 (0x76EF - Flag des points séraph) et calculer et modifier à la renaissance.

.text:00448B80 ; void __cdecl RemortTo(class Unit *, unsigned long, unsigned long, unsigned long)
.text:00448B80                 public ?RemortTo@@YAXPAVUnit@@KKK@Z
.text:00448B80 ?RemortTo@@YAXPAVUnit@@KKK@Z proc near
.text:00448B80
...
.text:00448C52                 mov     edx, [esi]
.text:00448C54                 lea     eax, [ebx+ebx+8] ; Le calcul ce trouve ici
.text:00448C58                 push    eax
.text:00448C59                 push    76EFh ; Flag a modifier
.text:00448C5E                 mov     ecx, esi
.text:00448C60                 call    dword ptr [edx+4] ; On appel la fonction de modification d'un flag
.text:00448C63                 xor     edi, edi
.text:00448C65

##Reverse pour le calcul des statistiques

Dans cette seconde partie, nous avons rechercher les informations concernant la distribution des statistiques à la renaissance.

.text:00448DFF loc_448DFF:                             ; CODE XREF: RemortTo(Unit *,ulong,ulong,ulong)+112 j
...
.text:00448EAA                 lea     edi, [ebx+ebx*4+14h] ; Le calcul ce trouve ici
.text:00448EAE                 push    edi
.text:00448EAF                 mov     ecx, esi
.text:00448EB1                 call    ?SetINT@Unit@@QAEXG@Z ; Unit::SetINT(ushort)
.text:00448EB6                 push    edi
.text:00448EB7                 mov     ecx, esi
.text:00448EB9                 call    ?SetEND@Unit@@QAEXG@Z ; Unit::SetEND(ushort)
.text:00448EBE                 push    edi
.text:00448EBF                 mov     ecx, esi
.text:00448EC1                 call    ?SetSTR@Unit@@QAEXG@Z ; Unit::SetSTR(ushort)
.text:00448EC6                 push    edi
.text:00448EC7                 mov     ecx, esi
.text:00448EC9                 call    ?SetAGI@Unit@@QAEXG@Z ; Unit::SetAGI(ushort)
.text:00448ECE                 push    edi
.text:00448ECF                 mov     ecx, esi
.text:00448ED1                 call    ?SetWIS@Unit@@QAEXG@Z ; Unit::SetWIS(ushort)
.text:00448ED6                 push    0Fh
.text:00448ED8                 mov     ecx, esi
.text:00448EDA                 call    ?SetATTACK@Unit@@QAEXG@Z ; Unit::SetATTACK(ushort)
.text:00448EDF                 push    0Fh
.text:00448EE1                 mov     ecx, esi
.text:00448EE3                 call    ?SetDODGE@Unit@@QAEXG@Z ; Unit::SetDODGE(ushort)
...
.text:00449021                 call    ??0Objects@@QAE@XZ ; Objects::Objects(void)
.text:00449026                 mov     ebx, eax
.text:00449028

##Algorithme du calcul de la renaissance

#include <cstdlib>
#include <iostream>

using namespace std;

char *RebornArray[10] = {
    "first", "second", "third" , "fourth", "fifth",
    "sixth", "seventh", "eighth", "ninth", "th"
};

int reborn(int nbreborn) {
    int stat, seraphpt;
    cout << "Congratulations to <Player> for attaining his ";
    if (nbreborn < 10) cout << RebornArray[nbreborn - 1];
    else cout << nbreborn << RebornArray[9];
    cout << " rebirth!\n";
    // Calculate the number of points for a seraphin 
    seraphpt = (nbreborn * 2) + 8;
    cout << "\tSeraph number of points : " <<seraphpt << "\n"; 
    // Calculate the number of points for the all stats
    stat = (nbreborn * 5) + 20;
    cout << "\tAll statistics contain " << stat << " points\n";
}

int main(int argc, char *argv[])
{
    for (int i = 1; i <= 10; i++) reborn(i);
    system("PAUSE");
    return EXIT_SUCCESS;
}
⚠️ **GitHub.com Fallback** ⚠️