Jump to content
assignment_ind Existing user? Sign In

Sign In



person_add Sign Up
Go-Code.pl - Support SourceMod i Pluginy CS:GO
Sign in to follow this  
Brum Brum

[CS:GO] Ustawianie ammo w broni

Recommended Posts

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");
} 

 

  • Lubię to! 2

Share this post


Link to post
Share on other sites
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

Edited by Sqower

Share this post


Link to post
Share on other sites

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

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

i powinno być git

Share this post


Link to post
Share on other sites
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 😕

By Brum Brum,

Dziwne, aż sam zaraz sprawdzę

Share this post


Link to post
Share on other sites

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

  • Lubię to! 1
By 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%

Share this post


Link to post
Share on other sites

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

By 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

Share this post


Link to post
Share on other sites
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");
} 

 

 

  • Lubię to! 1

Share this post


Link to post
Share on other sites
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 

  • Lubię to! 1

Share this post


Link to post
Share on other sites
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 😄 

  • Lubię to! 2

Share this post


Link to post
Share on other sites
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 😄 

  • Lubię to! 2
By Mesharsky,

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

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.


O NAS Jesteśmy społecznością łączącą ludzi, którzy dzielą pasję poznawania CS:GO od strony programistycznej. Posiadamy duże zaplecze merytoryczne i zawsze cieszymy się, gdy dołączają do nas osoby gotowe do nauki. Gwarantujemy, że z odrobiną wytrwałości i otwartym umysłem bardzo szybko napiszesz swój pierwszy plugin. Zapraszamy! 🙂
Szablon wykonany z dużą ilością przez cyberpixelz / Mesharsky / Sitefuture
Forum dumnie napędzane przez: Invision Power Services, Inc.
×
×
  • Create New...