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

Jak zrobic nowy item z innego.


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

#1 fexus

    Zaawansowany

  • Użytkownik

Reputacja: 2
Nowy

  • Postów:87
  • Lokalizacja:a
Offline

Napisano 04.05.2012 10:27

Witam, mam pewien kłopot. Chciałbym przerobić http://amxx.pl/topic...a-wroga-z-kosy/ na trucizne (render zielony i 5dmg co 5 sekund przez 30 sekund) lecz nie wychodzi mi to i są błędy. Autor tematu napisał, że ten item zrobił na podstawie itema trucizny. Jakby komuś się udało to zrobić to poprosił bym o kod tutaj jak to zrobić. Za wszelką pomoc dziękuję.
  • +
  • -
  • 0

#2 ogieR8

    Wszechmogący

  • Power User

Reputacja: 203
Profesjonalista

  • Postów:641
  • Imię:Mariusz
  • Lokalizacja:Ruda Śląska
Offline

Napisano 04.05.2012 19:49

1. Render zielony :
if(HasFlag(id,Flag_Freeze)) set_rendering(id, kRenderFxGlowShell, 0,0,255, kRenderFxNone, 10)

na:
if(HasFlag(id,Flag_Freeze)) set_rendering(id, kRenderFxGlowShell, 0,255,0, kRenderFxNone, 10)


Co zmienilem ? 0,0,255 - RGB ( 0 - red, 0 - green, 255 - blue). Ustawiając na 0,255,0 usuwamy kolor niebieski i dajemy w pełni zielony. Wartości RGB są z zakresu 0-255 jak coś, mniej i więcej się nie daję.

A reszte zaraz Ci podam, zrobie sobie to też, ale to najpierw sobie, pobawię się taskami, warunkami do 30 sekund i Ci podam kod :>

Użytkownik ogieR- edytował ten post 04.05.2012 19:53

  • +
  • -
  • 0

Irytuje mnie nieczytelny kod, jeśli oczekujesz ode mnie pomocy - zmień to !


#3 fexus

    Zaawansowany

  • Autor tematu
  • Użytkownik

Reputacja: 2
Nowy

  • Postów:87
  • Lokalizacja:a
Offline

Napisano 04.05.2012 20:01

Dzięki za chęci :) Czekam z niecierpliwością. Przy okazji do renderingu sam doszedłem no ale po co sam render jak i tak nie zabiera życia :)
  • +
  • -
  • 0

#4 ogieR8

    Wszechmogący

  • Power User

Reputacja: 203
Profesjonalista

  • Postów:641
  • Imię:Mariusz
  • Lokalizacja:Ruda Śląska
Offline

Napisano 04.05.2012 20:31

public add_bonus_freeze(id) {
if (is_user_connected(id)) {
new weapon, bodypart; new attacker_id = get_user_attacker(id,weapon,bodypart); new bron = get_user_weapon(attacker_id)
new losowanie = random_num(1,3) // ustawiasz szanse na trucizne
if(attacker_id!=0 && attacker_id != id && zamrozenie[attacker_id] > 0 && get_user_team(id) != get_user_team(attacker_id) && bron==CSW_KNIFE &&
losowanie==1) {
if(DemageTake[id] == 0)
DemageTake[id] = 1
AddFlag(id, Flag_Freeze)
set_task(5.0,"zapierdol_mi_hp",id, "", 0, "a", 6) // szesc razy wywola funkcje 'zapierdol_mi_hp' z odstepem czasowym co 5 sekund (5*6=30sekund)
}
}
set_speedchange(id)
set_renderchange(id)
}


Podmien sobie ta funkcje wyżej, a tą niżej daj gdzieś na koniec .sma

public zapierdol_mi_hp(this) {
new old = get_user_health(this)
set_user_health(this, old-5) // co 5 sekund weznie 5hp, ale funkcja powtarzana 6 razy, czyli efekt raczej dobrany :>
}


Rozumiem, że :

Oto item który przez x sekund zamrozi wroga

ustawia się przez wartość zamrozenie[id]=WARTOSC_W_SEKUNDACH, ale nigdzie nie widzę ku temu odwołania ;x

Przyznam, nie sprawdzałem nawet czy się kompiluję, chodź nie widzę na 1 rzut oka błędów.

Pozdrawiam.

Użytkownik ogieR- edytował ten post 04.05.2012 20:30

  • +
  • -
  • 1

Irytuje mnie nieczytelny kod, jeśli oczekujesz ode mnie pomocy - zmień to !


#5 fexus

    Zaawansowany

  • Autor tematu
  • Użytkownik

Reputacja: 2
Nowy

  • Postów:87
  • Lokalizacja:a
Offline

Napisano 04.05.2012 20:53

A jak zrobić z tego jeszcze moc ? I jeszcze czy można zrobić ilość zabranego życia + 1/2 którejś statystyki (to wiem jak zrobić tylko chcę wiedzieć czy tak się da)
  • +
  • -
  • 0

#6 ogieR8

    Wszechmogący

  • Power User

Reputacja: 203
Profesjonalista

  • Postów:641
  • Imię:Mariusz
  • Lokalizacja:Ruda Śląska
Offline

Napisano 04.05.2012 21:27

Mozna. Daj przyklad, bedzie latwiej. Np mozesz w mocy tej z freeze'm dać player_agility[id]-=30, a potem i zrobić osobny task na np 30 sekund, taki :

set_task(30.0, "ustaw_domyslne_staty",id)


A gdzies na koncu potem

public ustaw_domyslne_staty(this) {
player_agility[this]+=30
}


:D A co do mocy to praktycznie moc już masz na to, teraz wystarczy zrobić nowa zmienną u góry, np : new c_trucizna[33], ominac reset_item_skills, bo jesli tuta dasz to po /drop stracisz moc dla tej klasy (czyli nie dajemy tam), a linijke z kodu :

if(attacker_id!=0 && attacker_id != id && zamrozenie[attacker_id] > 0 && get_user_team(id) != get_user_team(attacker_id) && bron==CSW_KNIFE && losowanie==1) {


Zamieniasz na :

if(attacker_id!=0 && attacker_id != id && (zamrozenie[attacker_id] > 0 || c_trucizna[attacker_id] > 0) && get_user_team(id) != get_user_team(attacker_id) && bron==CSW_KNIFE && losowanie==1) {


W tym wypadku zamienilem "zamrozenie[attacker_id] > 0" na "(zamrozenie[attacker_id] > 0 || c_trucizna[attacker_id] > 0)", co daje : jesli spelnia inne warunki i gracz atakujacy ma item z ta moca LUB klase z ta moca to wywola to ofierze.

A potem w klasie po jej wyborze dodajesz c_trucizna[id]=WARTOSC. Ale pamietaj, ze trzeba nad wyborem klasy dodac do zresetowanych mocy to z wartoscia = 0, bo inaczej weźmiesz sobie klasę z tym czymś. Bedziesz mial - okey, ale potem zmienisz klase i dalej ta moc bedziesz mial :D

Użytkownik ogieR- edytował ten post 04.05.2012 21:32

  • +
  • -
  • 1

Irytuje mnie nieczytelny kod, jeśli oczekujesz ode mnie pomocy - zmień to !


#7 fexus

    Zaawansowany

  • Autor tematu
  • Użytkownik

Reputacja: 2
Nowy

  • Postów:87
  • Lokalizacja:a
Offline

Napisano 04.05.2012 22:05

Mi głównie chodziło o to by to była moc do klasy, że gdy atakuje to osoba zaatakowana jest zatruta i zabiera jej 5hp + 1/2inteligencji gracza, który ją zaatakował. Wielki dzięki za pomoc ! :)

//Edit

Czy dałoby się dodać także znaczek dla zatrutego (coś w tym stylu http://amxx.pl/topic...ak-widocznosci/ ) ponieważ ten gracz nie będzie wiedział kiedy jest zatruty.

Użytkownik fexus edytował ten post 04.05.2012 22:34

  • +
  • -
  • 0

#8 ogieR8

    Wszechmogący

  • Power User

Reputacja: 203
Profesjonalista

  • Postów:641
  • Imię:Mariusz
  • Lokalizacja:Ruda Śląska
Offline

Napisano 04.05.2012 22:26

A teraz mam kilka zleceń, ale spróbuj sam, ale najpierw zrób kopie zapasową diablo, nowy public, np 'public add_nowafunkcja(id, attacker_id), a w niej np: player_inteligence[id]=player_inteligence[id]/2, a potem jak Ci pokazywalem w tasku mu to zwrocisz, przez wymnozenie *2, jak sie zabiera hp przez task juz CI pokazywalem, poprobuj. A w public damage zobaczysz duzo wywolanych funkcji, wiec w ten sam sposob dodaj add_nowafunkcja, a co do '5hp + 1/2inteligencji gracza' to teraz nie wiem, czy chcesz by jej brało połowe inteligencji, czy ma zabierac hp liczac ile ma inteligencji :D Teraz zabardzo CI nie pomoge sam, zajety jestem, ale poprobuj, tak sie nauczylem co-nie-co pisac, na bledach :>

Użytkownik ogieR- edytował ten post 04.05.2012 22:32

  • +
  • -
  • 0

Irytuje mnie nieczytelny kod, jeśli oczekujesz ode mnie pomocy - zmień to !


#9 fexus

    Zaawansowany

  • Autor tematu
  • Użytkownik

Reputacja: 2
Nowy

  • Postów:87
  • Lokalizacja:a
Offline

Napisano 05.05.2012 08:08

Niezbyt rozumiem to co napisałeś :| Próbowałem zrobić to tak
public zapierdol_mi_hp(this) {
new old = get_user_health(this)
new zatruty = 5+floatround(player_intelligence[id]/2.0)
set_user_health(this, old-zatruty) // co 5 sekund weznie 5hp, ale funkcja powtarzana 6 razy, czyli efekt raczej dobrany :>
}

no ale nie wyszło bo mam błąd, że undefined symbol "id"

Użytkownik fexus edytował ten post 05.05.2012 08:08

  • +
  • -
  • 0

#10 ogieR8

    Wszechmogący

  • Power User

Reputacja: 203
Profesjonalista

  • Postów:641
  • Imię:Mariusz
  • Lokalizacja:Ruda Śląska
Offline

Napisano 05.05.2012 10:49

Zrobiłeś dobrze, tylko masz nawyk, że zawsze się wpisuje 'id', a ja użyłem 'this' w nazwie publica jak i funkcjach, gdyż na polski jest to 'ofiara', ja sie tak lapie lepiej, jak chcesz po Twojemu to masz :

public zapierdol_mi_hp(id) {
new old = get_user_health(id)
new zatruty = 5+floatround(player_intelligence[id]/2.0)
set_user_health(id, old-zatruty) // co 5 sekund weznie 5hp, ale funkcja powtarzana 6 razy, czyli efekt raczej dobrany :>
}


Ale dobrze kombinujesz, jak część prac Twoich prac będzie oparta na pomocy innych i poradnikach, będziesz analizował kod, którzy inni dają CI na tacy i go lekko modyfikował, aby pojąć dokładnie jego zachowanie w różnych sytuacjach to będą z Ciebie ludzi (scripting) ; d

Użytkownik ogieR- edytował ten post 05.05.2012 10:53

  • +
  • -
  • 0

Irytuje mnie nieczytelny kod, jeśli oczekujesz ode mnie pomocy - zmień to !


#11 fexus

    Zaawansowany

  • Autor tematu
  • Użytkownik

Reputacja: 2
Nowy

  • Postów:87
  • Lokalizacja:a
Offline

Napisano 05.05.2012 11:47

hmm ale gdyby było te "this" to czy by nie liczyło int od ofiary ? Czyli, że osoba (przykładowo dajmy łowca) ma dużo int i cierpi przez to bardziej przy zatruciu. To byłby lekki bezsens :) Teraz czy da się zrobić ten znaczek zatrutemu? Bo tego akurat nie umiem zrozumieć jak dodać do zatrucia.
  • +
  • -
  • 0

#12 ogieR8

    Wszechmogący

  • Power User

Reputacja: 203
Profesjonalista

  • Postów:641
  • Imię:Mariusz
  • Lokalizacja:Ruda Śląska
Offline

Napisano 05.05.2012 11:53

Znaczek ? To z lewej strony, tam gdzie niektóre pluginy na zielono pokazują jaką się trzyma broń, gdzie def jest ? ;d

A co do pytania z this, to nie. Bo to chodzi o ofiare, jak se dasz :

public zapierdol_mi_hp(id) {


To wszedzie jesli chodzi o ofiare trzeba dać index = ID, a jeśli dasz :

public zapierdol_mi_hp(this) {


To wszedzie jesli chodzi o ofiare trzeba dać index = THIS. Mozna se tu nawet dac

public zapierdol_mi_hp(lol_lo) {


I wtedy index = LOL_LO.

Ja tylko nazwałem to this, bo to po ang. ofiara, a ja wolę wiedzieć z góry o kogo chodzi, bo mam funkcję na atakującego, np jakiś bonus itd, więc tak wiem, że chodzi o ofiarę, a Ty tam dałeś 'id', wiec on nie wie o co chodzi, zmien se tak jak CI podałem post wyżej, że masz 'id' w publicu i wtedy wszysko z indexem = id, np (id) i [id]. :D

Użytkownik ogieR- edytował ten post 05.05.2012 11:56

  • +
  • -
  • 0

Irytuje mnie nieczytelny kod, jeśli oczekujesz ode mnie pomocy - zmień to !


#13 fexus

    Zaawansowany

  • Autor tematu
  • Użytkownik

Reputacja: 2
Nowy

  • Postów:87
  • Lokalizacja:a
Offline

Napisano 05.05.2012 12:18

Ah dobra to już rozumiem wszystko :>, a o znaczek to chodzi mi taki sam jak przy naswietleniu ninji (wyżej podałem o jaki temat chodzi)
  • +
  • -
  • 0

#14 ogieR8

    Wszechmogący

  • Power User

Reputacja: 203
Profesjonalista

  • Postów:641
  • Imię:Mariusz
  • Lokalizacja:Ruda Śląska
Offline

Napisano 05.05.2012 12:36

http://amxx.pl/topic...ikonka-statusu/

Hmm. Np masz tam takie coś :

#include <amxmodx>
#include <fakemeta>

new iconstatus;

public plugin_init() {
register_plugin("Status Icon","0.1","SAMURAI");

register_forward(FM_PlayerPreThink,"fw_prethink");
iconstatus = get_user_msgid("StatusIcon");

}
public fw_prethink(id)
{
if(!(pev(id,pev_button) & FL_ONGROUND))
{
message_begin(MSG_ONE,iconstatus,{0,0,0},id);
write_byte(1); // status (0=hide, 1=show, 2=flash)
write_string("dmg_poison"); // sprite name
write_byte(0); // red
write_byte(255); // green
write_byte(0); // blue
message_end();
}

}


Czyli bedzie wyswietlac sie, jesli jestesmy w powietrzu " if(!(pev(id,pev_button) & FL_ONGROUND))", ale możemy to tak zrobić :


public fw_prethink(id)
{
if(jestem_zatruty[id] == 1)
{
message_begin(MSG_ONE,iconstatus,{0,0,0},id);
write_byte(1); // status (0=hide, 1=show, 2=flash)
write_string("dmg_poison"); // sprite name
write_byte(0); // red
write_byte(255); // green
write_byte(0); // blue
message_end();
}
}


Czyli jesli mamy 'jestem_zatruty[id]' = 1 to bedzie ten znaczek, nie wiem który, ale możesz sobie podmienić nazwę tego 'dmg_poison' na jedne z tego : http://amxx.pl/topic...ikonka-statusu/ lub tego : http://forums.allied...E%3C/amxmodx%3E . W funkcje np public add_freeze_costam_costam(id,attacker_id) nad taskiem co 5.0 dasz mu wtedy 'jestem_zatruty[id]=1', a pod tym task : 'set_task(30.0,"zdejmij_zatrucie_icon",id)'

A potem na koniec kodu gdzieś :

public zdejmij_zatrucie_icon(id) { // TUTAJ JEST ID AKURAT, DALEM CI DLA ULATWIENIA :D
jestem_zatruty[id]=0
}


Oczywiście ten przykład na początku postu trzeba odpowiednio wklepać w db_mod'a, jak będą problemy to pisz :)

Użytkownik ogieR- edytował ten post 05.05.2012 12:39

  • +
  • -
  • 1

Irytuje mnie nieczytelny kod, jeśli oczekujesz ode mnie pomocy - zmień to !


#15 fexus

    Zaawansowany

  • Autor tematu
  • Użytkownik

Reputacja: 2
Nowy

  • Postów:87
  • Lokalizacja:a
Offline

Napisano 05.05.2012 23:12

Działa prawie jakbym chciał. Renderuje, jest znaczek i zabiera hp. Tylko po upływie tych 30 sekund, gracz dalej jest zielony oraz ma znaczek. Następnym problemem jest to, że gracz na początku rundy traci HP o ile w poprzedniej nie wykonało dostatecznej ilości razy zabrania HP (zabrało 3x życie, ja zabiłem i w następnej rundzie na początku znów 3 razy zabrało mu życie). Kolejnym problemem jest to, że gracz jest spowolniony, nie wiem dlaczego a do zatrucia to ma się nijak. I kolejne pytanie, czy dałoby się dodać do tego jakiś dźwięk ? Np jak przy slapowaniu ponieważ tak bez dźwięku to trochę głupio jak ubywa tylko HP bez żadnych powiadomień większych.
Tutaj kod jak mam to napisane

public add_bonus_trucizna(id) {
if (is_user_connected(id)) {
new weapon, bodypart; new attacker_id = get_user_attacker(id,weapon,bodypart); new bron = get_user_weapon(attacker_id)
new losowanie = random_num(1,10) // ustawiasz szanse na trucizne
if(attacker_id!=0 && attacker_id != id && (trucizna[attacker_id] > 0 || c_trucizna[attacker_id] > 0) && get_user_team(id) != get_user_team(attacker_id) && losowanie==1) {
if(DemageTake[id] == 0)
DemageTake[id] = 1
AddFlag(id, Flag_Trucizna)
jestem_zatruty[id]=1
set_task(5.0,"zapierdol_mi_hp",id, "", 0, "a", 6) // szesc razy wywola funkcje 'zapierdol_mi_hp' z odstepem czasowym co 5 sekund (5*6=30sekund)
set_task(30.0,"zdejmij_zatrucie_icon",id)
}
}
set_renderchange(id)
}
public zapierdol_mi_hp(id) {
new old = get_user_health(id)
new moctrucizny = 5+floatround(player_intelligence[id]/5.0)
show_hudmessage(id, "Jestes pod wplywem trucizny. Trucizna zabrala Ci %i punktow zycia.", moctrucizny)
set_user_health(id, old-moctrucizny) // co 5 sekund weznie 5hp, ale funkcja powtarzana 6 razy, czyli efekt raczej dobrany :>
}

public zdejmij_zatrucie_icon(id)
{
jestem_zatruty[id]=0
}
public fw_prethink(id)
{
if(jestem_zatruty[id] == 1)
{
message_begin(MSG_ONE,iconstatus,{0,0,0},id);
write_byte(1); // status (0=hide, 1=show, 2=flash)
write_string("dmg_poison"); // sprite name
write_byte(0); // red
write_byte(255); // green
write_byte(0); // blue
message_end();
}
}

Użytkownik fexus edytował ten post 05.05.2012 23:16

  • +
  • -
  • 0

#16 KariiO

    Super Hero

  • Power User

Reputacja: 396
Wszechpomocny

  • Postów:1 133
  • GG:
  • Imię:Korneliusz
  • Lokalizacja:Cieszyn
Offline

Napisano 06.05.2012 11:43

public zdejmij_zatrucie_icon(id)
{
jestem_zatruty[id]=0
}
public fw_prethink(id)
{
								if(jestem_zatruty[id] == 1) Display_Icon(id ,0 ,dmg_poison ,0,255,0)
}
zamień na:
public zdejmij_zatrucie_icon(id)
{
jestem_zatruty[id]=0
Display_Icon(id ,0 ,dmg_poison ,0,255,0)
set_renderchange(id)
}


stock Display_Icon(id ,enable ,name[] ,red,green,blue)
{
if (!pev_valid(id) || is_user_bot(id))
{
return PLUGIN_HANDLED
}

message_begin( MSG_ONE,get_user_msgid("StatusIcon"), {0,0,0}, id )
write_byte( enable )  
write_string( name )
write_byte( red ) // red
write_byte( green ) // green
write_byte( blue ) // blue
message_end()

return PLUGIN_CONTINUE
}
i pod:
AddFlag(id, Flag_Trucizna)
dodaj:
Display_Icon(id ,1 ,dmg_poison ,0,255,0)

plugin init:
register_logevent("koniecrundy", 2, "1=Round_End");
na dół:

public koniecrundy()
{
new player[32], count,id, i
get_players(player, count, "ah")
for(i=0;i<count;i++)
{
id = player[i]
if(jestem_zatruty[id]) zdejmij_zatrucie_icon(id)
}
}

  • +
  • -
  • 1

#17 ogieR8

    Wszechmogący

  • Power User

Reputacja: 203
Profesjonalista

  • Postów:641
  • Imię:Mariusz
  • Lokalizacja:Ruda Śląska
Offline

Napisano 06.05.2012 16:12

+ za stock'a, na pewno mi się przyda, a co do UP^UP@, to zapomniałem dać ograniczenia do końca rundy + braku zatrucia, myślałem, że akurat koniec zatrucia poprzez jestem_zatruty[index] skończy się z iconą, ale w sumie nie ma tam info o tym, jest tylko if jak ma, a co do rundy to zapomniałem, przyznam ;)
  • +
  • -
  • 0

Irytuje mnie nieczytelny kod, jeśli oczekujesz ode mnie pomocy - zmień to !


#18 fexus

    Zaawansowany

  • Autor tematu
  • Użytkownik

Reputacja: 2
Nowy

  • Postów:87
  • Lokalizacja:a
Offline

Napisano 06.05.2012 22:04

Jest problem z
AddFlag(id, Flag_Trucizna)
Display_Icon(id ,1 ,dmg_poison ,0,255,0)
jestem_zatruty[id]=1

Jest błąd, że rzekomo nie jest zdefiniowane dmg_poison.
  • +
  • -
  • 0

#19 ogieR8

    Wszechmogący

  • Power User

Reputacja: 203
Profesjonalista

  • Postów:641
  • Imię:Mariusz
  • Lokalizacja:Ruda Śląska
Offline

Napisano 07.05.2012 10:09

Ja nie mam pojęcia teraz, passuje. Poczekaj na KariiO, zapewne on Ci pomoże.
  • +
  • -
  • 0

Irytuje mnie nieczytelny kod, jeśli oczekujesz ode mnie pomocy - zmień to !


#20 KariiO

    Super Hero

  • Power User

Reputacja: 396
Wszechpomocny

  • Postów:1 133
  • GG:
  • Imię:Korneliusz
  • Lokalizacja:Cieszyn
Offline

Napisano 07.05.2012 13:32

Display_Icon(id ,1 ,"dmg_bio" ,0,255,0)

  • +
  • -
  • 0




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

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