Skocz do zawartości

  • Zaloguj korzystając z Facebooka Zaloguj korzystając z Twittera Zaloguj przez Steam Zaloguj poprzez Google      Logowanie »   
  • Rejestracja

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

[ROZWIĄZANE] Problem z Monetami dot. Szansy na drop monety


Najlepsza odpowiedź xenos, 03.08.2014 15:03

Jeśli edytowałeś tylko

new los = random_num(1,10) // Szansa na drop
coins_kill = los;
To nie powinno mieć znaczenia, ponieważ nie pojawia się nic należącego do hudu.
Jedynie zmienia się ilość przydziału monet za zabójstwo Przejdź do postu


  • Zamknięty Temat jest zamknięty
7 odpowiedzi w tym temacie

#1 Warjat

    Profesjonalista

  • Użytkownik

Reputacja: 25
Życzliwy

  • Postów:193
  • Lokalizacja:Warszawa
Offline

Napisano 02.08.2014 10:01

Witam mam problem z pluginem System Monet chciałem zrobić szansę 1/10 na drop monety z gracza 
 
Mam kod : 

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

#define PLUGIN	"System Monet"
#define AUTHOR	"kisiel96"
#define VERSION	"1.0.8"

#define ZADANIE_POKAZ_MONETY 666

#define VIP ADMIN_LEVEL_H

new nazwa_gracza[32][64],
identyfikator[32][64];

new monety[32];

new SyncHudObj;

new cvar_coins_kill_vip,
cvar_coins_ff,

cvar_typ_zapisu;

new coins_kill,
coins_kill_vip,

coins_ff,

typ_zapisu;

new vault;

public plugin_init()
{	
	register_plugin(PLUGIN, VERSION, AUTHOR);
	
	register_event("DeathMsg", "DeathMsg", "a");
	register_event("ResetHUD", "ResetHUD", "abe");
	register_logevent("HostageRescued", 3, "1=triggered", "2=Rescued_A_Hostage");
	register_logevent("HostageKilled", 3, "1=triggered", "2=Killed_A_Hostage");
	
	SyncHudObj = CreateHudSyncObj();
	
	cvar_coins_ff = register_cvar("cod_coins_friendlyfire", "0");
	cvar_typ_zapisu = get_cvar_pointer("cod_savetype");
	
	vault=nvault_open("monety");
	if(vault == INVALID_HANDLE)
		set_fail_state("Nie mozna otworzyc pliku");
}

public plugin_natives()
{
	register_native("cod_get_user_coins", "PobierzMonety", 1);
	register_native("cod_set_user_coins", "UstawMonety", 1);
}	

public client_authorized(id)
{
	UsunMonety(id);
	
	get_user_name(id, nazwa_gracza[id], 63);
	
	typ_zapisu = get_pcvar_num(cvar_typ_zapisu);
	
	switch(typ_zapisu)
	{
		case 1: copy(identyfikator[id], 63, nazwa_gracza[id]);
		case 2: get_user_authid(id, identyfikator[id], 63);
		case 3: get_user_ip(id, identyfikator[id], 63);
	}
	
	Wczytaj(id);
}

public client_connect(id)
	Wczytaj(id);

public client_disconnect(id)
{
	Zapisz(id);
	UsunMonety(id)
}

public plugin_end()
	nvault_close(vault);

/////RESET MONET/////

public UsunMonety(id)
	monety[id] = 0;

/////ZLICZNIE MONET/////

public DeathMsg()
{
	new kid = read_data(1);
	new vid = read_data(2);
	new los = random_num(1,10) // Szansa na drop
	
	if(kid == vid)
		return;
	
	coins_ff = get_pcvar_num(cvar_coins_ff) 
	
	if(coins_ff == 0 && get_user_team(kid) == get_user_team(vid))
		return;
	
	coins_kill = los;
	coins_kill_vip 	= get_pcvar_num(cvar_coins_kill_vip);
	
	if(get_user_flags(kid) & VIP)
	{
		monety[kid] += coins_kill_vip;
	}
	else
	{
		monety[kid] += coins_kill;
	}
}

/////HUD/////

public PokazMonety(id)
{
	id -= ZADANIE_POKAZ_MONETY;
	
	if(!is_user_alive(id))
	{
		remove_task(id+ZADANIE_POKAZ_MONETY);
		return;
	}
	
	set_hudmessage(0, 255, 0, 0.02, 0.23, 0, 0.0, 0.3, 0.0, 0.0);
	ShowSyncHudMsg(id, SyncHudObj, "^n^n^n^n^n^n^n^n[Monety: %i]", monety[id]); // Tutaj error jest
}

public ResetHUD(id)
{
	if(!task_exists(id+ZADANIE_POKAZ_MONETY))
		set_task(0.1, "PokazMonety", id+ZADANIE_POKAZ_MONETY, _, _, "b");
}

/////NATYWY/////

public UstawMonety(id, wartosc)
{
	monety[id] = wartosc
}

public PobierzMonety(id)
	return monety[id];

/////NVAULT/////

public Zapisz(id)
{
	new vaultkey[64], vaultdata[256];
	format(vaultkey, 63, "%s-monety", identyfikator[id]);
	format(vaultdata, 255, "%d#", monety[id]);
	nvault_set(vault, vaultkey, vaultdata);
	
	return PLUGIN_CONTINUE
}

public Wczytaj(id)
{
	new vaultkey[64], vaultdata[256];
	format(vaultkey, 63, "%s-monety", identyfikator[id]);
	format(vaultdata, 255, "%d#", monety[id]);
	nvault_get(vault, vaultkey, vaultdata,255);
	
	replace_all(vaultdata, 255, "#", " ");
	
	new monetytemp[33];
	parse(vaultdata, monetytemp, 32);
	
	monety[id] = str_to_num(monetytemp);
	
	return PLUGIN_CONTINUE
}

I jest problem bo wyskakuje mi error z HUD'em. Nie wiem czy dobrze to wykminiłem ale jest błąd czy ktoś by mógł mi pomóc w rozwiązaniu tego błędu ? Z góry dziękuję 


  • +
  • -
  • 0

#2 xenos

    Wszechobecny

  • Użytkownik

Reputacja: 209
Profesjonalista

  • Postów:456
  • GG:
  • Imię:Konrad
  • Lokalizacja:Rzeszów
Offline

Napisano 02.08.2014 10:56

new los = random_num(1,10)

w tym miejscu losujesz z zakresu od 1-10 tu ok jest ogólnie, ale:

coins_kill = los;

W tym miejscu jak tak zrobisz, to nie jest że szansa 1/10 że wypadnie z gracza moneta, tylko że wartość dodania monety za zabicie jest losowa.
Czyli jak ktoś zabije, to ilość monet będzie z zakresu od 1-10.

 natomiast jeśli chcesz zrobić naprawdę szanse 1/10 na drop monety to pod 

if(kid == vid)
        return;

dodajesz warunek

if(los != 1)
        return;

wtedy masz szanse 1/10 na monetę.

A co do problemu to mi kompilator nie wywala błędu, chyba że zle zaznaczyłeś wcześniej kod , a tutaj po wklejeniu wszystkie linijki są poprawne.
A jeżeli owy błąd pojawia się w grze, pokaż error logi bądz screena z gry z problemem


 


Użytkownik xenos edytował ten post 02.08.2014 10:59

  • +
  • -
  • 1
"Jeśli potrafię to pomogę, jeśli nie potrafię to wskaże drogę którą trzeba dążyć by znaleźć odpowiedz" 

Pluginy:
Szukanie Aktywnych Banów w AmxBansie
Drop After Death
Kto postawił mine

#3 Warjat

    Profesjonalista

  • Autor tematu
  • Użytkownik

Reputacja: 25
Życzliwy

  • Postów:193
  • Lokalizacja:Warszawa
Offline

Napisano 02.08.2014 11:20

L 08/02/2014 - 12:18:46: HudSyncObject -1 is invalid
L 08/02/2014 - 12:18:46: [AMXX] Displaying debug trace (plugin "systemmonet.amxx")
L 08/02/2014 - 12:18:46: [AMXX] Run time error 10: native error (native "ShowSyncHudMsg")
L 08/02/2014 - 12:18:46: [AMXX]    [0] systemmonet.sma::PokazMonety (line 139)

To jest właśnie ten problem


  • +
  • -
  • 0

#4 xenos

    Wszechobecny

  • Użytkownik

Reputacja: 209
Profesjonalista

  • Postów:456
  • GG:
  • Imię:Konrad
  • Lokalizacja:Rzeszów
Offline

Napisano 02.08.2014 11:54

Owy błąd informuje że wszystkie kanały hud'a są zapełnione.
Wartość -1 szuka wolnych kanałów w hudzie, w momencie gdy ich nie znajdzie wywala błąd.


  • +
  • -
  • 1
"Jeśli potrafię to pomogę, jeśli nie potrafię to wskaże drogę którą trzeba dążyć by znaleźć odpowiedz" 

Pluginy:
Szukanie Aktywnych Banów w AmxBansie
Drop After Death
Kto postawił mine

#5 Warjat

    Profesjonalista

  • Autor tematu
  • Użytkownik

Reputacja: 25
Życzliwy

  • Postów:193
  • Lokalizacja:Warszawa
Offline

Napisano 02.08.2014 12:04

Owy błąd informuje że wszystkie kanały hud'a są zapełnione.
Wartość -1 szuka wolnych kanałów w hudzie, w momencie gdy ich nie znajdzie wywala błąd.

Wiesz jak to naprawić ? bo jak wgram plugin bez modyfikacji jest wszystko dobrze a z tą tzw przemianą jest owy błąd 


  • +
  • -
  • 0

#6 xenos

    Wszechobecny

  • Użytkownik

Reputacja: 209
Profesjonalista

  • Postów:456
  • GG:
  • Imię:Konrad
  • Lokalizacja:Rzeszów
Offline

Napisano 03.08.2014 15:03   Najlepsza odpowiedź

Jeśli edytowałeś tylko
new los = random_num(1,10) // Szansa na drop
coins_kill = los;
To nie powinno mieć znaczenia, ponieważ nie pojawia się nic należącego do hudu.
Jedynie zmienia się ilość przydziału monet za zabójstwo
  • +
  • -
  • 1
"Jeśli potrafię to pomogę, jeśli nie potrafię to wskaże drogę którą trzeba dążyć by znaleźć odpowiedz" 

Pluginy:
Szukanie Aktywnych Banów w AmxBansie
Drop After Death
Kto postawił mine

#7 Warjat

    Profesjonalista

  • Autor tematu
  • Użytkownik

Reputacja: 25
Życzliwy

  • Postów:193
  • Lokalizacja:Warszawa
Offline

Napisano 03.08.2014 16:49

Jeśli edytowałeś tylko

new los = random_num(1,10) // Szansa na drop
coins_kill = los;
To nie powinno mieć znaczenia, ponieważ nie pojawia się nic należącego do hudu.
Jedynie zmienia się ilość przydziału monet za zabójstwo

 

Tam jest więcej w pluginie ja usunąłem monety za vip'a, hosty. pakę, hs zostało same za zabicie 

 

Ale zobaczę w pluginie nie przerabianym i wtedy edytuję ale nie wydaje mi się żeby miał coś wspólnego z wyświetlaniem wiadomości


  • +
  • -
  • 0

#8 Warjat

    Profesjonalista

  • Autor tematu
  • Użytkownik

Reputacja: 25
Życzliwy

  • Postów:193
  • Lokalizacja:Warszawa
Offline

Napisano 03.08.2014 20:07

new los = random_num(1,10)

w tym miejscu losujesz z zakresu od 1-10 tu ok jest ogólnie, ale:

coins_kill = los;

W tym miejscu jak tak zrobisz, to nie jest że szansa 1/10 że wypadnie z gracza moneta, tylko że wartość dodania monety za zabicie jest losowa.
Czyli jak ktoś zabije, to ilość monet będzie z zakresu od 1-10.

 natomiast jeśli chcesz zrobić naprawdę szanse 1/10 na drop monety to pod 

if(kid == vid)
        return;

dodajesz warunek

if(los != 1)
        return;

wtedy masz szanse 1/10 na monetę.

A co do problemu to mi kompilator nie wywala błędu, chyba że zle zaznaczyłeś wcześniej kod , a tutaj po wklejeniu wszystkie linijki są poprawne.
A jeżeli owy błąd pojawia się w grze, pokaż error logi bądz screena z gry z problemem


 

 

Ustawiłem 1/3 na drop monetki i wql nie chce dropić a zabiłem 10 razy 


  • +
  • -
  • 0




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

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