Важно помнить:
- Если Тема находиться под скрытым текстом, и Вы не понимаете, что происходит, прочитайте
>> Правила
- Не оставляйте сообщения, не относящиеся к тематики первоначального поста!
- Если у Вас что-то не работает, описывайте более детально вашу проблему, дабы Вам могли помочь
- Если тема более не актуальна, укажите в какой момент тема перестала быть интересной, рабочей и почему
- Если тема находится не в АРХИВЕ, то значит она всё ещё действенна. Не надо писать "Работает ли?"
- На нашем портале нет "Личных хайдов", а так же запрещено просить слить имеющийся хайд лично Вам!
- Хотите отблагодарить автора темы? Для этого есть специальная кнопка, в правом нижнем углу сообщения.
( прим. DarkCat )
Часто в некоторых портах люди теряют паки и они падают "в текстуры" (камни, кораллы, строения). Иногда их видно визуально, иногда только с помощью радара.
С помощью UseDoodadSkill можно попробовать достать пак, если он упал не сильно далеко от края меша. Часто это не удается и тогда можно воспользоваться микро-телепортацией туда-обратно. Именно это делает скрипт ниже: пробует поднять ближайший пак, если не выходит, то телепортируется к нему, подбирает и возвращается на прежние координаты.
Судя по количеству подтекстурных паков на моем сервере до этого еще никто не додумывался. У первого же порта сдал паков на 60 звезд за 20 минут.
Код:
public void PluginRun()
{
Log("Working..");
List<DoodadObject> objs = getDoodads();
List<DoodadObject> objs2 = new List<DoodadObject>();
objs.ForEach(delegate(DoodadObject obj)
{
if(obj.name.IndexOf("Груз") >= 0)
{
objs2.Add(obj);
Log(String.Format("{0} - {1}", obj.name, dist(obj)));
}
});
if(objs2.Count<1) {
Log("Can't find pack.");
}
objs2.Sort(delegate(DoodadObject obj1, DoodadObject obj2)
{
return Math.Sign(dist(obj1)-dist(obj2));
});
DoodadObject pack = objs2[0];
Log(String.Format("Picking up: {0} - {1}", pack.name, dist(pack)));
uint packObjId = pack.objId;
bool check = true;
UseDoodadSkill("Забрать", pack, true);
Thread.Sleep(2000);
List<DoodadObject> objs3 = getDoodads();
objs3.ForEach(delegate(DoodadObject obj)
{
if(obj.objId == packObjId)
check = false;
});
if(!check) {
Log("Fail. Teleporting...");
double x = me.X, y = me.Y, z = me.Z;
Teleport(pack.X, pack.Y, pack.Z);
Thread.Sleep(2000);
UseDoodadSkill("Забрать", pack, false);
Thread.Sleep(2000);
Teleport(x, y, z);
}
else
{
Log("Picked!");
}
}