Zatrute Naboje
Grandi
29.05.2011
Mam pytanie, czy wie ktoś jak zrobić perk: Zatrute Naboje, które miały by 1/x na zatrucie przeciwnika, graczowi który zostanie zatruty odejmuje sie co 5 sekund 25 hp przez 30 sekund. Czyli może stracić 125 hp. To taki przykład. Jeżeli ktoś dał by radę zrobić bym był wdzięczny
^Grzyboo
29.05.2011
#define TASK_ZATRUCIE 555
public plugin_init()
{
RegisterHam(Ham_TakeDamage, "player", "TakeDamage");
}
public TakeDamage(victim, ifinflictor, attacker, Float:damage, damagebits)
{
if(!is_user_connected(attacker) || get_user_team(attacker) == get_user_team(victim))
return PLUGIN_CONTINUE;
new szansa = 25 //Zmieniasz 25 na swoja liczbe (w procentach), czyli teraz jest 25
if(random_num(1, 100) <= szansa)
{
Zatrucie(victim, 30.0);
client_print(victim, print_chat, "[%s] Zatrules %s (%d%% szansy).", PREFIX, nazwa_gracza(victim), szansa);
}
}
public Zatrucie(id, czas)
{
powtarzaj = czas/5
set_task(5.0, "OdejmijHp", id+TASK_ZATRUCIE, _, "b", powtarzaj)
}
public OdejmijHP(id)
{
id -= TASK_ZATRUCIE;
fakedamage(id, "Zatrucie", 25.0, DMG_ACID)
}
Pisane na szybko
Edited by ^Grzyboo, 29.05.2011 16:31.
Nomaf
29.05.2011
To nie będzie dobrze działać.
Gdzie są użyte funkcje cod_perk_enabled i cod_perk_disabled ?
Bez tego to każdy będzie miał zatrute naboje...
I jeszcze potrzeba zarejestrować perk.
Moduły potrzebne to na pewno hamsandwich i chyba fakemeta.
Gdzie są użyte funkcje cod_perk_enabled i cod_perk_disabled ?
Bez tego to każdy będzie miał zatrute naboje...
I jeszcze potrzeba zarejestrować perk.
Moduły potrzebne to na pewno hamsandwich i chyba fakemeta.
Agent
29.05.2011
Nie wiem co w Codzie jest zarejestrowane, lecz patrząc na funkcje:
P.S. Zarzuć log z kompilacji najlepiej ;]
Edited by Agent, 29.05.2011 19:13.
#include <hamsandwich>potrzebne by było
P.S. Zarzuć log z kompilacji najlepiej ;]
Edited by Agent, 29.05.2011 19:13.
Grandi
29.05.2011
Zrobiłem coś takiego i przy kompilacji wyskakują takowe błędy
Błędy:
codperk_zatrutenaboje.sma(41) : warning 213: tag mismatch
codperk_zatrutenaboje.sma(44) : warning 209: function "TakeDamage" should return a value
codperk_zatrutenaboje.sma(48) : error 017: undefined symbol "powtarzaj"
codperk_zatrutenaboje.sma(48 -- 49) : warning 215: expression has no effect
codperk_zatrutenaboje.sma(49) : error 035: argument type mismatch (argument 5)
codperk_zatrutenaboje.sma(55) : error 017: undefined symbol "fakedamage"
/* Plugin generated by AMXX-Studio */
#include <amxmodx>
#include <hamsandwich>
#include <codmod>
#include <fakemeta>
#define TASK_ZATRUCIE 555
new const perk_name[] = "Zatrute Naboje";
new const perk_desc[] = "1/4 szansy na zatrucie przeciwnika";
new bool:ma_perk[33];
public plugin_init()
{
register_plugin(perk_name, "1.0", "Noname");
cod_register_perk(perk_name, perk_desc);
RegisterHam(Ham_TakeDamage, "player", "TakeDamage");
}
public cod_perk_enabled(id)
ma_perk[id] = true;
public cod_perk_disabled(id)
ma_perk[id] = false;
public TakeDamage(victim, ifinflictor, attacker, Float:damage, damagebits)
{
if(!is_user_connected(attacker) || get_user_team(attacker) == get_user_team(victim))
return PLUGIN_CONTINUE;
new szansa = 25 //Zmieniasz 25 na swoja liczbe (w procentach), czyli teraz jest 25
if(random_num(1, 100) <= szansa)
{
Zatrucie(victim, 30.0);
}
}
public Zatrucie(id, czas)
{
powtarzaj = czas/5
set_task(5.0, "OdejmijHp", id+TASK_ZATRUCIE, _, "b", powtarzaj)
}
public OdejmijHP(id)
{
id -= TASK_ZATRUCIE;
fakedamage(id, "Zatrucie", 25.0, DMG_ACID)
}
Błędy:
codperk_zatrutenaboje.sma(41) : warning 213: tag mismatch
codperk_zatrutenaboje.sma(44) : warning 209: function "TakeDamage" should return a value
codperk_zatrutenaboje.sma(48) : error 017: undefined symbol "powtarzaj"
codperk_zatrutenaboje.sma(48 -- 49) : warning 215: expression has no effect
codperk_zatrutenaboje.sma(49) : error 035: argument type mismatch (argument 5)
codperk_zatrutenaboje.sma(55) : error 017: undefined symbol "fakedamage"
^Grzyboo
29.05.2011
Fakedamage jest w engine, nie fakemecie.
i Nomaf gada głupoty...
musisz dodać if(ma_klase[id]) i już tylko jedna osoba będzie miała.
zrób tak:
Edited by ^Grzyboo, 29.05.2011 20:24.
/* Plugin generated by AMXX-Studio */
#include <amxmodx>
#include <hamsandwich>
#include <codmod>
#include <engine>
#define TASK_ZATRUCIE 555
new const perk_name[] = "Zatrute Naboje";
new const perk_desc[] = "1/4 szansy na zatrucie przeciwnika";
new bool:ma_perk[33];
public plugin_init()
{
register_plugin(perk_name, "1.0", "Noname");
cod_register_perk(perk_name, perk_desc);
RegisterHam(Ham_TakeDamage, "player", "TakeDamage");
}
public cod_perk_enabled(id)
ma_perk[id] = true;
public cod_perk_disabled(id)
ma_perk[id] = false;
public TakeDamage(victim, ifinflictor, attacker, Float:damage, damagebits)
{
if(!is_user_connected(attacker) || get_user_team(attacker) == get_user_team(victim))
return HAM_IGNORED;
new szansa = 25 //Zmieniasz 25 na swoja liczbe (w procentach), czyli teraz jest 25
if(random_num(1, 100) <= szansa)
{
Zatrucie(victim, 30.0);
}
return HAM_IGNORED;
}
public Zatrucie(id, Float:czas)
{
new powtarzaj = floatround(czas / 5.0);
set_task(5.0, "OdejmijHp", id+TASK_ZATRUCIE, _, _, "b", powtarzaj);
}
public OdejmijHP(id)
{
id -= TASK_ZATRUCIE;
fakedamage(id, "Zatrucie", 25.0, DMG_ACID)
}
i Nomaf gada głupoty...
musisz dodać if(ma_klase[id]) i już tylko jedna osoba będzie miała.
zrób tak:
if(ma_klase[attacker])
{
new szansa = 25 //Zmieniasz 25 na swoja liczbe (w procentach), czyli teraz jest 25
if(random_num(1, 100) <= szansa)
{
Zatrucie(victim, 30.0);
}
}
Edited by ^Grzyboo, 29.05.2011 20:24.
Windowspl
29.05.2011
Ja zrobiłem tak nie wiem czy działa nie znam się tak na tym
Dodano 29 maj 2011 - 20:26:
Jednak nie działa
/* Plugin generated by AMXX-Studio */ #include <amxmodx> #include <codmod> #include <hamsandwich> #include <engine> #define TASK_ZATRUCIE 555 new const perk_name[] = "Zatrute Naboje"; new const perk_desc[] = "1/4 szansy na zatrucie przeciwnika"; new bool:ma_perk[33]; new powtarzaj; new zatrucie; public plugin_init() { register_plugin(perk_name, "1.0", "Noname"); cod_register_perk(perk_name, perk_desc); RegisterHam(Ham_TakeDamage, "player", "TakeDamage"); } public cod_perk_enabled(id) { ma_perk[id] = true; } public cod_perk_disabled(id) { ma_perk[id] = false; } public TakeDamage(victim, ifinflictor, attacker, Float:damage, damagebits) { if(!is_user_connected(attacker) || get_user_team(attacker) == get_user_team(victim)) return PLUGIN_CONTINUE; new szansa = 25 //Zmieniasz 25 na swoja liczbe (w procentach), czyli teraz jest 25 if(random_num(1, 100) <= szansa) { Zatrucie(victim, 30.0); } } public Zatrucie(id, czas) { powtarzaj = czas/5 set_task(5.0, "OdejmijHp", id+TASK_ZATRUCIE, _, powtarzaj) } public OdejmijHP(id) { id = TASK_ZATRUCIE; fakedamage(id, "Zatrucie", 25.0, DMG_ACID) }
Dodano 29 maj 2011 - 20:26:
Jednak nie działa
^Grzyboo
29.05.2011
Ja już zrobiłem i działa na pewno. Proponuje jeszcze dodać Odrodzenie i tam:
Wtedy w nowej rundzie już nie będzie odejmować hp
Edited by ^Grzyboo, 29.05.2011 20:31.
if(task_exist(id + TASK_ZATRUCIE))
remove_task(id + TASK_ZATRUCIE)
Wtedy w nowej rundzie już nie będzie odejmować hp
Edited by ^Grzyboo, 29.05.2011 20:31.
^Grzyboo
29.05.2011
/* Plugin generated by AMXX-Studio */
#include <amxmodx>
#include <hamsandwich>
#include <codmod>
#include <engine>
#define TASK_ZATRUCIE 555
new const perk_name[] = "Zatrute Naboje";
new const perk_desc[] = "1/4 szansy na zatrucie przeciwnika";
new bool:ma_perk[33];
public plugin_init()
{
register_plugin(perk_name, "1.0", "Noname");
cod_register_perk(perk_name, perk_desc);
RegisterHam(Ham_TakeDamage, "player", "TakeDamage");
RegisterHam(Ham_Spawn, "player", "Odrodzenie", 1);
}
public Odrodzenie(id)
{
if(task_exists(id + TASK_ZATRUCIE))
remove_task(id + TASK_ZATRUCIE)
}
public cod_perk_enabled(id)
ma_perk[id] = true;
public cod_perk_disabled(id)
ma_perk[id] = false;
public TakeDamage(victim, ifinflictor, attacker, Float:damage, damagebits)
{
if(!is_user_connected(attacker) || get_user_team(attacker) == get_user_team(victim))
return HAM_IGNORED;
if(ma_perk[attacker])
{
new szansa = 25 //Zmieniasz 25 na swoja liczbe (w procentach), czyli teraz jest 25
if(random_num(1, 100) <= szansa)
{
Zatrucie(victim, 30.0);
}
}
return HAM_IGNORED;
}
public Zatrucie(id, Float:czas)
{
new powtarzaj = floatround(czas / 5.0);
set_task(5.0, "OdejmijHp", id+TASK_ZATRUCIE, _, _, "b", powtarzaj);
}
public OdejmijHP(id)
{
id -= TASK_ZATRUCIE;
fakedamage(id, "Zatrucie", 25.0, DMG_ACID)
}
Windowspl
29.05.2011
A jeśli bym chciał zrobić taką klase to można tak ?
#include <amxmodx> #include <hamsandwich> #include <codmod> #include <engine> #define TASK_ZATRUCIE 555 new const nazwa[] = " "; new const opis[] = " "; new const bronie = 1<<CSW_M4A1 | 1<<CSW_DEAGLE; new const zdrowie = -20; new const kondycja = -10; new const inteligencja = 5; new const wytrzymalosc = 10; new bool:ma_klase[33]; public plugin_init() { cod_register_class(nazwa, opis, bronie, zdrowie, kondycja, inteligencja, wytrzymalosc); RegisterHam(Ham_TakeDamage, "player", "TakeDamage"); } public Odrodzenie(id) { if(task_exists(id + TASK_ZATRUCIE)) remove_task(id + TASK_ZATRUCIE) } public TakeDamage(victim, ifinflictor, attacker, Float:damage, damagebits) { if(!is_user_connected(attacker) || get_user_team(attacker) == get_user_team(victim)) return HAM_IGNORED; if(ma_klase[attacker]) { new szansa = 25 //Zmieniasz 25 na swoja liczbe (w procentach), czyli teraz jest 25 if(random_num(1, 100) <= szansa) { Zatrucie(victim, 30.0); } } return HAM_IGNORED; } public Zatrucie(id, Float:czas) { new powtarzaj = floatround(czas / 5.0); set_task(5.0, "OdejmijHp", id+TASK_ZATRUCIE, _, _, "b", powtarzaj); } public OdejmijHP(id) { id -= TASK_ZATRUCIE; fakedamage(id, "Zatrucie", 25.0, DMG_ACID) }
sebul
29.05.2011
Ten task coś źle chyba piszecie... Dokumentacja AMXX.pl: Core >> amxmodx > set_task
Chodzi mi o flagę "b" i te powtarzanie.
Edited by sebul, 29.05.2011 20:40.
Chodzi mi o flagę "b" i te powtarzanie.
Edited by sebul, 29.05.2011 20:40.
^Grzyboo
29.05.2011
A, rzeczywiście
Flaga "a" powinna być, pomyliło mi się
Ten kod już dobry
Flaga "a" powinna być, pomyliło mi się
/* Plugin generated by AMXX-Studio */
#include <amxmodx>
#include <hamsandwich>
#include <codmod>
#include <engine>
#define TASK_ZATRUCIE 555
new const perk_name[] = "Zatrute Naboje";
new const perk_desc[] = "1/4 szansy na zatrucie przeciwnika";
new bool:ma_perk[33];
public plugin_init()
{
register_plugin(perk_name, "1.0", "Noname");
cod_register_perk(perk_name, perk_desc);
RegisterHam(Ham_TakeDamage, "player", "TakeDamage");
RegisterHam(Ham_Spawn, "player", "Odrodzenie", 1);
}
public Odrodzenie(id)
{
if(task_exists(id + TASK_ZATRUCIE))
remove_task(id + TASK_ZATRUCIE)
}
public cod_perk_enabled(id)
ma_perk[id] = true;
public cod_perk_disabled(id)
ma_perk[id] = false;
public TakeDamage(victim, ifinflictor, attacker, Float:damage, damagebits)
{
if(!is_user_connected(attacker) || get_user_team(attacker) == get_user_team(victim))
return HAM_IGNORED;
if(ma_perk[attacker])
{
new szansa = 25 //Zmieniasz 25 na swoja liczbe (w procentach), czyli teraz jest 25
if(random_num(1, 100) <= szansa)
{
Zatrucie(victim, 30.0);
}
}
return HAM_IGNORED;
}
public Zatrucie(id, Float:czas)
{
new powtarzaj = floatround(czas / 5.0);
set_task(5.0, "OdejmijHp", id+TASK_ZATRUCIE, _, _, "a", powtarzaj);
}
public OdejmijHP(id)
{
id -= TASK_ZATRUCIE;
fakedamage(id, "Zatrucie", 25.0, DMG_ACID)
}
Ten kod już dobry
Windowspl
29.05.2011
Czyli taki kod na klasę będzie dobry ?
#include <amxmodx> #include <hamsandwich> #include <codmod> #include <engine> #define TASK_ZATRUCIE 555 new const nazwa[] = " "; new const opis[] = " "; new const bronie = 1<<CSW_M4A1 | 1<<CSW_DEAGLE; new const zdrowie = -20; new const kondycja = -10; new const inteligencja = 5; new const wytrzymalosc = 10; new bool:ma_klase[33]; public plugin_init() { cod_register_class(nazwa, opis, bronie, zdrowie, kondycja, inteligencja, wytrzymalosc); RegisterHam(Ham_TakeDamage, "player", "TakeDamage"); RegisterHam(Ham_Spawn, "player", "Odrodzenie", 1); } public Odrodzenie(id) { if(task_exists(id + TASK_ZATRUCIE)) remove_task(id + TASK_ZATRUCIE) } public TakeDamage(victim, ifinflictor, attacker, Float:damage, damagebits) { if(!is_user_connected(attacker) || get_user_team(attacker) == get_user_team(victim)) return HAM_IGNORED; if(ma_klase[attacker]) { new szansa = 25 //Zmieniasz 25 na swoja liczbe (w procentach), czyli teraz jest 25 if(random_num(1, 100) <= szansa) { Zatrucie(victim, 30.0); } } return HAM_IGNORED; } public Zatrucie(id, Float:czas) { new powtarzaj = floatround(czas / 5.0); set_task(5.0, "OdejmijHp", id+TASK_ZATRUCIE, _, _, "a", powtarzaj); } public OdejmijHP(id) { id -= TASK_ZATRUCIE; fakedamage(id, "Zatrucie", 25.0, DMG_ACID) }
Nomaf
29.05.2011
Gdzie testowałeś? Na lanie z zBotami? To na pewno nie zadziała. zBoty nie mogą korzystać z hamsandwich. Musisz zainstalować PodBoty.