using System;
public class SpecialBossSpawn : MakerScript
{
public override void onStart(MakerEvent e)
{
NpcMakerEx ex = e.myself;
e.gg.SendMakerScriptEvent(ex, 1, 2, 3);
for (int i = 0; i < ex.def_count; i++)
{
NpcSpawnDefineEx def = ex.GetSpawnDefine(i);
Logger.Info($"def {def.name} {def.dbname}");
if(def.has_dbname != 0)
def.LoadDBNpcInfo(1010);
}
}
public override void onDBNpcInfo(MakerEvent e)
{
Logger.Info($"Time {e.loaded_def.dbname} {e.loaded_def.respawn_rand} {e.loaded_def.respawn_time}");
DBNpcInfo info = e.record0;
if (info.is_alive == 0)
{
Logger.Info($"onDBNpcInfo dead {info.death_time}");
}
else
e.loaded_def.SpawnEx(1, 0, info.x, info.y, info.z, 0, info.hp, info.mp, info.db_value);
}
public override void onNpcCreated(MakerEvent e)
{
e.gg.Announce($"onNpcCreated {e.created_def.dbname}");
}
public override void onNpcDeleted(MakerEvent e)
{
Logger.Info("onNpcDeleted ");
}
public override void onScriptEvent(MakerEvent e)
{
Logger.Info($"SciptEvent {e.script_event_arg1} {e.script_event_arg2} {e.script_event_arg3}");
}
}
А жаль, ибо этот экст делает скриптописание значительно гибче. Единственный, пожалуй, минус - то, что из любого скрипта можно влезть в реестр (хотя не факт, не уверен, что такой функционал есть в моно).Сильная вещица, но не все знают языки программирования, у меня есть пару знакомых скриптеров лучших на рынке и они попросту не знают ни C#, в месте с продажей такой вещице нужно давать хорошую документацию и многочисленные примеры.
using System;
public class SpecialBossSpawn : MakerScript
{
public int respawn_hour = 0;
public override void onStart(MakerEvent e)
{
respawn_hour = GetInt("respawn_hour");
NpcMakerEx ex = e.myself;
e.gg.SendMakerScriptEvent(ex, 1, 2, 3);
for (int i = 0; i < ex.def_count; i++)
{
NpcSpawnDefineEx def = ex.GetSpawnDefine(i);
if (def.has_dbname != 0)
def.LoadDBNpcInfo(1010);
}
}
public override void onDBNpcInfo(MakerEvent e)
{
DBNpcInfo info = e.record0;
if (info.is_alive == 0)
{
int time = e.gg.GetTimeOfDay();
int delay = RespawnDelay(GetDate(info.death_time), e.loaded_def);
if (delay <= time) {
int maxdelay = (delay + e.loaded_def.respawn_rand);
if (maxdelay > time)
{
e.gg.Announce($"Босс {e.loaded_def.dbname} скоро появится");
e.loaded_def.Spawn(1, e.gg.Rand(maxdelay - time));
}
else
e.loaded_def.Spawn(1, 0);
} else {
e.myself.AddTimerEx(1000, (delay - time) * 1000);
}
}
else
e.loaded_def.SpawnEx(1, 0, info.x, info.y, info.z, 0, info.hp, info.mp, info.db_value);
}
public override void onNpcCreated(MakerEvent e)
{
e.gg.Announce($"Появился босс {e.created_def.dbname}");
}
public override void onTimerEx(MakerEvent e)
{
NpcSpawnDefineEx def = e.myself.GetSpawnDefine(0);
e.gg.Announce($"Босс {def.dbname} скоро появится");
def.Spawn(1, e.gg.Rand((Normal(GetDate()) + def.respawn_rand) - e.gg.GetTimeOfDay()));
}
public override void onNpcDeleted(MakerEvent e)
{
Date time = GetDate();
e.myself.AddTimerEx(1000, (RespawnDelay(time, e.deleted_def) - time.time) * 1000);
}
private int Normal(Date date)
{
return (date.time + (respawn_hour - date.hour) * 3600 - date.min * 60 - date.sec);
}
private int RespawnDelay(Date time, NpcSpawnDefineEx def)
{
return Normal(time) + def.respawn_time;
}
}
Нужно с чего то да начинать и пускай сейчас это просто модуль для написания АИ скриптов на CLR совместимых языках.И потому ему ваши "Легкое расширение нового функционала. Добавление полей и новых методов. Добавление кастомных событий. Быстродействие" - как мертвому припарки. Без глубокой модификации гейм-модуля нет смысла заниматься расширением функционала АИ. Ну если тока сахарку подсыпать, который за много лет так никому и не понадобился.
Код:for (int i = 0; i < ex.def_count; i+:-)
магия копированияПозитивная строчка
магия копирования
We use cookies and similar technologies for the following purposes:
Do you accept cookies and these technologies?
We use cookies and similar technologies for the following purposes:
Do you accept cookies and these technologies?