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

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


**

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



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

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

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


*****

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



Слабое место: если в момент задержки, между началом хила и окончанием, чар выйдет в логаут по какой-то причине, то HealSelf на нём навсегда останется равной еденице и твой скрипт перестанет работать.
В этом случае нужно обязательно прописать в logon и reconnect скрипты стирание этой проперти.

ps. В случае, если Attach удовлетворит всем твоим потребностям, то подобные "костыли" будут не нужны

Сообщение отредактировал RL_ka - 7.11.2014, 2:02
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
ikorus
сообщение 7.11.2014, 20:24
Сообщение #3


**

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



Цитата(RL_ka @ 7.11.2014, 3:33) *

Слабое место: если в момент задержки, между началом хила и окончанием, чар выйдет в логаут по какой-то причине, то HealSelf на нём навсегда останется равной еденице и твой скрипт перестанет работать.
В этом случае нужно обязательно прописать в logon и reconnect скрипты стирание этой проперти.

ps. В случае, если Attach удовлетворит всем твоим потребностям, то подобные "костыли" будут не нужны


на самом деле хотелось поэкспериментировать с пропертисами )))

с аттачем все работает как надо:

Код
use uo;
use os;
use util;
use math;

include "include/itemUtil";
include ":attributes:attributes";
include ":classes:classes";
include ":death:resurrection";
include ":equipment:protections";
include ":timedscripts:timedScripts";

program textcmd_BandageSelf( who )

    if( who.dead )
        return 0;
    endif
    
    if (who.attached)
        SendSysMessage(who, "You are already doing something else.");
        return 0;
    endif
    
    var bandage;
    
    foreach item in ( EnumerateItemsInContainer( who.backpack ) )
        if (item.objtype == 0xEE9)
            bandage := item;
        endif
    endforeach

    if (!bandage)
        SendSysMessage(who, "You have no bandages....");
        return 0;
    endif
    
    Attach(who);
        
    if( who.poisoned )
        CureSelf( who, bandage );
    else
        HealPatient( who, bandage );
    endif
    
endprogram

function CureSelf( who, bandage )

    if( !SubtractAmount( bandage, 2 ))
        SendSysMessage( who, "You don't have enough bandages." );
        return 0;
    else
        SendSysMessage( who, "You start to cure yourself." );
    endif

    var vital := AP_GetVital( who, HITS ),
    delay := 10;
        
    while( Cint( delay ))
        Sleep( 1 );
        delay -= 1;
        if( who.dead || !who.poisoned )
            SendSysMessage( who, "You have lost your concentration." );
            return 0;
        elseif( AP_GetVital( who, HITS ) < vital )
            if( !SubtractAmount( bandage, 2 ))
                SendSysMessage( who, "You don't have enough bandages." );
                SendSysMessage( who, "You couldn't cure yourself." );
                return 0;
            else
                SendSysMessage( who, "Yours fingers slip..." );
                CreateItemInBackpack( who, 0x0e20, 1 );
                vital := AP_GetVital( who, HITS );
            endif
        endif
    endwhile

    var current_poison := CInt( GetObjProperty( who, "#PoisonedLevel" ));
    if( !current_poison )
        SendSysMessage( who, "That is not poisoned." );
        return 0;
    endif
        
    var bonus := CInt( GetMobileProtection( who, "HealingIncrease" ));
    if( bonus )
        bonus := CInt( bonus * 5 );
    endif
        
    var difficulty := CInt(( current_poison * 25 ) + 15 ),
    healing := AP_GetSkill( who, HEALING );

    if( SkillCheck( who, HEALING, CInt( difficulty )) > 0 || healing >= CInt( difficulty - bonus ))

        SendSysMessage( who, "You cured level "+current_poison+" poison." );
        TS_LowerDuration( who, "DefaultPoison", -1 );
                
    else
        SendSysMessage( who, "You couldn't cure yourself!" );
    endif
        
    CreateItemInBackpack( who, 0x0e20, 2 );

    return 1;
endfunction

function HealPatient( who, bandage )

    var max_vital := AP_GetStat( who, STRENGTH ),
    vital := AP_GetVital( who, HITS );
    
    if( CInt( vital ) >= CInt( max_vital ))
           SendSysMessage( who, "This patient don't have a bruise!" );
        return 0;
    elseif( !SubtractAmount( bandage, 1 ))
        SendSysMessage( who, "You don't have enough bandages." );
        return 0;
    else
        SendSysMessage( who, "You start to heal yourself." );
    endif
            
    var delay := 7;
    while( Cint( delay ))
        Sleep( 1 );
        delay -= 1;
        
        if( CInt( vital ) >= CInt( max_vital ))
            SendSysMessage( who, "This patient don't have a bruise!" );
            return 0;
        elseif( AP_GetVital( who, HITS ) < vital )
            if( !SubtractAmount( bandage, 1 ))
                SendSysMessage( who, "You don't have enough bandages." );
                SendSysMessage( who, "You couldn't heal yourself." );
                return 0;
            else
                SendSysMessage( who, "Yours fingers slip..." );
                CreateItemInBackpack( who, 0x0e20, 1 );
                vital := AP_GetVital( who, HITS );
            endif
        endif
    endwhile
        
        var difficulty := CInt( AP_GetStat( who, STRENGTH ) - AP_GetVital( who, HITS ));
        if( difficulty > 65 )
                difficulty := 65;
        endif

        if( SkillCheck( who, HEALING, difficulty ) > 0 )
        
            var heal := HL_GetAmount( who );
            SendSysMessage( who, "You heal "+heal+" damages." );
            HealDamage( who, heal );
        else
            SendSysMessage( who, "You couldn't heal yourself." );
        endif
        
        CreateItemInBackpack( who, 0x0e20, 1 );
    
    return 1;
    
endfunction

function HL_GetAmount( who )

    var heal_skill := CInt( AP_GetSkill( who, HEALING ) / 10 );
    var anat_skill := CInt( AP_GetSkill( who, ANATOMY ) / 15 );

        var heal := RandomDiceRoll( CInt( heal_skill )+"d4+"+CInt( heal_skill )) + RandomDiceRoll( "1d8+2" ) + CInt( anat_skill );

        var bonus := CInt( GetMobileProtection( who, "HealingIncrease" ));
    if( bonus )
        heal *= CDbl(( bonus * 0.1 ) + 1 );
    endif

        if( GetObjProperty( who, WARRIOR ))
                heal *= ClasseBonus( who, WARRIOR );
        endif
        
        return CInt( heal );
endfunction
Пользователь в офлайне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   Ну... тебе всё-таки придётся начать погружаться в ...   5.11.2014, 16:27
ikorus   [code] if (who.attached) SendSysMessage...   5.11.2014, 23:04
pager   этот атрибут блокирует использование хила только,...   6.11.2014, 6:49
RL_ka   Ну тогда остаётся последний вариант фикса "из...   6.11.2014, 2:25
ikorus   Отладил вариант с навешиванием пропертисов - все р...   6.11.2014, 22:18
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:05
Designed by Nickostyle