Skocz do zawartości

Witamy w Nieoficjalnym polskim support'cie AMX Mod X

Witamy w Nieoficjalnym polskim support'cie AMX Mod X, jak w większości społeczności internetowych musisz się zarejestrować aby móc odpowiadać lub zakładać nowe tematy, ale nie bój się to jest prosty proces w którym wymagamy minimalnych informacji.
  • Rozpoczynaj nowe tematy i odpowiedaj na inne
  • Zapisz się do tematów i for, aby otrzymywać automatyczne uaktualnienia
  • Dodawaj wydarzenia do kalendarza społecznościowego
  • Stwórz swój własny profil i zdobywaj nowych znajomych
  • Zdobywaj nowe doświadczenia

Dołączona grafika Dołączona grafika

Guest Message by DevFuse
 

Zdjęcie

Problem z pobieraniem textu


Najlepsza odpowiedź _McHappy, 28.08.2017 20:51

Wszelako pojęte tablice z danymi przekazywane są jako argumenty funkcji(przez referencję), a nie przez nie zwracane. Patrz przykład:

public PobierzJakisTekst(id, TablicaZTekstem[], dlugoscTekstu)
{
param_convert(2);
copy(TablicaZTekstem, dlugoscTekstu, JakisTekstNpGracza[id]);
}

Wywołanie:
new szZmienna[64];
PobierzJakisTekst(id, szZmienna, 63);

Potem wykorzystanie, np:
client_print(id, print_center, "Twoja zmienna tekstowa: %s", szZmienna); Przejdź do postu


  • Nie możesz napisać tematu
  • Zaloguj się, aby dodać odpowiedź
9 odpowiedzi w tym temacie

#1 Split

    Programista

  • Power User

Reputacja: 106
Zaawansowany

  • Postów:490
  • Imię:Szymon
  • Lokalizacja:Opole
Offline

Napisano 28.08.2017 18:22

Witam. Mam pewien problem, otóż od niedawana zacząłem zabawę w Pawn. Jest jeden problem. Zrobiłem tablicę z itemami (przedmiotami)

new const nazwy_przedmiotow[][] = { "Brak", 
"Item 1", // 1
}
A następnie funkcję:
public native_cod_get_user_item_name(id)
{
	new item[64]

format(item, charsmax(item), nazwy_przedmiotow[informacje_przedmiotu_gracza[id][0]])
	
	return item
}
Oczywiście "informacje_przedmiotu_gracza[id][0]" zawiera ID przedmiotu, czyli 1 to "Item 1"

Problem leży właśnie po tym że nie może mi zwrócić nazwy.

		for (new i = 1; i <= get_maxplayers(); i++)
		{
			if (!is_user_connected(i))
				continue
				
			new name[64]
			get_user_name(i, name, charsmax(name))
			
			//new item
			//item = cod_get_user_item_name(i)
			
			new player[64]
			format(player, charsmax(player), "%s (%s)", name, cod_get_user_item_name(i))
			
			menu_additem(menu, player, _, _, menu_call)
		}
I podczas zwracania wartości Pokazuje mi coś takiego:
- .WhiteBlue (s)

a powinno pisać
- .WhiteBlue (item 1)

Proszę o pomoc.
  • +
  • -
  • 0

LoL, 500 postów ;D


#2 xBredeK

    Profesjonalista

  • Użytkownik

Reputacja: 4
Nowy

  • Postów:196
  • Imię:Bredek
  • Lokalizacja:Bredkowo
Offline

Napisano 28.08.2017 19:28

W tym 

		for (new i = 1; i <= get_maxplayers(); i++)
		{
			if (!is_user_connected(i))
				continue
				
			new name[64]
			get_user_name(i, name, charsmax(name))
			
			//new item
			//item = cod_get_user_item_name(i)
			
			new player[64]
			format(player, charsmax(player), "%s (%s)", name, cod_get_user_item_name(i))
			
			menu_additem(menu, player, _, _, menu_call)
		}

nie powinno być zamiast "%s (%s)" takie coś "%s (%i)" ?


  • +
  • -
  • 1

#3 Split

    Programista

  • Autor tematu
  • Power User

Reputacja: 106
Zaawansowany

  • Postów:490
  • Imię:Szymon
  • Lokalizacja:Opole
Offline

Napisano 28.08.2017 19:33

Niestety nie, gdy %i jest to liczba a ja chcę zwracać nazwę itemu, nie ID.
  • +
  • -
  • 0

LoL, 500 postów ;D


#4 Robiin

    Godlike

  • Support Team

Reputacja: 1 107
Super Hero

  • Postów:2 051
  • Imię:Robert
  • Lokalizacja:Wrocław
Offline

Napisano 28.08.2017 20:47

Możesz pokazać cały public? Mam wrażenie, że błędem jest wyświetlanie opcji w menu, a nie samo formatowanie (bo z tego co widzę, to chyba kod jest spójny).


  • +
  • -
  • 1

Nie dołączam do żadnej sieci, nie pomagam z tworzeniem paczek, nie napisze pluginów za zero.


#5 _McHappy

    Wszechwiedzący

  • Support Team

Reputacja: 243
Wszechwidzący

  • Postów:501
  • GG:
  • Imię:Radek
  • Lokalizacja:Tak
Offline

Napisano 28.08.2017 20:51   Najlepsza odpowiedź

Wszelako pojęte tablice z danymi przekazywane są jako argumenty funkcji(przez referencję), a nie przez nie zwracane. Patrz przykład:

public PobierzJakisTekst(id, TablicaZTekstem[], dlugoscTekstu)
{
param_convert(2);
copy(TablicaZTekstem, dlugoscTekstu, JakisTekstNpGracza[id]);
}

Wywołanie:
new szZmienna[64];
PobierzJakisTekst(id, szZmienna, 63);

Potem wykorzystanie, np:
client_print(id, print_center, "Twoja zmienna tekstowa: %s", szZmienna);

Użytkownik _McHappy edytował ten post 28.08.2017 21:14

  • +
  • -
  • 1

#6 Split

    Programista

  • Autor tematu
  • Power User

Reputacja: 106
Zaawansowany

  • Postów:490
  • Imię:Szymon
  • Lokalizacja:Opole
Offline

Napisano 28.08.2017 21:04

A mogę spytać co robi param_convert ?
  • +
  • -
  • 0

LoL, 500 postów ;D


#7 _McHappy

    Wszechwiedzący

  • Support Team

Reputacja: 243
Wszechwidzący

  • Postów:501
  • GG:
  • Imię:Radek
  • Lokalizacja:Tak
Offline

Napisano 28.08.2017 21:09

param_convert() używane jest dla natywów o parametrze 'style'=1
Funkcja ta przygotowuje zwykły parametr do przekazania poprzez referencję.
  • +
  • -
  • 1

#8 Split

    Programista

  • Autor tematu
  • Power User

Reputacja: 106
Zaawansowany

  • Postów:490
  • Imię:Szymon
  • Lokalizacja:Opole
Offline

Napisano 28.08.2017 21:20

Kumam. Jak mam użyć Twojego przykładu w tej funkcji ?
 
public native_cod_get_user_item_id(id)
{

	new item = informacje_przedmiotu_gracza[id][0]
	
	return item
}

public native_cod_get_user_item_name(id)
{
	new item = nazwy_przedmiotow[informacje_przedmiotu_gracza[id][0]]
	
	return item
}
W natywach mam to:
native cod_set_user_item(id, amount)

native cod_get_user_item_id(id)

native cod_get_user_item_name(id)

  • +
  • -
  • 0

LoL, 500 postów ;D


#9 _McHappy

    Wszechwiedzący

  • Support Team

Reputacja: 243
Wszechwidzący

  • Postów:501
  • GG:
  • Imię:Radek
  • Lokalizacja:Tak
Offline

Napisano 28.08.2017 22:16

Natyw:

native cod_get_user_item_name(id, szReturn[], iLen);

Ciało natywu:

public native_cod_get_user_item_name(id, szReturn[], iLen)
{
	param_convert(2);
        copy(szReturn, iLen, nazwy_przedmiotow[informacje_przedmiotu_gracza[id][0]]);
}

Wywołanie:

		for (new i = 1; i <= get_maxplayers(); i++)
		{
			if (!is_user_connected(i))
				continue
				
			new name[64]
			get_user_name(i, name, charsmax(name))
			
			new szItemName[32];
			cod_get_user_item_name(id, szItemName, charsmax(szItemName));
			
			new player[64]
			format(player, charsmax(player), "%s (%s)", name, szItemName)
			
			menu_additem(menu, player, _, _, menu_call)
                }

Użytkownik _McHappy edytował ten post 28.08.2017 22:17

  • +
  • -
  • 1

#10 Split

    Programista

  • Autor tematu
  • Power User

Reputacja: 106
Zaawansowany

  • Postów:490
  • Imię:Szymon
  • Lokalizacja:Opole
Offline

Napisano 28.08.2017 23:20

Rozwiązane. Dzięki za pomoc. Sam bym na to nie wpadł.
  • +
  • -
  • 0

LoL, 500 postów ;D





Użytkownicy przeglądający ten temat: 0

0 użytkowników, 0 gości, 0 anonimowych