Вернуться   Raurin Forums > Raurin 3: The Silver Marches (NWN2 шард) > Скриптинг, маппинг и диалогинг :)

Ответ
 
Опции темы Опции просмотра
Старый 20.11.2007, 19:26   #51
Elisar Kronvell
Гость
 
Аватар для Elisar Kronvell
 
Регистрация: 11.11.2007
Адрес: Санкт-Петербург
Сообщения: 25
Власть репутации: 0 Elisar Kronvell У него еще все впереди!
По умолчанию Re: Вопрос: OnPlayerDying

Necrosis
Я не про это, я про отступы.

Так. Скрипты написал. Логически - должны работать. На практике - событие модуля OnHeartbeat не выполняется в принципе. Ни разу. Вот скрипты:

ek_lib01
Код:
string GetDyingString (object oCharacter)
{
	string sDyingString = "";
	int iGender = GetGender(oCharacter);
	int iAlignmentGE = GetAlignmentGoodEvil(oCharacter);
	int iAlignmentLC = GetAlignmentLawChaos(oCharacter);
		
	if (iGender == GENDER_MALE)
	{
		if (iAlignmentGE == ALIGNMENT_GOOD && iAlignmentLC == ALIGNMENT_LAWFUL)
		{
			sDyingString = "Вот и все... я... ухожу. Прощайте, друзья, прощайте...";
		}
		if (iAlignmentGE == ALIGNMENT_GOOD && iAlignmentLC == ALIGNMENT_NEUTRAL)
		{
			sDyingString = "";
		}
		if (iAlignmentGE == ALIGNMENT_GOOD && iAlignmentLC == ALIGNMENT_CHAOTIC)
		{
			sDyingString = "";
		}
		if (iAlignmentGE == ALIGNMENT_NEUTRAL && iAlignmentLC == ALIGNMENT_LAWFUL)
		{
			sDyingString = "";
		}
		if (iAlignmentGE == ALIGNMENT_NEUTRAL && iAlignmentLC == ALIGNMENT_NEUTRAL)
		{
			sDyingString = "Это конец.";
		}
		if (iAlignmentGE == ALIGNMENT_NEUTRAL && iAlignmentLC == ALIGNMENT_CHAOTIC)
		{
			sDyingString = "";
		}
		if (iAlignmentGE == ALIGNMENT_EVIL && iAlignmentLC == ALIGNMENT_LAWFUL)
		{
			sDyingString = "";
		}
		if (iAlignmentGE == ALIGNMENT_EVIL && iAlignmentLC == ALIGNMENT_NEUTRAL)
		{
			sDyingString = "";
		}
		if (iAlignmentGE == ALIGNMENT_EVIL && iAlignmentLC == ALIGNMENT_CHAOTIC)
		{
			sDyingString = "Аргх! Проклятые твари! *кашель* Ну давайте! Подходите! Я перегрызу вам глотки!";
		}
	}
	if (iGender == GENDER_FEMALE)
	{
		if (iAlignmentGE == ALIGNMENT_GOOD && iAlignmentLC == ALIGNMENT_LAWFUL)
		{
			sDyingString = "";
		}
		if (iAlignmentGE == ALIGNMENT_GOOD && iAlignmentLC == ALIGNMENT_NEUTRAL)
		{
			sDyingString = "";
		}
		if (iAlignmentGE == ALIGNMENT_GOOD && iAlignmentLC == ALIGNMENT_CHAOTIC)
		{
			sDyingString = "";
		}
		if (iAlignmentGE == ALIGNMENT_NEUTRAL && iAlignmentLC == ALIGNMENT_LAWFUL)
		{
			sDyingString = "";
		}
		if (iAlignmentGE == ALIGNMENT_NEUTRAL && iAlignmentLC == ALIGNMENT_NEUTRAL)
		{
			sDyingString = "";
		}
		if (iAlignmentGE == ALIGNMENT_NEUTRAL && iAlignmentLC == ALIGNMENT_CHAOTIC)
		{
			sDyingString = "";
		}
		if (iAlignmentGE == ALIGNMENT_EVIL && iAlignmentLC == ALIGNMENT_LAWFUL)
		{
			sDyingString = "";
		}
		if (iAlignmentGE == ALIGNMENT_EVIL && iAlignmentLC == ALIGNMENT_NEUTRAL)
		{
			sDyingString = "";
		}
		if (iAlignmentGE == ALIGNMENT_EVIL && iAlignmentLC == ALIGNMENT_CHAOTIC)
		{
			sDyingString = "";
		}
	}
	return sDyingString;
}
ek_module_OnPlayerDying
Код:
#include "ek_lib01"

void main()
{
	object oPC = GetLastPlayerDying();
	
	AssignCommand(oPC, ClearAllActions());
        AssignCommand(oPC, SpeakString(GetDyingString(oPC)));
	AssignCommand(oPC, ActionPlayAnimation(ANIMATION_FIREFORGET_KNEELDEATH));
	
	SetLocalInt(oPC, "iDying", 1);	
}
ek_module_OnHeartbeat
Код:
void main()
{
object oPC = OBJECT_SELF;
//==========================
if (GetLocalInt(oPC, "iDying") == 1)
{
	int iDamage = d3(2) - (GetAbilityScore(oPC, ABILITY_CONSTITUTION)-10)/2;
	effect eDeath = EffectDeath(TRUE, TRUE, TRUE, TRUE);
	effect eDamageOrHeal;
	string sDamageOrHeal;
	
	if(WillSave(oPC, d12()) == 0)
	{
		ApplyEffectToObject(DURATION_TYPE_INSTANT, eDeath, oPC);
	}
	
	if(iDamage < 0)
	{
		iDamage = -iDamage;
		eDamageOrHeal = EffectHeal(iDamage);
		sDamageOrHeal = "*кашель*";
	}
	if(iDamage >= 0)
	{
		eDamageOrHeal = EffectDamage(iDamage, DAMAGE_TYPE_ALL, DAMAGE_POWER_NORMAL, TRUE);
		sDamageOrHeal = "*стон*";
	}
	ApplyEffectToObject(DURATION_TYPE_INSTANT, eDamageOrHeal, oPC);
	AssignCommand(oPC, SpeakString(sDamageOrHeal));
	
	if(GetCurrentHitPoints(oPC) <= -10)
	{
		ApplyEffectToObject(DURATION_TYPE_INSTANT, eDeath, oPC);
		FloatingTextStringOnCreature ("Смерть", oPC);
	}
}
//==========================
}
Ошибка в скрипте? Где-то в основе из основ? Или его надо хоть раз запустить извне?
__________________
Истина там, во тьме, и во тьме ты иди - мыслящий бродит во тьме.
В себя самого загляни, открой свою дорогу в Ничто.
В Ничто ты войди, во тьму, и пойми:
Пока ты во тьме, не может она быть Ничем - ведь там ты.
Elisar Kronvell is offline   Ответить с цитированием
Старый 20.11.2007, 20:53   #52
Mozon
Рауринец
 
Аватар для Mozon
 
Регистрация: 16.06.2007
Адрес: Город Зеленого цвета
Сообщения: 192
Власть репутации: 626 Mozon У него еще все впереди!
По умолчанию Re: Вопрос: OnPlayerDying

Многа букаф! Ничего не понятно!
__________________
Я!.. И только Я!
Mozon is offline   Ответить с цитированием
Старый 20.11.2007, 21:40   #53
Elisar Kronvell
Гость
 
Аватар для Elisar Kronvell
 
Регистрация: 11.11.2007
Адрес: Санкт-Петербург
Сообщения: 25
Власть репутации: 0 Elisar Kronvell У него еще все впереди!
По умолчанию Re: Вопрос: OnPlayerDying

Mozon
Когда здоровье персонажа опускается до 0 или ниже переменной "iDying", висящей на нем, присваивается значение 1.

Каждые 6 секунд запускается скрипт, проверяющий - нет ли кого с переменной "iDying" равной 1. Но либо скрипт не работает вовсе, либо Planetouched ошибся и OBJECT_SELF возвращает отнюдь не игрока, т.к. в этом случае не получается даже вывести FloatStringOnCharacter с текстом "Работа скрипта началась" над oPC, где oPC есть OBJECT_SELF.

P.S. Странно, старался писать как можно более понятно и аккуратно. Только комментить не стал, потому-что еще не понял - что надо комментить. Признайся - хоть читал? Или просто просмотрел по диагонале? ^_-
__________________
Истина там, во тьме, и во тьме ты иди - мыслящий бродит во тьме.
В себя самого загляни, открой свою дорогу в Ничто.
В Ничто ты войди, во тьму, и пойми:
Пока ты во тьме, не может она быть Ничем - ведь там ты.
Elisar Kronvell is offline   Ответить с цитированием
Старый 21.11.2007, 07:01   #54
Moonk
Бывалый Рауринец
 
Аватар для Moonk
 
Регистрация: 29.05.2007
Сообщения: 837
Власть репутации: 659 Moonk У него еще все впереди!
По умолчанию Re: Вопрос: OnPlayerDying

Mozon флудер
не обращай внимания


если проблема работать с -ХП, может персонажу добавлять 10 ХП?
и все, что вы хотите сделать, производить в интервале от 0 до 10, а не от - 10 до 0
Moonk is offline   Ответить с цитированием
Старый 21.11.2007, 07:30   #55
Nuligen
Рауринец
 
Аватар для Nuligen
 
Регистрация: 11.07.2007
Сообщения: 449
Власть репутации: 636 Nuligen У него еще все впереди!
По умолчанию Re: Вопрос: OnPlayerDying

2Moonk проблема что на визарда 1-го левела этот скрипт тоже распростаняется, а у него всего 4 хп
__________________
Безумие правит миром
Nuligen is offline   Ответить с цитированием
Старый 21.11.2007, 07:45   #56
Moonk
Бывалый Рауринец
 
Аватар для Moonk
 
Регистрация: 29.05.2007
Сообщения: 837
Власть репутации: 659 Moonk У него еще все впереди!
По умолчанию Re: Вопрос: OnPlayerDying

а в чем проблема?
10 добавочных ХП не юзабельны

маг (а вообще кто угодно, но для примера возьмем мага) с 4 мя ХП
умирает при получениии урона 4 и более
плюсуем ему 10 ХП
итого 14 ХП, но делать проверку:
если ХП <= 10, то "смерть" с запуском скрипта, где ХП минусуются проверки идут какие-нибудь и т.д. (хз что они тут вообще мутят ^^ =) )
Moonk is offline   Ответить с цитированием
Старый 21.11.2007, 07:45   #57
Elisar Kronvell
Гость
 
Аватар для Elisar Kronvell
 
Регистрация: 11.11.2007
Адрес: Санкт-Петербург
Сообщения: 25
Власть репутации: 0 Elisar Kronvell У него еще все впереди!
По умолчанию Re: Вопрос: OnPlayerDying

Проблема в том, что событие Module_OnHeartbeat не обрабатывается впринципе или обрабатывается, но OBJECT_SELF != Текущий персонаж игрока

А по поводу ХП - это вобще не проблема, т.к. вместо хп можно юзать переменную. Проблема описана выше.
__________________
Истина там, во тьме, и во тьме ты иди - мыслящий бродит во тьме.
В себя самого загляни, открой свою дорогу в Ничто.
В Ничто ты войди, во тьму, и пойми:
Пока ты во тьме, не может она быть Ничем - ведь там ты.
Elisar Kronvell is offline   Ответить с цитированием
Старый 21.11.2007, 08:10   #58
Elisar Kronvell
Гость
 
Аватар для Elisar Kronvell
 
Регистрация: 11.11.2007
Адрес: Санкт-Петербург
Сообщения: 25
Власть репутации: 0 Elisar Kronvell У него еще все впереди!
По умолчанию Re: Вопрос: OnPlayerDying

Заменил OBJECT_SELF на GetFirstPC - заработало. Значит OBJECT_SELF возвращает не персонажа, а нечто иное. Внимание вопрос - что делать?
__________________
Истина там, во тьме, и во тьме ты иди - мыслящий бродит во тьме.
В себя самого загляни, открой свою дорогу в Ничто.
В Ничто ты войди, во тьму, и пойми:
Пока ты во тьме, не может она быть Ничем - ведь там ты.
Elisar Kronvell is offline   Ответить с цитированием
Старый 21.11.2007, 08:36   #59
Moonk
Бывалый Рауринец
 
Аватар для Moonk
 
Регистрация: 29.05.2007
Сообщения: 837
Власть репутации: 659 Moonk У него еще все впереди!
По умолчанию Re: Вопрос: OnPlayerDying

мне еще подруге математику решать
так что вникая в строки скрипта мозг насиловать не собираюсь
=)
но
на сервере реализовано сохранение персонажа
вот и сделать "предсмертный скрипт" аналогичным.
Moonk is offline   Ответить с цитированием
Старый 21.11.2007, 10:32   #60
Planetouched
Зеленый Рауринец
 
Регистрация: 05.05.2007
Сообщения: 94
Власть репутации: 625 Planetouched У него еще все впереди!
По умолчанию Re: Вопрос: OnPlayerDying

возможно OBJECT_SELF указатель на модуль.. тогда используй механизм GetFirstPC/GetNextPC
__________________
Эх помните как в наше время было хорошо. И THAH0 был и AC в минус шел.
Planetouched is offline   Ответить с цитированием
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
You may not post new threads
You may not post replies
You may not post attachments
You may edit your posts

BB code is Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Часовой пояс GMT, время: 10:28.

Powered by vBulletin Version R.I.P., Copyright ©2000-2024, Jelsoft Enterprises Ltd. | Оформление: raurin.ru