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.
|
Jak zrobic nowy item z innego.
#1
Napisano 04.05.2012 10:27
#2
Napisano 04.05.2012 19:49
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
Irytuje mnie nieczytelny kod, jeśli oczekujesz ode mnie pomocy - zmień to !
#3
Napisano 04.05.2012 20:01
#4
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 :
ustawia się przez wartość zamrozenie[id]=WARTOSC_W_SEKUNDACH, ale nigdzie nie widzę ku temu odwołania ;xOto item który przez x sekund zamrozi wroga
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
Irytuje mnie nieczytelny kod, jeśli oczekujesz ode mnie pomocy - zmień to !
#5
Napisano 04.05.2012 20:53
#6
Napisano 04.05.2012 21:27
set_task(30.0, "ustaw_domyslne_staty",id)
A gdzies na koncu potem
public ustaw_domyslne_staty(this) {
player_agility[this]+=30
}
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
Użytkownik ogieR- edytował ten post 04.05.2012 21:32
Irytuje mnie nieczytelny kod, jeśli oczekujesz ode mnie pomocy - zmień to !
#7
Napisano 04.05.2012 22:05
//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
#8
Napisano 04.05.2012 22:26
Użytkownik ogieR- edytował ten post 04.05.2012 22:32
Irytuje mnie nieczytelny kod, jeśli oczekujesz ode mnie pomocy - zmień to !
#9
Napisano 05.05.2012 08:08
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
#10
Napisano 05.05.2012 10:49
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
Irytuje mnie nieczytelny kod, jeśli oczekujesz ode mnie pomocy - zmień to !
#11
Napisano 05.05.2012 11:47
#12
Napisano 05.05.2012 11:53
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].
Użytkownik ogieR- edytował ten post 05.05.2012 11:56
Irytuje mnie nieczytelny kod, jeśli oczekujesz ode mnie pomocy - zmień to !
#13
Napisano 05.05.2012 12:18
#14
Napisano 05.05.2012 12:36
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
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
Irytuje mnie nieczytelny kod, jeśli oczekujesz ode mnie pomocy - zmień to !
#15
Napisano 05.05.2012 23:12
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
#16
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) } }
#17
Napisano 06.05.2012 16:12
Irytuje mnie nieczytelny kod, jeśli oczekujesz ode mnie pomocy - zmień to !
#18
Napisano 06.05.2012 22:04
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.
#19
Napisano 07.05.2012 10:09
Irytuje mnie nieczytelny kod, jeśli oczekujesz ode mnie pomocy - zmień to !
#20
Napisano 07.05.2012 13:32
Display_Icon(id ,1 ,"dmg_bio" ,0,255,0)
Użytkownicy przeglądający ten temat: 0
0 użytkowników, 0 gości, 0 anonimowych