20.11.2007, 19:26 | #51 |
Гость
Регистрация: 11.11.2007
Адрес: Санкт-Петербург
Сообщения: 25
Власть репутации: 0
|
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; } Код:
#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); } Код:
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); } } //========================== }
__________________
Истина там, во тьме, и во тьме ты иди - мыслящий бродит во тьме. В себя самого загляни, открой свою дорогу в Ничто. В Ничто ты войди, во тьму, и пойми: Пока ты во тьме, не может она быть Ничем - ведь там ты. |
20.11.2007, 20:53 | #52 |
Рауринец
Регистрация: 16.06.2007
Адрес: Город Зеленого цвета
Сообщения: 192
Власть репутации: 627
|
Re: Вопрос: OnPlayerDying
Многа букаф! Ничего не понятно!
__________________
Я!.. И только Я! |
20.11.2007, 21:40 | #53 |
Гость
Регистрация: 11.11.2007
Адрес: Санкт-Петербург
Сообщения: 25
Власть репутации: 0
|
Re: Вопрос: OnPlayerDying
Mozon
Когда здоровье персонажа опускается до 0 или ниже переменной "iDying", висящей на нем, присваивается значение 1. Каждые 6 секунд запускается скрипт, проверяющий - нет ли кого с переменной "iDying" равной 1. Но либо скрипт не работает вовсе, либо Planetouched ошибся и OBJECT_SELF возвращает отнюдь не игрока, т.к. в этом случае не получается даже вывести FloatStringOnCharacter с текстом "Работа скрипта началась" над oPC, где oPC есть OBJECT_SELF. P.S. Странно, старался писать как можно более понятно и аккуратно. Только комментить не стал, потому-что еще не понял - что надо комментить. Признайся - хоть читал? Или просто просмотрел по диагонале? ^_-
__________________
Истина там, во тьме, и во тьме ты иди - мыслящий бродит во тьме. В себя самого загляни, открой свою дорогу в Ничто. В Ничто ты войди, во тьму, и пойми: Пока ты во тьме, не может она быть Ничем - ведь там ты. |
21.11.2007, 07:01 | #54 |
Бывалый Рауринец
Регистрация: 29.05.2007
Сообщения: 837
Власть репутации: 660
|
Re: Вопрос: OnPlayerDying
Mozon флудер
не обращай внимания если проблема работать с -ХП, может персонажу добавлять 10 ХП? и все, что вы хотите сделать, производить в интервале от 0 до 10, а не от - 10 до 0 |
21.11.2007, 07:30 | #55 |
Рауринец
Регистрация: 11.07.2007
Сообщения: 449
Власть репутации: 637
|
Re: Вопрос: OnPlayerDying
2Moonk проблема что на визарда 1-го левела этот скрипт тоже распростаняется, а у него всего 4 хп
__________________
Безумие правит миром |
21.11.2007, 07:45 | #56 |
Бывалый Рауринец
Регистрация: 29.05.2007
Сообщения: 837
Власть репутации: 660
|
Re: Вопрос: OnPlayerDying
а в чем проблема?
10 добавочных ХП не юзабельны маг (а вообще кто угодно, но для примера возьмем мага) с 4 мя ХП умирает при получениии урона 4 и более плюсуем ему 10 ХП итого 14 ХП, но делать проверку: если ХП <= 10, то "смерть" с запуском скрипта, где ХП минусуются проверки идут какие-нибудь и т.д. (хз что они тут вообще мутят ^^ =) ) |
21.11.2007, 07:45 | #57 |
Гость
Регистрация: 11.11.2007
Адрес: Санкт-Петербург
Сообщения: 25
Власть репутации: 0
|
Re: Вопрос: OnPlayerDying
Проблема в том, что событие Module_OnHeartbeat не обрабатывается впринципе или обрабатывается, но OBJECT_SELF != Текущий персонаж игрока
А по поводу ХП - это вобще не проблема, т.к. вместо хп можно юзать переменную. Проблема описана выше.
__________________
Истина там, во тьме, и во тьме ты иди - мыслящий бродит во тьме. В себя самого загляни, открой свою дорогу в Ничто. В Ничто ты войди, во тьму, и пойми: Пока ты во тьме, не может она быть Ничем - ведь там ты. |
21.11.2007, 08:10 | #58 |
Гость
Регистрация: 11.11.2007
Адрес: Санкт-Петербург
Сообщения: 25
Власть репутации: 0
|
Re: Вопрос: OnPlayerDying
Заменил OBJECT_SELF на GetFirstPC - заработало. Значит OBJECT_SELF возвращает не персонажа, а нечто иное. Внимание вопрос - что делать?
__________________
Истина там, во тьме, и во тьме ты иди - мыслящий бродит во тьме. В себя самого загляни, открой свою дорогу в Ничто. В Ничто ты войди, во тьму, и пойми: Пока ты во тьме, не может она быть Ничем - ведь там ты. |
21.11.2007, 08:36 | #59 |
Бывалый Рауринец
Регистрация: 29.05.2007
Сообщения: 837
Власть репутации: 660
|
Re: Вопрос: OnPlayerDying
мне еще подруге математику решать
так что вникая в строки скрипта мозг насиловать не собираюсь =) но на сервере реализовано сохранение персонажа вот и сделать "предсмертный скрипт" аналогичным. |
21.11.2007, 10:32 | #60 |
Зеленый Рауринец
Регистрация: 05.05.2007
Сообщения: 94
Власть репутации: 626
|
Re: Вопрос: OnPlayerDying
возможно OBJECT_SELF указатель на модуль.. тогда используй механизм GetFirstPC/GetNextPC
__________________
Эх помните как в наше время было хорошо. И THAH0 был и AC в минус шел. |
|
|