Skocz do zawartości
kox1906

[Rozwiązane] Komenda !knife nie działa

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

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

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

 

 

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Dzięki! Do zamknięcia

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Wiadomość wygenerowana automatycznie

 

Problem został rozwiązany

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

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
Gość
Ten temat został zamknięty. Brak możliwości dodania odpowiedzi.

×
×
  • Dodaj nową pozycję...