SA-MP Forums Archive
CreateDynamicObject - Printable Version

+- SA-MP Forums Archive (https://sampforum.blast.hk)
+-- Forum: Non-English (https://sampforum.blast.hk/forumdisplay.php?fid=9)
+--- Forum: Languages (https://sampforum.blast.hk/forumdisplay.php?fid=33)
+---- Forum: Русский/Russian (https://sampforum.blast.hk/forumdisplay.php?fid=32)
+---- Thread: CreateDynamicObject (/showthread.php?tid=637328)

Pages: 1 2


CreateDynamicObject - Johhnyllll - 12.07.2017

Здравствуйте.
При использовании стримерских объектов или чекпоинтов не создаются пока игрок не начнет двигаться.
Пример:
http://i.imgur.com/PnZJFTM.png
http://i.imgur.com/3pzbLAL.png

Каким способом можно решить данную проблему?
Проверял на new.pwn и на основном моде, везде один и тот же эффект.


Re: CreateDynamicObject - joker2020pro - 12.07.2017

Можно попробовать использовать Streamer_Update для принудительного обновления стрима.


Re: CreateDynamicObject - Johhnyllll - 12.07.2017

Попробовал так:
PHP Code:
Streamer_Update(playerid,-1); 
Но не помогло...

//update
Компилировал не тот файл с скриптом. Всё работает.


Re: CreateDynamicObject - Salik - 13.07.2017

Лучше всего использовать ф-ю -
PHP Code:
Streamer_ToggleIdleUpdate(playeridtrue); 
//А после всего выключаем false
Данная функция так-и предназначена для таких вот проблем.


Re: CreateDynamicObject - Johhnyllll - 13.07.2017

Еще один вопрос.
Почему не работает бесконечные движение объектов?

Для основы использую этот FS, только я уже всё переделал с поддержкой Streamer-a.
https://sampforum.blast.hk/showthread.php?tid=635892

Проблема вот в чём, цели двигаются с лева на право, если при движений в лева выстрелить к примеру в targ1[0], остальные части этого массива там-же и останутся. Если снова выстрелить по какой нибудь части из этого массива к примеру в targ[3], всё нормализуется.
PHP Code:
//foreach
//streamer
//sscanf
//командный процессор 
new targ1[7];
new 
targ2[7];
new 
targ3[7];
new 
Float:speed[3];
new    
speedxs 2;
new 
LoopStatus[3] = 0;
new 
target_count 0;
public 
OnGameModeInit()
{
    print(
"\n--------------------------------------");
    print(
" Targets system - Loaded");
    print(
"--------------------------------------");
    
Create_Target();
    return 
1;
}
stock Create_Target(){
    
targ1[0] = CreateDynamicObject(3024292.87509, -138.103001007.14838,   0.000000.0000090.00000);
    
targ1[1] = CreateDynamicObject(3023292.87289, -138.121801007.15472,   0.000000.0000090.00000);
    
targ1[2] = CreateDynamicObject(3022292.87561, -138.094501007.15472,   0.000000.0000090.00000);
    
targ1[3] = CreateDynamicObject(3021292.87598, -138.112371007.14551,   0.000000.0000090.00000);
    
targ1[4] = CreateDynamicObject(3020292.87411, -138.127501007.16388,   0.000000.0000090.00000);
    
targ1[5] = CreateDynamicObject(3019292.87280, -138.125111007.16541,   0.000000.0000090.00000);
    
targ1[6] = CreateDynamicObject(3018292.87280, -138.101901007.16541,   0.000000.0000090.00000);
    
targ2[0] = CreateDynamicObject(3019285.00000, -130.883101007.16541,   0.000000.0000090.00000);
    
targ2[1] = CreateDynamicObject(3020285.00000, -130.885501007.16388,   0.000000.0000090.00000);
    
targ2[2] = CreateDynamicObject(3021285.00000, -130.870411007.14551,   0.000000.0000089.76000);
    
targ2[3] = CreateDynamicObject(3018285.00000, -130.859891007.16541,   0.000000.0000090.00000);
    
targ2[4] = CreateDynamicObject(3023285.10001, -130.879811007.15472,   0.000000.0000090.00000);
    
targ2[5] = CreateDynamicObject(3024285.00000, -130.860991007.14838,   0.000000.0000090.00000);
    
targ2[6] = CreateDynamicObject(3022285.10001, -130.852491007.15472,   0.000000.0000090.00000);
     
targ3[0] = CreateDynamicObject(3024288.00000, -138.103001007.14838,   0.000000.0000090.00000);
    
targ3[1] = CreateDynamicObject(3023288.00000, -138.121801007.15472,   0.000000.0000090.00000);
    
targ3[2] = CreateDynamicObject(3022288.00000, -138.094501007.15472,   0.000000.0000090.00000);
    
targ3[3] = CreateDynamicObject(3021288.00000, -138.112401007.14551,   0.000000.0000089.76000);
    
targ3[4] = CreateDynamicObject(3020288.00000, -138.127501007.16388,   0.000000.0000090.00000);
    
targ3[5] = CreateDynamicObject(3019288.00000, -138.125111007.16541,   0.000000.0000090.00000);
    
targ3[6] = CreateDynamicObject(3018288.00000, -138.101901007.16541,   0.000000.0000090.00000);
    
MoveDynamicObject(targ1[0], 292.87509, -130.860991007.14838speedxs0.000000.0000090.00000);
    
MoveDynamicObject(targ1[1], 292.87289, -130.879811007.15472speedxs0.000000.0000090.00000);
    
MoveDynamicObject(targ1[2], 292.87561, -130.852491007.15472speedxs0.000000.0000090.00000);
    
MoveDynamicObject(targ1[3], 292.87601, -130.870411007.14551speedxs0.000000.0000090.00000);
    
MoveDynamicObject(targ1[4], 292.87411, -130.885501007.16388speedxs0.000000.0000090.00000);
    
MoveDynamicObject(targ1[5], 292.87280, -130.883101007.16541speedxs0.000000.0000090.00000);
    
MoveDynamicObject(targ1[6], 292.87280, -130.859891007.16541speedxs0.000000.0000090.00000);
    
LoopStatus[0] = 1;
    
speed[0] = speedxs;
     
MoveDynamicObject(targ2[0], 285.00000, -138.125111007.16541speedxs0.000000.0000090.00000);
     
MoveDynamicObject(targ2[1], 285.00000, -138.127501007.16388speedxs0.000000.0000090.00000);
     
MoveDynamicObject(targ2[2], 285.00000, -138.112401007.14551speedxs0.000000.0000090.00000);
      
MoveDynamicObject(targ2[3], 285.00000, -138.101901007.16541speedxs0.000000.0000090.00000);
       
MoveDynamicObject(targ2[4], 285.00000, -138.121801007.15472speedxs0.000000.0000090.00000);
       
MoveDynamicObject(targ2[5], 285.00000, -138.103001007.14838speedxs0.000000.0000090.00000);
       
MoveDynamicObject(targ2[6], 285.00000, -138.094501007.15472speedxs0.000000.0000090.00000);
    
LoopStatus[1] = 1;
    
speed[1] = speedxs;
    
MoveDynamicObject(targ3[0], 288.00000, -130.860991007.14838speedxs0.000000.0000090.00000);
      
MoveDynamicObject(targ3[1], 288.00000, -130.894301007.15472speedxs0.000000.0000090.00000);
      
MoveDynamicObject(targ3[2], 288.00000, -130.852491007.15472speedxs0.000000.0000090.00000);
      
MoveDynamicObject(targ3[3], 288.00000, -130.870411007.14551speedxs0.000000.0000090.00000);
      
MoveDynamicObject(targ3[4], 288.00000, -130.885501007.16388speedxs0.000000.0000090.00000);
      
MoveDynamicObject(targ3[5], 288.00000, -130.883101007.16541speedxs0.000000.0000090.00000);
      
MoveDynamicObject(targ3[6], 288.00000, -130.859891007.165412speedxs0.000000.0000090.00000);
       
LoopStatus[2] = 1;
       
speed[2] = speedxs;
}
public 
OnPlayerShootDynamicObject(playeridweaponidobjectidFloat:xFloat:yFloat:z)
{
    for(new 
i;i<sizeof(targ1);i++){
        if(
objectid == targ1[i])
            
DestroyDynamicObject(targ1[i]), targ1[i] = 0,target_count++;
    }
    for(new 
i;i<sizeof(targ2);i++){
        if(
objectid == targ2[i])
            
DestroyDynamicObject(targ2[i]), targ2[i] = 0,target_count++;
    }
    for(new 
i;i<sizeof(targ3);i++){
        if(
objectid == targ3[i])
            
DestroyDynamicObject(targ3[i]), targ3[i] = 0,target_count++;
    }
    if(
target_count == 21){
        
Create_Target();
        
target_count 0;
        foreach(new 
Player){
            if(
IsPlayerInRangeOfPoint(i30.0288.00000, -130.859891007.165412) && GetPlayerInterior(playerid) == 7)
                
Streamer_Update(i,-1);
        }
    }
    return 
1;
}
public 
OnDynamicObjectMoved(objectid)
{
    if(
objectid == targ1[0] || objectid == targ1[1] || objectid == targ1[2] || objectid == targ1[3] || objectid == targ1[4] || objectid == targ1[5] || objectid == targ1[6]){
        switch(
LoopStatus[0]){
            case 
0:{
                
MoveDynamicObject(targ1[0], 292.87509, -130.860991007.14838speed[0], 0.000000.0000090.00000);
                
MoveDynamicObject(targ1[1], 292.87289, -130.879811007.15472speed[0], 0.000000.0000090.00000);
                    
MoveDynamicObject(targ1[2], 292.87561, -130.852491007.15472speed[0], 0.000000.0000090.00000);
                
MoveDynamicObject(targ1[3], 292.87601, -130.870411007.14551speed[0], 0.000000.0000090.00000);
                
MoveDynamicObject(targ1[4], 292.87411, -130.885501007.16388speed[0], 0.000000.0000090.00000);
                
MoveDynamicObject(targ1[5], 292.87280, -130.883101007.16541speed[0], 0.000000.0000090.00000);
                
MoveDynamicObject(targ1[6], 292.87280, -130.859891007.16541speed[0], 0.000000.0000090.00000);
                
LoopStatus[0] = 1;
            }
            case 
1:{
                
MoveDynamicObject(targ1[0], 292.87509, -138.103001007.14838speed[0], 0.000000.0000090.00000);
                
MoveDynamicObject(targ1[1], 292.87289, -138.121801007.15472speed[0], 0.000000.0000090.00000);
                
MoveDynamicObject(targ1[2], 292.87561, -138.094501007.15472speed[0], 0.000000.0000090.00000);
                
MoveDynamicObject(targ1[3], 292.87598, -138.112371007.14551speed[0], 0.000000.0000090.00000);
                
MoveDynamicObject(targ1[4], 292.87411, -138.127501007.16388speed[0], 0.000000.0000090.00000);
                
MoveDynamicObject(targ1[5], 292.87280, -138.125111007.16541speed[0], 0.000000.0000090.00000);
                
MoveDynamicObject(targ1[6], 292.87280, -138.101901007.16541speed[0], 0.000000.0000090.00000);
                
LoopStatus[0] = 0;
            }
        }
       }
    if(
objectid == targ2[0] || objectid == targ2[1] || objectid == targ2[2] || objectid == targ2[3] || objectid == targ2[4] || objectid == targ2[5] || objectid == targ2[6]){
        switch(
LoopStatus[1]){
            case 
0:{
                
MoveDynamicObject(targ2[0], 285.00000, -130.883101007.16541speed[1], 0.000000.0000090.00000);
                
MoveDynamicObject(targ2[1], 285.00000, -130.885501007.16388speed[1], 0.000000.0000090.00000);
                
MoveDynamicObject(targ2[2], 285.00000, -130.870411007.14551speed[1], 0.000000.0000090.00000);
                
MoveDynamicObject(targ2[3], 285.00000, -130.859891007.16541speed[1], 0.000000.0000090.00000);
                
MoveDynamicObject(targ2[4], 285.10001, -130.879811007.15472speed[1], 0.000000.0000090.00000);
                
MoveDynamicObject(targ2[5], 285.00000, -130.860991007.14838speed[1], 0.000000.0000090.00000);
                
MoveDynamicObject(targ2[6], 285.10001, -130.852491007.15472speed[1], 0.000000.0000090.00000);
                
LoopStatus[1] = 1;
            }
            case 
1:{
                
MoveDynamicObject(targ2[0], 285.00000, -138.125111007.16541speed[1], 0.000000.0000090.00000);
                
MoveDynamicObject(targ2[1], 285.00000, -138.127501007.16388speed[1], 0.000000.0000090.00000);
                
MoveDynamicObject(targ2[2], 285.00000, -138.112401007.14551speed[1], 0.000000.0000090.00000);
                
MoveDynamicObject(targ2[3], 285.00000, -138.101901007.16541speed[1], 0.000000.0000090.00000);
                
MoveDynamicObject(targ2[4], 285.00000, -138.121801007.15472speed[1], 0.000000.0000090.00000);
                
MoveDynamicObject(targ2[5], 285.00000, -138.103001007.14838speed[1], 0.000000.0000090.00000);
                
MoveDynamicObject(targ2[6], 285.00000, -138.094501007.15472speed[1], 0.000000.0000090.00000);
                
LoopStatus[1] = 0;
            }
        }
       }
       if(
objectid == targ3[0] || objectid == targ3[1] || objectid == targ3[2] || objectid == targ3[3] || objectid == targ3[4] || objectid == targ3[5] || objectid == targ3[6]){
        switch(
LoopStatus[2]){
            case 
0:{
                
MoveDynamicObject(targ3[0], 288.00000, -138.103001007.14838speed[2], 0.000000.0000090.00000);
                
MoveDynamicObject(targ3[1], 288.00000, -138.121801007.15472,speed[2], 0.000000.0000090.00000);
                
MoveDynamicObject(targ3[2], 288.00000, -138.094501007.15472,speed[2], 0.000000.0000090.00000);
                
MoveDynamicObject(targ3[3], 288.00000, -138.112401007.14551,speed[2], 0.000000.0000090.00000);
                
MoveDynamicObject(targ3[4], 288.00000, -138.127501007.16388,speed[2], 0.000000.0000090.00000);
                
MoveDynamicObject(targ3[5], 288.00000, -138.125111007.16541,speed[2], 0.000000.0000090.00000);
                
MoveDynamicObject(targ3[6], 288.00000, -138.101901007.16541,speed[2], 0.000000.0000090.00000);
                
LoopStatus[2] = 1;
            }
            case 
1:{
                
MoveDynamicObject(targ3[0], 288.00000, -130.860991007.14838speed[2], 0.000000.0000090.00000);
                
MoveDynamicObject(targ3[1], 288.00000, -130.894301007.15472speed[2], 0.000000.0000090.00000);
                
MoveDynamicObject(targ3[2], 288.00000, -130.852491007.15472speed[2], 0.000000.0000090.00000);
                
MoveDynamicObject(targ3[3], 288.00000, -130.870411007.14551speed[2], 0.000000.0000090.00000);
                
MoveDynamicObject(targ3[4], 288.00000, -130.885501007.16388speed[2], 0.000000.0000090.00000);
                
MoveDynamicObject(targ3[5], 288.00000, -130.883101007.16541speed[2], 0.000000.0000090.00000);
                
MoveDynamicObject(targ3[6], 288.00000, -130.859891007.165412speed[2], 0.000000.0000090.00000);
                
LoopStatus[2] = 0;
            }
        }
       }
    return 
1;
}
CMD:ready(playerid)
{
    
GivePlayerWeapon(playerid24100);
    
GivePlayerWeapon(playerid30100);
    
SetPlayerPos(playerid302.292877,-143.139099,1004.062500);
    
SetPlayerInterior(playerid7);
    
Streamer_Update(playerid,-1);
    return 
1;

Как я заметил при дебаге LoopStatus[0] = 1; и LoopStatus[0] = 0; в секунду выполняются по 2-3 раза.
Если уничтожить какой нибудь объект из общего массива targ1, LoopStatus[0] = 1; и LoopStatus[0] = 0; буду выполняться в секунду от 5-6 раз в секунду каждая.
Я не знаю почему это происходит,в интернете ниукого не было таких проблем, значит и решений не нашел.

Была мысль воспользоваться таймером что бы менять значения LoopStatus-ов, но если есть какие то альтернативы, буду использовать их.


//update

Видео: https://*********/eCAOzWHFn2U


Re: CreateDynamicObject - White_116 - 13.07.2017

Quote:
Originally Posted by Johhnyllll
View Post
Еще один вопрос.
Почему не работает бесконечные движение объектов?

Для основы использую этот FS, только я уже всё переделал с поддержкой Streamer-a.
https://sampforum.blast.hk/showthread.php?tid=635892

Проблема вот в чём, цели двигаются с лева на право, если при движений в лева выстрелить к примеру в targ1[0], остальные части этого массива там-же и останутся. Если снова выстрелить по какой нибудь части из этого массива к примеру в targ[3], всё нормализуется.
PHP Code:
//foreach
//streamer
//sscanf
//командный процессор 
new targ1[7];
new 
targ2[7];
new 
targ3[7];
new 
Float:speed[3];
new    
speedxs 2;
new 
LoopStatus[3] = 0;
new 
target_count 0;
public 
OnGameModeInit()
{
    print(
"\n--------------------------------------");
    print(
" Targets system - Loaded");
    print(
"--------------------------------------");
    
Create_Target();
    return 
1;
}
stock Create_Target(){
    
targ1[0] = CreateDynamicObject(3024292.87509, -138.103001007.14838,   0.000000.0000090.00000);
    
targ1[1] = CreateDynamicObject(3023292.87289, -138.121801007.15472,   0.000000.0000090.00000);
    
targ1[2] = CreateDynamicObject(3022292.87561, -138.094501007.15472,   0.000000.0000090.00000);
    
targ1[3] = CreateDynamicObject(3021292.87598, -138.112371007.14551,   0.000000.0000090.00000);
    
targ1[4] = CreateDynamicObject(3020292.87411, -138.127501007.16388,   0.000000.0000090.00000);
    
targ1[5] = CreateDynamicObject(3019292.87280, -138.125111007.16541,   0.000000.0000090.00000);
    
targ1[6] = CreateDynamicObject(3018292.87280, -138.101901007.16541,   0.000000.0000090.00000);
    
targ2[0] = CreateDynamicObject(3019285.00000, -130.883101007.16541,   0.000000.0000090.00000);
    
targ2[1] = CreateDynamicObject(3020285.00000, -130.885501007.16388,   0.000000.0000090.00000);
    
targ2[2] = CreateDynamicObject(3021285.00000, -130.870411007.14551,   0.000000.0000089.76000);
    
targ2[3] = CreateDynamicObject(3018285.00000, -130.859891007.16541,   0.000000.0000090.00000);
    
targ2[4] = CreateDynamicObject(3023285.10001, -130.879811007.15472,   0.000000.0000090.00000);
    
targ2[5] = CreateDynamicObject(3024285.00000, -130.860991007.14838,   0.000000.0000090.00000);
    
targ2[6] = CreateDynamicObject(3022285.10001, -130.852491007.15472,   0.000000.0000090.00000);
     
targ3[0] = CreateDynamicObject(3024288.00000, -138.103001007.14838,   0.000000.0000090.00000);
    
targ3[1] = CreateDynamicObject(3023288.00000, -138.121801007.15472,   0.000000.0000090.00000);
    
targ3[2] = CreateDynamicObject(3022288.00000, -138.094501007.15472,   0.000000.0000090.00000);
    
targ3[3] = CreateDynamicObject(3021288.00000, -138.112401007.14551,   0.000000.0000089.76000);
    
targ3[4] = CreateDynamicObject(3020288.00000, -138.127501007.16388,   0.000000.0000090.00000);
    
targ3[5] = CreateDynamicObject(3019288.00000, -138.125111007.16541,   0.000000.0000090.00000);
    
targ3[6] = CreateDynamicObject(3018288.00000, -138.101901007.16541,   0.000000.0000090.00000);
    
MoveDynamicObject(targ1[0], 292.87509, -130.860991007.14838speedxs0.000000.0000090.00000);
    
MoveDynamicObject(targ1[1], 292.87289, -130.879811007.15472speedxs0.000000.0000090.00000);
    
MoveDynamicObject(targ1[2], 292.87561, -130.852491007.15472speedxs0.000000.0000090.00000);
    
MoveDynamicObject(targ1[3], 292.87601, -130.870411007.14551speedxs0.000000.0000090.00000);
    
MoveDynamicObject(targ1[4], 292.87411, -130.885501007.16388speedxs0.000000.0000090.00000);
    
MoveDynamicObject(targ1[5], 292.87280, -130.883101007.16541speedxs0.000000.0000090.00000);
    
MoveDynamicObject(targ1[6], 292.87280, -130.859891007.16541speedxs0.000000.0000090.00000);
    
LoopStatus[0] = 1;
    
speed[0] = speedxs;
     
MoveDynamicObject(targ2[0], 285.00000, -138.125111007.16541speedxs0.000000.0000090.00000);
     
MoveDynamicObject(targ2[1], 285.00000, -138.127501007.16388speedxs0.000000.0000090.00000);
     
MoveDynamicObject(targ2[2], 285.00000, -138.112401007.14551speedxs0.000000.0000090.00000);
      
MoveDynamicObject(targ2[3], 285.00000, -138.101901007.16541speedxs0.000000.0000090.00000);
       
MoveDynamicObject(targ2[4], 285.00000, -138.121801007.15472speedxs0.000000.0000090.00000);
       
MoveDynamicObject(targ2[5], 285.00000, -138.103001007.14838speedxs0.000000.0000090.00000);
       
MoveDynamicObject(targ2[6], 285.00000, -138.094501007.15472speedxs0.000000.0000090.00000);
    
LoopStatus[1] = 1;
    
speed[1] = speedxs;
    
MoveDynamicObject(targ3[0], 288.00000, -130.860991007.14838speedxs0.000000.0000090.00000);
      
MoveDynamicObject(targ3[1], 288.00000, -130.894301007.15472speedxs0.000000.0000090.00000);
      
MoveDynamicObject(targ3[2], 288.00000, -130.852491007.15472speedxs0.000000.0000090.00000);
      
MoveDynamicObject(targ3[3], 288.00000, -130.870411007.14551speedxs0.000000.0000090.00000);
      
MoveDynamicObject(targ3[4], 288.00000, -130.885501007.16388speedxs0.000000.0000090.00000);
      
MoveDynamicObject(targ3[5], 288.00000, -130.883101007.16541speedxs0.000000.0000090.00000);
      
MoveDynamicObject(targ3[6], 288.00000, -130.859891007.165412speedxs0.000000.0000090.00000);
       
LoopStatus[2] = 1;
       
speed[2] = speedxs;
}
public 
OnPlayerShootDynamicObject(playeridweaponidobjectidFloat:xFloat:yFloat:z)
{
    for(new 
i;i<sizeof(targ1);i++){
        if(
objectid == targ1[i])
            
DestroyDynamicObject(targ1[i]), targ1[i] = 0,target_count++;
    }
    for(new 
i;i<sizeof(targ2);i++){
        if(
objectid == targ2[i])
            
DestroyDynamicObject(targ2[i]), targ2[i] = 0,target_count++;
    }
    for(new 
i;i<sizeof(targ3);i++){
        if(
objectid == targ3[i])
            
DestroyDynamicObject(targ3[i]), targ3[i] = 0,target_count++;
    }
    if(
target_count == 21){
        
Create_Target();
        
target_count 0;
        foreach(new 
Player){
            if(
IsPlayerInRangeOfPoint(i30.0288.00000, -130.859891007.165412) && GetPlayerInterior(playerid) == 7)
                
Streamer_Update(i,-1);
        }
    }
    return 
1;
}
public 
OnDynamicObjectMoved(objectid)
{
    if(
objectid == targ1[0] || objectid == targ1[1] || objectid == targ1[2] || objectid == targ1[3] || objectid == targ1[4] || objectid == targ1[5] || objectid == targ1[6]){
        switch(
LoopStatus[0]){
            case 
0:{
                
MoveDynamicObject(targ1[0], 292.87509, -130.860991007.14838speed[0], 0.000000.0000090.00000);
                
MoveDynamicObject(targ1[1], 292.87289, -130.879811007.15472speed[0], 0.000000.0000090.00000);
                    
MoveDynamicObject(targ1[2], 292.87561, -130.852491007.15472speed[0], 0.000000.0000090.00000);
                
MoveDynamicObject(targ1[3], 292.87601, -130.870411007.14551speed[0], 0.000000.0000090.00000);
                
MoveDynamicObject(targ1[4], 292.87411, -130.885501007.16388speed[0], 0.000000.0000090.00000);
                
MoveDynamicObject(targ1[5], 292.87280, -130.883101007.16541speed[0], 0.000000.0000090.00000);
                
MoveDynamicObject(targ1[6], 292.87280, -130.859891007.16541speed[0], 0.000000.0000090.00000);
                
LoopStatus[0] = 1;
            }
            case 
1:{
                
MoveDynamicObject(targ1[0], 292.87509, -138.103001007.14838speed[0], 0.000000.0000090.00000);
                
MoveDynamicObject(targ1[1], 292.87289, -138.121801007.15472speed[0], 0.000000.0000090.00000);
                
MoveDynamicObject(targ1[2], 292.87561, -138.094501007.15472speed[0], 0.000000.0000090.00000);
                
MoveDynamicObject(targ1[3], 292.87598, -138.112371007.14551speed[0], 0.000000.0000090.00000);
                
MoveDynamicObject(targ1[4], 292.87411, -138.127501007.16388speed[0], 0.000000.0000090.00000);
                
MoveDynamicObject(targ1[5], 292.87280, -138.125111007.16541speed[0], 0.000000.0000090.00000);
                
MoveDynamicObject(targ1[6], 292.87280, -138.101901007.16541speed[0], 0.000000.0000090.00000);
                
LoopStatus[0] = 0;
            }
        }
       }
    if(
objectid == targ2[0] || objectid == targ2[1] || objectid == targ2[2] || objectid == targ2[3] || objectid == targ2[4] || objectid == targ2[5] || objectid == targ2[6]){
        switch(
LoopStatus[1]){
            case 
0:{
                
MoveDynamicObject(targ2[0], 285.00000, -130.883101007.16541speed[1], 0.000000.0000090.00000);
                
MoveDynamicObject(targ2[1], 285.00000, -130.885501007.16388speed[1], 0.000000.0000090.00000);
                
MoveDynamicObject(targ2[2], 285.00000, -130.870411007.14551speed[1], 0.000000.0000090.00000);
                
MoveDynamicObject(targ2[3], 285.00000, -130.859891007.16541speed[1], 0.000000.0000090.00000);
                
MoveDynamicObject(targ2[4], 285.10001, -130.879811007.15472speed[1], 0.000000.0000090.00000);
                
MoveDynamicObject(targ2[5], 285.00000, -130.860991007.14838speed[1], 0.000000.0000090.00000);
                
MoveDynamicObject(targ2[6], 285.10001, -130.852491007.15472speed[1], 0.000000.0000090.00000);
                
LoopStatus[1] = 1;
            }
            case 
1:{
                
MoveDynamicObject(targ2[0], 285.00000, -138.125111007.16541speed[1], 0.000000.0000090.00000);
                
MoveDynamicObject(targ2[1], 285.00000, -138.127501007.16388speed[1], 0.000000.0000090.00000);
                
MoveDynamicObject(targ2[2], 285.00000, -138.112401007.14551speed[1], 0.000000.0000090.00000);
                
MoveDynamicObject(targ2[3], 285.00000, -138.101901007.16541speed[1], 0.000000.0000090.00000);
                
MoveDynamicObject(targ2[4], 285.00000, -138.121801007.15472speed[1], 0.000000.0000090.00000);
                
MoveDynamicObject(targ2[5], 285.00000, -138.103001007.14838speed[1], 0.000000.0000090.00000);
                
MoveDynamicObject(targ2[6], 285.00000, -138.094501007.15472speed[1], 0.000000.0000090.00000);
                
LoopStatus[1] = 0;
            }
        }
       }
       if(
objectid == targ3[0] || objectid == targ3[1] || objectid == targ3[2] || objectid == targ3[3] || objectid == targ3[4] || objectid == targ3[5] || objectid == targ3[6]){
        switch(
LoopStatus[2]){
            case 
0:{
                
MoveDynamicObject(targ3[0], 288.00000, -138.103001007.14838speed[2], 0.000000.0000090.00000);
                
MoveDynamicObject(targ3[1], 288.00000, -138.121801007.15472,speed[2], 0.000000.0000090.00000);
                
MoveDynamicObject(targ3[2], 288.00000, -138.094501007.15472,speed[2], 0.000000.0000090.00000);
                
MoveDynamicObject(targ3[3], 288.00000, -138.112401007.14551,speed[2], 0.000000.0000090.00000);
                
MoveDynamicObject(targ3[4], 288.00000, -138.127501007.16388,speed[2], 0.000000.0000090.00000);
                
MoveDynamicObject(targ3[5], 288.00000, -138.125111007.16541,speed[2], 0.000000.0000090.00000);
                
MoveDynamicObject(targ3[6], 288.00000, -138.101901007.16541,speed[2], 0.000000.0000090.00000);
                
LoopStatus[2] = 1;
            }
            case 
1:{
                
MoveDynamicObject(targ3[0], 288.00000, -130.860991007.14838speed[2], 0.000000.0000090.00000);
                
MoveDynamicObject(targ3[1], 288.00000, -130.894301007.15472speed[2], 0.000000.0000090.00000);
                
MoveDynamicObject(targ3[2], 288.00000, -130.852491007.15472speed[2], 0.000000.0000090.00000);
                
MoveDynamicObject(targ3[3], 288.00000, -130.870411007.14551speed[2], 0.000000.0000090.00000);
                
MoveDynamicObject(targ3[4], 288.00000, -130.885501007.16388speed[2], 0.000000.0000090.00000);
                
MoveDynamicObject(targ3[5], 288.00000, -130.883101007.16541speed[2], 0.000000.0000090.00000);
                
MoveDynamicObject(targ3[6], 288.00000, -130.859891007.165412speed[2], 0.000000.0000090.00000);
                
LoopStatus[2] = 0;
            }
        }
       }
    return 
1;
}
CMD:ready(playerid)
{
    
GivePlayerWeapon(playerid24100);
    
GivePlayerWeapon(playerid30100);
    
SetPlayerPos(playerid302.292877,-143.139099,1004.062500);
    
SetPlayerInterior(playerid7);
    
Streamer_Update(playerid,-1);
    return 
1;

Как я заметил при дебаге LoopStatus[0] = 1; и LoopStatus[0] = 0; в секунду выполняются по 2-3 раза.
Если уничтожить какой нибудь объект из общего массива targ1, LoopStatus[0] = 1; и LoopStatus[0] = 0; буду выполняться в секунду от 5-6 раз в секунду каждая.
Я не знаю почему это происходит,в интернете ниукого не было таких проблем, значит и решений не нашел.

Была мысль воспользоваться таймером что бы менять значения LoopStatus-ов, но если есть какие то альтернативы, буду использовать их.


//update

Видео: https://*********/eCAOzWHFn2U
Проблема в OnDynamicObjectMoved(objectid), не проверяешь удалённый объект и у тебя очень быстро 6 раз статус поменяется - чётное число...


Re: CreateDynamicObject - Johhnyllll - 14.07.2017

Сделал проверку на валидность объекта:
PHP Code:
if(IsValidDynamicObject(targ1[0]) || IsValidDynamicObject(targ1[2]) ||  IsValidDynamicObject(targ1[3]) ||  IsValidDynamicObject(targ1[4]) ||  IsValidDynamicObject(targ1[5]) ||  IsValidDynamicObject(targ1[6])) LoopStatus[0] = 1
Но не помогло.
И я не понял смысл этих слов "не проверяешь удалённый объект"


Re: CreateDynamicObject - White_116 - 15.07.2017

Quote:
Originally Posted by Johhnyllll
View Post
Сделал проверку на валидность объекта:
Но не помогло.
И не поможет. ты двигаешь 7 объектов, один удаляешь, в итоге у тебя быстро поменяется статус 6 раз, вот и стопорится система.
Quote:
Originally Posted by Johhnyllll
View Post
И я не понял смысл этих слов "не проверяешь удалённый объект"
ТЫ начинаешь по коду перемещать удаленный объект, а твоя проверка не имеет логического смысла.
Проще говоря код гуано. Сделай 8 объектов, один базовый "каркас" атач к нему мишени, в результате тебе нужно будет перемещать лишь один объект.


Re: CreateDynamicObject - Johhnyllll - 25.07.2017

Quote:
Originally Posted by White_116
View Post
И не поможет. ты двигаешь 7 объектов, один удаляешь, в итоге у тебя быстро поменяется статус 6 раз, вот и стопорится система.

ТЫ начинаешь по коду перемещать удаленный объект, а твоя проверка не имеет логического смысла.
Проще говоря код гуано. Сделай 8 объектов, один базовый "каркас" атач к нему мишени, в результате тебе нужно будет перемещать лишь один объект.
Спасибо, скоро попробую.


Re: CreateDynamicObject - Johhnyllll - 31.07.2017

При частом вызове Streamer_Update,к примеру раз в секунду, идёт большая нагрузка на мод/клиент?


Re: CreateDynamicObject - ZiGGi - 31.07.2017

Quote:
Originally Posted by Johhnyllll
View Post
При частом вызове Streamer_Update,к примеру раз в секунду, идёт большая нагрузка на мод/клиент?
Думаю, основная нагрузка приходится на сеть.


Re: CreateDynamicObject - Johhnyllll - 31.07.2017

Quote:
Originally Posted by ZiGGi
View Post
Думаю, основная нагрузка приходится на сеть.
При тесте тира с еще одним человеком мы заметили один баг.

Я - стрелял из дигла, без +С.

Другой же человек, делал +С и разрушал мишени. Если делать +С очень быстро, объекты (target) разрушаются, но данные о том что объект разрушен не записывается в массив, поэтому получается рассинхрон.

Я подумал что можно было каждый раз при попаданий в нужный мишени вызывать Update_Streamer для людей которые находятся в радиусе от того человека что сделал выстрел в определённой инте.


Re: CreateDynamicObject - Salik - 31.07.2017

Я ведь тебе писал постом выше что нужно врубать функцию -
PHP Code:
Streamer_ToggleIdleUpdate(playeridtrue); 
А после отключать её как все подгрузилось (сделать лучше таймер что-бы через какое то время она отключалась).

А насчет Streamer_Update - на мод не так уж, мод в основном кидает RPC CreateObject если игрок даже не движется, клиенту если он и так не в силах (то будет чуток не по себе), просто нужно обдуманно все реализовать.


Re: CreateDynamicObject - Johhnyllll - 31.07.2017

Quote:
Originally Posted by Salik
View Post
Я ведь тебе писал постом выше что нужно врубать функцию -
PHP Code:
Streamer_ToggleIdleUpdate(playeridtrue); 
А после отключать её как все подгрузилось (сделать лучше таймер что-бы через какое то время она отключалась).

А насчет Streamer_Update - на мод не так уж, мод в основном кидает RPC CreateObject если игрок даже не движется, клиенту если он и так не в силах (то будет чуток не по себе), просто нужно обдуманно все реализовать.
Мне не нужно ведь подгружать объекты. Они и так есть.

При +С выпускаются 7 пуль(или т.п) меньше чем за 1 секунду, поэтому система не успевает понять сломан ли тот объект или нет. У меня в системе при попаданий в объект, он уничтожается и в общий массив target_count, добавляется информация о том что объект сломан. Т.е.:
PHP Code:
public OnPlayerShootDynamicObject{
for(new 
i;i<sizeof(target_lv_1);i++){
        if(
objectid == target_lv_1[i]){
            
DestroyDynamicObject(target_lv_1[i]); 
            
PlayerPlaySound(playerid178020.00.00.0);
            
target_count++;
            
target_shot[playerid]++;
        }
    }
}
// если все (их 21) мишени разрушены, выполняется это:
if(target_count == 21){
target_count 0;
//Обновляем стример в нужном нам месте
//вызываем функцию которая заново создаст новые мишени и приаттачит их к нужному объекту

Как я говорил выше, +С делается очень быстро, система не успевает даже реагировать на это, поэтому я смог придумать лишь две решении:

P.S: Для меня будет проще обновлять Streamer при каждом попаданий, но я не уверен в том что сервер выдержит...


Re: CreateDynamicObject - Salik - 31.07.2017

Я о чем и говорю, ты почти не понял сути, используй функцию - Streamer_ToggleIdleUpdate включи её когда начнется твой тир это очень хорошая замена стандартному ST_Update после окончания твоего Тира то выключай её, а так твой +С тут вообще не причем, может это дело в клиенте твоего друга и тот не отправляет пакеты (или же они попадают в packed loss, ну ты понял).


Re: CreateDynamicObject - White_116 - 31.07.2017

Столько слов, столько костылей идей.

PHP Code:
public OnPlayerShootDynamicObject
for(new 
i;i<sizeof(target_lv_1);i++){ 
        if(
objectid == target_lv_1[i]){ 
            
DestroyDynamicObject(target_lv_1[i]); 
            
target_lv_1[i] = -1; <-видно религия не позволяет.
            
PlayerPlaySound(playerid178020.00.00.0); 
            
target_count++; 
            
target_shot[playerid]++; 
        } 
    } 

// если все (их 21) мишени разрушены, выполняется это: 
if(target_count == 21){ 
target_count 0
//Обновляем стример в нужном нам месте 
//вызываем функцию которая заново создаст новые мишени и приаттачит их к нужному объекту 




Re: CreateDynamicObject - Johhnyllll - 31.07.2017

Quote:
Originally Posted by White_116
View Post
Столько слов, столько костылей идей.

PHP Code:
            target_lv_1[i] = -1; <-видно религия не позволяет
Бред.

Quote:
Originally Posted by Salik
View Post
Я о чем и говорю, ты почти не понял сути, используй функцию - Streamer_ToggleIdleUpdate включи её когда начнется твой тир это очень хорошая замена стандартному ST_Update после окончания твоего Тира то выключай её, а так твой +С тут вообще не причем, может это дело в клиенте твоего друга и тот не отправляет пакеты (или же они попадают в packed loss, ну ты понял).
Да, кажется я не так всё понял.

Спасибо. Скоро попробую.


Re: CreateDynamicObject - White_116 - 31.07.2017

Quote:
Originally Posted by Johhnyllll
View Post
Бред.
Обоснуй?

Наперёд скажу, если тебя не устраивает буржуйский стример, не используй его.


Re: CreateDynamicObject - Johhnyllll - 31.07.2017

Quote:
Originally Posted by White_116
View Post
Обоснуй?

Наперёд скажу, если тебя не устраивает буржуйский стример, не используй его.
Я не говорил что меня не устраивает стример.


Просто бессмысленный код по моему мнению, да и у меня есть target_count++;.

Который справляется со своей задачей.


Re: CreateDynamicObject - Salik - 31.07.2017

Ты сервер на калькуляторе запускаешь? Как не успевает среагировать, это как-то смешно) Насчет White\'a он кстати правильно подметил (Как я не заметил), то что у тебя идет глобальная переменная а не на каждого игрока, т.e -
PHP Code:
target_count++; //у тебя глобальный 
И ты тут описываешь её -
PHP Code:
// если все (их 21) мишени разрушены, выполняется это: 
if(target_count == 21){ 
target_count 0
//Обновляем стример в нужном нам месте 
//вызываем функцию которая заново создаст новые мишени и приаттачит их к нужному объекту 

Как то странно что ты используешь глобалку на игрока.


P.S Насчет реакции, если бы была реакция \'Ленивца\' у функции OnPlayerShootDO то она бы сдохла при минигане