Все вопросы по работе и настройке AMXX и его плагинов.
Модератор: liFe iS GoOD
Правила форума
1. Запрещено материться и оскорблять других участников форума.
2. Запрещен флуд, оффтоп, дабл постинг во всех разделах форума, кроме раздела "Болтовня".
3. Запрещено взламывать сайт/форум или наносить любой вред проекту.
4. Запрещено рекламировать другие ресурсы.
5. Запрещено создавать темы без информативного названия. Название темы должно отображать ее смысл.
В данном разделе форума разрешено создавать темы, касающие только вопросов по AMX Mod X и его плагинам.
dvahitov95 » 09 авг 2017, 00:13
Всем привет. Помогите пожалуйста удалить из исходника BeaconSprite. Я бы и сам удалил, но в одном месте в недоумение. Вот это место:
- Код: Выделить всё
stock UTIL_PlayAnimation( const entity, const sequence, const Float:framerate = 1.0 )
{
entity_set_float(entity, EV_FL_animtime, get_gametime());
entity_set_float(entity, EV_FL_framerate, framerate);
entity_set_float(entity, EV_FL_frame, 0.0);
entity_set_int(entity, EV_INT_sequence, sequence);
new Float:origin[3], c[4][6], szModel[127]
entity_get_string(entity, EV_SZ_model, szModel, charsmax(szModel))
for(new i; i < sizeof szModelCheck; i++)
{
if(equal(szModel, szModelCheck[i]))
{
parse(szColorCheck[i], c[1],5,c[2],5,c[3],5)
break;
}
}
set_rendering(entity, kRenderFxGlowShell, stn(c[1]),stn(c[2]),stn(c[3]))
entity_get_vector(entity, EV_VEC_origin, origin)
origin[2] -= 50.0
engfunc(EngFunc_MessageBegin, MSG_BROADCAST, SVC_TEMPENTITY, origin, 0)
write_byte(TE_BEAMCYLINDER)
engfunc(EngFunc_WriteCoord, origin[0]) engfunc(EngFunc_WriteCoord, origin[1]) engfunc(EngFunc_WriteCoord, origin[2]) engfunc(EngFunc_WriteCoord, origin[0]+50) engfunc(EngFunc_WriteCoord, origin[1]) engfunc(EngFunc_WriteCoord, origin[2]+135) write_short(BeaconSprite)
write_byte(0)
write_byte(1)
write_byte(6)
write_byte(1) write_byte(1)
write_byte(stn(c[1])) write_byte(stn(c[2])) write_byte(stn(c[3])) write_byte(255)
write_byte(0)
message_end()
}
- Код: Выделить всё
new bool:bTouchPlayerCheck[33][512]
new iNumCheckRoundPl[33], bool:LastCheck, bool: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(id, print_console, "У вас не достаточно прав. ~%s~", P)
return PLUGIN_HANDLED
}
new szMenu[1024], iLen, ikey = 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 ? 0 : 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(id, ikey, szMenu, -1, "MenuCheckPointsAdd")
return PLUGIN_HANDLED
}
public ActionMenuCheckPointsAdd(id, key)
{
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(id, iOrigin, 3)
IVecFVec(iOrigin, fOrigin)
fOrigin[2] += 60.0
AddCheck(0, fOrigin)
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(id, iOrigin, 3)
IVecFVec(iOrigin, fOrigin)
fOrigin[2] += 60.0
AddCheck(1, fOrigin)
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], iNum, q[33]
get_players(iPlayers, iNum)
for(new i; i < iNum; i++)
{
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(id, cs_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(id, szName, charsmax(szName))
Color_Print(id, "!teamВы пересекли !gпоследний !teamчекпоинт !yНаграда: !g+ $%d", MoneyFinishCheck)
Color_Print(0, "!teamИгрок !g%s !teamпрошёл карту за !y%d!g:!y%02d", szName, floatround(get_gametime() - fTimeStartRound[id]) / 60, floatround(get_gametime() - fTimeStartRound[id]) % 60)
cs_set_user_money(id, cs_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 i; i < sizeof szModelCheck; i++)
precache_model(szModelCheck[i])
for(new y; y < sizeof szSoundCheck; y++)
precache_sound(szSoundCheck[y])
BeaconSprite = precache_model("sprites/shockwave.spr")
new CheckFolder[127]
format(CheckFolder, charsmax(CheckFolder), "addons/amxmodx/configs/CheckPoints_by_BlackSmoke")
if(!dir_exists(CheckFolder))
mkdir(CheckFolder)
new Map[32]
get_mapname(Map, 31)
format(szFile, charsmax(szFile), "%s/%s.ini", CheckFolder,Map)
new q, Len, iNumString,p[5][32], Float:origin[3]
if(file_exists(szFile))
{
while(q < MaxCheckOnTheMap && read_file(szFile, q ,OriginFile[iNumString], 511, Len))
{
q++
if(OriginFile[iNumString][0] == ';' || Len == 0 || !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]), origin, 0)
iNumString++
}
}
}
public FwdThinkCheck(ent)
{
if(!is_valid_ent(ent))
return;
if(!bOffCheck)
UTIL_PlayAnimation(ent, 50)
else
set_rendering(ent)
entity_set_float(ent, EV_FL_nextthink, get_gametime() + 1.90)
entity_set_int(ent, EV_INT_solid, bOffCheck ? 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(szSave, 511, "%f %f %f %d", fOrigin[0], fOrigin[1], fOrigin[2], type)
write_file(szFile, szSave)
}
if(type)
LastCheck = true
iNumber++
new iEnt, rnd = 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(iEnt, EV_SZ_classname, type ? "info_checkpoint_finish" : ClassName)
entity_set_float(iEnt, EV_FL_nextthink, get_gametime() + 0.1)
entity_set_origin(iEnt, fOrigin)
DispatchSpawn(iEnt)
entity_set_model(iEnt, szModelCheck[rnd])
set_rendering(iEnt, kRenderFxGlowShell, stn(p[1]),stn(p[2]),stn(p[3]))
entity_set_int(iEnt, EV_INT_solid, SOLID_TRIGGER)
entity_set_size(iEnt, Float:{ -40.0, -40.0, -40.0 }, Float:{ 40.0, 40.0, 40.0 })
}
}
stock UTIL_PlayAnimation( const entity, const sequence, const Float:framerate = 1.0 )
{
entity_set_float(entity, EV_FL_animtime, get_gametime());
entity_set_float(entity, EV_FL_framerate, framerate);
entity_set_float(entity, EV_FL_frame, 0.0);
entity_set_int(entity, EV_INT_sequence, sequence);
new Float:origin[3], c[4][6], szModel[127]
entity_get_string(entity, EV_SZ_model, szModel, charsmax(szModel))
for(new i; i < sizeof szModelCheck; i++)
{
if(equal(szModel, szModelCheck[i]))
{
parse(szColorCheck[i], c[1],5,c[2],5,c[3],5)
break;
}
}
set_rendering(entity, kRenderFxGlowShell, stn(c[1]),stn(c[2]),stn(c[3]))
entity_get_vector(entity, EV_VEC_origin, origin)
origin[2] -= 50.0
engfunc(EngFunc_MessageBegin, MSG_BROADCAST, SVC_TEMPENTITY, origin, 0)
write_byte(TE_BEAMCYLINDER)
engfunc(EngFunc_WriteCoord, origin[0]) engfunc(EngFunc_WriteCoord, origin[1]) engfunc(EngFunc_WriteCoord, origin[2]) engfunc(EngFunc_WriteCoord, origin[0]+50) engfunc(EngFunc_WriteCoord, origin[1]) engfunc(EngFunc_WriteCoord, origin[2]+135) write_short(BeaconSprite)
write_byte(0)
write_byte(1)
write_byte(6)
write_byte(1) write_byte(1)
write_byte(stn(c[1])) write_byte(stn(c[2])) write_byte(stn(c[3])) write_byte(255)
write_byte(0)
message_end()
}
stock Color_Print(const id, const input[], any:...)
{
new count = 1, players[32]
static msg[191]
new pr[32]
format(pr,31,P), pr[11] = '^0'
vformat(msg, 190, input, 3)
format(msg, sizeof(msg), "^1[^4%s^1] %s", pr,msg)
replace_all(msg, 190, "!g", "^4") replace_all(msg, 190, "!y", "^1") replace_all(msg, 190, "!team", "^3") if (id) players[0] = id; else get_players(players, count, "ch")
{
for (new i = 0; i < count; i++)
{
if (is_user_connected(players[i]))
{
message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("SayText"), _, players[i])
write_byte(players[i]);
write_string(msg);
message_end();
}
}
}
}
stock GetNumEntity(const class[])
{
new iEnt, iNum
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#
Pafos » 09 авг 2017, 01:07
dvahitov95,
- Код: Выделить всё
stock UTIL_PlayAnimation( const entity, const sequence, const Float:framerate = 1.0 )
{
entity_set_float(entity, EV_FL_animtime, get_gametime());
entity_set_float(entity, EV_FL_framerate, framerate);
entity_set_float(entity, EV_FL_frame, 0.0);
entity_set_int(entity, EV_INT_sequence, sequence);
}
-
Pafos
-
- Сообщения: 574
- Зарегистрирован: 07 апр 2014, 18:03
- Откуда: pfnClientConnect
- Забанен
- Благодарил (а): 129 раз.
- Поблагодарили: 97 раз.
- Опыт программирования: Больше трех лет
- Языки программирования: Pawn
Вернуться в Вопросы по AMXX и его плагинам
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1