Все вопросы по скриптингу для AMXX, помощь в редактировании плагинов.
Модераторы: Subb98, liFe iS GoOD
Правила форума
1. Запрещено материться и оскорблять других участников форума.
2. Запрещен флуд, оффтоп, дабл постинг во всех разделах форума, кроме раздела "Болтовня".
3. Запрещено взламывать сайт/форум или наносить любой вред проекту.
4. Запрещено рекламировать другие ресурсы.
5. Запрещено создавать темы без информативного названия. Название темы должно отображать ее смысл.
В данном разделе форума разрешено создавать темы, касающие только скриптинга для AMX Mod X.
Правила при создании новой темы:
1. При вставке кода плагина необходимо использовать тег [code=php].
2. Любые изображения должны быть загружены, как вложения к вашему сообщению.
3. При описании проблемы или запросе на помощь в редактировании плагина обязательно выкладывайте исходник sma плагина.
selya-zek » 03 дек 2016, 16:28
Со3дал новый плент, но 3нак каждый ра3 исче3ает примерно чере3 10-15 секунд как исправить, чтоб пока3ывало всегда. По-моему это обычный спрайт логотип. И время пока3а плента такое же как у спрайта логотипа. Тогда как увеличить время пока3а логотипа, или же все же дело в плагине.
- Код: Выделить всё
new szDecalName[]="{target";
new Array:g_BS;
new Array:g_BSmaxs;
new Array:g_BSmins;
new Array:g_BSorigin;
new Array:g_BSDecalorigin;
new g_iDecal;
new g_spriteLine;
new g_szCfgFile[128];
new g_szConfig[128];
new gSelectedEnt[33];
new gSelectedOption[33];
new gSelectedOffset[33];
new bool:gSetDecal=true;
new g_BSLog=0;
new bool:g_BSMenu=false;
public plugin_init() {
register_plugin(PLUGIN, VERSION, AUTHOR);
register_dictionary("common.txt");
register_dictionary("bs_creator.txt");
if(g_BSMenu){
register_clcmd("bs_menu","cmd_bs_menu", ADMIN_CVAR, "BombSite Menu");
register_concmd("bs_default", "cmd_bs_default",ADMIN_CVAR, "Restore default BS");
server_cmd("amx_addmenuitem ^"Создать БомбПлейс^" ^"bs_menu^" ^"hu^" ^"bs_creator.amxx^"");
}
register_menucmd(register_menuid("EditBS"), KeysEditBS, "PressedEditBS")
register_menucmd(register_menuid("BSMenu"), ALL_KEYS, "PressedBSMenu");
register_event("HLTV", "eventInitRound", "a", "1=0", "2=0");
register_event("ResetHUD","eventResetHUD","be");
}
public plugin_precache(){
g_iDecal = get_decal_index (szDecalName);
g_spriteLine=precache_model("sprites/dot.spr");
bomb_cfg();
}
public bomb_cfg(){
get_configsdir(g_szCfgFile, 75);
formatex(g_szConfig, 127, "%s/bs_creator/bsconfig", g_szCfgFile);
if(file_exists(g_szConfig)){
new szLine[64], iLen;
new szFlags[10];
for(new i=0;read_file(g_szConfig,i,szLine, 64,iLen);i++){
trim(szLine);
if(szLine[0]==';') continue;
replace_all(szLine, 64, " ", "");
new i=containi(szLine, "LOGS=");
if(i>=0){
copy(szFlags, 9, szLine[i+5]);
setFlags(szFlags);
continue;
}
i=containi(szLine, "MENU=");
if(i>=0){
copy(szFlags, 9, szLine[i+5]);
g_BSMenu=(str_to_num(szFlags)==1);
continue;
}
}
}
else{
g_BSMenu=true;
g_BSLog=LOG_SAVE|LOG_EDIT|LOG_ADD|LOG_RESTORE;
}
new szMapName[32];
get_mapname(szMapName, 31);
format(g_szCfgFile, 127, "%s/bs_creator/%s.ini", g_szCfgFile, szMapName);
g_BS = ArrayCreate(1, 2);
g_BSmaxs = ArrayCreate(3, 2);
g_BSmins = ArrayCreate(3, 2);
g_BSorigin = ArrayCreate(3, 2);
g_BSDecalorigin = ArrayCreate(3, 2);
if(file_exists(g_szCfgFile)){
remove_entities_by_class(ENTITY_CLASS);
LoadFromFile();
}
else{
set_task(1.0, "task_Look4BS", TASK_LOOK);
}
}
setFlags(szFlags[10]){
new iLen=strlen(szFlags);
for(new i=0;i<iLen;i++){
if(szFlags[i]>='a' && szFlags[i]<='z')
g_BSLog|=(1<<(szFlags[i]-'a'));
}
}
public task_Look4BS(){
new ent = -1;
new Float:fMax[3], Float:fMin[3], Float:fOrigin[3];
new Float:fMinS[3], Float:fMaxS[3];
do{
ent = find_ent_by_class ( ent, ENTITY_CLASS);
if(is_valid_ent ( ent )){
entity_get_vector(ent, EV_VEC_absmin, fMin);
entity_get_vector(ent, EV_VEC_absmax, fMax);
get_brush_entity_origin(ent, fOrigin);
engine_get_size(fMax, fOrigin, fMinS, fMaxS);
register_bombsite(ent, fMinS, fMaxS, fOrigin);
}
}
while(ent);
}
stock engine_get_size(const Float:fMax[3], Float:fOrigin[3], Float:fMinS[3], Float:fMaxS[3]){
for(new i=0;i<3;i++){
fMaxS[i]=fMax[i]-fOrigin[i];
fMinS[i]=fOrigin[i]-fMax[i];
}
}
stock remove_entities_by_class(const szClassName[]){
new ent=-1;
do{
ent=find_ent_by_class ( ent, szClassName);
if(is_valid_ent ( ent ))
remove_entity( ent );
}
while(ent);
}
CreateBS(Float:fMin[3], Float:fMax[3], Float:fOrigin[3]){
new bombtarget = create_entity(ENTITY_CLASS);
if(bombtarget > 0)
{
DispatchKeyValue(bombtarget, "classname", ENTITY_CLASS);
DispatchSpawn(bombtarget);
entity_set_string(bombtarget, EV_SZ_classname, ENTITY_CLASS);
entity_set_origin(bombtarget, fOrigin);
entity_set_size(bombtarget, fMin, fMax);
entity_set_edict(bombtarget, EV_ENT_owner, 0);
entity_set_int(bombtarget, EV_INT_movetype, 0);
entity_set_int(bombtarget, EV_INT_solid, SOLID_TRIGGER);
entity_set_float(bombtarget,EV_FL_nextthink, halflife_time() + 0.01);
set_task(5.0 ,"BS_set_decal", TASK_SET_DECALS+bombtarget);
}
return bombtarget;
}
public BS_set_decal(ent){
ent-=TASK_SET_DECALS;
new Float:fOrigin[3];
entity_get_vector(ent, EV_VEC_origin, fOrigin);
new temp=create_entity("info_target");
entity_set_origin(temp, fOrigin);
entity_set_size(temp, Float:{0.0, 0.0, 0.0}, Float:{1.0, 1.0, 1.0});
drop_to_floor(temp);
entity_get_vector(temp, EV_VEC_origin, fOrigin);
remove_entity(temp);
for(new i=0;i<ArraySize(g_BS);i++){
if(ArrayGetCell(g_BS, i)==ent){
ArraySetArray(g_BSDecalorigin, i, fOrigin);
}
}
}
BSSetSize(id){
new BS=gSelectedOption[id]-1;
if(gSelectedEnt[id]){
new Float:fMins[3], Float:fMaxs[3], Float:fOrigin[3];
ArrayGetArray(g_BSmins, BS, fMins);
ArrayGetArray(g_BSmaxs, BS, fMaxs);
ArrayGetArray(g_BSorigin, BS, fOrigin);
entity_set_size(gSelectedEnt[id], fMins, fMaxs);
entity_set_vector(gSelectedEnt[id], EV_VEC_origin, fOrigin);
}
}
register_bombsite(ent, Float:fMin[3], Float:fMax[3], Float:fOrigin[3]){
ArrayPushCell(g_BS, ent);
ArrayPushArray(g_BSmins, fMin);
ArrayPushArray(g_BSmaxs, fMax);
ArrayPushArray(g_BSorigin, fOrigin);
ArrayPushArray(g_BSDecalorigin, Float:{0.0, 0.0, 0.0});
}
bool:is_too_small(Float:fMin[3], Float:fMax[3]){
new Float:fSize[3];
for(new i=0; i<3;i++)
fSize[i]=fMax[i]-fMin[i];
return bool:(fSize[0] < MIN_SIZE || fSize[1] < MIN_SIZE || fSize[2] < MIN_SIZE );
}
public eventInitRound(){
gSetDecal=true;
set_task(0.1, "setDecals");
}
public eventResetHUD(id){
if(!task_exists(TASK_UP_DECALS))
set_task(3.0, "setDecals",TASK_UP_DECALS);
}
needRestart(id){
new szMsg[64];
formatex(szMsg, 63, "* [BS Creator] %L", id, "NEED_RESTART");
client_print(id, print_console, "%s",szMsg);
client_print(id, print_chat, "%s",szMsg);
}
public cmd_bs_default(id, level, cid){
if(!cmd_access(id, level, cid, 1))
return PLUGIN_HANDLED;
delete_file(g_szCfgFile);
needRestart(id);
log(id, LOG_RESTORE);
return PLUGIN_HANDLED;
}
public cmd_bs_menu(id, level, cid){
if(!cmd_access(id, level, cid, 1))
return PLUGIN_HANDLED;
new KeysBSMenu=(1<<7)|(1<<8)|(1<<9);
new szBSMenu[188];
copy(szBSMenu, 187, "\yBombSite Menu^n");
new iCount=ArraySize(g_BS);
new iStart=gSelectedOffset[id], iStop=gSelectedOffset[id]+BS_PER_PAGE ;
if(iStop > iCount)
iStop=iCount;
new iOff;
for(new i=iStart;i<iStop;i++){
iOff=i-gSelectedOffset[id];
format(szBSMenu, 187, "%s^n\w%d. BS#%d", szBSMenu, iOff+1, i+1);
KeysBSMenu|=(1<<iOff);
}
new bool:added=false;
if(iStart>0){
KeysBSMenu|=(1<<5);
format(szBSMenu, 187, "%s%s^n\w6. %L", szBSMenu,(added)?"":SPACER, id, "BACK");
added=true;
}
if(iStop < iCount){
KeysBSMenu|=(1<<6);
format(szBSMenu, 187, "%s%s^n\w7. %L", szBSMenu,(added)?"":SPACER, id, "MORE");
}
format(szBSMenu, 187, "%s^n^n\w8. %L BombSite", szBSMenu, id ,"WORD_ADD");
format(szBSMenu, 187, "%s^n\r9. \w%L",szBSMenu,id,"BS_SAVE");
format(szBSMenu, 187, "%s^n^n\w0. %L",szBSMenu, id, "EXIT");
show_menu(id, KeysBSMenu, szBSMenu, -1, "BSMenu") return PLUGIN_HANDLED;
}
public PressedBSMenu(id, key) {
switch (key) {
case 5:{
gSelectedOffset[id]-=BS_PER_PAGE;
client_cmd(id, "bs_menu");
return;
}
case 6:{
gSelectedOffset[id]+=BS_PER_PAGE;
client_cmd(id, "bs_menu");
return;
}
case 7: { new Float:fMin[3]={-MIN_SIZE, -MIN_SIZE, -MIN_SIZE};
new Float:fMax[3]={MIN_SIZE, MIN_SIZE, MIN_SIZE};
new Float:fOrigin[3];
entity_get_vector(id, EV_VEC_origin, fOrigin);
new ent=CreateBS(fMin, fMax, fOrigin);
register_bombsite(ent, fMin, fMax, fOrigin);
gSelectedEnt[id]=ent;
gSelectedOption[id]=ArraySize(g_BS);
log(id, LOG_ADD);
ShowEditBS(id);
return;
}
case 8: { SaveToFile(id);
gSelectedOffset[id]=0;
needRestart(id);
log(id, LOG_SAVE);
return;
}
case 9: { gSelectedEnt[id]=0;
gSelectedOption[id]=0;
gSelectedOffset[id]=0;
needRestart(id);
return;
}
}
key+=gSelectedOffset[id];
if(key >= ArraySize(g_BS))
return;
new ent=ArrayGetCell(g_BS, key);
gSelectedEnt[id]=ent;
gSelectedOption[id]=key+1;
ShowEditBS(id);
}
public ShowEditBS(id){
if(gSelectedOption[id]==0)
return;
new BS=gSelectedOption[id];
new szMenu[256];
new szAxis[10],szMore[10], szLess[10];
formatex(szAxis, 9 ,"%L",id ,"WORD_AXIS");
formatex(szMore, 9 ,"%L",id ,"WORD_MORE");
formatex(szLess, 9 ,"%L",id ,"WORD_LESS");
formatex(szMenu, 255, "\yBombSite#%d Edit^n^n\r%L (%s X)^n", BS, id, "WORD_WIDTH", szAxis);
format(szMenu, 255,"%s\w1. %s 2. %s^n^n\r",szMenu, szMore, szLess);
format(szMenu, 255,"%s%L (%s Y)^n\w3. %s 4. %s^n^n",szMenu,id,"WORD_LENGTH", szAxis, szMore, szLess);
format(szMenu, 255,"%s\r%L (%s Z)^n\w5. %s 6. %s^n^n",szMenu,id,"WORD_HEIGHT", szAxis, szMore, szLess);
format(szMenu, 255,"%s\y8. %L BS^n^n\w9. %L^n0. %L^n",szMenu, id, "WORD_DELETE", id, "WORD_RETURN", id, "EXIT");
show_menu(id, KeysEditBS, szMenu, -1, "EditBS") }
public PressedEditBS(id, key) {
new BS=gSelectedOption[id]-1;
new Float:fMins[3], Float:fMaxs[3], Float:fOrigin[3];
ArrayGetArray(g_BSmins, BS, fMins);
ArrayGetArray(g_BSmaxs, BS, fMaxs);
ArrayGetArray(g_BSorigin, BS, fOrigin);
switch (key) {
case 0: { fMins[0]-=INTERVAL;
fMaxs[0]+=INTERVAL;
}
case 1: { fMins[0]+=INTERVAL;
fMaxs[0]-=INTERVAL;
}
case 2: { fMins[1]-=INTERVAL;
fMaxs[1]+=INTERVAL;
}
case 3: { fMins[1]+=INTERVAL;
fMaxs[1]-=INTERVAL;
}
case 4: { fMaxs[2]+=INTERVAL;
fMins[2]-=INTERVAL;
fOrigin[2]+=INTERVAL;
}
case 5: { fMaxs[2]-=INTERVAL;
fMins[2]+=INTERVAL;
fOrigin[2]-=INTERVAL;
}
case 7: { new BS=gSelectedOption[id]-1;
gSelectedOption[id]=0;
gSelectedEnt[id]=0;
gSelectedOffset[id]=0;
ArrayDeleteItem(g_BS, BS);
ArrayDeleteItem(g_BSmaxs, BS);
ArrayDeleteItem(g_BSmins, BS);
ArrayDeleteItem(g_BSorigin, BS);
log(id, LOG_DELETE);
client_cmd(id, "bs_menu");
return;
}
case 8: { gSelectedOption[id]=0;
gSelectedEnt[id]=0;
client_cmd(id, "bs_menu");
log(id, LOG_EDIT);
return;
}
case 9: { gSelectedEnt[id]=0;
gSelectedOption[id]=0;
gSelectedOffset[id]=0;
return;
}
}
if(!is_too_small(fMins, fMaxs)){
ArraySetArray(g_BSmins, BS, fMins);
ArraySetArray(g_BSmaxs, BS, fMaxs);
ArraySetArray(g_BSorigin, BS, fOrigin);
BSSetSize(id);
}
ShowEditBS(id);
}
SaveToFile(id){
if(file_exists(g_szCfgFile))
delete_file(g_szCfgFile);
new iVector[3];
new szLine[128];
if(ArraySize(g_BS)==0){
new fp=fopen(g_szCfgFile, "w");
fclose(fp);
}
else
for(new i=0;i<ArraySize(g_BS);i++){
ArrayGetArray(g_BSmins, i, iVector);
formatex(szLine, 63, "%.0f %.0f %.0f", iVector[0],iVector[1],iVector[2]);
ArrayGetArray(g_BSmaxs, i, iVector);
format(szLine, 127, "%s %.0f %.0f %.0f", szLine, iVector[0],iVector[1],iVector[2]);
ArrayGetArray(g_BSorigin, i, iVector);
format(szLine, 127, "%s %.0f %.0f %.0f", szLine, iVector[0],iVector[1],iVector[2]);
write_file(g_szCfgFile, szLine);
}
client_print(id, print_center, "%L",id,"BS_SAVED");
}
LoadFromFile(){
new szLine[64], iLen;
new szMin[3][10], szMax[3][10], szOrigin[3][10];
new Float:fMin[3], Float:fMax[3], Float:fOrigin[3];
for(new i=0;read_file(g_szCfgFile,i,szLine, 64,iLen);i++){
trim(szLine);
if(szLine[0]==';') continue;
parse(szLine, szMin[0], 9,szMin[1], 9, szMin[2], 9, szMax[0], 9, szMax[1], 9, szMax[2], 9, szOrigin[0], 9,szOrigin[1], 9, szOrigin[2], 9);
for(new j=0;j<3;j++){
fMin[j]=str_to_float(szMin[j]);
fMax[j]=str_to_float(szMax[j]);
fOrigin[j]=str_to_float(szOrigin[j]);
}
new ent=CreateBS(fMin, fMax, fOrigin);
if(ent!=-1){
register_bombsite(ent, fMin, fMax, fOrigin);
}
}
}
public client_PreThink(id){
if(gSelectedEnt[id])
Create_Box(id, gSelectedEnt[id]);
}
public Create_Box(id, ent){
if( !is_user_connected(id) || !is_valid_ent(ent)) return;
new Float:fMins[3], Float:fMaxs[3];
entity_get_vector(ent, EV_VEC_absmin,fMins);
entity_get_vector(ent, EV_VEC_absmax,fMaxs);
new iMins[3], iMaxs[3];
for(new i=0;i<3;i++){
iMins[i]=floatround(fMins[i]);
iMaxs[i]=floatround(fMaxs[i]);
}
DrawLine(id,iMaxs[0], iMaxs[1], iMaxs[2], iMins[0], iMaxs[1], iMaxs[2]);
DrawLine(id,iMaxs[0], iMaxs[1], iMaxs[2], iMaxs[0], iMins[1], iMaxs[2]);
DrawLine(id,iMaxs[0], iMaxs[1], iMaxs[2], iMaxs[0], iMaxs[1], iMins[2]);
DrawLine(id,iMins[0], iMins[1], iMins[2], iMaxs[0], iMins[1], iMins[2]);
DrawLine(id,iMins[0], iMins[1], iMins[2], iMins[0], iMaxs[1], iMins[2]);
DrawLine(id,iMins[0], iMins[1], iMins[2], iMins[0], iMins[1], iMaxs[2]);
DrawLine(id,iMins[0], iMaxs[1], iMaxs[2], iMins[0], iMaxs[1], iMins[2]);
DrawLine(id,iMins[0], iMaxs[1], iMins[2], iMaxs[0], iMaxs[1], iMins[2]);
DrawLine(id,iMaxs[0], iMaxs[1], iMins[2], iMaxs[0], iMins[1], iMins[2]);
DrawLine(id,iMaxs[0], iMins[1], iMins[2], iMaxs[0], iMins[1], iMaxs[2]);
DrawLine(id,iMaxs[0], iMins[1], iMaxs[2], iMins[0], iMins[1], iMaxs[2]);
DrawLine(id,iMins[0], iMins[1], iMaxs[2], iMins[0], iMaxs[1], iMaxs[2]);
}
public DrawLine(id,x1, y1, z1, x2, y2, z2)
{
new start[3];
new stop[3];
start[0]=(x1);
start[1]=(y1);
start[2]=(z1);
stop[0]=(x2);
stop[1]=(y2);
stop[2]=(z2);
Create_Line(id,start, stop);
}
public Create_Line(id,start[],stop[]){
message_begin(MSG_ONE_UNRELIABLE,SVC_TEMPENTITY,{0,0,0},id);
write_byte(0);
write_coord(start[0]);
write_coord(start[1]);
write_coord(start[2]);
write_coord(stop[0]);
write_coord(stop[1]);
write_coord(stop[2]);
write_short(g_spriteLine);
write_byte(1);
write_byte(5);
write_byte(1); write_byte(3);
write_byte(0);
write_byte(255); write_byte(0); write_byte(0); write_byte(250); write_byte(5);
message_end();
}
DrawDecal( Float:fOrigin[3], tid ){
message_begin( MSG_BROADCAST, SVC_TEMPENTITY );
write_byte( tid <= 256 ? TE_WORLDDECAL : TE_WORLDDECALHIGH );
write_coord( floatround( fOrigin[0]) );
write_coord( floatround( fOrigin[1]) );
write_coord( floatround( fOrigin[2]) );
write_byte( tid <= 256 ? tid : tid - 256 );
message_end();
}
public setDecals(){
if(!gSetDecal) return;
new Float:fOrigin[3];
for(new i=0; i<ArraySize(g_BSDecalorigin); i++){
ArrayGetArray(g_BSDecalorigin,i,fOrigin);
if(fOrigin[0]!=0.0 && fOrigin[1]!=0.0 && fOrigin[2]!=0.0){
DrawDecal(fOrigin, g_iDecal);
}
}
gSetDecal=false;
}
log(id, LOG_FLAG){
if((g_BSLog&LOG_FLAG)==0) return;
new szName[33];
get_user_name(id, szName, 32);
switch(LOG_FLAG){
case LOG_SAVE:{
log_amx("Admin %s saved map BombSites to file", szName);
}
case LOG_EDIT:{
log_amx("Admin %s edited map BombSite", szName);
}
case LOG_ADD:{
log_amx("Admin %s added map BombSite", szName);
}
case LOG_DELETE:{
log_amx("Admin %s deleted map BombSite", szName);
}
case LOG_RESTORE:{
log_amx("Admin %s restored original map BombSites", szName);
}
}
}
У вас нет необходимых прав для просмотра вложений в этом сообщении.
-
selya-zek
-
- Сообщения: 22
- Зарегистрирован: 13 дек 2010, 14:22
- Благодарил (а): 5 раз.
- Поблагодарили: 1 раз.
- Опыт программирования: Около 6 месяцев
- Языки программирования: Counter-Strike 1.6
Counter-Strike: Source
Team Fortress II
Left 4 Dead
Вернуться в Скриптинг
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 18