Skocz do zawartości

Rekomendowane odpowiedzi

Cześć,

Nie wiem jak zadać to pytanie może pokażę o co mi chodzi.

Mam plugin, który zmienia tag w tabeli jak wybierzemy jakąś opcje w menu.

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

public void OnPluginStart() {
    RegAdminCmd("sm_tag", SetTag_Menu, ADMFLAG_ROOT);
    RegAdminCmd("sm_tags", SetTag_Menu, ADMFLAG_ROOT);
    RegAdminCmd("sm_tagi", SetTag_Menu, ADMFLAG_ROOT);
    RegAdminCmd("sm_tagmenu", SetTag_Menu, ADMFLAG_ROOT);
}

public Action SetTag_Menu(int client, int args) {
    char buffer[128];
    Format(buffer, sizeof(buffer), "Siemka, %N\nWybierz jaki chcesz mieć TAG\n ", client);
    Menu menu = new Menu(TagMenu_Handler);
    menu.SetTitle(buffer);
    menu.AddItem("", "Właściciel |");
    menu.AddItem("", "♫ Opiekun | ");
    menu.AddItem("", "☯ Admin | ");
    menu.AddItem("", "✘ VIP | ");
    menu.AddItem("", "✔ Gracz | ");

    menu.Display(client, MENU_TIME_FOREVER);
}

public int TagMenu_Handler(Menu menu, MenuAction action, int client, int pos){
    if (action == MenuAction_End) {
        delete menu;
    }
	switch (action) {
		case MenuAction_Select: {
			switch (pos) {
				case 0:OwnerTag(client);
                case 1:OpiekunTag(client);
				case 2:AdminTag(client);
                case 3:VIPTag(client);
                case 4:PlayerTag(client);
			}
		}
		case MenuAction_End:delete menu;
	}
}

void OwnerTag(int client) {
    CS_SetClientClanTag(client, "Właściciel |");
    CPrintToChat(client, "{yellow}Wybrałeś TAG: {orchid}Właściciel |");
}

void OpiekunTag(int client) {
    CS_SetClientClanTag(client, "♫ Opiekun | ");
    CPrintToChat(client, "{yellow}Wybrałeś TAG: {orchid}♫ Opiekun | ");
}

void AdminTag(int client) {
    CS_SetClientClanTag(client, "☯ Admin | ");
    CPrintToChat(client, "{yellow}Wybrałeś TAG: {orchid}☯ Admin | ");
}

void VIPTag(int client) {
    CS_SetClientClanTag(client, "✘ VIP | ");
    CPrintToChat(client, "{yellow}Wybrałeś TAG: {orchid}✘ VIP | ");
}

void PlayerTag(int client) {
    CS_SetClientClanTag(client, "✔ Gracz | ");
    CPrintToChat(client, "{yellow}Wybrałeś TAG: {orchid}✔ Gracz | ");
}

 

Chciałbym też, żeby po wybraniu pozycji zmieniało prefix na chacie. Chciałem skorzystać z pluginu magneta, który pisał w odcinku.

I tak jak pisałem nie wiem jak to opisać MAGNET stworzył funkcję ProcessChat. Tylko ja chciałbym ją wykorzystać w funkcji, która otwiera menu.  

Jak napisałem niezrozumiale to napiszcie postaram się to lepiej wytłumaczyć.

Sygnatura użytkownika

creativve.pro

 

Odnośnik do odpowiedzi
Udostępnij na innych stronach

możesz to zrobić chatprocessorem 

 

public Action CP_OnChatMessage(int& author, ArrayList recipients, char[] flagstring, char[] name, char[] message, bool& processcolors, bool& removecolors)
{
	Format(name, MAXLENGTH_NAME, "{red}%s", name);
	Format(message, MAXLENGTH_MESSAGE, "{blue}%s", message);
	return Plugin_Changed;
}

wystarczy dodać odpowiednie warunki

Sygnatura użytkownika

sygnatura.png.2bb174ebd0d762771c922cae7f9ce73c.png

 

Odnośnik do odpowiedzi
Udostępnij na innych stronach

@Maroxx Średnio rozumiem ;-; 

Mam funkcje 

void OwnerTag(int client) {
    CS_SetClientClanTag(client, "Właściciel |");
    CPrintToChat(client, "{yellow}Wybrałeś TAG: {orchid}Właściciel |");
}

I do tego chciałbym dopisać kod, aby na chacie był prefix. Z chatprocessora nigdy nie korzystałem więc jak mógłbyś wytłumaczyć jak to zrobić byłbym wdzięczny. 

Sygnatura użytkownika

creativve.pro

 

Odnośnik do odpowiedzi
Udostępnij na innych stronach
#include <sourcemod>
#include <sdktools>
#include <sdkhooks>
#include <cstrike>
#include <multicolors>
#include <chat-processor>

bool owner[MAXPLAYERS + 1] = {true, ...};

public void OnPluginStart() {
    RegAdminCmd("sm_tag", SetTag_Menu, ADMFLAG_ROOT);
    RegAdminCmd("sm_tags", SetTag_Menu, ADMFLAG_ROOT);
    RegAdminCmd("sm_tagi", SetTag_Menu, ADMFLAG_ROOT);
    RegAdminCmd("sm_tagmenu", SetTag_Menu, ADMFLAG_ROOT);
}

public Action SetTag_Menu(int client, int args) {
    char buffer[128];
    Format(buffer, sizeof(buffer), "Siemka, %N\nWybierz jaki chcesz mieć TAG\n ", client);
    Menu menu = new Menu(TagMenu_Handler);
    menu.SetTitle(buffer);
    menu.AddItem("", "Właściciel |");
    menu.AddItem("", "♫ Opiekun | ");
    menu.AddItem("", "☯ Admin | ");
    menu.AddItem("", "✘ VIP | ");
    menu.AddItem("", "✔ Gracz | ");

    menu.Display(client, MENU_TIME_FOREVER);
}

public int TagMenu_Handler(Menu menu, MenuAction action, int client, int pos){
    switch (action) {
        case MenuAction_Select: {
            switch (pos) {
                case 0:OwnerTag(client);
                case 1:OpiekunTag(client);
                case 2:AdminTag(client);
                case 3:VIPTag(client);
                case 4:PlayerTag(client);
            }
        }
        case MenuAction_End: 
            delete menu;
    }
}

public Action CP_OnChatMessage(int& author, ArrayList recipients, char[] flagstring, char[] name, char[] message, bool& processcolors, bool& removecolors, int client)
{
    char Name[MAX_NAME_LENGTH]
    char Message[512];
    
    for (int i = 1; i < MAXPLAYERS; i++) {
        if (!IsValidClient(i)) continue;
        
        if (owner[client]) {
            CPrintToChat(i, " {orchid}Wlasciciel {teamcolor} %s {deafult}: %s", Name, Message);
          	return Plugin_Handled;
        }
    }
    Format(Name, sizeof(Name), "%s", name);
    Format(Message, sizeof(Message), "{blue}%s", message);
    return Plugin_Changed;
}

void OwnerTag(int client) {
    CS_SetClientClanTag(client, "Właściciel |");
    CPrintToChat(client, "{yellow}Wybrałeś TAG: {orchid}Właściciel |");
}


void OpiekunTag(int client) {
    CS_SetClientClanTag(client, "♫ Opiekun | ");
    CPrintToChat(client, "{yellow}Wybrałeś TAG: {orchid}♫ Opiekun | ");
}

void AdminTag(int client) {
    CS_SetClientClanTag(client, "☯ Admin | ");
    CPrintToChat(client, "{yellow}Wybrałeś TAG: {orchid}☯ Admin | ");
}

void VIPTag(int client) {
    CS_SetClientClanTag(client, "✘ VIP | ");
    CPrintToChat(client, "{yellow}Wybrałeś TAG: {orchid}✘ VIP | ");
}

void PlayerTag(int client) {
    CS_SetClientClanTag(client, "✔ Gracz | ");
    CPrintToChat(client, "{yellow}Wybrałeś TAG: {orchid}✔ Gracz | ");
}

stock bool IsValidClient(int client)
{
    if (client <= 0)return false;
    if (client > MaxClients)return false;
    if (!IsClientConnected(client))return false;
    if (IsClientReplay(client))return false;
    if (IsFakeClient(client))return false;
    if (IsClientSourceTV(client))return false;
    return IsClientInGame(client);
} 

nie wiem czy takie cos ma szanse dzialac, ale zawsze mozna sprobowac 😛
(dla ownera prefix tylko)
include https://forums.alliedmods.net/showthread.php?t=286913

 

@Elite mozna to w prosty sposob zmienic, jak mozesz to sprawdz i daj znac czy dziala, jezeli bedzie to wysle wersje z prefixami do kazdej rangi

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

nie wiem czy takie cos ma szanse dzialac, ale mozesz sprobowac 😛
(dla ownera prefix tylko)

no właśnie a tak jak pisałem wyżej do każdego z osoba chciałem, ale dzięki tak czy siak :)).

Sygnatura użytkownika

creativve.pro

 

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

@Grafit n_tabletags.sp(47) : error 181: function argument named 'client' differs from prototype

#include <sourcemod>
#include <sdktools>
#include <sdkhooks>
#include <cstrike>
#include <multicolors>
#include <chat-processor>

bool owner[MAXPLAYERS + 1] = {true, ...};

public void OnPluginStart() {
    RegAdminCmd("sm_tag", SetTag_Menu, ADMFLAG_ROOT);
    RegAdminCmd("sm_tags", SetTag_Menu, ADMFLAG_ROOT);
    RegAdminCmd("sm_tagi", SetTag_Menu, ADMFLAG_ROOT);
    RegAdminCmd("sm_tagmenu", SetTag_Menu, ADMFLAG_ROOT);
}

public Action SetTag_Menu(int client, int args) {
    char buffer[128];
    Format(buffer, sizeof(buffer), "Siemka, %N\nWybierz jaki chcesz mieć TAG\n ", client);
    Menu menu = new Menu(TagMenu_Handler);
    menu.SetTitle(buffer);
    menu.AddItem("", "Właściciel |");
    menu.AddItem("", "♫ Opiekun | ");
    menu.AddItem("", "☯ Admin | ");
    menu.AddItem("", "✘ VIP | ");
    menu.AddItem("", "✔ Gracz | ");

    menu.Display(client, MENU_TIME_FOREVER);
}

public int TagMenu_Handler(Menu menu, MenuAction action, int client, int pos){
    switch (action) {
        case MenuAction_Select: {
            switch (pos) {
                case 0:OwnerTag(client);
                case 1:OpiekunTag(client);
                case 2:AdminTag(client);
                case 3:VIPTag(client);
                case 4:PlayerTag(client);
            }
        }
        case MenuAction_End: 
            delete menu;
    }
}

public Action CP_OnChatMessage(int& author, ArrayList recipients, char[] flagstring, char[] name, char[] message, bool& processcolors, bool& removecolors)
{
    char Name[MAX_NAME_LENGTH]
    char Message[512];
  
  	Format(Name, sizeof(Name), "%s", name);
    Format(Message, sizeof(Message), "{blue}%s", message);

    if (owner(author)) {
            CPrintToChatAll( " {orchid}Wlasciciel {teamcolor} %s {deafult}: %s", Name, Message);
          	return Plugin_Handled;
    }
    return Plugin_Changed;
}

void OwnerTag(int client) {
    CS_SetClientClanTag(client, "Właściciel |");
    CPrintToChat(client, "{yellow}Wybrałeś TAG: {orchid}Właściciel |");
}


void OpiekunTag(int client) {
    CS_SetClientClanTag(client, "♫ Opiekun | ");
    CPrintToChat(client, "{yellow}Wybrałeś TAG: {orchid}♫ Opiekun | ");
}

void AdminTag(int client) {
    CS_SetClientClanTag(client, "☯ Admin | ");
    CPrintToChat(client, "{yellow}Wybrałeś TAG: {orchid}☯ Admin | ");
}

void VIPTag(int client) {
    CS_SetClientClanTag(client, "✘ VIP | ");
    CPrintToChat(client, "{yellow}Wybrałeś TAG: {orchid}✘ VIP | ");
}

void PlayerTag(int client) {
    CS_SetClientClanTag(client, "✔ Gracz | ");
    CPrintToChat(client, "{yellow}Wybrałeś TAG: {orchid}✔ Gracz | ");
}

stock bool IsValidClient(int client)
{
    if (client <= 0)return false;
    if (client > MaxClients)return false;
    if (!IsClientConnected(client))return false;
    if (IsClientReplay(client))return false;
    if (IsFakeClient(client))return false;
    if (IsClientSourceTV(client))return false;
    return IsClientInGame(client);
} 

moze to?

 

lub to

#include <sourcemod>
#include <sdktools>
#include <sdkhooks>
#include <cstrike>
#include <multicolors>
#include <chat-processor>

bool owner[MAXPLAYERS + 1] = {true, ...};

public void OnPluginStart() {
    RegAdminCmd("sm_tag", SetTag_Menu, ADMFLAG_ROOT);
    RegAdminCmd("sm_tags", SetTag_Menu, ADMFLAG_ROOT);
    RegAdminCmd("sm_tagi", SetTag_Menu, ADMFLAG_ROOT);
    RegAdminCmd("sm_tagmenu", SetTag_Menu, ADMFLAG_ROOT);
}

public Action SetTag_Menu(int client, int args) {
    char buffer[128];
    Format(buffer, sizeof(buffer), "Siemka, %N\nWybierz jaki chcesz mieć TAG\n ", client);
    Menu menu = new Menu(TagMenu_Handler);
    menu.SetTitle(buffer);
    menu.AddItem("", "Właściciel |");
    menu.AddItem("", "♫ Opiekun | ");
    menu.AddItem("", "☯ Admin | ");
    menu.AddItem("", "✘ VIP | ");
    menu.AddItem("", "✔ Gracz | ");

    menu.Display(client, MENU_TIME_FOREVER);
}

public int TagMenu_Handler(Menu menu, MenuAction action, int client, int pos){
    switch (action) {
        case MenuAction_Select: {
            switch (pos) {
                case 0:OwnerTag(client);
                case 1:OpiekunTag(client);
                case 2:AdminTag(client);
                case 3:VIPTag(client);
                case 4:PlayerTag(client);
            }
        }
        case MenuAction_End: 
            delete menu;
    }
}

public Action CP_OnChatMessage(int& author, ArrayList recipients, char[] flagstring, char[] name, char[] message, bool& processcolors, bool& removecolors)
{
	Format(name, MAXLENGTH_NAME, "}%s", name);
	Format(message, MAXLENGTH_MESSAGE, "%s", message);
	return Plugin_Changed;
}


public void CP_OnChatMessagePost(int author, ArrayList recipients, const char[] flagstring, const char[] formatstring, const char[] name, const char[] message, bool processcolors, bool removecolors)
{
    if (owner[author]) {
        CPrintToChatAll("[Wlasciciel] %s: %s ", name, message);
    }
    else {
        CPrintToChatAll("[Gracz] %s: %s ", name, message);
    }
}

void OwnerTag(int client) {
    CS_SetClientClanTag(client, "Właściciel |");
    CPrintToChat(client, "{yellow}Wybrałeś TAG: {orchid}Właściciel |");
    owner[client] = true;
}


void OpiekunTag(int client) {
    CS_SetClientClanTag(client, "♫ Opiekun | ");
    CPrintToChat(client, "{yellow}Wybrałeś TAG: {orchid}♫ Opiekun | ");
  owner = false;
}

void AdminTag(int client) {
    CS_SetClientClanTag(client, "☯ Admin | ");
    CPrintToChat(client, "{yellow}Wybrałeś TAG: {orchid}☯ Admin | ");
  owner = false;
}

void VIPTag(int client) {
    CS_SetClientClanTag(client, "✘ VIP | ");
    CPrintToChat(client, "{yellow}Wybrałeś TAG: {orchid}✘ VIP | ");
  owner = false;
}

void PlayerTag(int client) {
    CS_SetClientClanTag(client, "✔ Gracz | ");
    CPrintToChat(client, "{yellow}Wybrałeś TAG: {orchid}✔ Gracz | ");
  owner = false;
}

stock bool IsValidClient(int client)
{
    if (client <= 0)return false;
    if (client > MaxClients)return false;
    if (!IsClientConnected(client))return false;
    if (IsClientReplay(client))return false;
    if (IsFakeClient(client))return false;
    if (IsClientSourceTV(client))return false;
    return IsClientInGame(client);
} 

jak zadne z tych to nie umiem XD

btw wiem ze troche slabe jest to z owner = true ciaglym ustawianiem ale inaczej nie wiem jak mozna takie cos zrobic @Elite

Edytowane przez Grafit
Odnośnik do odpowiedzi
Udostępnij na innych stronach
Cytat
#include <sourcemod>
#include <multicolors>
#include <cstrike>

#define stoi StringToInt

char TAGS[][32] = {"Wlasciciel", "Opiekun", "Admin", "VIP", "Gracz"};
char alias[][32] = {"sm_tag", "sm_tagi", "sm_tagmenu", "sm_tags"};

enum struct Player {
   char tag[32];
}

Player g_Player[MAXPLAYERS + 1];
public OnPluginStart() {
    for (int i = 0 ; i < sizeof(alias); i++)
        RegAdminCmd(alias[i], TAG, ADMFLAG_ROOT);
}

public Action TAG(int client, int args) {
    if (!IsValid(client))
        return Plugin_Handled;
    Menu menu = new Menu(Menu_Handler);
    menu.SetTitle("TAGI:");
    for (int i = 0 ; i < sizeof(TAGS); i++) {
        char index[32];
        IntToString(i, index, sizeof(index))
        menu.AddItem(index, TAGS[i]);
    } 
    menu.Display(client, MENU_TIME_FOREVER);
    return Plugin_Handled;
}

int Menu_Handler(Menu menu, MenuAction action, int client, int pos) {
    if (action == MenuAction_Select) {
        char index[32];
        GetMenuItem(menu, pos, index, sizeof(index));
        g_Player[client].tag = TAGS[stoi(index)];
        PrintToChat(client, " \x0F[TAGS]\x01 Wybrales TAG: \x0F%s!\x01", TAGS[stoi(index)]);
        Format(index, sizeof(index), "[%s]", TAGS[stoi(index)]);
        CS_SetClientClanTag(client, index);
    }
    return 0;
}

public Action CP_OnChatMessage(int& author, ArrayList recipients, char[] flagstring, char[] name, char[] message, bool& processcolors, bool& removecolors)
{
    if (strlen(g_Player[author].tag) > 0) {
        Format(name, MAX_NAME_LENGTH, " \x07[%s] \x03 %s", g_Player[author].tag, name);
        return Plugin_Changed;
    }
    return Plugin_Continue;
}

bool IsValid(int client) {
    if (!IsClientConnected(client) || !IsClientInGame(client) || IsFakeClient(client))
        return false;
    return true;
}

 

 

Edytowane przez ogbudowa
.
  • 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ę...