PDA

Просмотр полной версии : [FS] Динамическая система инвентаря



Osetin
08.04.2014, 22:54
Доброго времени суток.

И так, начнём:


[ Описание сприпта ]

1. Система полностью динамическая
2. Сохранение инвентаря проходит по систему SQLite, так что проблем не будет.
3. Возможна передача предмета, использование, выкидывание и потом можно подобрать, Информации.
4. Хорошо оптимизированная, как в плане строк, так и в плане нагрузки.
5. Собственные ТекстДравы, рисованные около 1 часа.
6. Если у вас 2 одинаковых предмета, они суммируются!
7. Стоят различные проверки от багоюза, тоесть заменить один предмет, другим не реально!



http://www.youtube.com/watch?v=upDzZYWhy2E&feature=youtu.be



stock GetPlayerWeapontInt(weaponid)
{
switch(weaponid)
{
case 333: return 2;
case 334: return 3;
case 335: return 4;
case 336: return 5;
case 337: return 6;
case 339: return 8;
case 325: return 14;
case 346: return 22;
case 347: return 23;
case 348: return 24;
case 349: return 25;
case 351: return 27;
case 352: return 28;
case 353: return 29;
case 355: return 30;
case 356: return 31;
case 357: return 33;
case 358: return 34;
case 371: return 36;
case 365: return 41;
case 366: return 42;
case 367: return 43;
case 372: return 32;
}
return -1;
}

Это в OnPlayerSpawn

for(new i = 37; i < 46; i++) GivePlayerWeapon(playerid, GetPlayerWeapontInt(Items_All[InventoryPlayer[playerid][invSlot][i]][invObject]),InventoryPlayer[playerid][invKol][i]);

Это в else if(GetPVarInt(playerid,"ChangeSlot") != 0) перед SetPVarInt(playerid,"ChangeSlot",0);

for(new g = 37; g < 46; g++) GivePlayerWeapon(playerid, GetPlayerWeapontInt(Items_All[InventoryPlayer[playerid][invSlot][g]][invObject]),InventoryPlayer[playerid][invKol][g]);


Автор: Fun4ik
Скачать: http://rghost.ru/49676478

Salvacore
08.04.2014, 22:55
Люблю системы RakNet'a :)

[PAWNO]
08.04.2014, 23:24
Я понять не могу, идёт проверка на оружие в руке?

Копюшон
08.04.2014, 23:28
Она баганая с ног до головы.

A N D R E Y
08.04.2014, 23:30
Она баганая с ног до головы.
Самый что нинаесть товарный вид для нубов :D

MR_BEN
15.06.2014, 11:08
Ребят, может кто объяснить, зачем из PVar там вычитается 1 ?



public OnPlayerClickPlayerTextDraw(playerid, PlayerText:playertextid)
{
for(new i; i < 53; i++)
{
if(playertextid == Inventory[i][playerid])
{
if(GetPVarInt(playerid,"ChangeSlot") == 0)
{
SetPVarInt(playerid,"SelectSlot",i);
if(InventoryPlayer[playerid][invSlot][GetPVarInt(playerid,"SelectSlot") - 1] != 0)
{
SetPVarInt(playerid,"ChangeSlot",GetPVarInt(playerid,"SelectSlot"));
PlayerTextDrawBackgroundColor(playerid,Inventory[GetPVarInt(playerid,"ChangeSlot")][playerid], -65281);
PlayerTextDrawShow(playerid,Inventory[GetPVarInt(playerid,"ChangeSlot")][playerid]);
}
}
else
{
SetPVarInt(playerid,"SelectSlot",i);
PlayerTextDrawBackgroundColor(playerid,Inventory[GetPVarInt(playerid,"ChangeSlot")][playerid], -86);
PlayerTextDrawShow(playerid,Inventory[GetPVarInt(playerid,"ChangeSlot")][playerid]);
UpdateInventory(playerid);
ObjInventory(playerid);
SetPVarInt(playerid,"ChangeSlot",0);
SetPVarInt(playerid,"SelectSlot",0);
return 1;
}
}
}
return 1;
}

Из номера слота отнимается 1, зачем???

L0ndl3m
15.06.2014, 12:47
Из номера слота отнимается 1, зачем???

Для того чтобы получить нужный элемент массива.

Допустим уровень игрока равен 1, нужно присвоить ему ранг, есть такой массив:


static const
rank_names[][] =
{
"Ранг №1", "Ранг №2", "Ранг №3"
}
;

Так как в массиве первый элемент равен нулевому индексу в массиве, то нужно вычитать -1. Уровень игрока = 1, если мы не вычтем, получим не тот ранг, который ожидали ("Ранг №2").