..:: Forum Imperium Diablo ::..
Oficjalne Forum Dyskusyjne Serwisu Imperium Diablo

FAQFAQ  SzukajSzukaj  UżytkownicyUżytkownicy  GrupyGrupy  StatystykiStatystyki
RejestracjaRejestracja  ZalogujZaloguj

Odpowiedz do tematu
Poprzedni temat :: Następny temat
[Program]Konwerter do postaci ladderowych na nonladderowe
Autor Wiadomość
Eps 
JuniorAdmin



Dołączył: 18 Maj 2006
Wysłany: 2015-04-12, 06:16   [Program]Konwerter do postaci ladderowych na nonladderowe

Nazwa programu: chksum.exe
Opis: Konwerter postaci ladderowych na nonladderowe i odwrotnie.
Program oblicza sumę kontrolną w celu poprawności uruchomienia postaci bez używania programów do edycji save.
Przeznaczenie programu kierowane jest dla prywatnych serwerów w celu wykonania resetu laddera, jaki odbywa się na serwerach Blizzarda i dzięki temu można kontynuować grę pozbawiając się korzyści płynących z postaci ladderowych.
Sposób użycia:
1. Metoda przeciągnij/upuść save postaci.
2. Metoda stworzenia pliku *.bat. W pliku umieść poniższy wpis:
chksum <nazwapostaci>
Zapisz plik *.bat i uruchom go.

Epilepsja Studio 2015 by Eps.

Link do pobrania: http://www.mediafire.com/...r1it/chksum.zip
 
     
Jamajka 
Nekromanta


Konto na BN: Jamajka#2610
Konto na IDR: Jamajka
Wiek: 20
Dołączył: 21 Lut 2013
Skąd: Norwegia
Wysłany: 2015-04-21, 20:59   

Można by dodać do Imperialnego działu download ;) .
 
 
     
Szeranf 

Cult of Personality


Dołączył: 18 Mar 2012
Skąd: (✌ ゚ ∀ ゚)☞
Wysłany: 2015-04-21, 21:04   

Bardzo fajne, gratulacje! :)
 
     
Eps 
JuniorAdmin



Dołączył: 18 Maj 2006
Wysłany: 2015-04-21, 21:44   

Jeszcze lepiej, jakby się takie coś stosowało na ID REALM. Może niektórzy, by pozostali na realmie, których już od dawna nie ma. Nie byłoby zaczynania od zera (mimo utraty tego co daje ladder). Ale co ja tam wiem. ;)
 
     
Szeranf 

Cult of Personality


Dołączył: 18 Mar 2012
Skąd: (✌ ゚ ∀ ゚)☞
Wysłany: 2015-04-22, 08:11   

A dałoby się zrobić operację odwrotną, tudzież przekonwertować programem postać nld na ld? Kiedyś myślałem dużo nad systemem ladderowym w d2 i wykombinowałem, że może dobrą opcją byłaby nieco inna organizacja tego systemu. Trybem podstawowym byłby nld, a gracze mogliby sobie z konta raz na tydzień przenieść na ld tylko jedną postać. Na takim ladderze rywalizowaliby o miejsca w drabinkach z expem, zabiciem potworów, zebraniem określonych przedmiotów i innych rzeczach - na bn tego nie będzie, ale realm to inna bajka. Również eventy mogłyby się odbywać tylko w takim systemie ladderowym, gdzie zabiera się tylko jedną postać na tydzień, pokrywający się z tygodniem, w którym trwałby event - zwolennicy jak i przeciwnicy eventów byliby zadowoleni.

A co do save'ów, to domyślam się, że ktoś przed resetami realmu pozgrywał gdzieś te postacie, w razie gdyby coś poszło nie tak. Fajnie by było, gdyby zostały spakowane do jednego pliku i wrzucone do downloadu, żeby gracze sp mogli się nimi pobawić.
 
     
Eps 
JuniorAdmin



Dołączył: 18 Maj 2006
Wysłany: 2015-04-22, 09:36   

Teoretycznie: Bez problemu da się to zrobić. Np. będzie trzeba jedynie znaleźć w kodzie gry funkcję odpowiadającą za stworzenie postaci ladderowej i utworzyć nowy przycisk, który by umożliwiał konwertowanie postaci na ladder.
Ewentualnie przez stronę www dorobić taki dodatek.
Praktycznie: Trzeba działać i próbować.
Szeranf napisał/a:
Również eventy mogłyby się odbywać tylko w takim systemie ladderowym, gdzie zabiera się tylko jedną postać na tydzień, pokrywający się z tygodniem, w którym trwałby event - zwolennicy jak i przeciwnicy eventów byliby zadowoleni.

Wtedy postacie nonladder musiałyby być przekierowywane na zupełnie inny GS, bo tu zwiększenie ilości potworów, alvl i inne poprzez wprowadzone zmiany z eventu nie mają znaczenia czy to ladder czy tez nonladder. Działa to na obu trybach. Niestety...
 
     
phxpro 

Dołączył: 01 Sie 2015
Wysłany: 2015-08-02, 03:35   

Eps ten programik od Ciebie nie działa mi;/
zacząłem pisać własny i mi nie wychodzi;/ źle liczy sumę kontrolną:
Kod:
#include <iostream>
#include <fstream>
#include <iomanip>// std::setfill, std::setw
using namespace std;

int main()
{
    int tablica[10000];

    int a1=0;
    int a2=0;
    int a3=0;
    int a4=0;
    int d=0;
    int b=0;
    int length=0;

    fstream f;
    f.open("ab.d2s",ios::in|ios::binary);

    if ( f )
    {
        // przesun pozycje na koniec
        f.seekg( 0, ios::end );
        // odczytaj pozycje w pliku -> rozmiar pliku
        length = f.tellg();
        // wroc na poczatek pliku!
        f.seekg( 0, ios::beg );
        cout << "Rozmiar pliku to: " << length << endl;
    }

    for(int a=0; a<length; a++)
    {
        tablica[a]=f.get();
    }
    f.close();

//tablica[36]=tablica[36]+64;

    tablica[13]=0;
    tablica[14]=0;
    tablica[15]=0;
    tablica[16]=0;

    for(int i=0; i<length; i++)
    {
        d=tablica[i]+b;

        a1=(a1*2)+d;
        a2=a2*2;

        if (a1>255)
        {
            a2=a2+((a1-(a1%256))/256);
            a1=a1%256;
        }

        a3=a3*2;

        if (a2>255)
        {
            a3=a3+((a2-(a2%256))/256);
            a2=a2%256;
        }

        a4=a4*2;
        if (a3>255)
        {
            a4=a4+((a3-(a3%256))/256);
            a3=a3%256;
        }
        if (a4>255)
        {
            a4=a4%256;
        }
        if((a4&&128/*&&&H80*/)!=0)
            b=1;
        else
            b=0;

        cout<<hex<<a4<<" "<<a3<<" "<<a2<<" "<<a1<<endl;
    }

    tablica[13]=a1;
    tablica[14]=a2;
    tablica[15]=a3;
    tablica[16]=a4;

//cout<<hex<<a4<<" "<<a3<<" "<<a2<<" "<<a1<<endl;
//64 06 5D 13
    /*
        for(int a=0;a<length;a++)
        {

           cout<<hex<<setfill ('0')<<setw (2)<<tablica[a]<<" ";
        }*/
    return 0;
}

jeśli widzisz jakiś błąd to daj znać:)

e: potem znalazłem nowa wersja algotmu:
Kod:
for ( int i = 0; i < length; i++ )
              b = (b<<1) + tablica[i] + ( b & 0x80000000 ? 1 : 0 );

o dziwo suma kontrolna jest już blisko/ lecz jest niedokładna...

e: rozwiazany problem:)
Kod:
// pucData - pointer to the byte stream of the .d2s file
// iSize - number of bytes in the stream ( filesize )
void Checksum( unsigned char *pucData, int iSize )
{
// delete old checksum at offset 0x0C
*((unsigned int*)(pucData+12)) = 0;
// init new checksum with 0
unsigned int uiCS = 0;
// this is the whole checksum calculation
for ( int j = 0; j < iSize; ++j )
uiCS = (uiCS<<1) + pucData[j] + ( uiCS & 0x80000000 ? 1 : 0 );
// write new checksum to stream
*((unsigned int*)(pucData+12)) = uiCS;
}
 
     
Wyświetl posty z ostatnich:   
Odpowiedz do tematu
Nie możesz pisać nowych tematów
Nie możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach
Nie możesz załączać plików na tym forum
Możesz ściągać załączniki na tym forum
Dodaj temat do Ulubionych
Wersja do druku

Skocz do:  

Powered by phpBB modified by Przemo © 2003 phpBB Group
Forum należy do serwisu Imperium Diablo