Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в эту темуОткрыть новую тему
> Помогите со скриптом
Moll Dayer
сообщение 1.12.2021, 16:41
Сообщение #1


*

Registred
Сообщений: 9
Регистрация: 1.12.2021
Группа: Пользователи
Наличность: 0
Пользователь №: 20.137
Возраст: 32



Всем привет !
Помогите пожалуйста со скриптом на армор.

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

Код
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. Но ничего не выходит, так как эти модификаторы не являются скиллом. Подскажите, как правильно прописать, чтоб на создаваемую вещь, рандомно вешался один из модификаторов и статов.

Заранее спасибо !
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Sirocco
сообщение 1.12.2021, 18:11
Сообщение #2


******

Expert
Сообщений: 809
Регистрация: 2.2.2012
Группа: Пользователи
Наличность: 15391
Пользователь №: 14.566
Возраст: 30



try SRC.<TAG0.SKILL>
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Moll Dayer
сообщение 3.12.2021, 0:37
Сообщение #3


*

Registred
Сообщений: 9
Регистрация: 1.12.2021
Группа: Пользователи
Наличность: 0
Пользователь №: 20.137
Возраст: 32



Цитата(Sirocco @ 1.12.2021, 17:11) *

try SRC.<TAG0.SKILL>

Спасибо, но такой вариант тож к сожалению не работает
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
d`ArcZeal
сообщение 4.12.2021, 11:56
Сообщение #4


**********

Elder
Сообщений: 2.962
Регистрация: 27.11.2005
Группа: Пользователи
Наличность: 7871
Пользователь №: 4.522
Возраст: 34



Код

[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


--------------------
Olmer online administrator
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Eternium
сообщение 4.12.2021, 16:14
Сообщение #5


****

Apprentice
Сообщений: 118
Регистрация: 29.2.2020
Группа: Пользователи
Наличность: 1160
Пользователь №: 19.568



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

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


******

Expert
Сообщений: 809
Регистрация: 2.2.2012
Группа: Пользователи
Наличность: 15391
Пользователь №: 14.566
Возраст: 30



Цитата(Moll Dayer @ 3.12.2021, 0:37) *

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

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

TAG.SKILL = STR
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Moll Dayer
сообщение 5.12.2021, 20:28
Сообщение #7


*

Registred
Сообщений: 9
Регистрация: 1.12.2021
Группа: Пользователи
Наличность: 0
Пользователь №: 20.137
Возраст: 32



Цитата(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, но в таком случае рандом не слепишь. Возможно я что-то не то делаю.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
d`ArcZeal
сообщение 6.12.2021, 9:10
Сообщение #8


**********

Elder
Сообщений: 2.962
Регистрация: 27.11.2005
Группа: Пользователи
Наличность: 7871
Пользователь №: 4.522
Возраст: 34



Код

[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 не использовал ранее.


--------------------
Olmer online administrator
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Moll Dayer
сообщение 6.12.2021, 10:38
Сообщение #9


*

Registred
Сообщений: 9
Регистрация: 1.12.2021
Группа: Пользователи
Наличность: 0
Пользователь №: 20.137
Возраст: 32



Цитата(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


То есть, функция работает но почему не дает рандомный + к статам не пойму...
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
d`ArcZeal
сообщение 6.12.2021, 10:47
Сообщение #10


**********

Elder
Сообщений: 2.962
Регистрация: 27.11.2005
Группа: Пользователи
Наличность: 7871
Пользователь №: 4.522
Возраст: 34



Чтобы вот это работало:
Код

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 название ты можешь дать какой удобно. Это не дефолт система.


--------------------
Olmer online administrator
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Moll Dayer
сообщение 6.12.2021, 11:24
Сообщение #11


*

Registred
Сообщений: 9
Регистрация: 1.12.2021
Группа: Пользователи
Наличность: 0
Пользователь №: 20.137
Возраст: 32



Цитата(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 ''

Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
corso
сообщение 6.12.2021, 12:04
Сообщение #12


****

Apprentice
Сообщений: 229
Регистрация: 24.2.2013
Группа: Пользователи
Наличность: 2831
Из: Россия
Пользователь №: 15.835



все прекрасно поняли, что ты хочешь сделать, делается это достаточно легко.
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


что-то типа такого, синтаксис может гулять, наспех набросал для понимания


--------------------
return 1 🙏
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Moll Dayer
сообщение 6.12.2021, 13:28
Сообщение #13


*

Registred
Сообщений: 9
Регистрация: 1.12.2021
Группа: Пользователи
Наличность: 0
Пользователь №: 20.137
Возраст: 32



Цитата(corso @ 6.12.2021, 11:04) *

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

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

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

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

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



Я понял, спасибо огромное за помощь и тебе и d`ArcZeal !
Буду ковырять / изучать дальше !
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Moll Dayer
сообщение 10.12.2021, 0:10
Сообщение #14


*

Registred
Сообщений: 9
Регистрация: 1.12.2021
Группа: Пользователи
Наличность: 0
Пользователь №: 20.137
Возраст: 32



Ребят, всем привет. Я несколько дней был в отьезде и только сейчас добрался до сферы.
Очень надеюсь что еще никому не надоел (IMG:style_emoticons/default/unsure.gif)
Но есть вопрос по данной теме. Очень прошу подсказать (IMG:style_emoticons/default/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 Сфера никаких ошибок не выдает.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
d`ArcZeal
сообщение 10.12.2021, 0:53
Сообщение #15


**********

Elder
Сообщений: 2.962
Регистрация: 27.11.2005
Группа: Пользователи
Наличность: 7871
Пользователь №: 4.522
Возраст: 34



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>


--------------------
Olmer online administrator
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Moll Dayer
сообщение 10.12.2021, 9:48
Сообщение #16


*

Registred
Сообщений: 9
Регистрация: 1.12.2021
Группа: Пользователи
Наличность: 0
Пользователь №: 20.137
Возраст: 32



Спасибо большое ! Сейчас заработало. Правда при одевании вещь прибавляет стат а вот когда снимаешь, то стат не минусуется. То есть, стат работает только на +. Выходит своего рода баг, с прокачкой статов.

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

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

[eof]

Хотел чтоб этот бонус распространялся на всех игровых чаров, но не срабатывает. Получается бонус может получить аккаунт с админкой, через команду что указана выше. Как это можно исправить ?
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Moll Dayer
сообщение 15.12.2021, 2:57
Сообщение #17


*

Registred
Сообщений: 9
Регистрация: 1.12.2021
Группа: Пользователи
Наличность: 0
Пользователь №: 20.137
Возраст: 32



Спасибо d`ArcZeal за помощь ! Разобрался. Тема закрыта)
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения

Ответить в эту темуОткрыть новую тему
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 

- Текстовая версия | Версия для КПК Сейчас: 19.3.2024, 11:26
Designed by Nickostyle