Помощь - Поиск - Пользователи - Календарь
Полная версия: Помогите со скриптом
UoKit.com Форумы > Ultima Online : Dev > Sphere Server > Sphere Server 0.56 - Sphere X
Moll Dayer
Всем привет !
Помогите пожалуйста со скриптом на армор.

Вот часть скрипта, которая на ту или иную шмотку дает рандомный скилл из перечисленных (при крафте).

Код
ON=@Create
    Color=Color_o_darksteel
    HitPoints=50
        TAG.SKILL=<hval {SKILL_WRESTLING 1 SKILL_SWORDSMANSHIP 1 SKILL_FENCING 1 SKILL_PARRYING 1 SKILL_MACEFIGHTING 1}>
ON=@Equip
    SRC.MAXHITS +=3
        try SRC.<SERV.SKILL.<TAG0.SKILL>.KEY>=<hval <SRC.<SERV.SKILL.<TAG0.SKILL>.KEY>>+1>

ON=@UnEquip
    SRC.MAXHITS -=3
        try SRC.<SERV.SKILL.<TAG0.SKILL>.KEY>=<hval <SRC.<SERV.SKILL.<TAG0.SKILL>.KEY>>-1>


Пытаюсь сделать подобное на модификаторы такие как char_spell_critical_damage, char_speed_damage, modfizdamage а так же на статы STR INT DEX. Но ничего не выходит, так как эти модификаторы не являются скиллом. Подскажите, как правильно прописать, чтоб на создаваемую вещь, рандомно вешался один из модификаторов и статов.

Заранее спасибо !
Sirocco
try SRC.<TAG0.SKILL>
Moll Dayer
Цитата(Sirocco @ 1.12.2021, 17:11) *

try SRC.<TAG0.SKILL>

Спасибо, но такой вариант тож к сожалению не работает
d`ArcZeal
Код

[ITEMDEF I_TROPICAL_BRACELET]
ID=I_BRACELET_GOLD
NAME=Tropical bracelet
VALUE=350

ON=@CREATE
COLOR=0B7E
TAG.SKILLBONUS=250
TAG.SKILLID=Wrestling


На игрока ивент:
Код

ON=@ITEMEQUIP
IF !(<ACT.DTAG0.SKILLBONUS>==0) && !(<ISEMPTY <ACT.TAG.SKILLID>>)
SRC.<ACT.TAG0.SKILLID>=<EVAL (<SRC.<ACT.TAG0.SKILLID>>+<ACT.TAG0.SKILLBONUS>)>
ENDIF


Код

ON=@ITEMUNEQUIP
IF !(<ACT.DTAG0.SKILLBONUS>==0) && !(<ISEMPTY <ACT.TAG.SKILLID>>)
SRC.<ACT.TAG0.SKILLID>=<EVAL <SRC.<ACT.TAG0.SKILLID>>-<ACT.TAG0.SKILLBONUS>>
ENDIF
Eternium
Насколько я понимаю автор просил реализовать (бонусы которых нет в дефолт сфере)
Перечисляя пример выше: char_spell_critical_damage, char_speed_damage, modfizdamage
Разумеется выше скрипт что он для примера скинул не будет работать,
Нужно:

1) Создать Массив (коллекцию) “особых умений”
2) Сделать сценарий с событиями этих умений и взаимодействия с ними
3) Повесить события (прописать в сфере)
4) Уже потом написать метод (функцию) (рандома или чего он там желает) и ее привязать на Тригер экипировки и снятия
PS: Это один из вариантов, уверен что есть и более простые решения.
Sirocco
Цитата(Moll Dayer @ 3.12.2021, 0:37) *

Спасибо, но такой вариант тож к сожалению не работает

Вот только мне не рассказывайте...

TAG.SKILL = STR
Moll Dayer
Цитата(d`ArcZeal @ 4.12.2021, 10:56) *

Код

[ITEMDEF I_TROPICAL_BRACELET]
ID=I_BRACELET_GOLD
NAME=Tropical bracelet
VALUE=350

ON=@CREATE
COLOR=0B7E
TAG.SKILLBONUS=250
TAG.SKILLID=Wrestling


На игрока ивент:
Код

ON=@ITEMEQUIP
IF !(<ACT.DTAG0.SKILLBONUS>==0) && !(<ISEMPTY <ACT.TAG.SKILLID>>)
SRC.<ACT.TAG0.SKILLID>=<EVAL (<SRC.<ACT.TAG0.SKILLID>>+<ACT.TAG0.SKILLBONUS>)>
ENDIF


Код

ON=@ITEMUNEQUIP
IF !(<ACT.DTAG0.SKILLBONUS>==0) && !(<ISEMPTY <ACT.TAG.SKILLID>>)
SRC.<ACT.TAG0.SKILLID>=<EVAL <SRC.<ACT.TAG0.SKILLID>>-<ACT.TAG0.SKILLBONUS>>
ENDIF



Я наверно не правильно изложил мысль, так как это не совсем то. Но все равно спасибо !


Цитата(Eternium @ 4.12.2021, 15:14) *

Насколько я понимаю автор просил реализовать (бонусы которых нет в дефолт сфере)
Перечисляя пример выше: char_spell_critical_damage, char_speed_damage, modfizdamage
Разумеется выше скрипт что он для примера скинул не будет работать,
Нужно:

1) Создать Массив (коллекцию) “особых умений”
2) Сделать сценарий с событиями этих умений и взаимодействия с ними
3) Повесить события (прописать в сфере)
4) Уже потом написать метод (функцию) (рандома или чего он там желает) и ее привязать на Тригер экипировки и снятия
PS: Это один из вариантов, уверен что есть и более простые решения.


Модификаторы char_spell_critical_damage, char_speed_damage, modfizdamage и другие прописаны в сфере и есть на других вещах. Их можно прописать напрямую, но как сделать чтоб рандомно выдавал один из этих модификаторов, пока не могу понять...

Цитата(Sirocco @ 4.12.2021, 15:59) *

Вот только мне не рассказывайте...

TAG.SKILL = STR


Прописывал на сам item, прописывал на ON=@Create - эффекта нет.
Можно конечно прописать на ON=@EQUIP / ON=@UNEQUIP через scr, но в таком случае рандом не слепишь. Возможно я что-то не то делаю.
d`ArcZeal
Код

[ITEMDEF I_FORCE_FEMALE_PLATEMAIL_CHEST]
NAME=Force female platemail chest
ID=I_ARMOR_FEMALE_PLATE
ARMOR=FORCE_PLATE_ARMOR_AR
VALUE=100

ON=@CREATE
FORCE_ARMOR_GENERATOR


Код

[FUNCTION FORCE_ARMOR_GENERATOR]
HITPOINTS=FORCE_ARMOR_HITPOINTS
COLOR=COLOR_O_FORCE

TAG.EXPERIENCEBONUS=<EVAL {1 4 2 3 3 2 4 1}>

TAG.STATBONUS=<EVAL {1 10 2 9 3 8 4 7 5 6 6 5 7 4 8 3 9 2 10 1}>
DORAND 3
TAG.BONUS_STAT=Str
TAG.BONUS_STAT=Dex
TAG.BONUS_STAT=Int
ENDDO

Не понятно, почему у тебя не выходит. По этому примеру и примеру выше можно прописать любые бонусы.

P.S. char_spell_critical_damage, char_speed_damage, modfizdamage не использовал ранее.
Moll Dayer
Цитата(d`ArcZeal @ 6.12.2021, 8:10) *


Не понятно, почему у тебя не выходит. По этому примеру и примеру выше можно прописать любые бонусы.

P.S. char_spell_critical_damage, char_speed_damage, modfizdamage не использовал ранее.


Спасибо ! Уже больше похоже на правду. Во всяком случае сфера не плюется при создании вещей.
Но почему-то при одевании, вещь + не дает.

Код


[FUNCTION DARKSTEEL_ARMOR_GENERATOR]
HITPOINTS=50
COLOR=COLOR_O_DARKSTEEL

TAG.EXPERIENCEBONUS=<EVAL {1 4 2 3 3 2 4 1}>

TAG.STATBONUS=<EVAL {1 10 2 9 3 8 4 7 5 6 6 5 7 4 8 3 9 2 10 1}>
DORAND 3
TAG.BONUS_STAT=Str
TAG.BONUS_STAT=Dex
TAG.BONUS_STAT=Int
ENDDO



Код

[ITEMDEF 04577]
DefName=i_DARKSTEEL_FEMALE_PLATEMAIL
Name=Darksteel Female Platemail Chest
Id=i_Armor_female_plate
Armor=35
ReqStr=15
Weight=4
Value=47
CATEGORY=Provisions - Armor - Colored
SUBSECTION=Darksteel
DESCRIPTION=Female Platemail
Resources=22 i_ingot_darksteel
SkillMake=BLACKSMITHING 40.0

ON=@Create
        DARKSTEEL_ARMOR_GENERATOR


То есть, функция работает но почему не дает рандомный + к статам не пойму...
d`ArcZeal
Чтобы вот это работало:
Код

TAG.STATBONUS=<EVAL {1 10 2 9 3 8 4 7 5 6 6 5 7 4 8 3 9 2 10 1}>
DORAND 3
TAG.BONUS_STAT=Str
TAG.BONUS_STAT=Dex
TAG.BONUS_STAT=Int
ENDDO


Ивент на персонажа:
Код

ON=@ITEMUNEQUIP
IF !(<ACT.DTAG0.STATBONUS>==0) && !(<ISEMPTY <ACT.TAG.BONUS_STAT>>)
SRC.<ACT.TAG0.BONUS_STAT>=<EVAL <SRC.<ACT.TAG.BONUS_STAT>>+-<ACT.DTAG0.BONUS_STAT>>
ENDIF

ON=@ITEMEQUIP
IF (<ACT.DTAG0.STATBONUS> > 0)
    IF !(<ISEMPTY <ACT.TAG.BONUS_STAT>>)
    SRC.<ACT.TAG0.BONUS_STAT>=<EVAL (<SRC.<ACT.TAG.BONUS_STAT>>+<ACT.DTAG0.STATBONUS>)>
    ENDIF
ENDIF

TAG название ты можешь дать какой удобно. Это не дефолт система.
Moll Dayer
Цитата(d`ArcZeal @ 6.12.2021, 9:47) *


Ивент на персонажа:
Код

ON=@ITEMUNEQUIP
IF !(<ACT.DTAG0.STATBONUS>==0) && !(<ISEMPTY <ACT.TAG.BONUS_STAT>>)
SRC.<ACT.TAG0.BONUS_STAT>=<EVAL <SRC.<ACT.TAG.BONUS_STAT>>+-<ACT.DTAG0.BONUS_STAT>>
ENDIF

ON=@ITEMEQUIP
IF (<ACT.DTAG0.STATBONUS> > 0)
    IF !(<ISEMPTY <ACT.TAG.BONUS_STAT>>)
    SRC.<ACT.TAG0.BONUS_STAT>=<EVAL (<SRC.<ACT.TAG.BONUS_STAT>>+<ACT.DTAG0.STATBONUS>)>
    ENDIF
ENDIF

TAG название ты можешь дать какой удобно. Это не дефолт система.


Дело в том, что у меня данный ивент прописывается через ON=@EQUIP / ON=@UNEQUIP. Если использовать ON=@ITEMEQUIP / ON=@ITEMUNEQUIP, то ничего не происходит, то есть статы не добавляются и сфера молчит. Но если поменять на ON=@EQUIP / ON=@UNEQUIP, то сфера начинает ругаться:

Код

10:12:ERROR:(sphere_item_provisions_armor_color.scp,370)Can't resolve <ACT.DTAG0.STATBONUS>
10:12:ERROR:(sphere_item_provisions_armor_color.scp,370)Undefined symbol ''
10:12:ERROR:(sphere_item_provisions_armor_color.scp,377)Can't resolve <ACT.DTAG0.STATBONUS>
10:12:ERROR:(sphere_item_provisions_armor_color.scp,377)Can't resolve <ACT.TAG.BONUS_STAT>
10:12:ERROR:(sphere_item_provisions_armor_color.scp,377)Undefined symbol ''

corso
все прекрасно поняли, что ты хочешь сделать, делается это достаточно легко.
d`ArcZeal тебе всё сказал по сути, просто головой подумать осталось

через tag - ты создаешь не дефолтную систему, можешь называть и писать, что хочешь.

Создаешь на чаре tag, который будет отвечать за какие-то плюшки к магии. Например:
tag.bonus_magery

затем добавляешь этот "tag.bonus_magery" в формулы расчета магии в триггеры на чаре или в спеллах

а через шмот уже меняешь этот самый "tag.bonus_magery" на чаре путем equip/unequip

Код
On=@Create
    dorand 2
        tag.rand_bonus = bonus_magery
        tag.rand_bonus = bonus_healing
    enddo
    
On=@Equip
    src.tag0.<tag0.rand_bonus> += 5
    
On=@UnEquip
    src.tag0.<tag0.rand_bonus> -= 5


что-то типа такого, синтаксис может гулять, наспех набросал для понимания
Moll Dayer
Цитата(corso @ 6.12.2021, 11:04) *

все прекрасно поняли, что ты хочешь сделать, делается это достаточно легко.
d`ArcZeal тебе всё сказал по сути, просто головой подумать осталось

через tag - ты создаешь не дефолтную систему, можешь называть и писать, что хочешь.

Создаешь на чаре tag, который будет отвечать за какие-то плюшки к магии. Например:
tag.bonus_magery

затем добавляешь этот "tag.bonus_magery" в формулы расчета магии в триггеры на чаре или в спеллах

а через шмот уже меняешь этот самый "tag.bonus_magery" на чаре путем equip/unequip



Я понял, спасибо огромное за помощь и тебе и d`ArcZeal !
Буду ковырять / изучать дальше !
Moll Dayer
Ребят, всем привет. Я несколько дней был в отьезде и только сейчас добрался до сферы.
Очень надеюсь что еще никому не надоел unsure.gif
Но есть вопрос по данной теме. Очень прошу подсказать rolleyes.gif .

Создал отдельно скрипт:
Код

[TYPEDEF e_stat_bonus]

ON=@ITEMUNEQUIP
IF !(<ACT.DTAG0.STATBONUS>==0) && !(<ISEMPTY <ACT.TAG.BONUS_STAT>>)
SRC.<ACT.TAG0.BONUS_STAT>=<EVAL <SRC.<ACT.TAG.BONUS_STAT>>+-<ACT.DTAG0.BONUS_STAT>>
ENDIF

ON=@ITEMEQUIP
IF (<ACT.DTAG0.STATBONUS> > 0)
     IF !(<ISEMPTY <ACT.TAG.BONUS_STAT>>)
    SRC.<ACT.TAG0.BONUS_STAT>=<EVAL (<SRC.<ACT.TAG.BONUS_STAT>>+<ACT.DTAG0.STATBONUS>)>
    ENDIF
ENDIF

[FUNCTION DARKSTEEL_ARMOR_GENERATOR]
HITPOINTS={10 80}
COLOR=COLOR_O_DARKSTEEL

TAG.EXPERIENCEBONUS=<EVAL {1 4 2 3 3 2 4 1}>

TAG.STATBONUS=<EVAL {1 10 2 9 3 8 4 7 5 6 6 5 7 4 8 3 9 2 10 1}>
DORAND 3
TAG.BONUS_STAT=Str
TAG.BONUS_STAT=Dex
TAG.BONUS_STAT=Int
ENDDO

[EOF]


Ну и соответственно сам армор

Код

[ITEMDEF 04560]
DefName=i_DARKSTEEL_PLATEMAIL_ARMS
Name=Darksteel Platemail Arms
Id=i_platemail_arms
Armor=55
ReqStr=40
Weight=5
Value=43
CATEGORY=Provisions - Armor - Colored
SUBSECTION=Darksteel
DESCRIPTION=Platemail Arms
Resources=18 i_ingot_darksteel
SkillMake=BLACKSMITHING 63.5
TEVENTS=e_stat_bonus

ON=@Create
    DARKSTEEL_ARMOR_GENERATOR


Функция работает частично, дает армору Hitpoints и красит в нужный цвет, но все что дальше прописано не работает. Так же не работает [TYPEDEF e_stat_bonus], хотя, если этот бонус заменить к примеру на

ON=@EQUIP
SRC.MAXHITS +=5
ON=@UNEQUIP
SRC.MAXHITS -=5

то все прекрасно работает и вещь дает + и - 5 хп.

Подскажите, возможно я еще в какой-то скрипт что-то должен прописать, для нормальной работоспособности или может в скрипте что выше, косяк какой ? Буду очень благодарен !

PS Сфера никаких ошибок не выдает.
d`ArcZeal
1.
Удоли:
TEVENTS=e_stat_bonus

2.
Замени
[TYPEDEF e_stat_bonus]
на
[EVENTS e_stat_bonus]

3.
Вешай на персонажа игрового:
.x events=+e_stat_bonus

4.
Рестартани сферу


--------------------------------------
В сам армор добавь, чтобы видеть, видит на арморе бонус на статы или нет:
ON=@CLICK
SRC.SYSMESSAGE + <ACT.DTAG0.STATBONUS> <ACT.TAG0.BONUS_STAT>
Moll Dayer
Спасибо большое ! Сейчас заработало. Правда при одевании вещь прибавляет стат а вот когда снимаешь, то стат не минусуется. То есть, стат работает только на +. Выходит своего рода баг, с прокачкой статов.

В event_char.scp прописал:

[EVENTS e_bonus_login]
ON=@LOGIN
x events=+e_stat_bonus

[eof]

Хотел чтоб этот бонус распространялся на всех игровых чаров, но не срабатывает. Получается бонус может получить аккаунт с админкой, через команду что указана выше. Как это можно исправить ?
Moll Dayer
Спасибо d`ArcZeal за помощь ! Разобрался. Тема закрыта)
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.
Русская версия Invision Power Board © 2001-2024 Invision Power Services, Inc.