|
Senior Member
Join Date: Apr 2019
Location: Iran
|

07-05-2019
, 13:19
Re: DropWeaponSlot
|
#3
|
Quote:
Originally Posted by thEsp
Code:
#define m_rpgPlayerItems_Slot0 367
#define m_iId 43
|
Thanks for reply but , after i added this to plugin when i buy the "Magical Bow" from extra items server crashes!!
Plugin Code:
PHP Code:
#include <amxmodx> #include <cstrike> #include <engine> #include <fakemeta> #include <fakemeta_util> #include <fun> #include <hamsandwich> #include <xs> #include <zombieplague>
#if AMXX_VERSION_NUM < 183 #include <colorchat> #define Red print_team_red #define Blue print_team_blue #define Grey print_team_grey #define DontChange print_team_default #endif
// Weapon/Arrow models new const P_MODEL[] = "models/bow/p_Shina_by_Oxigen.mdl" new const V_MODEL[] = "models/bow/v_Shina_by_Oxigen.mdl" new const W_MODEL[] = "models/bow/w_Shina_by_Oxigen.mdl" new const ARROW_MODEL[] = "models/bow/arrow.mdl"
#define BURN_CLASSNAME "flame" #define BURN_MODEL "sprites/bow/flame_burn01.spr" #define POISON_MODEL "sprites/bow/poison.spr"
#define m_rpgPlayerItems_Slot0 367 #define m_iId 43
// Settings #define SWITCH_TIME 0.5
#define BASE_SPEED 400 #define BONUS_SPEED 500
#define BURN_LIFE 10.0 #define BURN_PERIOD 2.0 #define BURN_DAMAGE 50.0
#define NORMAL_DMG 100.0
#define SPEED_LOW_ICE 0.5 #define SLOW_ICE_TIME 7.0
#define EXPLODE_DAMAGE 500 #define EXPLODE_HITRADIUS 400
// Base number of arrows #define NORMAL_AMMO 20 #define FIRE_AMMO 15 #define ICE_AMMO 10 #define EXPLODE_AMMO 3
//Number of extra arrows #define NORMAL_AMMO_BUY 5 #define FIRE_AMMO_BUY 4 #define ICE_AMMO_BUY 3 #define EXPLODE_AMMO_BUY 1
// Cost of extra arrows #define AMMO_COST 10 #define NEXT_SHOT_TIME 0.97
// Fire sound 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_explode_ammo[33]
// Player variables new g_HasBow[33] // whether player has bow new bool:draw_wpn[33] new Float:lastSwitchTime[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 = 4, ICE_MODE = 3, EXPLODE_MODE = 2 }
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") }
// ITEM new g_itemid
// Plugin init public plugin_init() { // Register plugin register_plugin("PLUGIN", "VERSION", "AUTHOR") // Events register_event("CurWeapon", "Event_CurrentWeapon", "be", "1=1") register_event("HLTV", "Event_NewRound", "a", "1=0", "2=0"); // 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")
g_itemid = zp_register_extra_item("Magical Bow",6, ZP_TEAM_HUMAN)
g_MaxPlayers = get_maxplayers() }
public zp_extra_item_selected(player, itemid) { if (itemid == g_itemid || is_user_alive(player)) { give_bow(player) } return PLUGIN_CONTINUE }
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(is_user_alive(id)) { give_ammo(id) return PLUGIN_HANDLED }
if(zp_get_user_ammo_packs(id) <= AMMO_COST) { 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_explode_ammo[id] == EXPLODE_AMMO) { return PLUGIN_CONTINUE }
zp_set_user_ammo_packs(id, zp_get_user_ammo_packs(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_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_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 // 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_explode_ammo[id] = EXPLODE_AMMO }
//give weapon public give_weapon(id){ g_HasBow[id] = true DropWeaponSlot(id, 1) give_item(id, "weapon_scout") 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] || !is_user_alive(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] == 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] == 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] == 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 ( get_gametime ( ) - lastSwitchTime [ id ] < SWITCH_TIME || (OldButton & IN_ATTACK2)) return
if(!g_pressed[id]) { if (is_user_alive(id))
switch(g_bow_mode[id]) { case 1: { g_bow_mode[id]= 4 client_print(id,print_center,"Fire Mode") update_ammo(id) } case 2: { g_bow_mode[id]= 1 client_print(id,print_center,"Normal Mode") update_ammo(id) } case 3: { g_bow_mode[id]= 2 client_print(id,print_center,"Explode Mode") update_ammo(id) } case 4: { g_bow_mode[id]= 3 client_print(id,print_center,"Ice Mode") update_ammo(id) } } lastSwitchTime [ id ] = get_gametime ( ) } } }
//block anim standart 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, 50) g_normal_ammo[id]-- } else if(g_bow_mode[id] == FIRE_MODE) { set_rendering(arrow, kRenderFxGlowShell, 255, 0, 0, kRenderNormal, 50) g_fire_ammo[id]-- } else if(g_bow_mode[id] == ICE_MODE) { set_rendering(arrow, kRenderFxGlowShell, 0, 0, 255, kRenderNormal, 50) g_ice_ammo[id]-- } else if(g_bow_mode[id] == EXPLODE_MODE) { set_rendering(arrow, kRenderFxGlowShell, 150, 105, 0, kRenderNormal, 50) 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) { if (!g_slowed[ptd] || !g_Burn[ptd] || g_slowed[ptd] || g_Burn[ptd]) { 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_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() } } } } // 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]) 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 } }
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 } } }
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] == 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() }
// Allowed toucher stock allowed_toucher(player) { if (g_HasBow[player]) return false return true }
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) // checks the legs of seen player 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) }
stock DropWeaponSlot( iPlayer, iSlot ) { new iWeaponEntity = GetWeaponFromSlot( iPlayer, iSlot ); if( iWeaponEntity > 0 ) { new iWeaponID = get_pdata_cbase( iWeaponEntity, m_iId, 4 ); new szWeaponName[ 32 ]; get_weaponname( iWeaponID, szWeaponName, charsmax( szWeaponName ) ); engclient_cmd( iPlayer, "drop", szWeaponName ); } }
stock GetWeaponFromSlot( iPlayer, iSlot ) { return ( 1 <= iSlot <= 5 ) ? get_pdata_cbase( iPlayer, m_rpgPlayerItems_Slot0 + iSlot, 5 ) : -1; }
can you check where is the problem ?!
Thing that have been added :
PHP Code:
stock DropWeaponSlot( iPlayer, iSlot ) { new iWeaponEntity = GetWeaponFromSlot( iPlayer, iSlot ); if( iWeaponEntity > 0 ) { new iWeaponID = get_pdata_cbase( iWeaponEntity, m_iId, 4 ); new szWeaponName[ 32 ]; get_weaponname( iWeaponID, szWeaponName, charsmax( szWeaponName ) ); engclient_cmd( iPlayer, "drop", szWeaponName ); } }
stock GetWeaponFromSlot( iPlayer, iSlot ) { return ( 1 <= iSlot <= 5 ) ? get_pdata_cbase( iPlayer, m_rpgPlayerItems_Slot0 + iSlot, 5 ) : -1; }
PHP Code:
#define m_rpgPlayerItems_Slot0 367 #define m_iId 43
PHP Code:
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_explode_ammo[id] = EXPLODE_AMMO }
//give weapon public give_weapon(id){ g_HasBow[id] = true DropWeaponSlot(id, 1) give_item(id, "weapon_scout") update_ammo(id) }
EDIT: there is no errors in log but server crashes!
Last edited by LearninG; 07-05-2019 at 13:27.
|
|