Показать сообщение отдельно
Старый 10.04.2014, 04:24  
toto24
Нуб
Аватар для toto24
OFFLINE
Регистрация: 08.04.2014
Возраст: 41
Сообщений: 0
Благодарностей:
0 всего
Репутация: 1

Цитата:
Сообщение от Ruof Посмотреть сообщение
Важно помнить:

- Если Тема находиться под скрытым текстом, и Вы не понимаете, что происходит, прочитайте >> Правила

- Не оставляйте сообщения, не относящиеся к тематики первоначального поста!

- Если у Вас что-то не работает, описывайте более детально вашу проблему, дабы Вам могли помочь

- Если тема более не актуальна, укажите в какой момент тема перестала быть интересной, рабочей и почему

- Если тема находится не в АРХИВЕ, то значит она всё ещё действенна. Не надо писать "Работает ли?"

- На нашем портале нет "Личных хайдов", а так же запрещено просить слить имеющийся хайд лично Вам!

- Хотите отблагодарить автора темы? Для этого есть специальная кнопка, в правом нижнем углу сообщения.


( прим. 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!"); 
    }  
}
хотелось бы узнать это полный скрипт или его чем-то дополнять надо что бы все работало.. ??
 
Ответить с цитированием