Доброго времени суток, хочу узнать, как лучше всего сделать таймер для каждого NPC на сервере.
У меня есть 1 очень интересная мысль, и для этого мне нужен таймер, только вот какой, 1 глобальный, или для каждого NPC свой..
Доброго времени суток, хочу узнать, как лучше всего сделать таймер для каждого NPC на сервере.
У меня есть 1 очень интересная мысль, и для этого мне нужен таймер, только вот какой, 1 глобальный, или для каждого NPC свой..
Подыму
Опиши хотя бы вкратце свою интересную мысль и тогда станет понятно какой в твоей ситуации таймер будет лучше.
Если быть точным, я хочу дать боту мысли, допустим 1 раз в 50 секунд, он должен показывать мысль, или выполнять какую-то анимацию
И ещё такой вопрос, не будет ли тут лишним использование: Streamer_SetIntData
Ибо я его использую в команде, допустим /setbottext id_bot text
PHP код:
Streamer_SetIntData(STREAMER_TYPE_3D_TEXT_LABEL, Actor3DtextId[Actor_Serv[bot_id]] , E_STREAMER_WORLD_ID, GetDynamicActorVirtualWorld(Actor_Serv[bot_id]));
Если мысли будут появляться всегда и у всех ботов сразу - можно один таймер на всех.
Если в определённое время у нескольких ботов сразу, а все остальные просто должны стоять - один таймер + foreach или индивидуальные таймеры.
А если может быть так, что из всех ботов нужно показать только для одного мысли - индивидуальный таймер.
Хотя, на самом деле, если в таймере будет простецкий код, то особой разницы не будет тут.
Касаемо Streamer_SetIntData не совсем понял. Что именно ты тут делаешь и почему использование функции может быть вдруг лишней?
Вообщем, планирую некоторых одарить мыслями, других и мыслями и действиями, теперь вопрос третий, лучше через стример делать Npc или стандартно?
- - - Добавлено - - -
Попробовал сделать функцию для создания ботов, но, она работает криво, кривость в том, что неправильно указывается
ActorID
Т.е допустим использую:
На конце bot_id выдается вообще неправильно... проблема в том, что если использовать таймер, bot_id оказывается невернымPHP код:
Actor_Serv[0] = CreateDynamicActor_Server(150, -1424.1647,-1125.9562,1521.9900,91.6332, 0, 100.0, 10, 1);
т.е, в таймере я намерен использовать то что я хочу сделать, допустим дать боту мысль, по итогу чтобы применить к указанному боту, а именно Id: 0, у меня ничего не получится... ибо всё перепутано
PHP код:
stock CreateDynamicActor_Server(model, Float:x,Float:y, Float:z, Float:a,invulnerable = 1, Float:health = 100.0, worldid = -1, interiorid = -1, playerid = -1, Float:streamdistance = STREAMER_ACTOR_SD, areaid = -1, priority = 0)
{
new id_actor = CreateDynamicActor(model, x,y,z,a,invulnerable,health, worldid, interiorid, playerid,streamdistance, areaid, priority);
if(id_actor != INVALID_ACTOR_ID)
{
// создать 3дтекст для разговора
Actor3DtextId[id_actor] = CreateDynamic3DTextLabel("-",COLOR_ALOGIN,x,y,z+ACTOR_CHAT_TEXT_OFFSET_HEIGHT,5.0,INVALID_PLAYER_ID,INVALID_VEHICLE_ID,1, worldid, interiorid, -1, 10.0);
Streamer_SetIntData(STREAMER_TYPE_3D_TEXT_LABEL, Actor3DtextId[id_actor] , E_STREAMER_WORLD_ID, MAX_ACTORS);
}
return id_actor;
}
1) Что за bot_id?
2) Что ты пытаешься сделать вот этим:
PHP код:
Streamer_SetIntData(STREAMER_TYPE_3D_TEXT_LABEL, Actor3DtextId[id_actor] , E_STREAMER_WORLD_ID, MAX_ACTORS);
Покопавшись, переделал функцию:
В итоге таймер не реагирует на NPC с идом 0, через принт показывает, что таймер для этого ида npc есть, а вот реакции не поступаетPHP код:
stock CreateDynamicActor_Server(id_actor,model, Float:x,Float:y, Float:z, Float:a,invulnerable = 1, Float:health = 100.0, worldid = -1, interiorid = -1, playerid = -1, Float:streamdistance = STREAMER_ACTOR_SD, areaid = -1, priority = 0)
{
new bot_id = CreateDynamicActor(model, x,y,z,a,invulnerable,health, worldid, interiorid, playerid,streamdistance, areaid, priority);
if(bot_id != INVALID_ACTOR_ID)
{
Actor3DtextId[bot_id] = CreateDynamic3DTextLabel("-",COLOR_ALOGIN,x,y,z+ACTOR_CHAT_TEXT_OFFSET_HEIGHT,5.0,INVALID_PLAYER_ID,INVALID_VEHICLE_ID,1, worldid, interiorid, -1, 10.0);
ActorFirstPos[bot_id][0] = x;
ActorFirstPos[bot_id][1] = y;
ActorFirstPos[bot_id][2] = z;
ActorFirstPos[bot_id][3] = a;
new control_summ = random(123123)+random(123);
if(Actor_Timer[id_actor] == 0)
{
Actor_Timer[id_actor] = SetTimerEx("OnActorTimer", 2000, true, "dd",id_actor,control_summ);
Actor_ControlSumm[id_actor] = control_summ;
}
}
return bot_id;
}
По поводу, я и спросил, она будет лишней, или нет...PHP код:
Streamer_SetIntData
Заменить 3d text в виртуальном мире хотел, в котором находиться бот, не стоит этого делать?
Использовать Streamer_SetIntData прямо после создания 3d-текста - странно, ибо виртуальный мир можно задать и в CreateDynamic3dText.
И почему с одними переменными ты работаешь через "bot_id", а с другими через "id_actor"?
Сейчас я пользуюсь логикой, создаю бота, и работаю с конкретным его ид т.е допустим Actor_Serv[17], создаю для него таймер, и там уже дальше продолжаю делать различные вещи
- Вопрос, как же по другому это всё реализовать? Есть ли конкретные предложения по поводу этого всего?