RSSy MYGO.pl Opublikowano Styczeń 13, 2022 o 17:50 RSSy Udostępnij Opublikowano Styczeń 13, 2022 o 17:50 Hello! I working at a custom weapon called Laser Fist and i have a problem. Full Code: Code: #include <amxmodx> #include <fakemeta_util> #include <hamsandwich> // ~ [ Optimization ] ~ // #define Get_WpnMode(%0) get_pdata_int(%0, m_iWeaponState, 4) #define Set_WpnMode(%0,%1) set_pdata_int(%0, m_iWeaponState, %1, 4) #define CustomItem(%1) get_bit(gl_iBitCustomItem, %1) #define get_bit(%1,%2) ((%1 & (1 << (%2 & 31))) ? 1 : 0) #define set_bit(%1,%2) %1 |= (1 << (%2 & 31)) #define reset_bit(%1,%2) %1 &= ~(1 << (%2 & 31)) // ~ [ Resources ] ~ // new const WEAPON_VIEW_MODEL[] = "models/v_laserfist.mdl"; new const WEAPON_PLAYER_MODEL[] = "models/p_laserfist.mdl"; new const BLUELASER_SPRITE[] = "sprites/ef_laserfist_laserbeam.spr"; new const WEAPON_SHOOT_SOUND[] = "weapons/laserfist_shoota-1.wav"; new const WEAPON_VIEW_MODEL2[] = "models/v_laserfist2.mdl"; // ~ [ Weapon Settings ] ~ // #define WEAPON_CSW CSW_M249 new const WEAPON_REFERENCE[] = "weapon_m249"; const WEAPON_MAX_AMMO = 100; const WEAPON_MAX_BPAMMO = 500; #define MAX_SHOTS_BMODE 5 // ~ [ Primary Fire Mode ] ~ // const Float: WEAPON_RATE = 0.01; const Float: WEAPON_PUNCHANGLE = 0.0; // ~ [ Weapon Animations ] ~ // #define WEAPON_ANIM_DRAW_TIME 51/30.0 #define WEAPON_ANIM_IDLE_TIME 141/30.0 #define WEAPON_ANIM_RELOAD_TIME 81/30.0 #define WEAPON_ANIM_SHOOT_TIME 21/60.0 #define WEAPON_ANIM_SHOOT_END_TIME 31/30.0 #define WEAPON_ANIM_CHARGE_START_TIME 39/30.0 #define WEAPON_ANIM_CHARGE_IDLE_TIME 31/30.0 #define WEAPON_ANIM_CHARGE_END_TIME 50/30.0 #define WEAPON_ANIM_DRAW 9 #define WEAPON_ANIM_IDLE 0 #define WEAPON_ANIM_RELOAD 8 #define WEAPON_ANIM_SHOOT 3 #define WEAPON_ANIM_SHOOT_END 4 #define WEAPON_ANIM_CHARGE_START 5 #define WEAPON_ANIM_CHARGE_IDLE 6 #define WEAPON_ANIM_CHARGE_END 7 // ~ [ Offsets ] ~ // #define linux_diff_player 5 #define linux_diff_weapon 4 #define m_pNext 42 #define m_rgAmmo 376 #define m_flTimeWeaponIdle 48 #define m_flNextPrimaryAttack 46 #define m_rpgPlayerItems 367 #define m_iPrimaryAmmoType 49 #define m_iClip 51 #define m_iWeaponState 74 #define m_fInReload 54 #define m_pPlayer 41 #define m_pActiveItem 373 #define m_iId 43 #define m_flNextAttack 83 #define GetFlameCount(%0) get_pdata_int(%0, m_iFlameCount, 4) // Arabas #define m_iFlameCount m_iGlock18ShotsFired #define m_iGlock18ShotsFired 70 // ~ [ Params ] ~ // new gl_iBitCustomItem, gl_iAllocString_ViewModel, gl_iAllocString_PlayerModel, gl_iszAllocString_ViewModel2, gl_iszModelIndex_Trail // ~ [ AMX Mod X ] ~ // public plugin_init() { register_plugin("[CSO] Laser Fist", "1.0", "Cristian505 \ Batcoh: Code Base"); // Forwards register_forward(FM_UpdateClientData, "FM_Hook_UpdateClientData_Post", true); // Weapon RegisterHam(Ham_Weapon_Reload, WEAPON_REFERENCE, "CWeapon__Reload_Pre", false); RegisterHam(Ham_Item_PostFrame, WEAPON_REFERENCE, "CWeapon__PostFrame_Pre", false); RegisterHam(Ham_Item_Deploy, WEAPON_REFERENCE, "CWeapon__Deploy_Post", true); RegisterHam(Ham_Weapon_PrimaryAttack, WEAPON_REFERENCE, "CWeapon__PrimaryAttack_Pre", false); RegisterHam(Ham_Item_Holster, WEAPON_REFERENCE, "CWeapon__Holster_Post", true); RegisterHam(Ham_Weapon_WeaponIdle, WEAPON_REFERENCE, "CWeapon__WeaponIdle_Pre", false); RegisterHam(Ham_Weapon_SecondaryAttack, WEAPON_REFERENCE, "CWeapon__SecondaryAttack_Pre", false); // Alloc String gl_iAllocString_ViewModel = engfunc(EngFunc_AllocString, WEAPON_VIEW_MODEL); gl_iAllocString_PlayerModel = engfunc(EngFunc_AllocString, WEAPON_PLAYER_MODEL); gl_iszAllocString_ViewModel2 = engfunc(EngFunc_AllocString, WEAPON_VIEW_MODEL2); register_clcmd("say /lf", "Give_LaserFist"); } public plugin_precache() { // Precache Models engfunc(EngFunc_PrecacheModel, WEAPON_VIEW_MODEL); engfunc(EngFunc_PrecacheModel, WEAPON_PLAYER_MODEL); engfunc(EngFunc_PrecacheModel, WEAPON_VIEW_MODEL2); // Precache Sprites gl_iszModelIndex_Trail = precache_model(BLUELASER_SPRITE); // Precache Sounds precache_sound(WEAPON_SHOOT_SOUND); } public client_disconnect(id) { reset_bit(gl_iBitCustomItem, id); } public Give_LaserFist(iPlayer) { set_bit(gl_iBitCustomItem, iPlayer); UTIL_DropWeapon(iPlayer, 1); UTIL_GiveNamedItem(iPlayer, WEAPON_REFERENCE); static Ent; Ent = fm_get_user_weapon_entity(iPlayer, WEAPON_CSW); if(pev_valid(Ent)) set_pdata_int(Ent, m_iClip, WEAPON_MAX_AMMO, 4); new iAmmoType = m_rgAmmo + get_pdata_int(Ent, m_iPrimaryAmmoType, linux_diff_weapon); if(get_pdata_int(iPlayer, m_rgAmmo, linux_diff_player) < WEAPON_MAX_BPAMMO) set_pdata_int(iPlayer, iAmmoType, WEAPON_MAX_BPAMMO, linux_diff_player); set_pdata_int(Ent, m_iFlameCount, 0, 4); Set_WpnMode(Ent, 1); emit_sound(iPlayer, CHAN_ITEM, "items/gunpickup2.wav", VOL_NORM, ATTN_NORM, 0, PITCH_NORM); } // ~ [ Hamsandwich ] ~ // public CWeapon__Holster_Post(iItem) { static iPlayer; iPlayer = get_pdata_cbase(iItem, m_pPlayer, linux_diff_weapon); if(pev_valid(iItem) != 2 || !CustomItem(iPlayer)) return; set_pdata_float(iItem, m_flTimeWeaponIdle, 0.0, linux_diff_weapon); set_pdata_float(iPlayer, m_flNextAttack, 0.0, linux_diff_player); Set_WpnMode(iItem, 1); } public CWeapon__Deploy_Post(iItem) { static iPlayer; iPlayer = get_pdata_cbase(iItem, m_pPlayer, linux_diff_weapon); if(pev_valid(iItem) != 2 || !CustomItem(iPlayer)) return; if(GetFlameCount(iItem) > MAX_SHOTS_BMODE) set_pev_string(iPlayer, pev_viewmodel2, gl_iszAllocString_ViewModel2); else set_pev_string(iPlayer, pev_viewmodel2, gl_iAllocString_ViewModel); set_pev_string(iPlayer, pev_weaponmodel2, gl_iAllocString_PlayerModel); UTIL_SendWeaponAnim(iPlayer, WEAPON_ANIM_DRAW); Set_WpnMode(iItem, 1); set_pdata_float(iPlayer, m_flNextAttack, WEAPON_ANIM_DRAW_TIME, linux_diff_player); set_pdata_float(iItem, m_flTimeWeaponIdle, WEAPON_ANIM_DRAW_TIME, linux_diff_weapon); } public CWeapon__SecondaryAttack_Pre(iItem) { static iPlayer; iPlayer = get_pdata_cbase(iItem, m_pPlayer, linux_diff_weapon); if(pev_valid(iItem) != 2 || !CustomItem(iPlayer)) return HAM_IGNORED; if(GetFlameCount(iItem) > MAX_SHOTS_BMODE) switch(Get_WpnMode(iItem)) { case 1: { UTIL_SendWeaponAnim(iPlayer, WEAPON_ANIM_CHARGE_START); set_pdata_float(iPlayer, m_flNextAttack, WEAPON_ANIM_CHARGE_START_TIME, linux_diff_player); set_pdata_float(iItem, m_flTimeWeaponIdle, WEAPON_ANIM_CHARGE_START_TIME, linux_diff_weapon); Set_WpnMode(iItem, 2); } case 2: { UTIL_SendWeaponAnim(iPlayer, WEAPON_ANIM_CHARGE_IDLE); set_pdata_float(iPlayer, m_flNextAttack, WEAPON_ANIM_CHARGE_IDLE_TIME, linux_diff_player); set_pdata_float(iItem, m_flTimeWeaponIdle, WEAPON_ANIM_CHARGE_IDLE_TIME, linux_diff_weapon); } } return HAM_SUPERCEDE; } public CWeapon__PostFrame_Pre(iItem) { static iPlayer; iPlayer = get_pdata_cbase(iItem, m_pPlayer, linux_diff_weapon); if(pev_valid(iItem) != 2 || !CustomItem(iPlayer)) return HAM_IGNORED; static iClip; iClip = get_pdata_int(iItem, m_iClip, linux_diff_weapon); static flHoldTime; pev(iItem, pev_fuser1, flHoldTime); static iButton; iButton = pev(iPlayer, pev_button); if(!(iButton & IN_ATTACK2) && Get_WpnMode(iItem) == 2) { UTIL_SendWeaponAnim(iItem, WEAPON_ANIM_CHARGE_END); set_pdata_float(iPlayer, m_flNextAttack, WEAPON_ANIM_CHARGE_END_TIME, linux_diff_player); set_pdata_float(iItem, m_flTimeWeaponIdle, WEAPON_ANIM_CHARGE_END_TIME, linux_diff_weapon); } if(iButton & IN_ATTACK2) { ExecuteHamB(Ham_Weapon_SecondaryAttack, iItem); iButton &= ~IN_ATTACK2; set_pev(iPlayer, pev_button, iButton); } if(iButton & IN_ATTACK) set_pev(iItem, pev_fuser1, flHoldTime + 0.1); if(flHoldTime > 0.01) if(!(iButton & IN_ATTACK)) { UTIL_SendWeaponAnim(iPlayer, WEAPON_ANIM_SHOOT_END); set_pdata_float(iItem, m_flTimeWeaponIdle, WEAPON_ANIM_SHOOT_END_TIME, linux_diff_weapon); set_pdata_float(iPlayer, m_flNextAttack, WEAPON_ANIM_SHOOT_END_TIME, linux_diff_player); set_pev(iItem, pev_fuser1, 0.0); } if(get_pdata_int(iItem, m_fInReload, linux_diff_weapon) == 1) { static iAmmoType; iAmmoType = m_rgAmmo + get_pdata_int(iItem, m_iPrimaryAmmoType, linux_diff_weapon); static iAmmo; iAmmo = get_pdata_int(iPlayer, iAmmoType, linux_diff_player); static j; j = min(WEAPON_MAX_AMMO - iClip, iAmmo); set_pdata_int(iItem, m_iClip, iClip + j, linux_diff_weapon); set_pdata_int(iPlayer, iAmmoType, iAmmo - j, linux_diff_player); set_pdata_int(iItem, m_fInReload, 0, linux_diff_weapon); } return HAM_IGNORED; } public CWeapon__PrimaryAttack_Pre(iItem) { static iPlayer; iPlayer = get_pdata_cbase(iItem, m_pPlayer, linux_diff_weapon); if(pev_valid(iItem) != 2 || !CustomItem(iPlayer)) return HAM_IGNORED; static iClip; iClip = get_pdata_int(iItem, m_iClip, linux_diff_weapon); if(!iClip) { ExecuteHam(Ham_Weapon_PlayEmptySound, iItem); set_pdata_float(iItem, m_flNextPrimaryAttack, 0.2, linux_diff_weapon); return HAM_SUPERCEDE; } ExecuteHam(Ham_Weapon_PrimaryAttack, iItem); static Float: vecPunchangle[3]; pev(iPlayer, pev_punchangle, vecPunchangle); vecPunchangle[0] *= WEAPON_PUNCHANGLE vecPunchangle[1] *= WEAPON_PUNCHANGLE vecPunchangle[2] *= WEAPON_PUNCHANGLE set_pev(iPlayer, pev_punchangle, vecPunchangle); static Float: iEndOrigin[3]; fm_get_aim_origin(iPlayer, iEndOrigin); // index, attachment, endpos, modelindex, width, red, green, blue UTIL_CreateBeamEntPoint(iPlayer, 0x1000, iEndOrigin, gl_iszModelIndex_Trail, 50, 0, 100, 255); UTIL_CreateBeamEntPoint(iPlayer, 0x2000, iEndOrigin, gl_iszModelIndex_Trail, 50, 0, 100, 255); emit_sound(iPlayer, CHAN_WEAPON, WEAPON_SHOOT_SOUND, VOL_NORM, ATTN_NORM, 0, PITCH_NORM); set_pdata_int(iItem, m_iFlameCount, GetFlameCount(iItem) + 1, 4); if(GetFlameCount(iItem) == MAX_SHOTS_BMODE) set_pev_string(iPlayer, pev_viewmodel2, gl_iszAllocString_ViewModel2); UTIL_SendWeaponAnim(iPlayer, WEAPON_ANIM_SHOOT); set_pdata_float(iPlayer, m_flNextAttack, WEAPON_RATE, linux_diff_player); set_pdata_float(iItem, m_flTimeWeaponIdle, WEAPON_ANIM_SHOOT_TIME, linux_diff_weapon); return HAM_SUPERCEDE; } public CWeapon__Reload_Pre(iItem) { static iPlayer; iPlayer = get_pdata_cbase(iItem, m_pPlayer, linux_diff_weapon); if(pev_valid(iItem) != 2 || !CustomItem(iPlayer)) return HAM_IGNORED; static iClip; iClip = get_pdata_int(iItem, m_iClip, linux_diff_weapon); if(iClip >= WEAPON_MAX_AMMO) return HAM_SUPERCEDE; static iAmmoType; iAmmoType = m_rgAmmo + get_pdata_int(iItem, m_iPrimaryAmmoType, linux_diff_weapon); if(get_pdata_int(iPlayer, iAmmoType, linux_diff_player) <= 0) return HAM_SUPERCEDE; set_pdata_int(iItem, m_iClip, 0, linux_diff_weapon); ExecuteHam(Ham_Weapon_Reload, iItem); set_pdata_int(iItem, m_iClip, iClip, linux_diff_weapon); set_pdata_int(iItem, m_fInReload, 1, linux_diff_weapon); UTIL_SendWeaponAnim(iPlayer, WEAPON_ANIM_RELOAD); Set_WpnMode(iItem, 1); set_pdata_float(iItem, m_flTimeWeaponIdle, WEAPON_ANIM_RELOAD_TIME, linux_diff_weapon); set_pdata_float(iPlayer, m_flNextAttack, WEAPON_ANIM_RELOAD_TIME, linux_diff_player); return HAM_SUPERCEDE; } public CWeapon__WeaponIdle_Pre(iItem) { static iPlayer; iPlayer = get_pdata_cbase(iItem, m_pPlayer, linux_diff_weapon); if(pev_valid(iItem) != 2 || !CustomItem(iPlayer) || get_pdata_float(iItem, m_flTimeWeaponIdle, linux_diff_weapon) > 0.0) return HAM_IGNORED; UTIL_SendWeaponAnim(iPlayer, WEAPON_ANIM_IDLE); set_pdata_float(iItem, m_flTimeWeaponIdle, WEAPON_ANIM_IDLE_TIME, linux_diff_weapon); return HAM_SUPERCEDE; } /* ~ [ Fakemeta ] ~ */ public FM_Hook_UpdateClientData_Post(iPlayer, SendWeapons, CD_Handle) { if(!is_user_alive(iPlayer)) return; if(get_user_weapon(iPlayer) != WEAPON_CSW) return; static iItem; iItem = get_pdata_cbase(iPlayer, m_pActiveItem, linux_diff_player); if(pev_valid(iItem) != 2 || !CustomItem(iPlayer)) return; set_cd(CD_Handle, CD_flNextAttack, get_gametime() + 0.001); } // ~ [ Stocks ] ~ // stock UTIL_SendWeaponAnim(iPlayer, iAnim) { set_pev(iPlayer, pev_weaponanim, iAnim); message_begin(MSG_ONE, SVC_WEAPONANIM, _, iPlayer); write_byte(iAnim); write_byte(0); message_end(); } stock UTIL_GiveNamedItem(iPlayer, const szItem[]) { new iEntity = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, szItem)); if(!pev_valid(iEntity)) return 0; ExecuteHam(Ham_Spawn, iEntity); if(!ExecuteHamB(Ham_AddPlayerItem, iPlayer, iEntity)) { set_pev(iEntity, pev_flags, pev(iEntity, pev_flags) | FL_KILLME); return 0; } ExecuteHamB(Ham_Item_AttachToPlayer, iEntity, iPlayer); return iEntity; } stock UTIL_DropWeapon(iPlayer, iSlot) { static iEntity, iNext, szWeaponName[32]; iEntity = get_pdata_cbase(iPlayer, m_rpgPlayerItems + iSlot, linux_diff_player); if(iEntity > 0) { do { iNext = get_pdata_cbase(iEntity, m_pNext, linux_diff_weapon); if(get_weaponname(get_pdata_int(iEntity, m_iId, linux_diff_weapon), szWeaponName, charsmax(szWeaponName))) engclient_cmd(iPlayer, "drop", szWeaponName); } while((iEntity = iNext) > 0); } } stock UTIL_CreateBeamEntPoint(iPlayer, iAttachment, Float: flOrigin[3], iszModelIndex, iWidth, iRed, iGreen, iBlue) // xUnicorn { message_begin(MSG_BROADCAST, SVC_TEMPENTITY); write_byte(TE_BEAMENTPOINT); write_short(iPlayer | iAttachment); engfunc(EngFunc_WriteCoord, flOrigin[0]); engfunc(EngFunc_WriteCoord, flOrigin[1]); engfunc(EngFunc_WriteCoord, flOrigin[2]); write_short(iszModelIndex) // Model index write_byte(0); // Framestart write_byte(0); // Framerate write_byte(1); // Life write_byte(iWidth * 4); // Width write_byte(1); // Noise write_byte(iRed); // Red write_byte(iGreen); // Green write_byte(iBlue); // Blue write_byte(255); // Alpha write_byte(100); // Speed message_end(); } Crasher Code: Code: public CWeapon__PostFrame_Pre(iItem) { static iPlayer; iPlayer = get_pdata_cbase(iItem, m_pPlayer, linux_diff_weapon); if(pev_valid(iItem) != 2 || !CustomItem(iPlayer)) return HAM_IGNORED; static iClip; iClip = get_pdata_int(iItem, m_iClip, linux_diff_weapon); static flHoldTime; pev(iItem, pev_fuser1, flHoldTime); static iButton; iButton = pev(iPlayer, pev_button); if(!(iButton & IN_ATTACK2) && Get_WpnMode(iItem) == 2) // Crasher Code { UTIL_SendWeaponAnim(iItem, WEAPON_ANIM_CHARGE_END); set_pdata_float(iPlayer, m_flNextAttack, WEAPON_ANIM_CHARGE_END_TIME, linux_diff_player); set_pdata_float(iItem, m_flTimeWeaponIdle, WEAPON_ANIM_CHARGE_END_TIME, linux_diff_weapon); } if(iButton & IN_ATTACK2) { ExecuteHamB(Ham_Weapon_SecondaryAttack, iItem); iButton &= ~IN_ATTACK2; set_pev(iPlayer, pev_button, iButton); } if(iButton & IN_ATTACK) set_pev(iItem, pev_fuser1, flHoldTime + 0.1); if(flHoldTime > 0.01) if(!(iButton & IN_ATTACK)) { UTIL_SendWeaponAnim(iPlayer, WEAPON_ANIM_SHOOT_END); set_pdata_float(iItem, m_flTimeWeaponIdle, WEAPON_ANIM_SHOOT_END_TIME, linux_diff_weapon); set_pdata_float(iPlayer, m_flNextAttack, WEAPON_ANIM_SHOOT_END_TIME, linux_diff_player); set_pev(iItem, pev_fuser1, 0.0); } if(get_pdata_int(iItem, m_fInReload, linux_diff_weapon) == 1) { static iAmmoType; iAmmoType = m_rgAmmo + get_pdata_int(iItem, m_iPrimaryAmmoType, linux_diff_weapon); static iAmmo; iAmmo = get_pdata_int(iPlayer, iAmmoType, linux_diff_player); static j; j = min(WEAPON_MAX_AMMO - iClip, iAmmo); set_pdata_int(iItem, m_iClip, iClip + j, linux_diff_weapon); set_pdata_int(iPlayer, iAmmoType, iAmmo - j, linux_diff_player); set_pdata_int(iItem, m_fInReload, 0, linux_diff_weapon); } return HAM_IGNORED; } Error: Code: Host_Error: WriteDest_Parm: not a client After using IN_ATTACK2 with charged mode the server crashes and sends that error. Anyone know a fix?:( Przeczytaj cały wpis Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Rekomendowane odpowiedzi