В този кратък урок ще разгледаме как се създава мислещо (thinking) entity с помощта на Engine. Избираме Engine, тъй като филтрирането на различните entity-та става в кода на самия модул, което води до по-добра работа в сравнение с другите методи.
Най-честата употреба на мислещо entity е замяната на повтарящ се task, тъй като самата операция при създаване на task е тежка.
Нека преминем към същинската част на урока. Първо ще действаме стъпка по стъпка, а накрая ще видим и крайния резултат.
Код за потвърждение: Избери целия код
#include <amxmodx>
#include <engine>
new g_Entity // глобална променлива, която ще използваме за създаването на нашето мислещо entity
new const g_Classname[] = "Entity_Classname" // classname за мислещото ни entity
new const Float:f_ThinkingInterval = 3.0 // интервал, през който нашето entity ще мисли
Код за потвърждение: Избери целия код
public plugin_init()
{
register_plugin("Engine Thinking Entity", "1.0", "DaRk_StyLe @ amxx-bg.info/forum")
g_Entity = create_entity("info_target") // създаваме g_Entity под формата на info_target entity
entity_set_string(g_Entity, EV_SZ_classname, g_Classname) // прилагаме classname, който сме задали горе
entity_set_float(g_Entity, EV_FL_nextthink, get_gametime() + f_ThinkingInterval) // прилагаме времето, което сме избрали в началото
register_think(g_Classname, "EntityThink") // регистрираме think със classname-а на нашето entity, и функция, в която ще се изпълнява кода
}
Код за потвърждение: Избери целия код
public EntityThink(Ent)
{
if (Ent == g_Entity) // искаме да сме сигурни, че Ent е нашето info_target entity (g_Entity)
{
log_amx("%s is thinking!", g_Classname) // пробваме дали кода работи, като логваме в конзолата
entity_set_float(g_Entity, EV_FL_nextthink, get_gametime() + f_ThinkingInterval) // след колко време операцията да се повтори
}
}
Код за потвърждение: Избери целия код
L 08/26/2017 - 12:00:00: [test.amxx] Entity_Classname is thinking!
L 08/26/2017 - 12:00:03: [test.amxx] Entity_Classname is thinking!
L 08/26/2017 - 12:00:06: [test.amxx] Entity_Classname is thinking!
.....
Код за потвърждение: Избери целия код
#include <amxmodx>
#include <engine>
new g_Entity // глобална променлива, която ще използваме за създаването на нашето мислещо entity
new const g_Classname[] = "Entity_Classname" // classname за мислещото ни entity
new const Float:f_ThinkingInterval = 3.0 // интервал, през който нашето entity ще мисли
public plugin_init()
{
register_plugin("Engine Thinking Entity", "1.0", "DaRk_StyLe @ amxx-bg.info/forum")
g_Entity = create_entity("info_target") // създаваме g_Entity под формата на info_target entity
entity_set_string(g_Entity, EV_SZ_classname, g_Classname) // прилагаме classname, който сме задали горе
entity_set_float(g_Entity, EV_FL_nextthink, get_gametime() + f_ThinkingInterval) // прилагаме времето, което сме избрали в началото
register_think(g_Classname, "EntityThink") // регистрираме think със classname-а на нашето entity, и функция, в която ще се изпълнява кода
}
public EntityThink(Ent)
{
if (Ent == g_Entity) // искаме да сме сигурни, че Ent е нашето info_target entity (g_Entity)
{
log_amx("%s is thinking!", g_Classname) // пробваме дали кода работи, като логваме в конзолата
entity_set_float(g_Entity, EV_FL_nextthink, get_gametime() + f_ThinkingInterval) // след колко време операцията да се повтори
}
}
Това е всичко на този етап. Както винаги - ако имате въпроси, не се двоумете да ги зададете!