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
CoD Stary

Dwa przedmioty na raz

CoD Stary

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

#1 kiver

    Profesjonalista

  • Użytkownik

Reputacja: 22
Życzliwy

  • Postów:161
  • Lokalizacja:Jarocin
Offline

Napisano 30.06.2011 12:21

*
Popularny

Na początek musimy dodać nową tablicę.

Pod tabelą z opisami przedmiotów (tymi zwykłymi) dodajemy :

new informacje_itemu[33][2];
new const nazwy_itemow[][] = {"Brak",
"Jakis Przedmiot"
}
new const opisy_itemow[][] = {"Zabij kogos aby dostac przedmiot",
"Jakas moc"
}



//=====================================================================================//

Należy się do tego jak mamy dodaną wytrzymałość przedmiotu

Szukamy :
new wytrzymalosc_itemu[33];

Dodajemy pod :
new wytrzymalosc_itemu2[33];


if(informacje_przedmiotu_gracza[id][0]) {
if(wytrzymalosc_itemu[id] > 0) {
wytrzymalosc_itemu[id]-=10;
}
if(wytrzymalosc_itemu[id] > 0) {
client_print(id, print_chat, "[COD:MW] Zniszczenia przedmiotu: %i/100.", wytrzymalosc_itemu[id]);
}
else {
client_print(id, print_chat, "[COD:MW] Przedmiot: %s, zostal calkowicie zniszczony.", nazwy_przedmiotow[informacje_przedmiotu_gracza[id][0]]);
UsunPrzedmiot(id);
}
}


I pod to dodajemy to :

if(informacje_itemu[id][0]) {
if(wytrzymalosc_itemu2[id] > 0) {
wytrzymalosc_itemu2[id]-=10;
}
if(wytrzymalosc_itemu2[id] > 0) {
client_print(id, print_chat, "[COD:MW] Zniszczenia przedmiotu: %i/100.", wytrzymalosc_itemu2[id]);
}
else {
client_print(id, print_chat, "[COD:MW] Przedmiot: %s, zostal calkowicie zniszczony.", nazwy_itemow[informacje_itemu[id][0]]);
UsunPrzedmiot2(id);
}
}


//=====================================================================================//

w public Death(id) szukamy :
if(!informacje_przedmiotu_gracza[attacker][0])
DajPrzedmiot(attacker, random_num(1, sizeof nazwy_przedmiotow-1));


I pod to dodajemy to :
if(!informacje_itemu[attacker][0])
DajPrzedmiot2(attacker, random_num(1, sizeof nazwy_itemow-1));


Następnie pod :
public WyrzucPrzedmiot(id)
{
if(informacje_przedmiotu_gracza[id][0])
{
client_print(id, print_chat, "Wyrzuciles %s.", nazwy_przedmiotow[informacje_przedmiotu_gracza[id][0]]);
UsunPrzedmiot(id);
}
else
client_print(id, print_chat, "Nie masz zadnego przedmiotu.", nazwy_przedmiotow[informacje_przedmiotu_gracza[id][0]]);
}


Dodajemy to :

public WyrzucPrzedmiot2(id)
{
if(informacje_itemu[id][0])
{
client_print(id, print_chat, "Wyrzuciles %s.", nazwy_itemow[informacje_itemu[id][0]]);
UsunPrzedmiot2(id);
}
else
client_print(id, print_chat, "Nie masz zadnego przedmiotu.", nazwy_itemow[informacje_itemu[id][0]]);
}


Szukamy public UsunPrzemdiot(id) i za nim dodajemy
public UsunPrzedmiot2(id)
{
informacje_itemu[id][1] = 0;
informacje_itemu[id][0] = 0;
wytrzymalosc_itemu2[id] = 0;
if(is_user_alive(id))
set_user_footsteps(id, 0);
set_rendering(id,kRenderFxGlowShell,0,0,0 ,kRenderTransAlpha, 255);
ZmienUbranie(id, 1);
}


W public client_connect(id) za UsunPrzedmiot(id); dodajemy :
UsunPrzedmiot2(id);

W public client_disconnect(id) za UsunPrzedmiot(id); dodajemy :
UsunPrzedmiot2(id);



Szukamy public DajPrzedmiot(id, przedmiot) i dodajemy za nim :

public DajPrzedmiot2(id, przedmiot)
{
UsunPrzedmiot2(id);
informacje_itemu[id][0] = przedmiot;
client_print(id, print_chat, "Zdobyles %s.", nazwy_itemow[informacje_itemu[id][0]]);

wytrzymalosc_itemu2[id] = 100;
switch(przedmiot)
{
case 1:
{
//w tym przypadku jeśli będą to notatki kapitana
informacje_itemu[id][1] = 3;
}
}
}


Szukamy public OpisPrzedmiotu(id) i dodajemy pod nim :

public OpisPrzedmiotu2(id)
{
new opis_przedmiotu[128];
new losowa_wartosc[3];
num_to_str(informacje_itemu[id][1], losowa_wartosc, 2);
format(opis_przedmiotu, 127, opisy_itemow[informacje_itemu[id][0]]);
replace_all(opis_przedmiotu, 127, "LW", losowa_wartosc);

client_print(id, print_chat, "Przedmiot: %s.", nazwy_itemow[informacje_itemu[id][0]]);
client_print(id, print_chat, "Opis: %s.", opis_przedmiotu);
}


Jeśli mamy dodaną do COD'a wytrzymałość to public PokażInformacje(id) podmieniamy na to :

public PokazInformacje(id) 
{
id -= ZADANIE_POKAZ_INFORMACJE;

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

if(!is_user_alive(id))
{
new target = entity_get_int(id, EV_INT_iuser2);

if(target == 0)
return PLUGIN_CONTINUE;

set_hudmessage(0, 255, 255, 0.02, 0.20, 0, 0.0, 0.3, 0.0, 0.0);
ShowSyncHudMsg(id, SyncHudObj, "[Klasa: %s]^n[Poziom: %i]^n[Doswiadczenie: %i / %i]^n[Przedmiot: %s] (%i%%)^n[Przedmiot2: %s] (%i%%)^n[HP: %i | AP: %i]", nazwy_klas[klasa_gracza[id]], poziom_gracza[id], doswiadczenie_gracza[id], doswiadczenie_poziomu[poziom_gracza[id]],nazwy_przedmiotow[informacje_przedmiotu_gracza[id][0]], wytrzymalosc_itemu[id],nazwy_itemow[informacje_itemu[id][0]], wytrzymalosc_itemu2[id], get_user_health(id), get_user_armor(id));

return PLUGIN_CONTINUE;
}
set_hudmessage(0, 255, 255, 0.02, 0.16, 0, 0.0, 0.3, 0.0, 0.0);
ShowSyncHudMsg(id, SyncHudObj, "[Klasa: %s]^n[Poziom: %i]^n[Doswiadczenie: %i / %i]^n[Przedmiot: %s] (%i%%)^n[Przedmiot2: %s] (%i%%)^n[HP: %i | AP: %i]", nazwy_klas[klasa_gracza[id]], poziom_gracza[id], doswiadczenie_gracza[id], doswiadczenie_poziomu[poziom_gracza[id]],nazwy_przedmiotow[informacje_przedmiotu_gracza[id][0]], wytrzymalosc_itemu[id],nazwy_itemow[informacje_itemu[id][0]], wytrzymalosc_itemu2[id], get_user_health(id), get_user_armor(id));

return PLUGIN_CONTINUE;
}


w public plugin_init() dodajemy
register_clcmd("say /item2", "OpisPrzedmiotu2");
register_clcmd("say /drop2", "WyrzucPrzedmiot2");


//================================================================//
Dodawanie nowego przedmiotu :

Aby dodać przedmiot np. dawanie AK47 na początku rundy robimy tak (tak samo jak dodawanie normalnego itemu tylko że w nowych tabelach):

W :
new const nazwy_itemow[][] dodajemy nazwę naszego przemdiotu

W :
new const opisy_itemow[][]  dodajemy opis naszego przedmiotu 


I teraz w public Odrodzenie(id)

Pod :
if(informacje_przedmiotu_gracza[id][0] == 13)
give_item(id, "weapon_awp");


Dodajemy :

if(informacje_itemu[id][0] == 1)
give_item(id, "weapon_ak47");



//================================================================//

Jeśli chcemy żeby opis i wyrzucanie wyświetlało nam się w 'menu' dodajemy na końcu SMA :

public SprawdzItem(id) 
{
new menu = menu_create("Opis:", "SprawdzItem2");
menu_additem(menu, "\wOpis Przedmiotu nr 1", "1", 0);
menu_additem(menu, "\wOpis Przedmiotu nr 2", "2", 0);

menu_display(id, menu);
return PLUGIN_HANDLED;

}
public SprawdzItem2(id, menu, item)
{
if(item == MENU_EXIT)
{
menu_destroy(menu);
return PLUGIN_CONTINUE;
}
menu_display(id, menu);
switch(item)
{
case 0:
{
OpisPrzedmiotu(id);
}
case 1:
{
OpisPrzedmiotu2(id);
}
}
return PLUGIN_CONTINUE;
}

public WyrzucItem(id){
new mana1=menu_create("Wyrzuc:","WyrzucItem2");

menu_additem(menu, "\wWyrzuc Przedmiot nr 1");
menu_additem(menu, "\wWyrzuc Przedmiot nr 2");

menu_display(id, menu);
return PLUGIN_HANDLED;
}
public WyrzucItem2(id, menu, item){
if(item == MENU_EXIT)
{
menu_destroy(menu);
return PLUGIN_CONTINUE;
}
menu_display(id, menu);
switch(item){
case 0:
{
WyrzucPrzedmiot(id);
}
case 1:
{
WyrzucPrzedmiot2(id);
}
}
return PLUGIN_CONTINUE;
}


I w public plugin_init() zamieniamy :

To :
register_clcmd("say /item", "OpisPrzedmiotu");

Na to :
register_clcmd("say /item", "SprawdzItem");


I to :
register_clcmd("say /item", "WyrzucPrzedmiot");

Na to :
register_clcmd("say /drop", "WyrzucItem");



Jeśli coś nie będzie działało to pisać, bo mogłem coś przeoczyć.

Użytkownik kiver edytował ten post 30.06.2011 17:34

  • +
  • -
  • 9

#2 Gufinsky

    Wszechwiedzący

  • Power User

Reputacja: 267
Wszechwidzący

  • Postów:591
  • Imię:Kuba
  • Lokalizacja:localhost
Offline

Napisano 30.06.2011 16:37

I to :

register_clcmd("say /item", "WyrzucPrzedmiot");

Na to :
register_clcmd("say /item", "WyrzucItem");


Zmień na

I to :
register_clcmd("say /drop", "WyrzucPrzedmiot");

Na to :
register_clcmd("say /drop", "WyrzucItem");


Świetna robota :)
  • +
  • -
  • 0

#3 Luker12

    Zaawansowany

  • Użytkownik

Reputacja: 5
Nowy

  • Postów:99
  • GG:
  • Lokalizacja:Nie musisz wiedzieć
Offline

Napisano 30.06.2011 16:43

Plusik dla ciebie leci.

Pytanie: Czy dałbyś radę ogarnąć to na Nowego Coda?
  • +
  • -
  • 0

Zagrajcie w Klondike


#4 Nomaf

    Wszechpomocny

  • Użytkownik

Reputacja: 157
Profesjonalista

  • Postów:344
  • GG:
  • Imię:Mateusz
  • Lokalizacja:Polska
Offline

Napisano 30.06.2011 17:10

Przecież to jest trochę prowizorycznie zrobione. Po co robić nowe funkcje?
Można to zrobić o wiele prościej. Tak jak teraz zrobiłeś to trzeba robić dwa razy więcej przedmiotów = większe obciążenie serwera = ogólnie mniej rzeczy i konieczność kupna lepszego sprzętu.
Można przecież przechowywać dane w tym: informacje_przedmiotu_gracza[][]. W pierwszym wymiarze przechowujemy index gracza, a w drugim co tylko chcemy (w pierwszym też, ale lepiej nic). Pod "0" mamy informację czy mamy przedmiot czy nie, pod "1" - jego wartość (radzę to zmienić na przedmiot, bo mogą być kłopoty, zmienić można w DajPrzedmiot, gdzie losowana jest liczba, która będzie opisywała, np. ile obrażeń otrzymamy mniej. Jak mamy opis przedmiotu to można czasem spotkać 1/LW. Te LW jest zapisywane właśnie pod "1" Lepiej zmienić). Dodatkowe przedmioty możemy dodać do kolejnych numerów (indexów), np. "2" - drugi przedmiot, czy go mamy czy nie, itd.

Zamiast tego:
if(!informacje_przedmiotu_gracza[attacker][0])                         
DajPrzedmiot(attacker, random_num(1, sizeof nazwy_przedmiotow-1));


możemy dać:
new i = random(1);
if(!informacje_przedmiotu_gracza[attacker][i])
DajPrzedmiot(attacker, random_num(1, sizeof nazwy_przedmiotow-1), i)


Trzeba też zmienić trochę nazwę funkcji DajPrzedmiot na:
public DajPrzedmiot(id, przedmiot, numer)

oraz linjkę:
informacje_przedmiotu_gracza[id][0] = przedmiot;

na:
informacje_przedmiotu_gracza[id][numer] = przedmiot;



Trzeba jeszcze zmienić wiele innych linijek, w których występuje DajPrzedmiot, bo doszedł kolejny parametr oraz funkcję UsunPrzedmiot o nowe linijki:
informacje_przedmiotu_gracza[id][2] = 0;

Jeszcze trzeba dodać lepszy opis przedmiotów, hud itp.


Jakbym o czymś zapomniał to piszcie ;)
To co napisałem to raczej dla zaawansowanych.

Użytkownik Nomaf edytował ten post 30.06.2011 17:41

  • +
  • -
  • 0

#5 kiver

    Profesjonalista

  • Autor tematu
  • Użytkownik

Reputacja: 22
Życzliwy

  • Postów:161
  • Lokalizacja:Jarocin
Offline

Napisano 30.06.2011 17:35

A w moim sposobie tylko kopiuj wklej :P Jedyny minus to tak jak piszesz z tym trzeba robić dwa razy więcej przedmiotów.

//Błąd poprawiony

@Luker12
Można spróbować :P Jak coś z tego wyjdzie to opiszę co i jak

Użytkownik kiver edytował ten post 30.06.2011 17:40

  • +
  • -
  • 0

#6 Nomaf

    Wszechpomocny

  • Użytkownik

Reputacja: 157
Profesjonalista

  • Postów:344
  • GG:
  • Imię:Mateusz
  • Lokalizacja:Polska
Offline

Napisano 30.06.2011 17:37

A u mnie nieskończoność, zmieniając tylko to:
new i = random(1);
  • +
  • -
  • 0

#7 Dwdov

    Profesjonalista

  • Zbanowany

Reputacja: 59
Pomocny

  • Postów:172
  • Imię:Dawid
  • Lokalizacja:Jawor
Offline

Napisano 30.06.2011 18:03


new i = random(1);
if(!informacje_przedmiotu_gracza[attacker][i])
DajPrzedmiot(attacker, random_num(1, sizeof nazwy_przedmiotow-1), i)

No faktycznie genialny sposób, losowo sprawdza index 0 albo 1. Żeby to jakoś działało najlepiej dodać kolejny wymiar do tablicy z itemami (jeżeli chcemy zachować itemy z LW) i przy sprawdzaniu itemów dodać pętle for na dwa indexy itemów. Najlepiej wszystkie ify od razu zmienić na jednego switcha - chyba bardziej optymalne rozwiązanie po co ma sprawdzać po kolei 5000 warunków.

Nie pomagam na PW, tylko na forum.


#8 V3ko

    Guru

  • Power User

Reputacja: 83
Zaawansowany

  • Postów:746
  • Lokalizacja:Stopnica
Offline

Napisano 30.06.2011 18:18

Sposób jest tragiczny :D Osobiście nie polecam, bo dużo paprania, a jak ktoś by pomyślał doszedł by łatwiejszego sposobu ;] Tylko troche szkoda, bo QTM. Peyote miał "Dwa sloty na perki" w swojej ofercie, mogłeś docenić i mieć to, a nie publikować ;)

Użytkownik V3ko edytował ten post 30.06.2011 18:29

  • +
  • -
  • 0

#9 kiver

    Profesjonalista

  • Autor tematu
  • Użytkownik

Reputacja: 22
Życzliwy

  • Postów:161
  • Lokalizacja:Jarocin
Offline

Napisano 30.06.2011 18:33

QTM. Peyote ma bodajże pod nowego CODa :P Więc nic raczej nie stracił :D
  • +
  • -
  • 0

#10 Nomaf

    Wszechpomocny

  • Użytkownik

Reputacja: 157
Profesjonalista

  • Postów:344
  • GG:
  • Imię:Mateusz
  • Lokalizacja:Polska
Offline

Napisano 30.06.2011 18:33

Dawedov, ok, masz rację, ale głównym celem mojej wypowiedzi było tylko uświadomienie, że ten sposób jest beznadziejny.
  • +
  • -
  • 0

#11 sharkowy

    Lokalna anomalia sejsmiczna o nieustalonej genezie.

  • Przyjaciel

Reputacja: 113
Zaawansowany

  • Postów:1 981
Offline

Napisano 30.06.2011 18:55

Jeśli coś nie będzie działało to pisać, bo mogłem coś przeoczyć.


Fakt, mogłeś czegoś nie zauważyć kopiując stąd: [CoD Stary] Problem z mocami u klas - AMXX.pl: Support AMX Mod X

Niedługo pewnie napiszesz poradnik 'Jak dodać questy' :)

Użytkownik RPK. Shark edytował ten post 30.06.2011 19:02

  • +
  • -
  • 0

#12 Night90

    Wszechwidzący

  • Użytkownik

Reputacja: 58
Pomocny

  • Postów:257
  • GG:
  • Steam:steam
  • Imię:Adrian
  • Lokalizacja:Lublin
Offline

Napisano 30.06.2011 19:06

Pewnie już zaczyna kopiować i tworzyć ;P
  • +
  • -
  • 0

b_350_20_323957_202743_F19A15_111111.png
b_350_20_323957_202743_F19A15_111111.png
b_350_20_323957_202743_F19A15_111111.png
b_350_20_323957_202743_F19A15_111111.png

b_350_20_323957_202743_F19A15_111111.png

 


#13 kiver

    Profesjonalista

  • Autor tematu
  • Użytkownik

Reputacja: 22
Życzliwy

  • Postów:161
  • Lokalizacja:Jarocin
Offline

Napisano 01.07.2011 06:36

@RPK. Shark, nic nie zostało skopiowane... Wszystko robiłem sam do swojej sieci, lecz upadła więc postanowiłem podzielić się tym tutaj.. A ty teraz przyczyniłeś się do tego, aby rozpowszechnić tamto SMA, o które tak się bał tamten użytkownik :)

Użytkownik kiver edytował ten post 01.07.2011 08:52

  • +
  • -
  • 0

#14 sharkowy

    Lokalna anomalia sejsmiczna o nieustalonej genezie.

  • Przyjaciel

Reputacja: 113
Zaawansowany

  • Postów:1 981
Offline

Napisano 01.07.2011 11:10

Mówisz, że sam wszystko zrobiłeś... nie wiedziałeś takiej prostej rzeczy 1/x z noza dla danej klasy - AMXX.pl: Support AMX Mod X a potrafisz zrobić 2 itemy na raz i nową statystykę... trochę dziwny skill :)
  • +
  • -
  • 0

#15 kiver

    Profesjonalista

  • Autor tematu
  • Użytkownik

Reputacja: 22
Życzliwy

  • Postów:161
  • Lokalizacja:Jarocin
Offline

Napisano 01.07.2011 12:16

Człowiek się uczy na błędach :) Ktoś też zakładał na forum temat jak zrobić 2 itemy na raz i ktoś podsunął pomysł z skopiowaniem tabeli i utworzeniem nowej.. Więc po metodzie prób i błędów zrobiłem..
  • +
  • -
  • 0

#16 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 04.07.2011 17:00

mam wersje bez 2 tabel. Jest ona szybsza i po prostu mniej pisania. Kiedyś ja rzuciłem pomysł 2 tabel co po chwili namysłu jest - bez sensu :)
  • +
  • -
  • 0

#17 stasiu

    Zaawansowany

  • Zbanowany

Reputacja: 0
Nowy

  • Postów:95
  • Imię:szymon
  • Lokalizacja:torun
Offline

Napisano 04.07.2011 22:35

Przyda sie

#18 Jakubiak

    Zaawansowany

  • Użytkownik

Reputacja: 7
Nowy

  • Postów:78
  • Lokalizacja:Łódź
Offline

Napisano 13.10.2011 19:44

Boże, ludzie, błagam pomocy z tym. Namieszałem i nie wiem co się dzieje!

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

QTM_CodMod.sma(920) : warning 217: loose indentation
QTM_CodMod.sma(2306) : error 017: undefined symbol "OpisPrzedmoitu2"
QTM_CodMod.sma(2315) : warning 217: loose indentation
QTM_CodMod.sma(2315) : error 017: undefined symbol "menu"
QTM_CodMod.sma(2315) : warning 215: expression has no effect
QTM_CodMod.sma(2315) : error 001: expected token: ";", but found ")"
QTM_CodMod.sma(2315) : error 029: invalid expression, assumed zero
QTM_CodMod.sma(2315) : fatal error 107: too many error messages on one line
 
Compilation aborted.
5 Errors.
Done.

Nie wiem czemu na serwerze nie działa i dodatkowo skasowało się pokazywanie przedmiotów i lvl innych graczy po śmierci. Proszę o naprawienie i przekompilowanie jak najszybciej!!

Załączone pliki


  • +
  • -
  • 0

#19 lE_campe

    Zaawansowany

  • Zbanowany

Reputacja: -15
Tragedia

  • Postów:96
  • Imię::)
  • Lokalizacja:somewhere...
Offline

Napisano 21.10.2011 18:36

mam to samo, ale tylko z menu :/

#20 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 21.10.2011 20:01

undefined symbol "menu"
brak zmiennej
QTM_CodMod.sma(2306) : error 017: undefined symbol "OpisPrzedmoitu2"

Gdzieś brakuje klamry ;)
  • +
  • -
  • 0





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

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

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