Originally Posted by Johhnyllll
Еще один вопрос.
Почему не работает бесконечные движение объектов?
Для основы использую этот 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(3024, 292.87509, -138.10300, 1007.14838, 0.00000, 0.00000, 90.00000);
targ1[1] = CreateDynamicObject(3023, 292.87289, -138.12180, 1007.15472, 0.00000, 0.00000, 90.00000);
targ1[2] = CreateDynamicObject(3022, 292.87561, -138.09450, 1007.15472, 0.00000, 0.00000, 90.00000);
targ1[3] = CreateDynamicObject(3021, 292.87598, -138.11237, 1007.14551, 0.00000, 0.00000, 90.00000);
targ1[4] = CreateDynamicObject(3020, 292.87411, -138.12750, 1007.16388, 0.00000, 0.00000, 90.00000);
targ1[5] = CreateDynamicObject(3019, 292.87280, -138.12511, 1007.16541, 0.00000, 0.00000, 90.00000);
targ1[6] = CreateDynamicObject(3018, 292.87280, -138.10190, 1007.16541, 0.00000, 0.00000, 90.00000);
targ2[0] = CreateDynamicObject(3019, 285.00000, -130.88310, 1007.16541, 0.00000, 0.00000, 90.00000);
targ2[1] = CreateDynamicObject(3020, 285.00000, -130.88550, 1007.16388, 0.00000, 0.00000, 90.00000);
targ2[2] = CreateDynamicObject(3021, 285.00000, -130.87041, 1007.14551, 0.00000, 0.00000, 89.76000);
targ2[3] = CreateDynamicObject(3018, 285.00000, -130.85989, 1007.16541, 0.00000, 0.00000, 90.00000);
targ2[4] = CreateDynamicObject(3023, 285.10001, -130.87981, 1007.15472, 0.00000, 0.00000, 90.00000);
targ2[5] = CreateDynamicObject(3024, 285.00000, -130.86099, 1007.14838, 0.00000, 0.00000, 90.00000);
targ2[6] = CreateDynamicObject(3022, 285.10001, -130.85249, 1007.15472, 0.00000, 0.00000, 90.00000);
targ3[0] = CreateDynamicObject(3024, 288.00000, -138.10300, 1007.14838, 0.00000, 0.00000, 90.00000);
targ3[1] = CreateDynamicObject(3023, 288.00000, -138.12180, 1007.15472, 0.00000, 0.00000, 90.00000);
targ3[2] = CreateDynamicObject(3022, 288.00000, -138.09450, 1007.15472, 0.00000, 0.00000, 90.00000);
targ3[3] = CreateDynamicObject(3021, 288.00000, -138.11240, 1007.14551, 0.00000, 0.00000, 89.76000);
targ3[4] = CreateDynamicObject(3020, 288.00000, -138.12750, 1007.16388, 0.00000, 0.00000, 90.00000);
targ3[5] = CreateDynamicObject(3019, 288.00000, -138.12511, 1007.16541, 0.00000, 0.00000, 90.00000);
targ3[6] = CreateDynamicObject(3018, 288.00000, -138.10190, 1007.16541, 0.00000, 0.00000, 90.00000);
MoveDynamicObject(targ1[0], 292.87509, -130.86099, 1007.14838, speedxs, 0.00000, 0.00000, 90.00000);
MoveDynamicObject(targ1[1], 292.87289, -130.87981, 1007.15472, speedxs, 0.00000, 0.00000, 90.00000);
MoveDynamicObject(targ1[2], 292.87561, -130.85249, 1007.15472, speedxs, 0.00000, 0.00000, 90.00000);
MoveDynamicObject(targ1[3], 292.87601, -130.87041, 1007.14551, speedxs, 0.00000, 0.00000, 90.00000);
MoveDynamicObject(targ1[4], 292.87411, -130.88550, 1007.16388, speedxs, 0.00000, 0.00000, 90.00000);
MoveDynamicObject(targ1[5], 292.87280, -130.88310, 1007.16541, speedxs, 0.00000, 0.00000, 90.00000);
MoveDynamicObject(targ1[6], 292.87280, -130.85989, 1007.16541, speedxs, 0.00000, 0.00000, 90.00000);
LoopStatus[0] = 1;
speed[0] = speedxs;
MoveDynamicObject(targ2[0], 285.00000, -138.12511, 1007.16541, speedxs, 0.00000, 0.00000, 90.00000);
MoveDynamicObject(targ2[1], 285.00000, -138.12750, 1007.16388, speedxs, 0.00000, 0.00000, 90.00000);
MoveDynamicObject(targ2[2], 285.00000, -138.11240, 1007.14551, speedxs, 0.00000, 0.00000, 90.00000);
MoveDynamicObject(targ2[3], 285.00000, -138.10190, 1007.16541, speedxs, 0.00000, 0.00000, 90.00000);
MoveDynamicObject(targ2[4], 285.00000, -138.12180, 1007.15472, speedxs, 0.00000, 0.00000, 90.00000);
MoveDynamicObject(targ2[5], 285.00000, -138.10300, 1007.14838, speedxs, 0.00000, 0.00000, 90.00000);
MoveDynamicObject(targ2[6], 285.00000, -138.09450, 1007.15472, speedxs, 0.00000, 0.00000, 90.00000);
LoopStatus[1] = 1;
speed[1] = speedxs;
MoveDynamicObject(targ3[0], 288.00000, -130.86099, 1007.14838, speedxs, 0.00000, 0.00000, 90.00000);
MoveDynamicObject(targ3[1], 288.00000, -130.89430, 1007.15472, speedxs, 0.00000, 0.00000, 90.00000);
MoveDynamicObject(targ3[2], 288.00000, -130.85249, 1007.15472, speedxs, 0.00000, 0.00000, 90.00000);
MoveDynamicObject(targ3[3], 288.00000, -130.87041, 1007.14551, speedxs, 0.00000, 0.00000, 90.00000);
MoveDynamicObject(targ3[4], 288.00000, -130.88550, 1007.16388, speedxs, 0.00000, 0.00000, 90.00000);
MoveDynamicObject(targ3[5], 288.00000, -130.88310, 1007.16541, speedxs, 0.00000, 0.00000, 90.00000);
MoveDynamicObject(targ3[6], 288.00000, -130.85989, 1007.165412, speedxs, 0.00000, 0.00000, 90.00000);
LoopStatus[2] = 1;
speed[2] = speedxs;
}
public OnPlayerShootDynamicObject(playerid, weaponid, objectid, Float:x, Float:y, Float: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 i : Player){
if(IsPlayerInRangeOfPoint(i, 30.0, 288.00000, -130.85989, 1007.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.86099, 1007.14838, speed[0], 0.00000, 0.00000, 90.00000);
MoveDynamicObject(targ1[1], 292.87289, -130.87981, 1007.15472, speed[0], 0.00000, 0.00000, 90.00000);
MoveDynamicObject(targ1[2], 292.87561, -130.85249, 1007.15472, speed[0], 0.00000, 0.00000, 90.00000);
MoveDynamicObject(targ1[3], 292.87601, -130.87041, 1007.14551, speed[0], 0.00000, 0.00000, 90.00000);
MoveDynamicObject(targ1[4], 292.87411, -130.88550, 1007.16388, speed[0], 0.00000, 0.00000, 90.00000);
MoveDynamicObject(targ1[5], 292.87280, -130.88310, 1007.16541, speed[0], 0.00000, 0.00000, 90.00000);
MoveDynamicObject(targ1[6], 292.87280, -130.85989, 1007.16541, speed[0], 0.00000, 0.00000, 90.00000);
LoopStatus[0] = 1;
}
case 1:{
MoveDynamicObject(targ1[0], 292.87509, -138.10300, 1007.14838, speed[0], 0.00000, 0.00000, 90.00000);
MoveDynamicObject(targ1[1], 292.87289, -138.12180, 1007.15472, speed[0], 0.00000, 0.00000, 90.00000);
MoveDynamicObject(targ1[2], 292.87561, -138.09450, 1007.15472, speed[0], 0.00000, 0.00000, 90.00000);
MoveDynamicObject(targ1[3], 292.87598, -138.11237, 1007.14551, speed[0], 0.00000, 0.00000, 90.00000);
MoveDynamicObject(targ1[4], 292.87411, -138.12750, 1007.16388, speed[0], 0.00000, 0.00000, 90.00000);
MoveDynamicObject(targ1[5], 292.87280, -138.12511, 1007.16541, speed[0], 0.00000, 0.00000, 90.00000);
MoveDynamicObject(targ1[6], 292.87280, -138.10190, 1007.16541, speed[0], 0.00000, 0.00000, 90.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.88310, 1007.16541, speed[1], 0.00000, 0.00000, 90.00000);
MoveDynamicObject(targ2[1], 285.00000, -130.88550, 1007.16388, speed[1], 0.00000, 0.00000, 90.00000);
MoveDynamicObject(targ2[2], 285.00000, -130.87041, 1007.14551, speed[1], 0.00000, 0.00000, 90.00000);
MoveDynamicObject(targ2[3], 285.00000, -130.85989, 1007.16541, speed[1], 0.00000, 0.00000, 90.00000);
MoveDynamicObject(targ2[4], 285.10001, -130.87981, 1007.15472, speed[1], 0.00000, 0.00000, 90.00000);
MoveDynamicObject(targ2[5], 285.00000, -130.86099, 1007.14838, speed[1], 0.00000, 0.00000, 90.00000);
MoveDynamicObject(targ2[6], 285.10001, -130.85249, 1007.15472, speed[1], 0.00000, 0.00000, 90.00000);
LoopStatus[1] = 1;
}
case 1:{
MoveDynamicObject(targ2[0], 285.00000, -138.12511, 1007.16541, speed[1], 0.00000, 0.00000, 90.00000);
MoveDynamicObject(targ2[1], 285.00000, -138.12750, 1007.16388, speed[1], 0.00000, 0.00000, 90.00000);
MoveDynamicObject(targ2[2], 285.00000, -138.11240, 1007.14551, speed[1], 0.00000, 0.00000, 90.00000);
MoveDynamicObject(targ2[3], 285.00000, -138.10190, 1007.16541, speed[1], 0.00000, 0.00000, 90.00000);
MoveDynamicObject(targ2[4], 285.00000, -138.12180, 1007.15472, speed[1], 0.00000, 0.00000, 90.00000);
MoveDynamicObject(targ2[5], 285.00000, -138.10300, 1007.14838, speed[1], 0.00000, 0.00000, 90.00000);
MoveDynamicObject(targ2[6], 285.00000, -138.09450, 1007.15472, speed[1], 0.00000, 0.00000, 90.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.10300, 1007.14838, speed[2], 0.00000, 0.00000, 90.00000);
MoveDynamicObject(targ3[1], 288.00000, -138.12180, 1007.15472,speed[2], 0.00000, 0.00000, 90.00000);
MoveDynamicObject(targ3[2], 288.00000, -138.09450, 1007.15472,speed[2], 0.00000, 0.00000, 90.00000);
MoveDynamicObject(targ3[3], 288.00000, -138.11240, 1007.14551,speed[2], 0.00000, 0.00000, 90.00000);
MoveDynamicObject(targ3[4], 288.00000, -138.12750, 1007.16388,speed[2], 0.00000, 0.00000, 90.00000);
MoveDynamicObject(targ3[5], 288.00000, -138.12511, 1007.16541,speed[2], 0.00000, 0.00000, 90.00000);
MoveDynamicObject(targ3[6], 288.00000, -138.10190, 1007.16541,speed[2], 0.00000, 0.00000, 90.00000);
LoopStatus[2] = 1;
}
case 1:{
MoveDynamicObject(targ3[0], 288.00000, -130.86099, 1007.14838, speed[2], 0.00000, 0.00000, 90.00000);
MoveDynamicObject(targ3[1], 288.00000, -130.89430, 1007.15472, speed[2], 0.00000, 0.00000, 90.00000);
MoveDynamicObject(targ3[2], 288.00000, -130.85249, 1007.15472, speed[2], 0.00000, 0.00000, 90.00000);
MoveDynamicObject(targ3[3], 288.00000, -130.87041, 1007.14551, speed[2], 0.00000, 0.00000, 90.00000);
MoveDynamicObject(targ3[4], 288.00000, -130.88550, 1007.16388, speed[2], 0.00000, 0.00000, 90.00000);
MoveDynamicObject(targ3[5], 288.00000, -130.88310, 1007.16541, speed[2], 0.00000, 0.00000, 90.00000);
MoveDynamicObject(targ3[6], 288.00000, -130.85989, 1007.165412, speed[2], 0.00000, 0.00000, 90.00000);
LoopStatus[2] = 0;
}
}
}
return 1;
}
CMD:ready(playerid)
{
GivePlayerWeapon(playerid, 24, 100);
GivePlayerWeapon(playerid, 30, 100);
SetPlayerPos(playerid, 302.292877,-143.139099,1004.062500);
SetPlayerInterior(playerid, 7);
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
|