Здравствуйте, гость ( Вход | Регистрация )

> bandageself - почему не работает?
ikorus
сообщение 3.11.2014, 14:27
Сообщение #1


**

Группа: Пользователи
Наличность: 0
Пользователь №: 16.948
Возраст: 36



В клиенте встроенный макрос bandageself не работает. Допускаю, конечно, что я просто не разобрался, как правильно его использовать, но информации по тому, как правильно я не нашел, поэтому можно считать, что не работает.

Кто-нибудь знает, как этот макрос работает?

Как альтернативу я пробую написать скрипт на хил, срабатывающий от текстовой команды, но уперся в проблему: чтобы скрипт запустить, нужен даблклик по объекту (IMG:style_emoticons/default/sad.gif) Каким еще образом можно запустить скрипт, а еще лучше - каким образом можно даблклик эмулировать в скрипте?
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
 
Ответить в эту темуОткрыть новую тему
Ответов
RL_ka
сообщение 5.11.2014, 16:27
Сообщение #2


*****

Разработчик Injection
Сообщений: 474
Регистрация: 13.7.2013
Группа: Модераторы
Наличность: 14979
Из: Екатеринбург
Пользователь №: 16.211



Ну... тебе всё-таки придётся начать погружаться в глубины eScripta, потому что даже самые простые на первый взгляд вещи требуют довольно много знаний (IMG:style_emoticons/default/smile.gif)

По поводу проверки занятости персонажа - я с таким не сталкивался, и однозначного решения не знаю, но можно попробовать проверить его занятость с помощью
character.attached

http://docs.polserver.com/pol099/objref.php#Character

Код

if (who.attached)
    SendSysMessage(who, "You are already doing something else.");
    return;
endif
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
ikorus
сообщение 5.11.2014, 23:04
Сообщение #3


**

Группа: Пользователи
Наличность: 0
Пользователь №: 16.948
Возраст: 36



Цитата(RL_ka @ 5.11.2014, 19:27) *

Код

if (who.attached)
    SendSysMessage(who, "You are already doing something else.");
    return;
endif



этот атрибут блокирует использование хила только, когда перс занят: во время медицации теперь лечиться нельзя, как и во время майнинга или другого действия в цикле (loop).

попробовал вешать свойства объекта на чара на время хила, но не срабатывает фишка - все равно хилится, не ждет, пока закончит.

Вот куски нерабочей схемы

Код

    if( GetObjProperty( who, "#HealPatient" ) )
        SendSysMessage( who, "You must wait before being able to heal yourself again." );
        return 0;
    endif

    var heal;
    SetObjProperty( who, "#HealPatient", heal );
        ...
        тут хилимся
        ...
    EraseObjProperty( who, "#HealPatient" );



На самом деле attached указывает на используемый в данный момент персонажем скрипт. Если используется (скрипт "прикреплен" к персонажу), - то нельзя будет хилить. В остальных случая можно. Получается, что нужно добавить мой скрипт в число тех, которые лочат чара, и тогда все будет правильно реализовано. А остальное - костыли
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
pager
сообщение 6.11.2014, 6:49
Сообщение #4


****

Apprentice
Сообщений: 147
Регистрация: 10.1.2006
Группа: Пользователи
Наличность: 0
Из: --
Пользователь №: 4.699
Возраст: --



Цитата(ikorus @ 6.11.2014, 1:04) *

этот атрибут блокирует использование хила только, когда перс занят:


Вот еще одно решение проблемы :
Скрипт выводит сообщение( с поддержкой множество языков ) если в группе PROC_SKILL есть процессы .Пример сообщения: Подождите пока завершится : Навык лечения.
Так же можно скрипту посылать событие с помощью функции MSendprocEvent например для того чтобы при смерти или выходе из игры персонажа, скрипт завершался мгновенно.

Если кого заинтересовало, то MsendProcEvent и другие includes лежат в пакете spawnernpc на форуме..


Код

/////////////////////////////////////////////
language.cfg
Language Rus
{
    Message_Wait_script                    Подождите пока завершится
        script_usebandage_name                            Навык лечения.

}

Language Enu
{
        Message_Wait_script                    Wait until the end
        script_usebandage_name                            Skill healing.

}

    

//////////////////////////////////////





Use uo;
Use os;
Use unicode;

Const PROC_SKILL  := “skill”;



var language_cfg          := ReadConfigFile(“:*:language”);


Program usebandage(who,bandage)
var lang      := MGetMobileLanguage(who);
if(!MGetProcDelay(who,PROC_SKILL,who,lang))
MsetProcPid(who,PROC_SKILL,”usebandage”,struct{pid := GetPid(),message := "script_usebandage_name”,level := 0});
Bandages(who,bandage,lang);
MsetProcPid(who,PROC_SKILL,”usebandage”);
endif
endprogram
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function Bandages(byref who,byref bandage,byref lang)
Код скрипта...........
...
….

endfunction

////////////////////////////////////////////////include functions ///////////////////////////////////////////////////
function MGetProcDelay(object,procname,mobile,lang,level := DEFAULT_PROC_LEVEL)
var prop     := MGetObjProperty(object,"#procpid",dictionary);
foreach name in (prop[procname].keys())
if(Cint(prop[procname][name].level) == Cint(level))
MConfigLanguageSendSysMessageUc(mobile,"message_wait_script",lang.langcode,": " +
MGetElement(GetConfigString(language_cfg[lang.langcode],prop[procname][name].message),prop[procname][name].message + " - language_cfg not found."),lang.font,lang.color);
return 1;
endif
endforeach
endfunction
////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function MGetObjProperty(object,name,err := 0)
if(name in object.propnames())
return object.getprop(name);
else
return err;
endif
endfunction
////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function MConfigLanguageSendSysMessageUc(who,name,langcode,text := "",fount := _DEFAULT_UCFONT,color := _DEFAULT_UCCOLOR)
return SendSysMessageUc(who,CAscZ(MGetElement(GetConfigstring(language_cfg[langcode],name),name + " - language_cfg not found ") + text),langcode,fount,color);
endfunction

//////////////////////////////////////////////////////////////////////////////////////////////////////////////
function  MGetElement(structure,err := 0)
if(structure)
return structure;
else
return err;
endif
endfunction

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function MSetProcPid(mobile,procname,name,structure := 0)
set_critical(1);
Detach();
var prop := MGetObjProperty(mobile,"#procpid",dictionary);
if(!structure and !prop[procname].size() <= 1)
prop.erase(procname);
elseif(!structure)
prop[procname].erase(name);
elseif(!prop.exists(procname))
prop.insert(procname,dictionary{name -> structure});
else
prop[procname].insert(name,structure);
endif
mobile.setprop("#procpid",prop);
set_critical(0);
endfunction
///////////////////////////////////////////////////////////////////////////////////////////////////////////////
function MGetMobileLanguage(byref mobile)
return MGetObjProperty(mobile,"language",struct{langcode := "rus",font := _DEFAULT_UCFONT,color := _DEFAULT_UCCOLOR});
endfunction



Сообщение отредактировал RL_ka - 6.11.2014, 14:52
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения

Сообщений в этой теме
ikorus   bandageself - почему не работает?   3.11.2014, 14:27
Juzzver   для работы макрос команды bandageself нужно создат...   3.11.2014, 14:37
ikorus   для работы макрос команды bandageself нужно созда...   3.11.2014, 16:54
RL_ka   Как альтернативу я пробую написать скрипт на хил,...   3.11.2014, 17:03
ikorus   Вот такой скрипт успешно работает, но как видно - ...   3.11.2014, 20:46
RL_ka   Ну не удивительно. У тебя вообще ни в одном месте ...   3.11.2014, 21:24
ikorus   Ну не удивительно. У тебя вообще ни в одном месте...   5.11.2014, 15:17
ikorus   Простейшая проверка на наличие бинтов пишется вот...   5.11.2014, 21:58
RL_ka   Ну тогда остаётся последний вариант фикса "из...   6.11.2014, 2:25
ikorus   Отладил вариант с навешиванием пропертисов - все р...   6.11.2014, 22:18
RL_ka   Слабое место: если в момент задержки, между начало...   7.11.2014, 0:33
ikorus   Слабое место: если в момент задержки, между начал...   7.11.2014, 20:24
RL_ka   Молодец, быстро учишься :) Следующая твоя задача,...   7.11.2014, 22:58
PolDev   А что за два скрипта? А то я не уловил ))   12.11.2014, 21:44
RL_ka   А что за два скрипта? А то я не уловил )) обычн...   13.11.2014, 12:05


Ответить в эту темуОткрыть новую тему
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 

- Текстовая версия | Версия для КПК Сейчас: 6.11.2025, 20:03
Designed by Nickostyle