Apple Inc,
Навигация
· Главная
· Форум UO
· Файлы

Информация
· Администрация проекта
· Наши Банеры
· Спонсоры
· Реклама на сайте
Первые шаги
· Установка сферы
· Указатели (Pointers)
· Создание диалогов
· Своя Руда
· sphere.ini
· Spheretable_x.scp
· Spheretables.scp

Download
· Программы для игры
· Макро Программы
· Работа с *.Mul
· Русский sphere.ini
· Программы для ГМов
· Клиены
· Sphere`s & Worlds

Sphere: Краткий Учебник


Сфера-один из наиболее распрастронённых эмуляторов сервера для игры Ultima Online.
Наиболее стабильными версиями сферы являются: 0.51а и 0.55i.
Установка сферы на локальном компьютере:
1. Скачать Sphere Server (download.ultimasoft.ru)
2. Разархивировать в директорию для сферы
(например: D:UltimaSphere)
3. Настроить "файл настройки" sphere.ini
4. Создать аккаунт: зайти в папку accounts, открыть файл sphereacct.scp
и записать [ваше имя аккаунта]-которое вы будете вводить в поле Login
PLEVEL=ваш статус-1=player 4=GM 6=Admin 7=Owner и другие...
Password-ваш пароль-который вы будете вводить в поле password
5.Всё! Можно запускать сервер и играть. (не забудьте ввести в консоли сервера букву “a” иначе вы не зайдете своим аккаунтом на ваш сервер)

Скрипты сферы - объектно-ориентированный язык, что означает, что каждый скрипт приложен к объекту некоторым способом. При написании скриптов, вам понадобится понимание шестнадцатеричной системы исчисления. Также понадобится windows калькулятор, переведенный в научный режим, для перевода из десятичной системы исчисления в шестнадцатеричную и обратно. Зачем надо знать шестнадцатеричную систему? Хотя сфера становится всё более десятичной, многое ещё основано шестнадцатеричном. По этому, когда вы используете шестнадцатеричный вариант записи в сфере, то пишите 0 (ноль) в первом разряде. Такая форма записи сообщит сфере, что число является шестнадцатеричным.

// - это обозначение означает пояснение: здесь вы можете писать что угодно
например:
// пример я могу написать тут, что угодно и это будет игнорироваться
// сферой!


1.Spherebook.scp

Первые строки, которые вы увидите в этом скрипте:
[SCROLL SCROLL_MOTD]

ТУТ ВЫ МОЖЕТЕ НАПИСАТЬ ПРИВЕТСТВИЕ
ДЛЯ ЛЮДЕЙ ВОШЕДШИХ НА ШАРД ТИПА:
!!! WELCOM !!!
[SCROLL SCROLL_GUEST]
ДЛЯ ГУЕСТОВ-ТОЖЕ МОЖНО НАПИСАТЬ
ПРИВЕТСТВИЕ!

По умолчанию:

1.Welcome Guest Traveller you have entered !
2.A Guest account has been opened for you
3.Your life in this world is transient at best.
4.Consult with for a permenant account.

Пояснения:
1 Имя сервера, попробуйте зайти ГМом на вашу сферу и написать .SERV.SERVNAME
4 Адрес мыла админа (задается в sphere.ini)

Вообщем этот скрипт можно изменить на 90%.

2.Spherechar.scp

В этом скрипте представлены основные монстры и животные в игре
Например:

[CHARDEF 01]
DEFNAME=c_ogre
NAME=#NAMES_OGRE the Ogre
SOUND=snd_MONSTER_OGRE1
ICON=i_pet_OGRE
ANIM=078c7f
CAN=MT_WALK|MT_USEHANDS
DAM=5,15
ARMOR=16
RESOURCES=6 i_ribs_raw
FOODTYPE=15 t_meat_raw
DESIRES=c_ogre, t_arock

//ALIGNMENT=EVIL
SHELTER=r_forests,r_mountains
AVERSIONS=t_TRAP,r_civilization

CATEGORY=Monsters
SUBSECTION=Ettins, Ogres, Trolls, Cyclops, and Titans
DESCRIPTION=Ogre

ON=@Create // stuff that happens to the created instance of a char.
NPC=brain_monster
STR={165 195}
DEX={46 65}
INT={46 70}

PARRYING={45.0 55.0}
MAGICRESISTANCE={45.0 60.0}
TACTICS={60.0 70.0}
WRESTLING={70.0 80.0}

FAME=4500
KARMA={-1000 -1999}

ON=@NPCRestock
ITEM=loot_OGRE

1. [CHARDEF 01] Это - идентификатор огра, его ID. Вы можете использовать это число для вызова огра из игры .addnpc 01. Для создания своего монстра можно использовать любое имя, например “c_ogre_dark” и вызывать его из игры .add c_ogre_dark.

2. DEFNAME=c_ogre -так называемый DEFNAME, просто ID огра вместо 01. Также можно использовать для вызова из игры и при создании нового монстра, например “c_ogre_dark”. Необязательный параметр при создании монстра с таким же ID как и огр по дефолту.

3. NAME=#NAMES_OGRE the Ogre - Имя чара, в данном случае идет обращение к скрипту сферы spherename.scp-NAME=#NAMES_OGRE the Ogre рандомно выбирает имя огра. Можете найти в spherename.scp [NAMES NAMES_OGRE] и отредактировать все имена огров или создать новые…Выделенное синим the Ogre это title любого огра не зависимо от имени. Можно писать просто NAME=OGRE DARK, но тогда ваш огр будет появляться с одним и тем же именем OGRE DARK

4. SOUND=snd_MONSTER_OGRE1 - Звуки, которые издает огр. Смотри скрипт spheredefs.scp, там перечислены звуки, которые вы можете использовать и создать, например, огра который издает звуки лошади . Необязательный параметр при создании монстра с таким же ID как и огр по дефолту.

5. ICON=i_pet_OGRE - Фигура животного появляющаяся, например, при его шринковании. Необязательный параметр при создании монстра с таким же ID как и огр по дефолту.

6. ANIM=078c7f - это анимация огра. Необязательный параметр при создании монстра с таким же ID как и огр по дефолту.

7. CAN=MT_WALK|MT_USEHANDS- что может делать ваш огр? Необязательный параметр при создании монстра с таким же ID как и огр по дефолту.

Таблица CAN=MT_* (MT_* DEFNAME in hexadecimal,)

MT_NONMOVER 0 // не может двигаться
MT_GHOST 01 // может проходить все через что проходит призрак(когда вас убили)
MT_SWIM 02 // может плавать (применяется для животных и монстров которые могут плавать по дефолту, не ставьте на игроков!)
MT_WALK 04 // может передвигаться
MT_FLY 010 // например для деревьев
MT_FIRE_IMMUNE 020 // иммунитет к огню
MT_EQUIP 00100 // может одевать вещи
MT_USEHANDS 00200 // может использовать свои руки, чтобы открывать двери, чтобы носить в них: факелы, свечи, и т.д
MT_MALE 0 // мужчина
MT_FEMALE 00800 // женщина
MT_NONHUM 01000 // не человек

MT_RUN 02000 // может передвигаться очень быстро

Для присвоения нескольких MT_* ставьте разделитель “|”

8. DAM=5,15 - урон наносимый чаром по дефолту, общий урон считается от урона по дефолту, от силы, ловкости, тактики, других боевых скиллов используемых во время удара. DAM Не влияет на урон от магии. DAM сокращенное слово от DAMAGE. Необязательный параметр при создании монстра с таким же ID как и огр по дефолту.

9. ARMOR=16 - защита чара по дефолту, общая защита зависит, прежде всего от AR брони. Необязательный параметр при создании монстра с таким же ID как и огр по дефолту.


10. RESOURCES=6 i_ribs_raw - вещь которая будет лежать в трупе после разрезания, в данном случае 6 кусков мяса. Необязательный параметр при создании монстра с таким же ID как и огр по дефолту.

11-14. FOODTYPE, SHELTER, DESIRES, AVERSIONS - мне точно не известно для чего это нужно, Foodtype-то что должно есть существо, Shelter-местность в которой существует существо . Необязательный параметр при создании монстра с таким же ID как и огр по дефолту.

15.CATEGORY=Monsters
SUBSECTION=Ettins, Ogres, Trolls, Cyclops, and Titans
DESCRIPTION=Ogre
Это все для Аксиса. Удобная программа для Гмов. Скачать можно отсюда (http://www.q1.ru/ , http://www.sphereserver.com/). Необязательный параметр при создании монстра с таким же ID как и огр по дефолту.

16. ON=@CREATE -Триггер смотри далее про триггеры.

17-25. STR, DEX, INT, FAME, KARMA, SKILLS, BRAIN…-здесь вы задаете силу, ловкость, ум, фэйм, карму, скиллы, тип существа.

26. ON=@NPCRestock -Триггер смотри далее про триггеры. Необязательный параметр при создании монстра с таким же ID как и огр по дефолту.

27. ITEM=loot_OGRE - Template смотри далее про templates.

//Тут можно поместить триггер сразу на существо или воспользоваться //TEVENTS
ON=@CLICK
Message=[Ogre, Evil]

Также могут присутствовать TEVENTS, TSPEECH:
TSPEECH=spk_ogre_evil
TEVENTS=e_ogre_evil


[SPEECH spk_ogre_evil]
on=*Hello*
Say Hello my eat! I’am like people!
Say For Lunch, of course!

[EVENTS e_ogre_evil]
ON=@CLICK // можно поместить триггер тут
Message=[Ogre, Evil] // покажет над именем существа [Ogre, Evil]

Создаем своего монстра:

[chardef ogre_my] // c_ не обязательно
id=c_ogre // Задаем ID
name= MY OGRE the ogre my // делаем ему имя и title
icon=I_pet_ogre
dam=50 // это больно )
armor=40

ON=@Create // триггер
NPC=brain_monster // тип существа, сейчас монстр
STR={165 195} // сила
DEX={46 65} // ловкость
INT={46 70} // ум
// умения
PARRYING={45.0 55.0}
MAGICRESISTANCE={45.0 60.0}
TACTICS={60.0 70.0}
WRESTLING={70.0 80.0}
// Fame, karma
FAME=4500
KARMA={-1000 -1999}

ON=@NPCRestock // триггер
ITEM=loot_OGRE // template

Этот же скрипт можно написать еще короче(но без дополнительных параметров):

[chardef ogre_2]
id=01
name=Ogre my

on=@create
color=00a17 // можно задать даже цвет огра

это весь ваш огр

Вы можете изменить цену, за которую будет работать VENDOR:

[CHARDEF 0401]
DEFNAME=C_H_VENDOR
NAME=#NAMES_HUMANMALE the Vendor
ID=C_MAN
HIREDAYWAGE=50 // цена NPC, будет служить на вас 1день-50 gold coins
DESIRES=i_gold,e_notoriety
AVERSIONS=t_TRAP,t_eerie_stuff

3.Spheredefs.scp
Здесь вы найдете самую различную информацию

Например:

[DEFNAME HUES]
color_none 0
color_metal 0
color_violet_lt 14
color_red1 32
color_red2 33
color_cyan 88
color_gray_dk 802
color_energy_vortex 118
color_gray_lt 904
COLOR_DYE_HIGH 1000
color_ice 1152
color_snow 1153
color_rock 1154
color_spectral 17969

Для чего это нужно? Для удобства, конечно! Например, вам нужно окрасить своего огра в ледяной цвет: вы начнете подбирать цвет, потому что вы его забыли, но вчера вы ведь подобрали его?! Так вот, когда находите рарные цвета, записывайте их в spheredefs.scp для этого просто напишите
Color_ice_ogre 0480
Для того чтобы вызвать этот цвет, введите
Color=color_ice_ogre

4.Sphereevents.scp

В этом скрипте вы увидете все основные events (события)

Например:

[EVENTS e_Undead] // событие
ON=@EnvironChange // изменение погоды, триггер
// i like the dark
if || (&(statf_nightsight|statf_indoors)) // смотри IF
if ! // таг смотри таги
return 0
endif
anim 011
bark 4
str= // restore me.
hits=
tag.lightstr=0
karma=
tag.lightkarma=//just dispose of this.
fame=
tag.lightfame=
flags=&~statf_conjured // no loot if killed.
return 0
endif
// i can't live in light areas. weaken me ? or destroy me ?
anim 014
bark 4
if
return 0
endif
if ( &statf_conjured ) // Flags смотри flags
remove
return 1
endif
flags=|statf_conjured // no loot if killed.
tag.lightstr=
str=1
hits=1 // very weak.
tag.lightkarma= // killing it means nothing now.
karma=-2
tag.lightfame=
fame=10
return 0

Вы можете добавить свои события:

[EVENTS e_magic_immune] // событие
ON=@SpellEffect
RETURN 1
On=@click
Message=(Magic Immune)

// повесьте этот евент на вашего огра, он будет неуязвим для магии!
// и при нажатии на него, над его именем бедет (Magic Immune)


5.Триггеры.

@Click Активируется при нажатии
@CLIPERIODIC Активируется периодически при входе в регион
@Create Активируется при создании
@DAMAGE Активируется при нанесении урона
@DClick Активируется при двойном нажатии
@Death Активируется при смерти
@Destroy Активируется при уничтожении
@DROPON_CHAR Активируется при передаче предмета другому чару
@DROPON_GROUND Активируется при бросании предмета на землю
@DROPON_ITEM Активируется при бросании на другой предмет
@ENTER Для регионов:Активируется при входе в регион
@EnvironChange Активируется при изменении света,погоды
@EQUIP Активируется при экипировке
@EXIT Для регионов:Активируется при выходе из региона
@FIRE Активируется при стрельбе из лука
@FearOfDeath Активируется перед смертью
@GetHit Активируется при получении удара
@Hit Активируется при наесении удара
@HitMiss Активируется при промахе
@HitTry Активируется при попытке ударить
@itemClick Для событий:Активируется при нажатии на предмет
@itemDAMAGE Активируется при повреждении предмета
@itemDCLICK Для событий:Активируется при двойном нажатии на предмет
@itemDROPON_CHAR Активируется при пепредаче предмета чару
@itemDROPON_GROUND Активируется при бросании предмета на землю
@itemDROPON_ITEM Активируется при бросании предмета
@itemEQUIP Активируется при одевании предмета
@itemPICKUP_GROUND Активируется при поднятии предмета с земли
@itemPICKUP_PACK Активируется при поднятии предмета из бэкпака
@itemSPELL Активируется при кастовании на предмет
@itemSTACKON Активируется при добавлении предмета в кучу
@itemSTEP Активируется при наступании на предмет
@itemTARGON_CHAR Активируется при прицеливаии на чара
@itemTARGON_GROUND Активируется при прицеливаии на землю
@itemTARGON_ITEM Активируется при прицеливаии на предмет
@itemUNEQUIP Активируется при попытке надеть предмет
@LogIn Активируется при вхождения клиета в игру
@LogOut Активируется при логауте
@NPCAcceptItem Активируется при передаче нужного вам предмета от NPC
@NPCHearGreeting Активируется когда NPC слышит приветствия
@NPCHearNeed Активируется когда кто-то говорит о нужном предмете(NPC)
@NPCHearUnknown Активируется когда NPC слышит слова ,которые не понимает
@NPCRefuseItem Активируется когда кто-то дает ненужный предмет
@NPCRestock Активируется при пополнеии запасов торговца
@NPCSeeNewPlayer Активируется когда NPC видит нового игрока
@NPCSeeWantItem Активируется когда NPC видит нужный предмет
@PersonalSpace Активируется когда кто-то наступает на NPC
@PICKUP_GROUND Активируется при поднятии предмета с земли
@PICKUP_PACK Активируется при поднятии предмета из бэкпака
@Profile Активируется когда кто-то хочет посмотреть профайл
@ReceiveItem Активируется когда предмет получен(взят в руки)
@SELECT Активируется при выборе
@SkillAbort Активируется когда использование скилла закончено
@SkillFail Активируется при неудачном использовании скилла
@SkillSelect Активируется при выборе скилла из меню
@SkillStart Активируется когда начал использовать скилл
@SkillSuccess Активируется при удачном использовании скилла
@SkillTry Активируется при использовании скилла, до того как сервер сообщит удачно или нет
@SpellCast Активируется при кастовании
@SpellEffect Активируется когда кто-то на меня кастует
@STACKON Активируется при добавления в кучу
@START Активируется при старте
@STEP Активируется при наступании
@SUCCESS Активируется при успехе
@TARGON_CHAR Активируется при наведении целеуказателя на существо
@TARGON_GROUND Активируется при наведении целеуказателя на землю
@TARGON_ITEM Активируется при наведении целеуказателя на предмет
@TIMER Активируется когда таймер покажет 0

Пример:

[itemdef I_stone_my]
id=01184
name=Stone of Trade
type=t_normal

on=@create
color=color_ice_ogre // не забыли???

On=@dclick // вот ОН, ТРИГГЕР
Src.menu m_stone_my // при двойном нажатии отпраляет в меню m_stone_my

[menu m_stone_my] // ваше первое меню ))) смотри далее Menu
What are you want?
On=0 50 arrows (price 500 gold)
if // проверка на деньги
src.consume=500 i_gold // если есть забирает 500
src.newitem=i_arrow // дает стрелу одну!
src.act.amount=50 // увеличивает кол-во стрел до 50
src.act.bounce // кладет в сумку
src.sysmessage=Thank thee // пишет Thank thee
else // если денег нету
src.sysmessage=You need money // пишет You need money
endif // конец if
return 0 // закрывает окно
on=0 Exit // выход
return 0 // закрывает окно

6. ITEMDEF
Применение itemdef вы можете увидеть во многих скриптах например во всех скриптах с начальным словом: sphereitem_*

Пример:
[ITEMDEF I_sword_my]
id=I_sword_long
name=My Sword
type=t_weapon_sword // тип меча
WEIGHT=14 // вес
SKILL=swordsmanship // используемый скилл
DAM=15,43 // урон
REQSTR=50 // нужно силы
TWOHANDS=n // n или y (двуручный или одноручный)

on=@click // триггер
message=[+5 str]

ON=@CREATE
HITPOINTS=115,150

ON=@EQUIP
SRC. swordsmanship =(+5.0)
RETURN 0

ON=@UNEQUIP
SRC. swordsmanship =(-5.0)
RETURN 0

1. ITEMDEF I_sword_my - вызывать из игры по этому имени .add I_sword_my

2. ID предмета, в данном случае I_sword_long

3. Name = имя предмета

4. TYPE= t_weapon_sword - задает что это меч, что нападает как меч, что свойства у него такие как у меча. Все типы вы найдете в скрипте spheredefs.scp под этой строкой-[TYPEDEFS]

5. Вес

6. Нужно силы, чтобы одеть

13. HITPOINTS=115,150 - задает прочность вещи.

15. добавляет 5.0 к сворде!

18. отнимает 5.0 от сворды!

Также вы можете добавить цену к этому предмету!

VALUE=500 // будет брать 500 гольда за покупку этого предмета! Чтобы можно было покупать этот предмет у торговцев(VENDOR) ищите скрипт spheretemp_vend, затем найдите [TEMPLATE 102168] или любой другой TEMPLATE и добавьте :

[TEMPLATE 102168]
DEFNAME=VENDOR_S_WEAPONS_BLADED
CATEGORY=Vendor Templates
SUBSECTION=Sell Templates
DESCRIPTION=Bladed Weaponsmith
// добавьте тут SELL=I_sword_my,{5 10}
SELL=i_axe_exec,{10 15}
SELL=i_bardiche,{10 15}
SELL=i_axe_battle,{10 15}
SELL=i_axe_battle_large,{10 15}
SELL=i_bow,{10 15}
SELL=i_knife_butcher,{10 15}
SELL=i_crossbow,{10 15}
SELL=i_crossbow_heavy,{10 15}
SELL=i_cutlass,{10 15}
SELL=i_dagger,{10 15}
SELL=i_halberd,{10 15}
SELL=i_hammer_pick,{10 15}
SELL=i_katana,{10 15}
SELL=i_kryss,{10 15}
SELL=i_sword_broad,{10 15}
SELL=i_sword_long,{10 15}
SELL=i_sword_long_b,{10 15}
SELL=i_sword_viking,{10 15}
SELL=i_cleaver_meat,{10 15}
SELL=i_axe,{10 15}
SELL=i_axe_double,{10 15}
SELL=i_pickaxe,{10 15}
SELL=i_pitchfork,{10 15}
SELL=i_scimitar,{10 15}
SELL=i_knife_skinning,{10 15}
SELL=i_axe_two_hand,{10 15}
SELL=i_axe_war,{10 15}

[TEMPLATE 102169]
DEFNAME=VENDOR_B_WEAPONS_BLADED
CATEGORY=Vendor Templates
SUBSECTION=Buy Templates
DESCRIPTION=Bladed Weaponsmith
// добавьте тут BUY=I_sword_my,{5 10}
BUY=i_axe_exec,{10 15}
BUY=i_bardiche,{10 15}
BUY=i_axe_battle,{10 15}
BUY=i_axe_battle_large,{10 15}
BUY=i_bow,{10 15}
BUY=i_knife_butcher,{10 15}
BUY=i_crossbow,{10 15}
BUY=i_crossbow_heavy,{10 15}
BUY=i_cutlass,{10 15}
BUY=i_dagger,{10 15}
BUY=i_halberd,{10 15}
BUY=i_hammer_pick,{10 15}
BUY=i_katana,{10 15}
BUY=i_kryss,{10 15}
BUY=i_sword_broad,{10 15}
BUY=i_sword_long,{10 15}
BUY=i_sword_long_b,{10 15}
BUY=i_sword_viking,{10 15}
BUY=i_cleaver_meat,{10 15}
BUY=i_axe,{10 15}
BUY=i_axe_double,{10 15}
BUY=i_pickaxe,{10 15}
BUY=i_pitchfork,{10 15}
BUY=i_scimitar,{10 15}
BUY=i_knife_skinning,{10 15}
BUY=i_axe_two_hand,{10 15}
BUY=i_axe_war,{10 15}

BUY=i_log,{10 15}
BUY=i_ingot_iron,{10 15}

Неудобные бутылки
Наверное все знают проблему с бутылками-они не падают в кучу!

[ITEMDEF i_potion_Refresh]
NAME=Refresh
ID=I_bottle_red // замените тут на I_bottle_empty (вот решение!!!)
TYPE=T_POTION
TDATA1=i_bottle_empty
RESOURCES=i_reag_black_pearl, i_bottle_EMPTY
SKILLMAKE=ALCHEMY 0

ON=@Create
color=0a0e // сделайте любой

on=@dclick
MORE1=s_Refresh // рефреш
MORE2=50.0 // сила РЕФРЕША, можно поставить 100.0

Создание предмета с эффектом!!!

[itemdef I_kryss_flame]
id=I_kryss
name=Kryss of flamestrike
type=t_weapon_fence

on=@create
hitpoints=100
color=0954

ON=@EQUIP
SRC.SPELLEFFECT 06 1000 // при экипировке кастует nightsight
// Будет бить флайм страйками

ON=@DAMAGE
SRC.EFFECT=3,03709,1,20,1
src.hits=(-{10 30})

Создание лука, который будет стрелять вашими стрелами!!!

[itemdef I_bow_ar_my]
id=I_bow
name=Bow My
type=t_weapon_bow

TDATA3=i_my_arrow // ID вещи, которая нужна чтобы стрелять
TDATA4=036f4 // анимация, чем будет стрелять

on=@create
color=0455 // черный цвет

[DEFname my]
color_my 0455

[itemdef I_my_arrow]
id=I_arrow
name=My arrow

on=@create
color=color_my

7.Ваши команды?!

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

Моя реагент система! Киньте это в любой скрипт, а в игре напишите .reagents для простых стандартных реагентов, .reagents2 для сложных реагентов!

[PLEVEL 1]
reagents
reagents2

[FUNCTION reagents]
src.sysmessage=Standard Reagents
// eval используется тут для отображения общего числа реагентов, после того
// как rescount сосчитает их количество
src.sysmessage=> Spider Silk
src.sysmessage=> Sulfurous Ash
src.sysmessage=> Nightshade
src.sysmessage=> Blood Moss
src.sysmessage=> Ginseng
src.sysmessage=> Garlic
src.sysmessage=> Mandrake Root
src.sysmessage=> Black Pearls

[FUNCTION reagents2]
src.sysmessage=Advanced Reagents
src.sysmessage=> Batwings
src.sysmessage=> Blackmoor
src.sysmessage=> Bloodspawn
src.sysmessage=> Bones
src.sysmessage=> Vials of Blood
src.sysmessage=> Brinstone
src.sysmessage=> Daemon Bones
src.sysmessage=> Fertile Dirt
src.sysmessage=> Dragons Blood
src.sysmessage=> Executioners Cap
src.sysmessage=> Eye of Newt
src.sysmessage=> Obsidian
src.sysmessage=> Pig Irong
src.sysmessage=> Pumice
src.sysmessage=> Serpents Scales
src.sysmessage=> Volcanic Ash
src.sysmessage=> Dead Wood
src.sysmessage=> Worms Heart

После этого скрипта, я думаю вам будет не трудно сделать функцию для подсчета стрел и болтов!

Хотите узнать, сколько человек в онлайне? Киньте это в любой скрипт, а в игре напишите .online

[PLEVEL 1]
ONLINE

[FUNCTION ONLINE]
VAR.CLIENTS 0
tag.start 1
SERV.ALLCLIENTS getname
TRYP 0 VAR.NAME+1>
TRYP 0 VAR.NAME+2>
TRYP 0 VAR.NAME+3>
TRYP 0 VAR.NAME+4>
TRYP 0 VAR.NAME+5>
TRYP 0 VAR.NAME+6>
TRYP 0 VAR.NAME+7>
TRYP 0 VAR.NAME+8>
SRC.DIALOG d_show_clients
RETURN 1

[FUNCTION getname]
IF (==1)
VAR.CLIENTS +1>
TRYP 0 VAR.NAME> None
TRYP 0 VAR.NAME>
RETURN 1
ENDIF

[DIALOG d_show_clients]
0, 0
nomove
resizepic 0 0 3600 300 280
text 30 17 0052 8
text 30 37 0052 9
text 30 67 1152 0
text 30 87 1152 1
text 30 107 1152 2
text 30 127 1152 3
text 30 147 1152 4
text 30 167 1152 5
text 30 187 1152 6
text 30 207 1152 7
button 262 252 4005 4006 1 0 1
button 6 252 4014 4015 1 0 2

[DIALOG d_show_clients TEXT]
>. >>
+ 1>. + 1>>
+ 2>. + 2>>
+ 3>. + 3>>
+ 4>. + 4>>
+ 5>. + 5>>
+ 6>. + 6>>
+ 7>. + 7>>
Dark Lands World
Players online: >

[DIALOG d_show_clients BUTTON]
on=1
tag.start = + 8
dialog d_show_clients

on=2
tag.start = + (-
dialog d_show_clients

8. IF
Оператор IF позволяет выполнить входящий в оператор код.
IF (<45)
SAY You are newbie!
else
Say You are not newbie!
endif
В первой строке проверяется условие, заданное в скобках после оператора IF.
Если ваша сила меньше 45 то вам говорят, что вы ламер, ели же нет то вам говорят что вы не ламер. Вот значения

== Равное
!= Не равное
> Больше
< Меньше
>= Больше или равное
<= Меньше или равное



[itemdef I_sword_if]
id=I_sword_Viking
name=If sword
type=t_weapon_sword

on=@create
hitpoints=120

ON=@EQUIP
IF ( < 100.0)
SRC.SYSMESSAGE You need 100.0 swordsmanship to equip this
RETURN 1
ENDIF

В этом скрипте проверяется есть ли у вас 100.0 сворды если есть то мечь оденется, если нет то не оденется !

ELSEIF понадобиться тогда, когда вам надо будет проверить много вариантов:

On=@equip
If >50
Src.sysmessage= You very strong!!!
Elseif (==50)
Src.sysmessage= You need str!!!
Return 1
Elseif (==49)
Src.sysmessage= You LAMER!
Return 1
Else
Src.sysmessage=You need more strength
Return 1
Endif

Чтобы добавить значение, используйте “&&”

IF (=5 && =5)
Src.sysmessage=You at full heal!
endif

^Это будет читаться как: если у тебя 5 силы и 5 хелсов то ты здоров! Но для такой проверки легче использовать:
IF (== )
Src.sysmessage=You at full heal!
Endif

Чтобы написать такое: если у тебя 100 силы или 100 ловкости, то ты сильный, напишите следующее:
IF (=100 || =100) // используется знак “||”
Src.sysmessage=You strong!
Endif

11.Другие операторы.

+-плюс
--минус
*-умножить
/-делить
&-и
|-или
==-эквивалентно
!=-не эквивалентно
&&-и
||-или


10.Templates
Используется для того, чтобы не писать одно и то же. Можете взглянуть на скрипт spheretemp_loot, там представлены templates. При помощи templates вы можете насовать вещей в сумку, положить эту сумку в ещё одну сумку. Рассмотрим Loot_template:

[TEMPLATE 150021]
DEFNAME=loot_LICH_LORD
CATEGORY=Item Templates
SUBSECTION=Monster Loot Templates
DESCRIPTION=Lich Lord // зелёное для аксиса
CONTAINER=i_backpack
Container=i_bag // ложим все в сумку
ITEM=TTM_LVL4,R99
ITEM=RANDOM_SCROLL,{ 2 3 } // любой scroll (2 или 3)
ITEM=RANDOM_REAGENT,{ 4 6 } // тоже используется template
ITEM=RANDOM_REAGENT,{ 4 6 }
ITEM=RANDOM_JEWEL
ITEM=RANDOM_JEWEL
ITEM=RANDOM_MAGIC_WANDS,R99
ITEM=RANDOM_MAGIC_WANDS,R99
ITEM=I_SCROLL_BLANK
ITEM=i_staff_gnarled
ITEM=i_reag_BLACKMOOR,{5 10}
ITEM=i_gold,{700 800}
ITEM={ i_reag_garlic 1 i_reag_ginseng 1 } // Сдесь может выпасть или Garlic или Ginseng!
ITEM=I_sowrd_long,R5

R5 это значит, что вы не всегда найдете в трупе этот сворд, вроде как шанс нахождения - примерно при каждом 5ом убитом монстре, будет лежать этот меч . То есть в одном из пяти ! Если сделать R10, то меч будет падать из 1ого из 10ти!

Vendor templates - взгляните в файл spheretemp_vend, там вы найдете множество templates ни чего сложного в них тоже нет! Просто добавляешь любую вещь, пишешь количество и всё! Выше мы уже разбирали, как это делается.

Просто template - используется, например, для вызова вещей одного комплекта за один раз! Пример:

[TEMPLATE MY_platemail_complect]
CATEGORY=Item Templates
SUBSECTION=Miscellaneous
DESCRIPTION=Poor Gold Pile // for axis
Container=I_bag // даст все в сумке!!
ITEM=i_platemail_chest
ITEM=I_platemail_arms
ITEM=I_platemail_leggings
ITEM=I_platemail_helm
ITEM=I_platemail_gloves
ITEM=I_platemail_gorget

Киньте это в любой скрипт, а в игре напишите .add my_platemail_complect

12.Создание диалогов.

Для создания диалогов вам могут понадобится некоторые программы, например InsideUO можно скачать с официального сайта download.ultimasoft.ru
Если вы хотите создавать диалоги быстро, но не очень качественно, юзайте DialogStudio (download.ultimasoft.ru)

Основные параметры для создания диалогов:

1 [DIALOG d_my_dialog]
тут будут Гампы, высота, ширина
2 [DIALOG d_my_dialog TEXT]
тут будет находится текст
3 [DIALOG d_my_dialog BUTTON]
тут будут кнопки

[DIALOG d_my_dialog]
Далее вы можете написать следующее:

Noclose
Нельзя закрыть правой кнопкой мыши

Nomove
Нельзя перемещать окно

Nodispose
я точно не знаю для чего это, но если будет стоять после nomove
и/или noclose то эти строки( nomove, noclose) работать не будут.

text
Расположение и параметры текста в диалоге; <х> и <у> - координаты, по которым будет располагаться текст; <сolor> - цвет текста; параметр - это номер строки, в которой ниже располагается текст; строки считаются начиная с первой строки содержащей текст (в разделе данных) и эта строка имеет номер 0.

,
Расположение окна диалога.

resizepic
Тут описывается рисунок фона (background), его расположение, высота, ширина. Значения gump id ищите через InsideUO.

button
Задает параметры кнопки в диалоге. - координаты id гампа нажатой кнопки id гампа не нажатой кнопки
эффект нажатия страница индекс кнопки

page
страница

group
группа диалога

gumppic
картинка по координатам

tilepic
вставляет картинку (не гамп а тайл) (смотри InsideUO) координаты id тайла в десятичной системе

radio
Кто знает HTML тому все ясно, кто не знает поясню, это такая кнопка “кружок с точкой” можно выбрать только один из всех. выбрано/не выбрано

checkbox
Опять же HTML. Кнопка “квадратик с галочкой”

textentry
выводит текст который можно изменить - ширина и высота гампа; - цвет текста; - это "номер" строки ARGTXT[] возвращает значение, введенное в строку

htmlgump
- координаты; - ширина, высота; - флаг, если 0, фон прозрачный, если 1 - нет; - флаг, 1 - Scrollbar есть, 0 - нету; - номер строки минус 1 из [DIALOG xxx TEXT] (1-ая строка - 0, 2-ая - 1 и т.д.)



13.MENU

Вот пример:

[menu test_menu]
Test menu
On=0 Check SAY
Say I’am check “say”
Return 0
On=0 Check Message
Src.Message=I’am check “message”
Return 0
On=0 Check Sysmessage
Src.sysmessage=I’am check “sysmessage”
Return 0
On=0 Exit
Return 0

1. [MENU test_menu] все меню начинаются с [MENU имя вашего меню]
2. Строка над меню
3. кнопка и название Check SAY
4. Говорит I’am check “say”
5. Return 0 закрывает окно
6. кнопка и название Check Message
7. Над вами надпись I’am check “message”
8. Return 0 закрывает окно
9. кнопка и название Check Sysmessage
10. В нижнем левом углу I’am check “sysmessage”
11. Return 0 закрывает окно
12. кнопка и название Exit
13. Return 0 закрывает окно


14. TAG’s

TAG это STRING
Вы можете давать TAGам любые имена, например SRC.TAG.FIRSTTAG=1 и перед TAGом обязательно ставьте SRC.!!!

Несколько пример, того как применять TAGи:

On=@dclick
If ( ==1)
Src.sysmessage=Your TAG.dct is 1, this means you already change your name.
Else
Src.name=TAGUSER
Src.tag.dct=1
Endif

On=@skillstart // при создании чара сделайте ему SRC.TAG.skillrun=1
Src.tag.skillrun=+1>
Src.sysmessage= Your status of skill starting!!!
Return 1

On=@equip
Src.tag.equiptag=You equip this item with TAG
Src.sysmessage=
Return 0

После использования TAGа удаляйте его, это делается так: SRC.TAG.FIRSTTAG=




15. Пишем скрипт

Напишем камень, для примера:

[itemdef I_stone_of_heal] // itemdef
id=01184
name Heal Stone
type=t_script

on=@create
color=0455

on=@click
message=[Stone of heal]

on=@dclick
if // проверяет ГМ ли вы!!!
menu m_for_gm // открывает меню
else // если не ГМ
menu m_for_users // открывает меню для плайеров!!!
endif

[menu m_for_gm]
This is GM menu
On=0 Full heal (not priced)
Src.newitem=I_fullheal
Src.act.bounce
Return 0

[MENU m_for_users]
This is Menu for players
on=0 full heal (5000 gold)
if // проверяет есть ли 5000
src.consume=5000 I_gold // забирает 5000
src.newitem=I_fullheal
src.act.bounce
src.sysmessage=You buy a Full Heal!!! Thank Thee!!!
Else
src.sysmessage=You need more money to buy it!!!
Endif
Return 0

[itemdef I_fullheal]
id=I_bottle_empty
type=t_script
name=Full Heal

on=@create
color=00a02

on=@dclick
src.hits= // делает ваши хиты равными силе
src.consume I_fullheal
src.newitem=I_bottle_empty
src.act.bounce

Пишем браслет на регенерацию маны

[ITEMDEF i_mana_bracelet]
NAME=Mana Regeneration Bracelet
ID=01086
TYPE=t_jewelry

ON=@CREATE
COLOR=0e
ATTR=attr_newbie

ON=@EQUIP
LINK=
TIMER=1
RETURN 0

ON=@TIMER
IF (< )
LINK.mana=+1
ENDIF
TIMER=1
RETURN 1

ON=@UNEQUIP
LINK=04FFFFFFFF
TIMER=-1
RETURN 0

Пишем свой EVENT и функцию, я написал вот что:
POISON IMMUNE:

[EVENTS e_poison_immune]

on=@skillstart
src.poison_immune

ON=@EnvironChange
Src.poison_immune

On=@spellcast
Src.poison_immune

On=@hit
Src.poison_immune

on=@spelleffect
IF (==20) // poison
src.emote see Имя вашего монстра resist posion
RETURN 1
ELSEIF (==39) //Poison Field
src.emote see Имя вашего монстра resist posion
RETURN 1
return 0
endif

[function poison_immune]
IF ((&STATF_Poisoned)==STATF_Poisoned)
SRC.FLAGS=&~STATF_Poisoned
SRC.SPELLEFFECT=s_cure 1000
SRC.EMOTE=resist poison
ENDIF

Вешайте это на любое существо и у него будет иммунитет к поизону


16.Объекты

SRC
Для евента @dclick Src, покажет кто нажал. Для евента @damage Src, покажет кого бьют. Все евенты (события) имеют SRC за исключением @TIMER.

ACT
ACT обозначает прошлый совершавший действие предмет

TARG
Цель

CONT
Допустим, мемори предмет хочет отнять евент у чара на котором данный мемори предмет одет. Получится, что мемори отнимет так:
CONT.EVENTS=-e_event
В целом CONT это контейнер объекта

TOROBJ
Если предмет находится в контейнере или еще в нескольких, то применяйте TOROBJ

SERV
Используется админами например, чтобы узнать имя сервера введите .SERV.SERVNAME

LINK
Ссылка на объект

SECTOR
Весь мир Британии разбит на 64*64 секторов. Это сектор в котором находится плаер.

REGION
Регион, в котором находится чар

ACCOUNT
Игровой аккаунт

UID.xxx
Предмет с UID.xxx

FINDLAYER(смотри в spheredefs.scp layers)
Предмет в слое

FINDID.”id”
Первый попавшийся предмет с указанным ID в бэкпаке.

FINDTYPE.”type”
Первый попавшийся предмет с указанным type в бэкпаке.

FINDCONT.xxx
Ищет предмет в контейнерах в вашем бэкпаке

17.Spheretable.scp

Этот скрипт читается первым после sphere.ini. Этот скрипт важен для sphere
т.к. в нем присутствуют сами пути к скриптам!

[RESOURCES]
добавляйте тут свои новые Скрипты
// sphere.ini and spheretable.scp are automatic.
// All the other scripts we want to load.
spherebook.scp
sphereevents.scp
spheredefs.scp
spheredialog.scp
spherehelp.scp
sphereresources.scp
sphereitemb1.scp
sphereitemb2.scp
sphereitemb3.scp
sphereitemb4.scp
sphereitemb5.scp

[RESOURCES]
сдесь вы можете распределить свои скрипты по папкам например:
/scripts/speech/
/scripts/defs/
/scripts/items/
/scripts/chars/
/scripts/
/scripts/custom/


[OBSCENE]
слова которые не будут отображаться должным образом

[PLEVEL X]
команды, которые могут использовать определенные ПЛЕВЕЛЫ

[STARTS]
здесь можно сделать так, чтобы при создании нового чара и нажатии на британии, как стартовом городе вы оказались во Вронге или Деспайсе

[RUNES]
Вы можете отредактировать все слова, главное чтобы начинались они с буквы от А до Я хмм…. От A до Z будет правильней

18. Spheretable_x
В этом скрипте перечислены все спеллы. Например:
[Spell 16] // .cast 16 вызовет этот спелл!
DEFNAME=s_strength
NAME=Strength // имя
SOUND=snd_SPELL_STRENGTH // sound смотри spheredefs.scp
RUNES=UM //слова которые произносятся когда каст точнее первые буквы
CAST_TIME=2.0 // время, сколько ждешь
RESOURCES=i_reag_mandrake_root,i_reag_nightshade // эти реги нужны
RUNE_ITEM=i_rune_STRENGTH // кастаните на себя strength и .EDIT там будет i_rune_STRENGTH !!!
SCROLL_ITEM=i_scroll_STRENGTH // Scroll этого спелла!
FLAGS=SPELLFLAG_TARG_CHAR | SPELLFLAG_FX_TARG| SPELLFLAG_GOOD // Flags смотри флаги
EFFECT_ID=i_fx_BLESS_EFFECT // это эффект спелла
EFFECT=5,15 // сила еффекта
DURATION=2*60.0,3*60.0 // продолжительность
MANAUSE=6 // маны нужно
SKILLREQ=MAGERY 20.0 // нужно магери чтобы каст


Blood Lands_2

Shard-Oskom

Sphere_55i


Abakan Realms
    

Истории
· Дневник Балрона
· Дневник орка Гырша
· Друой мир
· Закон Гоблинов
· Хроники Галара
· На кладбище
· Не бывает добра от зла
· Первый день весны
· Правда Жизни
· Night of GM
Учебники
· Учебник по скриптингу

Заметки
· Переменные для чаров
· Переменные для вещей
· Переменные зон.
· Использование оператора IF
· Создание item
· Создание Npc
· Создание trigger
· Все trigger
· Pointers

Работа с вердатой
· Введение
· Редактирование GUMP-ов
· Pедактирование ART-графики
· Добавление нового итема
· Новые монстры
· Ездовые животные
· Новые multi-объекты

All Rights Reserved (C) 2003-2005 Apple Inc,
Копирование информации с сайта Запрещается.

Сайт создан в системе uCoz