przerobienie broni by dodać do gunxp mod
LEMO
26.06.2018
Witam chciałbym żebyście wytłumaczyli mi jak przerobić custom broń w tym przypadku Barlog11 żeby był wyświetlany w menu ulepszen w gun xp mod
podam przykładowy upgrade który jest przerobiony na gunxp i wyswietla się w menu a po wybraniu mozna jej używać i jej mocy
#include <amxmodx> #include <fakemeta> #include <hamsandwich> #include <xs> #include <gunxpmod> #include <engine> #include <cstrike> new PLUGIN_NAME[] = "UNLOCK : Sawn Off Shotgun" new PLUGIN_AUTHOR[] = "xbatista" new PLUGIN_VERSION[] = "1.0" new const WEAPON_V_MDL[] = "models/gunxpmod/v_double.mdl"; #define WEAPON_CSW CSW_XM1014 new const weapon_n[] = "weapon_xm1014"; const m_pPlayer = 41; const m_flPrimaryAttack = 46; const m_iClip = 51; #define IsPlayer(%1) ( 1 <= %1 <= g_maxplayers ) new g_hasZoom[33]; new damage_weapon, pCvarRof, weapon_recoil; new g_maxplayers; new bool:g_Weapon[33]; new Float:cl_pushangle[33][3]; new szClip, szAmmo; public plugin_init() { register_plugin(PLUGIN_NAME, PLUGIN_VERSION, PLUGIN_AUTHOR) register_gxm_item("Sawn Off Shotgun", "-Clip -Aim -Rate +Power +Scope ( Xm1014 )", 120) damage_weapon = register_cvar("gxm_damage_xm","4.0"); // damage multiplier pCvarRof = register_cvar( "xm_rof", "0.2" ); // weapon rof weapon_recoil = register_cvar( "xm_recoil", "2.0" ); // weapon recoil register_event("CurWeapon", "Event_CurWeapon", "be", "1=1"); RegisterHam( Ham_Weapon_PrimaryAttack, weapon_n, "Fwd_AttackSpeedPost" , 1 ); RegisterHam(Ham_Weapon_PrimaryAttack, weapon_n, "Fwd_AttackSpeedPre"); RegisterHam(Ham_TakeDamage, "player", "Ham_DamageWeapon"); register_forward( FM_CmdStart, "Fwd_CmdStart" ); g_maxplayers = get_maxplayers(); } public gxm_item_enabled(id) { g_Weapon[id] = true; } public client_connect(id) { g_Weapon[id] = false; } public plugin_precache() { engfunc(EngFunc_PrecacheModel, WEAPON_V_MDL); } public Fwd_AttackSpeedPre(Ent) { new id = pev(Ent,pev_owner); entity_get_vector( id, EV_VEC_punchangle, cl_pushangle[id]); } public Fwd_AttackSpeedPost( const Entity ) { static id ; id = get_pdata_cbase(Entity, m_pPlayer, 4) if (g_Weapon[id] && IsPlayer(id) ) { if ( pev_valid(Entity) ) { static iClip ; iClip = get_pdata_int(Entity, m_iClip, 4) if ( iClip > 4 ) { set_pdata_int(Entity, m_iClip, iClip - 3, 4) } else if ( iClip <= 4 ) { set_pdata_int(Entity, m_iClip, 0, 4) } } set_pdata_float( Entity, m_flPrimaryAttack, get_pcvar_float( pCvarRof ), 4 ); new Float:push[3]; entity_get_vector( id, EV_VEC_punchangle, cl_pushangle[id]); xs_vec_sub( push, cl_pushangle[id], push); xs_vec_mul_scalar( push, get_pcvar_float( weapon_recoil ), push); xs_vec_add( push, cl_pushangle[id], push); entity_set_vector( id, EV_VEC_punchangle, push); } } public Ham_DamageWeapon(id, inflictor, attacker, Float:damage, damagebits) { if ( !IsPlayer(attacker) || !g_Weapon[attacker] ) return HAM_IGNORED; new weapon2 = get_user_weapon(attacker, _, _); if( weapon2 == WEAPON_CSW) { SetHamParamFloat(4, damage * get_pcvar_float(damage_weapon)); return HAM_HANDLED; } return HAM_IGNORED; } public Event_CurWeapon(id) { if ( !g_Weapon[id] || !is_user_alive(id) ) return PLUGIN_CONTINUE; new Gun = read_data(2) if( Gun == WEAPON_CSW) { entity_set_string(id, EV_SZ_viewmodel, WEAPON_V_MDL) } return PLUGIN_CONTINUE; } public Fwd_CmdStart( id, uc_handle, seed ) { if( !is_user_alive( id ) || !g_Weapon[id] ) return FMRES_IGNORED; if( ( get_uc( uc_handle, UC_Buttons ) & IN_ATTACK2 ) && !( pev( id, pev_oldbuttons ) & IN_ATTACK2 ) ) { new szWeapID = get_user_weapon( id, szClip, szAmmo ) if( szWeapID == WEAPON_CSW && !g_hasZoom[ id ]) { g_hasZoom[ id ] = true cs_set_user_zoom( id, CS_SET_AUGSG552_ZOOM, 1 ) } else { if( g_hasZoom[ id ] ) { g_hasZoom[ id ] = false cs_set_user_zoom( id, CS_RESET_ZOOM, 0 ) } } return FMRES_HANDLED; } return FMRES_IGNORED; }
a tu barlog11 nie przerobiony
#include <amxmodx> #include <engine> #include <fakemeta> #include <fakemeta_util> #include <hamsandwich> #include <cstrike> #define PLUGIN "Balrog-XI" #define VERSION "2.0" #define AUTHOR "Dias" #define SUPPORT FOR NORMAL MODE "Conspiracy" #define V_MODEL "models/v_balrog11_2.mdl" #define P_MODEL "models/p_balrog11.mdl" #define W_MODEL "models/w_balrog11.mdl" #define CSW_BALROG11 CSW_XM1014 #define weapon_balrog11 "weapon_xm1014" #define OLD_W_MODEL "models/w_xm1014.mdl" #define OLD_EVENT "events/xm1014.sc" #define WEAPON_SECRETCODE 1982 #define DRAW_TIME 0.75 #define DAMAGE 32 #define FIRE_DAMAGE 200 #define BPAMMO 56 #define CHARGE_COND_AMMO 4 #define MAX_SPECIAL_AMMO 7 #define SPECIALSHOOT_DELAY 0.35 #define FIRE_SPEED 1 #define RADIUS 600 #define FIRE_CLASSNAME "balrog11_fire" #define SYSTEM_CLASSNAME "balrog11_firesystem" // Fire Start #define WEAPON_ATTACH_F 30.0 #define WEAPON_ATTACH_R 10.0 #define WEAPON_ATTACH_U -5.0 // OFFSET const PDATA_SAFE = 2 const OFFSET_LINUX_WEAPONS = 4 const OFFSET_WEAPONOWNER = 41 const m_flNextAttack = 83 const m_flNextPrimaryAttack = 46 const m_flNextSecondaryAttack = 47 // Weapon bitsums const PRIMARY_WEAPONS_BIT_SUM = (1<<CSW_SCOUT)|(1<<CSW_XM1014)|(1<<CSW_MAC10)|(1<<CSW_AUG)|(1<<CSW_UMP45)|(1<<CSW_SG550)|(1<<CSW_GALIL)|(1<<CSW_FAMAS)|(1<<CSW_AWP)|(1<<CSW_MP5NAVY)|(1<<CSW_M249)|(1<<CSW_M3)|(1<<CSW_M4A1)|(1<<CSW_TMP)|(1<<CSW_G3SG1)|(1<<CSW_SG552)|(1<<CSW_AK47)|(1<<CSW_P90) const SECONDARY_WEAPONS_BIT_SUM = (1<<CSW_P228)|(1<<CSW_ELITE)|(1<<CSW_FIVESEVEN)|(1<<CSW_USP)|(1<<CSW_GLOCK18)|(1<<CSW_DEAGLE) new const WeaponSounds[5][] = { "weapons/balrog11-1.wav", "weapons/balrog11-2.wav", "weapons/balrog11_draw.wav", "weapons/balrog11_insert.wav", "weapons/balrog11_charge.wav" } new const WeaponResources[4][] = { "sprites/flame_puff01.spr", "sprites/weapon_balrog11.txt", "sprites/640hud3_2.spr", "sprites/640hud89_2.spr" } enum { B11_ANIM_IDLE = 0, B11_ANIM_SHOOT, B11_ANIM_SHOOT_SPECIAL, B11_ANIM_INSERT, B11_ANIM_AFTER_RELOAD, B11_ANIM_START_RELOAD, B11_ANIM_DRAW } new g_had_balrog11[33], g_holding_attack[33], g_Shoot_Count[33], g_SpecialAmmo[33] new g_old_weapon[33], g_event_balrog11, g_Msg_StatusIcon, g_smokepuff_id, g_ham_bot, g_MaxPlayers public plugin_init() { register_plugin(PLUGIN, VERSION, AUTHOR) register_event("CurWeapon", "Event_CurWeapon", "be", "1=1") register_think(FIRE_CLASSNAME, "fw_Think") register_touch(FIRE_CLASSNAME, "*", "fw_Touch") register_forward(FM_CmdStart, "fw_CmdStart") register_forward(FM_SetModel, "fw_SetModel") register_forward(FM_UpdateClientData, "fw_UpdateClientData_Post", 1) register_forward(FM_PlaybackEvent, "fw_PlaybackEvent") RegisterHam(Ham_TraceAttack, "player", "fw_TraceAttack") RegisterHam(Ham_TraceAttack, "worldspawn", "fw_TraceAttack") RegisterHam(Ham_Item_AddToPlayer, weapon_balrog11, "fw_Item_AddToPlayer_Post", 1) RegisterHam(Ham_Item_PostFrame, weapon_balrog11, "fw_Item_PostFrame") RegisterHam(Ham_Item_Deploy, weapon_balrog11, "fw_Item_Deploy_Post", 1) g_Msg_StatusIcon = get_user_msgid("StatusIcon") g_MaxPlayers = get_maxplayers() register_clcmd("admin_get_balrog11", "Get_Balrog11", ADMIN_RCON) register_clcmd("weapon_balrog11", "hook_weapon") } public plugin_precache() { engfunc(EngFunc_PrecacheModel, V_MODEL) engfunc(EngFunc_PrecacheModel, P_MODEL) engfunc(EngFunc_PrecacheModel, W_MODEL) new i for(i = 0; i < sizeof(WeaponSounds); i++) engfunc(EngFunc_PrecacheSound, WeaponSounds[i]) for(i = 0; i < sizeof(WeaponResources); i++) { if(i == 1) engfunc(EngFunc_PrecacheGeneric, WeaponResources[i]) else engfunc(EngFunc_PrecacheModel, WeaponResources[i]) } register_forward(FM_PrecacheEvent, "fw_PrecacheEvent_Post", 1) g_smokepuff_id = engfunc(EngFunc_PrecacheModel, "sprites/wall_puff1.spr") } public client_putinserver(id) { if(!g_ham_bot && is_user_bot(id)) { g_ham_bot = 1 set_task(0.1, "do_register", id) } } public do_register(id) { RegisterHamFromEntity(Ham_TraceAttack, id, "fw_TraceAttack") } public fw_PrecacheEvent_Post(type, const name[]) { if(equal(OLD_EVENT, name)) g_event_balrog11 = get_orig_retval() } public Get_Balrog11(id) { g_had_balrog11[id] = 1 g_old_weapon[id] = 0 g_holding_attack[id] = 0 g_Shoot_Count[id] = 0 g_SpecialAmmo[id] = 0 fm_give_item(id, weapon_balrog11) cs_set_user_bpammo(id, CSW_BALROG11, BPAMMO) update_ammo(id) update_specialammo(id, g_SpecialAmmo[id], g_SpecialAmmo[id] > 0 ? 1 : 0) } public Remove_Balrog11(id) { update_specialammo(id, g_SpecialAmmo[id], 0) g_had_balrog11[id] = 0 g_old_weapon[id] = 0 g_holding_attack[id] = 0 g_Shoot_Count[id] = 0 g_SpecialAmmo[id] = 0 } public hook_weapon(id) { engclient_cmd(id, weapon_balrog11) return PLUGIN_HANDLED } public Event_CurWeapon(id) { if(!is_user_alive(id)) return if(g_had_balrog11[id] && (get_user_weapon(id) == CSW_BALROG11 && g_old_weapon[id] != CSW_BALROG11)) { // Balrog Draw set_weapon_anim(id, B11_ANIM_DRAW) set_player_nextattack(id, DRAW_TIME) update_specialammo(id, g_SpecialAmmo[id], g_SpecialAmmo[id] > 0 ? 1 : 0) } else if(get_user_weapon(id) != CSW_BALROG11 && g_old_weapon[id] == CSW_BALROG11) { update_specialammo(id, g_SpecialAmmo[id], 0) } g_old_weapon[id] = get_user_weapon(id) } public fw_CmdStart(id, uc_handle, seed) { if(!is_user_alive(id)) return if(get_user_weapon(id) != CSW_BALROG11 || !g_had_balrog11[id]) return static NewButton; NewButton = get_uc(uc_handle, UC_Buttons) static OldButton; OldButton = pev(id, pev_oldbuttons) if(NewButton & IN_ATTACK) { if(!g_holding_attack[id]) g_holding_attack[id] = 1 } else if(NewButton & IN_ATTACK2) { SpecialShoot_Handle(id) } else { if(OldButton & IN_ATTACK) { if(g_holding_attack[id]) { g_holding_attack[id] = 0 g_Shoot_Count[id] = 0 } } } } public fw_SetModel(entity, model[]) { if(!pev_valid(entity)) return FMRES_IGNORED static Classname[64] pev(entity, pev_classname, Classname, sizeof(Classname)) if(!equal(Classname, "weaponbox")) return FMRES_IGNORED static id id = pev(entity, pev_owner) if(equal(model, OLD_W_MODEL)) { static weapon weapon = fm_get_user_weapon_entity(entity, CSW_BALROG11) if(!pev_valid(weapon)) return FMRES_IGNORED if(g_had_balrog11[id]) { set_pev(weapon, pev_impulse, WEAPON_SECRETCODE) set_pev(weapon, pev_iuser4, g_SpecialAmmo[id]) engfunc(EngFunc_SetModel, entity, W_MODEL) Remove_Balrog11(id) return FMRES_SUPERCEDE } } return FMRES_IGNORED; } public fw_UpdateClientData_Post(id, sendweapons, cd_handle) { if(!is_user_alive(id) || !is_user_connected(id)) return FMRES_IGNORED if(get_user_weapon(id) == CSW_BALROG11 && g_had_balrog11[id]) set_cd(cd_handle, CD_flNextAttack, get_gametime() + 0.001) return FMRES_HANDLED } public fw_PlaybackEvent(flags, invoker, eventid, Float:delay, Float:origin[3], Float:angles[3], Float:fparam1, Float:fparam2, iParam1, iParam2, bParam1, bParam2) { if (!is_user_connected(invoker)) return FMRES_IGNORED if(get_user_weapon(invoker) == CSW_BALROG11 && g_had_balrog11[invoker] && eventid == g_event_balrog11) { engfunc(EngFunc_PlaybackEvent, flags | FEV_HOSTONLY, invoker, eventid, delay, origin, angles, fparam1, fparam2, iParam1, iParam2, bParam1, bParam2) if(g_holding_attack[invoker]) g_Shoot_Count[invoker]++ else g_Shoot_Count[invoker] = 0 if(g_Shoot_Count[invoker] >= CHARGE_COND_AMMO) { g_Shoot_Count[invoker] = 0 if(g_SpecialAmmo[invoker] < MAX_SPECIAL_AMMO) { update_specialammo(invoker, g_SpecialAmmo[invoker], 0) g_SpecialAmmo[invoker]++ update_specialammo(invoker, g_SpecialAmmo[invoker], 1) emit_sound(invoker, CHAN_ITEM, WeaponSounds[4], 1.0, ATTN_NORM, 0, PITCH_NORM) } } set_weapon_anim(invoker, B11_ANIM_SHOOT) emit_sound(invoker, CHAN_WEAPON, WeaponSounds[0], 1.0, ATTN_NORM, 0, PITCH_LOW) return FMRES_SUPERCEDE } return FMRES_HANDLED } public fw_Think(iEnt) { if(!pev_valid(iEnt)) return static Float:fFrame, Float:fNextThink, Float:fScale pev(iEnt, pev_frame, fFrame) pev(iEnt, pev_scale, fScale) // effect exp static iMoveType; iMoveType = pev(iEnt, pev_movetype) if (iMoveType == MOVETYPE_NONE) { fNextThink = 0.0015 fFrame += random_float(0.25, 0.75) fScale += 0.01 if(fFrame > 21.0) { engfunc(EngFunc_RemoveEntity, iEnt) return } } else { fNextThink = 0.045 fFrame += random_float(0.5, 1.0) fScale += 0.001 fFrame = floatmin(21.0, fFrame) fScale = floatmin(1.5, fFrame) } set_pev(iEnt, pev_frame, fFrame) set_pev(iEnt, pev_scale, fScale) set_pev(iEnt, pev_nextthink, halflife_time() + fNextThink) // time remove static Float:fTimeRemove pev(iEnt, pev_fuser1, fTimeRemove) if(get_gametime() >= fTimeRemove) { static Float:Amount; pev(iEnt, pev_renderamt, Amount) if(Amount <= 5.0) { engfunc(EngFunc_RemoveEntity, iEnt) return } else { Amount -= 5.0 set_pev(iEnt, pev_renderamt, Amount) } } } public fw_Touch(ent, id) { if(!pev_valid(ent)) return if(pev_valid(id)) { static Classname[32] pev(id, pev_classname, Classname, sizeof(Classname)) if(equal(Classname, FIRE_CLASSNAME)) return } set_pev(ent, pev_movetype, MOVETYPE_NONE) set_pev(ent, pev_solid, SOLID_NOT) } public fw_TraceAttack(Ent, Attacker, Float:Damage, Float:Dir[3], ptr, DamageType) { if(!is_user_alive(Attacker)) return HAM_IGNORED if(get_user_weapon(Attacker) != CSW_BALROG11 || !g_had_balrog11[Attacker]) return HAM_IGNORED static Float:flEnd[3], Float:vecPlane[3] get_tr2(ptr, TR_vecEndPos, flEnd) get_tr2(ptr, TR_vecPlaneNormal, vecPlane) if(!is_user_alive(Ent)) { make_bullet(Attacker, flEnd) fake_smoke(Attacker, ptr) } SetHamParamFloat(3, float(DAMAGE)) return HAM_HANDLED } public fw_Item_AddToPlayer_Post(ent, id) { if(pev(ent, pev_impulse) == WEAPON_SECRETCODE) { g_had_balrog11[id] = 1 set_pev(ent, pev_impulse, 0) g_SpecialAmmo[id] = pev(ent, pev_iuser4) } message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("WeaponList"), _, id) write_string((g_had_balrog11[id] == 1 ? "weapon_balrog11" : "weapon_xm1014")) write_byte(5) write_byte(32) write_byte(-1) write_byte(-1) write_byte(0) write_byte(12) write_byte(CSW_BALROG11) write_byte(0) message_end() } public fw_Item_PostFrame(ent) { static id; id = fm_cs_get_weapon_ent_owner(ent) if (!pev_valid(id)) return if(!g_had_balrog11[id]) return if(get_pdata_int(ent, 55, OFFSET_LINUX_WEAPONS) == 1) set_weapon_anim(id, B11_ANIM_INSERT) } public fw_Item_Deploy_Post(ent) { static id; id = fm_cs_get_weapon_ent_owner(ent) if (!pev_valid(id)) return if(!g_had_balrog11[id]) return set_pev(id, pev_viewmodel2, V_MODEL) set_pev(id, pev_weaponmodel2, P_MODEL) } public update_ammo(id) { if(!is_user_alive(id)) return static weapon_ent; weapon_ent = fm_get_user_weapon_entity(id, CSW_BALROG11) if(!pev_valid(weapon_ent)) return engfunc(EngFunc_MessageBegin, MSG_ONE_UNRELIABLE, get_user_msgid("CurWeapon"), {0, 0, 0}, id) write_byte(1) write_byte(CSW_BALROG11) write_byte(cs_get_weapon_ammo(weapon_ent)) message_end() message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("AmmoX"), _, id) write_byte(1) write_byte(cs_get_user_bpammo(id, CSW_BALROG11)) message_end() } public update_specialammo(id, Ammo, On) { static AmmoSprites[33] format(AmmoSprites, sizeof(AmmoSprites), "number_%d", Ammo) message_begin(MSG_ONE_UNRELIABLE, g_Msg_StatusIcon, {0,0,0}, id) write_byte(On) write_string(AmmoSprites) write_byte(42) // red write_byte(212) // green write_byte(255) // blue message_end() } public SpecialShoot_Handle(id) { if(get_pdata_float(id, 83, 5) > 0.0) return if(g_SpecialAmmo[id] <= 0) return create_fake_attack(id) // Shoot Handle set_player_nextattack(id, SPECIALSHOOT_DELAY) set_weapons_timeidle(id, CSW_BALROG11, SPECIALSHOOT_DELAY) update_specialammo(id, g_SpecialAmmo[id], 0) g_SpecialAmmo[id]-- update_specialammo(id, g_SpecialAmmo[id], g_SpecialAmmo[id] > 0 ? 1 : 0) set_weapon_anim(id, B11_ANIM_SHOOT_SPECIAL) emit_sound(id, CHAN_WEAPON, WeaponSounds[1], 1.0, ATTN_NORM, 0, PITCH_LOW) Create_FireSystem(id, 1) set_task(0.25, "Check_RadiusDamage", id) } public Check_RadiusDamage(id) { if(!is_user_alive(id)) return static Float:Origin[3], Float:MyOrigin[3], Float:DamageMulti, Float:DmgMulti pev(id, pev_origin, MyOrigin) for(new i = 0; i < g_MaxPlayers; i++) { if(!is_user_alive(i)) continue if(id == i) continue pev(i, pev_origin, Origin) if(!is_in_viewcone(id, Origin, 1)) continue if(entity_range(id, i) > float(RADIUS)) continue DmgMulti = 1.1; DamageMulti = entity_range(id, i) / float(RADIUS) DmgMulti -= DamageMulti ExecuteHamB(Ham_TakeDamage, i, 0, id, float(FIRE_DAMAGE), DMG_BURN) } } public create_fake_attack(id) { static weapon weapon = fm_find_ent_by_owner(-1, "weapon_knife", id) if(pev_valid(weapon)) ExecuteHamB(Ham_Weapon_PrimaryAttack, weapon) } public Create_FireSystem(id, OffSet) { const MAX_FIRE = 8 static Float:StartOrigin[3], Float:TargetOrigin[MAX_FIRE][3], Float:Speed[MAX_FIRE] // Get Target // -- Left get_position(id, 100.0, random_float(-10.0, -30.0), WEAPON_ATTACH_U, TargetOrigin[0]); Speed[0] = 210.0 * float(FIRE_SPEED) get_position(id, 100.0, random_float(-10.0, -20.0), WEAPON_ATTACH_U, TargetOrigin[1]); Speed[1] = 240.0 * float(FIRE_SPEED) get_position(id, 100.0, random_float(-10.0, -10.0), WEAPON_ATTACH_U, TargetOrigin[2]); Speed[2] = 300.0 * float(FIRE_SPEED) // -- Center get_position(id, 100.0, 0.0, WEAPON_ATTACH_U, TargetOrigin[3]); Speed[3] = 200.0 * float(FIRE_SPEED) get_position(id, 100.0, 0.0, WEAPON_ATTACH_U, TargetOrigin[4]); Speed[4] = 200.0 * float(FIRE_SPEED) // -- Right get_position(id, 100.0, random_float(10.0, 10.0), WEAPON_ATTACH_U, TargetOrigin[5]); Speed[5] = 150.0 * float(FIRE_SPEED) get_position(id, 100.0, random_float(10.0, 20.0) , WEAPON_ATTACH_U, TargetOrigin[6]); Speed[6] = 180.0 * float(FIRE_SPEED) get_position(id, 100.0, random_float(10.0, 30.0), WEAPON_ATTACH_U, TargetOrigin[7]); Speed[7] = 210.0 * float(FIRE_SPEED) for(new i = 0; i < MAX_FIRE; i++) { // Get Start get_position(id, random_float(30.0, 40.0), 0.0, WEAPON_ATTACH_U, StartOrigin) Create_Fire(id, StartOrigin, TargetOrigin[i], Speed[i], OffSet) } } public Create_Fire(id, Float:Origin[3], Float:TargetOrigin[3], Float:Speed, Offset) { static Ent; Ent = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "env_sprite")) if(!pev_valid(Ent)) return static Float:Velocity[3] // Set info for ent set_pev(Ent, pev_movetype, MOVETYPE_FLY) set_pev(Ent, pev_rendermode, kRenderTransAdd) set_pev(Ent, pev_renderamt, 75.0) set_pev(Ent, pev_fuser1, get_gametime() + 0.75) // time remove set_pev(Ent, pev_scale, random_float(0.25, 0.75)) set_pev(Ent, pev_nextthink, halflife_time() + 0.05) entity_set_string(Ent, EV_SZ_classname, FIRE_CLASSNAME) engfunc(EngFunc_SetModel, Ent, WeaponResources[0]) set_pev(Ent, pev_mins, Float:{-1.0, -1.0, -1.0}) set_pev(Ent, pev_maxs, Float:{1.0, 1.0, 1.0}) set_pev(Ent, pev_origin, Origin) set_pev(Ent, pev_gravity, 0.01) set_pev(Ent, pev_solid, SOLID_TRIGGER) set_pev(Ent, pev_frame, 0.0) set_pev(Ent, pev_owner, id) set_pev(Ent, pev_iuser4, Offset) get_speed_vector(Origin, TargetOrigin, Speed * 3.0, Velocity) set_pev(Ent, pev_velocity, Velocity) } stock make_bullet(id, Float:Origin[3]) { // Find target new decal = random_num(41, 45) const loop_time = 2 static Body, Target get_user_aiming(id, Target, Body, 999999) if(is_user_connected(Target)) return for(new i = 0; i < loop_time; i++) { // Put decal on "world" (a wall) message_begin(MSG_BROADCAST, SVC_TEMPENTITY) write_byte(TE_WORLDDECAL) engfunc(EngFunc_WriteCoord, Origin[0]) engfunc(EngFunc_WriteCoord, Origin[1]) engfunc(EngFunc_WriteCoord, Origin[2]) write_byte(decal) message_end() // Show sparcles message_begin(MSG_BROADCAST, SVC_TEMPENTITY) write_byte(TE_GUNSHOTDECAL) engfunc(EngFunc_WriteCoord, Origin[0]) engfunc(EngFunc_WriteCoord, Origin[1]) engfunc(EngFunc_WriteCoord, Origin[2]) write_short(id) write_byte(decal) message_end() } } stock fake_smoke(id, trace_result) { static Float:vecSrc[3], Float:vecEnd[3], TE_FLAG get_weapon_attachment(id, vecSrc) global_get(glb_v_forward, vecEnd) xs_vec_mul_scalar(vecEnd, 8192.0, vecEnd) xs_vec_add(vecSrc, vecEnd, vecEnd) get_tr2(trace_result, TR_vecEndPos, vecSrc) get_tr2(trace_result, TR_vecPlaneNormal, vecEnd) xs_vec_mul_scalar(vecEnd, 2.5, vecEnd) xs_vec_add(vecSrc, vecEnd, vecEnd) TE_FLAG |= TE_EXPLFLAG_NODLIGHTS TE_FLAG |= TE_EXPLFLAG_NOSOUND TE_FLAG |= TE_EXPLFLAG_NOPARTICLES engfunc(EngFunc_MessageBegin, MSG_PAS, SVC_TEMPENTITY, vecEnd, 0) write_byte(TE_EXPLOSION) engfunc(EngFunc_WriteCoord, vecEnd[0]) engfunc(EngFunc_WriteCoord, vecEnd[1]) engfunc(EngFunc_WriteCoord, vecEnd[2] - 10.0) write_short(g_smokepuff_id) write_byte(2) write_byte(50) write_byte(TE_FLAG) message_end() } stock get_weapon_attachment(id, Float:output[3], Float:fDis = 40.0) { new Float:vfEnd[3], viEnd[3] get_user_origin(id, viEnd, 3) IVecFVec(viEnd, vfEnd) new Float:fOrigin[3], Float:fAngle[3] pev(id, pev_origin, fOrigin) pev(id, pev_view_ofs, fAngle) xs_vec_add(fOrigin, fAngle, fOrigin) new Float:fAttack[3] xs_vec_sub(vfEnd, fOrigin, fAttack) xs_vec_sub(vfEnd, fOrigin, fAttack) new Float:fRate fRate = fDis / vector_length(fAttack) xs_vec_mul_scalar(fAttack, fRate, fAttack) xs_vec_add(fOrigin, fAttack, output) } stock set_weapon_anim(id, anim) { if(!is_user_alive(id)) return set_pev(id, pev_weaponanim, anim) message_begin(MSG_ONE_UNRELIABLE, SVC_WEAPONANIM, _, id) write_byte(anim) write_byte(0) message_end() } stock fm_cs_get_weapon_ent_owner(ent) { if (pev_valid(ent) != PDATA_SAFE) return -1 return get_pdata_cbase(ent, OFFSET_WEAPONOWNER, OFFSET_LINUX_WEAPONS) } stock set_player_nextattack(id, Float:nexttime) { if(!is_user_alive(id)) return set_pdata_float(id, m_flNextAttack, nexttime, 5) } stock set_weapons_timeidle(id, WeaponId ,Float:TimeIdle) { if(!is_user_alive(id)) return static entwpn; entwpn = fm_get_user_weapon_entity(id, WeaponId) if(!pev_valid(entwpn)) return set_pdata_float(entwpn, 46, TimeIdle, OFFSET_LINUX_WEAPONS) set_pdata_float(entwpn, 47, TimeIdle, OFFSET_LINUX_WEAPONS) set_pdata_float(entwpn, 48, TimeIdle + 0.5, OFFSET_LINUX_WEAPONS) } stock get_position(id,Float:forw, Float:right, Float:up, Float:vStart[]) { static Float:vOrigin[3], Float:vAngle[3], Float:vForward[3], Float:vRight[3], Float:vUp[3] pev(id, pev_origin, vOrigin) pev(id, pev_view_ofs, vUp) //for player xs_vec_add(vOrigin, vUp, vOrigin) pev(id, pev_v_angle, vAngle) // if normal entity ,use pev_angles angle_vector(vAngle,ANGLEVECTOR_FORWARD, vForward) //or use EngFunc_AngleVectors angle_vector(vAngle,ANGLEVECTOR_RIGHT, vRight) angle_vector(vAngle,ANGLEVECTOR_UP, vUp) vStart[0] = vOrigin[0] + vForward[0] * forw + vRight[0] * right + vUp[0] * up vStart[1] = vOrigin[1] + vForward[1] * forw + vRight[1] * right + vUp[1] * up vStart[2] = vOrigin[2] + vForward[2] * forw + vRight[2] * right + vUp[2] * up } stock get_speed_vector(const Float:origin1[3],const Float:origin2[3],Float:speed, Float:new_velocity[3]) { new_velocity[0] = origin2[0] - origin1[0] new_velocity[1] = origin2[1] - origin1[1] new_velocity[2] = origin2[2] - origin1[2] new Float:num = floatsqroot(speed*speed / (new_velocity[0]*new_velocity[0] + new_velocity[1]*new_velocity[1] + new_velocity[2]*new_velocity[2])) new_velocity[0] *= num new_velocity[1] *= num new_velocity[2] *= num return 1; } // Drop primary/secondary weapons stock drop_weapons(id, dropwhat) { // Get user weapons static weapons[32], num, i, weaponid num = 0 // reset passed weapons count (bugfix) get_user_weapons(id, weapons, num) // Loop through them and drop primaries or secondaries for (i = 0; i < num; i++) { // Prevent re-indexing the array weaponid = weapons[i] if ((dropwhat == 1 && ((1<<weaponid) & PRIMARY_WEAPONS_BIT_SUM)) || (dropwhat == 2 && ((1<<weaponid) & SECONDARY_WEAPONS_BIT_SUM))) { // Get weapon entity static wname[32] get_weaponname(weaponid, wname, charsmax(wname)) // Player drops the weapon and looses his bpammo engclient_cmd(id, "drop", wname) cs_set_user_bpammo(id, weaponid, 0) } } } /* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE *{\\ rtf1\\ ansi\\ deff0{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang1033\\ f0\\ fs16 \n\\ par } */
A tak ja próbowałem to robić ale przy kompilacji lokalnej wyskakują błędy
#include <amxmodx> #include <engine> #include <fakemeta> #include <fakemeta_util> #include <hamsandwich> #include <gunxpmod> #include <cstrike> #define PLUGIN "Balrog-XI" #define VERSION "2.0" #define AUTHOR "Dias" #define SUPPORT FOR NORMAL MODE "Conspiracy" #define V_MODEL "models/v_balrog11_2.mdl" #define P_MODEL "models/p_balrog11.mdl" #define W_MODEL "models/w_balrog11.mdl" #define CSW_BALROG11 CSW_XM1014 #define weapon_balrog11 "weapon_xm1014" #define OLD_W_MODEL "models/w_xm1014.mdl" #define OLD_EVENT "events/xm1014.sc" #define WEAPON_SECRETCODE 1982 #define DRAW_TIME 0.75 #define DAMAGE 32 #define FIRE_DAMAGE 200 #define BPAMMO 56 #define CHARGE_COND_AMMO 4 #define MAX_SPECIAL_AMMO 7 #define SPECIALSHOOT_DELAY 0.35 #define FIRE_SPEED 1 #define RADIUS 600 #define FIRE_CLASSNAME "balrog11_fire" #define SYSTEM_CLASSNAME "balrog11_firesystem" // Fire Start #define WEAPON_ATTACH_F 30.0 #define WEAPON_ATTACH_R 10.0 #define WEAPON_ATTACH_U -5.0 // OFFSET const PDATA_SAFE = 2 const OFFSET_LINUX_WEAPONS = 4 const OFFSET_WEAPONOWNER = 41 const m_flNextAttack = 83 const m_flNextPrimaryAttack = 46 const m_flNextSecondaryAttack = 47 // Weapon bitsums const PRIMARY_WEAPONS_BIT_SUM = (1<<CSW_SCOUT)|(1<<CSW_XM1014)|(1<<CSW_MAC10)|(1<<CSW_AUG)|(1<<CSW_UMP45)|(1<<CSW_SG550)|(1<<CSW_GALIL)|(1<<CSW_FAMAS)|(1<<CSW_AWP)|(1<<CSW_MP5NAVY)|(1<<CSW_M249)|(1<<CSW_M3)|(1<<CSW_M4A1)|(1<<CSW_TMP)|(1<<CSW_G3SG1)|(1<<CSW_SG552)|(1<<CSW_AK47)|(1<<CSW_P90) const SECONDARY_WEAPONS_BIT_SUM = (1<<CSW_P228)|(1<<CSW_ELITE)|(1<<CSW_FIVESEVEN)|(1<<CSW_USP)|(1<<CSW_GLOCK18)|(1<<CSW_DEAGLE) new const WeaponSounds[5][] = { "weapons/balrog11-1.wav", "weapons/balrog11-2.wav", "weapons/balrog11_draw.wav", "weapons/balrog11_insert.wav", "weapons/balrog11_charge.wav" } new const WeaponResources[4][] = { "sprites/flame_puff01.spr", "sprites/weapon_balrog11.txt", "sprites/640hud3_2.spr", "sprites/640hud89_2.spr" } enum { B11_ANIM_IDLE = 0, B11_ANIM_SHOOT, B11_ANIM_SHOOT_SPECIAL, B11_ANIM_INSERT, B11_ANIM_AFTER_RELOAD, B11_ANIM_START_RELOAD, B11_ANIM_DRAW } new g_had_balrog11[33], g_holding_attack[33], g_Shoot_Count[33], g_SpecialAmmo[33] new g_old_weapon[33], g_event_balrog11, g_Msg_StatusIcon, g_smokepuff_id, g_ham_bot, g_MaxPlayers public plugin_init() { register_plugin(PLUGIN_NAME, PLUGIN_VERSION, PLUGIN_AUTHOR) register_gxm_item("Barlog", "+Aim +Rate +Power +Scope ( Xm )", 90) register_event("CurWeapon", "Event_CurWeapon", "be", "1=1") register_think(FIRE_CLASSNAME, "fw_Think") register_touch(FIRE_CLASSNAME, "*", "fw_Touch") register_forward(FM_CmdStart, "fw_CmdStart") register_forward(FM_SetModel, "fw_SetModel") register_forward(FM_UpdateClientData, "fw_UpdateClientData_Post", 1) register_forward(FM_PlaybackEvent, "fw_PlaybackEvent") RegisterHam(Ham_TraceAttack, "player", "fw_TraceAttack") RegisterHam(Ham_TraceAttack, "worldspawn", "fw_TraceAttack") RegisterHam(Ham_Item_AddToPlayer, weapon_balrog11, "fw_Item_AddToPlayer_Post", 1) RegisterHam(Ham_Item_PostFrame, weapon_balrog11, "fw_Item_PostFrame") RegisterHam(Ham_Item_Deploy, weapon_balrog11, "fw_Item_Deploy_Post", 1) g_Msg_StatusIcon = get_user_msgid("StatusIcon") g_MaxPlayers = get_maxplayers() register_clcmd("admin_get_balrog11", "Get_Balrog11", ADMIN_RCON) register_clcmd("weapon_balrog11", "hook_weapon") } public gxm_item_enabled(id) { g_Weapon[id] = true; } public plugin_precache() { engfunc(EngFunc_PrecacheModel, V_MODEL) engfunc(EngFunc_PrecacheModel, P_MODEL) engfunc(EngFunc_PrecacheModel, W_MODEL) new i for(i = 0; i < sizeof(WeaponSounds); i++) engfunc(EngFunc_PrecacheSound, WeaponSounds[i]) for(i = 0; i < sizeof(WeaponResources); i++) { if(i == 1) engfunc(EngFunc_PrecacheGeneric, WeaponResources[i]) else engfunc(EngFunc_PrecacheModel, WeaponResources[i]) } register_forward(FM_PrecacheEvent, "fw_PrecacheEvent_Post", 1) g_smokepuff_id = engfunc(EngFunc_PrecacheModel, "sprites/wall_puff1.spr") } public client_putinserver(id) { if(!g_ham_bot && is_user_bot(id)) { g_ham_bot = 1 set_task(0.1, "do_register", id) } } public do_register(id) { RegisterHamFromEntity(Ham_TraceAttack, id, "fw_TraceAttack") } public fw_PrecacheEvent_Post(type, const name[]) { if(equal(OLD_EVENT, name)) g_event_balrog11 = get_orig_retval() } public Get_Balrog11(id) { g_had_balrog11[id] = 1 g_old_weapon[id] = 0 g_holding_attack[id] = 0 g_Shoot_Count[id] = 0 g_SpecialAmmo[id] = 0 fm_give_item(id, weapon_balrog11) cs_set_user_bpammo(id, CSW_BALROG11, BPAMMO) update_ammo(id) update_specialammo(id, g_SpecialAmmo[id], g_SpecialAmmo[id] > 0 ? 1 : 0) } public Remove_Balrog11(id) { update_specialammo(id, g_SpecialAmmo[id], 0) g_had_balrog11[id] = 0 g_old_weapon[id] = 0 g_holding_attack[id] = 0 g_Shoot_Count[id] = 0 g_SpecialAmmo[id] = 0 } public hook_weapon(id) { engclient_cmd(id, weapon_balrog11) return PLUGIN_HANDLED } public Event_CurWeapon(id) { if(!is_user_alive(id)) return if(g_had_balrog11[id] && (get_user_weapon(id) == CSW_BALROG11 && g_old_weapon[id] != CSW_BALROG11)) { // Balrog Draw set_weapon_anim(id, B11_ANIM_DRAW) set_player_nextattack(id, DRAW_TIME) update_specialammo(id, g_SpecialAmmo[id], g_SpecialAmmo[id] > 0 ? 1 : 0) } else if(get_user_weapon(id) != CSW_BALROG11 && g_old_weapon[id] == CSW_BALROG11) { update_specialammo(id, g_SpecialAmmo[id], 0) } g_old_weapon[id] = get_user_weapon(id) } public fw_CmdStart(id, uc_handle, seed) { if(!is_user_alive(id)) return if(get_user_weapon(id) != CSW_BALROG11 || !g_had_balrog11[id]) return static NewButton; NewButton = get_uc(uc_handle, UC_Buttons) static OldButton; OldButton = pev(id, pev_oldbuttons) if(NewButton & IN_ATTACK) { if(!g_holding_attack[id]) g_holding_attack[id] = 1 } else if(NewButton & IN_ATTACK2) { SpecialShoot_Handle(id) } else { if(OldButton & IN_ATTACK) { if(g_holding_attack[id]) { g_holding_attack[id] = 0 g_Shoot_Count[id] = 0 } } } } public fw_SetModel(entity, model[]) { if(!pev_valid(entity)) return FMRES_IGNORED static Classname[64] pev(entity, pev_classname, Classname, sizeof(Classname)) if(!equal(Classname, "weaponbox")) return FMRES_IGNORED static id id = pev(entity, pev_owner) if(equal(model, OLD_W_MODEL)) { static weapon weapon = fm_get_user_weapon_entity(entity, CSW_BALROG11) if(!pev_valid(weapon)) return FMRES_IGNORED if(g_had_balrog11[id]) { set_pev(weapon, pev_impulse, WEAPON_SECRETCODE) set_pev(weapon, pev_iuser4, g_SpecialAmmo[id]) engfunc(EngFunc_SetModel, entity, W_MODEL) Remove_Balrog11(id) return FMRES_SUPERCEDE } } return FMRES_IGNORED; } public fw_UpdateClientData_Post(id, sendweapons, cd_handle) { if(!is_user_alive(id) || !is_user_connected(id)) return FMRES_IGNORED if(get_user_weapon(id) == CSW_BALROG11 && g_had_balrog11[id]) set_cd(cd_handle, CD_flNextAttack, get_gametime() + 0.001) return FMRES_HANDLED } public fw_PlaybackEvent(flags, invoker, eventid, Float:delay, Float:origin[3], Float:angles[3], Float:fparam1, Float:fparam2, iParam1, iParam2, bParam1, bParam2) { if (!is_user_connected(invoker)) return FMRES_IGNORED if(get_user_weapon(invoker) == CSW_BALROG11 && g_had_balrog11[invoker] && eventid == g_event_balrog11) { engfunc(EngFunc_PlaybackEvent, flags | FEV_HOSTONLY, invoker, eventid, delay, origin, angles, fparam1, fparam2, iParam1, iParam2, bParam1, bParam2) if(g_holding_attack[invoker]) g_Shoot_Count[invoker]++ else g_Shoot_Count[invoker] = 0 if(g_Shoot_Count[invoker] >= CHARGE_COND_AMMO) { g_Shoot_Count[invoker] = 0 if(g_SpecialAmmo[invoker] < MAX_SPECIAL_AMMO) { update_specialammo(invoker, g_SpecialAmmo[invoker], 0) g_SpecialAmmo[invoker]++ update_specialammo(invoker, g_SpecialAmmo[invoker], 1) emit_sound(invoker, CHAN_ITEM, WeaponSounds[4], 1.0, ATTN_NORM, 0, PITCH_NORM) } } set_weapon_anim(invoker, B11_ANIM_SHOOT) emit_sound(invoker, CHAN_WEAPON, WeaponSounds[0], 1.0, ATTN_NORM, 0, PITCH_LOW) return FMRES_SUPERCEDE } return FMRES_HANDLED } public fw_Think(iEnt) { if(!pev_valid(iEnt)) return static Float:fFrame, Float:fNextThink, Float:fScale pev(iEnt, pev_frame, fFrame) pev(iEnt, pev_scale, fScale) // effect exp static iMoveType; iMoveType = pev(iEnt, pev_movetype) if (iMoveType == MOVETYPE_NONE) { fNextThink = 0.0015 fFrame += random_float(0.25, 0.75) fScale += 0.01 if(fFrame > 21.0) { engfunc(EngFunc_RemoveEntity, iEnt) return } } else { fNextThink = 0.045 fFrame += random_float(0.5, 1.0) fScale += 0.001 fFrame = floatmin(21.0, fFrame) fScale = floatmin(1.5, fFrame) } set_pev(iEnt, pev_frame, fFrame) set_pev(iEnt, pev_scale, fScale) set_pev(iEnt, pev_nextthink, halflife_time() + fNextThink) // time remove static Float:fTimeRemove pev(iEnt, pev_fuser1, fTimeRemove) if(get_gametime() >= fTimeRemove) { static Float:Amount; pev(iEnt, pev_renderamt, Amount) if(Amount <= 5.0) { engfunc(EngFunc_RemoveEntity, iEnt) return } else { Amount -= 5.0 set_pev(iEnt, pev_renderamt, Amount) } } } public fw_Touch(ent, id) { if(!pev_valid(ent)) return if(pev_valid(id)) { static Classname[32] pev(id, pev_classname, Classname, sizeof(Classname)) if(equal(Classname, FIRE_CLASSNAME)) return } set_pev(ent, pev_movetype, MOVETYPE_NONE) set_pev(ent, pev_solid, SOLID_NOT) } public fw_TraceAttack(Ent, Attacker, Float:Damage, Float:Dir[3], ptr, DamageType) { if(!is_user_alive(Attacker)) return HAM_IGNORED if(get_user_weapon(Attacker) != CSW_BALROG11 || !g_had_balrog11[Attacker]) return HAM_IGNORED static Float:flEnd[3], Float:vecPlane[3] get_tr2(ptr, TR_vecEndPos, flEnd) get_tr2(ptr, TR_vecPlaneNormal, vecPlane) if(!is_user_alive(Ent)) { make_bullet(Attacker, flEnd) fake_smoke(Attacker, ptr) } SetHamParamFloat(3, float(DAMAGE)) return HAM_HANDLED } public fw_Item_AddToPlayer_Post(ent, id) { if(pev(ent, pev_impulse) == WEAPON_SECRETCODE) { g_had_balrog11[id] = 1 set_pev(ent, pev_impulse, 0) g_SpecialAmmo[id] = pev(ent, pev_iuser4) } message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("WeaponList"), _, id) write_string((g_had_balrog11[id] == 1 ? "weapon_balrog11" : "weapon_xm1014")) write_byte(5) write_byte(32) write_byte(-1) write_byte(-1) write_byte(0) write_byte(12) write_byte(CSW_BALROG11) write_byte(0) message_end() } public fw_Item_PostFrame(ent) { static id; id = fm_cs_get_weapon_ent_owner(ent) if (!pev_valid(id)) return if(!g_had_balrog11[id]) return if(get_pdata_int(ent, 55, OFFSET_LINUX_WEAPONS) == 1) set_weapon_anim(id, B11_ANIM_INSERT) } public fw_Item_Deploy_Post(ent) { static id; id = fm_cs_get_weapon_ent_owner(ent) if (!pev_valid(id)) return if(!g_had_balrog11[id]) return set_pev(id, pev_viewmodel2, V_MODEL) set_pev(id, pev_weaponmodel2, P_MODEL) } public update_ammo(id) { if(!is_user_alive(id)) return static weapon_ent; weapon_ent = fm_get_user_weapon_entity(id, CSW_BALROG11) if(!pev_valid(weapon_ent)) return engfunc(EngFunc_MessageBegin, MSG_ONE_UNRELIABLE, get_user_msgid("CurWeapon"), {0, 0, 0}, id) write_byte(1) write_byte(CSW_BALROG11) write_byte(cs_get_weapon_ammo(weapon_ent)) message_end() message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("AmmoX"), _, id) write_byte(1) write_byte(cs_get_user_bpammo(id, CSW_BALROG11)) message_end() } public update_specialammo(id, Ammo, On) { static AmmoSprites[33] format(AmmoSprites, sizeof(AmmoSprites), "number_%d", Ammo) message_begin(MSG_ONE_UNRELIABLE, g_Msg_StatusIcon, {0,0,0}, id) write_byte(On) write_string(AmmoSprites) write_byte(42) // red write_byte(212) // green write_byte(255) // blue message_end() } public SpecialShoot_Handle(id) { if(get_pdata_float(id, 83, 5) > 0.0) return if(g_SpecialAmmo[id] <= 0) return create_fake_attack(id) // Shoot Handle set_player_nextattack(id, SPECIALSHOOT_DELAY) set_weapons_timeidle(id, CSW_BALROG11, SPECIALSHOOT_DELAY) update_specialammo(id, g_SpecialAmmo[id], 0) g_SpecialAmmo[id]-- update_specialammo(id, g_SpecialAmmo[id], g_SpecialAmmo[id] > 0 ? 1 : 0) set_weapon_anim(id, B11_ANIM_SHOOT_SPECIAL) emit_sound(id, CHAN_WEAPON, WeaponSounds[1], 1.0, ATTN_NORM, 0, PITCH_LOW) Create_FireSystem(id, 1) set_task(0.25, "Check_RadiusDamage", id) } public Check_RadiusDamage(id) { if(!is_user_alive(id)) return static Float:Origin[3], Float:MyOrigin[3], Float:DamageMulti, Float:DmgMulti pev(id, pev_origin, MyOrigin) for(new i = 0; i < g_MaxPlayers; i++) { if(!is_user_alive(i)) continue if(id == i) continue pev(i, pev_origin, Origin) if(!is_in_viewcone(id, Origin, 1)) continue if(entity_range(id, i) > float(RADIUS)) continue DmgMulti = 1.1; DamageMulti = entity_range(id, i) / float(RADIUS) DmgMulti -= DamageMulti ExecuteHamB(Ham_TakeDamage, i, 0, id, float(FIRE_DAMAGE), DMG_BURN) } } public create_fake_attack(id) { static weapon weapon = fm_find_ent_by_owner(-1, "weapon_knife", id) if(pev_valid(weapon)) ExecuteHamB(Ham_Weapon_PrimaryAttack, weapon) } public Create_FireSystem(id, OffSet) { const MAX_FIRE = 8 static Float:StartOrigin[3], Float:TargetOrigin[MAX_FIRE][3], Float:Speed[MAX_FIRE] // Get Target // -- Left get_position(id, 100.0, random_float(-10.0, -30.0), WEAPON_ATTACH_U, TargetOrigin[0]); Speed[0] = 210.0 * float(FIRE_SPEED) get_position(id, 100.0, random_float(-10.0, -20.0), WEAPON_ATTACH_U, TargetOrigin[1]); Speed[1] = 240.0 * float(FIRE_SPEED) get_position(id, 100.0, random_float(-10.0, -10.0), WEAPON_ATTACH_U, TargetOrigin[2]); Speed[2] = 300.0 * float(FIRE_SPEED) // -- Center get_position(id, 100.0, 0.0, WEAPON_ATTACH_U, TargetOrigin[3]); Speed[3] = 200.0 * float(FIRE_SPEED) get_position(id, 100.0, 0.0, WEAPON_ATTACH_U, TargetOrigin[4]); Speed[4] = 200.0 * float(FIRE_SPEED) // -- Right get_position(id, 100.0, random_float(10.0, 10.0), WEAPON_ATTACH_U, TargetOrigin[5]); Speed[5] = 150.0 * float(FIRE_SPEED) get_position(id, 100.0, random_float(10.0, 20.0) , WEAPON_ATTACH_U, TargetOrigin[6]); Speed[6] = 180.0 * float(FIRE_SPEED) get_position(id, 100.0, random_float(10.0, 30.0), WEAPON_ATTACH_U, TargetOrigin[7]); Speed[7] = 210.0 * float(FIRE_SPEED) for(new i = 0; i < MAX_FIRE; i++) { // Get Start get_position(id, random_float(30.0, 40.0), 0.0, WEAPON_ATTACH_U, StartOrigin) Create_Fire(id, StartOrigin, TargetOrigin[i], Speed[i], OffSet) } } public Create_Fire(id, Float:Origin[3], Float:TargetOrigin[3], Float:Speed, Offset) { static Ent; Ent = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "env_sprite")) if(!pev_valid(Ent)) return static Float:Velocity[3] // Set info for ent set_pev(Ent, pev_movetype, MOVETYPE_FLY) set_pev(Ent, pev_rendermode, kRenderTransAdd) set_pev(Ent, pev_renderamt, 75.0) set_pev(Ent, pev_fuser1, get_gametime() + 0.75) // time remove set_pev(Ent, pev_scale, random_float(0.25, 0.75)) set_pev(Ent, pev_nextthink, halflife_time() + 0.05) entity_set_string(Ent, EV_SZ_classname, FIRE_CLASSNAME) engfunc(EngFunc_SetModel, Ent, WeaponResources[0]) set_pev(Ent, pev_mins, Float:{-1.0, -1.0, -1.0}) set_pev(Ent, pev_maxs, Float:{1.0, 1.0, 1.0}) set_pev(Ent, pev_origin, Origin) set_pev(Ent, pev_gravity, 0.01) set_pev(Ent, pev_solid, SOLID_TRIGGER) set_pev(Ent, pev_frame, 0.0) set_pev(Ent, pev_owner, id) set_pev(Ent, pev_iuser4, Offset) get_speed_vector(Origin, TargetOrigin, Speed * 3.0, Velocity) set_pev(Ent, pev_velocity, Velocity) } stock make_bullet(id, Float:Origin[3]) { // Find target new decal = random_num(41, 45) const loop_time = 2 static Body, Target get_user_aiming(id, Target, Body, 999999) if(is_user_connected(Target)) return for(new i = 0; i < loop_time; i++) { // Put decal on "world" (a wall) message_begin(MSG_BROADCAST, SVC_TEMPENTITY) write_byte(TE_WORLDDECAL) engfunc(EngFunc_WriteCoord, Origin[0]) engfunc(EngFunc_WriteCoord, Origin[1]) engfunc(EngFunc_WriteCoord, Origin[2]) write_byte(decal) message_end() // Show sparcles message_begin(MSG_BROADCAST, SVC_TEMPENTITY) write_byte(TE_GUNSHOTDECAL) engfunc(EngFunc_WriteCoord, Origin[0]) engfunc(EngFunc_WriteCoord, Origin[1]) engfunc(EngFunc_WriteCoord, Origin[2]) write_short(id) write_byte(decal) message_end() } } stock fake_smoke(id, trace_result) { static Float:vecSrc[3], Float:vecEnd[3], TE_FLAG get_weapon_attachment(id, vecSrc) global_get(glb_v_forward, vecEnd) xs_vec_mul_scalar(vecEnd, 8192.0, vecEnd) xs_vec_add(vecSrc, vecEnd, vecEnd) get_tr2(trace_result, TR_vecEndPos, vecSrc) get_tr2(trace_result, TR_vecPlaneNormal, vecEnd) xs_vec_mul_scalar(vecEnd, 2.5, vecEnd) xs_vec_add(vecSrc, vecEnd, vecEnd) TE_FLAG |= TE_EXPLFLAG_NODLIGHTS TE_FLAG |= TE_EXPLFLAG_NOSOUND TE_FLAG |= TE_EXPLFLAG_NOPARTICLES engfunc(EngFunc_MessageBegin, MSG_PAS, SVC_TEMPENTITY, vecEnd, 0) write_byte(TE_EXPLOSION) engfunc(EngFunc_WriteCoord, vecEnd[0]) engfunc(EngFunc_WriteCoord, vecEnd[1]) engfunc(EngFunc_WriteCoord, vecEnd[2] - 10.0) write_short(g_smokepuff_id) write_byte(2) write_byte(50) write_byte(TE_FLAG) message_end() } stock get_weapon_attachment(id, Float:output[3], Float:fDis = 40.0) { new Float:vfEnd[3], viEnd[3] get_user_origin(id, viEnd, 3) IVecFVec(viEnd, vfEnd) new Float:fOrigin[3], Float:fAngle[3] pev(id, pev_origin, fOrigin) pev(id, pev_view_ofs, fAngle) xs_vec_add(fOrigin, fAngle, fOrigin) new Float:fAttack[3] xs_vec_sub(vfEnd, fOrigin, fAttack) xs_vec_sub(vfEnd, fOrigin, fAttack) new Float:fRate fRate = fDis / vector_length(fAttack) xs_vec_mul_scalar(fAttack, fRate, fAttack) xs_vec_add(fOrigin, fAttack, output) } stock set_weapon_anim(id, anim) { if(!is_user_alive(id)) return set_pev(id, pev_weaponanim, anim) message_begin(MSG_ONE_UNRELIABLE, SVC_WEAPONANIM, _, id) write_byte(anim) write_byte(0) message_end() } stock fm_cs_get_weapon_ent_owner(ent) { if (pev_valid(ent) != PDATA_SAFE) return -1 return get_pdata_cbase(ent, OFFSET_WEAPONOWNER, OFFSET_LINUX_WEAPONS) } stock set_player_nextattack(id, Float:nexttime) { if(!is_user_alive(id)) return set_pdata_float(id, m_flNextAttack, nexttime, 5) } stock set_weapons_timeidle(id, WeaponId ,Float:TimeIdle) { if(!is_user_alive(id)) return static entwpn; entwpn = fm_get_user_weapon_entity(id, WeaponId) if(!pev_valid(entwpn)) return set_pdata_float(entwpn, 46, TimeIdle, OFFSET_LINUX_WEAPONS) set_pdata_float(entwpn, 47, TimeIdle, OFFSET_LINUX_WEAPONS) set_pdata_float(entwpn, 48, TimeIdle + 0.5, OFFSET_LINUX_WEAPONS) } stock get_position(id,Float:forw, Float:right, Float:up, Float:vStart[]) { static Float:vOrigin[3], Float:vAngle[3], Float:vForward[3], Float:vRight[3], Float:vUp[3] pev(id, pev_origin, vOrigin) pev(id, pev_view_ofs, vUp) //for player xs_vec_add(vOrigin, vUp, vOrigin) pev(id, pev_v_angle, vAngle) // if normal entity ,use pev_angles angle_vector(vAngle,ANGLEVECTOR_FORWARD, vForward) //or use EngFunc_AngleVectors angle_vector(vAngle,ANGLEVECTOR_RIGHT, vRight) angle_vector(vAngle,ANGLEVECTOR_UP, vUp) vStart[0] = vOrigin[0] + vForward[0] * forw + vRight[0] * right + vUp[0] * up vStart[1] = vOrigin[1] + vForward[1] * forw + vRight[1] * right + vUp[1] * up vStart[2] = vOrigin[2] + vForward[2] * forw + vRight[2] * right + vUp[2] * up } stock get_speed_vector(const Float:origin1[3],const Float:origin2[3],Float:speed, Float:new_velocity[3]) { new_velocity[0] = origin2[0] - origin1[0] new_velocity[1] = origin2[1] - origin1[1] new_velocity[2] = origin2[2] - origin1[2] new Float:num = floatsqroot(speed*speed / (new_velocity[0]*new_velocity[0] + new_velocity[1]*new_velocity[1] + new_velocity[2]*new_velocity[2])) new_velocity[0] *= num new_velocity[1] *= num new_velocity[2] *= num return 1; } // Drop primary/secondary weapons stock drop_weapons(id, dropwhat) { // Get user weapons static weapons[32], num, i, weaponid num = 0 // reset passed weapons count (bugfix) get_user_weapons(id, weapons, num) // Loop through them and drop primaries or secondaries for (i = 0; i < num; i++) { // Prevent re-indexing the array weaponid = weapons[i] if ((dropwhat == 1 && ((1<<weaponid) & PRIMARY_WEAPONS_BIT_SUM)) || (dropwhat == 2 && ((1<<weaponid) & SECONDARY_WEAPONS_BIT_SUM))) { // Get weapon entity static wname[32] get_weaponname(weaponid, wname, charsmax(wname)) // Player drops the weapon and looses his bpammo engclient_cmd(id, "drop", wname) cs_set_user_bpammo(id, weaponid, 0) } } } /* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE *{\\ rtf1\\ ansi\\ deff0{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang1033\\ f0\\ fs16 \n\\ par } */
Błędy które wyskakują przy kompilacji:
//// balrog11.sma // C:\Users\CsGOk\OneDrive\Pulpit\compiler\compiler\balrog11.sma(118) : error 017: undefined symbol "g_Weapon" // C:\Users\CsGOk\OneDrive\Pulpit\compiler\compiler\balrog11.sma(118) : warning 215: expression has no effect // C:\Users\CsGOk\OneDrive\Pulpit\compiler\compiler\balrog11.sma(118) : error 001: expected token: ";", but found "]" // C:\Users\CsGOk\OneDrive\Pulpit\compiler\compiler\balrog11.sma(118) : error 029: invalid expression, assumed zero // C:\Users\CsGOk\OneDrive\Pulpit\compiler\compiler\balrog11.sma(118) : fatal error 107: too many error messages on one line // // Compilation aborted. // 4 Errors. // Could not locate output file compiled\balrog11.amx (compile failed). // // Compilation Time: 3,02 sec // ----------------------------------------
przykładowy ss jak wyglądają bronie po dodaniu ich do menu
https://forums.allie...67&d=1241772241
Jesli ktoś mógłby pomóc to będę bardzo wdzięczny bo mam zamiar dodać więcej takich broni do użytku w grze
Użytkownik SulDooR edytował ten post 26.06.2018 21:42
Rivit
06.07.2018
Wszystko opiera sie na
register_gxm_item("Sawn Off Shotgun", "-Clip -Aim -Rate +Power +Scope ( Xm1014 )", 120) public gxm_item_enabled(id) { g_Weapon[id] = true; }
Rejestrujesz - wiadomo po co.
forward gxm_item_enabled jest wylowywany jak ktos kupi czy co tam sie robi ten upgrade. (register automatycznie trzyma info o tym do ktorego pluginu wysłać enable)
No i tyle całej magii. Babrałem się długo z tym modem, wiem mniej więcej co i jak. Wiem też że koszmarnie zrobione te .inc są tam.
Ogólna zasada: szukasz w pluginie czegoś co włącza/daje broń. Tworzysz gxm_item_enabled i do niego dajesz wywoałanie własnie funkcji co dodaje/włącza nową broń i tyle
W balrog (który tez robiłem) będzie to to:
register_clcmd("admin_get_balrog11", "Get_Balrog11", ADMIN_RCON)
do Get_Balrog11 podpinasz forward o ktorym pisalem wczesniej, jak co to pytaj i pliki w .sma dawaj jak długie są.
PS. Pisałem nba szybko
LEMO
06.07.2018
Wszystko opiera sie na
register_gxm_item("Sawn Off Shotgun", "-Clip -Aim -Rate +Power +Scope ( Xm1014 )", 120) public gxm_item_enabled(id) { g_Weapon[id] = true; }Rejestrujesz - wiadomo po co.
forward gxm_item_enabled jest wylowywany jak ktos kupi czy co tam sie robi ten upgrade. (register automatycznie trzyma info o tym do ktorego pluginu wysłać enable)
No i tyle całej magii. Babrałem się długo z tym modem, wiem mniej więcej co i jak. Wiem też że koszmarnie zrobione te .inc są tam.
Ogólna zasada: szukasz w pluginie czegoś co włącza/daje broń. Tworzysz gxm_item_enabled i do niego dajesz wywoałanie własnie funkcji co dodaje/włącza nową broń i tyle
W balrog (który tez robiłem) będzie to to:
register_clcmd("admin_get_balrog11", "Get_Balrog11", ADMIN_RCON)do Get_Balrog11 podpinasz forward o ktorym pisalem wczesniej, jak co to pytaj i pliki w .sma dawaj jak długie są.
PS. Pisałem nba szybko
register_gxm_item("Sawn Off Shotgun", "-Clip -Aim -Rate +Power +Scope ( Xm1014 )", 120)
to dodaje ten upgrade do menu gdzie można to wykupić ale po kupnie nie daje upgrade
jeśli mógłbyś podać przykład co dopisac np do tego barloga czy byle gdzie żebym mógł się w przyszłosci stosować do wzoru(w sensie żeby podmieniało w tym przypadku XM1014 na Sawn Off Shoutgun chodzi o ten forward bo ja to nie czaje co to jest )
register_clcmd("admin_get_balrog11", "Get_Balrog11", ADMIN_RCON)
to chyba daje broń ale własciwie dalej nie wiem w czym problem
powiedz mi czy w ogóle ten barlog który tu wrzuciłem jest dobrze zrobiony?
jeśli tak to możesz spróbować mi go skompilować?
i na końcu dodam że broń po wykupieniu upgradu nie ma być dawana jako dodatkowa lecz zamieniana za obecną czyli masz AK-47 Kupujesz upgrade do ak np: AK-KNIFE" i zamiast zwykłego ak masz ak-knife a nie ak i dodatkowo ak-knife bo po rundzie by się ją prawdopodobnie traciło bo w gunxpmodzie co runde wybiera się nową broń lub co smierć
Czyli czy mógł byś mi podac przykład tego forwardu? w sensie to nie wywołuje komendy która daje broń:
register_gxm_item("Sawn Off Shotgun", "-Clip -Aim -Rate +Power +Scope ( Xm1014 )", 120)
public gxm_item_enabled(id)
{
g_Weapon[id] = true;
}
To co trzeba dopisać żeby tak było? bo ja to się sam nie domyśle a z tego co ty mi o tym forwardzie pisałeś to nie zbytnio rozumiem co to w ogóle jest ten forward i gdzie go trzeba dopisać czy coś.
wiem że to może brzmieć żałosnie ale cóż
Użytkownik LEMO edytował ten post 06.07.2018 18:53
Rivit
06.07.2018
usuń
register_clcmd("admin_get_balrog11", "Get_Balrog11", ADMIN_RCON)
i zamien Get_Balrog11 na gxm_item_enabled w publicu
I zobacz czy bedzie dzialac
LEMO
06.07.2018
usuń
register_clcmd("admin_get_balrog11", "Get_Balrog11", ADMIN_RCON)i zamien Get_Balrog11 na gxm_item_enabled w publicu
I zobacz czy bedzie dzialac
mógłbyś mi to zrobić żebym mógł wiedziec jak to pózniej robić w innych sma? bo nie wiem gdzie dokladnie mam to zmienić a metodą prób i błedów daleko nie zaszedłem
to jest w tym?
{
g_had_balrog11[id] = 1
g_old_weapon[id] = 0
g_holding_attack[id] = 0
g_Shoot_Count[id] = 0
g_SpecialAmmo[id] = 0
fm_give_item(id, weapon_balrog11)
cs_set_user_bpammo(id, CSW_BALROG11, BPAMMO)
update_ammo(id)
update_specialammo(id, g_SpecialAmmo[id], g_SpecialAmmo[id] > 0 ? 1 : 0)
}
{
register_plugin(PLUGIN, VERSION, AUTHOR)
register_event("CurWeapon", "Event_CurWeapon", "be", "1=1")
register_think(FIRE_CLASSNAME, "fw_Think")
register_touch(FIRE_CLASSNAME, "*", "fw_Touch")
register_forward(FM_CmdStart, "fw_CmdStart")
register_forward(FM_SetModel, "fw_SetModel")
register_forward(FM_UpdateClientData, "fw_UpdateClientData_Post", 1)
register_forward(FM_PlaybackEvent, "fw_PlaybackEvent")
RegisterHam(Ham_TraceAttack, "player", "fw_TraceAttack")
RegisterHam(Ham_TraceAttack, "worldspawn", "fw_TraceAttack")
RegisterHam(Ham_Item_AddToPlayer, weapon_balrog11, "fw_Item_AddToPlayer_Post", 1)
RegisterHam(Ham_Item_PostFrame, weapon_balrog11, "fw_Item_PostFrame")
RegisterHam(Ham_Item_Deploy, weapon_balrog11, "fw_Item_Deploy_Post", 1)
g_Msg_StatusIcon = get_user_msgid("StatusIcon")
g_MaxPlayers = get_maxplayers()
register_clcmd("admin_get_balrog11", "Get_Balrog11", ADMIN_RCON)
register_clcmd("weapon_balrog11", "hook_weapon")
}
Użytkownik LEMO edytował ten post 06.07.2018 19:29
Rivit
06.07.2018
z plugin_init() usuwasz linijkę register_clcmd("admin_get_balrog11", "Get_Balrog11", ADMIN_RCON)
a public Get_Balrog11(id) zamien na public gxm_item_enabled(id)
LEMO
06.07.2018
z plugin_init() usuwasz linijkę register_clcmd("admin_get_balrog11", "Get_Balrog11", ADMIN_RCON)
a public Get_Balrog11(id) zamien na public gxm_item_enabled(id)
zrobiłem tak :
#include <amxmodx> #include <engine> #include <fakemeta> #include <fakemeta_util> #include <hamsandwich> #include <cstrike> #include <gunxpmod> #define PLUGIN "[CSO] Weapon: BALROG-VII" #define VERSION "1.0" #define AUTHOR "Dias Pendragon" #define DAMAGE_A 31 #define DAMAGE_B 100 #define EXPLOSION_AMMO 10 #define RADIUS 100.0 #define CLIP 120 #define CSW_BALROG7 CSW_M249 #define weapon_BALROG7 "weapon_m249" #define PLAYER_ANIMEXT "m249" #define BALROG7_OLDMODEL "models/w_m249.mdl" #define V_MODEL "models/v_balrog7.mdl" #define P_MODEL "models/p_balrog7.mdl" #define W_MODEL "models/w_balrog7.mdl" new const BALROG7_Sounds[7][] = { "weapons/balrog7-1.wav", "weapons/balrog7-2.wav", "weapons/balrog7_clipin1.wav", "weapons/balrog7_clipin2.wav", "weapons/balrog7_clipin3.wav", "weapons/balrog7_clipout1.wav", "weapons/balrog7_clipout2.wav" } new const ExplosionSpr[] = "sprites/balrog5stack.spr" // MACROS #define Get_BitVar(%1,%2) (%1 & (1 << (%2 & 31))) #define Set_BitVar(%1,%2) %1 |= (1 << (%2 & 31)) #define UnSet_BitVar(%1,%2) %1 &= ~(1 << (%2 & 31)) const PRIMARY_WEAPONS_BIT_SUM = (1<<CSW_SCOUT)|(1<<CSW_XM1014)|(1<<CSW_MAC10)|(1<<CSW_AUG)|(1<<CSW_UMP45)|(1<<CSW_SG550)|(1<<CSW_GALIL)|(1<<CSW_FAMAS)|(1<<CSW_AWP)|(1<<CSW_MP5NAVY)|(1<<CSW_M249)|(1<<CSW_M3)|(1<<CSW_M4A1)|(1<<CSW_TMP)|(1<<CSW_G3SG1)|(1<<CSW_SG552)|(1<<CSW_AK47)|(1<<CSW_P90) const SECONDARY_WEAPONS_BIT_SUM = (1<<CSW_P228)|(1<<CSW_ELITE)|(1<<CSW_FIVESEVEN)|(1<<CSW_USP)|(1<<CSW_GLOCK18)|(1<<CSW_DEAGLE) new g_Had_BALROG7, g_BALROG7_Clip[33], g_BulletCount[33] new g_Event_BALROG7, g_SmokePuff_SprId, g_RifleShell_Id, g_ham_bot, g_SprId, g_MaxPlayers public plugin_init() { register_plugin(PLUGIN, VERSION, AUTHOR) register_gxm_item("Barlog 7 (M249)", "-Szybkostszelnosc +DMG +Scope ( M249 )", 500 register_forward(FM_UpdateClientData,"fw_UpdateClientData_Post", 1) register_forward(FM_PlaybackEvent, "fw_PlaybackEvent") register_forward(FM_SetModel, "fw_SetModel") register_forward(FM_CmdStart, "fw_CmdStart") RegisterHam(Ham_Weapon_WeaponIdle, weapon_BALROG7, "fw_Weapon_WeaponIdle_Post", 1) RegisterHam(Ham_Item_Deploy, weapon_BALROG7, "fw_Item_Deploy_Post", 1) RegisterHam(Ham_Item_AddToPlayer, weapon_BALROG7, "fw_Item_AddToPlayer_Post", 1) RegisterHam(Ham_Item_PostFrame, weapon_BALROG7, "fw_Item_PostFrame") RegisterHam(Ham_Weapon_Reload, weapon_BALROG7, "fw_Weapon_Reload") RegisterHam(Ham_Weapon_Reload, weapon_BALROG7, "fw_Weapon_Reload_Post", 1) RegisterHam(Ham_TraceAttack, "worldspawn", "fw_TraceAttack_World") RegisterHam(Ham_TraceAttack, "player", "fw_TraceAttack_Player") g_MaxPlayers = get_maxplayers() } public gxm_item_enabled(id) { g_Weapon[id] = true; } public plugin_precache() { engfunc(EngFunc_PrecacheModel, V_MODEL) engfunc(EngFunc_PrecacheModel, P_MODEL) engfunc(EngFunc_PrecacheModel, W_MODEL) new i for(i = 0; i < sizeof(BALROG7_Sounds); i++) engfunc(EngFunc_PrecacheSound, BALROG7_Sounds[i]) g_RifleShell_Id = engfunc(EngFunc_PrecacheModel, "models/rshell.mdl") g_SmokePuff_SprId = engfunc(EngFunc_PrecacheModel, "sprites/wall_puff1.spr") g_SprId = precache_model(ExplosionSpr) register_forward(FM_PrecacheEvent, "fw_PrecacheEvent_Post", 1) } public fw_PrecacheEvent_Post(type, const name[]) { if(equal("events/m249.sc", name)) g_Event_BALROG7 = get_orig_retval() } public client_putinserver(id) { if(!g_ham_bot && is_user_bot(id)) { g_ham_bot = 1 set_task(0.1, "Do_Register_HamBot", id) } } public Do_Register_HamBot(id) { RegisterHamFromEntity(Ham_TraceAttack, id, "fw_TraceAttack_Player") } public gxm_item_enabled(id) { if(!is_user_alive(id)) return drop_weapons(id, 1) g_BulletCount[id] = 0 Set_BitVar(g_Had_BALROG7, id) fm_give_item(id, weapon_BALROG7) Give_RealAmmo(id, CSW_BALROG7) engfunc(EngFunc_MessageBegin, MSG_ONE_UNRELIABLE, get_user_msgid("CurWeapon"), {0, 0, 0}, id) write_byte(1) write_byte(CSW_BALROG7) write_byte(CLIP) message_end() } public Remove_BALROG7(id) { g_BulletCount[id] = 0 UnSet_BitVar(g_Had_BALROG7, id) } public Hook_Weapon(id) { engclient_cmd(id, weapon_BALROG7) return PLUGIN_HANDLED } public fw_UpdateClientData_Post(id, sendweapons, cd_handle) { if(!is_user_alive(id) || !is_user_connected(id)) return FMRES_IGNORED if(get_user_weapon(id) == CSW_BALROG7 && Get_BitVar(g_Had_BALROG7, id)) set_cd(cd_handle, CD_flNextAttack, get_gametime() + 0.001) return FMRES_HANDLED } public fw_PlaybackEvent(flags, invoker, eventid, Float:delay, Float:origin[3], Float:angles[3], Float:fparam1, Float:fparam2, iParam1, iParam2, bParam1, bParam2) { if (!is_user_connected(invoker)) return FMRES_IGNORED if(get_user_weapon(invoker) != CSW_BALROG7 || !Get_BitVar(g_Had_BALROG7, invoker)) return FMRES_IGNORED if(eventid != g_Event_BALROG7) return FMRES_IGNORED engfunc(EngFunc_PlaybackEvent, flags | FEV_HOSTONLY, invoker, eventid, delay, origin, angles, fparam1, fparam2, iParam1, iParam2, bParam1, bParam2) set_weapon_anim(invoker, 1) emit_sound(invoker, CHAN_WEAPON, BALROG7_Sounds[0], 1.0, ATTN_NORM, 0, PITCH_NORM) Eject_Shell(invoker, g_RifleShell_Id, 0.01) g_BulletCount[invoker]++ if(g_BulletCount[invoker] >= EXPLOSION_AMMO) { // Explo***ingsion static Float:Origin[3]; fm_get_aim_origin(invoker, Origin) message_begin(MSG_BROADCAST ,SVC_TEMPENTITY) write_byte(TE_EXPLOSION) engfunc(EngFunc_WriteCoord, Origin[0]) engfunc(EngFunc_WriteCoord, Origin[1]) engfunc(EngFunc_WriteCoord, Origin[2]) write_short(g_SprId) // sprite index write_byte(15) // scale in 0.1's write_byte(15) // framerate write_byte(0) // flags message_end() message_begin(MSG_BROADCAST,SVC_TEMPENTITY) write_byte(TE_DLIGHT) engfunc(EngFunc_WriteCoord, Origin[0]) engfunc(EngFunc_WriteCoord, Origin[1]) engfunc(EngFunc_WriteCoord, Origin[2]) write_byte(20); // radius write_byte(255) // r write_byte(25) // g write_byte(25) // b write_byte(10) // life <<<<<<<< write_byte(50) // decay rate message_end() static Float:Origin2[3] for(new i = 0; i < g_MaxPlayers; i++) { if(!is_user_alive(i)) continue if(cs_get_user_team(i) == cs_get_user_team(invoker)) continue pev(i, pev_origin, Origin2) if(get_distance_f(Origin, Origin2) > RADIUS) continue ExecuteHamB(Ham_TakeDamage, i, fm_get_user_weapon_entity(invoker, CSW_BALROG7), invoker, float(DAMAGE_B), DMG_BLAST) } g_BulletCount[invoker] = 0 } return FMRES_IGNORED } public fw_SetModel(entity, model[]) { if(!pev_valid(entity)) return FMRES_IGNORED static Classname[32] pev(entity, pev_classname, Classname, sizeof(Classname)) if(!equal(Classname, "weaponbox")) return FMRES_IGNORED static iOwner iOwner = pev(entity, pev_owner) if(equal(model, BALROG7_OLDMODEL)) { static weapon; weapon = fm_find_ent_by_owner(-1, weapon_BALROG7, entity) if(!pev_valid(weapon)) return FMRES_IGNORED; if(Get_BitVar(g_Had_BALROG7, iOwner)) { Remove_BALROG7(iOwner) set_pev(weapon, pev_impulse, 28122014) engfunc(EngFunc_SetModel, entity, W_MODEL) return FMRES_SUPERCEDE } } return FMRES_IGNORED; } public fw_CmdStart(id, uc_handle, seed) { if(!is_user_alive(id)) return FMRES_IGNORED if(!Get_BitVar(g_Had_BALROG7, id) || get_user_weapon(id) != CSW_BALROG7) return FMRES_IGNORED static PressButton; PressButton = get_uc(uc_handle, UC_Buttons) static OldButton; OldButton = pev(id, pev_oldbuttons) if(!(PressButton & IN_ATTACK) && (OldButton & IN_ATTACK)) { g_BulletCount[id] = 0 } return FMRES_IGNORED } public Make_ShootEffect(id) { static Float:Angles[3] pev(id, pev_punchangle, Angles) Angles[0] += random_float(-1.5, 0.0) Angles[1] += random_float(-0.75, 0.75) set_pev(id, pev_punchangle, Angles) } public fw_Weapon_WeaponIdle_Post(Ent) { if(pev_valid(Ent) != 2) return HAM_IGNORED static Id; Id = get_pdata_cbase(Ent, 41, 4) if(get_pdata_cbase(Id, 373) != Ent) return HAM_IGNORED if(!Get_BitVar(g_Had_BALROG7, Id)) return HAM_IGNORED if(get_pdata_float(Ent, 48, 4) <= 0.1) { //if(g_BALROG7_Mode[Id] == BALROG7_NORMAL) set_weapon_anim(Id, B7_ANIM_IDLE) //else if(g_BALROG7_Mode[Id] == BALROG7_ACTIVE) set_weapon_anim(Id, B7_ANIM_IDLE_ACTIVE) //else if(g_BALROG7_Mode[Id] == BALROG7_JANUS) set_weapon_anim(Id, B7_ANIM_IDLE_JANUS) //set_pdata_float(Ent, 48, 20.0, 4) set_pdata_string(Id, (492) * 4, PLAYER_ANIMEXT, -1 , 20) } return HAM_IGNORED } public fw_Item_Deploy_Post(Ent) { if(pev_valid(Ent) != 2) return static Id; Id = get_pdata_cbase(Ent, 41, 4) if(get_pdata_cbase(Id, 373) != Ent) return if(!Get_BitVar(g_Had_BALROG7, Id)) return set_pev(Id, pev_viewmodel2, V_MODEL) set_pev(Id, pev_weaponmodel2, P_MODEL) set_weapon_anim(Id, 5) } public fw_Item_AddToPlayer_Post(Ent, id) { if(!pev_valid(Ent)) return HAM_IGNORED if(pev(Ent, pev_impulse) == 28122014) { Set_BitVar(g_Had_BALROG7, id) set_pev(Ent, pev_impulse, 0) } return HAM_HANDLED } public fw_Item_PostFrame(ent) { static id; id = pev(ent, pev_owner) if(!is_user_alive(id)) return HAM_IGNORED if(!Get_BitVar(g_Had_BALROG7, id)) return HAM_IGNORED static Float:flNextAttack; flNextAttack = get_pdata_float(id, 83, 5) static bpammo; bpammo = cs_get_user_bpammo(id, CSW_BALROG7) static iClip; iClip = get_pdata_int(ent, 51, 4) static fInReload; fInReload = get_pdata_int(ent, 54, 4) if(fInReload && flNextAttack <= 0.0) { static temp1 temp1 = min(CLIP - iClip, bpammo) set_pdata_int(ent, 51, iClip + temp1, 4) cs_set_user_bpammo(id, CSW_BALROG7, bpammo - temp1) set_pdata_int(ent, 54, 0, 4) fInReload = 0 } return HAM_IGNORED } public fw_Weapon_Reload(ent) { static id; id = pev(ent, pev_owner) if(!is_user_alive(id)) return HAM_IGNORED if(!Get_BitVar(g_Had_BALROG7, id)) return HAM_IGNORED g_BALROG7_Clip[id] = -1 static BPAmmo; BPAmmo = cs_get_user_bpammo(id, CSW_BALROG7) static iClip; iClip = get_pdata_int(ent, 51, 4) if(BPAmmo <= 0) return HAM_SUPERCEDE if(iClip >= CLIP) return HAM_SUPERCEDE g_BALROG7_Clip[id] = iClip return HAM_HANDLED } public fw_Weapon_Reload_Post(ent) { static id; id = pev(ent, pev_owner) if(!is_user_alive(id)) return HAM_IGNORED if(!Get_BitVar(g_Had_BALROG7, id)) return HAM_IGNORED if((get_pdata_int(ent, 54, 4) == 1)) { // Reload if(g_BALROG7_Clip[id] == -1) return HAM_IGNORED set_pdata_int(ent, 51, g_BALROG7_Clip[id], 4) set_weapon_anim(id, 4) } return HAM_HANDLED } public fw_TraceAttack_World(Victim, Attacker, Float:Damage, Float:Direction[3], Ptr, DamageBits) { if(!is_user_connected(Attacker)) return HAM_IGNORED if(get_user_weapon(Attacker) != CSW_BALROG7 || !Get_BitVar(g_Had_BALROG7, Attacker)) return HAM_IGNORED static Float:flEnd[3], Float:vecPlane[3] get_tr2(Ptr, TR_vecEndPos, flEnd) get_tr2(Ptr, TR_vecPlaneNormal, vecPlane) Make_BulletHole(Attacker, flEnd, Damage) Make_BulletSmoke(Attacker, Ptr) SetHamParamFloat(3, float(DAMAGE_A)) return HAM_IGNORED } public fw_TraceAttack_Player(Victim, Attacker, Float:Damage, Float:Direction[3], Ptr, DamageBits) { if(!is_user_connected(Attacker)) return HAM_IGNORED if(get_user_weapon(Attacker) != CSW_BALROG7 || !Get_BitVar(g_Had_BALROG7, Attacker)) return HAM_IGNORED SetHamParamFloat(3, float(DAMAGE_A)) return HAM_IGNORED } public Give_RealAmmo(id, CSWID) { static Amount, Max switch(CSWID) { case CSW_P228: {Amount = 10; Max = 104;} case CSW_SCOUT: {Amount = 6; Max = 180;} case CSW_XM1014: {Amount = 8; Max = 64;} case CSW_MAC10: {Amount = 16; Max = 200;} case CSW_AUG: {Amount = 6; Max = 180;} case CSW_ELITE: {Amount = 16; Max = 200;} case CSW_FIVESEVEN: {Amount = 4; Max = 200;} case CSW_UMP45: {Amount = 16; Max = 200;} case CSW_SG550: {Amount = 6; Max = 180;} case CSW_GALIL: {Amount = 6; Max = 180;} case CSW_FAMAS: {Amount = 6; Max = 180;} case CSW_USP: {Amount = 18; Max = 200;} case CSW_GLOCK18: {Amount = 16; Max = 200;} case CSW_AWP: {Amount = 6; Max = 60;} case CSW_MP5NAVY: {Amount = 16; Max = 200;} case CSW_M249: {Amount = 4; Max = 200;} case CSW_M3: {Amount = 8; Max = 64;} case CSW_M4A1: {Amount = 7; Max = 180;} case CSW_TMP: {Amount = 7; Max = 200;} case CSW_G3SG1: {Amount = 7; Max = 180;} case CSW_DEAGLE: {Amount = 10; Max = 70;} case CSW_SG552: {Amount = 7; Max = 180;} case CSW_AK47: {Amount = 7; Max = 180;} case CSW_P90: {Amount = 4; Max = 200;} default: {Amount = 3; Max = 200;} } for(new i = 0; i < Amount; i++) give_ammo(id, 0, CSWID, Max) } public give_ammo(id, silent, CSWID, Max) { static Amount, Name[32] switch(CSWID) { case CSW_P228: {Amount = 13; formatex(Name, sizeof(Name), "357sig");} case CSW_SCOUT: {Amount = 30; formatex(Name, sizeof(Name), "762nato");} case CSW_XM1014: {Amount = 8; formatex(Name, sizeof(Name), "buckshot");} case CSW_MAC10: {Amount = 12; formatex(Name, sizeof(Name), "45acp");} case CSW_AUG: {Amount = 30; formatex(Name, sizeof(Name), "556nato");} case CSW_ELITE: {Amount = 30; formatex(Name, sizeof(Name), "9mm");} case CSW_FIVESEVEN: {Amount = 50; formatex(Name, sizeof(Name), "57mm");} case CSW_UMP45: {Amount = 12; formatex(Name, sizeof(Name), "45acp");} case CSW_SG550: {Amount = 30; formatex(Name, sizeof(Name), "556nato");} case CSW_GALIL: {Amount = 30; formatex(Name, sizeof(Name), "556nato");} case CSW_FAMAS: {Amount = 30; formatex(Name, sizeof(Name), "556nato");} case CSW_USP: {Amount = 12; formatex(Name, sizeof(Name), "45acp");} case CSW_GLOCK18: {Amount = 30; formatex(Name, sizeof(Name), "9mm");} case CSW_AWP: {Amount = 10; formatex(Name, sizeof(Name), "338magnum");} case CSW_MP5NAVY: {Amount = 30; formatex(Name, sizeof(Name), "9mm");} case CSW_M249: {Amount = 30; formatex(Name, sizeof(Name), "556natobox");} case CSW_M3: {Amount = 8; formatex(Name, sizeof(Name), "buckshot");} case CSW_M4A1: {Amount = 30; formatex(Name, sizeof(Name), "556nato");} case CSW_TMP: {Amount = 30; formatex(Name, sizeof(Name), "9mm");} case CSW_G3SG1: {Amount = 30; formatex(Name, sizeof(Name), "762nato");} case CSW_DEAGLE: {Amount = 7; formatex(Name, sizeof(Name), "50ae");} case CSW_SG552: {Amount = 30; formatex(Name, sizeof(Name), "556nato");} case CSW_AK47: {Amount = 30; formatex(Name, sizeof(Name), "762nato");} case CSW_P90: {Amount = 50; formatex(Name, sizeof(Name), "57mm");} } if(!silent) emit_sound(id, CHAN_ITEM, "items/9mmclip1.wav", VOL_NORM, ATTN_NORM, 0, PITCH_NORM) ExecuteHamB(Ham_GiveAmmo, id, Amount, Name, Max) } stock Eject_Shell(id, Shell_ModelIndex, Float:Time) // By Dias { static Ent; Ent = get_pdata_cbase(id, 373, 5) if(!pev_valid(Ent)) return set_pdata_int(Ent, 57, Shell_ModelIndex, 4) set_pdata_float(id, 111, get_gametime() + Time) } // Drop primary/secondary weapons stock drop_weapons(id, dropwhat) { // Get user weapons static weapons[32], num, i, weaponid num = 0 // reset passed weapons count (bugfix) get_user_weapons(id, weapons, num) // Loop through them and drop primaries or secondaries for (i = 0; i < num; i++) { // Prevent re-indexing the array weaponid = weapons[i] if ((dropwhat == 1 && ((1<<weaponid) & PRIMARY_WEAPONS_BIT_SUM)) || (dropwhat == 2 && ((1<<weaponid) & SECONDARY_WEAPONS_BIT_SUM))) { // Get weapon entity static wname[32]; get_weaponname(weaponid, wname, charsmax(wname)) engclient_cmd(id, "drop", wname) } } } stock set_weapon_anim(id, anim) { set_pev(id, pev_weaponanim, anim) message_begin(MSG_ONE_UNRELIABLE, SVC_WEAPONANIM, {0, 0, 0}, id) write_byte(anim) write_byte(pev(id, pev_body)) message_end() } stock Make_BulletHole(id, Float:Origin[3], Float:Damage) { // Find target static Decal; Decal = random_num(41, 45) static LoopTime; if(Damage > 100.0) LoopTime = 2 else LoopTime = 1 for(new i = 0; i < LoopTime; i++) { // Put decal on "world" (a wall) message_begin(MSG_BROADCAST, SVC_TEMPENTITY) write_byte(TE_WORLDDECAL) engfunc(EngFunc_WriteCoord, Origin[0]) engfunc(EngFunc_WriteCoord, Origin[1]) engfunc(EngFunc_WriteCoord, Origin[2]) write_byte(Decal) message_end() // Show sparcles message_begin(MSG_BROADCAST, SVC_TEMPENTITY) write_byte(TE_GUNSHOTDECAL) engfunc(EngFunc_WriteCoord, Origin[0]) engfunc(EngFunc_WriteCoord, Origin[1]) engfunc(EngFunc_WriteCoord, Origin[2]) write_short(id) write_byte(Decal) message_end() } } stock Make_BulletSmoke(id, TrResult) { static Float:vecSrc[3], Float:vecEnd[3], TE_FLAG get_weapon_attachment(id, vecSrc) global_get(glb_v_forward, vecEnd) xs_vec_mul_scalar(vecEnd, 8192.0, vecEnd) xs_vec_add(vecSrc, vecEnd, vecEnd) get_tr2(TrResult, TR_vecEndPos, vecSrc) get_tr2(TrResult, TR_vecPlaneNormal, vecEnd) xs_vec_mul_scalar(vecEnd, 2.5, vecEnd) xs_vec_add(vecSrc, vecEnd, vecEnd) TE_FLAG |= TE_EXPLFLAG_NODLIGHTS TE_FLAG |= TE_EXPLFLAG_NOSOUND TE_FLAG |= TE_EXPLFLAG_NOPARTICLES engfunc(EngFunc_MessageBegin, MSG_PAS, SVC_TEMPENTITY, vecEnd, 0) write_byte(TE_EXPLOSION) engfunc(EngFunc_WriteCoord, vecEnd[0]) engfunc(EngFunc_WriteCoord, vecEnd[1]) engfunc(EngFunc_WriteCoord, vecEnd[2] - 10.0) write_short(g_SmokePuff_SprId) write_byte(2) write_byte(50) write_byte(TE_FLAG) message_end() } stock get_weapon_attachment(id, Float:output[3], Float:fDis = 40.0) { static Float:vfEnd[3], viEnd[3] get_user_origin(id, viEnd, 3) IVecFVec(viEnd, vfEnd) static Float:fOrigin[3], Float:fAngle[3] pev(id, pev_origin, fOrigin) pev(id, pev_view_ofs, fAngle) xs_vec_add(fOrigin, fAngle, fOrigin) static Float:fAttack[3] xs_vec_sub(vfEnd, fOrigin, fAttack) xs_vec_sub(vfEnd, fOrigin, fAttack) static Float:fRate fRate = fDis / vector_length(fAttack) xs_vec_mul_scalar(fAttack, fRate, fAttack) xs_vec_add(fOrigin, fAttack, output) } stock Set_Player_NextAttack(id, CSWID, Float:NextTime) { static Ent; Ent = fm_get_user_weapon_entity(id, CSWID) if(!pev_valid(Ent)) return set_pdata_float(id, 83, NextTime, 5) set_pdata_float(Ent, 46 , NextTime, 4) set_pdata_float(Ent, 47, NextTime, 4) set_pdata_float(Ent, 48, NextTime, 4) } /* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE *{\\ rtf1\\ ansi\\ deff0{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang1042\\ f0\\ fs16 \n\\ par } */
a mam błąd w kompilatorze :
//// CSO_Balrog7.sma // C:\Users\CsGOk\OneDrive\Pulpit\compiler\compiler\CSO_Balrog7.sma(56 -- 58) : error 001: expected token: ",", but found "-identifier-" // C:\Users\CsGOk\OneDrive\Pulpit\compiler\compiler\CSO_Balrog7.sma(77) : error 017: undefined symbol "g_Weapon" // C:\Users\CsGOk\OneDrive\Pulpit\compiler\compiler\CSO_Balrog7.sma(77) : warning 215: expression has no effect // C:\Users\CsGOk\OneDrive\Pulpit\compiler\compiler\CSO_Balrog7.sma(77) : error 001: expected token: ";", but found "]" // C:\Users\CsGOk\OneDrive\Pulpit\compiler\compiler\CSO_Balrog7.sma(77) : error 029: invalid expression, assumed zero // C:\Users\CsGOk\OneDrive\Pulpit\compiler\compiler\CSO_Balrog7.sma(77) : fatal error 107: too many error messages on one line // // Compilation aborted. // 5 Errors. // Could not locate output file compiled\CSO_Balrog7.amx (compile failed). // // Compilation Time: 2,08 sec // ----------------------------------------
Rivit
07.07.2018
Powiedziałem Ci dokładnie co zrobić, a Ty masz w swoim pluginie 2 razy gxm_item_enabled.... A mówiłem żebyś zamienił tylko nagłówki funkji... Mówiłem też żebyś kod wrzucał jako załącznik, bo teraz nawet nie chce mi się scrollować tego żeby cokolwiek szukać w tym temacie.