Показать сообщение отдельно
Старый 20.11.2007, 17:34   #48
Necrosis
Зеленый Рауринец
 
Регистрация: 30.07.2007
Адрес: Зентил Кип
Сообщения: 160
Власть репутации: 621 Necrosis У него еще все впереди!
По умолчанию Re: Вопрос: OnPlayerDying

Цитата:
Сообщение от Elisar Kronvell Посмотреть сообщение
А мне не верится, что ты сможешь сочинить действительно нечто сложное и реализовать скриптами с генерацией по ходу
Специально для Elisar Kronvell
оффтоп
Написал тебе твои скрипты по альтернативной системе смерти

Пишу как сделать так, чтобы игрок подходил к порталу, решал задачу, портал открывался, игрок входил в портал
Для начала это:

Скрипт для прослушывания ответов игрока порталом
допустим назовем его listen
Цитата:
//by Necrosis - 2007 =)
// Это пример скрипта который будет открывать портал обратно в мир живых, если вы правильно решили мат.задачу или ответили на вопрос правильно
// Если PC находится недалеко от портала( у меня в 3 шагах) и правильно решает задачу
// портал открывается( Примечание: чтобы ответить, нужно нажать Enter и ввести ответ.
#include "proverka_listener"

void main()
{
object oSpeaker = OBJECT_SELF;
string sText = GetLastHeardText();



object oPortal = GetNearestObjectByTag("Тэг портала",oSpeaker);
if (oPortal != OBJECT_INVALID) {
string openText = GetLocalString(oPortal,"Ответ на задачу");
if (GetDistanceBetween(oSpeaker,oPortal) < 3.0) {
if (FindSubString(sText,openText) != -1) {
AssignCommand(oPortal,ActionOpenDoor(OBJECT_SELF)) ; // Портал, в данном случае я по умолчанию взял некую дверь, открывается
AssignCommand(oPortal,SpeakString("Задача решена правильно, вернись в мир живых!"));
AddJournalQuestEntry("ВЫ ВЕРНУЛИСЬ В МИР ЖИВЫХ", 2, oSpeaker, FALSE, FALSE, FALSE); // Это запись в дневник
} else {
AssignCommand(oPortal,SpeakString("Задача решена неверно, попытайтесь еще раз"));
}
} else {
AssignCommand(oPortal,SpeakString("Портал: Я не слышу вас, подойдите ближе")); // Если PC стоит слишком далеко от портала
}
}
}


Скрипта паса, назовем pass
Цитата:
// Это выдает портал игроку( некую задачу допустим), можно впиндюрить сюда Random и несколько вариантов ответов
void main()
{
ActionSpeakString("Чтобы портал открылся, реши задачу: "+GetLocalString(OBJECT_SELF,"Ответ на задачу"));
}
Скрипт proverka_listener

Цитата:

object GetLastHeardSpeaker();


string GetLastHeardText();

string GetLastHeardText();


int GetLastHeardMode();


object GetLastHeardListener();

void SupressLastHeardText();

void SendChatMessage(string sMessage, object oSender, int nChannel, object oRecipient=OBJECT_INVALID);

const string DMFI_HEARD = "sDMFIHeard";

void SetLastHeardText(object oSpeaker, string sText)
{
SetLocalString(oSpeaker, DMFI_HEARD,sText);
}

string GetLastHeardText()
{
return(GetLocalString(OBJECT_SELF, DMFI_HEARD));
}

const string DMFI_SPEAKER = "oDMFISpeaker";

void SetLastHeardSpeaker(object oSpeaker)
{
SetLocalObject(OBJECT_SELF, DMFI_SPEAKER,oSpeaker);
}

object GetLastHeardSpeaker()
{
return (GetLocalObject(OBJECT_SELF, DMFI_SPEAKER));
}


const string DMFI_HEARD_MODE = "iDMFIMode";

void SetLastHeardMode(object oSpeaker, int nMode) {
SetLocalInt(oSpeaker,DMFI_HEARD_MODE,nMode);
}

int GetLastHeardMode() {
return GetLocalInt(OBJECT_SELF,DMFI_HEARD_MODE);
}


const string DMFI_OBJECT_LISTENER = "oDMFIListener";

object GetLastHeardListener() {
return GetLocalObject(OBJECT_SELF,DMFI_OBJECT_LISTENER);
}

void SetLastHeardListener(object oSpeaker, object oTold) {
SetLocalObject(oSpeaker,DMFI_OBJECT_LISTENER,oTold );
}

const string DMFI_HEARD_SUPRESS = "bDMFISupress";

int GetIsLastHeardTextSupressed(object oSpeaker)
{
return GetLocalInt(oSpeaker,DMFI_HEARD_SUPRESS);
}

void SupressLastHeardText()
{
SetLocalInt(OBJECT_SELF,DMFI_HEARD_SUPRESS,1);
}

void DeleteLastHeardData(object oSpeaker)
{
DeleteLocalObject(oSpeaker, DMFI_SPEAKER);
DeleteLocalString(oSpeaker, DMFI_HEARD);
DeleteLocalInt(oSpeaker,DMFI_HEARD_MODE);
DeleteLocalObject(oSpeaker,DMFI_OBJECT_LISTENER);
DeleteLocalInt(oSpeaker,DMFI_HEARD_SUPRESS);
}

string GetListenHandlerScript()
{
return(GetLocalString(GetModule(),"&DMFI_LISTENER" ));
}

void SetListenHandlerScript(string scriptName)
{
SetLocalString(GetModule(),"&DMFI_LISTENER",script Name);
}
Дальше создаешь placeable портал ака дверь или ворота, заходишь в свойства, дальше Scripts -> Variables, добавляешь Value Name Ответ на задачу
Value Float 0
Value Int 0
ValueString здесь пишешь задачу, например уравнение из элементарной математики
ValueUnsigned 0
ValueType String

Идем дальше, ставишь на OnFailToOpen мой скрипт pass

Ну и не забудь порталу поставить уникальный тэг и вписать его в скрипт listen (Тэг портала)
Necrosis is offline   Ответить с цитированием