Semiclip + unstuck bug

Šiame forume rašomi vartotojų klausimai/problemos su kuriomis jie susidūrė kuriant pluginus.
Post Reply
User avatar
Trickas
Flooderis arba specialistas
Posts: 889
Joined: 2012 Jan 25 18:20
Skype: ner.e5

Semiclip + unstuck bug

Post by Trickas »

Sveiki, taigi pas save naudoju unstuck, bei semiclip pluginus, bet jie kartu susibugina, jog įėjus į savo tm narį tave iškelia virš jo ir eina užsikelt kur nors. Štai unstuck pluginas.

Code: Select all

#include <amxmodx>#include <fun>#include <fakemeta> new stuck[33] new cvar[3] new const Float:size[][3] = {    {0.0, 0.0, 1.0}, {0.0, 0.0, -1.0}, {0.0, 1.0, 0.0}, {0.0, -1.0, 0.0}, {1.0, 0.0, 0.0}, {-1.0, 0.0, 0.0}, {-1.0, 1.0, 1.0}, {1.0, 1.0, 1.0}, {1.0, -1.0, 1.0}, {1.0, 1.0, -1.0}, {-1.0, -1.0, 1.0}, {1.0, -1.0, -1.0}, {-1.0, 1.0, -1.0}, {-1.0, -1.0, -1.0},    {0.0, 0.0, 2.0}, {0.0, 0.0, -2.0}, {0.0, 2.0, 0.0}, {0.0, -2.0, 0.0}, {2.0, 0.0, 0.0}, {-2.0, 0.0, 0.0}, {-2.0, 2.0, 2.0}, {2.0, 2.0, 2.0}, {2.0, -2.0, 2.0}, {2.0, 2.0, -2.0}, {-2.0, -2.0, 2.0}, {2.0, -2.0, -2.0}, {-2.0, 2.0, -2.0}, {-2.0, -2.0, -2.0},    {0.0, 0.0, 3.0}, {0.0, 0.0, -3.0}, {0.0, 3.0, 0.0}, {0.0, -3.0, 0.0}, {3.0, 0.0, 0.0}, {-3.0, 0.0, 0.0}, {-3.0, 3.0, 3.0}, {3.0, 3.0, 3.0}, {3.0, -3.0, 3.0}, {3.0, 3.0, -3.0}, {-3.0, -3.0, 3.0}, {3.0, -3.0, -3.0}, {-3.0, 3.0, -3.0}, {-3.0, -3.0, -3.0},    {0.0, 0.0, 4.0}, {0.0, 0.0, -4.0}, {0.0, 4.0, 0.0}, {0.0, -4.0, 0.0}, {4.0, 0.0, 0.0}, {-4.0, 0.0, 0.0}, {-4.0, 4.0, 4.0}, {4.0, 4.0, 4.0}, {4.0, -4.0, 4.0}, {4.0, 4.0, -4.0}, {-4.0, -4.0, 4.0}, {4.0, -4.0, -4.0}, {-4.0, 4.0, -4.0}, {-4.0, -4.0, -4.0},    {0.0, 0.0, 5.0}, {0.0, 0.0, -5.0}, {0.0, 5.0, 0.0}, {0.0, -5.0, 0.0}, {5.0, 0.0, 0.0}, {-5.0, 0.0, 0.0}, {-5.0, 5.0, 5.0}, {5.0, 5.0, 5.0}, {5.0, -5.0, 5.0}, {5.0, 5.0, -5.0}, {-5.0, -5.0, 5.0}, {5.0, -5.0, -5.0}, {-5.0, 5.0, -5.0}, {-5.0, -5.0, -5.0}} public plugin_init() {    register_plugin("Automatic Unstuck","1.5","NL)Ramon(NL")    cvar[0] = register_cvar("amx_autounstuck","1")    cvar[1] = register_cvar("amx_autounstuckeffects","1")    cvar[2] = register_cvar("amx_autounstuckwait","7")    set_task(0.1,"checkstuck",0,"",0,"b")} public checkstuck() {    if(get_pcvar_num(cvar[0]) >= 1) {        static players[32], pnum, player        get_players(players, pnum)        static Float:origin[3]        static Float:mins[3], hull        static Float:vec[3]        static o,i        for(i=0; i<pnum; i++){            player = players[i]            if (is_user_connected(player) && is_user_alive(player)) {                pev(player, pev_origin, origin)                hull = pev(player, pev_flags) & FL_DUCKING ? HULL_HEAD : HULL_HUMAN                if (!is_hull_vacant(origin, hull,player) && !get_user_noclip(player) && !(pev(player,pev_solid) & SOLID_NOT)) {                    ++stuck[player]                    if(stuck[player] >= get_pcvar_num(cvar[2])) {                        pev(player, pev_mins, mins)                        vec[2] = origin[2]                        for (o=0; o < sizeof size; ++o) {                            vec[0] = origin[0] - mins[0] * size[o][0]                            vec[1] = origin[1] - mins[1] * size[o][1]                            vec[2] = origin[2] - mins[2] * size[o][2]                            if (is_hull_vacant(vec, hull,player)) {                                engfunc(EngFunc_SetOrigin, player, vec)                                effects(player)                                set_pev(player,pev_velocity,{0.0,0.0,0.0})                                o = sizeof size                            }                        }                    }                }                else                {                    stuck[player] = 0                }            }        }    }} stock bool:is_hull_vacant(const Float:origin[3], hull,id) {    static tr    engfunc(EngFunc_TraceHull, origin, origin, 0, hull, id, tr)    if (!get_tr2(tr, TR_StartSolid) || !get_tr2(tr, TR_AllSolid)) //get_tr2(tr, TR_InOpen))        return true        return false} public effects(id) {    if(get_pcvar_num(cvar[1])) {        set_hudmessage(255,150,50, -1.0, 0.65, 0, 6.0, 1.5,0.1,0.7) // HUDMESSAGE        show_hudmessage(id,"Fuiste destrabado.") // HUDMESSAGE        message_begin(MSG_ONE_UNRELIABLE,105,{0,0,0},id )              write_short(1<<10)   // fade lasts this long duration        write_short(1<<10)   // fade lasts this long hold time        write_short(1<<1)   // fade type (in / out)        write_byte(20)            // fade red        write_byte(255)    // fade green        write_byte(255)        // fade blue        write_byte(255)    // fade alpha        message_end()        client_cmd(id,"spk fvox/blip.wav")    }} 
O semiclip iš hidenseek by exolent plugino, radau kažkokį pluginą kuriame yra kartu ir semiclip ir unstuck, bet ten unstuck bugintas, jis neatstrigdina kaip suprantu iš papildomu modelių, nes man tereikia unstuck plugino kuris atrigdintų iš blokų t.y iš ct/t barrier naudojamų blockmaker plugine.
Va tas semistuck.

Code: Select all

#include <amxmodx>#include <amxmisc>#include <fakemeta>#include <fakemeta_util>#include <fun> #define PLUGIN "SemiClip/Unstuck"#define VERSION "1.0"#define AUTHOR "Quick-Gun" new bool:plrSolid[33]new bool:plrRestore[33]new bool:g_colliding[33] new Float:g_lasttimetouched[33] new plrTeam[33]new maxplayersnew stuck[33]new cvar[3] new const Float:size[][3] = {    {0.0, 0.0, 1.0}, {0.0, 0.0, -1.0}, {0.0, 1.0, 0.0}, {0.0, -1.0, 0.0}, {1.0, 0.0, 0.0}, {-1.0, 0.0, 0.0}, {-1.0, 1.0, 1.0}, {1.0, 1.0, 1.0}, {1.0, -1.0, 1.0}, {1.0, 1.0, -1.0}, {-1.0, -1.0, 1.0}, {1.0, -1.0, -1.0}, {-1.0, 1.0, -1.0}, {-1.0, -1.0, -1.0},    {0.0, 0.0, 2.0}, {0.0, 0.0, -2.0}, {0.0, 2.0, 0.0}, {0.0, -2.0, 0.0}, {2.0, 0.0, 0.0}, {-2.0, 0.0, 0.0}, {-2.0, 2.0, 2.0}, {2.0, 2.0, 2.0}, {2.0, -2.0, 2.0}, {2.0, 2.0, -2.0}, {-2.0, -2.0, 2.0}, {2.0, -2.0, -2.0}, {-2.0, 2.0, -2.0}, {-2.0, -2.0, -2.0},    {0.0, 0.0, 3.0}, {0.0, 0.0, -3.0}, {0.0, 3.0, 0.0}, {0.0, -3.0, 0.0}, {3.0, 0.0, 0.0}, {-3.0, 0.0, 0.0}, {-3.0, 3.0, 3.0}, {3.0, 3.0, 3.0}, {3.0, -3.0, 3.0}, {3.0, 3.0, -3.0}, {-3.0, -3.0, 3.0}, {3.0, -3.0, -3.0}, {-3.0, 3.0, -3.0}, {-3.0, -3.0, -3.0},    {0.0, 0.0, 4.0}, {0.0, 0.0, -4.0}, {0.0, 4.0, 0.0}, {0.0, -4.0, 0.0}, {4.0, 0.0, 0.0}, {-4.0, 0.0, 0.0}, {-4.0, 4.0, 4.0}, {4.0, 4.0, 4.0}, {4.0, -4.0, 4.0}, {4.0, 4.0, -4.0}, {-4.0, -4.0, 4.0}, {4.0, -4.0, -4.0}, {-4.0, 4.0, -4.0}, {-4.0, -4.0, -4.0},    {0.0, 0.0, 5.0}, {0.0, 0.0, -5.0}, {0.0, 5.0, 0.0}, {0.0, -5.0, 0.0}, {5.0, 0.0, 0.0}, {-5.0, 0.0, 0.0}, {-5.0, 5.0, 5.0}, {5.0, 5.0, 5.0}, {5.0, -5.0, 5.0}, {5.0, 5.0, -5.0}, {-5.0, -5.0, 5.0}, {5.0, -5.0, -5.0}, {-5.0, 5.0, -5.0}, {-5.0, -5.0, -5.0}} public plugin_init() {    register_plugin(PLUGIN, VERSION, AUTHOR)        register_forward(FM_PlayerPreThink, "preThink")    register_forward(FM_PlayerPostThink, "postThink")        register_forward(FM_AddToFullPack, "addToFullPack", 1)     cvar[0] = register_cvar("amx_autounstuck","1")    cvar[1] = register_cvar("amx_autounstuckeffects","1")    cvar[2] = register_cvar("amx_autounstuckwait","7")        maxplayers = get_maxplayers()    set_task(0.1,"checkstuck",0,"",0,"b")}  public checkstuck() {         if(get_pcvar_num(cvar[0]) >= 1) {        static players[32], pnum, player        get_players(players, pnum)        static Float:origin[3]        static Float:mins[3], hull        static Float:vec[3]        static o,i        for(i=0; i<pnum; i++){            player = players[i]            if (is_user_connected(player) && is_user_alive(player)) {                pev(player, pev_origin, origin)                hull = pev(player, pev_flags) & FL_DUCKING ? HULL_HEAD : HULL_HUMAN                if (!is_hull_vacant(origin, hull,player) && !get_user_noclip(player) && !(pev(player,pev_solid) & SOLID_NOT) && !g_colliding[player]) {                    ++stuck[player]                    if(stuck[player] >= get_pcvar_num(cvar[2])) {                        pev(player, pev_mins, mins)                        vec[2] = origin[2]                        for (o=0; o < sizeof size; ++o) {                            vec[0] = origin[0] - mins[0] * size[o][0]                            vec[1] = origin[1] - mins[1] * size[o][1]                            vec[2] = origin[2] - mins[2] * size[o][2]                            if (is_hull_vacant(vec, hull,player)) {                                engfunc(EngFunc_SetOrigin, player, vec)                                effects(player)                                set_pev(player,pev_velocity,{0.0,0.0,0.0})                                o = sizeof size                            }                        }                    }                }                else                {                    stuck[player] = 0                }            }        }    }} stock bool:is_hull_vacant(const Float:origin[3], hull,id) {    static tr    engfunc(EngFunc_TraceHull, origin, origin, 0, hull, id, tr)    if (!get_tr2(tr, TR_StartSolid) || !get_tr2(tr, TR_AllSolid)) //get_tr2(tr, TR_InOpen))        return true        return false} public effects(id) {    if(get_pcvar_num(cvar[1])) {        set_hudmessage(255,150,50, -1.0, 0.65, 0, 6.0, 1.5,0.1,0.7) // HUDMESSAGE        show_hudmessage(id,"You should be unstucked now!") // HUDMESSAGE        message_begin(MSG_ONE_UNRELIABLE,105,{0,0,0},id )              write_short(1<<10)   // fade lasts this long duration        write_short(1<<10)   // fade lasts this long hold time        write_short(1<<1)   // fade type (in / out)        write_byte(20)            // fade red        write_byte(255)    // fade green        write_byte(255)        // fade blue        write_byte(255)    // fade alpha        message_end()        client_cmd(id,"spk fvox/blip.wav")    }}  public addToFullPack(es, e, ent, host, hostflags, player, pSet){    if(player)    {        if(plrSolid[host] && plrSolid[ent] && plrTeam[host] == plrTeam[ent])        {            set_es(es, ES_Solid, SOLID_NOT)            set_es(es, ES_RenderMode, kRenderTransAdd)            set_es(es, ES_RenderAmt, 85)        }    }} FirstThink(){    for(new i = 1; i <= maxplayers; i++)    {        if(!is_user_alive(i))        {            plrSolid[i] = false            continue        }                plrTeam[i] = get_user_team(i)        plrSolid[i] = pev(i, pev_solid) == SOLID_SLIDEBOX ? true : false    }} public preThink(id){    static i, LastThink        if(LastThink > id)    {        FirstThink()    }    LastThink = id        if(!plrSolid[id]) return     for(i = 1; i <= maxplayers; i++)    {        if(!plrSolid[i] || id == i) continue                if(plrTeam[i] == plrTeam[id])        {            set_pev(i, pev_solid, SOLID_NOT)             static Float:gametime; gametime = get_gametime()            g_lasttimetouched[id] = gametime            g_lasttimetouched[i] = gametime             plrRestore[i] = true            g_colliding[i] = true        }    }     static solid; solid = pev(id, pev_solid)    if(solid == SOLID_SLIDEBOX && (get_gametime() - g_lasttimetouched[id]) > 0.34)    {        g_colliding[i] = false    }} public postThink(id){    static i        for(i = 1; i <= maxplayers; i++)    {        if(plrRestore[i])        {            set_pev(i, pev_solid, SOLID_SLIDEBOX)            plrRestore[i] = false        }    }} 
Taigi, gal būtų įdėjų kaip padaryt, kad "neatstrigdintų" iš žaidėjų, bet atstrigdintų iš blokų?
- Skype: ner.e5
- Steam: Tr1ckas

Tetusis

Re: Semiclip + unstuck bug

Post by Tetusis »

unstuck rasi bm modifikacijose giliau paieskok, tikrai yra, kas liecia semiclip tiksliai neprisimenu is kur si koda pasiemiau gal is exolent arba kz, bet jame 0 bug'u bei yra lengvai suprantamas stovejo mano traininge.

Code: Select all

#include <amxmodx>#include <amxmisc>#include <hamsandwich>#include <fakemeta>#include <engine> new g_iSemiClip[33]; public plugin_init() {    register_forward( FM_StartFrame,        "fwStartFrame", 0 );    register_forward( FM_AddToFullPack,     "fwFullPack",   1 ); } public fwFullPack(es, e, ent, host, flags, player, pSet) {    if(player && g_iSemiClip[ent] && g_iSemiClip[host]) {    set_es(es, ES_Solid, SOLID_NOT);    set_es(es, ES_RenderMode, kRenderTransAlpha);    set_es(es, ES_RenderAmt, 255); // 100    }    return FMRES_IGNORED;} public fwStartFrame() {    static iPlayers[32], iNum, iPlayer, iPlayer2;    get_players(iPlayers, iNum);     arrayset(g_iSemiClip, 0, sizeof(g_iSemiClip));     new iTeams[33] = {-1, ...};    for(new i=0; i < iNum; i++) {    iPlayer = iPlayers[i];        if( !is_user_alive(iPlayer) )    continue;            for(new j=0; j < iNum; j++) {    iPlayer2 = iPlayers[j];                if(iPlayer == iPlayer2 || !is_user_alive(iPlayer2))    continue;                static Float:vOrigin1[3], Float:vOrigin2[3];    pev(iPlayer, pev_origin, vOrigin1);    pev(iPlayer2, pev_origin, vOrigin2);                if( vector_distance( vOrigin1, vOrigin2 ) < 96) {    if(iTeams[iPlayer] == -1)    iTeams[iPlayer]  = get_user_team(iPlayer);    if(iTeams[iPlayer2] == -1)    iTeams[iPlayer2]        = get_user_team(iPlayer2);      g_iSemiClip[iPlayer]    = true;    g_iSemiClip[iPlayer2]   = true;    }    }    }    for(new i=0; i < iNum;i++) {    iPlayer = iPlayers[i];    if( is_user_alive(iPlayer) )    set_pev(iPlayer, pev_solid, g_iSemiClip[iPlayer] ? SOLID_NOT : SOLID_SLIDEBOX);    }        return FMRES_IGNORED;} 

User avatar
Trickas
Flooderis arba specialistas
Posts: 889
Joined: 2012 Jan 25 18:20
Skype: ner.e5

Re: Semiclip + unstuck bug

Post by Trickas »

Su semiclip viskas gerai, reikia unstuck tvarkyt, nu ten kažkas yra susiję su unstuck, bet nežinau kaip ten pritaikyt įstrigimui į blokus.
- Skype: ner.e5
- Steam: Tr1ckas

Tetusis

Re: Semiclip + unstuck bug

Post by Tetusis »

Trickas wrote:Su semiclip viskas gerai, reikia unstuck tvarkyt, nu ten kažkas yra susiję su unstuck, bet nežinau kaip ten pritaikyt įstrigimui į blokus.
pasiknises truputi po savo siukslyna radau tai, gali pritaikyti visiems kitiems block'ams, pluginas stock, mano nekoreguotas.

Code: Select all

clude <amxmodx> #define VERSION     "0.1"#define TASK_STUCK  1337#define MAX_ENT     (900+32*15)#define AVG_TIMES   31 new     g_TimesStucked[33][MAX_ENT]; /*----------***********************----------*//*-----------*********************-----------*//*------------*******************------------*//*-----------*********************-----------*//*----------***********************----------*//*-------->DO PODMIANY NA SWOJ ENUM<---------*/enum{    BM_PLATFORM,        //A    BM_BHOP,        //B    BM_DAMAGE,      //C    BM_HEALER,      //D    BM_NOFALLDAMAGE,    //I    BM_ICE,         //J    BM_TRAMPOLINE,      //G    BM_SPEEDBOOST,      //H    BM_INVINCIBILITY,   //E    BM_STEALTH,     //F    BM_DEATH,       //K    BM_NUKE,        //L    BM_CAMOUFLAGE,      //M    BM_LOWGRAVITY,      //N    BM_FIRE,        //O    BM_SLAP,        //P    BM_RANDOM,      //Q    BM_HONEY,       //R    BM_BARRIER_CT,      //S    BM_BARRIER_T,       //T    BM_BOOTSOFSPEED,    //U    BM_GLASS,       //V    BM_BHOP_NOSLOW,     //W    BM_AUTO_BHOP,       //X    BM_ICE_BHOP,        //Y    BM_DAMAGE_BHOP,     //Z    BM_NOFALLDAMAGE_BHOP,   //0    BM_GLASS_BHOP,      //1    BM_FENCE,       //2    BM_GRASS,       //3    BM_BOX,         //4    BM_DUSTBOX,     //5    BM_WALL,        //6    BM_FLOOR,       //7    BM_DELAYED_BHOP,    //8    BM_SPAMDUCK,        //9    BM_GRAVITY,     //a    BM_TRAMPOLINELOW,   //b    BM_TRAMPOLINEHIGH,  //c    BM_NOCLIP,      //d    BM_NOCLIP_GOD,      //e    BM_NADES,       //f    BM_MAGIC_CARPET,    //g    BM_BOOSTER_LOW,     //h    BM_BOOSTER_HIGH,    //i    BM_SUPERHEAL,       //j    BM_ROCKET       //k};/*----------***********************----------*//*-----------*********************-----------*//*------------*******************------------*//*-----------*********************-----------*//*----------***********************----------*//*-------------->KONIEC PODMIAN<-------------*/ #include <fakemeta> public plugin_init(){    register_plugin("Blockmaker bunnyhop unstucker", VERSION, "diablix");        register_forward(FM_Touch, "fwdTouch");} public fwdTouch(toucher, touched, entity, id){    if(!is_user_alive(toucher)) return;        if(pev(toucher, pev_flags) & FL_ONGROUND && pev(toucher, pev_groundentity) == touched || pev(toucher, pev_flags) & FL_ONGROUND || !(pev(toucher, pev_flags) & FL_ONGROUND)){        if(isValidBlock(touched)){            g_TimesStucked[toucher][touched] ++;                        if(!task_exists(TASK_STUCK + toucher)) set_task(2.8, "resetStuck", TASK_STUCK + toucher);            for(new i = 0; i <= MAX_ENT - 1 ; i++){                if(g_TimesStucked[toucher][i] >= AVG_TIMES){                    if(pev(toucher, pev_flags) & FL_ONGROUND) //warto sprawdzię drugi raz aby nie zbugowaę                        unStuckPlayer(toucher);                }            }        }    }} public resetStuck(task_id){    new toucher = task_id - TASK_STUCK;    for(new i = 0; i <= MAX_ENT - 1 ; i++)        g_TimesStucked[toucher][i] = 0;} public unStuckPlayer(toucher){    new Float:fOrigin[3];    pev(toucher, pev_origin, fOrigin);        fOrigin[2] += 9.5;        set_pev(toucher, pev_origin, fOrigin);        set_hudmessage(42, 255, 85, 0.42, 0.76, 0, 2.0, 2.0, 1.0, 1.0, 4);    show_hudmessage(toucher, "Zostales odblokowany");} bool:isValidBlock(ent){    new szClassname[32], blockType;    blockType = pev(ent, pev_body);    pev(ent, pev_classname, szClassname, sizeof szClassname - 1);        return equal(szClassname, "bm_block") || equal(szClassname, "bcm_block") && blockType == BM_BHOP ? true : false} 

User avatar
Trickas
Flooderis arba specialistas
Posts: 889
Joined: 2012 Jan 25 18:20
Skype: ner.e5

Re: Semiclip + unstuck bug

Post by Trickas »

Neveikia. :/
- Skype: ner.e5
- Steam: Tr1ckas

Post Reply

Who is online

Users browsing this forum: Amazon [Bot] and 2 guests