←  Problemy

AMXX.pl: Support AMX Mod X i SourceMod

»

Poprawieni kodu hud

Zablokowany

Flk - zdjęcie Flk 12.08.2012

chcial bym zeby to co wpisze w messagemode pokazywalo w hud ale cos zle zrobilem i mi to nie dziala

/* Plugin generated by AMXX-Studio */

#include <amxmodx>
#include <amxmisc>
#include <fakemeta>


#define ZADANIE_POKAZ_INFORMACJE 672

#define PLUGIN "New Plug-In"
#define VERSION "1.0"
#define AUTHOR "Administrator"

new mymenu, klasa[33];
new SyncHudObj;

public plugin_init() {
register_plugin(PLUGIN, VERSION, AUTHOR)

register_clcmd("NazwaKlasy","pobierz");


SyncHudObj = CreateHudSyncObj();
}

public pokaz_menu(id)
{
mymenu = menu_create("Menu","handle_mymenu")
menu_additem(mymenu, "Klasa Gracza");

menu_display(id,mymenu,0)
}
public handle_mymenu(id,menu,item)
{
switch(item)
{
case 0:
{
client_cmd(id,"messagemode NazwaKlasy");
}
}
}
public pobierz(id)
{
new said[31];
new cmd[16];
new target[32];


read_args(said, 30);
replace(said, 30, "^"", "");
parse(said, cmd,15, target,31);

if (equal(cmd, "NazwaKlasy", 4))
{
klasa[id] = cmd_target(id,target,31);
}
}


public client_connect(id)
{

set_task(3.0, "Info", id+ZADANIE_POKAZ_INFORMACJE);

}

public Info(id)
{
id -= ZADANIE_POKAZ_INFORMACJE;

set_task(0.1, "Info", id+ZADANIE_POKAZ_INFORMACJE);

if(!is_user_alive(id))
{
new target = pev(id, pev_iuser2);
if(!target)
return PLUGIN_CONTINUE;


set_hudmessage(255, 255, 255, 0.6, 0.46, 0, 0.0, 0.3, 0.0, 0.0, 2);
ShowSyncHudMsg(id, SyncHudObj, "Klasa: %s", klasa[id]);
return PLUGIN_CONTINUE;
}

set_hudmessage(0, 255, 0, 0.02, 0.23, 0, 0.0, 0.3, 0.0, 0.0);
ShowSyncHudMsg(id, SyncHudObj, "[Klasa: %s]", klasa[id]);

return PLUGIN_CONTINUE;
}
Odpowiedz

  • +
  • -
fgsfds - zdjęcie fgsfds 13.08.2012

Może się nie znam ale jakoś tak dziwnie to wygląda.
Przy połączeniu gracza z serwerem ustawiasz task co 3 sekundy o identyfikatorze id+ZADANIE_POKAZ_INFORMACJE który uruchamia funkcję Info, po czym w tej funkcji ustawiasz task o tym samym identyfikatorze, który wywołuję funkcje, która znowu ustawia ten task i tak w nieskończoność.
Są jakieś błędy w konsoli? W kompilatorze? Cokolwiek?
Odpowiedz

Flk - zdjęcie Flk 13.08.2012

nie hud działa dobrze mam problem z oczytaniem nazwy klasy z zmiennej
Odpowiedz

  • +
  • -
fgsfds - zdjęcie fgsfds 13.08.2012

O którą linijkę dokładnie chodzi?

if (equal(cmd, "NazwaKlasy", 4))
{
klasa[id] = cmd_target(id,target,31);
}


Tą?
Użytkownik Maxorq edytował ten post 13.08.2012 00:58
Odpowiedz

Gość_21977_* 13.08.2012

Na pierwszy rzut oka, po wyjściu gracza z serwera, dalej wysyłasz do niego wiadomości.
Doraźnie
#include <amxmodx>
#include <amxmisc>
#include <fakemeta>

#define ZADANIE_POKAZ_INFORMACJE 672

#define PLUGIN "New Plug-In"
#define VERSION "1.0"
#define AUTHOR "Administrator"

new mymenu, klasa[33];
new SyncHudObj;

public plugin_init() {
register_plugin(PLUGIN, VERSION, AUTHOR)
register_clcmd("NazwaKlasy","pobierz");
SyncHudObj = CreateHudSyncObj();
}

public pokaz_menu(id)
{
mymenu = menu_create("Menu","handle_mymenu");
menu_additem(mymenu, "Klasa Gracza");

menu_display(id,mymenu,0);
}
public handle_mymenu(id,menu,item)
{
switch(item)
{
case 0:
{
client_cmd(id,"messagemode NazwaKlasy");
}
}
}
public pobierz(id)
{
new said[31];
new cmd[16];
new target[32];


read_args(said, 30);
replace(said, 30, "^"", "");
parse(said, cmd,15, target,31);

if (equal(cmd, "NazwaKlasy", 4))
{
klasa[id] = cmd_target(id,target,31);
}
}


public client_connect(id)
{
set_task(3.0, "Info", id+ZADANIE_POKAZ_INFORMACJE);
}

public Info(id)
{
id -= ZADANIE_POKAZ_INFORMACJE;

if(is_user_connected(id))
set_task(0.1, "Info", id+ZADANIE_POKAZ_INFORMACJE);

if(!is_user_alive(id))
{
new target = pev(id, pev_iuser2);
if(!target)
return PLUGIN_CONTINUE;


set_hudmessage(255, 255, 255, 0.6, 0.46, 0, 0.0, 0.3, 0.0, 0.0, 2);
ShowSyncHudMsg(id, SyncHudObj, "Klasa: %s", klasa[id]);
return PLUGIN_CONTINUE;
}

set_hudmessage(0, 255, 0, 0.02, 0.23, 0, 0.0, 0.3, 0.0, 0.0);
ShowSyncHudMsg(id, SyncHudObj, "[Klasa: %s]", klasa[id]);

return PLUGIN_CONTINUE;
}
Odpowiedz

Flk - zdjęcie Flk 13.08.2012

niby działa ale nie pokazuje się tekst wpisany i zapisany do klasa[id]
Odpowiedz

  • +
  • -
fgsfds - zdjęcie fgsfds 13.08.2012

niby działa ale nie pokazuje się tekst wpisany i zapisany do klasa[id]


klasa[33] to tablica typu Integer.
Usiłujesz wstawić do wiadomości %s czyli String. Zamień "Klasa: %s" na "Klasa: %i" i wtedy będziesz miał wartość liczbową typu "Klasa: 1"
Żadnych deklaracji nazw klas nie widzę, więc to musisz zrobić na początku.
Odpowiedz

Flk - zdjęcie Flk 13.08.2012

akurat chce tam wstawić tekst jak to zrobić dopiero zaczynam wiec proszę o pomoc
Odpowiedz

  • +
  • -
fgsfds - zdjęcie fgsfds 13.08.2012

Dobra, chcesz wstawić tekst ale jaki? Skąd go bierzesz? Co w ogóle usiłujesz zrobić?
Odpowiedz

Flk - zdjęcie Flk 13.08.2012

Tutaj w tem menu wpisujesz np. Kapitan
i chce to wyświetlić w hud z zapisem nvault

public pokaz_menu(id)
{
mymenu = menu_create("Menu","handle_mymenu");
menu_additem(mymenu, "Klasa Gracza");

menu_display(id,mymenu,0);
}
public handle_mymenu(id,menu,item)
{
switch(item)
{
case 0:
{
client_cmd(id,"messagemode NazwaKlasy");
}
}

Odpowiedz

  • +
  • -
fgsfds - zdjęcie fgsfds 13.08.2012

Dziwnie mi to wygląda, ale w każdym razie, najlepiej gdybyś na początku walnął jakąś definicję wszystkich nazw klas typu:

new const NazwyKlas[3][] = { "Kapitan", "Inna klasa", "Jeszcze inna" }


Później w HUD'zie możesz się do tego odwołać podając NazwyKlas[klasa[id]] (tym razem z parametrem %s)
Odpowiedz

Flk - zdjęcie Flk 13.08.2012

wiem ale właśnie chciałem zrobić że każdy se może swoją nazwę wpisać szkoda że się nie da
Odpowiedz

  • +
  • -
fgsfds - zdjęcie fgsfds 13.08.2012

Nie no, dałoby się zrobić wpisywanie własnej, ale musiałbyś wtedy zrobić zmienną która może to przetrzymywać, np.

new NazwyKlas[33][32]


Dałoby to 32 znaki do wykorzystania dla każdego gracza, mógłbyś to pętlą zapisywać do nVault'a.
Trochę pokomplikowany ten kod, więc wstrzymam się z dalszymi pomysłami do czasu, aż ktoś inny na to popatrzy.
Odpowiedz

Flk - zdjęcie Flk 13.08.2012

zrobiłem to inaczej ale mam problem bo nie wiem jak zapisać wpisany tekst na jedną osobę

/* Plugin generated by AMXX-Studio */

#include <amxmodx>
#include <amxmisc>
#include <fakemeta>
#include <nvault>


#define ZADANIE_POKAZ_INFORMACJE 672

#define PLUGIN "New Plug-In"
#define VERSION "1.0"
#define AUTHOR "Administrator"

new szText1[33][64];
new SyncHudObj;

new d_bron

public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR)

register_clcmd("say /test","test")
register_clcmd("NazwaKlasy", "Manual1")
d_bron = nvault_open("klasa")


SyncHudObj = CreateHudSyncObj();
}

public test(id) {
new menu = menu_create("MenuX", "wieczyste")
menu_additem(menu, "Nazwa Klasy")
menu_setprop(menu, MPROP_EXIT, MEXIT_ALL)
menu_display(id, menu, 0)
}
public wieczyste(id, menu, item) {
switch(item){
case 0: {
client_cmd(id, "messagemode NazwaKlasy");
}
}
return PLUGIN_HANDLED
}
public Manual1(id) {
read_argv(1, szText1[id], charsmax(szText1))
remove_quotes(szText1[id])

return PLUGIN_HANDLED
}


public client_connect(id)
{
Wczytajexp(id)

set_task(3.0, "Info", id+ZADANIE_POKAZ_INFORMACJE);

}

public client_disconnect(id)
{
Zapiszexp(id);

}

public Info(id)
{
id -= ZADANIE_POKAZ_INFORMACJE;

set_task(0.1, "Info", id+ZADANIE_POKAZ_INFORMACJE);

if(!is_user_alive(id))
{
new target = pev(id, pev_iuser2);
if(!target)
return PLUGIN_CONTINUE;


set_hudmessage(255, 255, 255, 0.6, 0.46, 0, 0.0, 0.3, 0.0, 0.0, 2);
ShowSyncHudMsg(id, SyncHudObj, "Klasa: %s", szText1[id]);
return PLUGIN_CONTINUE;
}

set_hudmessage(0, 255, 0, 0.02, 0.23, 0, 0.0, 0.3, 0.0, 0.0);
ShowSyncHudMsg(id, SyncHudObj, "[Klasa: %s]", szText1[id]);

return PLUGIN_CONTINUE;
}

public Zapiszexp(id)
{
new name[31];
get_user_name(id, name, 31);

new vaultkey[64], vaultdata[256];
format(vaultkey, 63, "%s-exp", name);
format(vaultdata, 255, "%s#", szText1[id]);
nvault_set(d_bron, vaultkey, vaultdata);
return PLUGIN_CONTINUE;
}
public Wczytajexp(id)
{
new name[31];
get_user_name(id,name,31);

new vaultkey[64], vaultdata[256];
format(vaultkey, 63, "%s-exp", name);
format(vaultdata, 255, "%s#", szText1[id]);
nvault_get(d_bron, vaultkey, vaultdata,255);

replace_all(vaultdata, 255, "#", " ");

new danegracza[1][32];
parse(vaultdata, danegracza[0]);

copy(szText1[id], 63, danegracza[0]);




return PLUGIN_CONTINUE;
}
Odpowiedz

  • +
  • -
fgsfds - zdjęcie fgsfds 13.08.2012

Spróbuj zamiast:

read_argv(1, szText1[id], charsmax(szText1))


użyć:

read_argv(1, szText1[id], charsmax(szText1[id]))
Odpowiedz

Flk - zdjęcie Flk 13.08.2012

Próbowałem i errory wywala
Odpowiedz

  • +
  • -
fgsfds - zdjęcie fgsfds 13.08.2012

A mógłbyś je podać może...
Odpowiedz

Flk - zdjęcie Flk 13.08.2012

Welcome to the AMX Mod X 1.76-300 Compiler.
Copyright © 1997-2006 ITB CompuPhase, AMX Mod X Team

Error: Expected token: "]", but found "-identifier-" on line 47
Error: Invalid expression, assumed zero on line 47
Error: Invalid expression, assumed zero on line 47
Error: Too many error messages on one line on line 47

Compilation aborted.
4 Errors.
Could not locate output file D:\amxx\Untitled.amx (compile failed).
Odpowiedz

Flk - zdjęcie Flk 13.08.2012

Poradziłem sobie można zamknąć
Odpowiedz

  • +
  • -
Kawon - zdjęcie Kawon 13.08.2012

Wiadomość wygenerowana automatycznie


Ten temat został zamknięty przez moderatora.

Powód: Temat zamknięty na prośbę użytkownika.


Z pozdrowieniami,
Zespół AMXX.PL
Odpowiedz
Zablokowany