Autodestrukcja w klasie - odpornosc
Linux'
25.12.2013
Zrobilem sobie prosta klase z wbudowana autodestrukcja i chcialbym do niej dodac odpornosc ale nie bardzo wiem jak. Ma to dzialac na takiej zasadzie jak np odpornosc na miny. proszę o pomoc.
if(equal(classname, "mine")) return HAM_SUPERCEDE;
kod z klasy:
public cod_class_enabled(id) { ma_klase[id] = true; ilosc_dynamitow[id] = 1; } public cod_class_disabled(id) { ma_klase[id] = false; ilosc_dynamitow[id] = 0; } public cod_class_skill_used(id) { if(!ilosc_dynamitow[id]) { client_print(id, print_center, "Wykorzystales juz dynamit!"); } else { ilosc_dynamitow[id]--; new Float:fOrigin[3]; entity_get_vector(id, EV_VEC_origin, fOrigin); new iOrigin[3]; for(new i=0;i<=2;i++) iOrigin[i] = floatround(fOrigin[i]); message_begin(MSG_BROADCAST,SVC_TEMPENTITY, iOrigin); write_byte(TE_EXPLOSION); write_coord(iOrigin[0]); write_coord(iOrigin[1]); write_coord(iOrigin[2]); write_short(sprite_blast); write_byte(32); write_byte(20); write_byte(0); message_end(); message_begin(MSG_BROADCAST, SVC_TEMPENTITY, iOrigin); write_byte(TE_BEAMCYLINDER ); write_coord(iOrigin[0]); write_coord(iOrigin[1]); write_coord(iOrigin[2]); write_coord(iOrigin[0]); write_coord(iOrigin[1]+200); write_coord(iOrigin[2]+200); write_short(sprite_white); write_byte(0); // startframe write_byte(0); // framerate write_byte(10); // life write_byte(10); // width write_byte(255); // noise write_byte(0); // r, g, b write_byte(100);// r, g, b write_byte(255); // r, g, b write_byte(120); // brightness write_byte(0); // speed message_end(); new entlist[33]; new numfound = find_sphere_class(id, "player", 50.0 , entlist, 32); for(new i=0; i<=numfound; i++) { new pid = entlist[i]; if(!is_user_alive(pid) || get_user_team(id) == get_user_team(pid)) continue; cod_inflict_damage(id, pid, 80.0, 0.3); } } return PLUGIN_CONTINUE; } public fwSpawn_Dynamit(id) { if(is_user_alive(id) && ma_klase[id]) { ilosc_dynamitow[id] = 1; } return HAM_IGNORED; }
Linux'
25.12.2013
Nie chce dodac odpornosci na klase tylko na umiejetnosc klasy a to jest roznica, poniewaz jakbym chcial dodac druga umiejetnosc to odpornosc na nia tez by dzialala..
vaulT 26.12.2013
TEn temat byc moze powinien trafic do kosza ale go nie za raportuje bo nie opisales dokladnie o jaka odpornosc ci chodzi... dales przyklad na miny wiec ci dalem link. okres; sie a jakos temu zaradzimy
Linux'
26.12.2013
Temat jest bardzo dobrze opisany tylko niektorzy maja problem z czytaniem ze zrozumieniem.
Przykladowa klasa saper:
#include <amxmodx> #include <codmod> #include <engine> #include <hamsandwich> new const nazwa[] = "Saper"; new const opis[] = "Posiada 3 miny (moc min +int), 50hp, 100% biegu, 50 wytrzymalosci."; new const bronie = 1<<CSW_P90 | 1<<CSW_P228; new const zdrowie = 0; new const kondycja = 0; new const inteligencja = 0; new const wytrzymalosc = 50; new const modelMiny[] = "models/mina.mdl" new sprite_blast_miny; new ilosc_min_gracza[33]; new bool: ma_klase[33]; public plugin_init() { register_plugin(nazwa, "1.0", "Linux"); cod_register_class(nazwa, opis, bronie, zdrowie, kondycja, inteligencja, wytrzymalosc); register_touch("mine", "player", "DotykMiny"); RegisterHam(Ham_Spawn, "player", "fwSpawn_Miny", 1); } public plugin_precache() { precache_model(modelMiny); sprite_blast_miny = precache_model("sprites/dexplo.spr"); } public client_disconnect(id) { new entMiny = find_ent_by_class(0, "mine"); while(entMiny > 0) { if(entity_get_edict(entMiny, EV_ENT_owner) == id) remove_entity(entMiny); entMiny = find_ent_by_class(entMiny, "mine"); } } public cod_class_enabled(id) { ma_klase[id] = true ilosc_min_gracza[id] = 3; } public cod_class_disabled(id) { ma_klase[id] = false ilosc_min_gracza[id] = 0; } public cod_class_skill_used(id) { if(!ilosc_min_gracza[id]) { client_print(id, print_center, "Wykorzystales juz wszystkie miny!"); } else { if(cod_get_user_intelligence(id)<1) { client_print(id, print_center, "Aby wzmocnic moc min, zwieksz inteligencje!") } ilosc_min_gracza[id]--; new Float:origin[3]; entity_get_vector(id, EV_VEC_origin, origin); new ent = create_entity("info_target"); entity_set_string(ent ,EV_SZ_classname, "mine"); entity_set_edict(ent ,EV_ENT_owner, id); entity_set_int(ent, EV_INT_movetype, MOVETYPE_TOSS); entity_set_origin(ent, origin); entity_set_int(ent, EV_INT_solid, SOLID_BBOX); entity_set_model(ent, modelMiny); entity_set_size(ent,Float:{-16.0,-16.0,0.0},Float:{16.0,16.0,2.0}); drop_to_floor(ent); set_rendering(ent,kRenderFxNone, 0,0,0, kRenderTransTexture,50); } } public DotykMiny(ent, id) { if(!is_valid_ent(ent)) return; new attacker = entity_get_edict(ent, EV_ENT_owner); if (get_user_team(attacker) != get_user_team(id)) { new Float:fOrigin[3]; entity_get_vector( ent, EV_VEC_origin, fOrigin); new iOrigin[3]; for(new i=0;i<3;i++) iOrigin[i] = floatround(fOrigin[i]); message_begin(MSG_BROADCAST,SVC_TEMPENTITY, iOrigin); write_byte(TE_EXPLOSION); write_coord(iOrigin[0]); write_coord(iOrigin[1]); write_coord(iOrigin[2]); write_short(sprite_blast_miny); write_byte(32); write_byte(20); write_byte(0); message_end(); new entlist[33]; new numfound = find_sphere_class(ent,"player", 90.0 ,entlist, 32); for (new i=0; i < numfound; i++) { new pid = entlist[i]; if (!is_user_alive(pid) || get_user_team(attacker) == get_user_team(pid)) continue; cod_inflict_damage(attacker, pid, 40.0, 0.3, ent, (1<<24)); } remove_entity(ent); } } public fwSpawn_Miny(id) { if(is_user_alive(id) && ma_klase[id]) { ilosc_min_gracza[id] = 3; new entMiny = find_ent_by_class(0, "mine"); while(entMiny > 0) { if(entity_get_edict(entMiny, EV_ENT_owner) == id) remove_entity(entMiny); entMiny = find_ent_by_class(entMiny, "mine"); } } return HAM_IGNORED; }
I teraz jakbym chcial dodac odpornosc na miny to zrobilbym to w ten sposob:
if(equal(classname, "mine")) return HAM_SUPERCEDE;
I chce zeby na takiej samej zasadzie dzialala odpornosc na dynamit, czyli gdy gdzies umieszcze np ten kod:
if(equal(classname, "mine")) return HAM_SUPERCEDE;
to ktos bedzie miec odpornosc na dynamit. Lepiej juz wyjasnic nie potrafie.