Witam,
Chciałbym dodać Leczenie się Ultra VIP'a przez cały czas.
Czyli np. 1 HP co 3-4 SEKUNDY.
W moim VIPIE jest ustawione tak, że losuje daną ilość HP na mape dla VIPA, Svipa, Uvipa itd.
I chciałbym aby gdy np. Uvip ma 150 HP, a przy starcie ma 200 to aby leczył się przez cały czas do 200 HP. (1 HP - 3/4 sekundy)
Leczenie miało by być tylko dla UVIPa, czyli na flagę "v", lecz totalnie nie wiem jak się za to zabrać.
Jeżeli ktoś wie, to z góry dzięki za POMOC ![]()
VIP.SMA :
Spoiler
/*Cvary
jb_vip_skoki ilosc skokow dla vipa
jb_svip_skoki ilosc skokow dla svipa
*/
#include <amxmodx>
#include <fakemeta>
#include <hamsandwich>
#include <xs>
native jail_get_wish();
native jail_get_prowadzacy(id);
#pragma semicolon 1
stock isFlagi(id, const flagi[]) return (get_user_flags(id) & read_flags(flagi));
new Float:origin[33][3];
new prethink_counter[33];
new bool:is_drawing[33];
new bool:is_holding[33];
new spriteid, hud;
new JumpCount[33];
new iTeam[33];
new Float:hp[3];
new maxpl;
new pCvarVipJumps, pCvarSVipJumps;
new static maxAmmo[31] = {0, 52, 0, 90, 1, 31, 1, 100, 90, 1, 120, 100, 100, 90, 90, 90, 100, 120, 30, 120, 200, 31, 90, 120, 90, 2, 35, 90, 90, 0, 100};
public plugin_init() {
register_plugin("VIP", "2.0", "naXe");
register_clcmd("say /vip3333", "Przywileje");
register_clcmd("say /svip3333", "Przywileje");
register_clcmd("say /vips", "ListaVipow");
register_clcmd("+maluj", "MalujON");
register_clcmd("-maluj", "MalujOFF");
RegisterHam(Ham_Spawn, "player", "Odrodzenie", 1);
RegisterHam(Ham_Player_Jump, "player", "PlayerJump");
register_forward(FM_PlayerPreThink, "PlayerPreThink");
register_event("CurWeapon", "CurWeapon", "be", "1=1");
register_message(84, "NapisVIP");
pCvarVipJumps = register_cvar("jb_vip_skoki", "1");
pCvarSVipJumps = register_cvar("jb_svip_skoki", "2");
hud = CreateHudSyncObj();
maxpl = get_maxplayers();
hp[0] = random_float(180.0, 200.0);
hp[1] = random_float(200.0, 220.0);
hp[2] = random_float(150.0, 180.0);
}
public plugin_precache() spriteid = precache_model("sprites/lgtning.spr");
public NapisVIP() {
new id = get_msg_arg_int(1);
if(is_user_connected(id) && isFlagi(id, "s, t")) set_msg_arg_int(2, 1, is_user_alive(id) ? (1<<2) : (1<<0));
}
public client_putinserver(id) {
if(is_user_bot(id) || is_user_hltv(id)) return;
PokazHud(id, "Wszedl");
}
public client_disconnect(id) {
if(is_user_bot(id) || is_user_hltv(id)) return;
iTeam[id] = 0;
PokazHud(id, "Wyszedl");
}
public PokazHud(id, akcja[]) {
if(isFlagi(id, "s")) {
new nick[64]; get_user_name(id, nick, 63);
set_hudmessage(24, 190, 220, 0.25, 0.2, 2, 6.0, 5.0, 0.1, 1.5);
ShowSyncHudMsg(0, hud, "%s Super VIP! (%s)", akcja, nick);
}
else if(isFlagi(id, "v")) {
new nick[64]; get_user_name(id, nick, 63);
set_hudmessage(24, 190, 220, 0.25, 0.2, 2, 6.0, 5.0, 0.1, 1.5);
ShowSyncHudMsg(0, hud, "%s Ultra VIP! (%s)", akcja, nick);
}
}
public Odrodzenie(id) {
if(!is_user_alive(id)) return;
if(isFlagi(id, "s, v, t")) {
iTeam[id] = get_pdata_int(id, 114);
remove_task(id + 9101);
set_task(2.0, "DajGranaty", id + 9101);
if(isFlagi(id, "s")) {
set_pev(id, pev_health, iTeam[id] == 1 ? hp[0] : hp[1]);
set_pev(id, pev_armorvalue, 200.0);
}
if(isFlagi(id, "v")) {
set_pev(id, pev_health, iTeam[id] == 1 ? hp[1] : hp[1]);
set_pev(id, pev_armorvalue, 200.0);
}
else if(isFlagi(id, "t")) set_pev(id, pev_health, hp[2]);
}
}
public DajGranaty(id) {
id -= 9101;
if(!is_user_alive(id)) return;
give_item(id, "weapon_smokegrenade");
if(iTeam[id] != 2) return;
give_item(id, "weapon_flashbang");
set_pdata_int(id, 387, 2);
}
public PlayerJump(id) {
if(!is_user_alive(id) || !isFlagi(id, "s, t")) return 1;
new fFlags = pev(id, pev_flags);
if(fFlags & (1<<11) || pev(id, pev_waterlevel) >= 2 || !(get_pdata_int(id, 246) & (1<<1))) return 1;
if(fFlags & (1<<9)) {
JumpCount[id] = 0;
return 1;
}
new iAdicionalJumps = isFlagi(id, "s") ? get_pcvar_num(pCvarSVipJumps) : get_pcvar_num(pCvarVipJumps);
if(iAdicionalJumps && get_pdata_float(id, 251) < 500.0 && ++JumpCount[id] <= iAdicionalJumps) {
new Float:fVelocity[3];
pev(id, pev_velocity, fVelocity);
fVelocity[2] = 268.328157;
set_pev(id, pev_velocity, fVelocity);
return 2;
}
return 1;
}
public CurWeapon(id) {
if(iTeam[id] != 2 || !isFlagi(id, "s") || jail_get_wish()) return;
new bron = read_data(2);
if(bron == 29 || bron == 4 || bron == 9 || bron == 25 || bron == 20) return;
set_user_bpammo(id, bron, maxAmmo[bron]);
}
public ListaVipow(id) {
new menu = menu_create("\yLista VIP Online", "HandleListaVipow");
for(new i = 1; i <= maxpl; i++) {
if(!is_user_connected(i) || is_user_bot(i) || is_user_hltv(i) || !isFlagi(i, "s, t")) continue;
new num[3], name[64];
num_to_str(i, num, 2);
get_user_name(i, name, 63);
add(name, 63, isFlagi(i, "v") ? " \d[\yUltra VIP\d]" : isFlagi(i, "s") ? " \d[\ySuper VIP\d]" : " \d[\yVIP\d]");
menu_additem(menu, name, num);
}
menu_setprop(menu, 2, "Poprzednia strona");
menu_setprop(menu, 3, "Nastepna strona");
menu_setprop(menu, 4, "Wyjdz");
menu_display(id, menu);
return 1;
}
public HandleListaVipow(id, menu, item) {
if(item == -3) return;
new data[3], acces, id2, nick[64];
menu_item_getinfo(menu, item, acces, data, 2, _, _, id2);
id2 = str_to_num(data);
if(is_user_connected(id2)) {
get_user_name(id2, nick, 63);
client_print_color(id, print_team_blue, "^4[VIP]^x01 Nick:^3 %s^1 Steam:^3 %s^1 | Zyje:^3 %s^1 | Czas gry:^3 %d^1 min.", nick, is_user_steam(id2) ? "Posiada" : "Brak", is_user_alive(id2) ? "Tak" : "Nie", get_user_time(id2, 1) / 60);
}
ListaVipow(id);
}
public Przywileje(id) {
show_motd(id, "/addons/amxmodx/configs/vip.html", "Przywileje Vipa i Super Vipa");
return 1;
}
public MalujON(id) {
if(!is_user_alive(id) || !jail_get_prowadzacy(id) || !isFlagi(id, "s, t")) return 1;
is_drawing[id] = true;
return 1;
}
public MalujOFF(id) {
if(!is_user_connected(id) || !isFlagi(id, "s, t")) return 1;
is_drawing[id] = false;
return 1;
}
public PlayerPreThink(id) {
if(prethink_counter[id]++ > 5) {
new Float:originn[3]; get_aim_origin(id, originn);
if(is_drawing[id] && engfunc(EngFunc_PointContents, originn) != -6) {
static Float:cur_origin[3], Float:distance;
cur_origin = origin[id];
if(!is_holding[id]) {
get_aim_origin(id, origin[id]);
move_toward_client(id, origin[id]);
is_holding[id] = true;
return 1;
}
get_aim_origin(id, origin[id]);
move_toward_client(id, origin[id]);
distance = get_distance_f(origin[id], cur_origin);
if(distance > 2) {
message_begin(0, 23);
write_byte(0);
engfunc(EngFunc_WriteCoord, origin[id][0]);
engfunc(EngFunc_WriteCoord, origin[id][1]);
engfunc(EngFunc_WriteCoord, origin[id][2]);
engfunc(EngFunc_WriteCoord, cur_origin[0]);
engfunc(EngFunc_WriteCoord, cur_origin[1]);
engfunc(EngFunc_WriteCoord, cur_origin[2]);
write_short(spriteid);
write_byte(0);
write_byte(10);
write_byte(255);
write_byte(50);
write_byte(0);
write_byte(random(256));
write_byte(random(256));
write_byte(random(256));
write_byte(255);
write_byte(0);
message_end();
}
}
else is_holding[id] = false;
prethink_counter[id] = 0;
}
return 1;
}
stock move_toward_client(id, Float:origin[3]) {
static Float:player_origin[3];
pev(id, pev_origin, player_origin);
origin[0] += (player_origin[0] > origin[0]) ? 1.0 : -1.0;
origin[1] += (player_origin[1] > origin[1]) ? 1.0 : -1.0;
origin[2] += (player_origin[2] > origin[2]) ? 1.0 : -1.0;
}
stock get_aim_origin(id, Float:origin[3]) {
new Float:start[3], Float:view_ofs[3];
pev(id, pev_origin, start);
pev(id, pev_view_ofs, view_ofs);
xs_vec_add(start, view_ofs, start);
new Float:dest[3];
pev(id, pev_v_angle, dest);
engfunc(EngFunc_MakeVectors, dest);
global_get(glb_v_forward, dest);
xs_vec_mul_scalar(dest, 9999.0, dest);
xs_vec_add(start, dest, dest);
engfunc(EngFunc_TraceLine, start, dest, 0, id, 0);
get_tr2(0, TR_vecEndPos, origin);
return 1;
}
stock give_item(id, weapon[]) {
if(!equal(weapon, "weapon_", 7)) return 0;
new ent = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, weapon));
if(!pev_valid(ent)) return 0;
set_pev(ent, pev_spawnflags, (1<<30));
dllfunc(DLLFunc_Spawn, ent);
if(!ExecuteHamB(Ham_AddPlayerItem, id, ent)) {
if(pev_valid(ent)) set_pev(ent, pev_flags, pev(ent, pev_flags) | (1<<26));
return 0;
}
ExecuteHamB(Ham_Item_AttachToPlayer, ent, id);
return 1;
}
stock set_user_bpammo(id, bron, ilosc) {
new offset;
switch(bron) {
case 18: offset = 377;
case 3, 28, 24: offset = 378;
case 20: offset = 379;
case 15, 22, 8, 13, 14, 27: offset = 380;
case 21, 5: offset = 381;
case 16, 12, 7: offset = 382;
case 11, 30: offset = 383;
case 26: offset = 384;
case 1: offset = 385;
case 17, 19, 23, 10: offset = 386;
case 25: offset = 387;
case 4: offset = 388;
case 9: offset = 389;
case 6: offset = 390;
default: return 0;
}
return set_pdata_int(id, offset, ilosc);
}
stock bool:is_user_steam(id) {
if(!is_user_connected(id) || is_user_bot(id) || is_user_hltv(id)) return false;
new sid[35]; get_user_authid(id, sid, 34);
new ip[64]; get_user_ip(id, ip, 63, 1);
if(strlen(sid) > 18) return false;
if(containi(sid, "VALVE_") != -1 || containi(sid, "STEAM_ID_LAN") != -1 || containi(sid, "STEAM_ID_PENDING") != -1 || containi(sid, "HLTV") != -1 || equal(sid, "STEAM_666:88:666")) return false;
if(containi(sid, ip) != -1) return false;
return true;
}
Użytkownik Obelix edytował ten post 18.04.2019 20:01


Dodatki SourceMod












