proszę o pomoc w modyfikacji klasy "Lowca" trochę próbowałem ale nie za bardzo się znam. Klasa ma zamiast scouta model łuku. Jak wybierzemy inną klasę ze scoutem to ma właśnie ten model łuku. Czy wystarczyłoby zmienić po prostu nazwę modeli ?
Lub może wykorzystać broń jaka nie będzie używana i zmienić tą linię ?
if(ma_klase[id]) //tutaj wstawiamy ma_klase lub ma_perk
{
if(weapon == CSW_SCOUT) //tutaj ustawiamy broń, jakiej model będziemy zmieniać
{
set_pev(id, pev_viewmodel2, "models/v_Shina_by_Oxigen.mdl")
//tu dajemy ścieżkę do nowego modeli v_
}
}
}
#include <amxmodx>
#include <amxmisc>
#include <codmod>
#include <engine>
#include <hamsandwich>
#include <fun>
#include <cstrike>
#include <fakemeta_util>
#include <xs>
new const nazwa[] = "Lowca";
new const opis[] = "";
new const bronie = (1<<CSW_P228)|(1<<CSW_SCOUT)|(1<<CSW_HEGRENADE)|(1<<CSW_SMOKEGRENADE)|(1<<CSW_FLASHBANG);
new const zdrowie = 0;
new const kondycja = 0;
new const inteligencja = 0;
new const wytrzymalosc = 0;
new ma_klase[33];
new const P_MODEL[] = "models/p_Shina_by_Oxigen.mdl"
new const V_MODEL[] = "models/v_Shina_by_Oxigen.mdl"
new const W_MODEL[] = "models/w_Shina_by_Oxigen.mdl"
new const ARROW_MODEL[] = "models/arrow.mdl"
#define BURN_CLASSNAME "flame"
#define BURN_MODEL "sprites/flame_burn01.spr"
#define POISON_MODEL "sprites/poison.spr"
// Settings
#define BASE_SPEED 1200
#define BONUS_SPEED 600
#define BURN_LIFE 10.0
#define BURN_PERIOD 2.0
#define BURN_DAMAGE 10.0
#define POISON_TIME 5.0
#define POISON_PERIOD 1.0
#define POISON_DAMAGE 5.0
#define SPEED_LOW_POISON 0.8
#define SLOW_POISON_TIME 3.0
#define NORMAL_DMG 45.0
#define SPEED_LOW_ICE 0.5
#define SLOW_ICE_TIME 7.0
#define EXPLODE_DAMAGE 90.0
#define EXPLODE_HITRADIUS 400
// Base number of arrows
#define NORMAL_AMMO 20
#define FIRE_AMMO 15
#define ICE_AMMO 10
#define POISON_AMMO 7
#define EXPLODE_AMMO 3
//Number of extra arrows
#define NORMAL_AMMO_BUY 5
#define FIRE_AMMO_BUY 4
#define ICE_AMMO_BUY 3
#define POISON_AMMO_BUY 2
#define EXPLODE_AMMO_BUY 1
// Cost of extra arrows
#define AMMO_COST 1000
#define NEXT_SHOT_TIME 0.97
new const ARROW_SHOOT[] = "crossbow_shoot1.wav"
new g_exp_sprid
new Float:g_start_time[33], Float:g_finish_time[33]
new Float:g_Burn[33], Float:g_Poisoned[33]
new g_slowed[33], g_pressed[33], Float:g_old_speed[33]
// Ammo
new g_ammo[33], g_normal_ammo[33], g_fire_ammo[33], g_ice_ammo[33], g_poison_ammo[33], g_explode_ammo[33]
// Player variables
new g_HasBow[33] // whether player has bow
new bool:draw_wpn[33]
new g_bow_mode[33], g_dmg_mode[33]
new g_MaxPlayers
// Render effects debug
new g_FrozenRenderingFx[33]
new Float:g_FrozenRenderingColor[33][3]
new g_FrozenRenderingRender[33]
new Float:g_FrozenRenderingAmount[33]
// Message ID's
new g_MsgDamage, g_msgBarTime
enum {
anim_idle,
anim_shot1,
anim_shot2,
anim_reload,
anim_draw
}
enum
{
NORMAL_MODE = 1,
FIRE_MODE = 2,
ICE_MODE = 3,
POISON_MODE = 4,
EXPLODE_MODE = 5
}
enum
{
dmg_fire = 1,
dmg_poison = 2
}
// Plugin precache
public plugin_precache()
{
// Models
precache_model(P_MODEL)
precache_model(V_MODEL)
precache_model(W_MODEL)
precache_model(ARROW_MODEL)
precache_model(BURN_MODEL)
precache_model(POISON_MODEL)
// Sounds
precache_sound(ARROW_SHOOT)
//precache_sound(GRENADE_DRAW)
precache_sound("weapons/357_cock1.wav")
g_exp_sprid = engfunc(EngFunc_PrecacheModel, "sprites/zerogxplode.spr")
}
public plugin_init()
{
register_plugin(nazwa, "1.0", "amxx.pl");
cod_register_class(nazwa, opis, bronie, zdrowie, kondycja, inteligencja, wytrzymalosc);
RegisterHam(Ham_Spawn, "player", "fwSpawn_Grawitacja", 1);
RegisterHam(Ham_Spawn, "player", "give_bow", 2);
register_event("Damage", "Damage_Wyrzucenie", "b", "2!=0");
register_event("CurWeapon", "Event_CurrentWeapon", "be", "1=1")
register_event("HLTV", "Event_NewRound", "a", "1=0", "2=0");
register_event("CurWeapon", "CurWeapon", "be", "1=1")
// Forwards
RegisterHam(Ham_Killed, "player", "fw_PlayerKilled")
RegisterHam(Ham_Weapon_PrimaryAttack, "weapon_scout", "fw_bow_PrimaryAttack")
RegisterHam(Ham_Weapon_SecondaryAttack, "weapon_scout", "fw_bow_SecondaryAttack")
RegisterHam(Ham_Weapon_Reload, "weapon_scout", "fw_bow_Reload")
RegisterHam(Ham_Item_Deploy, "weapon_scout", "fw_bow_Deploy_Post", 1)
register_think(BURN_CLASSNAME, "BurnThink")
register_forward(FM_CmdStart, "fw_CmdStart")
register_forward(FM_UpdateClientData, "fw_UpdateClientData_Post", 1)
register_forward(FM_Touch, "fw_touch")
register_clcmd("drop","dropcmd")
// Messages
g_MsgDamage = get_user_msgid("Damage")
g_msgBarTime = get_user_msgid("BarTime")
register_clcmd("say /kup", "money")
register_clcmd("buyammo1", "buy_ammo")
g_MaxPlayers = get_maxplayers()
}
public cod_class_enabled(id)
{
client_print(id, print_chat, "Klasa zostala stworzona przez SKoRPiuS'a");
if(!(get_user_flags(id) & ADMIN_LEVEL_G))
{
client_print(id, print_chat, "[Lowca] Nie masz uprawnien, aby uzywac tej klasy.")
return COD_STOP;
}
entity_set_float(id, EV_FL_gravity, 500.0/800.0);
give_item(id, "weapon_hegrenade");
give_item(id, "weapon_flashbang");
give_item(id, "weapon_flashbang");
give_item(id, "weapon_smokegrenade");
cs_set_user_defuse(id, 1);
ma_klase[id] = true;
g_HasBow[id] = true;
return COD_CONTINUE;
}
public cod_class_disabled(id)
{
entity_set_float(id, EV_FL_gravity, 1.0);
ma_klase[id] = false;
g_HasBow[id] = false;
}
public fwSpawn_Grawitacja(id)
{
if(ma_klase[id])
entity_set_float(id, EV_FL_gravity, 500.0/800.0);
}
public Damage_Wyrzucenie(id)
{
new idattacker = get_user_attacker(id);
if(!is_user_alive(idattacker))
return;
if(!ma_klase[idattacker])
return;
if(random_num(1, 6) != 1)
return;
client_cmd(id, "drop");
}
public money(id)
{
cs_set_user_money(id, 16000)
}
public Event_NewRound()
{
for (new i = 0; i < get_maxplayers(); i++)
{
set_user_rendering(i, kRenderFxGlowShell, 0, 0, 0, kRenderNormal, 25)
g_Poisoned[i]=0.0
g_Burn[i]=0.0
g_slowed[i] = false
}
}
public dropcmd(id) {
if(g_HasBow[id] && get_user_weapon(id) == CSW_SCOUT) {
new Float:Aim[3],Float:origin[3]
VelocityByAim(id, 64, Aim)
entity_get_vector(id,EV_VEC_origin,origin)
origin[0] += Aim[0]
origin[1] += Aim[1]
new bow = create_entity("info_target")
entity_set_string(bow,EV_SZ_classname,"bow")
entity_set_model(bow,W_MODEL)
entity_set_size(bow,Float:{-2.0,-2.0,-2.0},Float:{5.0,5.0,5.0})
entity_set_int(bow,EV_INT_solid,1)
entity_set_int(bow,EV_INT_movetype,6)
entity_set_vector(bow,EV_VEC_origin,origin)
g_HasBow[id] = false
remowegun(id)
return PLUGIN_HANDLED
}
return PLUGIN_CONTINUE
}
// remove gun and save all guns
public remowegun(id) {
new wpnList[32]
new number
get_user_weapons(id,wpnList,number)
for (new i = 0;i < number ;i++) {
if (wpnList[i] == CSW_SCOUT) {
fm_strip_user_gun(id, wpnList[i])
}
}
}
public buy_ammo(id)
{
if(!g_HasBow[id])
return PLUGIN_CONTINUE
if((cs_get_user_buyzone(id)) && (ma_klase[id]))
{
give_ammo(id)
return PLUGIN_HANDLED
}
if(cs_get_user_money(id) <= AMMO_COST)
{
client_print(id, print_chat, "Kupiles Belty za 16 000$")
return PLUGIN_CONTINUE
}
give_ammo(id)
return PLUGIN_HANDLED
}
public give_ammo(id)
{
if(g_normal_ammo[id] == NORMAL_AMMO && g_fire_ammo[id] == FIRE_AMMO && g_ice_ammo[id] == ICE_AMMO && g_poison_ammo[id] == POISON_AMMO && g_explode_ammo[id] == EXPLODE_AMMO)
return PLUGIN_CONTINUE
if(ma_klase[id])
cs_set_user_money(id, cs_get_user_money(id) - AMMO_COST)
g_normal_ammo[id] += NORMAL_AMMO_BUY
g_fire_ammo[id] += FIRE_AMMO_BUY
g_ice_ammo[id] += ICE_AMMO_BUY
g_poison_ammo[id] += POISON_AMMO_BUY
g_explode_ammo[id] += EXPLODE_AMMO_BUY
if(g_normal_ammo[id] > NORMAL_AMMO) g_normal_ammo[id] = NORMAL_AMMO
if(g_fire_ammo[id] > FIRE_AMMO) g_fire_ammo[id] = FIRE_AMMO
if(g_ice_ammo[id] > ICE_AMMO) g_ice_ammo[id] = ICE_AMMO
if(g_poison_ammo[id] > POISON_AMMO) g_poison_ammo[id] = POISON_AMMO
if(g_explode_ammo[id] > EXPLODE_AMMO) g_explode_ammo[id] = EXPLODE_AMMO
update_ammo(id)
return PLUGIN_CONTINUE
}
//play anim
public playanim(player,anim)
{
set_pev(player, pev_weaponanim, anim)
message_begin(MSG_ONE, SVC_WEAPONANIM, {0, 0, 0}, player)
write_byte(anim)
write_byte(pev(player, pev_body))
message_end()
}
// Client connected
public client_connect(id)
{
// Reset all
g_HasBow[id] = false
g_finish_time[id] = 0.0
}
// Current weapon player is holding
public Event_CurrentWeapon(id)
{
if (is_user_bot(id))
return
if(!is_user_connected(id))
return
if(ma_klase[id])
return
// Read weapon ID
new weaponID = read_data(2)
if (weaponID == CSW_SCOUT)
{
if (g_HasBow[id])
{
if(!draw_wpn[id])
{
playanim(id, anim_draw)
update_ammo(id)
//emit_sound(id, CHAN_WEAPON, GRENADE_DRAW, VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
// View model
entity_set_string(id, EV_SZ_viewmodel, V_MODEL)
// Player model
entity_set_string(id, EV_SZ_weaponmodel, P_MODEL)
draw_wpn[id] = true
}
}
else
{
// View model
entity_set_string(id, EV_SZ_viewmodel, "models/v_scout.mdl")
// Player model
entity_set_string(id, EV_SZ_weaponmodel, "models/p_scout.mdl")
}
}
else
{
draw_wpn[id] = false
}
}
public remove_bow() {
new nextitem = find_ent_by_class(-1, "bow")
while ((nextitem = find_ent_by_class(-1, "bow")) != 0) {
remove_entity(nextitem)
}
return PLUGIN_CONTINUE
}
// Player killed
public fw_PlayerKilled(victim, attacker, shouldgib)
{
if (g_HasBow[victim])
{
// Reset all
g_HasBow[victim] = false
set_user_rendering(victim, kRenderFxGlowShell, 0, 0, 0, kRenderNormal, 25)
// Remove screen's bar
message_begin(MSG_ONE, g_msgBarTime, _, victim)
write_byte(0) // time
write_byte(0) // unknown
message_end()
remowegun(victim)
}
}
public give_bow(id)
{
give_weapon(id)
g_bow_mode[id] = NORMAL_MODE
g_normal_ammo[id] = NORMAL_AMMO
g_fire_ammo[id] = FIRE_AMMO
g_ice_ammo[id] = ICE_AMMO
g_poison_ammo[id] = POISON_AMMO
g_explode_ammo[id] = EXPLODE_AMMO
ma_klase[id] = true;
}
//give wpn
public give_weapon(id){
g_HasBow[id] = true
update_ammo(id)
}
public fw_bow_PrimaryAttack(Weapon)
{
new Player = get_pdata_cbase(Weapon, 41, 4)
if (g_HasBow[Player])
return HAM_SUPERCEDE
return HAM_IGNORED
}
public fw_bow_SecondaryAttack(Weapon)
{
new Player = get_pdata_cbase(Weapon, 41, 4)
if (g_HasBow[Player])
return HAM_SUPERCEDE
return HAM_IGNORED
}
public fw_bow_Reload(Weapon)
{
new Player = get_pdata_cbase(Weapon, 41, 4)
if (g_HasBow[Player])
return HAM_SUPERCEDE
return HAM_IGNORED
}
public fw_bow_Deploy_Post(Weapon)
{
new Player = get_pdata_cbase(Weapon, 41, 4)
update_ammo(Player)
}
// Command start
public fw_CmdStart(id, uc_handle, seed)
{
if(!g_HasBow[id])
return FMRES_IGNORED
static CurButton, OldButton
CurButton = get_uc(uc_handle, UC_Buttons)
OldButton = (pev(id, pev_oldbuttons) & IN_ATTACK)
if(get_gametime() - g_finish_time[id] > NEXT_SHOT_TIME)
{
// Attack1 button pressed
if(CurButton & IN_ATTACK && !OldButton)
{
if(get_user_weapon(id) != CSW_SCOUT)
return FMRES_IGNORED
if((g_bow_mode[id] == NORMAL_MODE && g_normal_ammo[id] <= 0) || (g_bow_mode[id] == FIRE_MODE && g_fire_ammo[id] <= 0) || (g_bow_mode[id] == ICE_MODE && g_ice_ammo[id] <= 0) || (g_bow_mode[id] == POISON_MODE && g_poison_ammo[id] <= 0) || (g_bow_mode[id] == EXPLODE_MODE && g_explode_ammo[id] <= 0))
return FMRES_IGNORED
g_start_time[id] = get_gametime()
// A bar appears in his screen
message_begin(MSG_ONE_UNRELIABLE, g_msgBarTime, _, id)
write_byte(3) // time
write_byte(0) // unknown
message_end()
g_pressed[id] = true
}
if(CurButton & IN_ATTACK && OldButton)
{
if((g_bow_mode[id] == NORMAL_MODE && g_normal_ammo[id] <= 0) || (g_bow_mode[id] == FIRE_MODE && g_fire_ammo[id] <= 0) || (g_bow_mode[id] == ICE_MODE && g_ice_ammo[id] <= 0) || (g_bow_mode[id] == POISON_MODE && g_poison_ammo[id] <= 0) || (g_bow_mode[id] == EXPLODE_MODE && g_explode_ammo[id] <= 0))
return FMRES_IGNORED
if(!g_pressed[id])
return FMRES_IGNORED
if(get_user_weapon(id) != CSW_SCOUT)
{
g_finish_time[id] = get_gametime()
FireArrow(id)
// Remove screen's bar
message_begin(MSG_ONE, g_msgBarTime, _, id)
write_byte(0) // time
write_byte(0) // unknown
message_end()
g_pressed[id] = false
}
}
if(!(CurButton & IN_ATTACK) && OldButton)
{
if(get_user_weapon(id) != CSW_SCOUT)
return FMRES_IGNORED
if((g_bow_mode[id] == NORMAL_MODE && g_normal_ammo[id] <= 0) || (g_bow_mode[id] == FIRE_MODE && g_fire_ammo[id] <= 0) || (g_bow_mode[id] == ICE_MODE && g_ice_ammo[id] <= 0) || (g_bow_mode[id] == POISON_MODE && g_poison_ammo[id] <= 0) || (g_bow_mode[id] == EXPLODE_MODE && g_explode_ammo[id] <= 0))
return FMRES_IGNORED
if(!g_pressed[id])
return FMRES_IGNORED
g_finish_time[id] = get_gametime()
FireArrow(id)
// Remove screen's bar
message_begin(MSG_ONE, g_msgBarTime, _, id)
write_byte(0) // time
write_byte(0) // unknown
message_end()
g_pressed[id] = false
}
}
if((CurButton & IN_ATTACK2) && !(pev(id, pev_oldbuttons) & IN_ATTACK2))
{
if(get_user_weapon(id) != CSW_SCOUT)
return FMRES_IGNORED
if(!g_pressed[id])
{
cmdMenu(id)
}
}
return FMRES_HANDLED
}
//block anim standard wpn
public fw_UpdateClientData_Post(id, sendweapons, cd_handle)
{
if (!is_user_alive(id))
return FMRES_IGNORED
// Block default sounds
if (get_user_weapon(id) == CSW_SCOUT && g_HasBow[id])
{
set_cd(cd_handle, CD_flNextAttack, halflife_time() + 0.001 );
}
return FMRES_HANDLED
}
// Fire gremade
public FireArrow(id)
{
// Set animation
playanim(id, anim_shot1)
// Get origin. angle and velocity
new velocity[33]
new Float:fAngle[3], Float:fVelocity[3]
pev(id, pev_v_angle, fAngle)
// Create ent
new arrow = create_entity("info_target")
// Not grenade
if (!arrow) return PLUGIN_HANDLED
// Classname
entity_set_string(arrow, EV_SZ_classname, "bow_arrow")
// Model
entity_set_model(arrow, ARROW_MODEL)
if(g_bow_mode[id] == NORMAL_MODE)
{
set_rendering(arrow, kRenderFxGlowShell, 255, 255, 255, kRenderNormal, 25)
g_normal_ammo[id]--
}
else if(g_bow_mode[id] == FIRE_MODE)
{
set_rendering(arrow, kRenderFxGlowShell, 255, 0, 0, kRenderNormal, 25)
g_fire_ammo[id]--
}
else if(g_bow_mode[id] == ICE_MODE)
{
set_rendering(arrow, kRenderFxGlowShell, 0, 0, 255, kRenderNormal, 25)
g_ice_ammo[id]--
}
else if(g_bow_mode[id] == POISON_MODE)
{
set_rendering(arrow, kRenderFxGlowShell, 0, 255, 0, kRenderNormal, 25)
g_poison_ammo[id]--
}
else if(g_bow_mode[id] == EXPLODE_MODE)
{
set_rendering(arrow, kRenderFxGlowShell, 150, 105, 0, kRenderNormal, 25)
g_explode_ammo[id]--
}
update_ammo(id)
new Float:vOrigin[3],Float:vUp[3]
pev(id, pev_origin, vOrigin)
global_get(glb_v_up, vUp)
new up = 17
vOrigin[0] = vOrigin[0] + vUp[0] * up
vOrigin[1] = vOrigin[1] + vUp[1] * up
vOrigin[2] = vOrigin[2] + vUp[2] * up
// Origin
entity_set_origin(arrow, vOrigin)
// Angles
entity_set_vector(arrow, EV_VEC_angles, fAngle)
// Size
new Float:MinBox[3] = {-1.0, -1.0, -1.0}
new Float:MaxBox[3] = {1.0, 1.0, 1.0}
entity_set_vector(arrow, EV_VEC_mins, MinBox)
entity_set_vector(arrow, EV_VEC_maxs, MaxBox)
// Interaction
entity_set_int(arrow, EV_INT_solid, SOLID_SLIDEBOX)
// Movetype
entity_set_int(arrow, EV_INT_movetype, MOVETYPE_TOSS)
// Owner
entity_set_edict(arrow, EV_ENT_owner, id)
// Velocity
new Float: holdtime[33]
new Float: mnoji[33]
holdtime[id] = g_finish_time[id] - g_start_time[id]
if(holdtime[id] < 1.0) holdtime[id] = 1.0
if(holdtime[id] > 3.0) holdtime[id] = 3.0
mnoji[id] = BASE_SPEED + holdtime[id] * BONUS_SPEED
velocity[id] = floatround(mnoji[id],floatround_round)
VelocityByAim(id, velocity[id], fVelocity)
entity_set_vector(arrow, EV_VEC_velocity, fVelocity)
// Launch sound
emit_sound(arrow, CHAN_WEAPON, ARROW_SHOOT, VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
return PLUGIN_CONTINUE
}
// We hit something!!!
public pfn_touch(ptr, ptd)
{
// If ent is valid
if (pev_valid(ptr))
{
// Get classnames
static classname[32], classnameptd[32]
pev(ptr, pev_classname, classname, 31)
// Our ent
if(equal(classname, "bow_arrow"))
{
// Get it's origin
new Float:Origin[3]
pev(ptr, pev_origin, Origin)
new owner = pev(ptr, pev_owner)
if(g_bow_mode[owner] == EXPLODE_MODE)
{
// Explosion
engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, Origin, 0)
write_byte(TE_EXPLOSION)
engfunc(EngFunc_WriteCoord, Origin[0])
engfunc(EngFunc_WriteCoord, Origin[1])
engfunc(EngFunc_WriteCoord, Origin[2])
write_short(g_exp_sprid)
write_byte(40)
write_byte(30)
write_byte(0)
message_end()
check_radius_damage(ptr, owner)
}
if(is_user_alive(ptd))
{
if(cs_get_user_team(ptd) != cs_get_user_team(owner))
{
g_old_speed[ptd] = get_user_maxspeed(ptd)
if(g_bow_mode[owner] == NORMAL_MODE)
{
ExecuteHamB(Ham_TakeDamage, ptd, ptr, owner, NORMAL_DMG, DMG_BULLET)
}
else if(g_bow_mode[owner] == FIRE_MODE)
{
g_dmg_mode[ptd] = dmg_fire
CreateBurn(ptd, owner)
}
else if(g_bow_mode[owner] == ICE_MODE)
{
if(!g_slowed[ptd] && !g_Burn[ptd])
{
g_FrozenRenderingFx[ptd] = pev(ptd, pev_renderfx)
pev(ptd, pev_rendercolor, g_FrozenRenderingColor[ptd])
g_FrozenRenderingRender[ptd] = pev(ptd, pev_rendermode)
pev(ptd, pev_renderamt, g_FrozenRenderingAmount[ptd])
set_user_rendering(ptd, kRenderFxGlowShell, 0, 100, 200, kRenderNormal, 25)
set_user_maxspeed(ptd, get_user_maxspeed(ptd) * SPEED_LOW_ICE)
g_slowed[ptd] = true
set_task(SLOW_ICE_TIME, "make_speed", ptd, _, _, "a", 1)
message_begin(MSG_ONE_UNRELIABLE, g_MsgDamage, _, ptd)
write_byte(0) // damage save
write_byte(0) // damage take
write_long(DMG_DROWN) // damage type - DMG_FREEZE
write_coord(0) // x
write_coord(0) // y
write_coord(0) // z
message_end()
}
}
else if(g_bow_mode[owner] == POISON_MODE)
{
if(!g_slowed[ptd])
{
set_user_maxspeed(ptd, get_user_maxspeed(ptd) * SPEED_LOW_POISON)
g_slowed[ptd] = true
set_task(SLOW_POISON_TIME, "make_speed", ptd, _, _, "a", 1)
g_dmg_mode[ptd] = dmg_poison
CreateBurn(ptd, owner)
}
}
}
}
// We hit breakable
if(pev_valid(ptd))
{
pev(ptd, pev_classname, classnameptd, 31)
if (equali(classnameptd, "func_breakable"))
{
// Destroy it
force_use(ptr,ptd)
}
}
set_pev(ptr, pev_flags, FL_KILLME)
}
}
if(is_valid_ent(ptr))
{
new classname[32]
entity_get_string(ptr,EV_SZ_classname,classname,31)
if(equal(classname, "bow"))
{
if(is_valid_ent(ptd))
{
new id = ptd
if(id > 0 && id < 34)
{
if(allowed_toucher(id))
{
// Pick up weapon
give_weapon(id)
remove_entity(ptr)
}
}
}
}
}
}
public CreateBurn(id, attacker)
{
if(g_Burn[id] || g_Poisoned[id])
return
if(g_dmg_mode[id] == dmg_fire)
{
new ent=CreateAnimationSprite(attacker, BURN_CLASSNAME, BURN_MODEL, 1.0, 10.0)
set_pev(ent, pev_solid, SOLID_NOT)
set_pev(ent, pev_movetype, MOVETYPE_FOLLOW)
set_pev(ent, pev_aiment, id)
set_pev(ent, pev_fuser2, get_gametime()+BURN_LIFE)
g_Burn[id]=get_gametime()+BURN_PERIOD
}
if(g_dmg_mode[id] == dmg_poison)
{
new ent=CreateAnimationSprite(attacker, BURN_CLASSNAME, POISON_MODEL, 1.0, 10.0)
set_pev(ent, pev_solid, SOLID_NOT)
set_pev(ent, pev_movetype, MOVETYPE_FOLLOW)
set_pev(ent, pev_aiment, id)
set_pev(ent, pev_fuser2, get_gametime()+POISON_TIME)
g_Poisoned[id]=get_gametime()+POISON_PERIOD
}
}
public BurnThink(ent)
{
if(!pev_valid(ent))
return
static Float:life, aim_ent
pev(ent,pev_fuser2, life)
aim_ent=pev(ent, pev_aiment)
if(g_dmg_mode[aim_ent] == dmg_fire)
{
if(get_gametime()>life||!is_user_alive(aim_ent)/*||!zp_get_user_zombie(aim_ent)*/)
{
g_Burn[aim_ent]=0.0
fm_remove_entity(ent)
return
}
if(get_gametime()>g_Burn[aim_ent])
{
ExecuteHamB(Ham_TakeDamage, aim_ent , ent ,pev(ent, pev_owner), BURN_DAMAGE, DMG_BURN)
g_Burn[aim_ent]=get_gametime()+BURN_PERIOD
}
}
if(g_dmg_mode[aim_ent] == dmg_poison)
{
if(get_gametime()>life||!is_user_alive(aim_ent)/*||!zp_get_user_zombie(aim_ent)*/)
{
g_Poisoned[aim_ent]=0.0
fm_remove_entity(ent)
return
}
if(get_gametime()>g_Poisoned[aim_ent])
{
ExecuteHamB(Ham_TakeDamage, aim_ent , ent ,pev(ent, pev_owner), POISON_DAMAGE, DMG_ACID)
g_Poisoned[aim_ent]=get_gametime()+POISON_PERIOD
}
}
}
public make_speed(id)
{
if(is_user_alive(id) && g_slowed[id])
{
g_slowed[id] = false
set_user_maxspeed(id, g_old_speed[id])
fm_set_rendering_float(id, g_FrozenRenderingFx[id], g_FrozenRenderingColor[id], g_FrozenRenderingRender[id], g_FrozenRenderingAmount[id])
}
}
public check_radius_damage(ent, attacker)
{
for(new i = 0; i < g_MaxPlayers; i++)
{
if(!is_user_alive(i))
continue
if(cs_get_user_team(attacker) == cs_get_user_team(i))
continue
if(entity_range(ent, i) > EXPLODE_HITRADIUS)
continue
Do_TakeDamage(ent, i, attacker, can_see_fm(ent, i))
}
}
public Do_TakeDamage(Ent, Victim, Attacker, can_see)
{
static Float:Damage, Float:CurrentDis
CurrentDis = entity_range(Ent, Victim)
Damage = EXPLODE_DAMAGE - ((CurrentDis / EXPLODE_HITRADIUS) * EXPLODE_DAMAGE)
if(Damage > 0)
{
static WeaponEnt
WeaponEnt = fm_get_user_weapon_entity(Attacker, CSW_HEGRENADE)
if(!pev_valid(WeaponEnt))
WeaponEnt = 0
if(!can_see)
Damage /= 2
ExecuteHamB(Ham_TakeDamage, Victim, WeaponEnt, Attacker, Damage, DMG_BULLET)
}
}
public update_ammo(id)
{
if(!is_user_alive(id))
return
if(g_bow_mode[id] == NORMAL_MODE)
{
g_ammo[id] = g_normal_ammo[id]
}
else if(g_bow_mode[id] == FIRE_MODE)
{
g_ammo[id] = g_fire_ammo[id]
}
else if(g_bow_mode[id] == ICE_MODE)
{
g_ammo[id] = g_ice_ammo[id]
}
else if(g_bow_mode[id] == POISON_MODE)
{
g_ammo[id] = g_poison_ammo[id]
}
else if(g_bow_mode[id] == EXPLODE_MODE)
{
g_ammo[id] = g_explode_ammo[id]
}
static weapon_ent; weapon_ent = fm_find_ent_by_owner(-1, "weapon_scout", id)
if(pev_valid(weapon_ent)) cs_set_weapon_ammo(weapon_ent, 1)
cs_set_user_bpammo(id, CSW_SCOUT, g_ammo[id])
engfunc(EngFunc_MessageBegin, MSG_ONE_UNRELIABLE, get_user_msgid("CurWeapon"), {0, 0, 0}, id)
write_byte(1)
write_byte(CSW_SCOUT)
write_byte(-1)
message_end()
set_task(0.1, "hud_debug", id)
}
public hud_debug(id)
{
engfunc(EngFunc_MessageBegin, MSG_ONE_UNRELIABLE, get_user_msgid("CurWeapon"), {0, 0, 0}, id)
write_byte(1)
write_byte(CSW_SCOUT)
write_byte(-1)
message_end()
}
public cmdMenu(id) {
new i_Menu = menu_create("\rWybierz Strzale", "menu_handler");
menu_additem(i_Menu, "\wZwykle Strzaly", "1", 0);
menu_additem(i_Menu, "\wOgnisne Strzaly", "2", 0);
menu_additem(i_Menu, "\wLodowe Strzaly", "3", 0);
menu_additem(i_Menu, "\wZatrute Strzaly", "4", 0);
menu_additem(i_Menu, "\wBombowe Strzaly", "5", 0);
menu_setprop(i_Menu, MPROP_EXITNAME, "Exit");
menu_display(id, i_Menu, 0)
}
public menu_handler(id, menu, item) {
if( item < 0 ) return PLUGIN_CONTINUE;
new cmd[3], access, callback;
menu_item_getinfo(menu, item, access, cmd,2,_,_, callback);
new Choise = str_to_num(cmd)
switch (Choise) {
case 1: {
g_bow_mode[id] = NORMAL_MODE
update_ammo(id)
}
case 2: {
g_bow_mode[id] = FIRE_MODE
update_ammo(id)
}
case 3: {
g_bow_mode[id] = ICE_MODE
update_ammo(id)
}
case 4: {
g_bow_mode[id] = POISON_MODE
update_ammo(id)
}
case 5: {
g_bow_mode[id] = EXPLODE_MODE
update_ammo(id)
}
}
return PLUGIN_HANDLED;
}
// Allowed toucher
stock allowed_toucher(player)
{
if (g_HasBow[player])
return false
return true
}
stock print(const id, const input[], any:...)
{
new iCount = 1, iPlayers[32]
static szMsg[191]
vformat(szMsg, charsmax(szMsg), input, 3)
replace_all(szMsg, 190, "^x04", "^4") // green txt
replace_all(szMsg, 190, "^x01", "^1") // orange txt
replace_all(szMsg, 190, "^x03", "^3") // team txt
replace_all(szMsg, 190, "^x00", "^0") // team txt
if(id) iPlayers[0] = id
else get_players(iPlayers, iCount, "ch")
for (new i = 0; i < iCount; i++)
{
if (is_user_connected(iPlayers[i]))
{
message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("SayText"), _, iPlayers[i])
write_byte(iPlayers[i])
write_string(szMsg)
message_end()
}
}
}
stock CreateAnimationSprite(owner, const classname[], const model[], Float:scale, Float:framerate)
{
new ent=fm_create_entity("env_sprite")
set_pev(ent, pev_framerate, framerate)
set_pev(ent, pev_model, model)
dllfunc(DLLFunc_Spawn, ent)
set_pev(ent, pev_classname, classname)
set_pev(ent, pev_owner, owner)
fm_entity_set_model(ent, model)
fm_set_rendering(ent, kRenderFxNoDissipation, 255, 255, 255, kRenderGlow, 255)
set_pev(ent, pev_framerate, framerate)
set_pev(ent, pev_scale, scale)
return ent
}
public can_see_fm(entindex1, entindex2)
{
if (!entindex1 || !entindex2)
return false
if (pev_valid(entindex1) && pev_valid(entindex1))
{
new flags = pev(entindex1, pev_flags)
if (flags & EF_NODRAW || flags & FL_NOTARGET)
{
return 0
}
new Float:lookerOrig[3]
new Float:targetBaseOrig[3]
new Float:targetOrig[3]
new Float:temp[3]
pev(entindex1, pev_origin, lookerOrig)
pev(entindex1, pev_view_ofs, temp)
lookerOrig[0] += temp[0]
lookerOrig[1] += temp[1]
lookerOrig[2] += temp[2]
pev(entindex2, pev_origin, targetBaseOrig)
pev(entindex2, pev_view_ofs, temp)
targetOrig[0] = targetBaseOrig [0] + temp[0]
targetOrig[1] = targetBaseOrig [1] + temp[1]
targetOrig[2] = targetBaseOrig [2] + temp[2]
engfunc(EngFunc_TraceLine, lookerOrig, targetOrig, 0, entindex1, 0) // checks the had of seen player
if (get_tr2(0, TraceResult:TR_InOpen) && get_tr2(0, TraceResult:TR_InWater))
{
return 0
}
else
{
new Float:flFraction
get_tr2(0, TraceResult:TR_flFraction, flFraction)
if (flFraction == 1.0 || (get_tr2(0, TraceResult:TR_pHit) == entindex2))
{
return 1
}
else
{
targetOrig[0] = targetBaseOrig [0]
targetOrig[1] = targetBaseOrig [1]
targetOrig[2] = targetBaseOrig [2]
engfunc(EngFunc_TraceLine, lookerOrig, targetOrig, 0, entindex1, 0) // checks the body of seen player
get_tr2(0, TraceResult:TR_flFraction, flFraction)
if (flFraction == 1.0 || (get_tr2(0, TraceResult:TR_pHit) == entindex2))
{
return 1
}
else
{
targetOrig[0] = targetBaseOrig [0]
targetOrig[1] = targetBaseOrig [1]
targetOrig[2] = targetBaseOrig [2] - 17.0
engfunc(EngFunc_TraceLine, lookerOrig, targetOrig, 0, entindex1, 0)
get_tr2(0, TraceResult:TR_flFraction, flFraction)
if (flFraction == 1.0 || (get_tr2(0, TraceResult:TR_pHit) == entindex2))
{
return 1
}
}
}
}
}
return 0
}
stock fm_set_rendering_float(entity, fx = kRenderFxNone, Float:color[3], render = kRenderNormal, Float:amount = 16.0)
{
set_pev(entity, pev_renderfx, fx)
set_pev(entity, pev_rendercolor, color)
set_pev(entity, pev_rendermode, render)
set_pev(entity, pev_renderamt, amount)
}
public CurWeapon(id)
{
new weapon = read_data(2);
if(ma_klase[id]) //tutaj wstawiamy ma_klase lub ma_perk
{
if(weapon == CSW_SCOUT) //tutaj ustawiamy broń, jakiej model będziemy zmieniać
{
set_pev(id, pev_viewmodel2, "models/v_Shina_by_Oxigen.mdl")
//tu dajemy ścieżkę do nowego modeli v_
}
}
}
/* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
*{\\ rtf1\\ ansi\\ deff0{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang1045\\ f0\\ fs16 \n\\ par }
*/
Użytkownik AjZiS edytował ten post 01.12.2019 13:50


Dodatki SourceMod













