![]() |
![]() ![]() |
![]() |
![]()
Post
#76
|
|
![]() Псевдоразработчик Group: DMs & Developers Posts: 1.249 Joined: 1 Feb 2009 From: Москва Member No.: 8.712 ![]() Класс: Paladin Направленность: Законопослушный добрый Раса: Человек ![]() |
Сингл. Я вижу 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. Не нужно тебе лишних дополнительных переменных на игроке. -------------------- Хватит уже сваливать все на плечи игроков. Игроки могут чего то хотеть, но они ничего не должны. А вот разработчики должны - потому что создали продукт и предложили его людям, а значит взяли на себя ответственность. Игроки тратят на это силы и время, изначально обладая определенными надеждами и ожиданиями.
|
|
|
![]()
Post
#77
|
|
Оруженосец Group: Members Posts: 41 Joined: 30 Jun 2012 Member No.: 104.490 ![]() Класс: Pale Master Направленность: Хаотичный нейтральный Раса: Человек ![]() |
Спасибо большое.
|
|
|
Guest_DarkSet_* |
![]()
Post
#78
|
Guests ![]() |
И хотя Зоран дал, естественно, правильный ответ в обозначенных условиях я бы его подкорректировал с точки зрения архитектуры. Для сингла неважно, всё будет работать как и должно теоретически - на событие входа увеличение, на событие выхода уменьшение. Но если бы это был мультиплеер - это была бы потенциальная дыра для багоюза. Задача - зайти в локу, получив увеличение опыта и выйти не получив уменьшение. Думаю для некоторых опытных сиальцев - это задача вполне решаемая
![]() Так вот, с архитектурной точки зрения правильнее было бы остановиться только на событии входа, но использовать его на всех локах. Проверять определенную переменную на локации, если она отсутствует - ставить базовый рейт опыта, если она присутствует - модифицировать так, как описано в ней. Соответственно на тех локах, где рейт нужно менять - создать переменную с нужным значением. Где не нужно - не создавать. Событие входа в локу это то, без чего обойтись нельзя никак, как ты ни багоюзь - при каждой загрузке у перса локи это событие сработает, хоть на какой-нибудь из локаций, без этого он просто не сможет играть. |
|
|
![]()
Post
#79
|
|
![]() Псевдоразработчик Group: DMs & Developers Posts: 1.249 Joined: 1 Feb 2009 From: Москва Member No.: 8.712 ![]() Класс: Paladin Направленность: Законопослушный добрый Раса: Человек ![]() |
Ну, может твой вариант посимпотичнее будет смотреться, но для мультиплеера не важно какой архитектурой пользоваться, твоей или моей - все равно будет дыра. Я об этом сразу предупредил - для мультиплеера придется искать альтернативы потому что XPScale можно изменить только во всем модуле, а игроки могут находиться в разных локациях.
-------------------- Хватит уже сваливать все на плечи игроков. Игроки могут чего то хотеть, но они ничего не должны. А вот разработчики должны - потому что создали продукт и предложили его людям, а значит взяли на себя ответственность. Игроки тратят на это силы и время, изначально обладая определенными надеждами и ожиданиями.
|
|
|
![]()
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 |
|
|
![]() ![]() |
Lo-Fi Version | Time is now: 12 August 2025 - 11:52 |