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

 
 
Опции темы Опции просмотра
Старый 20.11.2007, 19:26   #11
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   Ответить с цитированием
 


Ваши права в разделе
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, время: 14:34.

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