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

Plugin do DModa


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

#1 Vorian

    Życzliwy

  • Użytkownik

Reputacja: 0
Nowy

  • Postów:21
  • Lokalizacja:Augustów
Offline

Napisano 05.10.2009 16:35

Otóż w związku ze zmianami na serwerze na którym gram postanowiłem dodać coś od siebie. To że te dodanie na razie mi nie wychodzi to inna sprawa ^^.
Mam taki kod:

#include <amxmodx>
#include <amxmisc>
#include <fun>
#include <cstrike>

#define PLUGIN "OFIARA"
#define VERSION "1.0"
#define AUTHOR "Vorian"


new ofiara_koszt

public plugin_init() {
	register_plugin(PLUGIN, VERSION, AUTHOR)
	;register_cvar("ofiara_koszt","16000");
	register_clcmd("say /ofiara","hp");
	
}
public hp(id){
	if(!is_user_alive(id)){
		client_print(id, print_chat,"[BARBARZYNCA] Nie mozesz z tego korzystac bo jestes nieżywy!")
		return PLUGIN_HANDLED
	}
	
	if(get_user_health(id)>=200)){
		client_print(id,print_chat, "Juz z tego korzystałes!")
		return PLUGIN_HANDLED
		
	} 
	if(player_class[id]==Paladyn)
		client_print(id,print_chat, "Nie jestes barbarzynca nie mozesz uzyc tej umiejetnosci!"
	return PLUGIN_HANDLED
}
if(player_class[id]==Lowca)
	client_print(id,print_chat, "Nie jestes barbarzynca nie mozesz uzyc tej umiejetnosci!"
return PLUGIN_HANDLED 
}
if(player_class[id]==Ninja)
client_print(id,print_chat, "Nie jestes barbarzynca nie mozesz uzyc tej umiejetnosci!"
return PLUGIN_HANDLED 
}
if(player_class[id]==Zabojca)
client_print(id,print_chat, "Nie jestes barbarzynca nie mozesz uzyc tej umiejetnosci!"
return PLUGIN_HANDLED
}

if(player_class[id]==Nekromanta)
client_print(id,print_chat, "Nie jestes barbarzynca nie mozesz uzyc tej umiejetnosci!"
return PLUGIN_HANDLED 
}
}


set_user_armor(id, 500)
set_user_health(id, 200)
set_user_frags(id, 0)
cs_set_user_money(id, cs_get_user_money(id)-get_pcvar_num(ofiara_koszt))
return PLUGIN_HANDLED

set_hudmessage(255, 0, 0, -1.0, -1.0, 0, 6.0, 12.0)
show_hudmessage(id, "ZLOZYLES OFIARE Z FRAGOW I ZLOTA")
return PLUGIN_HANDLED

I takie błędy:

Error: Invalid expression, assumed zero on line 25
Warning: Unreachable code on line 30
Error: Undefined symbol "player_class" on line 30
Warning: Expression has no effect on line 30
Error: Expected token: ";", but found "]" on line 30
Error: Invalid expression, assumed zero on line 30
Error: Too many error messages on one line on line 30

Compilation aborted.
5 Errors.
Could not locate output file C:Program FilesAMX Mod XamxxstudioUntitled.amx (compile failed).

Jakie mam problemy? Nie wiem jak dodać zmienną (dobrze to nazywam?) player_class do kodu, (chyba nie wiem... coś mi świta ale nie chcę strzelać) w linii 30, nie widzę błędu w 25 (skopiowałem prosto tą linię z tutka z forum!).
Czyli większość errorów skupia się na linii 30. Proszę o pomoc ew. poprawienie kodu!


EDIT: A jednak nie ^^. Wywaliłem tą kwestię z paladynem i co?

Warning: Loose indentation on line 34
Error: Expected token: ",", but found "return" on line 34
Warning: Loose indentation on line 35
Error: Invalid function or declaration on line 37
Error: Invalid function or declaration on line 39
Error: Invalid function or declaration on line 41
Error: Invalid function or declaration on line 43
Error: Invalid function or declaration on line 45
Error: Invalid function or declaration on line 47
Error: Invalid function or declaration on line 50
Error: Invalid function or declaration on line 52
Error: Symbol already defined: "cs_set_weapon_ammo" on line 56
Error: Invalid function or declaration on line 61
Error: Symbol already defined: "set_hudmessage" on line 63
Error: Invalid function or declaration on line 65
Error: Invalid expression, assumed zero on line 69
Warning: Expression has no effect on line 69
Error: Invalid expression, assumed zero on line 69
Warning: Expression has no effect on line 69
Error: Expected token: ";", but found ")" on line 69
Error: Too many error messages on one line on line 69
Oraz linijki od 69...

public lot(id){
get_user_weapon(id,>10,>10)
if("user_has_weapon(id,CSW_KNIFE,setweapon=-1) 
set_user_gravity(id, gravity = 0.4)

  • +
  • -
  • 0

#2 Vertricus

    Godlike

  • Przyjaciel

Reputacja: 426
Wszechobecny

  • Postów:1 549
  • Lokalizacja:.
Offline

Napisano 05.10.2009 17:26

No... zauważ że nie masz zadeklarowanego player_class ale nawet jakbyś miał to z diablo by to nie współgrało ;) Lepiej dopisz swój kod do kodu diablo ^.^
  • +
  • -
  • 0

#3 Vorian

    Życzliwy

  • Autor tematu
  • Użytkownik

Reputacja: 0
Nowy

  • Postów:21
  • Lokalizacja:Augustów
Offline

Napisano 05.10.2009 18:23

Dobra z tamtym sobie poradziłem... teraz coś innego. Otóż umieściłem newki tam gdzie trzeba, 'registery' też ale nadal kompilator widzi pewne błędy których ja nie mogę znaleźć : .
Cały kod (oprócz register itp.) wrzuciłem na koniec kodu diablo...


Warning: Loose indentation on line 8302
Error: Syntax error in the expression, or invalid function call on line 8304
Warning: Unreachable code on line 8308
Error: Syntax error in the expression, or invalid function call on line 8309
Warning: Unreachable code on line 8312
Error: Syntax error in the expression, or invalid function call on line 8313
Warning: Unreachable code on line 8316
Error: Syntax error in the expression, or invalid function call on line 8317
Error: Expected token: ",", but found ";" on line 8317
Warning: Expression has no effect on line 8317
Error: Expected token: ";", but found ")" on line 8317
Error: Too many error messages on one line on line 8317

Tu ten kod... wiadomo pierwsza linijka = 8302 ostatnia 8317.


if(player_class[id]==paladyn
client_print(id, print_chat,"Musisz byc barbarzynca aby tego uzyc.")
return PLUGIN_HANDLED


if(player_class[id]==Lowca
client_print(id, print_chat,"Musisz byc barbarzynca aby tego uzyc.")
return PLUGIN_HANDLED

if(player_class[id]==ninja
client_print(id, print_chat,"Musisz byc barbarzynca aby tego uzyc.")
return PLUGIN_HANDLED

if(player_class[id]==zabojca
client_print(id, print_chat;"Nie jestes barbarzynca!")
return PLUGIN_HANDLED

Co raz próbuję inaczej i co raz mi inne błędy wyskakują.
Naprawdę będę wdzięczny jeśli ktoś mi to poprawi i wytknie co jest źle :] .
  • +
  • -
  • 0

#4 Miczu

    Godlike

  • Przyjaciel

Reputacja: 657
Wszechmogący

  • Postów:2 862
Offline

Napisano 05.10.2009 18:58

Jak nie zamykasz nawiasow w if'ie to sie nie dziw xD

tak samo jak z nawiasami nie dales tez rozpoczecia bloku kodu (czyt. klamry "{" )
  • +
  • -
  • 0

#5 Vorian

    Życzliwy

  • Autor tematu
  • Użytkownik

Reputacja: 0
Nowy

  • Postów:21
  • Lokalizacja:Augustów
Offline

Napisano 05.10.2009 19:05

Czyli wstawić klamrę przed if o po handled?
Tzn. coś takiego:

{
if(player_class[id]==paladyn
client_print(id, print_chat,"Musisz byc barbarzynca aby tego uzyc.")
return PLUGIN_HANDLED 
}

Sam coś nad tym popracowałem i coś takiego mam ^^:

if(player_class[id]==paladyn)
		client_print(id, print_chat,"[BARBARZYNCA] Nie mozesz z tego korzystac bo jestes nieżywy!")
	
	
	
	if(player_class[id]==Lowca)
		client_print(id, print_chat,"[BARBARZYNCA] Nie mozesz z tego korzystac bo jestes nieżywy!")
	
	
	if(player_class[id]==ninja)
		client_print(id, print_chat,"[BARBARZYNCA] Nie mozesz z tego korzystac bo jestes nieżywy!")
	
	
	if(player_class[id]==zabojca)
		client_print(id, print_chat,"[BARBARZYNCA] Nie mozesz z tego korzystac bo jestes nieżywy!")
	
	
	if(player_class[id]==nekromanta)
		client_print(id, print_chat,"[BARBARZYNCA] Nie mozesz z tego korzystac bo jestes nieżywy!")
	return PLUGIN_HANDLED
	
	
	if(player_class[id]==barbarzynca)
		set_user_armor(id, 500)
	set_user_health(id, 200)
	set_user_frags(id, 0)
	cs_set_user_money(id, cs_get_user_money(id)-get_pcvar_num(ofiara_koszt))
	set_hudmessage(255, 0, 0, -1.0, -1.0, 0, 6.0, 12.0)
	show_hudmessage(id, "ZLOZYLES OFIARE Z FRAGOW I ZLOTA")
	
	
	public lot(id){
		if(user_has_weapon(id,CSW_KNIFE,1))
			set_user_gravity(id,0.4)
	}


Error: Syntax error in the expression, or invalid function call on line 8303
Error: Syntax error in the expression, or invalid function call on line 8308
Error: Syntax error in the expression, or invalid function call on line 8312
Error: Syntax error in the expression, or invalid function call on line 8316
Error: Syntax error in the expression, or invalid function call on line 8320
Warning: Unreachable code on line 8325
Error: Syntax error in the expression, or invalid function call on line 8325
Error: Invalid expression, assumed zero on line 8334
Error: Invalid function call, not a valid address on line 8334
Warning: Expression has no effect on line 8334
Error: Expected token: ";", but found ")" on line 8334
Error: Too many error messages on one line on line 8334

Pierwsza linijka 8303 ostatnia 8337. Wybaczcie że tak zawracam głowę ale to mój pierwszy dzień :D.
  • +
  • -
  • 0

#6 Miczu

    Godlike

  • Przyjaciel

Reputacja: 657
Wszechmogący

  • Postów:2 862
Offline

Napisano 05.10.2009 19:07

Umm :coto:

Znasz podstawy(conajmniej) jakiekolwiek jezyka programowania?
  • +
  • -
  • 0

#7 Vorian

    Życzliwy

  • Autor tematu
  • Użytkownik

Reputacja: 0
Nowy

  • Postów:21
  • Lokalizacja:Augustów
Offline

Napisano 05.10.2009 19:14

Nie programowaniu nie ;]. Dopiero od niedawna zaczynam się tego wszystkiego uczyć na równi z C#.
Tzn. c# podstawy znam, PAWN dopiero dziś od niedawna ;].
A co jest aż tak tragicznie? Muszę jeszcze przyznać że czytałem jeden tutek który określał NAJPROSTSZY plugin więc większość rzeczy które tu robię, robię metodą prób i błędów... zwłaszcza modyfikowanie Diablo ;].
Jeśli możesz to po prostu napisz mi co źle robię (i to pokaż jeśli możesz ;]) a Ja sobie pójdę ^^.
  • +
  • -
  • 0

#8 Miczu

    Godlike

  • Przyjaciel

Reputacja: 657
Wszechmogący

  • Postów:2 862
Offline

Napisano 05.10.2009 20:12

Dobra zacznimy od tego ze nie rozumiesz logiki idacej za podstawowym warunkiem if - szczegolnie, ze wytknolem 2 a zrobiles 1 i to calkiem na 'wspak'.

Nie zamykajac nawiasu warunku if mieszasz mu co ma zrobic z warunkiem kiedy ma to robic (dla kompilatora to ty jestes "glupi" a nie on ze nawet nie wiesz co chcesz od niego).

Druga sprawa to klamerki {} - one sprawiaja, ze kompilator bierze niejako wiecej niz 1 linie kodu za 1 polecenie (zapewne nie dokonca to prawda ale zobrazuje ci to problem co zrobiles).

Warunek "if" sprawdza warunek i wykonuje nastepna funkcje jesli jest spelniony.
Wezmy wczesniejszy fragmen kodu z pominieciem zlych klamerek:
if(player_class[id]==Lowca) 
    client_print(id,print_chat, "Nie jestes barbarzynca nie mozesz uzyc tej umiejetnosci!" 
return PLUGIN_HANDLED 

if(player_class[id]==Ninja) 
client_print(id,print_chat, "Nie jestes barbarzynca nie mozesz uzyc tej umiejetnosci!" 
return PLUGIN_HANDLED

Program sprawdza czy klasa to jest lowca, jesli tak to wykonuje kolejny kod czyli printa, jak nie idzie dalej, a co widzi dalej? returna czyli nigdy nic za tym sie nie wykona, a na pewno chciales by plug przestal dalej wykonywac sie gdy juz znajdzie wlasciwa klase. W celu podpiecia wiekszej ilosci lini stosujemy klamry i to wygladac powinno tak:

if(player_class[id]==Lowca){ 
   client_print(id,print_chat, "Nie jestes barbarzynca nie mozesz uzyc tej umiejetnosci!" 
   return PLUGIN_HANDLED 
} 
if(player_class[id]==Ninja) 
{
   client_print(id,print_chat, "Nie jestes barbarzynca nie mozesz uzyc tej umiejetnosci!" 
   return PLUGIN_HANDLED
}

Sam kompilator nie wywali ci bledu jak zrobisz(chyba ze ma troche inteligencji):
{
if(player_class[id]==Ninja) 
client_print(id,print_chat, "Nie jestes barbarzynca nie mozesz uzyc tej umiejetnosci!" 
return PLUGIN_HANDLED
}
Ale co wynika z tego zapisu? Wchodzimy w blok kodu [kropka, idziemy dalej]. Mamy warunek if - sprawdzamy go. Jesli jest spelniony to print, jesli nie to dalej. Return konczymy funkcje. Czyli dokladnie to samo jak bez klamer, tylko masz wiekszy balagan.
  • +
  • -
  • 0

#9 Vertricus

    Godlike

  • Przyjaciel

Reputacja: 426
Wszechobecny

  • Postów:1 549
  • Lokalizacja:.
Offline

Napisano 05.10.2009 21:45

Zamiast wypisywać wszystkie klasy możesz zrobić:
if (player_class[id] != Barbarzynca)
{
client_print(id,print_chat, "Nie jestes barbarzynca nie mozesz uzyc tej umiejetnosci!" 
}
else
{
//kod jeśli spełnia warunek czyli jest
}


Jak już na siłę chcesz sprawdzać za każdym razem klasę:
to
pierwsze
if
następne
else if

[ Dodano: 05-10-2009, 22:50 ]

    public lot(id){
        if(user_has_weapon(id,CSW_KNIFE,1))
            set_user_gravity(id,0.4)
    }


Jeszcze odnośnie tego będzie to działać do wywołania funkcji set_gravitychange(id)
gdyż na nowo ustawi gravity.
  • +
  • -
  • 0

#10 Vorian

    Życzliwy

  • Autor tematu
  • Użytkownik

Reputacja: 0
Nowy

  • Postów:21
  • Lokalizacja:Augustów
Offline

Napisano 06.10.2009 15:49

Wielkie dzięki za pomoc, leci pomógł ;].
  • +
  • -
  • 0




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

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