|
Требуется помощь.. |
|
|
oda128 |
23.11.2013, 2:53
|
Группа: Пользователи Наличность: 0
Пользователь №: 15.797
|
Доброго времени суток, форумчане. Поставил себе задачу сделать следующую функцию: Код Var Seconds := GetObjProperty( who, "onlinetimer" );
Var Days; Var Hours; Var Minutes;
//CalculateUpTime( Seconds, Days, Hours, Minutes );
CalculateUpTime ( Seconds, Days, Hours, Minutes );
If( !Seconds ) Minutes := 0; Hours := 0; Days := 0; Endif
var i; var create_zm;
If( !GetObjProperty( who, "@Recieved" ) ) if( Hours >= 5 ) // for (i := Hours; i <= Hours; i := i + i) create_zm := CreateItemInBackpack( who, "СУВЕНИР", 1); SendSysMessage( who, "бла-бла-бла", 3, 55 ); SetObjProperty( who, "@Recieved", 1 ); print( "Recieved 1" ); // endfor endif elseIf( GetObjProperty( who, "@Recieved" ) == 1 ) if( Hours >= 10 ) // for (i := Hours; i <= Hours; i := i + i) create_zm := CreateItemInBackpack( who, "СУВЕНИР", 1); SendSysMessage( who, "бла-бла-бла", 3, 55 ); SetObjProperty( who, "@Recieved", 2 ); print( "Recieved 2" ); // endfor endif elseIf( GetObjProperty( who, "@Recieved" ) == 2 ) if( Hours >= 15 ) // for (i := Hours; i <= Hours; i := i + i) create_zm := CreateItemInBackpack( who, "СУВЕНИР", 1); SendSysMessage( who, "бла-бла-бла", 3, 55 ); SetObjProperty( who, "@Recieved", 3 ); print( "Recieved 3" ); // endfor endif endif
Как вы видите, данный кусок содержит следующее: Если у чара нет проперти "@Recieved" и если его онлайн больше или равен 5 часам, мы дарим ему "СУВЕНИР". Меня интересует, как сделать, чтобы каждые +5 часов, чару выдавался сувенир не прибегая к elseif( GetObjProperty( who, "@Recieved" ) == 2 ) if( Hours >= 15 ) и т.п. Ведь если таким образом прописать 500 часов онлайна - это во-первых огромный флуд, во-вторых геморой и нагрузка на скрипт. Возможно ли это сделать с помощью for ? Если да, то пожалуйста, не затруднитесь и напишите мне этот кусок т.к. с фор не дружу.. Или может быть с case? Кто знает, подскажите как написать это... С уважением.
|
|
|
|
oda128 |
23.11.2013, 17:17
|
Группа: Пользователи Наличность: 0
Пользователь №: 15.797
|
RL_ka, скрипт должен работать следующим образом:
Чар сидит в онлайне, ему каждый раз суммируется проперти "onlinetimer", которое означает общее количество времени (секунд) онлайна. С помощью этого проперти, мы выявляем, сколько часов он находится в онлайне. - это всё есть, но, нет следующего:
Выявив 5 часов его онлайна, мы дарим ему сувенир. Если он 10 часов онлайна, мы дарим ему еще один сувенир И так далее, каждые 5 часов ЕГО онлайна.
Я попробовал тот код, что я написал - он действует, но, я не хочу его использовать т.к. здесь нужно будет прописывать бесконечное количество времени (5, 10, 15, 20 и т.д. ) с такой огромной писаниной текста. Я хочу обойти, подразумевая какой-то другой выход из этой ситуации..
|
|
|
|
RL_ka |
23.11.2013, 20:18
|
Разработчик Injection
Сообщений: 465
Регистрация: 13.7.2013 Группа: Модераторы Наличность: 13757 Из: Екатеринбург
Пользователь №: 16.211
|
Так ведь тогда это будет простейший скрипт Код while (1) sleep(60*60*5); create_zm := CreateItemInBackpack( who, "СУВЕНИР", 1); SendSysMessage( who, "бла-бла-бла", 3, 55 ); endwhile
считать время онлайн вообще не нужно так как мы будем просто после входа спать 5 часов, а затем создавать предмет, затем снова спать 5 часов и создавать предмет... Естественно это должен быть скрипт logon Опционально, если нужно знать сколько сувениров уже было получено, можно добавить счётчик Код var i:=0; setobjproperty(who, "@Recieved", i); while (1) sleep(60*60*5); create_zm := CreateItemInBackpack( who, "СУВЕНИР", 1); SendSysMessage( who, "бла-бла-бла", 3, 55 ); i++; setobjproperty(who, "@Recieved", i); endwhile
|
|
|
|
oda128 |
23.11.2013, 21:11
|
Группа: Пользователи Наличность: 0
Пользователь №: 15.797
|
А как к этому всему добавить проверку на количество прожитого времени чара в онлайне? В данном случае Hours Код Var Seconds := GetObjProperty( who, "onlinetimer" );
Var Days; Var Hours; Var Minutes;
//CalculateUpTime( Seconds, Days, Hours, Minutes );
CalculateUpTime ( Seconds, Days, Hours, Minutes );
If( !Seconds ) Minutes := 0; Hours := 0; Days := 0; Endif
if( Hours >= 5 ) - проверка, если 5 или больше часов чар был в онлайн. if( Hours >= 10 ) и т.д. и т.п. Как бы это использовать вместо if совместно с вышенаписанным твоим кодом?
|
|
|
|
RL_ka |
23.11.2013, 21:29
|
Разработчик Injection
Сообщений: 465
Регистрация: 13.7.2013 Группа: Модераторы Наличность: 13757 Из: Екатеринбург
Пользователь №: 16.211
|
для чего? скрипт запускается после входа в игру, спит 5 часов, создаёт предмет, спит опять 5 часов. зачем ему проверять время, если он срабатывает сам по себе каждые 5 часов после входа персонажа в игру? если тебе проверка нужна для чего-то другого - объясни для чего тогда(IMG: style_emoticons/default/smile.gif)
|
|
|
|
oda128 |
23.11.2013, 22:31
|
Группа: Пользователи Наличность: 0
Пользователь №: 15.797
|
Вот скрипт: logon.src Код use os; use uo;
program CheckHour( who )
var i:=0; var create_hm; var new_sleep := CInt( 60*60*5 ); // Var players := EnumerateOnlineCharacters(); setobjproperty(who, "@Recieved", i); while (1) sleep( 15 ); // Foreach chr in players create_hm := CreateItemInBackpack( who, "houredal" , 1); SendSysMessage( who, "You have recieved Hour Medal!", 3, 55 ); i := i+1; setobjproperty( who, "@Recieved", i); print( "CheckHour: Hour Medal Recieved!!!" ); // Endforeach endwhile
endprogram Чар заходит в игру и в консоле поехало: Код CheckHour: Hour Medal Recieved!!! CheckHour: Hour Medal Recieved!!! CheckHour: Hour Medal Recieved!!! CheckHour: Hour Medal Recieved!!! CheckHour: Hour Medal Recieved!!! CheckHour: Hour Medal Recieved!!! CheckHour: Hour Medal Recieved!!! CheckHour: Hour Medal Recieved!!! CheckHour: Hour Medal Recieved!!! CheckHour: Hour Medal Recieved!!! CheckHour: Hour Medal Recieved!!! CheckHour: Hour Medal Recieved!!!
Тоже самое пишется игроку, который не может двигаться и зависает.
|
|
|
|
oda128 |
23.11.2013, 23:01
|
Группа: Пользователи Наличность: 0
Пользователь №: 15.797
|
Убрал пробел, та же самая ситуация.. Цитата(RL_ka @ 23.11.2013, 21:46) А, все понятно. Logon это критический скрипт, в нем все задержки минимальны. Тебе нужно твой скрипт переименовать в souvenir.src а в твоём logon.src написать всего одну строчку: start_script(":pkgname:souvenir.src", who)
В этом варианте, нормализовался запуск через 15 секунд (или любое другое количество), но он ничего не создаёт в бекпеке чара и ничего не пишет чару. Пишет только консоль: CheckHour: Hour Medal Recieved!!! Код use os; use uo;
program CheckHour( who )
var i:=0; var create_hm; var new_sleep := CInt( 60*60*5 ); // Var players := EnumerateOnlineCharacters(); setobjproperty(who, "@Recieved", i); while (1) sleep( 15 ); // Foreach chr in players
print( "CheckHour: Hour Medal Recieved!!!" ); create_hm := CreateItemInBackpack( who, "zulumedal" , 1); SendSysMessage( who, "You have recieved Hour Medal!", 3, 55 ); i := i+1; setobjproperty( who, "@Recieved", i); // Endforeach endwhile
endprogram
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|