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

"Покоцанная" модель у Entity

Все вопросы по скриптингу для AMXX, помощь в редактировании плагинов.

Модераторы: Subb98, liFe iS GoOD

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

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

Правила при создании новой темы:
1. При вставке кода плагина необходимо использовать тег [code=php].
2. Любые изображения должны быть загружены, как вложения к вашему сообщению.
3. При описании проблемы или запросе на помощь в редактировании плагина обязательно выкладывайте исходник sma плагина.

"Покоцанная" модель у Entity

Сообщение mrglaster » 06 окт 2020, 09:54

Всем доброго времени суток. Пишу плагин для смены команды + меню выбора отдельной модели для VIP игрока. Всё работает, однако после смерти VIP'a с его моделью начинает происходить что-то странное: она начинает выглядеть так, будто её через шредер пропустили (см скриншот).

Часть плагина, отвечающая за вип модели, работает по принципу натягивания совы на глобус: есть прозрачная модель игрока, на её месте всегда находится ентити, на которую уже натягивается нужная модель и соответствующие анимации.

Как можно избавиться от таких артефактов? Заранее спасибо за вашу помощь

У вас нет необходимых прав для просмотра вложений в этом сообщении.
Аватара пользователя
mrglaster
 
Сообщения: 6
Зарегистрирован: 19 фев 2020, 14:48
Благодарил (а): 1 раз.
Поблагодарили: 3 раз.
Опыт программирования: Больше трех лет
Языки программирования: Java, Pawn, Python, C#

Re: "Покоцанная" модель у Entity

Сообщение print.helloworld » 08 окт 2020, 13:35

Я в твоём коде не нашел прикэш моделей :/
Это так и должно быть?
Аватара пользователя
print.helloworld
 
Сообщения: 42
Зарегистрирован: 27 ноя 2018, 23:30
Благодарил (а): 7 раз.
Поблагодарили: 0 раз.
Опыт программирования: Меньше недели
Языки программирования: Мои знания на уровне плацебы

Re: "Покоцанная" модель у Entity

Сообщение mrglaster » 09 окт 2020, 20:40

Ebletos писал(а):Я в твоём коде не нашел прикэш моделей :/
Это так и должно быть?


Всё нормально. Там в plugin_precache прекешируются модели не поодиночке, а циклом. Так хардкодинг не нужен.
Проблему с отображением я уже решил. Но теперь появилась другая: после убийства игрока моя команда меняется на germany (модель остается вип) , а после смерти всё как ни в чем не бывало (пока мы опять кого-нибудь не убьем).

Вот исходник нового плагина
Код: Выделить всё
#include <amxmodx>   
#include <fun>
#include <amxmisc>
#include <fakemeta>          
#include <hamsandwich> 
#include < model_changer >
#include "hl.inc"   
               
#define PLUGIN "Team Menu"
#define VERSION "3.0" 
#define AUTHOR "Glaster"                                                 
new firstviprespawn 0;          
new 
pos=12 ;      
new 
teamid=;            
new 
a_Skins[][] = {      
   
"ZSVM1",                 
   
"ZSVM2",   
   
"ZSVM3",             
   
"ZSVM4",   
   
"ZSVM5",                            
   
"ZSVM6",   
   
"ZSVM7",                
   
"ZSVM8",   
   
"ZSVM9",             
   
"ZSVM10",                       
   
"ZSPVM0",
   
"ZSPVM1",
   
"VIP_CLASSIC",                      
   
"ZSPVM2"          
};  
new 
vipstatus 0
                                               
public 
user_worthless_change(id,team[]){   
 new 
biba[32]
 
get_user_team(id,biba,32)
 if(
equal(team,biba,3)){  
 return 
1
 
}      
 else
 {                             
 return 
0
 
}
}

 public  
isvip(id){ 
 new 
team[32]                       
   
get_user_team(id,team,31)       
   if(
vipstatus==&& is_user_admin(id)){
    return 

   

   else { 
   return 
0
   
}
                   
 }


new const 
g_Skins[][] =
{                                                             
"USSR",                
"GERMANY",
"USA",                                               
"CHINA",
"VIP",
"ALIENS!",                  

};


                              
public 
plugin_precache()
{                                      
for (new 
isizeof(g_Skins); i++)
precache_model(fmt("models/player/%s/%s.mdl"g_Skins[i], g_Skins[i]));   
 new 
arg[100], i;
   for(
0sizeof(a_Skins); i++){             
      
formatex(argcharsmax(arg), "models/player/%s/%s.mdl"a_Skins[i], a_Skins[i]); 
      
precache_model(arg); 
   }
}
      
public 
plugin_init() {      
register_clcmd("say /team""TeamMenu");
register_plugin(PLUGINVERSIONAUTHOR);      
register_clcmd("say /vipmodel""VipModel"ADMIN_IMMUNITY,"Write /vipmodel in chat to change model (for Admins only)");      
register_clcmd("setmodel_Glaster","setmodel_Glaster",ADMIN_IMMUNITY)  
register_clcmd("setmodel_packman","setmodel_packman",ADMIN_IMMUNITY)
register_clcmd("setmodel_lastUnit","setmodel_lastUnit",ADMIN_IMMUNITY)
RegisterHam(Ham_Spawn,"player","player_respawn")
}                                                                                     

public 
player_respawn(id){                                                                                  
 new 
team[32]
 
get_user_team(id,team,31)
 if(
equal(team,"USSR",3)) {  
 
teamid=1;
 
hl_set_user_team(id"USSR")
set_user_model(idg_Skins[0]) 
 }      
   if(
equal(team,"GERMANY",3)) {
   
teamid=2;
   
hl_set_user_team(id"GERMANY")
set_user_model(idg_Skins[1]) 
 }      
  if(
equal(team,"USA",3)) {   
  
teamid=3;
set_user_model(idg_Skins[2]) 
 }                                
  if(
equal(team,"CHINA",3)) {   
  
teamid=4;
  
hl_set_user_team(id"CHINA")
set_user_model(idg_Skins[3]) 
 }        
      if(
equal(team,"ALIENS!",3)) {  
      
teamid=6;
      
hl_set_user_team(id"ALIENS!")
set_user_model(idg_Skins[5])              
 }        
     
if(!
is_user_admin(id)&& equal(team,"VIP",3) ){   
strip_user_weapons(id)
hl_set_user_team(id"USSR")       
set_user_model(idg_Skins[0])   
teamid 1;
client_print(id,print_center,"WE DON'T NEED HARES!!!")   
}
 if(
is_user_admin(id)&& equal(team,"VIP",3))
{                  
teamid=5;
hl_set_user_team(id"VIP")    
set_user_model(ida_Skins[pos])
teamid=5;                    
vipstatus==1;     

}    

if(
teamid==5){ 
hl_set_user_team(id"VIP"
set_user_model(ida_Skins[pos])
teamid=5;              
} else {
   
hl_set_user_team(idg_Skins[teamid-1]) 
set_user_model(idg_Skins[teamid-1])      
}       


}                                                            
public 
TeamMenu(id) {
new 
i_Menu menu_create("\yTEAM MENU""TeamMenu_handler");
menu_additem(i_Menu"GERMANY""1"0);
menu_additem(i_Menu"USSR""2"0);
menu_additem(i_Menu"USA""3"0);
menu_additem(i_Menu"CHINA""4"0);
menu_additem(i_Menu"\yVIP""5"0);     
menu_additem(i_Menu"ALIENS""6"0); //ALIENS
menu_display(idi_Menu0)
}

        
public 
TeamMenu_handler(idmenuitem) {

if( 
item ) return PLUGIN_CONTINUE;
new 
cmd[3], accesscallback;
menu_item_getinfo(menuitemaccesscmd,2,_,_callback);
new 
Choise str_to_num(cmd) ;
switch (
Choise){
case 
1: {        
if(
user_worthless_change(id,"GERMANY")!=1){  
vipstatus 0;
firstviprespawn=0
strip_user_weapons(id)
hl_set_user_team(id"GERMANY"
teamid=2;
set_user_model(idg_Skins[1]) 
 }

}
case 
2: {   
if(
user_worthless_change(id,"USSR")!=1) {    
vipstatus 0;
firstviprespawn=0;      
teamid=1;
strip_user_weapons(id)
hl_set_user_team(id"USSR"
set_user_model(idg_Skins[0]) 
}
}
case 
3: {
if(
user_worthless_change(id,"USA")!=1){
vipstatus 0;
firstviprespawn=0;  
teamid=3;
strip_user_weapons(id
hl_set_user_team(id"USA"
set_user_model(idg_Skins[2])   
  }
}
case 
4: {  
if(
user_worthless_change(id,"CHINA")!=1){   
vipstatus 0;
firstviprespawn=0
strip_user_weapons(id)
teamid=4;
hl_set_user_team(id"CHINA"
set_user_model(idg_Skins[3])   
  }
                                                     
}                              
case 
5: { 
                  
if(
is_user_admin(id)){  
if(
user_worthless_change(id,"VIP")!=1&&is_user_admin(id)){
vipstatus 1;
firstviprespawn=0
strip_user_weapons(id
teamid=5;
hl_set_user_team(id"VIP")  
set_user_model(idg_Skins[4]) 


}
else {              
client_print(idprint_chat"You shold be VIP or Admin to be a part of this team. You can buy it by vk.com/pristavka2013")
}
}                     

case 
6:{   
if(
user_worthless_change(id,"ALIENS!")!=1){  
vipstatus 0;    
firstviprespawn=0;     
teamid=6;
strip_user_weapons(id)  
hl_set_user_team(id"ALIENS!"
set_user_model(idg_Skins[5]) 
}
}              
   
case 
0:{ 
menu_destroy(menu)
}          

}                       
return 
PLUGIN_HANDLED;
}   
public 
setmodel_lastUnit(id){
if(
isvip(id)){                   
vipstatus=1;        
hl_set_user_team(id"VIP")
teamid=5;
set_user_model(ida_Skins[11]) ;
pos=11;
}
}
public 
setmodel_Glaster(id){  
if(
isvip(id)){    
hl_set_user_team(id"VIP")
set_user_model(ida_Skins[10]) ;
teamid=5;
vipstatus=1
pos=10;
}     
}
public 
setmodel_packman(id){   
if (
isvip(id)){
vipstatus=1;     
hl_set_user_team(id"VIP")   
teamid=5;
set_user_model(ida_Skins[13]) ;  
pos=13;
}


//nicaaai iai?
public VipModel(id) {         
   if(
vipstatus==1){  
      new 
menu menu_create("\yVIP \ymodels""vipmodel_handler");
      
menu_additem(menu"Classic"""0);  
      
menu_additem(menu"Aquafresh"""1); 
      
menu_additem(menu"Barneyrina"""2); 
      
menu_additem(menu"Bert"""3);   
      
menu_additem(menu"Sponge"""4); 
      
menu_additem(menu"Snlckers"""5);  
      
menu_additem(menu"Bunny"""6); 
      
menu_additem(menu"Creature"""7); 
      
menu_additem(menu"Sanic"""8); 
      
menu_additem(menu"Worm"""9); 
      
menu_additem(menu"Orb"""10); 
      
menu_setprop(menuMPROP_EXITMEXIT_ALL);
      
menu_display(idmenu0);
      return 
PLUGIN_HANDLED;
   }                           
   else { 
        
      
client_print(id,print_center,"Join VIP team firsts");  
      return 
PLUGIN_HANDLED;
   }
   return 
PLUGIN_HANDLED;
}                            

public 
vipmodel_handler(idmenuitem){                     
   
pos item;
   if(
pos == MENU_EXIT){                                  
      
menu_cancel(id);     
      return 
PLUGIN_HANDLED;
   }              
   new 
command[6], name[64], accesscallback;        
   
menu_item_getinfo(menuposaccesscommandsizeof command 1namesizeof name 1callback);
            
   switch(
pos){  
      case 
0:set_user_model(ida_Skins[12]) 
      case 
1:set_user_model(ida_Skins[0]) 
      case 
2:set_user_model(ida_Skins[1]) 
      case 
3:set_user_model(ida_Skins[2]) 
      case 
4:set_user_model(ida_Skins[3]) 
      case 
5:set_user_model(ida_Skins[4]) 
      case 
6:set_user_model(ida_Skins[5]) 
      case 
7:set_user_model(ida_Skins[6]) 
      case 
8:set_user_model(ida_Skins[7])
      case 
9:set_user_model(ida_Skins[8])
      case 
10:set_user_model(id,a_Skins[9])
   }                       
   return 
PLUGIN_HANDLED
}        

      

 
Аватара пользователя
mrglaster
 
Сообщения: 6
Зарегистрирован: 19 фев 2020, 14:48
Благодарил (а): 1 раз.
Поблагодарили: 3 раз.
Опыт программирования: Больше трех лет
Языки программирования: Java, Pawn, Python, C#


Вернуться в Скриптинг

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

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