AlliedModders

AlliedModders (https://forums.alliedmods.net/index.php)
-   Scripting Help (https://forums.alliedmods.net/forumdisplay.php?f=11)
-   -   fix bug portal gun (https://forums.alliedmods.net/showthread.php?t=330850)

shayan123 02-23-2021 18:15

fix bug portal gun
 
Hi everyone Can help
need to fix bug its working only hlds
please fix bug and add rehlds working

CODE
Code:

/* Plugin generated by AMXX-Studio */

#include <amxmodx>
#include <amxmisc>
#include <fun>
#include <hamsandwich>
#include <fakemeta>
#include <engine>
#include <xs>
#include <cstrike>

#define PLUGIN "Portal"
#define VERSION "1.0"
#define AUTHOR "DarkGL & R3X"

#define SOUNDS
#define SPRITES
//#define TEST
//#define TRACE_HULL

#define MAX 32
#define IsPlayer(%1) (1<=%1<=MAX)

new const szClassNameNieb[] = "portal_shot_niebieski"
new const szClassNamePom[] = "portal_shot_pomaranczowy"
new const szClassTelNieb[] = "teleport_nieb";
new const szClassTelPom[] = "teleport_pom";
new const v_model[] = "models/portal/v_portal.mdl";
new const portal[] = "models/portal/portal.mdl";
new const w_model[] = "models/rpgrocket.mdl";

#if defined SOUNDS
new const portal_shot_blue[] = "portal/portalgun_shoot_blue1.wav"
new const portal_shot_red[] = "portal/portalgun_shoot_red1.wav"
new const soundOpen[][]={
        "portal/portal_open1.wav",
        "portal/portal_open2.wav",
        "portal/portal_open3.wav"
}
new const soundClose[][]={
        "portal/portal_close1.wav",
        "portal/portal_close2.wav"
}
new const soundEnter[][]={
        "portal/portal_enter1.wav",
        "portal/portal_enter2.wav"
}
new const soundInvalid[]= "portal/portal_invalid_surface3.wav";
#endif

new player_ent[MAX+1]
new Float:fNextAttack[MAX+1]
new bool:bMode[MAX+1]
new iEnt[MAX+1][2];
new iTel[MAX+1][2]

#define OFFSET_WEAPONOWNER 41
#define OFFSET_LINUX_WEAPONS 4
#define OFFSET_ACTIVEITEM 374
#define OFFSET_LINUX_PLAYER 5

#define m_flNextPrimaryAttack 46
#define m_flNextSecondaryAttack 47

new const szClassTouch[][]={
        "worldspawn",
        "func_wall",
        "func_door",
        "func_door_rotating",
        "func_breakable"
}

#define  MAX_DISTANCE 70.0
#define  MIN_DISTANCE 50.0

#if defined SPRITES
new sprite;
new g_trail;
new spriteInvalid[2];
#endif

enum eCvar{
        SpriteType,
        FallDamge,
        SpeedBullet,
        PortalCost,
        SpawnPortal
}

new pCvars[eCvar]

public plugin_init() {
        register_plugin(PLUGIN, VERSION, AUTHOR)
       
        RegisterHam(Ham_Killed,"player","ham_KilledPost",1)
        RegisterHam( Ham_TakeDamage, "player", "ham_damage" );
        RegisterHam(Ham_Spawn,"player","ham_Spawned",1)
       
        register_logevent("Koniec_Rundy", 2, "1=Round_End")
       
        register_forward(FM_CmdStart,"fwd_CmdStart")
       
        register_touch(szClassTelPom,"*","touchTeleport")
        register_touch(szClassTelNieb,"*","touchTeleport")
       
        for(new i = 0;i<sizeof szClassTouch;i++){       
                register_touch(szClassTouch[i],szClassNameNieb,"touchNieb")
                register_touch(szClassTouch[i],szClassNamePom,"touchPom")
        }
       
        register_clcmd("say /portal","buyPortal");
        register_clcmd("drop","cmdDrop")
       
        register_clcmd("give_portal","give_weapon",ADMIN_CFG,"<nick>")
       
        return PLUGIN_CONTINUE;
}

public ham_Spawned(id){
        if(!is_user_alive(id)){
                return HAM_IGNORED;
        }
        if(get_pcvar_num(pCvars[SpawnPortal]) && !pev_valid(player_ent[id])){
                new szWeaponName[64],bool:bContinue = false;
                new num, iWeapons[32]
               
                get_user_weapons(id, iWeapons, num)
                for(new i = 1;i<=30;i++){
                        if(i == 2 || i == 4 || i == 6 || i == 9 || i == 25 || i == 29){
                                continue;
                        }
                        bContinue = false;
                        for (new j=0; j<num; j++)
                        {
                                if(iWeapons[j] == i){
                                        bContinue = true;
                                        break;
                                }
                        }
                        if(!bContinue){
                                get_weaponname(i,szWeaponName,charsmax(szWeaponName));
                                player_ent[id] = give_item(id,szWeaponName)
                                RegisterHamFromEntity(Ham_Item_Deploy,player_ent[id],"ham_ItemDeploy_Post",1)
                                set_pdata_float(player_ent[id], m_flNextPrimaryAttack, 99999.0, OFFSET_LINUX_WEAPONS)
                                set_pdata_float(player_ent[id], m_flNextSecondaryAttack, 99999.0, OFFSET_LINUX_WEAPONS)
                                break;
                        }
                }
               
        }
        return HAM_IGNORED;
}

public buyPortal(id){
        new cost = get_pcvar_num(pCvars[PortalCost]);
        if(cost < 0){
                return PLUGIN_HANDLED;
        }
        if(cs_get_user_money(id) < cost){
                client_print(id,print_console,"Masz za malo kasy");
        }
        else
        {
                if(!is_user_alive(id)){
                        client_print(id,print_console,"Musisz byc zywy");
                        return PLUGIN_HANDLED
                }
                if(pev_valid(player_ent[id])){
                        client_print(id,print_console,"Masz juz portal guna");
                        return PLUGIN_HANDLED
                }
                new szWeaponName[64],bool:bContinue = false;
                new num, iWeapons[32]
               
                get_user_weapons(id, iWeapons, num)
                for(new i = 1;i<=30;i++){
                        if(i == 2 || i == 4 || i == 6 || i == 9 || i == 25 || i == 29){
                                continue;
                        }
                        bContinue = false;
                        for (new j=0; j<num; j++)
                        {
                                if(iWeapons[j] == i){
                                        bContinue = true;
                                        break;
                                }
                        }
                        if(!bContinue){
                                get_weaponname(i,szWeaponName,charsmax(szWeaponName));
                                player_ent[id] = give_item(id,szWeaponName)
                                RegisterHamFromEntity(Ham_Item_Deploy,player_ent[id],"ham_ItemDeploy_Post",1)
                                set_pdata_float(player_ent[id], m_flNextPrimaryAttack, 99999.0, OFFSET_LINUX_WEAPONS)
                                set_pdata_float(player_ent[id], m_flNextSecondaryAttack, 99999.0, OFFSET_LINUX_WEAPONS)
                                break;
                        }
                }
                cs_set_user_money(id,cs_get_user_money(id) - cost,0);
               
        }
        return PLUGIN_HANDLED;
}

public ham_damage( this, inflictor, attacker, Float:damage, damagebits )
{
        if( !( damagebits & DMG_FALL ) || !IsPlayer(this))
        return HAM_IGNORED;
       
        new bool:bCvar = !(!get_pcvar_num(pCvars[FallDamge]))
       
        if(!bCvar || (bCvar && !pev_valid(player_ent[this]))){
                return HAM_IGNORED;
        }
       
        return HAM_SUPERCEDE;
}

public Koniec_Rundy()
{
        remove_entity_name(szClassTelPom)
        remove_entity_name(szClassTelNieb)
        for(new i = 1;i<=MAX;i++){
                iTel[i][0] = 0;
                iTel[i][1] = 0;
        }
}

public touchTeleport(portal,id){
        if(pev_valid(id)){
                if(pev(id,pev_movetype) == MOVETYPE_FOLLOW){
                        return PLUGIN_CONTINUE;
                }
                static szClassName[64];
                pev(id,pev_classname,szClassName,charsmax(szClassName));
                if(equal(szClassName,szClassTelPom) || equal(szClassName,szClassTelNieb) || equal(szClassName,szClassNameNieb) || equal(szClassName,szClassNamePom)){
                        return PLUGIN_CONTINUE;
                }
                moveTo(id,portal,pev(portal,pev_iuser1))
        }
        return PLUGIN_CONTINUE;
}


moveTo(id, in, out){
        if(pev_valid(out)){
                #if defined TRACE_HULL
                new hull = HULL_POINT;
               
                if(is_user_alive(id)){
                        hull = HULL_HUMAN;
                }
                #endif
               
                new Float:fDistance = MIN_DISTANCE;
                while(fDistance <= MAX_DISTANCE){
                        new Float:fOrigin[3];
                        pev(out, pev_origin, fOrigin);
                       
                        new Float:fAngles[3];
                        pev(out, pev_vuser1, fAngles);
                       
                        xs_vec_mul_scalar(fAngles, fDistance, fAngles);
                        xs_vec_add(fOrigin, fAngles, fOrigin);
                       
                        new Float:fMins[3],Float:fMaxs[3];
                        pev(id,pev_mins,fMins);
                        pev(id,pev_maxs,fMaxs);
                       
                       
                       
                        #if defined TRACE_HULL
                        if(!trace_hull(fOrigin, hull, id, 0)){
                                #else
                                if(checkPortalPlace(fOrigin,fMins,fMaxs)){
                                        #endif
                                        set_pev(id, pev_origin, fOrigin);
                                       
                                        #if defined SOUNDS
                                        engfunc(EngFunc_EmitAmbientSound, 0,fOrigin, soundEnter[random(sizeof soundEnter)],VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
                                        #endif
                                       
                                        parseAngle(id, in, out);
                                       
                                        break;
                                }
                                fDistance += 10.0;
                        }
                }
        }

        public fwd_CmdStart(id, uc_handle, seed) {
                if(!is_user_alive(id) || player_ent[id] != get_pdata_cbase(id,OFFSET_ACTIVEITEM,OFFSET_LINUX_PLAYER)){
                        return FMRES_IGNORED;
                }
               
                new buttons = get_uc(uc_handle,UC_Buttons)
                new oldbuttons = get_user_oldbutton(id);
               
                if(buttons&IN_ATTACK && fNextAttack[id] < get_gametime()){
                        fNextAttack[id] = get_gametime() + 0.5;
                        create_shot_portal(id);
                        set_animation(id,random_num(1,2))
                }
                if(buttons & IN_ATTACK2 && !(oldbuttons & IN_ATTACK2)){
                        bMode[id] = !bMode[id];
                        client_print(id,print_center,"Tryb %s",bMode[id] ? "Niebieski":"Pomaranczowy")
                }
                return FMRES_HANDLED
        }

        public plugin_precache(){
               
                cvar_register();
               
                precache_model(v_model);
                precache_model(portal);
                precache_model(w_model);
                #if defined SPRITES
                sprite = precache_model("sprites/white.spr");
                g_trail = precache_model("sprites/smoke.spr")
                spriteInvalid[0] = precache_model("sprites/portal/pom.spr") ;
                spriteInvalid[1] = precache_model("sprites/portal/nieb.spr") ;
                #endif
               
                #if defined SOUNDS
                precache_sound(portal_shot_blue)
                precache_sound(portal_shot_red);
                for(new i = 0 ; i<sizeof soundOpen;i++){
                        precache_sound(soundOpen[i])
                }
                for(new i = 0 ; i<sizeof soundClose;i++){
                        precache_sound(soundClose[i])
                }
                for(new i = 0 ; i<sizeof soundEnter;i++){
                        precache_sound(soundEnter[i])
                }
                precache_sound(soundInvalid)
                #endif
               
                new szConfDir[64],szFullDir[128];
                get_configsdir(szConfDir,charsmax(szConfDir));
                formatex(szFullDir,charsmax(szFullDir),"%s/portal.cfg",szConfDir);
                if(!file_exists(szFullDir)){
                        #if defined SPRITES
                        write_file(szFullDir,"// 1 or 2 difrent sprites 0 off this")
                        write_file(szFullDir,"portal_sprite 1");
                        #endif
                       
                        write_file(szFullDir,"// 1 - no fall damage 0 - normal (no fall damage for person who have portal gun)")
                        write_file(szFullDir,"portal_fall_damage 1");
                       
                        write_file(szFullDir,"// speed of portal bullet")
                        write_file(szFullDir,"portal_bullet_speed 1500");
                       
                        write_file(szFullDir,"//how much money you must have to buy portal with /portal command in say number of negative side off this")
                        write_file(szFullDir,"portal_cost -1");
                       
                        write_file(szFullDir,"//portal gun for free on spawn ?")
                        write_file(szFullDir,"portal_spawn 0")
                }
                server_cmd("exec %s",szFullDir)
               
        }

        public client_connect(id){
                player_ent[id] = 0;
                iTel[id][0] = 0;
                iTel[id][1] = 0;
        }

        public client_disconnect(id){
                player_ent[id] = 0;
                iTel[id][0] = 0;
                iTel[id][1] = 0;
        }

        public touchNieb(touched,toucher){
                if(!pev_valid(toucher)){
                        remove_entity(toucher)
                        return PLUGIN_CONTINUE;
                }
               
                missileTouche(toucher,0);
               
                return PLUGIN_CONTINUE;
        }

        public touchPom(touched,toucher){       
                if(!pev_valid(toucher)){
                        remove_entity(toucher)
                        return PLUGIN_CONTINUE;
                }
               
                missileTouche(toucher,1);
               
                return PLUGIN_CONTINUE;
        }

        public missileTouche(iEntLocal,iPos){
                new Float:fOrigin[3],iOwner;
               
                pev(iEntLocal,pev_origin,fOrigin);
               
                iOwner = pev(iEntLocal,pev_owner);
               
                new Float:fVelo[3],Float:fEndOrigin[3];
               
                pev(iEntLocal, pev_velocity, fVelo)
               
                xs_vec_normalize(fVelo,fVelo)
               
                xs_vec_mul_scalar(fVelo,50.0,fVelo);
               
                xs_vec_add(fOrigin,fVelo,fEndOrigin);
               
                new ptr = create_tr2()
               
                new Float:vfNormal[3]
               
                engfunc(EngFunc_TraceLine, fOrigin, fEndOrigin, IGNORE_MISSILE | IGNORE_MONSTERS | IGNORE_GLASS, iEntLocal, ptr)
               
                get_tr2(ptr, TR_vecPlaneNormal, vfNormal);
               
                new Float:fOrigin3[3];
                get_tr2(ptr, TR_vecEndPos, fOrigin3);
               
                free_tr2(ptr)
               
                if(!validWall(fOrigin3,vfNormal) || !checkPlace(fOrigin3,iPos,iOwner)){
                        #if defined SOUNDS
                        engfunc(EngFunc_EmitAmbientSound, 0,fOrigin3, soundInvalid,VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
                        #endif
                       
                        pev(iEntLocal, pev_velocity, fVelo)
                       
                        xs_vec_normalize(fVelo,fVelo)
                       
                        xs_vec_mul_scalar(fVelo,-4.0,fVelo);
                        xs_vec_add(fOrigin,fVelo,fOrigin3);
                       
                        #if defined SPRITES
                        for(new i = 1; i < 6; i++) {
                                engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, fOrigin3,0)
                                write_byte(TE_SPRITETRAIL)
                                engfunc(EngFunc_WriteCoord, fOrigin3[0])
                                engfunc(EngFunc_WriteCoord, fOrigin3[1])
                                engfunc(EngFunc_WriteCoord, fOrigin3[2])
                                engfunc(EngFunc_WriteCoord, fOrigin3[0])
                                engfunc(EngFunc_WriteCoord, fOrigin3[1])
                                engfunc(EngFunc_WriteCoord, fOrigin3[2] + 10)
                                write_short(iPos == 0 ? spriteInvalid[1] : spriteInvalid[0])
                                write_byte(2)
                                write_byte(1)
                                write_byte(1)
                                write_byte(random_num(5,10))
                                write_byte(5)
                                message_end()
                        }
                        #endif
                       
                        remove_entity(iEntLocal);
                        return PLUGIN_CONTINUE;
                }
               
                new Float:fOldNormal[3];
                xs_vec_copy(vfNormal, fOldNormal);
               
                vector_to_angle(vfNormal, vfNormal);
               
                //cosik
                pev(iEntLocal, pev_velocity, fVelo)
               
                xs_vec_normalize(fVelo,fVelo)
               
                xs_vec_mul_scalar(fVelo,-4.0,fVelo);
                xs_vec_add(fOrigin,fVelo,fOrigin);
                //
               
                remove_entity(iEntLocal);
               
                iEnt[iOwner][iPos] = 0;
               
                if(pev_valid(iTel[iOwner][iPos])){
                        new Float:fOrigin2[3];
                        pev(iTel[iOwner][iPos],pev_origin,fOrigin2)
                        #if defined SOUNDS
                        engfunc(EngFunc_EmitAmbientSound, 0,fOrigin2, soundClose[random(sizeof soundClose)],VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
                        #endif
                        remove_entity(iTel[iOwner][iPos]);
                        iTel[iOwner][iPos] = 0;
                }
               
                iTel[iOwner][iPos] =  engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "info_target"));
               
                set_pev(iTel[iOwner][iPos],pev_classname,iPos == 0 ? szClassTelNieb : szClassTelPom);
               
                set_pev(iTel[iOwner][iPos],pev_origin,fOrigin);
               
                set_pev(iTel[iOwner][iPos],pev_solid,SOLID_TRIGGER)
                set_pev(iTel[iOwner][iPos],pev_movetype,MOVETYPE_FLY)
               
                engfunc(EngFunc_SetModel, iTel[iOwner][iPos], portal)
               
                set_pev(iTel[iOwner][iPos],pev_skin,iPos == 0 ? 0 : 1);
               
                #if defined SOUNDS
                engfunc(EngFunc_EmitAmbientSound, 0,fOrigin, soundOpen[random(sizeof soundOpen)],VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
                #endif
               
                new Float:fMins[3],Float:fMax[3],Float:mul[3];
               
                mul[0] = floatabs(floatabs(fOldNormal[0])-1.0)
                mul[0] = mul[0] + 0.1 > 1.0 ? mul[0]:mul[0]+0.1
               
                mul[1] = floatabs(floatabs(fOldNormal[1])-1.0)
                mul[1] = mul[1] + 0.1 > 1.0 ? mul[1]:mul[1]+0.1
               
                mul[2] = floatabs(floatabs(fOldNormal[2])-1.0)
                mul[2] = mul[2] + 0.1 > 1.0 ? mul[2]:mul[2]+0.1
               
                fMins[0] = floatmul(mul[0],-20.0)-2.0;
                fMins[1] = floatmul(mul[1],-10.0)-2.0;
                fMins[2] = floatmul(mul[2],-42.0)-2.0
               
                fMax[0] = floatmul(mul[0],20.0)+2.0;
                fMax[1] = floatmul(mul[1],10.0)+2.0;
                fMax[2] = floatmul(mul[2],42.0)+2.0
               
                engfunc(EngFunc_SetSize, iTel[iOwner][iPos],fMins, fMax)
               
                set_pev(iTel[iOwner][iPos], pev_angles, vfNormal);
               
                set_pev(iTel[iOwner][iPos],pev_iuser1,iTel[iOwner][iPos == 0 ? 1 : 0]);
               
                if(pev_valid(iTel[iOwner][iPos == 0 ? 1 : 0]) && !pev_valid(pev(iTel[iOwner][iPos == 0 ? 1 : 0],pev_iuser1))){
                        set_pev(iTel[iOwner][iPos == 0 ? 1 : 0],pev_iuser1,iTel[iOwner][iPos])
                }
               
                set_pev(iTel[iOwner][iPos], pev_vuser1, fOldNormal);
               
                set_pev(iTel[iOwner][iPos],pev_owner,iOwner);
               
                return PLUGIN_CONTINUE;
        }

        public give_weapon(id,level,cid){
                if(!cmd_access(id,level,cid,2)){
                        return PLUGIN_HANDLED;
                }
                new szString[64];
                read_argv(1,szString,charsmax(szString));
                new find = find_player("bl",szString);
                if(!find){
                        client_print(id,print_console,"[Portal Gun] Nie moge znalezc takiego gracza");
                        return PLUGIN_HANDLED;
                }
                else
                {
                        if(!is_user_alive(find)){
                                client_print(id,print_console,"[Portal Gun] Gracz musi byc zywy");
                                return PLUGIN_HANDLED
                        }
                        new szName[64];
                        get_user_name(find,szName,charsmax(szName));
                        if(pev_valid(player_ent[find])){
                                client_print(id,print_console,"[Portal Gun] %s ma juz Portal Guna",szName);
                                return PLUGIN_HANDLED
                        }
                        else
                        {
                                client_print(id,print_console,"[Portal Gun] Dales portal %s",szName);
                        }
                }
                new szWeaponName[64],bool:bContinue = false;
                new num, iWeapons[32]
               
                get_user_weapons(id, iWeapons, num)
                for(new i = 1;i<=30;i++){
                        if(i == 2 || i == 4 || i == 6 || i == 9 || i == 25 || i == 29){
                                continue;
                        }
                        bContinue = false;
                        for (new j=0; j<num; j++)
                        {
                                if(iWeapons[j] == i){
                                        bContinue = true;
                                        break;
                                }
                        }
                        if(!bContinue){
                                get_weaponname(i,szWeaponName,charsmax(szWeaponName));
                                player_ent[id] = give_item(id,szWeaponName)
                                RegisterHamFromEntity(Ham_Item_Deploy,player_ent[id],"ham_ItemDeploy_Post",1)
                                set_pdata_float(player_ent[id], m_flNextPrimaryAttack, 99999.0, OFFSET_LINUX_WEAPONS)
                                set_pdata_float(player_ent[id], m_flNextSecondaryAttack, 99999.0, OFFSET_LINUX_WEAPONS)
                                break;
                        }
                }
                return PLUGIN_HANDLED;
        }

        public ham_ItemDeploy_Post(weapon_ent)
        {
                static owner
                owner = get_pdata_cbase(weapon_ent, OFFSET_WEAPONOWNER, OFFSET_LINUX_WEAPONS);
               
                if(!is_user_alive(owner)){
                        return HAM_IGNORED;
                }
                set_pev(owner,pev_viewmodel2,v_model);
               
                set_animation(owner,6)
                return HAM_IGNORED;
        }

        public ham_KilledPost(id){
                if(is_user_connected(id)){
                        player_ent[id] = 0;
                }
        }


        public cmdDrop(id){
                if(player_ent[id] == get_pdata_cbase(id,OFFSET_ACTIVEITEM,OFFSET_LINUX_PLAYER)){
                        return PLUGIN_HANDLED;
                }
                return PLUGIN_CONTINUE;
        }

        public create_shot_portal(id){
                new iPos = bMode[id] ? 0 : 1;
                if(pev_valid(iEnt[id][iPos]) && pev(iEnt[id][iPos],pev_owner) == id){
                        engfunc(EngFunc_RemoveEntity,iEnt[id][iPos])
                        iEnt[id][iPos] = 0;
                }
                iEnt[id][iPos] =  engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "info_target"))
               
                if(!pev_valid(iEnt[id][iPos])){
                        return PLUGIN_CONTINUE;
                }
               
                set_pev(iEnt[id][iPos],pev_classname,bMode[id] ? szClassNameNieb : szClassNamePom);
               
                new Float:Origin[3], Float: vAngle[3], Float: Velocity[3];
               
                pev(id,pev_v_angle,vAngle)
               
                new iOrigin[3];
                get_user_origin(id,iOrigin,1)
                IVecFVec(iOrigin,Origin)
               
                #if defined SOUNDS
                engfunc(EngFunc_EmitAmbientSound, 0,Origin, bMode[id] ? portal_shot_blue : portal_shot_red,VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
                #endif
               
                set_pev(iEnt[id][iPos],pev_origin,Origin);
               
                vAngle[0] *= -1.0;
               
                set_pev(iEnt[id][iPos],pev_angles,vAngle)
               
                set_pev(iEnt[id][iPos],pev_solid,SOLID_TRIGGER)
                set_pev(iEnt[id][iPos],pev_movetype,MOVETYPE_FLY)
               
                VelocityByAim(id, get_pcvar_num(pCvars[SpeedBullet]) , Velocity);
               
                set_pev(iEnt[id][iPos],pev_owner,id)
               
                set_pev(iEnt[id][iPos],pev_velocity,Velocity)
               
                engfunc(EngFunc_SetModel, iEnt[id][iPos], w_model)
               
                engfunc(EngFunc_SetSize, iEnt[id][iPos], {-1.0, -1.0, -1.0}, {1.0, 1.0, 1.0})
               
                set_rendering(iEnt[id][iPos], kRenderFxGlowShell, bMode[id] ? 0:255,bMode[id] ? 0:165,bMode[id] ? 255:0, kRenderTransColor, 1)
               
                #if defined SPRITES
                new iMode = get_pcvar_num(pCvars[SpriteType]);
                if(iMode){
                        message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
                        write_byte(TE_BEAMFOLLOW)
                        write_short(iEnt[id][iPos])
                        write_short(iMode == 1 ? sprite:g_trail);
                        write_byte(10)
                        write_byte(5)
                        if(bMode[id]){
                                write_byte(0)
                                write_byte(0)
                                write_byte(255)
                        }
                        else{
                                write_byte(255)
                                write_byte(165)
                                write_byte(0)
                        }
                        write_byte(192)
                        message_end()
                }
                #endif
               
                return PLUGIN_CONTINUE;
        }


        stock bool:validWall(const Float:fOrigin[3], Float:fNormal[3], Float:width=40.0, Float:height = 65.0){
                new Float:fInvNormal[3];
                xs_vec_neg(fNormal, fInvNormal);
               
                new Float:fPoint[3];
                xs_vec_add(fOrigin, fNormal, fPoint);
               
                new Float:fNormalUp[3];
                new Float:fNormalRight[3];
                vector_to_angle(fNormal, fNormalUp);
               
                fNormalUp[0] = -fNormalUp[0];
               
                angle_vector(fNormalUp, ANGLEVECTOR_RIGHT, fNormalRight);
                angle_vector(fNormalUp, ANGLEVECTOR_UP, fNormalUp);
               
                xs_vec_mul_scalar(fNormalUp, height/2, fNormalUp);
                xs_vec_mul_scalar(fNormalRight, width/2, fNormalRight);
               
                new Float:fPoint2[3];
                xs_vec_add(fPoint, fNormalUp, fPoint2);
                xs_vec_add(fPoint2, fNormalRight, fPoint2);
                if(!traceToWall(fPoint2, fInvNormal))
                return false;
               
                xs_vec_add(fPoint, fNormalUp, fPoint2);
                xs_vec_sub(fPoint2, fNormalRight, fPoint2);
                if(!traceToWall(fPoint2, fInvNormal))
                return false;
               
                xs_vec_sub(fPoint, fNormalUp, fPoint2);
                xs_vec_sub(fPoint2, fNormalRight, fPoint2);
                if(!traceToWall(fPoint2, fInvNormal))
                return false;
               
                xs_vec_sub(fPoint, fNormalUp, fPoint2);
                xs_vec_add(fPoint2, fNormalRight, fPoint2);
                if(!traceToWall(fPoint2, fInvNormal))
                return false;
               
                return true;
        }

bool:traceToWall(const Float:fOrigin[3], const Float:fVec[3]){
                new Float:fOrigin2[3];
                xs_vec_add(fOrigin, fVec, fOrigin2);
                xs_vec_add(fOrigin2, fVec, fOrigin2);
               
                new tr = create_tr2();
                engfunc(EngFunc_TraceLine, fOrigin, fOrigin2, IGNORE_MISSILE | IGNORE_MONSTERS | IGNORE_GLASS, 0, tr);
                new Float:fFrac;
                get_tr2(tr, TR_flFraction, fFrac);
                free_tr2(tr);
               
                if( floatabs(fFrac - 0.5) <= 0.02 ){
                        return true;
                }
               
                return false;
        }

        set_animation(id, anim) {
                set_pev(id, pev_weaponanim, anim)
               
                message_begin(MSG_ONE, SVC_WEAPONANIM, {0, 0, 0}, id)
                write_byte(anim)
                write_byte(pev(id, pev_body))
                message_end()
        }

        parseAngle(id, in, out){
                new Float:fAngles[3];
                pev(id, pev_v_angle, fAngles);
                angle_vector(fAngles, ANGLEVECTOR_FORWARD, fAngles);
               
                new Float:fNormalIn[3];
                pev(in, pev_vuser1, fNormalIn);
                xs_vec_neg(fNormalIn, fNormalIn);
               
                new Float:fNormalOut[3];
                pev(out, pev_vuser1, fNormalOut);
               
                xs_vec_sub(fAngles, fNormalIn, fAngles);
                xs_vec_add(fAngles, fNormalOut, fAngles);
               
                //fAngles[2] = -fAngles[2];
               
                vector_to_angle(fAngles, fAngles);
               
                set_pev(id, pev_angles, fAngles);
                set_pev(id, pev_fixangle, 1);
               
               
                pev(id, pev_velocity, fAngles);
                new Float:fSpeed = vector_length(fAngles);
                xs_vec_normalize(fAngles,  fAngles);
               
                xs_vec_sub(fAngles, fNormalIn, fAngles);
                xs_vec_add(fAngles, fNormalOut, fAngles);
               
                xs_vec_normalize(fAngles, fAngles);
                xs_vec_mul_scalar(fAngles, fSpeed, fAngles);
                set_pev(id, pev_velocity, fAngles);
        }

bool:checkPlace(Float:fOrigin[3],iMode,id){
                new ent = -1;
                new szClass[64]
                while((ent = find_ent_in_sphere(ent,fOrigin,45.0))){
                        pev(ent,pev_classname,szClass,charsmax(szClass));
                        if(equal(szClass,szClassTelNieb) || equal(szClass,szClassTelPom)){
                                if(iMode == 0 && equal(szClass,szClassTelNieb) && pev(ent,pev_owner) == id){
                                        continue;
                                }
                                else if(iMode == 1 && equal(szClass,szClassTelPom) && pev(ent,pev_owner) == id){
                                        continue;
                                }
                                else{
                                        return false;
                                }
                        }
                }
                return true;
        }

        public cvar_register(){
                #if defined SPRITES
                pCvars[SpriteType] = register_cvar("portal_sprite","1")
                #endif
                pCvars[FallDamge] = register_cvar("portal_fall_damage","1")
                pCvars[SpeedBullet] = register_cvar("portal_bullet_speed","1500")
                pCvars[PortalCost] = register_cvar("portal_cost","-1")
                pCvars[SpawnPortal] = register_cvar("portal_spawn","0")
        }

bool:checkPortalPlace(Float: fOrigin[3],Float: fMins[3],Float: fMaxs[3]){
                new Float:fOriginTmp[3]
               
                xs_vec_copy(fOrigin,fOriginTmp)
               
               
                fOriginTmp[0] += fMins[0];
                fOriginTmp[1] += fMaxs[1];
                fOriginTmp[2] += fMaxs[2];
                if(!traceTo(fOrigin,fOriginTmp)){
                        return false;
                }
                xs_vec_copy(fOrigin,fOriginTmp)
               
               
                fOriginTmp[0] += fMaxs[0];
                fOriginTmp[1] += fMaxs[1];
                fOriginTmp[2] += fMaxs[2];
                if(!traceTo(fOrigin,fOriginTmp)){
                        return false;
                }
                xs_vec_copy(fOrigin,fOriginTmp)
               
               
                fOriginTmp[0] += fMins[0];
                fOriginTmp[1] += fMins[1];
                fOriginTmp[2] += fMaxs[2];
                if(!traceTo(fOrigin,fOriginTmp)){
                        return false;
                }
                xs_vec_copy(fOrigin,fOriginTmp)
               
                fOriginTmp[0] += fMaxs[0];
                fOriginTmp[1] += fMins[1];
                fOriginTmp[2] += fMaxs[2];
                if(!traceTo(fOrigin,fOriginTmp)){
                        return false;
                }
                xs_vec_copy(fOrigin,fOriginTmp)
               
                fOriginTmp[0] += fMins[0];
                fOriginTmp[1] += fMaxs[1];
                fOriginTmp[2] += fMins[2];
                if(!traceTo(fOrigin,fOriginTmp)){
                        return false;
                }
                xs_vec_copy(fOrigin,fOriginTmp)
               
                fOriginTmp[0] += fMaxs[0];
                fOriginTmp[1] += fMaxs[1];
                fOriginTmp[2] += fMins[2];
                if(!traceTo(fOrigin,fOriginTmp)){
                        return false;
                }
                xs_vec_copy(fOrigin,fOriginTmp)
               
                fOriginTmp[0] += fMins[0];
                fOriginTmp[1] += fMins[1];
                fOriginTmp[2] += fMins[2];
                if(!traceTo(fOrigin,fOriginTmp)){
                        return false;
                }
                xs_vec_copy(fOrigin,fOriginTmp)
               
                fOriginTmp[0] += fMaxs[0];
                fOriginTmp[1] += fMins[1];
                fOriginTmp[2] += fMins[2];
                if(!traceTo(fOrigin,fOriginTmp)){
                        return false;
                }
                xs_vec_copy(fOrigin,fOriginTmp)
               
                return true;
        }

bool:traceTo(const Float:fFrom[3],const Float:fTo[3]){
                new tr = create_tr2();
               
                engfunc(EngFunc_TraceLine, fFrom, fTo,0, 0, tr);
               
                new Float:fFrac;
                get_tr2(tr, TR_flFraction, fFrac);
                free_tr2(tr);
               
                return (fFrac == 1.0)
               
        }

#if defined TEST
        Create_Line(const Float:start[3], const Float:stop[3], Float:go=10.0, r=0,g=0,b=255)
        {
                new Float:fStart[3], Float:fStop[3];
                new Float:fVec[3];
                xs_vec_sub(start, stop, fVec);
                xs_vec_normalize(fVec, fVec);

                xs_vec_mul_scalar(fVec, go, fVec);

                xs_vec_add(stop, fVec, fStop);
                xs_vec_sub(start, fVec, fStart);


                message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
                write_byte(0)
                engfunc(EngFunc_WriteCoord, fStart[0])
                engfunc(EngFunc_WriteCoord,fStart[1])
                engfunc(EngFunc_WriteCoord,fStart[2])

                engfunc(EngFunc_WriteCoord,fStop[0])
                engfunc(EngFunc_WriteCoord,fStop[1])
                engfunc(EngFunc_WriteCoord,fStop[2])
                write_short(sprite)
                write_byte(1)
                write_byte(5)
                write_byte(1)//life
                write_byte(10)
                write_byte(0)
                write_byte(r)        // RED
                write_byte(g)        // GREEN
                write_byte(b)        // BLUE                                       
                write_byte(250)        // brightness
                write_byte(5)
                message_end()
        }
#endif
        /* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
*{\\ rtf1\\ ansi\\ deff0{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang1045\\ f0\\ fs16 \n\\ par }
*/


loiraolhosazul 02-23-2021 22:32

Re: fix bug portal gun
 
the same works for rehlds, see if you are using amxmodx 1.9.xx or 1.10.xx

shayan123 02-24-2021 05:46

Re: fix bug portal gun
 
i am using 1.8.2


All times are GMT -4. The time now is 17:39.

Powered by vBulletin®
Copyright ©2000 - 2024, vBulletin Solutions, Inc.