PDA

Просмотр полной версии : [Вопрос] Не выдается оружие с 0-1 слота



Mich@elson
26.06.2017, 13:42
Есть система поднятия оружия с земли. Все оружия которые под слотом 0-1 не выдается, а именно:

https://s8.hostingkartinok.com/uploads/images/2017/06/809f6b8ef8b0ba0b3b85a9921a916eba.jpg

Все остальное оружие которое по слотом 2 и т.д. - выдается нормально. В чем может быть проблема?

Вот сам код когда берешь оружие с земли:

if(newkeys == KEY_CROUCH)
{
for(new a = 0; a < 50; a++)
{
new str23[30];
if(GetPlayerVirtualWorld(playerid) == GunInfo[a][Virtual])
{
if(IsPlayerInRangeOfPoint(playerid, 1.5, GunInfo[a][ObjPos][0], GunInfo[a][ObjPos][1], GunInfo[a][ObjPos][2]))
{
DestroyDynamicObject(GunInfo[a][ObjID]);
GetPlayerWeaponData(playerid,GunInfo[a][ObjData][0],GunInfo[a][ObjData][0],GunInfo[a][ObjData][1]);
_GiveGun(playerid,GunInfo[a][ObjData][0], GunInfo[a][ObjData][1]);
GunInfo[a][ObjData][1] = 0;
GunInfo[a][ObjPos][0] = 0.0;
GunInfo[a][ObjPos][1] = 0.0;
GunInfo[a][ObjPos][2] = 0.0;
GunInfo[a][ObjID] = -1;
format(str23, 60, "Вы нашли оружие {7CFC00}%s", GunNames[GunInfo[a][ObjData][0]]);
SendClientMessage(playerid, COLOR_REDD, str23);
GunInfo[a][ObjData][0] = 0;
}
}
}
}

Вот тут код когда оружие ложишь на землю:

new GunIDEx = GetPlayerWeapon(playerid);
new GunAmmoEx = GetPlayerAmmo(playerid);
if(GunIDEx > 0 && GunAmmoEx != 0)
{
new f = 50+1;
for(new a = 0; a < 50; a++)
{
if(GunInfo[a][ObjPos][0] == 0.0)
{
f = a;
break;
}
}
RemovePlayerWeapon(playerid, GunIDEx);
GunInfo[f][ObjData][0] = GunIDEx;
GunInfo[f][ObjData][1] = GunAmmoEx;
GunInfo[f][Virtual] = GetPlayerVirtualWorld(playerid);
GetPlayerPos(playerid, GunInfo[f][ObjPos][0], GunInfo[f][ObjPos][1], GunInfo[f][ObjPos][2]);
SetPlayerVirtualWorld(playerid, GunInfo[f][Virtual]);
GunInfo[f][ObjID] = CreateDynamicObject(GunObjects[GunIDEx], GunInfo[f][ObjPos][0], GunInfo[f][ObjPos][1], GunInfo[f][ObjPos][2]-1, 93.7, 120.0, 120.0 , GunInfo[f][Virtual], -1, -1, 800);
}

DeimoS
26.06.2017, 18:50
Покажи код _GiveGun и прологируй значение GunInfo[f][ObjData][0]/GunInfo[f][ObjData][1] при выкидывании/взятии оружия

Mich@elson
26.06.2017, 20:47
publics: _GiveGun(playerid, weaponid, ammo)
{
new slot = GetWeaponSlot(weaponid);
if(slot == 0xFFFF) return false;
gunmute[playerid] = gettime()+3;

WeaponInfo[playerid][weaponid] = true;
AmmoSlot[playerid][slot] += ammo;
AmmoInfo[playerid][weaponid] = AmmoSlot[playerid][slot];

GivePlayerWeapon(playerid, weaponid, ammo);
if(PI[playerid][pAmmos][slot] == 0) PI[playerid][pGuns][slot] = 0;
return true;
}

Mich@elson
26.06.2017, 23:21
прологируй значение GunInfo[f][ObjData][0]/GunInfo[f][ObjData][1] при выкидывании/взятии оружия

Прологировал и вот что получилось:
Когда ложу Deagle на землю:

Игрок положил оружие ID: 24
Игрок положил патронов: 10

Когда подбираю Deagle:

Игрок подобрал оружие ID: 24 в кол-во патронов: 10
Все нормально.

А вот тут проблема со слотом 1
Когда ложу полиц. дубинку на землю:

Игрок положил оружие ID: 3
Игрок положил патронов: 1

Когда подбираю дубинку:

Игрок подобрал оружие ID: 0 в кол-во патронов: 0

vovandolg
27.06.2017, 13:36
new slot = GetWeaponSlot(weaponid);
if(slot == 0xFFFF) return false;

оружие не выдаётся потому что где то тут тупик, GetWeaponSlot(weaponid) твоя функция или сервера?

Mich@elson
27.06.2017, 14:00
new slot = GetWeaponSlot(weaponid);
if(slot == 0xFFFF) return false;

оружие не выдаётся потому что где то тут тупик, GetWeaponSlot(weaponid) твоя функция или сервера?


stock GetWeaponSlot(weaponid)
{
switch(weaponid)
{
case 0, 1: return 0;
case 2..9: return 1;
case 22..24: return 2;
case 25..27: return 3;
case 28, 29, 32: return 4;
case 30, 31: return 5;
case 33, 34: return 6;
case 35..38: return 7;
case 16..18, 39: return 8;
case 41..43: return 9;
case 10..15: return 10;
case 44..46: return 11;
case 40: return 12;
default: return 0;
}
return 0;
}

Pa4enka
27.06.2017, 14:47
stock GetWeaponSlot(weaponid)
{
switch(weaponid)
{
case 1: return 0;
case 2..9: return 1;
case 22..24: return 2;
case 25..27: return 3;
case 28, 29, 32: return 4;
case 30, 31: return 5;
case 33, 34: return 6;
case 35..38: return 7;
case 16..18, 39: return 8;
case 41..43: return 9;
case 10..15: return 10;
case 44..46: return 11;
case 40: return 12;
}
return 0xFFFF;
}

Mich@elson
27.06.2017, 15:13
stock GetWeaponSlot(weaponid)
{
switch(weaponid)
{
case 1: return 0;
case 2..9: return 1;
case 22..24: return 2;
case 25..27: return 3;
case 28, 29, 32: return 4;
case 30, 31: return 5;
case 33, 34: return 6;
case 35..38: return 7;
case 16..18, 39: return 8;
case 41..43: return 9;
case 10..15: return 10;
case 44..46: return 11;
case 40: return 12;
}
return 0xFFFF;
}

Пробывал уже. Тоже самое. Даже через стандартную GivePlayerWeapon пробывал - тоже самое. Именно проблема с оружием с 0-1 слота (лопата, дубинка, кастет, клюшка). Остальное оружие берется нормально.

Mich@elson
27.06.2017, 16:23
Проблему решил. Проблема была в RemovePlayerWeapon.
Спасибо всем кто пытался помочь.