Народ, помогите решить проблему. Задача: забрать у игрока все оружие и вернуть его в определенный момент в случае необходимости.
Игра CS:GO (если это важно)
Сделал так:
Но выдается только то оружие, которое находится в руках.
А мне бы нужно, что бы и Primary и Secondary пушки сохранялись с последующей выдачей.
Попробовал вот так:
Второй вариант компилируется без ошибок, но не работает. Пушки стрипаются, но вот потом не выдаются. Не работает функция GiveWeapons.
Как выдавать оружие по ай ди?
Или может кто-то подскажет по первому способу, как сохранить все оружия, а не только активное? Дайте подсказок, спасибо.
Игра CS:GO (если это важно)
Сделал так:
PHP:
char PrimaryWeaponName[][] = {"weapon_ak47", "weapon_aug", "weapon_awp", "weapon_famas", "weapon_g3sg1", "weapon_galilar", "weapon_m249", "weapon_m4a1", "weapon_mac10", "weapon_p90", "weapon_ump45", "weapon_xm1014", "weapon_bizon", "weapon_mag7", "weapon_negev", "weapon_scar20", "weapon_sg556", "weapon_ssg08"};
char ClientPrimaryWeapon[MAXPLAYERS+1][1][64];
SaveWeapons(client) //сохраняем пушку
{
char sPimaryBuff[64];
GetClientWeapon(client, sPimaryBuff, sizeof(sPimaryBuff));
LogMessage("Client %N has a %s", client, sPimaryBuff);
for ( int i = 0; i <= sizeof(PrimaryWeaponName); i++)
{
if (StrEqual(sPimaryBuff, PrimaryWeaponName[i]))
{
ClientPrimaryWeapon[client][0] = sPimaryBuff;
StripWeapons(client);
LogMessage("Saved weapon %s to client %N", ClientPrimaryWeapon[client][0], client);
}else
{
StripWeapons(client);
}
}
}
StripWeapons(client)
{
LogMessage("We are in stripweapon function");
int primary = GetPlayerWeaponSlot ( client, CS_SLOT_PRIMARY );
if(primary != INVALID_ENT_REFERENCE && IsValidEdict(primary)){
RemovePlayerItem(client, primary);
RemoveEdict(primary);
}
int secondary = GetPlayerWeaponSlot(client, CS_SLOT_SECONDARY);
if(secondary != INVALID_ENT_REFERENCE && IsValidEdict(secondary)){
RemovePlayerItem(client, secondary);
RemoveEdict(secondary);
}
int grenade = GetPlayerWeaponSlot(client, CS_SLOT_GRENADE);
if(grenade != INVALID_ENT_REFERENCE && IsValidEdict(grenade)){
RemovePlayerItem(client, grenade);
RemoveEdict(grenade);
}
}
GiveWeapons(client)
{
GivePlayerItem(client, ClientPrimaryWeapon[client][0]);
LogMessage("Give client %N his %s", client, ClientPrimaryWeapon[client][0]);
}
А мне бы нужно, что бы и Primary и Secondary пушки сохранялись с последующей выдачей.
Попробовал вот так:
PHP:
int iActiveWeapon[MAXPLAYERS+1],
iPrimAddonWpn[MAXPLAYERS+1],
iSecAddonWpn[MAXPLAYERS+1];
SaveWeapons(client)
{
if (client && IsClientInGame(client) && IsPlayerAlive(client))
{
iPrimAddonWpn[client] = GetEntProp(client, Prop_Send, "m_iPrimaryAddon");
iSecAddonWpn[client] = GetEntProp(client, Prop_Send, "m_iSecondaryAddon");
iActiveWeapon[client] = GetEntProp(client, Prop_Send, "m_hActiveWeapon");
StripWeapons(client);
}
}
StripWeapons(client)
{
int primary = GetPlayerWeaponSlot ( client, CS_SLOT_PRIMARY );
if(primary != INVALID_ENT_REFERENCE && IsValidEdict(primary)){
RemovePlayerItem(client, primary);
RemoveEdict(primary);
}
int secondary = GetPlayerWeaponSlot(client, CS_SLOT_SECONDARY);
if(secondary != INVALID_ENT_REFERENCE && IsValidEdict(secondary)){
RemovePlayerItem(client, secondary);
RemoveEdict(secondary);
}
int grenade = GetPlayerWeaponSlot(client, CS_SLOT_GRENADE);
if(grenade != INVALID_ENT_REFERENCE && IsValidEdict(grenade)){
RemovePlayerItem(client, grenade);
RemoveEdict(grenade);
}
}
GiveWeapons(client)
{
EquipPlayerWeapon(client, iActiveWeapon[client]);
if(iPrimAddonWpn[client] > 0)
{
EquipPlayerWeapon(client, iPrimAddonWpn[client]);
}
if(iSecAddonWpn[client] > 0)
{
EquipPlayerWeapon(client, iSecAddonWpn[client]);
}
}
Как выдавать оружие по ай ди?
Или может кто-то подскажет по первому способу, как сохранить все оружия, а не только активное? Дайте подсказок, спасибо.