IPB

Welcome Guest ( Log In | Register )

6 Pages V  « < 4 5 6  
Reply to this topicStart new topic
> Элорфин, альт
 Zoran
post 01:37, 6 April 2014
Post #76


Псевдоразработчик

Group: DMs & Developers
Posts: 1.249
Joined: 1 Feb 2009
From: Москва
Member No.: 8.712


Класс: Paladin
Направленность: Законопослушный добрый
Раса: Человек



QUOTE (zmeylsdn @ 00:51, 6 April 2014) *
Сингл. Я вижу 3 варианта по убыванию предпочтения:
1 При входе в определенную оласть скриптом ставится множитель. При выходе с нее, в .т. и смерти, скриптом ставится обратно.
2 При достижении опред уровня (скрипт GetHitDice(GetPCSpeaker()) > ЧИСЛО) множитель ставится.
3 Либо при проверке у игрока GetLocalInt.
Только хз как это сделать.


1. Ну да, верно мыслишь. Делается так:
Такой скрипт вешается на вход в локацию.
CODE
void main()
{
    object oPC = GetEnteringObject();
    if(!GetIsPC(oPC))
        return;

    object oArea = OBJECT_SELF;
    int nXPScale;
    int nXPScaleBonus = GetLocalInt(oArea, "XPScaleBonus");
    if(nXPScaleBonus != 0)
    {
        nXPScale = GetModuleXPScale();
        SetModuleXPScale(nXPScale+nXPScaleBonus);
    }
}


Такой скрипт вешается на выход из локации.
CODE
void main()
{
    object oPC = GetExitingObject();
    if(!GetIsPC(oPC))
        return;

    object oArea = OBJECT_SELF;
    int nXPScale;
    int nXPScaleBonus = GetLocalInt(oArea, "XPScaleBonus");
    if(nXPScaleBonus != 0)
    {
        nXPScale = GetModuleXPScale();
        SetModuleXPScale(nXPScale-nXPScaleBonus);
    }
}

Проверишь ошибки, я писал без компилятора.
Логика тут такая. На локацию вешаешь переменную типа int с именем "XPScaleBonus", которая будет содержать число, на которое должена будет изменится шкала. При входе это число будет добавляться, при выходе из локации это же число будет отниматься от общемодульного XPScale. Скрипты универсальные, их можно развесить по всем локациям, а опыт будет меняться только в тех локациях, у которых будет переменная XPScaleBonus, и меняться на то число, которое ты укажешь в этой переменной.

2. Ну тут на порядок проще, тоже верно мыслишь, но не правильно оформляешь. В свойствах модуля, есть событие "При повышении уровня игрока"(OnPlayerLevelUp). На него вешается скрипт примерно такого содержания:
CODE
void main()
{
    object oPC = GetPCLevellingUp();
    if(GetHitDice(oPC) == <Level>)
        SetModuleXPScale(GetModuleXPScale()+ <Bonus>);
}

Когда персонаж достигнет уровня <Level>, шкала увеличится на <Bonus>.


3. Не нужно тебе лишних дополнительных переменных на игроке.


--------------------
Хватит уже сваливать все на плечи игроков. Игроки могут чего то хотеть, но они ничего не должны. А вот разработчики должны - потому что создали продукт и предложили его людям, а значит взяли на себя ответственность. Игроки тратят на это силы и время, изначально обладая определенными надеждами и ожиданиями.
Go to the top of the page
 
+Quote Post
 zmeylsdn
post 16:01, 6 April 2014
Post #77


Оруженосец

Group: Members
Posts: 41
Joined: 30 Jun 2012
Member No.: 104.490


Класс: Pale Master
Направленность: Хаотичный нейтральный
Раса: Человек



Спасибо большое.
Go to the top of the page
 
+Quote Post
Guest_DarkSet_*
post 20:47, 8 April 2014
Post #78




Guests






И хотя Зоран дал, естественно, правильный ответ в обозначенных условиях я бы его подкорректировал с точки зрения архитектуры. Для сингла неважно, всё будет работать как и должно теоретически - на событие входа увеличение, на событие выхода уменьшение. Но если бы это был мультиплеер - это была бы потенциальная дыра для багоюза. Задача - зайти в локу, получив увеличение опыта и выйти не получив уменьшение. Думаю для некоторых опытных сиальцев - это задача вполне решаемая smile.gif

Так вот, с архитектурной точки зрения правильнее было бы остановиться только на событии входа, но использовать его на всех локах. Проверять определенную переменную на локации, если она отсутствует - ставить базовый рейт опыта, если она присутствует - модифицировать так, как описано в ней. Соответственно на тех локах, где рейт нужно менять - создать переменную с нужным значением. Где не нужно - не создавать.
Событие входа в локу это то, без чего обойтись нельзя никак, как ты ни багоюзь - при каждой загрузке у перса локи это событие сработает, хоть на какой-нибудь из локаций, без этого он просто не сможет играть.
Go to the top of the page
 
+Quote Post
 Zoran
post 00:59, 9 April 2014
Post #79


Псевдоразработчик

Group: DMs & Developers
Posts: 1.249
Joined: 1 Feb 2009
From: Москва
Member No.: 8.712


Класс: Paladin
Направленность: Законопослушный добрый
Раса: Человек



Ну, может твой вариант посимпотичнее будет смотреться, но для мультиплеера не важно какой архитектурой пользоваться, твоей или моей - все равно будет дыра. Я об этом сразу предупредил - для мультиплеера придется искать альтернативы потому что XPScale можно изменить только во всем модуле, а игроки могут находиться в разных локациях.


--------------------
Хватит уже сваливать все на плечи игроков. Игроки могут чего то хотеть, но они ничего не должны. А вот разработчики должны - потому что создали продукт и предложили его людям, а значит взяли на себя ответственность. Игроки тратят на это силы и время, изначально обладая определенными надеждами и ожиданиями.
Go to the top of the page
 
+Quote Post
 zmeylsdn
post 01:33, 20 April 2014
Post #80


Оруженосец

Group: Members
Posts: 41
Joined: 30 Jun 2012
Member No.: 104.490


Класс: Pale Master
Направленность: Хаотичный нейтральный
Раса: Человек



Кто желает помочь протестировать модуль (больше интересуют мобы), небольшой на 4 часа, шаг вперед (на пивзавод нарядов нет).

This post has been edited by zmeylsdn: 01:47, 20 April 2014
Go to the top of the page
 
+Quote Post

6 Pages V  « < 4 5 6
Reply to this topicStart new topic
1 User(s) are reading this topic (1 Guests and 0 Anonymous Users)
0 Members:

 



Lo-Fi Version Time is now: 12 August 2025 - 11:52