PDA

Просмотр полной версии : [Вопрос] Система выдачи оружия работает неверно



X!X
29.10.2018, 18:22
stock GivePlayerWeaponEx(playerid, weaponid, ammo)
{
new slot = GetWeaponSlot(weaponid);

INFO[playerid][pWeapon][slot] = weaponid;

INFO[playerid][pAmmo][slot] = ammo;

GivePlayerWeapon(playerid, INFO[playerid][pWeapon][slot], INFO[playerid][pAmmo][slot]);

for(new i; i < 13; i++)
{
GetPlayerWeaponData(playerid, i, INFO[playerid][pWeapon][i], INFO[playerid][pAmmo][i]);

printf("[ Слот: %d | Оружие: %d | Патроны: %d ]", i, INFO[playerid][pWeapon][i], INFO[playerid][pAmmo][i]);
}
}

В чем может быть прикол? Данные не сохраняются в переменные с первого раза выдачи оружия, а со второго записывается:black_eye:

Выдавал по 1-ому патрону и в сумме вышло их 2, а в переменной хранится только 1:sorry:

По типу:
[19:20:38] [ Слот: 0 | Оружие: 0 | Патроны: 0 ]
[19:20:38] [ Слот: 1 | Оружие: 0 | Патроны: 0 ]
[19:20:38] [ Слот: 2 | Оружие: 0 | Патроны: 0 ]
[19:20:38] [ Слот: 3 | Оружие: 0 | Патроны: 0 ]
[19:20:38] [ Слот: 4 | Оружие: 0 | Патроны: 0 ]
[19:20:38] [ Слот: 5 | Оружие: 0 | Патроны: 0 ]
[19:20:38] [ Слот: 6 | Оружие: 0 | Патроны: 0 ]
[19:20:38] [ Слот: 7 | Оружие: 0 | Патроны: 0 ]
[19:20:38] [ Слот: 8 | Оружие: 0 | Патроны: 0 ]
[19:20:38] [ Слот: 9 | Оружие: 0 | Патроны: 0 ]
[19:20:38] [ Слот: 10 | Оружие: 0 | Патроны: 0 ]
[19:20:38] [ Слот: 11 | Оружие: 0 | Патроны: 0 ]
[19:20:38] [ Слот: 12 | Оружие: 0 | Патроны: 0 ]
[19:20:47] [ Слот: 0 | Оружие: 0 | Патроны: 0 ]
[19:20:47] [ Слот: 1 | Оружие: 0 | Патроны: 0 ]
[19:20:47] [ Слот: 2 | Оружие: 24 | Патроны: 1 ]
[19:20:47] [ Слот: 3 | Оружие: 0 | Патроны: 0 ]
[19:20:47] [ Слот: 4 | Оружие: 0 | Патроны: 0 ]
[19:20:47] [ Слот: 5 | Оружие: 0 | Патроны: 0 ]
[19:20:47] [ Слот: 6 | Оружие: 0 | Патроны: 0 ]
[19:20:47] [ Слот: 7 | Оружие: 0 | Патроны: 0 ]
[19:20:47] [ Слот: 8 | Оружие: 0 | Патроны: 0 ]
[19:20:47] [ Слот: 9 | Оружие: 0 | Патроны: 0 ]
[19:20:47] [ Слот: 10 | Оружие: 0 | Патроны: 0 ]
[19:20:47] [ Слот: 11 | Оружие: 0 | Патроны: 0 ]
[19:20:47] [ Слот: 12 | Оружие: 0 | Патроны: 0 ]

DeimoS
29.10.2018, 19:01
stock GivePlayerWeaponEx(playerid, weaponid, ammo)
{
if(weaponid == 0 || ammo == 0)
return 0;
new slot = GetWeaponSlot(weaponid);
INFO[playerid][pWeapon][slot] = weaponid;
INFO[playerid][pAmmo][slot] += ammo;
for(new i; i < 13; i++)
{
printf("[ Слот: %d | Оружие: %d | Патроны: %d ]", i, INFO[playerid][pWeapon][i], INFO[playerid][pAmmo][i]);
}
return GivePlayerWeapon(playerid, weaponid, ammo);
}

X!X
29.10.2018, 19:06
stock GivePlayerWeaponEx(playerid, weaponid, ammo)
{
if(weaponid == 0 || ammo == 0)
return 0;
new slot = GetWeaponSlot(weaponid);
INFO[playerid][pWeapon][slot] = weaponid;
INFO[playerid][pAmmo][slot] += ammo;
for(new i; i < 13; i++)
{
printf("[ Слот: %d | Оружие: %d | Патроны: %d ]", i, INFO[playerid][pWeapon][i], INFO[playerid][pAmmo][i]);
}
return GivePlayerWeapon(playerid, weaponid, ammo);
}

Спасибо, но что это такое? Твою проверку в начало вставил и убрал getplayerweapodata из цикла и появились эти числа из ниоткуда, а выдавал себе только 24 оружие с 3512 патронами


[ Слот: 0 | Оружие: 52 | Патроны: 53 ]
[ Слот: 1 | Оружие: 56 | Патроны: 54 ]
[ Слот: 2 | Оружие: 24 | Патроны: 3512 ]
[ Слот: 3 | Оружие: 52 | Патроны: 52 ]
[ Слот: 4 | Оружие: 52 | Патроны: 52 ]
[ Слот: 5 | Оружие: 44 | Патроны: 44 ]
[ Слот: 6 | Оружие: 50 | Патроны: 53 ]
[ Слот: 7 | Оружие: 52 | Патроны: 50 ]
[ Слот: 8 | Оружие: 44 | Патроны: 44 ]
[ Слот: 9 | Оружие: 52 | Патроны: 53 ]
[ Слот: 10 | Оружие: 52 | Патроны: 50 ]
[ Слот: 11 | Оружие: 44 | Патроны: 44 ]
[ Слот: 12 | Оружие: 52 | Патроны: 52 ]

DeimoS
29.10.2018, 19:18
Вставь мой код целиком, а не только куски, ибо там не только ими всё ограничивается.
Касаемо чисел - смотри первую загрузку данных в эти переменные. Проблема, скорее всего, там.

ziggi
30.10.2018, 02:03
GetPlayerWeaponData может выдавать устаревшие данные.

X!X
30.10.2018, 11:50
!!!

DeimoS
30.10.2018, 16:44
У тебя что-то куча всего понапихано в функцию, чего быть там не должно. Зачем ты каждую выдачу обрабатываешь массив через sscanf, а потом опять загоняешь данные в массив? Во-первых, так вообще хранить не стоит данные, ибо ты больше тратишь на их извлечение/форматирование, чем получаешь пользы от мнимой компактности (лучше создай отдельную таблицу для оружия и храни каждую единицу в отдельном столбце, чем так). Во-вторых, проблема, вероятнее всего, в этом нагромождении и присутствует. Логируй все этабы нахождения данных на сервере, начиная от загрузки и заканчивая вызовом GivePlayerWeaponEx, и поймёшь в чём проблема.

X!X
01.11.2018, 17:27
!!!

X!X
02.11.2018, 15:59
Разобрался с этим говном. А тут что не так может быть? Из-за чего может такое происходить?
https://i.imgur.com/e9Kd8AD.png