Команда блок
#1
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?
Ответ
#2
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.
Ответ
#3
Боюсь, что простого способа узнать, включен ли режим бога, скриптами нельзя.
Ты можешь раз в секунду или чаще отключать режим бога:
Код:
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 - это процедура, которая устанавливает значение. С помощью нее нельзя узнать, включен ли режим бога или нет.
Ответ
#4
Please let us know if you need help in translation the answer.
Ответ
#5
Огромное спасибо Demoth вы великий помочь мне Smile) Smile) Smile) Я думаю, что это было Smile. Я постараюсь это.

Я говорю Вери плохо на английском языке 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) )

и я хочу, что объект не будет возражать, но будет указывать х и у на карте
как это



как сделать так, чтобы объект х был заменен г и у координаты?
Ответ
#6
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. Список скриптовых функций ты можешь посмотреть например здесь.
Ответ
#7
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. Проведите эксперимент. Smile ) добавить запись о "новой локации". Например в таком стиле:
Код:
#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
##
################################################
Вот оно.
Надеюсь это вам хоть как-то поможет. Smile
3) К сожалению, я не совсем понял, о чем идет речь. Постарайтесь описать подробнее. (Перевод google может сработать лучше, если оригинальный текст не будет содержать ошибок Smile )
Удачи!
Ответ
#8
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 ? Smile Something like return in c/c++.

2)Is there possibility to create monsters in script?
Ответ
#9
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.
Ответ
#10
Большое вам спасибо за вашу помощь Demoth

Большую помощь, спасибо
Ответ
#11
Thanks Demoth its what I wanted to know.
Ответ


Перейти к форуму:


Пользователи, просматривающие эту тему: 1 Гость(ей)