Сообщений: 3
Тем: 1
Зарегистрирован: Oct 2012
15.10.2012, 18:56
(Сообщение последний раз редактировалось: 15.10.2012, 20:30 Jet.)
In the first, I apologize for my language Russia, I use a translator and Google for the text, but I think that I speak better English than Rusian.
I have a question -> How can I create a script (* scrptt *) (scenario card) to use commands godmode (0,1)
For example, I want that when a player use this godmode (0,1) command your character will die.
When he uses his body code GodMode die.
I try to use it for this example:
Код: Script #Follow#1
(
if
(
Godmode(0,1)
)
then
(
KillScript( )
KillUnit( getleader() )
)
)
But it is not working. : (: (
Can you tell me what I'm doing wrong or how to write a script like this?
Сообщений: 1,100
Тем: 157
Зарегистрирован: Feb 2002
15.10.2012, 20:27
(Сообщение последний раз редактировалось: 15.10.2012, 20:32 Jet.)
Sorry, but translated text is totally unusable. :unsure:
Can you please write in english along with translation.
Anyone can use translation to understand your question.
Сообщений: 265
Тем: 11
Зарегистрирован: Mar 2011
15.10.2012, 20:27
(Сообщение последний раз редактировалось: 15.10.2012, 21:02 Demoth.)
Боюсь, что простого способа узнать, включен ли режим бога, скриптами нельзя.
Ты можешь раз в секунду или чаще отключать режим бога:
Код: Script TurnOffGodMode // Turn off god mode every 1/3 second
(
if
(
)
then
(
KillScript()
Sleep(5)
GodMode(0, 0)
TurnOffGodMode()
)
)
Либо, например, проверять, не убит ли какой-то юнит, который не может быть убит обычным способом по сценарию. Т.е. допустим у нас есть зеленый троль, которого игрок не может и не должен убивать. Если же он был убит, значит у игрока включен режим бога, и потому его надо наказать.
Код: Script IsUnitGod // Kill leader if he killed some very difficult unit
(
if
(
IsDead(SomethingQuestUnit)
)
then
(
KillScript()
Sleep(2)
GodMode(0, 0)
KillUnit(GetLeader())
)
)
Насчет твоего примера, у тебя ошибка в том, что GodMode - это процедура, которая устанавливает значение. С помощью нее нельзя узнать, включен ли режим бога или нет.
Сообщений: 1,100
Тем: 157
Зарегистрирован: Feb 2002
Please let us know if you need help in translation the answer.
Сообщений: 3
Тем: 1
Зарегистрирован: Oct 2012
Огромное спасибо Demoth вы великий помочь мне ) ) ) Я думаю, что это было . Я постараюсь это.
Я говорю Вери плохо на английском языке Jet я лучше использовать Россию с помощью переводчика
У меня есть также 2 вопрос - если вы знаете, если я могу спросить.
1)
Я хочу использовать некоторые * Сценарий * для всех игроков (не только для getleader (), но для для getleader () + другие игроки в сервере)
Например, когда некоторые игроки (getleader () или игрок 2 - своему другу или игрока 3) будет находиться в районе "25", то заклинание работы по игроку, который находиться в районе 25
например
Код: Script Float#2
(
if
(
Isinarea 25 ( PLAYER )
)
then
(
KillScript( )
CastSpellUnit("slow{d2}", 310,146, // Игрок, который находится в районе - PLAYER // )
)
)
-> как я делаю что то, что заклинание в код будет работать на месте, а не для ОБЪЕКТ?
2)
Другой вопрос:
Я хочу, чтобы заклинания работали не на объекте, а в области
как я делаю что то, что заклинание в код будет работать на месте, а не для ОБЪЕКТ
* scriptt * например
Код: Script Float#3
(
if
(
IsDead( GetObjectByName( "Merc3" ) )
)
then
(
KillScript( )
CastSpellUnit("acid_fog{d2}", 310,146,ОБЪЕКТ)
)
)
Например заклинание:
CastSpellUnit("acid_fog{d2}", 310,146, getX (45) , getY (12) )
и я хочу, что объект не будет возражать, но будет указывать х и у на карте
как это
как сделать так, чтобы объект х был заменен г и у координаты?
Сообщений: 265
Тем: 11
Зарегистрирован: Mar 2011
16.10.2012, 00:07
(Сообщение последний раз редактировалось: 16.10.2012, 00:14 Demoth.)
Avaroscient, все очень просто. Тебе нужно использовать процедуру Код: CastSpellPoint( constSpell : string , x1 : float , y1 : float , x2 : float , у2 : float )
// x1, y1 - точка где появляется заклинание, x2, y2 - точка куда оно кастуется
Avaroscient,Понедельник, 15 Октября 2012, 21:20 Написал:Isinarea 25 ( PLAYER ) Это не корректный вызов функции. Функция IsInArea имеет формат Код: IsInArea( idArea : float , x : float , y : float ) : float
И потому правильно писать: Код: IsInArea(25, GetX(PLAYER), GetY(PLAYER))
----------------
P.S. Список скриптовых функций ты можешь посмотреть например здесь.
Сообщений: 265
Тем: 11
Зарегистрирован: Mar 2011
18.10.2012, 22:51
(Сообщение последний раз редактировалось: 18.10.2012, 22:59 Demoth.)
Avaroscient, ваше сообщение чрезвычайно трудно понять из-за плохого перевода, но я все же постараюсь ответить.
1) Как я понял, вам требуется применить на всех игроков, находящихся в зоне 25, некоторое заклинание.
Для того, чтобы получше объяснить вам, как нужно это сделать, приведу пример скрипта с комментариями.
Скрипт написан целиком, поэтому, если будете его использовать, то будьте аккуратны, перенося его к себе. Код: GlobalVars(
//Все игроки, которые играют на сервере, автоматически попадают в группу Heroes.
Heroes : group,
i : object // переменная-счетчик. Нужна для цикла ForIf и Any. Смотри ниже.
)
// #CastSpellOnAllPlayersInArea - длинное название для наглядности.
DeclareScript #CastSpellOnAllPlayersInArea()
Script #CastSpellOnAllPlayersInArea
(
if
(
// Any(объект-счетчик, группа, условие) : float
// функция Any возвращает значение ИСТИНА,
// если хотя бы для одного существа из группы выполнено условие.
// Иначе, она возвращает ЛОЖЬ.
// Таким образом, тело скрипта выполнится, тогда и только тогда,
// когда хотя бы один из игроков будет находиться в зоне 25.
Any(i, Heroes, IsInArea(25, GetX(i), GetY(i)))
)
then
(
KillScript()
Sleep(2)
// Цикл ForIf(объект-счетчик, группа, условие) ( ТЕЛО ЦИКЛА )
// Цикл переберет всех существ из группы Heroes(то есть всех игроков),
// для которых выполнено условие IsInArea(25, GetX(i), GetY(i)), то есть существо из группы игроков находящиеся в зоне 25.
ForIf(i, Heroes, IsInArea(25, GetX(i), GetY(i)))
(
CastSpellUnit("slow{d2}", 310,146, i) // Применяем заклинание для этого существа
)
#CastSpellOnAllPlayersInArea() // Запускаем проверку по-новой.
)
)
WorldScript
(
// Вызываем функцию. Просто для примера. Вы не обязаны вызывать ее именно здесь.
#CastSpellOnAllPlayersInArea()
)
Не могу гарантировать, что скрипт на 100% корректен - я мог где-то опечататься.
2)
"bz10k" - это ключевое название карты. Оно указывается в map.txt(для компании) и в map-lmp.txt(для сетевой игры).
Должен предупредить, что команда LeaveToZone в сетевой игре работает не корректно - она перенесет на другую карту лишь того игрока, кто создал сервер, все остальные игроки на сервере потеряют соединение(у них случиться ошибка, как если бы сервер выключился).
Что насчет map.txt и map-lmp.txt, нужно в любой из них(в сетевой игре, корректно сработают оба варианта. Надежнее всего, конечно же map.txt. Проведите эксперимент. ) добавить запись о "новой локации". Например в таком стиле: Код: #zone gz13k_mp ingos game
#res
zone13 zone13-lmp
#maps
14 10
zone13map zone13quest
#figure
ingm313
#position
0 0 0
#weather
snow
#sky
normal
Описание формата файла map.txt можно найти в оригинальном map.txt. Код: ## format:
##
## #zone zone_name allod_name type // types can be: game, brief, edge
## #res
## MprFile MobFile // files to load
## #maps
## Xsize Ysize // size in sectors
## MinimapTexture ObjTexture // textures to load: for minimap and objectives screen
## #figure
## FigureName // for single player only: figure to load
## #position
## x y z // for single player only: position on global map
## #weather
## none | rain | snow // weather type in this zone. default: rain
## #sky
## normal | cave // sky type in this zone. default: normal
## #exit 1
## neighbour_zone_name NExit // neighbour zone for this exit and corresponding exit there
## #deploy
## x1 y1 x2 y2 // deploy rectangle for this exit
## #remove
## x1 y1 x2 y2 // remove rectangle for this exit
## #passtime
## PassTime // for single player only: default pass time
## #view
## Angle // camera rotate angle of this entrance
## #exit 2
## ...
##
## #quest quest_name
## x y z // for single player only: position on global map
##
################################################
Вот оно.
Надеюсь это вам хоть как-то поможет.
3) К сожалению, я не совсем понял, о чем идет речь. Постарайтесь описать подробнее. (Перевод google может сработать лучше, если оригинальный текст не будет содержать ошибок )
Удачи!
Сообщений: 11
Тем: 2
Зарегистрирован: Oct 2006
So if is here a topic about scripting in Evil Island, I have a few questions.
1)Is there any possibility to return value in custom script ? Something like return in c/c++.
2)Is there possibility to create monsters in script?
Сообщений: 265
Тем: 11
Зарегистрирован: Mar 2011
19.10.2012, 08:56
(Сообщение последний раз редактировалось: 19.10.2012, 08:57 Demoth.)
Joogi,
1) If you mean script construction Код: Script #SomeScript(
if
(
...
)
then
(
...
)
if
...
)
then no, script can return value only with global var(defined in GlobalVars construction in .mob file) in script or global game var(use GSSetVar, GSGetVar).
2) There are 2 ways to make it:
- With AddMob("mob_file_name.mob") script procedure. But this way requires for each monster's pack its call of AddMob.
- With AddUnitToServer, this way is the worst way. Because for each mob its requires its call of AddUnitToServer and it correctly works only with humans or orc's.
Сообщений: 3
Тем: 1
Зарегистрирован: Oct 2012
Большое вам спасибо за вашу помощь Demoth
Большую помощь, спасибо
Сообщений: 11
Тем: 2
Зарегистрирован: Oct 2006
Thanks Demoth its what I wanted to know.
|