Правила форума Гаранты форума
Размещение рекламы AMX-X компилятор

Здравствуйте, гость Вход | Регистрация

Наши новости:

14-дек
24-апр
10-апр
11-апр

Выдача Щита

, [ Добавить ] [РЕШЕНО]
Статус пользователя $@NyA
сообщение 8.10.2018, 23:41
Сообщение #1


Иконка группы

Стаж: 18 лет

Сообщений: 987
Благодарностей: 529
Полезность: 1050

Добавляю в stock shield
Код:
stock zl_weapon_check(const weapon_name[]) {
static const WeaponName[][] = {
"p228",
"scout",
"hegrenade",
"xm1014",
"mac10",
"aug",
"smokegrenade",
"elite",
"fiveseven",
"ump45",
"sg550",
"galil",
"famas",
"usp",
"glock18",
"awp",
"mp5navy",
"m249",
"m3",
"m4a1",
"tmp",
"g3sg1",
"flashbang",
"deagle",
"sg552",
"ak47",
"knife",
"shield",
"p90"
}
new i
for(i = 0; i < sizeof WeaponName; ++i) {
if(equal(weapon_name, WeaponName[i]))
return 1
}
return 0
}

Сама функция выдачи из обьекта
Код:
public supply_touch(s, p) {
if(!pev_valid(s) || !is_user_alive(p))
return

if(ArraySize(szWeaponID) == 0) {
} else {
switch(random(1)) {
case 0: {
new i, id[20], name[256]
i = random(ArraySize(szWeaponID))
ArrayGetString(szWeaponID, i, id, 14)
ArrayGetString(szWeaponName, i, name, 14)
if(get_pcvar_num(fadeon))
screen_fade(p)
format(id, charsmax(id), "weapon_%s", id)

new iWeaponId = get_weaponid(id);

if (user_has_weapon(p, iWeaponId))
cs_set_user_bpammo(p, iWeaponId, cs_get_user_bpammo(p, iWeaponId) + 1)
else
ham_give_item(p, id)
client_cmd(p,"spk %s",box_sound)
zl_colorchat(p, "!n%L", LANG_PLAYER, "SUPPLY_WEAPON", name)
}
}
}
zl_remove_entity(s)
SupplyCount--
}

При выдачи игра зависает наглухо...

+ ко всему етому удалось кое что узнать

Оказываеться,сама проблема в
Код:
ham_give_item


Пишут на оленях
Цитата
Код:
// restore shield after all the other weapons are there
if(oldShield[id]) fm_give_item(id,"weapon_shield");// ham_give_item crashes


Вообщем нужно через fm_give_item
Перестроить етот сток,ну или можно попробовать просто через give_item
Подскажите пожалуйста
Код:
stock ham_give_item(id, weapon[] ) {
if (!is_user_alive(id) || pev_valid(id) != 2)
return 0

new wEnt = create_entity( weapon )

if(!pev_valid(wEnt))
return 0

new ItemSlot = ExecuteHamB(Ham_Item_ItemSlot, wEnt)

new iItem, szWeaponName[32]
iItem = get_pdata_cbase(id, 367 + ItemSlot, 5);

if (iItem > 0 && pev_valid(iItem) == 2) {
pev(iItem, pev_classname, szWeaponName, charsmax(szWeaponName))
engclient_cmd(id, "drop", szWeaponName)
}


set_pev(wEnt, pev_spawnflags, SF_NORESPAWN);
dllfunc(DLLFunc_Spawn, wEnt)

if(!ExecuteHamB( Ham_AddPlayerItem, id, wEnt )) {
if(pev_valid( wEnt ))
set_pev(wEnt, pev_flags, pev( wEnt, pev_flags ) | FL_KILLME)

return 0;
}

ExecuteHamB(Ham_Item_AttachToPlayer, wEnt, id )

engclient_cmd(id, weapon)

new AmmoIndex
AmmoIndex = get_pdata_int(get_pdata_cbase(id, 373, 5), 49, 4)

if (AmmoIndex > 10) {
set_pdata_int(id, 376 + AmmoIndex, 1, 5)
} else {
set_pdata_int(id, 376 + AmmoIndex, 100, 5)
}
return 1;
}



МультиМод CS
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   Цитировать сообщение
Статус пользователя $@NyA
сообщение 4.7.2019, 1:44
Сообщение #2


Иконка группы

Стаж: 18 лет

Сообщений: 987
Благодарностей: 529
Полезность: 1050

После долгих попыток одного рядового человека,удалось наконецто осуществить ету выдачу.

Через сток ФМ

Коснулись изминений

Код:
public supply_touch(s, p) {
if(!pev_valid(s) || !is_user_alive(p))
return

if(ArraySize(szWeaponID) == 0) {
} else {
switch(random(1)) {
case 0: {
new i, id[20], name[256]
i = random(ArraySize(szWeaponID))
ArrayGetString(szWeaponID, i, id, 14)
ArrayGetString(szWeaponName, i, name, 14)
if(get_pcvar_num(fadeon))
screen_fade(p)
format(id, charsmax(id), "weapon_%s", id)

new iWeaponId = get_weaponid(id);

if (user_has_weapon(p, iWeaponId))
cs_set_user_bpammo(p, iWeaponId, cs_get_user_bpammo(p, iWeaponId) + 1)
else
fm_give_item(p, id)
client_cmd(p,"spk %s",box_sound)
zl_colorchat(p, "!n%L", LANG_PLAYER, "SUPPLY_WEAPON", name)
}
}
}
zl_remove_entity(s)
SupplyCount--
}

stock fm_give_item(id, const item[])
{
static ent
ent = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, item))
if (!pev_valid(ent)) return;

static Float:originF[3]
pev(id, pev_origin, originF)
set_pev(ent, pev_origin, originF)
set_pev(ent, pev_spawnflags, pev(ent, pev_spawnflags) | SF_NORESPAWN)
dllfunc(DLLFunc_Spawn, ent)

static save
save = pev(ent, pev_solid)
dllfunc(DLLFunc_Touch, ent, id)
if (pev(ent, pev_solid) != save)
return;

engfunc(EngFunc_RemoveEntity, ent)
}

stock zl_weapon_check(const weapon_name[]) {
static const WeaponName[][] = {
"shield",
"p228",
"scout",
"hegrenade",
"xm1014",
"mac10",
"aug",
"smokegrenade",
"elite",
"fiveseven",
"ump45",
"sg550",
"galil",
"famas",
"usp",
"glock18",
"awp",
"mp5navy",
"m249",
"m3",
"m4a1",
"tmp",
"g3sg1",
"flashbang",
"deagle",
"sg552",
"ak47",
"knife",
"p90"
}
new i
for(i = 0; i < sizeof WeaponName; ++i) {
if(equal(weapon_name, WeaponName[i]))
return 1
}
return 0
}


Как бы если у тебя есть АК47,то щит добавляеться дополнительно к пистолету во второй слот и оружие все сохраняет.

Если нет оружия осн. Или вообще нет то также выдает щит.

Не все конечно идеально,но есть 2 небольшые погрешности.

Вот если бы их еще домучать.

1)При получении щита ,если есть к примеру АК47,меняеться рука с правой на леву только для основного оружия.

2) Щит дополнительно добавляеться во второй слот,но не происходит смена его в руки,если в руках АК47.


МультиМод CS
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя DeMNiX
сообщение 4.7.2019, 2:42
Сообщение #3


Стаж: 13 лет

Сообщений: 263
Благодарностей: 113
Полезность: 646

Потому что двигло блочит одновременное ношение первички и щита
Можно пойти другим путем, визуально добавив модель щита, анимации при деплое и установкой ему хитбокса щита

Отредактировал: DeMNiX, - 4.7.2019, 2:43
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя $@NyA
сообщение 4.7.2019, 11:28
Сообщение #4


Иконка группы

Стаж: 18 лет

Сообщений: 987
Благодарностей: 529
Полезность: 1050

DeMNiX,
Я также сомневался,что будет выдача с основным оружием.

А может как то поставить в коде запрет выдачи щита,когда есть осн.оружие, а давать его,когда АК47 нет,ну и недавать,когда щит есть?


МультиМод CS
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя DeMNiX
сообщение 5.7.2019, 5:37
Сообщение #5


Стаж: 13 лет

Сообщений: 263
Благодарностей: 113
Полезность: 646

Попробовать проверять оффсет m_bHasPrimary
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя $@NyA
сообщение 5.7.2019, 11:08
Сообщение #6


Иконка группы

Стаж: 18 лет

Сообщений: 987
Благодарностей: 529
Полезность: 1050

Всетаки розобрался.
Теперь только может дать в руки основное оружие из ящика,если в руках только пистолет.

Но все-же пустые ящики игрок поглощает при подборе, иэто выглядит нереалистично.

Для себя последнее вижу так ( что-бы перекрыть все те нюансы выше )
Эсть возможность на момент ношения основного оружия,сделать ящик твердым/непроходимым,а как только скинул / дропнул оружие - прикасаемым с выдачей?

И на этом закрываемся !


МультиМод CS
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
  Ответить в данную темуНачать новую тему
 
0 пользователей и 1 гостей читают эту тему: