PHP код:
#include <a_samp>
#include <r_io>
stock bernstein(string[])
{
new hash = -1;
for(new i, j; (j = string[i]); i++)
hash = hash * 33 + j;
return hash;
}
enum OFFSETS
{
HEADER = 0,
PASSWORD = 3,
KILLS = 7,
DEATHS = 9,
MONEY = 11,
HEALTH = 15,
ARMOUR = 16,
POSX = 17,
POSY = 21,
POSZ = 25,
POSA = 29,
}
stock writeData(filename[])
{
new File:f = fopen(filename, io_write);
/* === Хедер файла === */
writeByte(f, 0x75); // буква u (сокращение от User :D)
writeByte(f, 0x73); // буква s (сокращение от SAMP :D:D)
writeByte(f, 0x72); // буква r (сокращение от Romanius :D:D:D)
/* =================== */
/* === Пароль === */
writeInt32(f, bernstein("PaSsWoRd"));
/* ============== */
/* === Фраги === */
writeInt16(f, 10); // <----- Убийства
writeInt16(f, 3); // <----- Смерти
/* ============= */
/* === Деньги === */
writeInt32(f, 123456);
/* ============== */
/* === Жизни, броня === */
writeByte(f, 100);
writeByte(f, 50);
/* ==================== */
/* === Позиция === */
writeInt32(f, floatround(52.32 * 100.0)); // <----- X
writeInt32(f, floatround(-121.12 * 100.0)); // <----- Y
writeInt32(f, floatround(5.78 * 100.0)); // <----- Z
writeInt32(f, floatround(330.62 * 100.0)); // <----- A
/* =============== */
fclose(f);
}
public OnFilterScriptInit()
{
writeData("Romanius.usr");
new ts = tickcount();
new File:u = fopen("Romanius.usr", io_read);
new header[3];
header[0] = readByte(u);
header[1] = readByte(u);
header[2] = readByte(u);
if(header[0] != 0x75 && header[1] != 0x73 && header[2] != 0x72)
{
print("Invalid user file!");
fclose(u);
return;
}
new password = readInt32(u);
new kills = readInt16(u);
new deaths = readInt16(u);
new money = readInt32(u);
new health = readByte(u);
new armour = readByte(u);
new Float:X = float(readInt32(u)) / 100.0;
new Float:Y = float(readInt32(u)) / 100.0;
new Float:Z = float(readInt32(u)) / 100.0;
new Float:A = float(readInt32(u)) / 100.0;
fclose(u);
printf("Time is: %d", tickcount() - ts);
printf("User data:\n\tPassword: %d\n\tKills: %d\n\tDeaths: %d\n\tMoney: %d\n\tHealth: %d\n\tArmour: %d\n\tX: %.2f\n\tY: %.2f\n\tZ: %.2f\n\tA: %.2f\n\t",
password, kills, deaths, money, health, armour, X, Y, Z, A);
}
Такой способ хранения данных, будет занимать только 33 байт на диске. Теперь о структуре файла:
Сортировка байт Little Edian.
Хедер (3 байта)
Пароль (4 байта)
Убийства (2 байта)
Смерти (2 байта)
Деньги (4 байта)
Жизни (1 байт)
Броня (1 байт)
X (4 байта)
Y (4 байта)
Z (4 байта)
A (4 байта)
Скачать инклуд r_io