RU 📌 Pinned

Как сделать?

Dark[Ol(U23)leneri] #34 18.04.2010 22:57 6408 comments 2425981 views

Подскажите пожалуйста, как сделать что бы изучать кунг-фу в выражении которое ниже, можно было раз в день? Либо через 24 часа после действия, либо после 12 ночи.

if kung_fu <= 0:
    act 'Учиться Кунг-фу':
     kung_fu_learning += 1
        if kung_fu_learning = 5:
         kung_fu += 1
         gt 'lock_1'
    end
  end
end

PsiH, вы не сказали ничего о том, как считаете время. Как вам помочь в таком случае?

Ладно, поиграем в экстрасенса:

gs 'calendar'
if (time - kung_fu_last_time >= 1440) or (day ! kung_fu_last_day):
	if kung_fu <= 0: 
		act 'Учиться Кунг-фу':
			kung_fu_last_time = 0
			kung_fu_last_day = day
			kung_fu_learning += 1 
			if kung_fu_learning = 5: 
				kung_fu += 1 
				gt 'lock_1' 
			end 
		end 
	end
end

evp, упс простите забыл добавить. В общем то вот подсчет времени.

JDN = JDNStart + time/1440 
hour = (time/60) MOD 24 
minut = time MOD 60 
weekday = (JDN MOD 7) + 1 

JDa = JDN + 32044 
JDb = (4*JDa + 3)/146097 
JDc = JDa - (146097*JDb/4) 
JDd = (4*JDc + 3)/1461 
JDe = JDc - 1461*JDd/4 
JDm = (5*JDe + 2)/153 

day = JDe - (153*JDm+2)/5 + 1 
month = JDm + 3 - 12*(JDm/10) 
year = 100*JDb + JDd - 4800 + JDm/10 
$hour = iif (hour < 10, '0<<hour>>', '<<hour>>') 
$minut = iif (minut < 10, '0<<minut>>', '<<minut>>')

Ваш метод не помог, так же продолжает насчитывать kung_fu_learning без перерыва.
Странно хотя все вроде верно.

PsiH, вы так и не сказали о том как считаете время. Вы просто показали мой же код для локации Calendar. Этот код не считает время. Этот код переводит время в календарную дату. И то, только при условии, что время в игре считается в переменной time в минутах, а стартовый день указан номером Юлианского дня. Ладно, если вы используете Calendar, будем считать, что вы и время считаете в минутах, прошедших со старта игры. Если это так, то мой код железно работает. Если вы сомневаетесь - скиньте свой вариант. Я посмотрю.

Е….карный бабай, вы, я понял!, не умеете тестировать. Уйдите с локации обучения. сделайте хоть одно действие, что займет время. Или просто добавьте время на изучение. Ведь не моментально же происходит обучение кун-фу!

gs 'calendar' 
if (time - kung_fu_last_time >= 1440) or (day ! kung_fu_last_day): 
    if kung_fu <= 0: 
        act 'Учиться Кунг-фу': 
            kung_fu_last_time = 0 
            kung_fu_last_day = day 
            kung_fu_learning += 1
            time += 1
            gs 'stat' & !Или что у вас считает время и статы
            if kung_fu_learning = 5: 
                kung_fu += 1 
                gt 'lock_1' 
            end 
        end 
    end 
end

Вот. Урок занял 1 минуту. Пробуйте. И не забывайте, что в реальности такие уроки занимают больше времени. :)

evp, Я что то туплю у меня все равно не выходит. Я наверно лучше скину файл а вы объясните пожалуйста где я напортачил :) igra2.qsp

Как все запущено… Если хотите увидеть изменения - перезайдите на локацию. Добавьте gt $CURLOC.

Вопросов задано не было, но будут :) Предотвращу несколько постов с вопросами :)

1 После увеличения kung_fu надо бы сбросить счетчик kung_fu_learning. Подумайте и, если будет желание, - напишите зачем нужно это действие.

gs 'stat' 
if (time - kung_fu_last_time >= 1440) or (day ! kung_fu_last_day): 
    if kung_fu <= 0: 
        act 'Учиться Кунг-фу': 
            kung_fu_last_time = 0 
            kung_fu_last_day = day 
            kung_fu_learning += 1 
            time += 1 
            gs 'stat' & !Или что у вас считает время и статы 
            if kung_fu_learning = 5: 
                kung_fu += 1
                kung_fu_learning = 0 
                gt 'lock_1' 
            end
            gt $CURLOC 
        end 
    end 
end

2. Локация stat. Зачем там это?

!-------Герой-----------
set health = 1000
set damage = 2
set mana = 100
set stamina = 100
атака=1

!боевка(приемы)
kung_fu = 0

!боевка(обучение)
kung_fu_learning = 0

Вы отдаете себе отчет, что этот код будет выполняться всегда, как вы обратитесь к stat? У вас всегда будет максимальное здоровье и вы… никогда не обучитесь кун-фу.

Откуда вы берете разные куски кода? Да еще пихаете их в самую критичную для вашей игры локацию. Вы что-нибудь знаете про оператор set? Можете нам объяснить, зачем вы его используете?

Никогда ничего не меняйте в локации stat, пока не будете уверены в работоспособности кода. Не пихайте туда ничего, кроме обработки изменений статов, уберите оттуда вывод в дополнительное описание. Я уже говорил вам об этом раньше.

Как сделать бафы? Например на 1 день?!

Примерно так?

act "Принять лекарство":
    buff_health = 30
    buff_health_time = time
    health += buff_health
end

!Локация-обработчик
if buff_health_time and time > buff_health_time + 1440:
    health -= buff_health
    KILLVAR 'buff_health'
    KILLVAR 'buff_health_time'
end

Добавлять добавляет, но что-то не спадает, не через день, ни через неделю

Spoiler

if selobj=“Зелье здоровья”:
баф_ОЗ = 30
время_бафа = time
макс_ОЗ += баф_ОЗ
end

!Локация-обработчик
if время_бафа and time > время_бафа + 1440:
макс_ОЗ -= баф_ОЗ
KILLVAR ‘баф_ОЗ’
KILLVAR ‘время_бафа’
end

Может проблема во времени?

Spoiler

if minut >= 60:
minut -= 60
hour += 1
МАНА+=15
end
IF hour >= 24:
hour = hour - 24
day = day + 1
END

CLR

pl’<font color=#B22222><<hour>> часов: <<minut>> минут, <<day>> день</font>’

evp, Спасибо за помощь, учту на будущее :)

Драккан:

Может проблема во времени?

Да, сразу указывайте как вы обрабатываете время. Вариант от evp для его же календаря

Драккан:

if minut >= 60:
minut -= 60
hour += 1
МАНА+=15
end
IF hour >= 24:
hour = hour - 24
day = day + 1
END

А что будет если вы прибавите сразу несколько часов? minut+=180, к примеру?
У вас прибавит только час, а потом будет прибавлять по часу при каждом обращении к календарю (или где вы там время считаете), что может испортить все последующие действия, да и время будет показывать 11 часов: 126 минут, к примеру.

Отвечать по-теме нет смысла, ибо вам для начала надо пофиксить ваш метод подсчета времени. А для данного метода подсчета, я бы делал проверку на истечение баффа в часовом блоке, правда не совсем точно, ибо максимальное время баффа будет от 23ч 01м.
Но если вам нужна точность вплоть до минуты, то надо добавлять отдельную переменную для “глобального” времени (прошедшего с начала игры в минутах), тогда +1440 и будет равна прошедшим суткам.

Подумайте, как будете делать.

Драккан, подходите творчески к коду на форуме. У меня в коде время считается в переменной time, а у вас - minut. Кроме того, моя time - непрерывна, а ваша minut обнуляется каждый час.

Я дал идею, а доработать ее под ваши условия - ваша задача.

Babai:

Но если вам нужна точность вплоть до минуты, то надо добавлять отдельную переменную для “глобального” времени (прошедшего с начала игры в минутах), тогда +1440 и будет равна прошедшим суткам.

Если я не ошибаюсь, то у него есть такая переменная :) Она есть у всех, кто берет за основу определенные всем известные игры с некоего форума :)

А подсказывать, где ее искать - не буду. Да и “исходников” под рукой нет :)

evp:

Если я не ошибаюсь, то у него есть такая переменная smile

Ну пусть тогда её использует)
У меня похожая система подсчета, но своя и я не использую глобальное время. Просто мне так удобнее пересчитывать параметры в зависимости от текущего времени. :)

evp:

!Локация-обработчик
if buff_health_time and time > buff_health_time + 1440:
health -= buff_health

При всей простоте, я бы так то-же не делал. Просто если у персонажа на момент окончания баффа останеться меньше 30 хп, то…
Бафф (простите за две фф, я так привык) должен добавлять к максимуму (в случае со здоровьем) и использовать лучше две переменных - health и health_max и бафф добавлять к максу.

Log in or Register to post comments.