Помощь - Поиск - Пользователи - Календарь
Полная версия: PC scripting :P
Город Мастеров > РЕДАКТОРЫ > Шарды рунета
2_advanced
сабж.
кто-нибудь извращался с редактированием имён скриптов, вешаемых на игроков?
default пашет только как херт бит.. и имхо легче самоповторяющееся действие повесить

в общем задача - повесить
on_spell_cast
on_attack
on_death (ну это не обязательно)
и т.п..
Lex
пробовал через лето написать в слоты игрока другие скрипты. Вместо дефолта.
Не вышло.
Leon PRO
Я пробовал, но как только игра сохраняет перса, у него тут-же все переменные в полях скриптинга чар-файла (bic) становятся "default"
LArden
А попробуйте создать в инвентаре чара некий нон-дроп предмет и вешать переменные на него. Может так получится?
Lex
LArden, или туплю я, или одно из двух.. Но причем тут переменные? Мы говорим про скрипты на игрока. Типа onDamage, onDeath (это можно через модульный скрипт сделать, так что наф), onSpellCastAt и прочее..
helvene
QUOTE
А попробуйте создать в инвентаре чара некий нон-дроп предмет и вешать переменные на него. Может так получится?

Так не просто получится - так делают.
K.SpecTr
QUOTE (2_advanced @ Jun 27 2005, 01:29)
default пашет только как херт бит.. и имхо легче самоповторяющееся действие повесить

в общем задача - повесить
on_spell_cast
on_attack
on_death (ну это не обязательно)
и т.п..

default "пашет" как все эти скрипты вместе взятые, не зря он в каждом слоте. И срабатывает он по всем эвентам для этих слотов.
А что если использовать его как контейнер: все on_xxx как инклюды и запускать соответствующие функции, определяя через свитч, что конкретно было причиной вызова скрипта?
Т.е. если у нас причина атака, то запускаем on_attack - засечена смерть, то on_death.
2_advanced
это будет зверский лаг black eye.gif
Lex
"определяя через свитч, что конкретно было причиной вызова скрипта?"
а это как??
Я не придумал пока, как это сделать.
Если напишешь, дай мне. smile.gif У меня Сингл, лаги не будут заметны smile.gif
K.SpecTr
Что-то в этом роде:
CODE
void main()
{
// def_xxxx - скрипты на эвенты. Инклюды они или нет, это другой вопрос.
// Не вижу причин для бешеного лага.
if(GetSpawnInCondition(NW_FLAG_PERCIEVE_EVENT) && GetLastPerceptionSeen())
   {
       ExecuteScript(def_percieve,OBJECT_SELF);
   }
if(GetSpawnInCondition(NW_FLAG_DAMAGED_EVENT))
   {
       ExecuteScript(def_damaged,OBJECT_SELF);
   }
if(GetSpawnInCondition(NW_FLAG_DEATH_EVENT))
   {
        ExecuteScript(def_death,OBJECT_SELF);
   }
if(GetSpawnInCondition(NW_FLAG_SPELL_CAST_AT_EVENT))
   {
       ExecuteScript(def_spellcast,OBJECT_SELF);
   }
}
2_advanced
NWNXом менял скрипты, повешанные на чара.. - сервак падал при первом вызове любого скрипта..
буду ковырять дальше =Р
dumbo
K.SpecTr
default скрипт работает на PC только как хб, несмотря на то, что прописан во всех слотах - проверено путем написания оного. несмотря на активное поведение PC, тестовая строка падала в лог с методичностью хб. и не более.

а тот скрипт, что ты написал... как бы это так помягче описать... swoon.gif wink.gif
K.SpecTr
dumbo
Ну, как бы это так помягче сказать, я никогда (почти) умным скриптером не прикидывался. lol.gif
Я лишь поставил вопрос: может быть можно и так. wink.gif
Zirrex
У меня вопрос такого плана. Если уж заговорили про скрипты, которые вешаются на персонажа игрока, то как отличить, кто первый начал атаку. С монстрами это просто, у них свои скрипты, а вот что делать с двумя дерущимися персонажами? Дело в том, что угадать, кто виноват, когда первоуровневый персонаж нападает на высокоуровневого, сложно. А виноват чаще именно тот, кто умер, но попробуй это докажи. Поэтому мне и интересно, можно ли как-нибудь это сделать?
-=PsyXaoc=-
Наверное все же сюда... Такс
Есть две команды А и Б, они постоянно воют,
Есть нондроп дивайс, на него нужно положить скрипт, чтобы:
1)Записывал кол-во убийств(фрагов) (число X)
2)При убийтве перса ниже чем на 10 уровне вычитать из X единицу
3)Команда, при которой можно узнать хонор статус другого игрока...

Почти уверен, что такая херь есть на волте, только никак не найду...
dumbo
QUOTE (-=PsyXaoc=- @ Jul 19 2005, 00:14)
1)Записывал кол-во убийств(фрагов) (число X)

лучший! good.gif
систему такую написать несложно, но нафиК никому, кроме тебя, не надо.
Добавлено в [mergetime]1121737902[/mergetime]
да, по ТЕМЕ: скрипты на PC, кроме хб, просто не вызываются, поэтому менять их названия ни в памяти игры, ни в сэйве смысла не имеет.
-=PsyXaoc=-
dumbo
ну раз не сложно, неужели нельзя помочь?
_kaa_
Ты сам начни, будут вопросы - ответим. Никто делать за тебя не станет, но поможем с тем, с чем с ходу не справишся.
В двух словах где тебе рыть:

QUOTE

1)Записывал кол-во убийств(фрагов) (число X)


Тебе нужно отслеживать событие "смерть игрока" - это OnPlayerDying, OnPlayerDeath (в свойствах модуля).
Первое срабатывает, когда у игрока меньше 0 хитпоинтов, второе - когда -10 и меньше.
Если кто-то умирает - генерируется эти события, в них можно получить кто умер
Neverwinter Script Source
object oPC =GetLastPlayerDied();
и кто его убил
Neverwinter Script Source
object oKiller=GetLastHostileActor()
.
QUOTE

2)При убийтве перса ниже чем на 10 уровне вычитать из X единицу

Это гораздо проще. У тебя уже есть убитый и убийца, осталось узнать уровень обоих и сравнить.
Neverwinter Script Source
int PC_level= GetHitDice(oPC); // вернет тебе уровень игрока oPC.
int Killer_level = GetHitDice(oKiller); // уровень убийцы
int frag = 0;
if (Killer_level - PC_level > 10)
    frag = -1
else
    frag = 1;


Теперь надо записать все на вещь:
Neverwinter Script Source
object oNoDropItem = GetItemPossessedBy(oPC,"<тег вещи>");
int Frags = GetLocalInt(oNoDropItem,"Frags"); // прочитали сколько было фрагов
Frags += frag;                                // Frags = Frags + frag, добавили или уменьшили
GetLocalInt(oNoDropItem,"Frags",Frags);      //записали новое значение.


Как только будет сохранение персонажа (при его выходе или при вызове ExportAllCharacters(),ExportSingleCharacter(oPC)) его фраги запишутся в .bic файл игрока, т.е. туда же куда пишется информация об игроке, его уровне, вещях и т.п.

QUOTE

3)Команда, при которой можно узнать хонор статус другого игрока...

Если "хонор" в твоем понимании количество фрагов:

Тебе нужна вещь со свойством Cast Spell:Unique power (unlimit). При ее активации вызывается событие модуля onActivateItem(), в нем тебе нужно проверить, что активированна именно твоя вещь. Скажем вещь твоя имеет тег "honor_viewer"
Neverwinter Script Source
//module onActivateItem()
    object oItem=GetItemActivated();        //что за вещь вызвала скрипт
    object oActivator=GetItemActivator();  //кто активировал
    object oTarget = GetItemActivatedTarget();  //на кого активировали
    string sTag = GetTag(oItem);
   
    if (sTag == "honor_viewer") // если активировали твою вещь, то
    {
        SendMessageToPC(oActivator,  //послать сообщение тому, кто активировал вещь
                        IntToSting(  //посылать можно только строки, поэтому преобразуем число в строку
                        GetLocalInt(GetItemPossessedBy(oTarget,"<тег вещи но дроп>"),"Frags")));
    }


Вариант без проверок. Проверки приделывай сам, надо убедиться что oTarget - игрока (GetIsPC()), что
GetItemPossessedBy(oTarget,"<тег вещи но дроп>") вернет тебе объект, а не OBJECT_INVALID и т.п.
Vanes
QUOTE
систему такую написать несложно, но нафиК никому, кроме тебя, не надо

РПшникам может и не надо...
а у меня такая штука с февраля месяца крутится... только не через итем, а в БД...
-=PsyXaoc=-
_kaa_
good.gif Респект, разобрался
Valleo
QUOTE (Zirrex @ Jul 5 2005, 23:02)
У меня вопрос такого плана. Если уж заговорили про скрипты, которые вешаются на персонажа игрока, то как отличить, кто первый начал атаку. С монстрами это просто, у них свои скрипты, а вот что делать с двумя дерущимися персонажами? Дело в том, что угадать, кто виноват, когда первоуровневый персонаж нападает на высокоуровневого, сложно. А виноват чаще именно тот, кто умер, но попробуй это докажи. Поэтому мне и интересно, можно ли как-нибудь это сделать?

Насчет кто кого првым ударил - на броню повешать OnHitSpellCast и вызывать через него скрипт глобальный, который и будет определять кто кого первым ударил. Главное прикрутить каждой броньке\одежке эту фишку через AddItemProperty, вроде так...

И вообще - я делал через default очень хорошую систему, она осталась в моем первом модуле шарда Энтарион. На второй модуль не буду переводить, так как система всетаки давала хорошенькие лаги, так как скрипт вызывался на КАЖДЫЙ эвент прсонажа.
2_advanced
>OnHitSpellCast
я использовал это для *портящихся вещей и оружия* ((с) biggrin.gif ) - ударил кто-то кого-то - и у него ножик затупился и броньку чужую/щит попортил smile.gif (нафига это нужно? - основа экономики.. )

а на счет - кто кого первым ударил - если только дрыномахальщик дрыномахальщика.. а если кастер?
вставлять что-то для проверки перед запуском соответствующего касту скрипта? имхо изврат маллоэффективный
dumbo
QUOTE (2_advanced @ Jul 31 2005, 01:59)
а на счет - кто кого первым ударил - если только дрыномахальщик дрыномахальщика.. а если кастер?

это как раз не есть проблема - spell-hooking(небольшое описание) на то имеется.
2_advanced
а если спелл на область? подвалил злобный сорк и кинул баншу - и спеллхук будет перебирать всех существ в области?
в общем это грузный (и глючащий) гемор ни кому не нужный..
Valleo
Кстати, энта, не в тему конечно, но почти по теме.

Leto теперь НЕ может прикрутить к чару SpecAbilList где содержатся спеллы как специальные абилки персонажа. Это было пофиксено биоварями в патче 1.64.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.
Invision Power Board © 2001-2024 Invision Power Services, Inc.