Short Pallet

Short Pallet 1.4

Нет прав для скачивания
@RAMA,
C-подобный:
#include <amxmodx>
#include <fakemeta_util>

new const g_szEntModel[] = "models/pallet.mdl"

new g_iEnt;

public plugin_precache() {
    precache_model(g_szEntModel);
}

public plugin_init() {
    register_clcmd("say /create", "_ent_create");
    register_clcmd("say /orig", "_ent_orig");
    register_clcmd("say /rot", "_ent_rot");
    register_clcmd("say /size", "_ent_size");
    register_clcmd("say /reset", "_ent_reset");
}

public _ent_create(pPlayer) {
    if(pev_valid(g_iEnt)) {
        new Float: flVecOrigin[3];
        fm_get_aim_origin(pPlayer, flVecOrigin);

        set_pev(g_iEnt, pev_origin, flVecOrigin);
    }
    else {
        g_iEnt = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "info_target"));

        if(pev_valid(g_iEnt)) {
            new Float: flVecOrigin[3];
            fm_get_aim_origin(pPlayer, flVecOrigin);

            engfunc(EngFunc_SetOrigin, g_iEnt, flVecOrigin);
            engfunc(EngFunc_SetModel, g_iEnt, g_szEntModel);

            register_forward(FM_PlayerPreThink, "CBasePlayer_PreThink");
        }
    }
}

public _ent_orig(pPlayer) {
    if(!pev_valid(g_iEnt)) {
        client_print(pPlayer, print_center, "say /create");
    }
    else{
        new Float: flVecOrigin[3];
        pev(g_iEnt, pev_origin, flVecOrigin);

        new iMenu = menu_create(fmt("ORIG [%..1f %..1f %..1f]", flVecOrigin[0], flVecOrigin[1], flVecOrigin[2]), "_ent_orig_handler");

        menu_additem(iMenu, "X-");
        menu_additem(iMenu, "X+");
        menu_additem(iMenu, "Y-");
        menu_additem(iMenu, "Y+");
        menu_additem(iMenu, "Z-");
        menu_additem(iMenu, "Z+");

        menu_display(pPlayer, iMenu);
    }
}

public _ent_orig_handler(pPlayer, iMenu, iItem) {
    menu_destroy(iMenu);

    if(iItem == MENU_EXIT) {
        return;
    }

    new const origAxis[] = { 0, 0, 1, 1, 2, 2 };
    new const origValue[] = { -1, 1, -1, 1, -1, 1 };

    new Float: flVecOrigin[3];
    pev(g_iEnt, pev_origin, flVecOrigin);

    flVecOrigin[origAxis[iItem]] += origValue[iItem];
    set_pev(g_iEnt, pev_origin, flVecOrigin);

    _ent_orig(pPlayer);
}

public _ent_rot(pPlayer) {
    if(!pev_valid(g_iEnt)) {
        client_print(pPlayer, print_center, "say /create");
    }
    else{
        new Float: flVecAngles[3];
        pev(g_iEnt, pev_angles, flVecAngles);

        new iMenu = menu_create(fmt("ROT [%..1f %..1f %..1f]", flVecAngles[0], flVecAngles[1], flVecAngles[2]), "_ent_rot_handler");

        menu_additem(iMenu, "X-");
        menu_additem(iMenu, "X+");
        menu_additem(iMenu, "Y-");
        menu_additem(iMenu, "Y+");
        menu_additem(iMenu, "Z-");
        menu_additem(iMenu, "Z+");

        menu_display(pPlayer, iMenu);
    }
}

public _ent_rot_handler(pPlayer, iMenu, iItem) {
    menu_destroy(iMenu);

    if(iItem == MENU_EXIT) {
        return;
    }

    new const origAxis[] = { 0, 0, 1, 1, 2, 2 };
    new const origValue[] = { -1, 1, -1, 1, -1, 1 };

    new Float: flVecAngles[3];
    pev(g_iEnt, pev_angles, flVecAngles);

    flVecAngles[origAxis[iItem]] += origValue[iItem];
    set_pev(g_iEnt, pev_angles, flVecAngles);

    _ent_rot(pPlayer);
}

public _ent_size(pPlayer, iMenuPage) {
    if(!pev_valid(g_iEnt)) {
        client_print(pPlayer, print_center, "say /create");
    }
    else{
        new Float: flVecMins[3], Float: flVecMaxs[3];
        pev(g_iEnt, pev_mins, flVecMins);
        pev(g_iEnt, pev_maxs, flVecMaxs);

        new iMenu = menu_create(fmt("[%..1f %..1f %..1f] [%..1f %..1f %..1f]", flVecMins[0], flVecMins[1], flVecMins[2], flVecMaxs[0], flVecMaxs[1], flVecMaxs[2]), "_ent_size_handler");

        menu_additem(iMenu, "mins: X-");
        menu_additem(iMenu, "mins: X+");
        menu_additem(iMenu, "mins: Y-");
        menu_additem(iMenu, "mins: Y+");
        menu_additem(iMenu, "mins: Z-");
        menu_additem(iMenu, "mins: Z+");

        menu_addblank2(iMenu);

        menu_additem(iMenu, "maxs: X-");
        menu_additem(iMenu, "maxs: X+");
        menu_additem(iMenu, "maxs: Y-");
        menu_additem(iMenu, "maxs: Y+");
        menu_additem(iMenu, "maxs: Z-");
        menu_additem(iMenu, "maxs: Z+");

        menu_display(pPlayer, iMenu, iMenuPage);
    }
}

public _ent_size_handler(pPlayer, iMenu, iItem) {
    switch(iItem) {
        case 0..5: {
            new const origAxis[] = { 0, 0, 1, 1, 2, 2 };
            new const origValue[] = { -1, 1, -1, 1, -1, 1 };

            new Float: flVecMins[3];
            pev(g_iEnt, pev_mins, flVecMins);

            if(iItem % 2 != 0) {
                if(flVecMins[origAxis[iItem]] != 0) {
                    flVecMins[origAxis[iItem]] += origValue[iItem];

                    set_pev(g_iEnt, pev_mins, flVecMins);
                }
            }
            else {
                flVecMins[origAxis[iItem]] += origValue[iItem];

                set_pev(g_iEnt, pev_mins, flVecMins);
            }

            _ent_size(pPlayer, 0);
        }

        case 7..12: {
            new iSubItem = iItem - 7;

            new const origAxis[] = { 0, 0, 1, 1, 2, 2 };
            new const origValue[] = { -1, 1, -1, 1, -1, 1 };

            new Float: flVecMaxs[3];
            pev(g_iEnt, pev_maxs, flVecMaxs);

            if(iSubItem % 2 == 0) {
                if(flVecMaxs[origAxis[iSubItem]] != 0) {
                    flVecMaxs[origAxis[iSubItem]] += origValue[iSubItem];

                    set_pev(g_iEnt, pev_maxs, flVecMaxs);
                }
            }
            else {
                flVecMaxs[origAxis[iSubItem]] += origValue[iSubItem];

                set_pev(g_iEnt, pev_maxs, flVecMaxs);
            }

            _ent_size(pPlayer, 1);
        }
    }
}

public _ent_reset(pPlayer) {
    if(!pev_valid(g_iEnt)) {
        client_print(pPlayer, print_center, "say /create");
    }
    else{
        set_pev(g_iEnt, pev_angles, NULL_VECTOR);
        set_pev(g_iEnt, pev_mins, NULL_VECTOR);
        set_pev(g_iEnt, pev_maxs, NULL_VECTOR);
    }
}

public CBasePlayer_PreThink(pPlayer) {
    new Float: flGameTime = get_gametime();
    static Float: flNextTime[MAX_PLAYERS+1];

    if(flNextTime[pPlayer] > flGameTime) {
        return;
    }

    flNextTime[pPlayer] = flGameTime + 0.1;

    if(pev_valid(g_iEnt)) {
        new Float: flVecOrigin[3];
        pev(g_iEnt, pev_origin, flVecOrigin);

        new Float: flVecMins[3];
        pev(g_iEnt, pev_mins, flVecMins);

        new Float: flVecMaxs[3];
        pev(g_iEnt, pev_maxs, flVecMaxs);

        xs_vec_add(flVecOrigin, flVecMins, flVecMins);
        xs_vec_add(flVecOrigin, flVecMaxs, flVecMaxs);
      
        message_begin(MSG_ONE, SVC_TEMPENTITY, .player = pPlayer);
        write_byte(TE_BOX);
        write_coord_f(flVecMins[0]);
        write_coord_f(flVecMins[1]);
        write_coord_f(flVecMins[2]);
        write_coord_f(flVecMaxs[0]);
        write_coord_f(flVecMaxs[1]);
        write_coord_f(flVecMaxs[2]);
        write_short(5);
        write_byte(255);
        write_byte(0);
        write_byte(0);
        message_end();
    }

}

say /create - создать/переопределить координаты по взгляду
say /orig - управление координатами
say /rot - управление углами
say /size - управление размерами
say /reset - сброс углов, размеров.
 

Кто просматривает тему

Назад
Верх