|
Форум » Counter-Strike 1.6 » Сервер Counter-Strike 1.6 » Помощь по скриптингу » Выдача Щита ([ Добавить ]) |
Выдача Щита |
Дата: Вторник, 09.10.2018, 13:37 | Сообщение # 1
![]()
Добавляю в 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 }[/i] Сама функция выдачи из обьекта Код 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; }
Сообщение отредактировал MayroN - Вторник, 09.10.2018, 13:51
|
Дата: Вторник, 09.10.2018, 16:57 | Сообщение # 2
Скриптер
Мастер
Offline
![]()
Увидеть бы плагин полностью. Неизвестно как вы записываете оружия в массив. Своего CSW_* у weapon_shield нет.
Так же name[256] слишком большой размер для массива, не находите? Достаточно 20 и то он используется только для weapon_smokegrenade. Проблема находиться в Ham_Item_ItemSlot. Боюсь что (168238736) слота не существует в CS (выдавало каждый раз разное). Полный лог с выдачей сначала USP, затем SHIELD: Код L 10/09/2018 - 16:53:29: ham_give_item вызван для (8): weapon_usp L 10/09/2018 - 16:53:29: wEnt = 181 L 10/09/2018 - 16:53:29: wEnt создан, продолжаем... L 10/09/2018 - 16:53:29: wEnt (181) имеет (2) ItemSlot L 10/09/2018 - 16:53:29: wEnt (181) имеет (174) iItem L 10/09/2018 - 16:53:29: wEnt (181) не одно в данном слоте, выброшен (weapon_glock18) iItem L 10/09/2018 - 16:53:29: wEnt (181) заспавнено один раз L 10/09/2018 - 16:53:29: wEnt (181) добавлен игроку (8) L 10/09/2018 - 16:53:29: wEnt (181) имеет ammoindex (6) L 10/09/2018 - 16:53:29: ham_give_item вызван для (8): weapon_shield L 10/09/2018 - 16:53:29: wEnt = 183 L 10/09/2018 - 16:53:29: wEnt создан, продолжаем... L 10/09/2018 - 16:53:29: wEnt (183) имеет (168238736) ItemSlot <= после получения и происходит краш сервера. Т.е. проблема именно в Код new iItem, szWeaponName[32] iItem = get_pdata_cbase(id, 367 + ItemSlot, 5); UPD Как понял Hamsandwich не может выдать weapon_shield. Даже после скипа кода указанного выше падает при выдачи через ham
Сообщение отредактировал Quin - Вторник, 09.10.2018, 17:24
|
Дата: Вторник, 09.10.2018, 22:39 | Сообщение # 3
![]()
Quin,
Вот полный код плагина.Сюда неполучаеться скинуть - слишком большой код https://dropmefiles.com/ZRSo6 Да ХАМ не даст выдачу.Пробовать нужно чрез ФМ.Ето предположительно. Буду ждать вашых результатов ибо то ,что Вы написали - я незнаю как сделать |
Дата: Среда, 10.10.2018, 14:22 | Сообщение # 4
Скриптер
Мастер
Offline
![]()
Просто после проверки на живого и его валидность сравниваете строки полученную weapon и weapon_shield. Если они совпадают используйте fm_give_item
|
Дата: Суббота, 13.10.2018, 15:42 | Сообщение # 5
![]()
Quin,
Вы можете написать как должно быть? |
Дата: Суббота, 13.10.2018, 16:51 | Сообщение # 6
Скриптер
Мастер
Offline
![]()
Код stock ham_give_item(id, weapon[] ) { if (!is_user_alive(id) || pev_valid(id) != 2) return 0 if ( !strcmp( weapon, "weapon_shield" ) ) { fm_give_item( id, weapon ); return 1; } 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; } fm_give_item уже сами найдете (fakemeta_util.inc). |
| |||
| |||