[MySql] Czemu tak dziwnie dane pobiera?

0

Mam problem, programik powinien pobrać wybraną liczbę, niezależnie od jej wielkości. Natomiast w praktyce wygląda to następująco:

jeśli liczba jest <255 jest pobrana bez zmian. jeśli jest >255 np 300, następuje obcięcie jej o 256, czyli zostaje 44, analogicznie w przypadku innych liczb.
Próbowałem wszelakich metod zmian typu danych, WORD, DWORD, int... jestem bezsilny
<url>
http://hb-cure.go.pl/pliki/LoginServer.rar</url>

0
  1. struktura tabeli
  2. kod, który pobiera dane
    nikt nie będzie źródeł przeglądał bo nikomu się nie chce
0

ciężko jest mi tak to opisac. to jest serwer logowania do gry. pobiera z bazy dane o postaci a nastepnie przesyła je do serwera gry. i gdzieś między pobraniem danych a ich wyświetleniem w grze zostają one zmniejszone o 256. Problem dotyczy tylko danych o:

  • sile
  • witalności
  • charyzmie
  • magii
  • inteligencjii

zauważyłem że poziom postaci działa prawidłowo i próbowałem analogicznie z powyższymi danymi. ale ciągle to samo jeśli >255 to x - 256...

0

Hmm... A jaki masz typ danych? Wygląda, na jakąś wielkość na jednym bajcie i przekręcenie licznika.

0

dostałem małą podpowiedź iż mając:

            else if(IsSame(field[f]->name, "GuildRank"))        PutOffsetValue(Data, 40, DEF_BYTESIZE, atoi(myRow[f]));
            else if(IsSame(field[f]->name, "HP"))               PutOffsetValue(Data, 41, DEF_DWORDSIZE, atoi(myRow[f]));
            else if(IsSame(field[f]->name, "Level"))            PutOffsetValue(Data, 44, DEF_WORDSIZE, atoi(myRow[f]));
            else if(IsSame(field[f]->name, "Strenght"))         PutOffsetValue(Data, 46, DEF_WORDSIZE, atoi(myRow[f]));
            else if(IsSame(field[f]->name, "Vitality"))         PutOffsetValue(Data, 47, DEF_WORDSIZE, atoi(myRow[f]));
            else if(IsSame(field[f]->name, "Dexterity"))        PutOffsetValue(Data, 48, DEF_WORDSIZE, atoi(myRow[f]));
            else if(IsSame(field[f]->name, "Intelligence"))     PutOffsetValue(Data, 49, DEF_WORDSIZE, atoi(myRow[f]));
            else if(IsSame(field[f]->name, "Magic"))            PutOffsetValue(Data, 50, DEF_WORDSIZE, atoi(myRow[f]));
            else if(IsSame(field[f]->name, "Agility"))          PutOffsetValue(Data, 51, DEF_WORDSIZE, atoi(myRow[f]));
            else if(IsSame(field[f]->name, "Luck"))             PutOffsetValue(Data, 52, DEF_WORDSIZE, atoi(myRow[f]));
            else if(IsSame(field[f]->name, "Exp"))              PutOffsetValue(Data, 54, DEF_DWORDSIZE, atoi(myRow[f]));
            else if(IsSame(field[f]->name, "MagicMastery"))     SafeCopy(Data+58, myRow[f], strlen(myRow[f]));
            else if(IsSame(field[f]->name, "Nation"))           SafeCopy(Data+182, myRow[f], strlen(myRow[f]));
            else if(IsSame(field[f]->name, "MP"))               PutOffsetValue(Data, 192, DEF_DWORDSIZE, atoi(myRow[f]));
            else if(IsSame(field[f]->name, "SP"))               PutOffsetValue(Data, 196, DEF_DWORDSIZE, atoi(myRow[f]));
            else if(IsSame(field[f]->name, "EK"))               PutOffsetValue(Data, 201, DEF_DWORDSIZE, atoi(myRow[f]));
            else if(IsSame(field[f]->name, "PK"))               PutOffsetValue(Data, 205, DEF_DWORDSIZE, atoi(myRow[f]));
            else if(IsSame(field[f]->name, "RewardGold"))       PutOffsetValue(Data, 209, DEF_DWORDSIZE, atoi(myRow[f]));
            else if(IsSame(field[f]->name, "Hunger"))           PutOffsetValue(Data, 313, DEF_BYTESIZE, atoi(myRow[f]));

Data, 44, DEF_WORDSIZE - chodzi o te numerki w nawiasie, między Level a Strenght są 2 liczby odstępu, a między Strenght Vitality tylko 1.. czyżby to?

            else if(IsSame(field[f]->name, "Level"))            PutOffsetValue(Data, 44, DEF_WORDSIZE, atoi(myRow[f]));
            else if(IsSame(field[f]->name, "Strenght"))         PutOffsetValue(Data, 46, DEF_WORDSIZE, atoi(myRow[f]));
            else if(IsSame(field[f]->name, "Vitality"))         PutOffsetValue(Data, 47, DEF_WORDSIZE, atoi(myRow[f]));
0

daj funkcję PutOffsetValue

0
void PutOffsetValue(char * cp, DWORD offset, BYTE size, int value)
{
 BYTE   *bp;
 WORD   *wp;
 DWORD  *dwp;
 char   *pcp;

 pcp = (char *)cp;
 pcp += offset;
 switch(size)
       {
        case DEF_BYTESIZE:
           bp = (BYTE *)pcp;
           *bp = (BYTE)value;
        break;
        case DEF_WORDSIZE:
           wp = (WORD *)pcp;
           *wp = (WORD)value;
        break;
        case DEF_DWORDSIZE:
           dwp = (DWORD *)pcp;
           *dwp = value;
        break;
       }
}

Zaznaczam iż "Level" może być powyżej 255, więc dla mnie to jest dziwne

1 użytkowników online, w tym zalogowanych: 0, gości: 1