Помощь - Поиск - Пользователи - Календарь
Полная версия: Одиночный вопрос
Город Мастеров > РЕДАКТОРЫ > Neverwinter Nights 2 Obsidian Toolset
Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17
MpakOfChaos
Я хочу написать скрипт отсчета времени, но у меня он не работаетsad.gif((
выглядит это так
Neverwinter Script
int i;
for (i = 30; i>0; i--)
{
ActionWait(1.0f);
SendMessageToPC(oPC,"Осталось: " + IntToString(i));
}

(это только кусок кода) скрипт компилится но выводит мне список от 30 до 1 сразу по срабатыванию скрипта
Lex
э.. ессно сразу. Работе цикла ничего не мешает (ожидание 1 секунду - относится к действиям объекта, а не к работе цикла).
Тут имхо лучше рекурсивный запуск с секундной задержкой через DelayCommand.
MpakOfChaos
Спасибо, значит только так...

Нубский вопрос - какой командой можно вывести вообщение в общий чат, чтобы оно над чаром появилось?
Lex
над и висело - SpeakString
над и улетало (+ отобразилось в логе) - FloatingText что-то там.
MpakOfChaos
еще вопросsmile.gif) как можно генерировать лицо спутнику? т.е. как програмно менять свойства объекта?

И как можно получень значени навыков? (Алхимия, запугивание и т.д.)

На вопрос про навыки уже нашел ответ, сориsmile.gif а как сообщения редактировать? (на форуме)
Lex
Цитата(MpakOfChaos @ Apr 23 2008, 09:55) *
еще вопросsmile.gif) как можно генерировать лицо спутнику? т.е. как програмно менять свойства объекта?

серия функций *BodyPart*. Фильтр на эту тему поковыряй.
Цитата(MpakOfChaos @ Apr 23 2008, 09:55) *
как сообщения редактировать? (на форуме)

кнопка Edit под постом

будет доступна после 10 сообщений на форуме.
MpakOfChaos
Немагу найти ничего похожего, если такая команда и есть, то в какомто инклуде.

Подскажи где можно найти?
Buzzard
Я извиняюсь за глупый вопрос но все же где и какое свойство нужно установить чтобы после смерти игрока всплывал диалог "Загрузить/Главное меню" вместо "Возродится/Главное меню".
MpakOfChaos
Подскажите, как скриптово редактировать свойства объектов, и в часности лица нпс?
Lorendroll
Buzzard, вовсе не глупый вопрос, тебе надо посмотреть в свойства модуля и отредактировать скрипт на вкладке On Player Death. В стандартном скрипте смерти, например, присутствует такая строчка:
CODE
DelayCommand(2.5, PopUpGUIPanel(oPlayer,GUI_PANEL_PLAYER_DEATH));

Как я понял, это как раз то что тебе нужно.

Да, я не знаю точно как будет работать эта команда в режиме онлайн и в режиме сингл. Возможно, по-разному, не проверял. Но если хочешь, можешь почитать подробнее про эти гуи-панельки и их создание в туториале.
Lorendroll
MpakOfChaos, насколько мне известно этого нельзя сделать sad.gif Можно только незаметно подменить одного НПЦ на другого (из палитры).
Aiwan
Можно из закрытой области. Одного туда отправил, другого сюда. smile.gif У меян целые стадионы НПС в закрытых локах. Создавать НПС в сингле это лаг. На шарде нет.
MpakOfChaos
тогда как заставить корабль плыть (лететь) в точку и можноли сделать так чтобы чар на нем стоял?(хотя возможность последнего вызывает большые сомнения)

и как наложить на чара визуальный эффект (при воскрешении)
Kirald
Три маленьких вопроса:

1. В игре, в дневнике есть закладка "Заметки", как можно добавить в свой мод триггер или диалоговый скрипт, чтоб там (в заметках) появилась запись.

2. Какими функциями можно наложить визуальный эффект на чара. (Тоесть хочу чтоб при диалоге со жрецом глав героя лечили и был эфект)

3. Если на второй вопрос нет ответа (или очень сложный) то: Каким скриптом в диалоге заставить НПС читать определенное заклинание на чара.

Заранее Атомное СпасиБОООООООООООООМ
Lex
Цитата(MpakOfChaos @ May 6 2008, 08:31) *
тогда как заставить корабль плыть (лететь) в точку и можноли сделать так чтобы чар на нем стоял?(хотя возможность последнего вызывает большые сомнения)

прописать существо с моделью корабля в 2да и им уже управлять на карте. Ибо объекты двигаться не могут (кроме как согласно своей анимации).
Цитата(MpakOfChaos @ May 6 2008, 08:31) *
и как наложить на чара визуальный эффект (при воскрешении)

ApplyEffectToObject + EffectVisualEffect. Константы для визуалки и параметры для наложения см в скрипт. редакторе.
Цитата(Kirald @ May 6 2008, 12:56) *
1. В игре, в дневнике есть закладка "Заметки", как можно добавить в свой мод триггер или диалоговый скрипт, чтоб там (в заметках) появилась запись.

насколько я знаю, заметки это то, что сам игрок пишет в журнал. Скриптам туда доступа нет. Только квестовые записи.
Цитата(Kirald @ May 6 2008, 12:56) *
2. Какими функциями можно наложить визуальный эффект на чара. (Тоесть хочу чтоб при диалоге со жрецом глав героя лечили и был эфект)

см выше, но вместо (или в дополнении к) визуалки тебе нужен EffectHeal и прочие Effect*. Там их много.
Цитата(Kirald @ May 6 2008, 12:56) *
3. Если на второй вопрос нет ответа (или очень сложный) то: Каким скриптом в диалоге заставить НПС читать определенное заклинание на чара.

фу-я ActionCastSpellAtObject. Параметры и прочие особености см в скрипт-редакторе.
MpakOfChaos
1. Эффект не отображается в чем ошибка?
Код
ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectVisualEffect(VFX_IMP_RESTORATION),oPC);

2. Я хочу сделать свиток телепорта, но немогу найти подходящий обработчикsad.gif
3. У меня проблема, если в сетевой игре у разных игроков есть спутники и они вступают в пати, то спутник вступившего исчезает, как этого избежать?
Melisse
1. Вообще-то правильно написано. Так вырывать функцию из скрипта...незя. Приводил бы часть скрипта или весь...а то может дело не в ней - откуда ты так уверен?)
2.Обработчик чего?...2да? или чего?..Если 2да - то можно блокнотом.
2.Это, если я правильно поняла - разговор о сингле по сетке..если - да то тогда, навскидку, попробовать копаться в скриптах henchmen или, может, это просто баг движка нвн - таких кстати не мало, что печально)
MpakOfChaos
1.
on player death
Код
#include "sc_respawn"

void main()
{
object oPC = GetLastPlayerDied();

if (GetIsPC(oPC) == TRUE)
{
object oResp;
if (GetLocalString(oPC,"Resp_Point") == "") SetLocalString(oPC,"Resp_Point","wspawn_01");
oResp = GetObjectByTag(GetLocalString(oPC,"Resp_Point"));
resp(30,oPC,oResp);
}
}

Код
#include "nw_i0_plot"

void resp(int i, object oPC, object oResp)
{
if (GetIsDead(oPC) && (i > 0))
{
FloatingTextStringOnCreature("Возрождение через " + IntToString(i) + " секунд", oPC, FALSE, 0.9f);
i--;
DelayCommand(1.0f,resp(i,oPC,oResp));
} else if (GetIsDead(oPC))
    {
    AssignCommand(oPC,ActionJumpToObject(oResp,FALSE));
    ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectResurrection(), oPC);
    ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectHeal(GetMaxHitPoints(oPC)), oPC);
    RemoveEffects(oPC);
    ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectVisualEffect(VFX_IMP_RESTORATION),oPC);
    }
}

2. Я просто хочу чтобы при использовании предмета срабатывал скрипт, как это сделать.
3. Это мой модуль(сетевой), в идее задумывалось чтобы каждый игрок мог с собой таскать наемника (что удалось реализовать), а вот при вступлении в пати начинались проблемы.
Lex
для VFX_IMP_* вроде бы используется не *_INSTANT, а *_PERMANENT константа. Попробуй ее.
Цитата(MpakOfChaos @ May 6 2008, 17:02) *
2. Я хочу сделать свиток телепорта, но немогу найти подходящий обработчик

зависит от реализации телепорта. Самая простая: предмет или свиток с заклинанием Unique Power Self (или как-то так). Далее (если у тебя стандартные скрипты на слотах модуля) просто делается скрипт с именем = тэгу твоего свитка (например ITM_SCROLL_PORT). Шаблон для этого скрипта берется из example.nss (Более точное название шаблона можно найти в стандартных модульных скриптах, например скрипте на слоте Item Equiped). В этом шаблоне будет обработка нескольких событий, которые связаны с предметом: появился у игрока, оставлен, активирован, одет, снят, на него наложено заклинание и что-то там еще. Тебе соотв. нужен вариант с активацией. Туда и пиши что нужно.
Цитата(MpakOfChaos @ May 6 2008, 17:02) *
3. У меня проблема, если в сетевой игре у разных игроков есть спутники и они вступают в пати, то спутник вступившего исчезает, как этого избежать?

копай в хенчмановской библе функцию типа AddHenchman или что-то похожее. Проще наверное найти там где-нить AddToParty и посмотреть в теле каких функций оно есть. Их и смотреть.
MpakOfChaos
Неполучается наложить эффект на чара, напишите плз пример какойнибудь (толдбко рабочий).
как усадить НПС на стул?
azathoth
1. У ApplyEffectToObject есть одно но - если указать задержку, то нужно писать так:
Neverwinter Script
effect eEffect = Effect...(...);
....
ApplyEffectToObject(..., eEffect,...)
....

и исключения лучше превращать в правила.
DURATION_TYPE_INSTANT - правильно указано, да и в этой функции игра относится к константам на удивление демократично.
Примеры можно посмотреть, например, в любом скрипте заклинаний среди уже существующих в игре.
2. в НВН2 при активации предмета по умолчанию запускается скрит "i_" + ТЭГ предмета + "_ac", но если есть намерение добавлять хаки, то лучше сделать кастом спелл - будет выглядеть куда лучше.
3. в мультиплеер второго невера не играл. но странно, что так происходит.
MpakOfChaos
я понял о чем ты, обычные эффекты накладываются спокойно, я хочу визуальный эффект наложить
Melisse
Ты бы глянул функции в инклюдах (#include "nw_i0_plot"), вот смотри VFX_IMP_RESTORATION..этот визуальный эффект уже накладывается. Так что он есть, он просто накладывается одновременно с тем, что у тебя. Иначе говоря, твой эффект не нужен.

Neverwinter Script
Эта функция в инклюде "nw_i0_plot"

void RemoveEffects(object oDead)
{
    //Declare major variables
    object oTarget = oDead;
    effect eVisual = EffectVisualEffect(VFX_IMP_RESTORATION);
    int bValid;

    effect eBad = GetFirstEffect(oTarget);
    //Search for negative effects
    while(GetIsEffectValid(eBad))
    {
        if (GetEffectType(eBad) == EFFECT_TYPE_ABILITY_DECREASE ||
            GetEffectType(eBad) == EFFECT_TYPE_AC_DECREASE ||
            GetEffectType(eBad) == EFFECT_TYPE_ATTACK_DECREASE ||
            GetEffectType(eBad) == EFFECT_TYPE_DAMAGE_DECREASE ||
            GetEffectType(eBad) == EFFECT_TYPE_DAMAGE_IMMUNITY_DECREASE ||
            GetEffectType(eBad) == EFFECT_TYPE_SAVING_THROW_DECREASE ||
            GetEffectType(eBad) == EFFECT_TYPE_SPELL_RESISTANCE_DECREASE ||
            GetEffectType(eBad) == EFFECT_TYPE_SKILL_DECREASE ||
            GetEffectType(eBad) == EFFECT_TYPE_BLINDNESS ||
            GetEffectType(eBad) == EFFECT_TYPE_DEAF ||
            GetEffectType(eBad) == EFFECT_TYPE_PARALYZE ||
            GetEffectType(eBad) == EFFECT_TYPE_NEGATIVELEVEL ||
            GetEffectType(eBad) == EFFECT_TYPE_FRIGHTENED ||
            GetEffectType(eBad) == EFFECT_TYPE_DAZED ||
            GetEffectType(eBad) == EFFECT_TYPE_CONFUSED ||
            GetEffectType(eBad) == EFFECT_TYPE_POISON ||
            GetEffectType(eBad) == EFFECT_TYPE_DISEASE
                )
            {
                //Remove effect if it is negative.
                RemoveEffect(oTarget, eBad);
            }
        eBad = GetNextEffect(oTarget);
    }
    //Fire cast spell at event for the specified target
    SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, SPELL_RESTORATION, FALSE));

    ApplyEffectToObject(DURATION_TYPE_INSTANT, eVisual, oTarget);

    // * May 2002: Removed this because ActionRest is no longer an instant.
    // * rest the player
    //AssignCommand(oDead, ActionRest());
}


==================================================


По поводу посадки на стул НПС:
ставишь таг стулу PLC_CHAIR, ставишь рядом с ним НПС, у НПС в OnSpawn помещаешь скрипт

Neverwinter Script
void main()
{
    if (GetCurrentAction(OBJECT_SELF) == ACTION_SIT) return;

    object oChair = GetNearestObjectByTag("PLC_CHAIR", OBJECT_SELF);

    AssignCommand(OBJECT_SELF, ActionSit(oChair));

    //Это делает НПС перманентно сидящим на стуле, можешь закоментить, если не надо.
    DelayCommand(10.0, SetCommandable(FALSE, OBJECT_SELF));
}
MpakOfChaos
тогда тем более странно что эффекта нет даже этого от RemoveEffects, видимо всетаки руки у меня не из того места растут.
а можно как нибудь накладывать эффекты из палитры без создания соответствующего объекта?
Lex
Цитата(MpakOfChaos @ May 9 2008, 09:22) *
а можно как нибудь накладывать эффекты из палитры без создания соответствующего объекта?

сам понял что спросил?
MpakOfChaos
ну как я это понимаю чтобы создать эффект из палитры (Placed Effect) его нужно создать через createobject. я спосил возможно ли его создать иначе, не как объект, а например как Эффект.
Melisse
Все, что находится в палитре: плэйсы, кричи..и тд. создаются по средствам CreateObject(*). Итемы еще можно с помощью CreateItemOnObject(*).
Эффекты - типа молнии, невидимости и тд...это из другой оперы и к плэйсам отношение не имеет.
Я вот подумала - ты не подключал ли к своему модулю хак паки?..может быть там есть visualeffect.2da...если есть то возможно в нем сместились строки с эффектами...
MpakOfChaos
Нет таких злодеяний я не совершал.smile.gif я даже неособо представляю зачем хак пак нужен.
Celestial
Как добавить дождь на арию?
Griffon
Поищи скрипт на слово weather или rain. На волте так же есть плагин погоды. http://nwvault.ign.com/
Celestial
Смотрел... там только как размещаемый эффект снег есть.

А дождя не нашел.
Знакомый посоветовал поставить плэйсабл, на который поставить эффект дождя (аппиаранс эффект), а сам плайсабл сделать невидимым...

Но разве обсидан так извратила погоду?
Может, можно как-нибудь на всю арию дождь сделать (оптимально - чтобы дождь шел с рандомными интервалами)?
Griffon
вот тебе скрипт из редактора

Neverwinter Script
// Set the weather for oTarget.
// - oTarget: if this is GetModule(), all outdoor areas will be modified by the
//  weather constant. If it is an area, oTarget will play the weather only if
//  it is an outdoor area.
// - nWeather: WEATHER_TYPE*
//  -> WEATHER_TYPE_RAIN, WEATHER_TYPE_SNOW, WEATHER_TYPE_LIGHTNING are the weather
//  -> patterns you can set.
// - nPower: WEATHER_POWER_*
//  -> WEATHER_POWER_USE_AREA_SETTINGS will set the area back to use the area's weather pattern.
//  -> WEATHER_POWER_OFF, WEATHER_POWER_WEAK, WEATHER_POWER_LIGHT, WEATHER_POWER_MEDIUM,
//  -> WEATHER_POWER_HEAVY, WEATHER_POWER_STORMY are the different weather pattern settings.
// * Note that this function has changed in NWN2.
void SetWeather(object oTarget, int nWeatherType, int nPower = WEATHER_POWER_MEDIUM);


Цитата
Смотрел... там только как размещаемый эффект снег есть.
поищи получше, был плагин погоды.

Цитата
Может, можно как-нибудь на всю арию дождь сделать (оптимально - чтобы дождь шел с рандомными интервалами)?
нет, он будет идти непереставая
Celestial
Спасибо.

Точно никак не сделать переменный дождь, чтобы не постоянно шел?

Griffon
Цитата(Celestial @ May 16 2008, 13:38) *
Точно никак не сделать переменный дождь, чтобы не постоянно шел?


Если тебе это удастся, значит ты превзошел Обсидиан.
Lorendroll
Можно написать скрипт чтобы спаунить эффекты дождя или снега (на невидимых объектах) по всей локации и через некоторый промежуток удалять... Структура скрипта вроде не сложная, если багов не попадется то проще простого. Если действительно нужен такой скрипт могу написать. Мне и самому пригодится :-D
virusman
Цитата(Celestial @ May 16 2008, 12:38) *
Точно никак не сделать переменный дождь, чтобы не постоянно шел?
Ну так напиши скрипт, который бы менял погоду так, как тебе нужно.
Celestial
Цитата
Можно написать скрипт чтобы спаунить эффекты дождя или снега (на невидимых объектах) по всей локации и через некоторый промежуток удалять... Структура скрипта вроде не сложная, если багов не попадется то проще простого. Если действительно нужен такой скрипт могу написать. Мне и самому пригодится :-D

Напиши, пожалуйста.
И в личку мне тоже - если свободен, расскажу о проекте, возможно, присоединишься...
Celestial
Ребят, чем отличаются свойства для предметов: On Hit и On Monster Hit ?
Anakondar
Цитата(Celestial @ May 19 2008, 22:46) *
Ребят, чем отличаются свойства для предметов: On Hit и On Monster Hit ?

Строчками в 2да таблицах. Наример, та, в которой говорится в какие предметы какие свойства вставляются, различаются для этих свойств. Также таблица, где соимость свойств прописана.
Ёжик
Цитата(Celestial @ May 16 2008, 19:38) *
Точно никак не сделать переменный дождь, чтобы не постоянно шел?

А чем не устраивает плагин WeatherChanger ? На ваулте есть для всех версий. Регулирует смену дождя, снега, ветра, освещённости. Или надо дождь в строго определённое время запускать?
Celestial
Спасибо, Анакондар,

Беспокоился, что один из них активируется при ударе по PC.
Kirald
Маленький, срочный, нубский, вопрос:

Как заставить NPC сесть на стул или проиграть другую анимацию.(прошу описать как можно подробнее !!!Я НУБ!!!)

зАРАнее Триногометрическое СПАСИБО!!!
Kirald
А есть ли у Обсидианов готовые скрипты по проверке спас броска (в диалоге) ну типа если в разговоре чар не выкенит спас бросок воли, то он падет под эфект заклинания и отдаст скажем 100 золотых (к примеру). Я в одном модуле (точнее в модуле "Крик волка") наткнулся на подобный скрипт вот он:

Код
// Will tests as used i the cinderella convo
int StartingConditional(int nDC)
{
    SetLocalInt(GetFirstPC(),"WILSAVE",nDC);
    
    int nSAVE = d20(1) + GetWillSavingThrow(GetFirstPC());
    
    SetCustomToken(100,GetStringByStrRef(16777844) +IntToString(nDC) +GetStringByStrRef(16777845) +IntToString(nSAVE) +GetStringByStrRef(16777808));
    
    // test line
    //return TRUE;
    
    if ( nSAVE >= nDC)
        return TRUE;
        
        return FALSE;
}


я его еще сам не опробовал но кажеться он попашет вот только это скрипт для проверки воли а что надо поменять чтобы он стал спас броском на реакцию скажем?

Заранее спасибо потом допишу попахал ли скрипт!!!

ЗЫ. Скрипт проверил на 75% уверен что работает
Lex
реакция это которая REFLEX? Просто поменять GetWillSavingThrow на GetReflexSavingThrow + брать локалку не WILSAVE а REFSAVE.

зы: кстати это локалки предварительно надо будет на НПС написать.
зыы: имхо лучше использовать AutoDC(). Там работа не с абсолютными значениями спасов, а с относительными, которые расчитываются согласно уровню, сложности и прочим радостям. Да и меньше гемороя с настройкой, если пользоваться ею.
azathoth
А мне AutoDC(..) не нравится тем, что персонажу набравшему уровень зачастую сложнее сделать проверку чем на предыдущем уровне. Зато, действительно, настраивать почти ничего не надо :^)
Kirald
Цитата
зы: кстати это локалки предварительно надо будет на НПС написать.


Помоему не обязательно ставить локалку, мне кажеться она уже стоит (скрипт уже ставит её на НПС который говорит), ну по крайней мере я не ставил её (локалку) когда делал тестовый диалог. Вот только вопрос напрашиваеться:
Как зделать так чтобы в разговоре вывести уравнение ну типа [вы провалили спасбросок на волю 12 > 8 вы не получаете опыт]. Тоесть я имею ввиду как выдернуть цифры которые отвечают за спасбросок и как их всунуть в разговор. В скрипте кажеться уже есть подобная функция, но вот только как её в разговор вставить???

Заранее двойное спасибо.
priest
Блин я убьюсь... Вот смотрите: создаю локацию с простейшим рельефом (скрин), сохраняю модуль (File -> Save as), закрываю тулсет, открываю его снова, загружаю этот же модуль и ту же самую локацию и бац - она пуста. И так постоянно... нервы уже на пределе... Может я что-то упустил?

azathoth
Цитата
Как зделать так чтобы в разговоре вывести уравнение ну типа [вы провалили спасбросок на волю 12 > 8 вы не получаете опыт]. Тоесть я имею ввиду как выдернуть цифры которые отвечают за спасбросок и как их всунуть в разговор. В скрипте кажеться уже есть подобная функция, но вот только как её в разговор вставить???


а вот эта вот часть скрипта не то же самое делает случайно?:
Neverwinter Script
SetCustomToken(100,GetStringByStrRef(16777844) +IntToString(nDC) +GetStringByStrRef(16777845) +IntToString(nSAVE) +GetStringByStrRef(16777808));


тогда в диалог надо вставить: <CUSTOM100>

ну или так:
Neverwinter Script
SetCustomToken(100, "[вы провалили спасбросок на волю "+nSAVE+" > "+nDC+" 8 вы не получаете опыт]");

естественно можно использовать не только номер 100. (Но и 500.)

а вообще насколько помню при использовании штатной проверки спаса в лог пишется всё автоматически.

Цитата
Блин я убьюсь... Вот смотрите: создаю локацию с простейшим рельефом (скрин), сохраняю модуль (File -> Save as), закрываю тулсет, открываю его снова, загружаю этот же модуль и ту же самую локацию и бац - она пуста. И так постоянно... нервы уже на пределе... Может я что-то упустил?

Симптомы похожи на болезнь Моих Документов - такое может происходить, если в пути к сохранёнке модуля есть русские буквы - тогда тулсет отказывается сохранять информацию о ландшафте локаций.
Kirald
Почитал прошлые посты лекса и azathoth, вы упоминали об AutoDC, если я правельно понял то эта команда расчитывает спас бросок не с вводимого числа а по соотношению уровня и воли, я правельно понял? У меня есть сюжетный мод на подобии Planescape Tournament и мне надо сделать проверку воли для всех уровней одинаковую, тоесть скажем если ты начнеш игру эльфом 20 лвл или эльфом 1 лвл, то шанс успеха спасброска воли долженбыть одинаков, ну или примерно одинаков, ну чтобы даже у крутого персоонажа был шанс провалиться(просто я не знаю спас броски увеличиваються с уровнем?).

И еще маленький вопросик:

Какой скрипт отвечает за проверку устойчивости к магии? (в диалогах)

Заранее двойное БОЛЬШОЕ СПАСИБО!!!

PS. Не подскажите тему или еще чегонибудь, где разбирают большинство Вейпоинтов в тулсете, а то вейпоинтов (Разновидностей) много, а для чего нужны не знаю.

Заранее двойное спасибо!!!
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.
Invision Power Board © 2001-2024 Invision Power Services, Inc.