Skocz do zawartości
Brum Brum

[CS:GO] Ustawianie ammo w broni

Rekomendowane odpowiedzi

Opis: Stock pozwalający na zmianę ammo w danej broni. Minus jest taki, że ammo nie może przekroczyć limitu w drugim magazynku, który jest ustawiony w cvarze od amunicji ammo_X 
Spis Cvarów
Hej! Skorzystałeś z linku lub pobrałeś załącznik? Uhonoruj naszą pracę poprzez rejestrację na forum i rośnij razem z nami! 

 

stock void SetAmmo(int weapon, int Ammo, int ReserveAmmo)
{
	SetVariantInt(Ammo);
	AcceptEntityInput(weapon, "SetAmmoAmount");
	SetVariantInt(ReserveAmmo);
	AcceptEntityInput(weapon, "SetReserveAmmoAmount");
} 

 

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
Spoiler

#pragma semicolon 1

#include <sourcemod>
#include <cstrike>
#include <sdktools>
#include <sdkhooks>
#include <gum>
#include <smlib>
#include <swarm/utils>
#include <fpvm_interface>


#define WEAPON_VIEWMODEL "models/weapons/boteq/fiveseven/v_fiveseven.mdl"
#define WEAPON "weapon_fiveseven"

#define DamageBoost 2.0

#define ITEM_COST 80

#define GUN_UNLOCK "fiveseven"

bool itemEnabled[MAXPLAYERS + 1];
int _viewmodel;

public void OnPluginStart()
{
    // We are registering item here with parameters
    // itemRebuy - 0 = Item can be bought one time per connect, 1 = Buy item many times, 2 = Item can be bought one time per round
    // itemRebuyTimes - 0 = Infinite buy, >0 = Item rebuy times
    registerGumItem("[fiveseven] TEST", "\x0ETEST \x01| \x02Damage+\x01 \x10Accuracy+", ITEM_COST, 0, 0);
}

public void OnMapStart()
{
    _viewmodel = PrecacheModel(WEAPON_VIEWMODEL);
    
}

// Called when item/unlock was selected by menu
public void gumItemSetCallback(int client)
{
    itemEnabled[client] = true;
    int iWeapon = Client_GiveWeaponAndAmmo(client, "weapon_fiveseven", true, 10, -1, 10, -1);
    SetAmmo(iWeapon, 10);
    FPVMI_SetClientModel(client, "weapon_fiveseven", _viewmodel);
    /*if (IsValidEntity(iWeapon))
    {
        SDKHook(iWeapon, SDKHook_ReloadPost, Hook_WeaponReload);
    }*/
}

// Called when item/unlock was selected by menu
public void gumItemUnSetCallback(int client)
{
    itemEnabled[client] = false;
    FPVMI_SetClientModel(client, "weapon_fiveseven", -1, -1);
}

// Take the item/unlock from the player
public void OnClientDisconnect(int client)
{
    if (UTIL_IsValidClient(client))
        itemEnabled[client] = false;
}

public void OnClientPutInServer(int client)
{
    if (UTIL_IsValidClient(client))
        SDKHook(client, SDKHook_OnTakeDamage, onTakeDamage);
}
/*public Hook_WeaponReload(int weapon, bool Successful)
{
    int owner = GetEntPropEnt(weapon, Prop_Send, "m_hOwnerEntity");
    if (!IsValidEntity(owner) || !IsClientInGame(owner))
    {
        return;
    }
    char classname[32];
    GetEntityClassname(weapon, classname, sizeof(classname));
    if (StrEqual(classname, "weapon_fiveseven"))
    {
        CreateTimer(2.2, SetNewAmmo, GetClientUserId(owner), TIMER_FLAG_NO_MAPCHANGE);
    }
}
public Action SetNewAmmo(Handle timer, int userid)
{
    int client = GetClientOfUserId(userid);
    if (!IsValidEntity(client) || !IsClientInGame(client))
    {
        return Plugin_Stop;
    }
    if (IsPlayerAlive(client))
    {
        Client_SetWeaponAmmo(client, "weapon_fiveseven", 10, -1, 10, -1);
        //int iWeapon = Client_GetActiveWeapon(client);
        //Weapon_SetClips(iWeapon, 10, 100);
    }
    return Plugin_Continue;
}
*/
public Action onTakeDamage(int victim, int &attacker, int &inflictor, float &damage, int &damagetype, int &weapon, float damageForce[3], float damagePosition[3])
{
    if (victim == attacker)
        return Plugin_Continue;
    
    if (!UTIL_IsValidAlive(attacker))
        return Plugin_Continue;
    
    if (!UTIL_IsValidClient(victim))
        return Plugin_Continue;
    
    if (GetClientTeam(victim) == GetClientTeam(attacker))
        return Plugin_Continue;
    
    if (!itemEnabled[attacker])
        return Plugin_Continue;
    
    char weaponName[16];
    
    int iWeapon = GetEntPropEnt(attacker, Prop_Send, "m_hActiveWeapon");
    if (!(iWeapon > 0 && IsValidEdict(iWeapon)))return Plugin_Continue;
    GetEdictClassname(iWeapon, weaponName, sizeof(weaponName));
    
    if (StrContains(weaponName, GUN_UNLOCK) == -1)
        return Plugin_Continue;
    
    damage = damage * DamageBoost;
    return Plugin_Changed;

stock void SetAmmo(int weapon, int Ammo)
{
    SetVariantInt(Ammo);
    AcceptEntityInput(weapon, "SetAmmoAmount");

Co tu zmienić ? nadal jest 20

Edytowane przez Sqower

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Zrób danie zwykłym GivePlayeItem zamiast tego z smlib

int weapon = GivePlayerItem(client, "weapon_fiveseven");
SetAmmo(weapon, 14);

i powinno być git

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
Spoiler

#pragma semicolon 1

#include <sourcemod>
#include <cstrike>
#include <sdktools>
#include <sdkhooks>
#include <gum>
#include <smlib>
#include <swarm/utils>
#include <fpvm_interface>


#define WEAPON_VIEWMODEL "models/weapons/boteq/fiveseven/v_fiveseven.mdl"
#define WEAPON "weapon_fiveseven"

#define DamageBoost 2.0

#define ITEM_COST 80

#define GUN_UNLOCK "fiveseven"

bool itemEnabled[MAXPLAYERS + 1];
int _viewmodel;

public void OnPluginStart()
{
    // We are registering item here with parameters
    // itemRebuy - 0 = Item can be bought one time per connect, 1 = Buy item many times, 2 = Item can be bought one time per round
    // itemRebuyTimes - 0 = Infinite buy, >0 = Item rebuy times
    registerGumItem("[fiveseven] TEST", "\x0ETEST \x01| \x02Damage+\x01 \x10Accuracy+", ITEM_COST, 0, 0);
}

public void OnMapStart()
{
    _viewmodel = PrecacheModel(WEAPON_VIEWMODEL);
    
}

// Called when item/unlock was selected by menu
public void gumItemSetCallback(int client)
{
    itemEnabled[client] = true;
    int iWeapon = GivePlayerItem(client, "weapon_fiveseven")/*Client_GiveWeaponAndAmmo(client, "weapon_fiveseven", true, 10, -1, 10, -1)*/;
    SetAmmo(iWeapon, 10);
    FPVMI_SetClientModel(client, "weapon_fiveseven", _viewmodel);
    /*if (IsValidEntity(iWeapon))
    {
        SDKHook(iWeapon, SDKHook_ReloadPost, Hook_WeaponReload);
    }*/
}

// Called when item/unlock was selected by menu
public void gumItemUnSetCallback(int client)
{
    itemEnabled[client] = false;
    FPVMI_SetClientModel(client, "weapon_fiveseven", -1, -1);
}

// Take the item/unlock from the player
public void OnClientDisconnect(int client)
{
    if (UTIL_IsValidClient(client))
        itemEnabled[client] = false;
}

public void OnClientPutInServer(int client)
{
    if (UTIL_IsValidClient(client))
        SDKHook(client, SDKHook_OnTakeDamage, onTakeDamage);
}
/*public Hook_WeaponReload(int weapon, bool Successful)
{
    int owner = GetEntPropEnt(weapon, Prop_Send, "m_hOwnerEntity");
    if (!IsValidEntity(owner) || !IsClientInGame(owner))
    {
        return;
    }
    char classname[32];
    GetEntityClassname(weapon, classname, sizeof(classname));
    if (StrEqual(classname, "weapon_deagle"))
    {
        CreateTimer(2.2, SetNewAmmo, GetClientUserId(owner), TIMER_FLAG_NO_MAPCHANGE);
    }
}
public Action SetNewAmmo(Handle timer, int userid)
{
    int client = GetClientOfUserId(userid);
    if (!IsValidEntity(client) || !IsClientInGame(client))
    {
        return Plugin_Stop;
    }
    if (IsPlayerAlive(client))
    {
        Client_SetWeaponAmmo(client, "weapon_fiveseven", 10, -1, 10, -1);
        //int iWeapon = Client_GetActiveWeapon(client);
        //Weapon_SetClips(iWeapon, 10, 100);
    }
    return Plugin_Continue;
}
*/
public Action onTakeDamage(int victim, int &attacker, int &inflictor, float &damage, int &damagetype, int &weapon, float damageForce[3], float damagePosition[3])
{
    if (victim == attacker)
        return Plugin_Continue;
    
    if (!UTIL_IsValidAlive(attacker))
        return Plugin_Continue;
    
    if (!UTIL_IsValidClient(victim))
        return Plugin_Continue;
    
    if (GetClientTeam(victim) == GetClientTeam(attacker))
        return Plugin_Continue;
    
    if (!itemEnabled[attacker])
        return Plugin_Continue;
    
    char weaponName[16];
    
    int iWeapon = GetEntPropEnt(attacker, Prop_Send, "m_hActiveWeapon");
    if (!(iWeapon > 0 && IsValidEdict(iWeapon)))return Plugin_Continue;
    GetEdictClassname(iWeapon, weaponName, sizeof(weaponName));
    
    if (StrContains(weaponName, GUN_UNLOCK) == -1)
        return Plugin_Continue;
    
    damage = damage * DamageBoost;
    return Plugin_Changed;

stock void SetAmmo(int weapon, int Ammo)
{
    SetVariantInt(Ammo);
    AcceptEntityInput(weapon, "SetAmmoAmount");

Nadal to samo 😕

Przez Brum Brum,

Dziwne, aż sam zaraz sprawdzę

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Ale wy przecież nawet nie definujecie reload więc skąd się dziwicie że jest tak a nie inaczej.  Chyba że tego nie widzę 

 

Jak nie znajdziecie rozwiązania dam gotowa funkcje jak wrócę do domu i nie zapomnę xd

Przez Brum Brum,

W tym stocku nie musisz definiować nic po reloadzie. Używam zmiany ammo przez wykonanie inputu wbudowanego w CS:GO. Używałem go nie raz i jestem pewny, że działa w 100%

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

@Brum Brum tak z ciekawości działa ci ? 

Przez Brum Brum,

Ogólnie używam go wszędzie gdzie zmieniam ammo. Właśnie piszę plugin aby zmieniał ammo po wpisaniu /ammo X i dawało broń z X ammo, aby udowodnić, ze zadziała. za 15-20min dodam z nagraniem

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
23 minuty temu, Sqower napisał:

@Brum Brum tak z ciekawości działa ci ? 


Wszystko działa poprawnie. Dowód w formie wideo oraz kod podany niżej

 

Spoiler
#include <sdktools>


public void OnPluginStart()
{
	RegConsoleCmd("sm_ammo", CMD_Ammo);
	RegConsoleCmd("sm_gwwa", CMD_GiveWeaponsWithAmmo);
}

public Action CMD_Ammo(int client, int args)
{
	char arg[16];
	GetCmdArg(1, arg, sizeof(arg));
	int ammo = StringToInt(arg);
	GetCmdArg(2, arg, sizeof(arg));
	int reserve = StringToInt(arg);
	int weapon = GetEntPropEnt(client, Prop_Data, "m_hActiveWeapon");
	SetAmmo(weapon, ammo, reserve);
}

public Action CMD_GiveWeaponsWithAmmo(int client, int args)
{
	char arg[16],sweapon[32];
	GetCmdArg(1, sweapon, sizeof(sweapon));
	
	GetCmdArg(2, arg, sizeof(arg));
	int ammo = StringToInt(arg);
	GetCmdArg(3, arg, sizeof(arg));
	int reserve = StringToInt(arg);
	
	int weapon = GivePlayerItem(client, sweapon);
	SetAmmo(weapon, ammo, reserve);
}

stock void SetAmmo(int weapon, int Ammo, int ReserveAmmo)
{
	SetVariantInt(Ammo);
	AcceptEntityInput(weapon, "SetAmmoAmount");
	SetVariantInt(ReserveAmmo);
	AcceptEntityInput(weapon, "SetReserveAmmoAmount");
} 

 

 

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
1 minutę temu, Brum Brum napisał:


Wszystko działa poprawnie. Dowód w formie wideo oraz kod podany niżej

 

 
Hej! Skorzystałeś z linku lub pobrałeś załącznik? Uhonoruj naszą pracę poprzez rejestrację na forum i rośnij razem z nami! Pokaż ukrytą zawartość

#include <sdktools>


public void OnPluginStart()
{
	RegConsoleCmd("sm_ammo", CMD_Ammo);
	RegConsoleCmd("sm_gwwa", CMD_GiveWeaponsWithAmmo);
}

public Action CMD_Ammo(int client, int args)
{
	char arg[16];
	GetCmdArg(1, arg, sizeof(arg));
	int ammo = StringToInt(arg);
	GetCmdArg(2, arg, sizeof(arg));
	int reserve = StringToInt(arg);
	int weapon = GetEntPropEnt(client, Prop_Data, "m_hActiveWeapon");
	SetAmmo(weapon, ammo, reserve);
}

public Action CMD_GiveWeaponsWithAmmo(int client, int args)
{
	char arg[16],sweapon[32];
	GetCmdArg(1, sweapon, sizeof(sweapon));
	
	GetCmdArg(2, arg, sizeof(arg));
	int ammo = StringToInt(arg);
	GetCmdArg(3, arg, sizeof(arg));
	int reserve = StringToInt(arg);
	
	int weapon = GivePlayerItem(client, sweapon);
	SetAmmo(weapon, ammo, reserve);
}

stock void SetAmmo(int weapon, int Ammo, int ReserveAmmo)
{
	SetVariantInt(Ammo);
	AcceptEntityInput(weapon, "SetAmmoAmount");
	SetVariantInt(ReserveAmmo);
	AcceptEntityInput(weapon, "SetReserveAmmoAmount");
} 

 

 

chyba nie do końca się zrozumieliśmy , bo mi chodziło właśnie o to że jak miałeś np w glocku ustawione 30 to po przeładowaniu wraca do 20 ammo a mi właśnie chodzi o to że jak masz 30 to po przeładowaniu zeby znowu było 30 

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
Teraz, Sqower napisał:

chyba nie do końca się zrozumieliśmy , bo mi chodziło właśnie o to że jak miałeś np w glocku ustawione 30 to po przeładowaniu wraca do 20 ammo a mi właśnie chodzi o to że jak masz 30 to po przeładowaniu zeby znowu było 30 

No to w takim razie zrób hooka na weapon_reload i w evencie ponownie ustawiaj ammo 😄 

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
53 minuty temu, Brum Brum napisał:

No to w takim razie zrób hooka na weapon_reload i w evencie ponownie ustawiaj ammo 😄 

Dzięki teraz wszystko działa 😄 

Przez Mesharsky,

Wiedziałem xddd. Dobrze ze ogarnąłeś :)

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Dołącz do dyskusji

Możesz dodać zawartość już teraz a zarejestrować się później. Jeśli posiadasz już konto, zaloguj się aby dodać zawartość za jego pomocą.

Gość
Dodaj odpowiedź do tematu...

×   Wklejono zawartość z formatowaniem.   Usuń formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Odnośnik został automatycznie osadzony.   Przywróć wyświetlanie jako odnośnik

×   Przywrócono poprzednią zawartość.   Wyczyść edytor

×   Nie możesz bezpośrednio wkleić obrazków. Dodaj lub załącz obrazki z adresu URL.


×
×
  • Dodaj nową pozycję...