Русское сообщество по скриптингу

Удалить спрайт (BeaconSprite)  [Решено]

Все вопросы по работе и настройке AMXX и его плагинов.

Модератор: liFe iS GoOD

Правила форума
1. Запрещено материться и оскорблять других участников форума.
2. Запрещен флуд, оффтоп, дабл постинг во всех разделах форума, кроме раздела "Болтовня".
3. Запрещено взламывать сайт/форум или наносить любой вред проекту.
4. Запрещено рекламировать другие ресурсы.
5. Запрещено создавать темы без информативного названия. Название темы должно отображать ее смысл.

В данном разделе форума разрешено создавать темы, касающие только вопросов по AMX Mod X и его плагинам.

Удалить спрайт (BeaconSprite)

Сообщение dvahitov95 » 09 авг 2017, 00:13

Всем привет. Помогите пожалуйста удалить из исходника BeaconSprite. Я бы и сам удалил, но в одном месте в недоумение. Вот это место:

Код: Выделить всё
stock UTIL_PlayAnimation( const entity, const sequence, const Float:framerate 1.0 )
{
    
entity_set_float(entityEV_FL_animtimeget_gametime());
    
entity_set_float(entityEV_FL_framerateframerate);
    
entity_set_float(entityEV_FL_frame0.0);
    
entity_set_int(entityEV_INT_sequencesequence);
    
    new 
Float:origin[3], c[4][6], szModel[127]
    
entity_get_string(entityEV_SZ_modelszModelcharsmax(szModel))
    for(new 
isizeof szModelChecki++)
    {
        if(
equal(szModelszModelCheck[i]))
        {
            
parse(szColorCheck[i], c[1],5,c[2],5,c[3],5)
            break;
        }
    }
    
set_rendering(entitykRenderFxGlowShellstn(c[1]),stn(c[2]),stn(c[3])) 
    
entity_get_vector(entityEV_VEC_originorigin)
    
origin[2] -= 50.0
    engfunc
(EngFunc_MessageBeginMSG_BROADCASTSVC_TEMPENTITYorigin0
    
write_byte(TE_BEAMCYLINDER)
    
engfunc(EngFunc_WriteCoordorigin[0]) //start x
    
engfunc(EngFunc_WriteCoordorigin[1]) //start y
    
engfunc(EngFunc_WriteCoordorigin[2]) //start z
    
engfunc(EngFunc_WriteCoordorigin[0]+50//end x
    
engfunc(EngFunc_WriteCoordorigin[1]) //end y
    
engfunc(EngFunc_WriteCoordorigin[2]+135//end z
    
write_short(BeaconSprite)
    
write_byte(0)
    
write_byte(1)
    
write_byte(6)
    
write_byte(1)  //hight
    
write_byte(1
    
write_byte(stn(c[1])) //red
    
write_byte(stn(c[2])) //green
    
write_byte(stn(c[3])) //blue
    
write_byte(255)
    
write_byte(0)
    
message_end()


Код: Выделить всё
/**================================================================================
 * (\ ============= Версии ============= /)
 * 
 * 0.1 - Релиз.
 * 0.2 - Добавлены новые модели.
 * 0.3 - Добавлен финишных чекпоинт.
 * 0.4 - Добавлено меню.
 * 0.5 - Теперь пишет в чат время за которое игрок достигнул финиш. 
 * 0.6 - Добавлены еффекты.
 * 0.7 - Добавлено сохранение по файлу.
===================================================================================*/

/**================================================================================
    Инклуды
===================================================================================*/
#include <amxmodx>
#include <engine>
#include <fakemeta>
#include <cstrike>

/**================================================================================
    Информация плагина
===================================================================================*/
#define P "CheckPoints_by_BlackSmoke"
#define V "0.7"
#define A "BlackSmoke"

/**================================================================================
    Данные плагина
===================================================================================*/
#define ClassName "info_checkpoint" // Имя класса чекпоинтов
#define stn(%1) str_to_num(%1)
#define MaxCheckOnTheMap 15 // Максимальное кол-во чекпоинтов на карте
#define MoneyOneCheck 100 // Деньги за первый чекпоинт
#define MoneyNextCheck 200 // Деньги за последующий чекпоинт
#define MoneyFinishCheck 5000 // Деньги за финишных чекпоинт

/**================================================================================
    Константы
===================================================================================*/
new bool:bTouchPlayerCheck[33][512]
new 
iNumCheckRoundPl[33], bool:LastCheckbool:bOffCheck
new BeaconSprite
new Float:fTimeStartRound[33]

new 
szFile[127], OriginFile[MaxCheckOnTheMap][512]

new const 
szSoundCheck[3][] = 
{
    
"CheckPoints_by_BlackSmoke/Cp_Take_1.wav",
    
"CheckPoints_by_BlackSmoke/Cp_Take_2.wav",
    
"CheckPoints_by_BlackSmoke/Cp_Take_3.wav"
}

new const 
szModelCheck[6][] = 
{
    
"models/CheckPoints_by_BlackSmoke/Blue.mdl",
    
"models/CheckPoints_by_BlackSmoke/Gray.mdl",
    
"models/CheckPoints_by_BlackSmoke/Green.mdl",
    
"models/CheckPoints_by_BlackSmoke/Red.mdl",
    
"models/CheckPoints_by_BlackSmoke/Yellow.mdl",
    
"models/CheckPoints_by_BlackSmoke/Purple.mdl"
}
new const 
szColorCheck[6][] = {/*Синий*/"0 0 255",/*Серый*/"100 100 100",/*Зелёный*/"0 255 0",/*Красный*/"255 0 0",/*Жёлтый*/"255 255 0",/*Пурпурный*/"255 0 255"}

/**================================================================================
    Инициализация
===================================================================================*/
public plugin_init()
{
    
register_plugin(P,V,A)
    
register_touch(ClassName"player""TouchTarget")
    
register_think(ClassName"FwdThinkCheck")
    
register_think("info_checkpoint_finish""FwdThinkCheck")
    
register_touch("info_checkpoint_finish""player""TouchTargetFinish")
    
register_clcmd("cp_menu""MenuCheck")
    
register_event("HLTV""logevent_round_start""a""1=0""2=0")
    
register_menucmd(register_menuid("MenuCheckPointsAdd"), 1023"ActionMenuCheckPointsAdd")
}

/**================================================================================
    Меню
===================================================================================*/
public MenuCheck(id)
{
    if(!(
get_user_flags(id) & ADMIN_IMMUNITY))
    {
        
client_print(idprint_console"У вас не достаточно прав. ~%s~"P)
        return 
PLUGIN_HANDLED
    
}
    new 
szMenu[1024], iLenikey MENU_KEY_1|MENU_KEY_2|MENU_KEY_3|MENU_KEY_4|MENU_KEY_0
    iLen 
format(szMenu[iLen], charsmax(szMenu)-iLen"\yЧекпоинты^n\yКол-во: \r%d \w| \yФинишный: \r%sпоставлен^n^n"GetNumEntity(ClassName), LastCheck "" "Не ")
    
iLen += format(szMenu[iLen], charsmax(szMenu)-iLen"\y1. \wДобавить \d[\yОсталось\d: \r%d\d]^n", (MaxCheckOnTheMap GetNumEntity(ClassName)))
    
iLen += format(szMenu[iLen], charsmax(szMenu)-iLen"\y2. \wДобавить Финишный \d[\yОсталось\d: \r%d\d]^n"LastCheck 1)
    
iLen += format(szMenu[iLen], charsmax(szMenu)-iLen"\y3. \wУдалить все^n^n")
    
iLen += format(szMenu[iLen], charsmax(szMenu)-iLen"\y4. \wЧекпоинты \d[\y%s\d]^n"bOffCheck "Выкл" "Вкл")
    
    
iLen += format(szMenu[iLen], charsmax(szMenu)-iLen"^n\r0. \wВыход^n")
    
    
show_menu(idikeyszMenu, -1"MenuCheckPointsAdd")
    return 
PLUGIN_HANDLED
}

/**================================================================================
    Игрок нажал пункт меню
===================================================================================*/
public ActionMenuCheckPointsAdd(idkey)
{
    switch(
key)
    {
        case 
0
        {
            if(
GetNumEntity(ClassName) >= 15)
            {
                
Color_Print(id"!teamВы поставили !gМакс. !teamкол-во !yчекпоинтов.")
                return 
PLUGIN_CONTINUE
            
}
            new 
iOrigin[3], Float:fOrigin[3]
            
get_user_origin(idiOrigin3)
            
IVecFVec(iOriginfOrigin)
            
fOrigin[2] += 60.0
            AddCheck
(0fOrigin)
            
            
MenuCheck(id)
        }
        case 
1:
        {
            if(
LastCheck)
            {
                
Color_Print(id"!teamВы !gуже !teamпоставили !gпоследний !yчекпоинт.")
                return 
PLUGIN_CONTINUE
            
}
            new 
iOrigin[3], Float:fOrigin[3]
            
get_user_origin(idiOrigin3)
            
IVecFVec(iOriginfOrigin)
            
fOrigin[2] += 60.0
            AddCheck
(1fOrigin)
            
            
MenuCheck(id)
        }
        case 
2:
        {
            
remove_entity_name(ClassName)
            
remove_entity_name("info_checkpoint_finish")
            
LastCheck false
            delete_file
(szFile)
            
MenuCheck(id)
        }
        case 
3:
        {
            
bOffCheck bOffCheck false true
            MenuCheck
(id)
        }
    }
    return 
PLUGIN_HANDLED
}

/**================================================================================
    Новый раунд
===================================================================================*/
public logevent_round_start()
{
    new 
iPlayers[32], iNumq[33]
    
get_players(iPlayersiNum)
    for(new 
iiNumi++)
    {
        
fTimeStartRound[iPlayers[i]] = get_gametime()
        
iNumCheckRoundPl[iPlayers[i]] = 0
        
while(q[iPlayers[i]] < 510)
        {
            
q[iPlayers[i]]++
            
bTouchPlayerCheck[iPlayers[i]][q[iPlayers[i]]] = false
        
}
    }
}

/**================================================================================
    Игрок пересёк чекпоинт
===================================================================================*/
public TouchTarget(ent,id)
{
    if(!
is_valid_ent(ent) || !is_user_connected(id))
        return 
PLUGIN_CONTINUE
        
    
if(bTouchPlayerCheck[id][ent])
        return 
PLUGIN_CONTINUE
    
    iNumCheckRoundPl
[id]++
    
Color_Print(id"!teamВы пересекли !g%d-ый !teamчекпоинт !yНаграда: !g+ $%d"iNumCheckRoundPl[id], (MoneyOneCheck + (MoneyNextCheck*(iNumCheckRoundPl[id]-1))))
    
cs_set_user_money(idcs_get_user_money(id) + (MoneyOneCheck + (MoneyNextCheck*(iNumCheckRoundPl[id]-1))))
    
bTouchPlayerCheck[id][ent] = true
    client_cmd
(id"spk ^"%s^""szSoundCheck[random_num(0,sizeof szSoundCheck 1)])
    
    return 
PLUGIN_CONTINUE
}

/**================================================================================
    Игрок пересёк финишный чекпоинт
===================================================================================*/
public TouchTargetFinish(ent,id)
{
    if(!
is_valid_ent(ent) || !is_user_connected(id))
        return 
PLUGIN_CONTINUE
        
    
if(bTouchPlayerCheck[id][ent])
        return 
PLUGIN_CONTINUE
    
    
new szName[32]
    
get_user_name(idszNamecharsmax(szName))
    
    
Color_Print(id"!teamВы пересекли !gпоследний !teamчекпоинт !yНаграда: !g+ $%d"MoneyFinishCheck)
    
Color_Print(0"!teamИгрок !g%s !teamпрошёл карту за !y%d!g:!y%02d"szNamefloatround(get_gametime() - fTimeStartRound[id]) / 60floatround(get_gametime() - fTimeStartRound[id]) % 60)
    
cs_set_user_money(idcs_get_user_money(id) + MoneyFinishCheck)
    
bTouchPlayerCheck[id][ent] = true
    client_cmd
(id"spk ^"%s^""szSoundCheck[random_num(0,sizeof szSoundCheck 1)])
    
    return 
PLUGIN_CONTINUE
}

/**================================================================================
    Загрузки плагина
===================================================================================*/
public plugin_precache()
{
    for(new 
isizeof szModelChecki++)
        
precache_model(szModelCheck[i])
    for(new 
ysizeof szSoundChecky++)
        
precache_sound(szSoundCheck[y])
        
    
BeaconSprite precache_model("sprites/shockwave.spr")
    
    new 
CheckFolder[127]
    
format(CheckFoldercharsmax(CheckFolder), "addons/amxmodx/configs/CheckPoints_by_BlackSmoke")
    if(!
dir_exists(CheckFolder))
    
mkdir(CheckFolder)
    
    new 
Map[32]
    
get_mapname(Map31)
    
format(szFilecharsmax(szFile), "%s/%s.ini"CheckFolder,Map)
    new 
qLeniNumString,p[5][32], Float:origin[3]
    if(
file_exists(szFile))
    {
        while(
MaxCheckOnTheMap && read_file(szFile,OriginFile[iNumString], 511Len))
        {
            
q++
            if(
OriginFile[iNumString][0] == ';' || Len == || !OriginFile[iNumString][0])
            {
                continue
            }
            
parse(OriginFile[iNumString], p[1], 31,p[2], 31,p[3], 31,p[4],31)
            
origin[0] = str_to_float(p[1])
            
origin[1] = str_to_float(p[2])
            
origin[2] = str_to_float(p[3])
            
AddCheck(str_to_num(p[4]), origin0)
            
iNumString++
        }
    }
}    

/**================================================================================
    Синк
===================================================================================*/
public FwdThinkCheck(ent)
{
    if(!
is_valid_ent(ent))
        return;
    
    if(!
bOffCheck)
        
UTIL_PlayAnimation(ent50)
    else
        
set_rendering(ent)
        
    
entity_set_float(entEV_FL_nextthinkget_gametime() + 1.90)
    
entity_set_int(entEV_INT_solidbOffCheck SOLID_NOT SOLID_TRIGGER)
}

/**================================================================================
    Функция добавляет чекпоинт.
===================================================================================*/
stock AddCheck(type=0,Float:fOrigin[3]={0.0,0.0,0.0},save 1)
{
    static 
iNumber
    
if(save)
    {
        new 
szSave[512]
        
format(szSave511"%f %f %f %d"fOrigin[0], fOrigin[1], fOrigin[2], type)
        
write_file(szFileszSave)
    }
    if(
type)
        
LastCheck true
    
    iNumber
++    
    new 
iEntrnd random_num(0,sizeof szModelCheck 1),p[4][32]
    
iEnt create_entity("info_target")
    
parse(szColorCheck[rnd], p[1],5,p[2],5,p[3],5)
    if(
is_valid_ent(iEnt))
    {
        
entity_set_string(iEntEV_SZ_classnametype "info_checkpoint_finish" ClassName)
        
entity_set_float(iEntEV_FL_nextthinkget_gametime() + 0.1)
        
entity_set_origin(iEntfOrigin)
        
DispatchSpawn(iEnt)
        
entity_set_model(iEntszModelCheck[rnd])
        
set_rendering(iEntkRenderFxGlowShellstn(p[1]),stn(p[2]),stn(p[3]))
        
entity_set_int(iEntEV_INT_solidSOLID_TRIGGER)
        
entity_set_size(iEntFloat:{ -40.0, -40.0, -40.0 },  Float:{ 40.040.040.0 }) 
    }
}

/**================================================================================
    Анимация + Еффекты объекта
===================================================================================*/
stock UTIL_PlayAnimation( const entity, const sequence, const Float:framerate 1.0 )
{
    
entity_set_float(entityEV_FL_animtimeget_gametime());
    
entity_set_float(entityEV_FL_framerateframerate);
    
entity_set_float(entityEV_FL_frame0.0);
    
entity_set_int(entityEV_INT_sequencesequence);
    
    new 
Float:origin[3], c[4][6], szModel[127]
    
entity_get_string(entityEV_SZ_modelszModelcharsmax(szModel))
    for(new 
isizeof szModelChecki++)
    {
        if(
equal(szModelszModelCheck[i]))
        {
            
parse(szColorCheck[i], c[1],5,c[2],5,c[3],5)
            break;
        }
    }
    
set_rendering(entitykRenderFxGlowShellstn(c[1]),stn(c[2]),stn(c[3])) 
    
entity_get_vector(entityEV_VEC_originorigin)
    
origin[2] -= 50.0
    engfunc
(EngFunc_MessageBeginMSG_BROADCASTSVC_TEMPENTITYorigin0
    
write_byte(TE_BEAMCYLINDER)
    
engfunc(EngFunc_WriteCoordorigin[0]) //start x
    
engfunc(EngFunc_WriteCoordorigin[1]) //start y
    
engfunc(EngFunc_WriteCoordorigin[2]) //start z
    
engfunc(EngFunc_WriteCoordorigin[0]+50//end x
    
engfunc(EngFunc_WriteCoordorigin[1]) //end y
    
engfunc(EngFunc_WriteCoordorigin[2]+135//end z
    
write_short(BeaconSprite)
    
write_byte(0)
    
write_byte(1)
    
write_byte(6)
    
write_byte(1)  //hight
    
write_byte(1
    
write_byte(stn(c[1])) //red
    
write_byte(stn(c[2])) //green
    
write_byte(stn(c[3])) //blue
    
write_byte(255)
    
write_byte(0)
    
message_end()
}

/**================================================================================
    Цветной чат
===================================================================================*/
stock Color_Print(const id, const input[], any:...)
{
    new 
count 1players[32]
    static 
msg[191]
    new 
pr[32]
    
format(pr,31,P), pr[11] = '^0'
    
vformat(msg190input3)
    
format(msgsizeof(msg), "^1[^4%s^1] %s"pr,msg)
    
replace_all(msg190"!g""^4"// Green Color
    
replace_all(msg190"!y""^1"// Default Color
    
replace_all(msg190"!team""^3"// Team Color
    
    
if (idplayers[0] = id; else get_players(playerscount"ch")
    {
        for (new 
0counti++)
        {
            if (
is_user_connected(players[i]))
            {
                
message_begin(MSG_ONE_UNRELIABLEget_user_msgid("SayText"), _players[i])
                
write_byte(players[i]);
                
write_string(msg); 
                
message_end();
            }
        }
    }
}

/**================================================================================
    Функция подсчитывает кол-во объектов
===================================================================================*/
stock GetNumEntity(const class[])
{
    new 
iEntiNum
    
while((iEnt find_ent_by_class(iEnt, class)))
        
iNum++
    
    return 
iNum
}
 
Аватара пользователя
dvahitov95
 
Сообщения: 133
Зарегистрирован: 07 авг 2017, 17:48
Благодарил (а): 16 раз.
Поблагодарили: 1 раз.
Языки программирования: Pawn
SourcePawn
C++
Php
Ruby
Python
C#

Re: Удалить спрайт (BeaconSprite)  [Решено]

Сообщение Pafos » 09 авг 2017, 01:07

dvahitov95,
Код: Выделить всё

stock UTIL_PlayAnimation
( const entity, const sequence, const Float:framerate 1.0 )
{
    
entity_set_float(entityEV_FL_animtimeget_gametime());
    
entity_set_float(entityEV_FL_framerateframerate);
    
entity_set_float(entityEV_FL_frame0.0);
    
entity_set_int(entityEV_INT_sequencesequence);

 
Аватара пользователя
Pafos
 
Сообщения: 574
Зарегистрирован: 07 апр 2014, 18:03
Откуда: pfnClientConnect
Забанен
Благодарил (а): 129 раз.
Поблагодарили: 97 раз.
Опыт программирования: Больше трех лет
Языки программирования: Pawn


Вернуться в Вопросы по AMXX и его плагинам

Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex [Bot] и гости: 4