Skocz do zawartości

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 

 

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

 

Sygnatura użytkownika

__________________________________________________________________________________________________________________________________________________________________________
【 Deathrun    |    Deathrun Sklep    |    Deathrun VIP    |    Deathrun AutoRespawn    |    Jackpot    |    Losowy VIP    |    Modele  |   NoScope Detector    |    C4 Timer 
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄

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

Sygnatura użytkownika

__________________________________________________________________________________________________________________________________________________________________________
【 Deathrun    |    Deathrun Sklep    |    Deathrun VIP    |    Deathrun AutoRespawn    |    Jackpot    |    Losowy VIP    |    Modele  |   NoScope Detector    |    C4 Timer 
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄

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 😕

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

  • Lubię to!
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");
} 

 

 

Sygnatura użytkownika

__________________________________________________________________________________________________________________________________________________________________________
【 Deathrun    |    Deathrun Sklep    |    Deathrun VIP    |    Deathrun AutoRespawn    |    Jackpot    |    Losowy VIP    |    Modele  |   NoScope Detector    |    C4 Timer 
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄

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

 

  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!
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 😄 

Sygnatura użytkownika

__________________________________________________________________________________________________________________________________________________________________________
【 Deathrun    |    Deathrun Sklep    |    Deathrun VIP    |    Deathrun AutoRespawn    |    Jackpot    |    Losowy VIP    |    Modele  |   NoScope Detector    |    C4 Timer 
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄

  • Lubię to!
Odnośnik do odpowiedzi
Udostępnij na innych stronach

Ostatnio przeglądający ten temat (5 użytkowników)

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ć grafiki. Dodaj lub załącz grafiki z adresu URL.

×
×
  • Dodaj nową pozycję...