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

[ROZWIĄZANE] Zapis rang (nvault)



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

#1 GoldenKill

    Guru

  • Power User

Reputacja: 507
Wszechwiedzący

  • Postów:792
  • Steam:steam
  • Imię:Damian
  • Lokalizacja:Trzebnica
Offline

Napisano 01.08.2014 14:31

Witam

 

Tak jak w temacie jak zrobić zapis rang, na nvault. Przesyłam potrzebny kod i zapis który ja robiłem ale on nie działa

public SaveRangi(id)
{
	new name[32]
	get_user_name(id,name,31)
	new vaultkey[40],vaultdata[25]
	formatex(vaultkey,39,"%s-RAN",name);
	formatex(vaultdata,24,"%s",ranganum[id])
	nvault_set(g_ran_spr,vaultkey,vaultdata);
}

public LoadRangi(id)
{
	new name[32]
	get_user_name(id,name,31)
	new vaultkey[40],vaultdata[25]
	formatex(vaultkey,39,"%s-RAN",name);
	nvault_get(g_ran_spr, vaultkey, vaultdata,24);
	ranganum[id] = str_to_num(vaultdata);
}


new ranganum[47];
new ranga[][] = {
	"Brak",
	"Private First Class",
	"Private First Class 1",
	"Private First Class 2",
	"Private First Class 3",
	"Lance Corporal",
	"Lance Corporal 1 Star",
	"Lance Corporal 2 Stars",
	"Lance Corporal 3 Stars",
	"Corporal",
	"Corporal 1 Star",
	"Corporal 2 Stars",
	"Corporal 3 Stars",
	"Sergeant",
	"Sergeant 1 Star",
	"Sergeant 2 Stars",
	"Sergeant 3 Stars",
	"Staff Sergeant",
	"Staff Sergeant 1 Star",
	"Staff Sergeant 2 Stars",
	"Gunnery Sergeant",
	"Gunnery Sergeant 1 Star",
	"Gunnery Sergeant 2 Star",
	"Master Sergeant",
	"Master Sergeant 1 Star",
	"Master Sergeant 2 Stars",
	"First Sergeant",
	"First Sergeant 1 Star",
	"First Sergeant 2 Stars",
	"Master Gunnery Sergeant",
	"Master Gunnery Sergeant 1 Star",
	"Master Gunnery Sergeant 2 Stars",
	"Sergeant Major",
	"Sergeant Major 1 Star",
	"Sergeant Major 2 Star",
	"Warrant Officer One",
	"Chief Warrant Officer Two",
	"Chief Warrant Officer Three",
	"Chief Warrant Officer Four",
	"Chief Warrant Officer Five",
	"Second Lieutenant",
	"First Lieutenant",
	"Captain",
	"Major",
	"Lt. Colonel",
	"Colonel"
}
new rangaxp[47] = {
	0,
	2,
	3,
	4,
	5,
	6,
	7,
	8,
	9,
	10,
	11,
	12,
	13,
	14,
	15,
	16,
	17,
	18,
	19,
	20,
	3700,
	4000,
	4300,
	4700,
	5100,
	5500,
	5900,
	6300,
	6700,
	7100,
	7600,
	8100,
	8600,
	9100,
	9600,
	10500,
	12000,
	13700,
	15800,
	18000,
	20800,
	23400,
	28200,
	32000,
	36200,
	40000
}

public DeathMsg()
{
	new kid = read_data(1);
	new vid = read_data(2);
	
	if(is_user_alive(kid) && is_user_connected(vid) && get_user_team(kid) != get_user_team(vid))
	{
		zabojstwa[kid]++;
	}
}

Jest to przerobiony plugin bf3 rangi.

 

 

Proszę o pomoc i za jej udzielenie nagradzam plusami


  • +
  • -
  • 0

#2 dasiek

    Nie wiem, nie znam się, nie orientuję się, zarobiony jestem.

  • Junior Admin

Reputacja: 2 077
Godlike

  • Postów:5 706
  • Imię:Adaś
  • Lokalizacja:No teraz trochę dalej od WWy
Offline

Napisano 01.08.2014 14:37

Automatyczna wiadomość


Ten temat został przeniesiony z forum

AMX Mod XPytania

do

Scripting AMXXPytania
  • +
  • -
  • 0

#3 Niide

    *** it I'm done

  • Użytkownik

Reputacja: 86
Zaawansowany

  • Postów:216
  • Imię:Paweł
  • Lokalizacja:Holandia
Offline

Napisano 01.08.2014 14:39

Nie rozumiem zbytnio jak Ci pomóc. Nie podałeś całego kodu więc trudno będzie coś zrobić... Widzę w tym kodzie jedną rzecze do poprawy.

 

formatex(vaultdata,24,"%s",ranganum[id])

 

O ile się nie mylę to ranganum[id] przechowuje cyfrę, nie powinno być więc %d?


sharkowy (01.08.2014 15:15):
ranganum przechowuje znaki, więc %s

  • +
  • -
  • 1

kP8HWV.png


#4 GoldenKill

    Guru

  • Autor tematu
  • Power User

Reputacja: 507
Wszechwiedzący

  • Postów:792
  • Steam:steam
  • Imię:Damian
  • Lokalizacja:Trzebnica
Offline

Napisano 01.08.2014 14:52

Niby zapisuje jak dodałem %s, ale jak masz np Zabójstwa 3/4 i range Szeregowy, zmienisz mapę to masz 3/5 zabójstw i rangę Starszy Szeregowy, awansuje cię automatycznie 


sharkowy (01.08.2014 15:16):
Bo expa rang nie zapisujesz? xD

  • +
  • -
  • 0

#5 GwynBleidD

    Godlike

  • Przyjaciel

Reputacja: 1 869
Godlike

  • Postów:3 066
  • Steam:steam
  • Lokalizacja:Przemyśl
Offline

Napisano 01.08.2014 18:32

Od razu daj cały kod, daj cały kod... A po co?

1. Podaj pełną definicję zmiennej/tablicy ranganum i co do niej zapisujesz.
2. Skoro ranganum ma 1 wymiar 47 to powiedz mi dlaczego odwołujesz się do komórek w niej po wartości id? No chyba, że to nie jest ID gracza tylko bóg wie czego, więc poinformuj nas łaskawie co to ID znaczy.
3.
	formatex(vaultdata,24,"%s",ranganum[id])
	ranganum[id] = str_to_num(vaultdata);
W jednym miejscu odwołujesz się do ranganum, jakby przechowywało napisy, w drugim jakby przechowywało liczby. Jeśli w ranganum zapisujesz ID rangi, którą aktualnie ktoś posiada (albo jakąś inną wartość liczbową), to powinieneś mieć:
	formatex(vaultdata,24,"%d",ranganum[id])
Jeśli przechowujesz jakiś napis, a tablica ma 2 wymiary, to:
	ranganum[id] = str_to_num(vaultdata);
nie ma sensu...
  • +
  • -
  • 2

NIE pomagam na PW. Nie trudź się, na zlecenia nie odpiszę... Od pomagania jest forum.
NIE zaglądam w tematy wysłane na PW. Jeśli są na forum to prędzej czy później je przeczytam. Jeśli mam co w nich odpisać, to odpiszę.
 
1988650.png?theme=dark


#6 GoldenKill

    Guru

  • Autor tematu
  • Power User

Reputacja: 507
Wszechwiedzący

  • Postów:792
  • Steam:steam
  • Imię:Damian
  • Lokalizacja:Trzebnica
Offline

Napisano 01.08.2014 19:45

W ranganum przechowuje exp gracza i range. Zmieniłem %s na %d i usunąłem to

ranganum[id] = str_to_num(vaultdata);

  • +
  • -
  • 0

#7 GwynBleidD

    Godlike

  • Przyjaciel

Reputacja: 1 869
Godlike

  • Postów:3 066
  • Steam:steam
  • Lokalizacja:Przemyśl
Offline

Napisano 01.08.2014 21:36

Boże... widzisz i nie grzmisz...

Czyli doprowadziłeś do kompletnie odwrotnej sytuacji, teraz przy odczycie traktujesz zmienną jak string, a przy zapisie jak liczbę...

I NADAL się nie dowiedzieliśmy W JAKIEJ POSTACI przechowujesz w tej tablicy dane! Jako string czy jako liczbę?
  • +
  • -
  • 1

NIE pomagam na PW. Nie trudź się, na zlecenia nie odpiszę... Od pomagania jest forum.
NIE zaglądam w tematy wysłane na PW. Jeśli są na forum to prędzej czy później je przeczytam. Jeśli mam co w nich odpisać, to odpiszę.
 
1988650.png?theme=dark


#8 Niide

    *** it I'm done

  • Użytkownik

Reputacja: 86
Zaawansowany

  • Postów:216
  • Imię:Paweł
  • Lokalizacja:Holandia
Offline

Napisano 01.08.2014 22:04

Boże... widzisz i nie grzmisz...

Czyli doprowadziłeś do kompletnie odwrotnej sytuacji, teraz przy odczycie traktujesz zmienną jak string, a przy zapisie jak liczbę...

I NADAL się nie dowiedzieliśmy W JAKIEJ POSTACI przechowujesz w tej tablicy dane! Jako string czy jako liczbę?

 

Dlatego też każdy prosił żeby podał resztę kodu... Bardzo często ludzie kręcą i kręcą, a nadal nie wiadomo o co chodzi. Dokładnie jak w tym wypadku.


  • +
  • -
  • 1

kP8HWV.png


#9 GoldenKill

    Guru

  • Autor tematu
  • Power User

Reputacja: 507
Wszechwiedzący

  • Postów:792
  • Steam:steam
  • Imię:Damian
  • Lokalizacja:Trzebnica
Offline

Napisano 01.08.2014 22:09

Macie cały kod -.-

#include <amxmodx>
#include <amxmisc>
#include <csx>
#include <hamsandwich>
#include <fun>
#include <codmod>
#include <colorchat>
#include <nvault>

new const gNazwaPluginu[] = "Battlefield 3 Rank";
new const gWersjaPluginu[] = "0.1";
new const gAutorPluginu[] = "MisieQ";
new const gPrefixPluginu[] = "Rank";

new g_ran_spr

new wymagane_zabojstwa[33];
new zabojstwa[33];

new obrazenia[33];

new ranganum[47];
new ranga[][] = {
	"Brak",
	"Private First Class",
	"Private First Class 1",
	"Private First Class 2",
	"Private First Class 3",
	"Lance Corporal",
	"Lance Corporal 1 Star",
	"Lance Corporal 2 Stars",
	"Lance Corporal 3 Stars",
	"Corporal",
	"Corporal 1 Star",
	"Corporal 2 Stars",
	"Corporal 3 Stars",
	"Sergeant",
	"Sergeant 1 Star",
	"Sergeant 2 Stars",
	"Sergeant 3 Stars",
	"Staff Sergeant",
	"Staff Sergeant 1 Star",
	"Staff Sergeant 2 Stars",
	"Gunnery Sergeant",
	"Gunnery Sergeant 1 Star",
	"Gunnery Sergeant 2 Star",
	"Master Sergeant",
	"Master Sergeant 1 Star",
	"Master Sergeant 2 Stars",
	"First Sergeant",
	"First Sergeant 1 Star",
	"First Sergeant 2 Stars",
	"Master Gunnery Sergeant",
	"Master Gunnery Sergeant 1 Star",
	"Master Gunnery Sergeant 2 Stars",
	"Sergeant Major",
	"Sergeant Major 1 Star",
	"Sergeant Major 2 Star",
	"Warrant Officer One",
	"Chief Warrant Officer Two",
	"Chief Warrant Officer Three",
	"Chief Warrant Officer Four",
	"Chief Warrant Officer Five",
	"Second Lieutenant",
	"First Lieutenant",
	"Captain",
	"Major",
	"Lt. Colonel",
	"Colonel"
}
new rangaxp[47] = {
	0,
	2,
	3,
	4,
	5,
	6,
	7,
	8,
	9,
	10,
	11,
	12,
	13,
	14,
	15,
	16,
	17,
	18,
	19,
	20,
	3700,
	4000,
	4300,
	4700,
	5100,
	5500,
	5900,
	6300,
	6700,
	7100,
	7600,
	8100,
	8600,
	9100,
	9600,
	10500,
	12000,
	13700,
	15800,
	18000,
	20800,
	23400,
	28200,
	32000,
	36200,
	40000
}

public plugin_init()
{
	register_plugin(gNazwaPluginu, gWersjaPluginu, gAutorPluginu);
	
	register_event( "ResetHUD", "eventUpdateStatus", "be");
	register_event( "StatusValue", "eventUpdateStatus", "be", "1=1"	,"2=0");
	register_event("DeathMsg", "DeathMsg", "a");
	RegisterHam(Ham_Spawn, "player", "Odrodzenie", 1);
	RegisterHam(Ham_TakeDamage, "player", "TakeDamage");
	
	g_ran_spr = nvault_open("rangi")
}

public plugin_end() nvault_close(g_ran_spr);

public client_connect(id)
{	
	LoadRangi(id)
}

public client_disconnect(id){
	SaveRangi(id)
}

public Odrodzenie(id)
{
	if(!ranganum[id])
	{
		ranganum[id] = 1;
		wymagane_zabojstwa[id] = rangaxp[ranganum[id]]
	}
	else
	{
		if(zabojstwa[id] >= wymagane_zabojstwa[id])
		{
			ranganum[id]++;
			wymagane_zabojstwa[id] = rangaxp[ranganum[id]]
			ColorChat(id, GREEN, "[COD MW 3]^x01 Awans !^x01 Nowa Ranga :^x03 %s", ranga[ranganum[id]]);
		}
	}	
	switch(ranganum[id])
	{
		case 0: return 0
			case 1: return 0
			case 2: set_user_health(id, get_user_health(id) + 1);
			case 3: set_user_health(id, get_user_health(id) + 2);
			case 4: set_user_health(id, get_user_health(id) + 3);
			case 5: set_user_health(id, get_user_health(id) + 4);
			case 6: set_user_health(id, get_user_health(id) + 5);
			case 7: set_user_health(id, get_user_health(id) + 6);
			case 8: set_user_health(id, get_user_health(id) + 7);
			case 9: set_user_health(id, get_user_health(id) + 8);
			case 10: set_user_health(id, get_user_health(id) + 9);
			case 11: set_user_health(id, get_user_health(id) + 10);
			case 12..21: obrazenia[id] = ranganum[id]-11;
		}
	return 0;
}

public DeathMsg()
{
	new kid = read_data(1);
	new vid = read_data(2);
	
	if(is_user_alive(kid) && is_user_connected(vid) && get_user_team(kid) != get_user_team(vid))
	{
		zabojstwa[kid]++;
	}
}

public eventUpdateStatus(id)
{
	if(is_user_bot(id))
		return;
	
	if(is_user_alive(id))
	{		
		showStatus(id, "[%s] Zabojstwa: %d/%d  Ranga: %s",gPrefixPluginu, zabojstwa[id], rangaxp[ranganum[id]], ranga[ranganum[id]]);
	} 	
}

stock showStatus(id, const szStatus[], ...)
{
	new szBuffer[128];
	vformat(szBuffer, 127, szStatus, 3);
	
	static msgStatusText = 0;
	
	if(!msgStatusText)
		msgStatusText = get_user_msgid("StatusText");
	
	message_begin(MSG_ONE, msgStatusText, _, id);
	write_byte(0);
	write_string(szBuffer);
	message_end();
}

public TakeDamage(this, idinflictor, idattacker, Float:damage, damagebits)
{
	if(!is_user_connected(idattacker))
		return HAM_IGNORED;	
	
	cod_inflict_damage(idattacker, this, float(obrazenia[idattacker]), 0.0, idinflictor, damagebits);
	
	return HAM_IGNORED;
}

public SaveRangi(id)
{
	new name[32]
	get_user_name(id,name,31)
	new vaultkey[40],vaultdata[25]
	formatex(vaultkey,39,"%s-RAN",name);
	formatex(vaultdata,24,"%d",ranganum[id])
	nvault_set(g_ran_spr,vaultkey,vaultdata);
}

public LoadRangi(id)
{
	new name[32]
	get_user_name(id,name,31)
	new vaultkey[40],vaultdata[25]
	formatex(vaultkey,39,"%s-RAN",name);
	nvault_get(g_ran_spr, vaultkey, vaultdata,24);
}

  • +
  • -
  • -2

#10 GwynBleidD

    Godlike

  • Przyjaciel

Reputacja: 1 869
Godlike

  • Postów:3 066
  • Steam:steam
  • Lokalizacja:Przemyśl
Offline

Napisano 01.08.2014 22:44

Dlatego też każdy prosił żeby podał resztę kodu... Bardzo często ludzie kręcą i kręcą, a nadal nie wiadomo o co chodzi. Dokładnie jak w tym wypadku.


A co ma piernik do wiatraka? Owszem, jeśli poda mi ktoś gotowy kod to mogę mu przesłać po prostu kod poprawiony, który już musi działać... Ale nie do tego służy ten dział, bo w ten sposób zadający pytanie nie zrozumie w czym był problem...

Wracając do problemu: przywróć w funkcji LoadRangi spowrotem linię, którą usunąłeś i wszystko będzie działać jak należy. Możesz też zmienić wielkość tablicy ranganum na 33, ale to działania pluginu nie zmieni, jedynie pozbędziesz się kilku niepotrzebnie zadeklarowanych pól tablicy, co oszczędzi jakieś... 56 bajtów pamięci ram ;)
  • +
  • -
  • 1

NIE pomagam na PW. Nie trudź się, na zlecenia nie odpiszę... Od pomagania jest forum.
NIE zaglądam w tematy wysłane na PW. Jeśli są na forum to prędzej czy później je przeczytam. Jeśli mam co w nich odpisać, to odpiszę.
 
1988650.png?theme=dark


#11 GoldenKill

    Guru

  • Autor tematu
  • Power User

Reputacja: 507
Wszechwiedzący

  • Postów:792
  • Steam:steam
  • Imię:Damian
  • Lokalizacja:Trzebnica
Offline

Napisano 01.08.2014 22:54

Właśnie miałem tak i sprawdzałem to to się działo, sprawdzałem z %s i %d

 


Niby zapisuje jak dodałem %s, ale jak masz np Zabójstwa 3/4 i range Szeregowy, zmienisz mapę to masz 3/5 zabójstw i rangę Starszy Szeregowy, awansuje cię automatycznie 

 


  • +
  • -
  • 0

#12 Niide

    *** it I'm done

  • Użytkownik

Reputacja: 86
Zaawansowany

  • Postów:216
  • Imię:Paweł
  • Lokalizacja:Holandia
Offline

Napisano 02.08.2014 12:23   Najlepsza odpowiedź

Według mnie problem tkwi tutaj:

if(!ranganum[id])
	{
		ranganum[id] = 1;
		wymagane_zabojstwa[id] = rangaxp[ranganum[id]]
	}
	else
	{
		if(zabojstwa[id] >= wymagane_zabojstwa[id])
		{
			ranganum[id]++;
			wymagane_zabojstwa[id] = rangaxp[ranganum[id]]
			ColorChat(id, GREEN, "[COD MW 3]^x01 Awans !^x01 Nowa Ranga :^x03 %s", ranga[ranganum[id]]);
		}
	}

Jeżeli ktoś ma rangnum równej 0, daje mu rangum = 1 i ustawia mu wymaganie zabójstwa, okej. Tutaj jest git, ale... Jeżeli ktośma rangnum równej ilości 1 lub więcej, nie zmienia się wartość wymagane_zabojstwa, czyli wymagane_zabojstwa zostają równe 0 (ponieważ nigdzie indziej w kodzie nie podajesz żadnej wartości dla tej zmiennej i zostaje mu wartość, którą podałeś przy "new wymagane_zabojsta[33]", czyli 0). W każdym wypadku zabójstwa będą równe lub większe niż wymagane_zabójstwa i będzie dodawało rangę.

 

Spróbuj do zapisu dodać też wymagane_zabójstwa[id] i zobacz czy coś to pomoże.


Użytkownik Niide edytował ten post 02.08.2014 12:25

  • +
  • -
  • 1

kP8HWV.png


#13 GoldenKill

    Guru

  • Autor tematu
  • Power User

Reputacja: 507
Wszechwiedzący

  • Postów:792
  • Steam:steam
  • Imię:Damian
  • Lokalizacja:Trzebnica
Offline

Napisano 02.08.2014 14:25

Dalej to samo :(


  • +
  • -
  • 0





Również z jednym lub większą ilością słów kluczowych:

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

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