Streamer_Update(playerid,-1);
Streamer_ToggleIdleUpdate(playerid, true);
//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;
}
Еще один вопрос.
Почему не работает бесконечные движение объектов? Для основы использую этот FS, только я уже всё переделал с поддержкой Streamer-a. https://sampforum.blast.hk/showthread.php?tid=635892 Проблема вот в чём, цели двигаются с лева на право, если при движений в лева выстрелить к примеру в targ1[0], остальные части этого массива там-же и останутся. Если снова выстрелить по какой нибудь части из этого массива к примеру в targ[3], всё нормализуется. PHP Code:
Если уничтожить какой нибудь объект из общего массива targ1, LoopStatus[0] = 1; и LoopStatus[0] = 0; буду выполняться в секунду от 5-6 раз в секунду каждая. Я не знаю почему это происходит,в интернете ниукого не было таких проблем, значит и решений не нашел. Была мысль воспользоваться таймером что бы менять значения LoopStatus-ов, но если есть какие то альтернативы, буду использовать их. //update Видео: https://*********/eCAOzWHFn2U |
if(IsValidDynamicObject(targ1[0]) || IsValidDynamicObject(targ1[2]) || IsValidDynamicObject(targ1[3]) || IsValidDynamicObject(targ1[4]) || IsValidDynamicObject(targ1[5]) || IsValidDynamicObject(targ1[6])) LoopStatus[0] = 1;
И я не понял смысл этих слов "не проверяешь удалённый объект"
|
И не поможет. ты двигаешь 7 объектов, один удаляешь, в итоге у тебя быстро поменяется статус 6 раз, вот и стопорится система.
ТЫ начинаешь по коду перемещать удаленный объект, а твоя проверка не имеет логического смысла. Проще говоря код гуано. Сделай 8 объектов, один базовый "каркас" атач к нему мишени, в результате тебе нужно будет перемещать лишь один объект. |
При частом вызове Streamer_Update,к примеру раз в секунду, идёт большая нагрузка на мод/клиент?
|
Streamer_ToggleIdleUpdate(playerid, true);
Я ведь тебе писал постом выше что нужно врубать функцию -
PHP Code:
А насчет Streamer_Update - на мод не так уж, мод в основном кидает RPC CreateObject если игрок даже не движется, клиенту если он и так не в силах (то будет чуток не по себе), просто нужно обдуманно все реализовать. |
public OnPlayerShootDynamicObject{
for(new i;i<sizeof(target_lv_1);i++){
if(objectid == target_lv_1[i]){
DestroyDynamicObject(target_lv_1[i]);
PlayerPlaySound(playerid, 17802, 0.0, 0.0, 0.0);
target_count++;
target_shot[playerid]++;
}
}
}
// если все (их 21) мишени разрушены, выполняется это:
if(target_count == 21){
target_count = 0;
//Обновляем стример в нужном нам месте
//вызываем функцию которая заново создаст новые мишени и приаттачит их к нужному объекту
}
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(playerid, 17802, 0.0, 0.0, 0.0);
target_count++;
target_shot[playerid]++;
}
}
}
// если все (их 21) мишени разрушены, выполняется это:
if(target_count == 21){
target_count = 0;
//Обновляем стример в нужном нам месте
//вызываем функцию которая заново создаст новые мишени и приаттачит их к нужному объекту
}
Столько слов, столько костылей идей.
PHP Code:
|
Я о чем и говорю, ты почти не понял сути, используй функцию - Streamer_ToggleIdleUpdate включи её когда начнется твой тир это очень хорошая замена стандартному ST_Update после окончания твоего Тира то выключай её, а так твой +С тут вообще не причем, может это дело в клиенте твоего друга и тот не отправляет пакеты (или же они попадают в packed loss, ну ты понял).
|
Обоснуй?
Наперёд скажу, если тебя не устраивает буржуйский стример, не используй его. |
target_count++; //у тебя глобальный
// если все (их 21) мишени разрушены, выполняется это:
if(target_count == 21){
target_count = 0;
//Обновляем стример в нужном нам месте
//вызываем функцию которая заново создаст новые мишени и приаттачит их к нужному объекту
}