Skocz do zawartości

Rekomendowane odpowiedzi

Cześć, 

Jako, że na swoim serwerze chcę mieć jak najmniej pobranych pluginów- chcę mieć głównie napisane własnoręcznie, żeby się uczyć nowszych rzeczy napisałem plugin, który daje poszczególne noże z menu. Problem w tym, że niekoniecznie on działa. Chodzi o to, że gdy klikam butterfly, gut, flip, ursus knife- nie daje się. Jedynym nożem jaki się daje jest bayonet (może więcej, gdy zauważyłem, że 5 nie działa nie sprawdzałem reszty). Czy ma ktoś jakiś pomysł co do tego? 

PS dostałem propozycję we wcześniejszym poście, żeby utworzyć timer, który daje po 0.1 sekundy nóż. Nie działa. Ustawiłem timer na 0.5 sekundy i również nie działa.

Oto kod (daję skrócony, na 3 pozycje, żeby nie było za długo):

#include <sourcemod>
#include <sdktools>
 
public void OnPluginStart()
{
    RegConsoleCmd("sm_knife", KnifeChoosing);
}
 
public Action KnifeChoosing(int client, int args)
{
    Menu knives = new Menu(Knives_Handler);
    knives.SetTitle("Knives:");     //18
    knives.AddItem("Bayonet(★)""Bayonet(★)");
    knives.AddItem("Flip(★)""Flip(★)");
    knives.AddItem("Gut(★)""Gut(★)");
    knives.Display(client, 999);
}
 
public int Knives_Handler(Menu knives, MenuAction action, int client, int position)
{
    if(action == MenuAction_End)    delete knives;
    else if(action==MenuAction_Select)
    {
        char buffer[64];
        GetMenuItem(knives, position, buffer, sizeof(buffer));
        if(IsPlayerAlive(client) && IsClientConnected(client))
        {
            switch(position)
            {
                case 0:
                {
                    DeleteKnifeWeapon(client);
                    int knife = GivePlayerItem(client, "weapon_bayonet");
                    EquipPlayerWeapon(client, knife);
                }
                case 1:
                {
                    DeleteKnifeWeapon(client);                     
                    int knife = GivePlayerItem(client, "weapon_knife_flip");
                    EquipPlayerWeapon(client, knife);
                }
                case 2:
                {
                    DeleteKnifeWeapon(client);
                    new knife = GivePlayerItem(client, "weapon_knife_gut");
                    EquipPlayerWeapon(client, knife);
                }
            }
        }
    }
}
 
void DeleteKnifeWeapon(int client) 
{
    int slot = GetPlayerWeaponSlot(client, 2);
    if(slot != -1
    {                
        RemovePlayerItem(client, slot);
        AcceptEntityInput(slot, "Kill");
    }
}
Odnośnik do odpowiedzi
Udostępnij na innych stronach
  • Moderator poziom 2

Masz tutaj w miarę optymalniejszy kod. Co do twojego problemu to musisz w addons/sourcemod/configs/core.cfg zmienić wartość FollowCSGOServerGuidelines z yes na no.

Spoiler
#include <sourcemod>
#include <sdktools>
#include <cstrike>

char g_sKnive[][] =  {
	"weapon_knife", 
	"weapon_knife_karambit", 
	"weapon_knife_m9_bayonet", 
	"weapon_knife_butterfly", 
	"weapon_knife_tactical", 
	"weapon_knife_gut", 
	"weapon_bayonet", 
	"weapon_knife_push", 
	"weapon_knife_flip", 
	"weapon_knife_falchion", 
	"weapon_knife_survival_bowie"
};
char g_sKniveNames[][] =  {
	"Standardowy nóż", 
	"Karambit", 
	"M9 Bayonet", 
	"Nóż motylkowy", 
	"Nóż myśliwski", 
	"Nóż jelitowy", 
	"Bayonet", 
	"Shadow Daggers", 
	"Flip", 
	"Falchion", 
	"Bowie"
};

public void OnPluginStart()
{
	RegConsoleCmd("sm_knife", KnifeChoosing);
}

public Action KnifeChoosing(int client, int args)
{
	char sMenu_Secret[64], sMenu_Item[64];
	Menu knives = new Menu(Knives_Handler);
	knives.SetTitle("Knives:"); //18
	for (int i = 0; i < sizeof g_iKnifeNumber; i++)
	{
		Format(sMenu_Secret, sizeof(sMenu_Secret), "%s", g_sKnive[i]);
		Format(sMenu_Item, sizeof(sMenu_Item), "# %s", g_sKniveNames[i]);
		knives.AddItem(sMenu_Secret, sMenu_Item);
	}
	knives.Display(client, MENU_TIME_FOREVER);
}

public int Knives_Handler(Menu knives, MenuAction action, int client, int position)
{
	if (action == MenuAction_Select)
	{
		char sItem[32];
		menu.GetItem(position, sItem, sizeof(sItem));
		UpdateKnife(client, sItem);
	}
	else if (action == MenuAction_End)
		delete menu;
}

void UpdateKnife(int client, char[] sKnife)
{
	int weapon;
	while ((weapon = GetPlayerWeaponSlot(client, CS_SLOT_KNIFE)) != -1) {
		RemovePlayerItem(client, weapon);
		AcceptEntityInput(weapon, "Kill");
	}
	
	weapon = GivePlayerItem(client, sKnife);
	EquipPlayerWeapon(client, weapon);
}

 

 

Sygnatura użytkownika

» Support: https://discord.com/invite/zMXt97R63v

» Steam: https://steamcommunity.com/id/pawelsteam/

» Discord: Paweł#8244

» PluginyCS: https://pluginycs.pl/profile/Pawel

» Przyjmuję zlecenia na paczki oraz pluginy.  «

  • Dziękuję
Odnośnik do odpowiedzi
Udostępnij na innych stronach
  • Moderator poziom 2

Wiadomość wygenerowana automatycznie

 

Problem został rozwiązany

Jeżeli się z tym nie zgadzasz, raportuj ten post

Sygnatura użytkownika

» Support: https://discord.com/invite/zMXt97R63v

» Steam: https://steamcommunity.com/id/pawelsteam/

» Discord: Paweł#8244

» PluginyCS: https://pluginycs.pl/profile/Pawel

» Przyjmuję zlecenia na paczki oraz pluginy.  «

Odnośnik do odpowiedzi
Udostępnij na innych stronach

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

Gość
Ten temat został zamknięty. Brak możliwości dodania odpowiedzi.
×
×
  • Dodaj nową pozycję...