if started = True then begin
if PosXGrav <> 1 then begin
if ObjInCircle (CurrentObj,PosXGrav,PosYGrav,25) = True then begin
CurrentObj.SpY := CurrentObj.SpY-2
rnd := GetSyncRandom(-2, 2)
CurrentObj.SpX := CurrentObj.SpX+rnd
end;
end;
end;
На самом деле даже с закомментенными внутренностями, один этот if уже вызывает эксепшены...
Spoiler:
Код:
procedure OnTurn;
begin
...
if CurrentObj = nil then begin
CurrentObj := GetTekWormObj
end;
end;
Т.е. как бы CurrentObj назначается 1 раз в самом начале и больше не меняется (для теста).
Код:
function OnFire : boolean;
var
CurW : TWorm;
Dirc : Integer;
begin
...
if CurW.SelWeapon.WN = 21 then begin
if AmmoGTM <> 0 then begin
PosXGrav := CurW.PosX
PosYGrav := CurW.PosY+30
AmmoGTM := AmmoGTM-1;
end;
Result := False;
end;
end;
Цитата:
Хмм... сам не юзал, но чисто как мысль: Может там IsCollided?
Я уже пытался и IsCollided и IfCollides и даже IfCollided )
Цитата:
А можно сделать так чтоб летающая супер-овца разбрасывала гранаты?
Никогда не пробовал) Может и можно
А копи паст можно юзать через ctrl+c -> ctrl+v
_________________ Мощь мозга червя равна длине его базуки умноженной на два.
if started = True then begin
if PosXGrav <> 1 then begin
if ObjInCircle (CurrentObj,PosXGrav,PosYGrav,25) = True then begin
CurrentObj.SpY := CurrentObj.SpY-2
rnd := GetSyncRandom(-2, 2)
CurrentObj.SpX := CurrentObj.SpX+rnd
end;
end;
end;
Исправленный вид:
if PosXGrav <> 1 then begin
if ObjInCircle (CurrentObj,PosXGrav,PosYGrav,25) = True then
begin
CurrentObj.SpY := CurrentObj.SpY-2;
rnd := GetSyncRandom(-2, 2);
CurrentObj.SpX := CurrentObj.SpX+rnd;
end;
end;
end;
не надо ставить ; только после begin, if...then, else и вроде все
Added after 4 minutes:
Zed писал(а):
На самом деле даже с закомментенными внутренностями, один этот if уже вызывает эксепшены...
Поробуй писать не
If.. then begin
...
end;
,а
if... then
begin
...
end;
То же самое с циклами
for i:=... to ... do
begin
...
end;
Added after 5 minutes:
Zed писал(а):
Код:
procedure OnTurn;
begin
...
if CurrentObj = nil then begin
CurrentObj := GetTekWormObj
end;
end;
Т.е. как бы CurrentObj назначается 1 раз в самом начале и больше не меняется (для теста).
Код:
function OnFire : boolean;
var
CurW : TWorm;
Dirc : Integer;
begin
...
if CurW.SelWeapon.WN = 21 then begin
if AmmoGTM <> 0 then begin
PosXGrav := CurW.PosX
PosYGrav := CurW.PosY+30
AmmoGTM := AmmoGTM-1;
end;
Result := False;
end;
end;
Тут тоже в конце выражений с присвоением ( переменная:=значение ) не поставил ;
Должно быть переменная:=значение;
Это бейсику пофиг. А тут скрипт движок, если не ошибаюсь, паскалеподобный. А паскаль очень и очень строгий. По карйней мере я пишу так и никаких эксепшенов и все работает.
PS тебе известна такая вещь как синтаксис?
Насчет точки с запятой спс, я как то не обращал внимания (так как компилер на это не реагировал)
К сожалению мой if все равно не работает возможно все дело в том что червя, чей ход происходит именно в данный момент нельзя редактировать, ака менять его положение в пространстве "насильно")
Так. Посмотрел ВОТ ЭТО и нашел ошибки.
1)(довольно таки глупая)
Хукится Frame
Цитата:
RegisterHook('Frame', ON_FRAME);
,a процедуру ты назвал
Цитата:
procedure OnFrame;
Нестыковочка От этого и эксепшены.
Цитата:
if ObjInCircle (lol,lol.PosX,lol.PosX,100) then
begin
if v = 1 then
begin
lol.SpY := lol.SpY-2;
rnd := GetSyncRandom(-2, 2);
lol.SpX := lol.SpX+rnd;
end;
end;
Не понимаю что здесь вообще делает ObjInCircle. Его можно убрать и ничего не изменится, так как оно всегда будет верно (ты проверяешь находится ли червь внутри круга, центром которого является сам червь). И еще! Только щас заметил. У тебя
Цитата:
(lol,lol.PosX,lol.PosX,100)
Не кажется странным что x и y центра круга являются не xy, а xx червя? Опять не то Или так задумано?
Но хз почему хоть я все это исправил, все равно не работает
Щас попробую по-своему переписать.
Added after 6 minutes:
Ах да. Еще кое-что.
ТЫ пытаешься задать SpX и Y для переменной lol типа TWorm, а эти поля есть только у TWPobj, каковой и надо было объявить lol.
ав ав и еще раз ав какой же я бот %) Тоже очепятка.
Цитата:
ТЫ пытаешься задать SpX и Y для переменной lol типа TWorm, а эти поля есть только у TWPobj, каковой и надо было объявить lol.
Ты прав, не влияет. TWorm это ветвь TWPobj как я понял, поэтому имеет все поля обжа, и еще свои.
В телекинезисе кстати есть и функция циркла и функция IsCollidesAt и там все работает x.X Было бы круто если бы алекс или кто нить кто понимает объяснил нам в чем тут пироги..
_________________ Мощь мозга червя равна длине его базуки умноженной на два.
В телекинезисе кстати есть и функция циркла и функция IsCollidesAt и там все работает x.X Было бы круто если бы алекс или кто нить кто понимает объяснил нам в чем тут пироги..
Ну я могу попробовать написать чтото связанное с этим
Added after 12 minutes:
Кстати, пересматривая встроенный мануал, я нашел еще ошибки в использовании ObjInCircle.
1)Там объект должен быть выражен целым числом, а не TWPobj
2)Это выражение возвращает Boolean, т.е. равняется True или False. Не уверен, что обязательно указывать на равенство с True/False, но мы так не делали!
Зед, почему ты не юзаешь прогу Map Editor входящий в комплект PX? Так проще на картах делать скрипты Вот твоя карта со скриптами. Просто не выбирая схему в ПХ выбери эту мапы и сыграй http://ifolder.ru/13552305
Хмм.. пытаюсь сделать с Circle там какието левые Mismatch идут
Added after 2 minutes:
GeneralGamer писал(а):
Зед, почему ты не юзаешь прогу Map Editor входящий в комплект PX? Так проще на картах делать скрипты Вот твоя карта со скриптами. Просто не выбирая схему в ПХ выбери эту мапы и сыграй http://ifolder.ru/13552305
Юзать редактор карт помойму глупо в данном случае. Такой редактор нужен только тогда когда у нас координаты зависят от карты. А тут разместил и поехали. Схема идет под все. Достоинства тоже есть. Не надо по 100 раз схему переключать. А если карт много? Все скриптами не закидаешь! Победили схемы
Added after 15 minutes:
И я походу был неправ по поводу выражения объекта его номером. Поменял на TWPobj и несоответствия пропали...
Added after 48 minutes:
Вот написал простенький скрипт с ObjInCircle. Юзаете Шар Дракона и радуетесь если рядом много червей
Есть доля везения потому что некоторые черви избегают неприятной участи (по непонятным причинам)
Spoiler:
var
wc: tworm;
eo: twpobj;
i: integer;
procedure inithooks;
begin
registerhook('cexploder',ON_FIRE);
end;
procedure cexploder;
begin
wc:=gettekwormobj;
if wc<>nil then
begin
if wc.selweapon.wn=17 then
begin
for i:=1 to GetPObjCount do
begin
eo:=getpobj(i);
if objincircle(eo,wc.posx,wc.posy,200) then
begin
if eo.objtype=OBJ_WORM then
begin
makecharge(eo.posx,eo.posy,1,1,1,ch_offset_genlauncher);
end;
end;
end;
end;
end;
end;
Кстати. Если кто сюда заглядывает и хочет понять как и что как по этому скрипту, так и по всем остальным, спрашивайте
Будет вместо мануала
Added after 1 hours 8 minutes:
Zed писал(а):
Ему запрещено пользоваться прочим оружием, что пока не реализовано программно.
Sets amount of weapons for team. Parameters:
NumTeam - number of team (from 1 to 6)
NumWeapon - number of weapon (from 0 to 70)
WeapTable - number of weapons' table, from 1
Value - if Relative=true then value adds to current value, else value sets instead of current value
Returns new amount of weapon
При выборе класса даешь той команде, которая его выбрала нужный боезапас.
PS Для бесконечного количества задай кол-во оружия -1
Эмм, судя по скрипту там перебираются все обьекты и идет их проверка на нахождение в радиусе от заюзавшего драгон, мне вот интересно, по идее взрыв должен еще и в самом заюзавшем драгон появляться, так как ты не делаешь никаких проверок кроме радиуса...
И да, если твой скрипт работает (не проверял) судя по всему я был прав - эксепшены вызывались из-за попыток отредактировать червя, чей ход происходит в данным момент (я пытался создать гравитационную ловушку, кидающую червя в воздух при попадании внутрь нее)..
Цитата:
А я знаю как сделать...
Ну я тоже знаю, просто мне было лень)
_________________ Мощь мозга червя равна длине его базуки умноженной на два.
Эмм, судя по скрипту там перебираются все обьекты и идет их проверка на нахождение в радиусе от заюзавшего драгон, мне вот интересно, по идее взрыв должен еще и в самом заюзавшем драгон появляться, так как ты не делаешь никаких проверок кроме радиуса...
Это еще одно неизвестное человечеству событие Если дрэгонболл использовать в прыжке то сам не бухнешься
Обновил код и шему. Теперь можно выбирать классы и у них будет совершенно разное оружие. Также Немного почистил баги.
DeathRun
Два игрока максимум, позже будет больше.
Вначале идет выбор классов.
Оружие FirePunch выбирает класс DeathRunner. Его задача добраться со старта до левого края карты за отведенное время. Причем добраться живым. В его руках есть горелка, дрель, банжи, парашут и балка, причем ход заканчивает только последняя. Ему нельзя закапываться под нижнюю полоску на карте.
Его оружие имеет лимиты:
Парашут - 2 на ход.
Горелка - 2 на ход.
Остальное анлим.
Оружие DragonBall выбирает класс DeathRunGod. Его задача строить на карте ловушки, препятствующие DeathRunner'у в его пробеге. В его распоряжении такие препятствия как:
- Бочка с напалмом (3 бочки в ход)
- Осколочная ловушка (Frag Trap максимум 1 такая на карте, можно перемещать с места на место) (использовать только с высоты типа джетпака или веревки) Создает дождь осколков в выбранном месте.
- Огненный дождь (Fire Rain максимум 1 такая на карте, можно перемещать с места на место) (использовать только с высоты)
- Граната (2 штуки на ход). Юзать только для разрушения ландшафта!
- Ракетная Стена (RocketWall максимум 1 такая на карте, можно перемещать с места на место) Создает ракеты летающие в небольшом радиусе вертикально, своего рода стена.
- Мина. 3 на ход.
DeathRunner начинает справа со старта.
DeathRunGod начинает где хочет. Прямо атаковать друг друга нельзя.
Тестируйте. Баги еще есть, постараюсь исправить. После СД выигрывает DeathRunGod.
http://russiansnipers.ucoz.ru/SpecPodr/DeathRun19.rar
Все вопросы можете задать тут. Постараюсь создать еще видов ловушек для Бога и несколько спец способностей для Бегуна.
Скрины:
http://russiansnipers.ucoz.ru/SpecPodr/DR.rar
пс - не ругайте за баги, невиноватый я, они сами)
----
Еще раз обновил, убрал HoleMaker вместо него граната обыкновенная. Сделал ограничение по оружию, читайте выше.
---
Добавлено:
Фсе исправил, ура, все работает
_________________ Мощь мозга червя равна длине его базуки умноженной на два.
procedure inithooks;
begin
registerhook('cexploder',ON_FIRE);
end;
procedure cexploder;
begin
wc:=gettekwormobj;
if wc<>nil then
begin
if wc.selweapon.wn=17 then
begin
for i:=1 to GetPObjCount - 1 do //тут бы экшепшены вылетали
begin
eo:=getpobj(i);
if eo = nil then continue;
if eo = wc then continue;
if eo.objtype=OBJ_WORM then
begin
if objincircle(eo,wc.posx,wc.posy,200) then
begin
makeexp(0, eo.posx, eo.posy, 100, 50, 0); //будет выдавать
//экшепшены в редакторе, но должно скомпилиться в игре
end;
end;
end;
end;
end;
end;
Если честно не знаю почему, но у меня makeexp в редакторе компилилось, а в игре не работало) Мб я ошибаюсь, давно их юзать пытался, потом забил и просто создаю чардж гранаты
_________________ Мощь мозга червя равна длине его базуки умноженной на два.
В редакторе makeexp задекларено как (sender, x, y, UnkA, unkB, push, damage, owner), а в игре как (sender, x, y, push, damage, owner). если написать чтобы компилилось в редакторе, то в игре конечно будут экшепшены
Лень балансить и писать код. Все равно так много народу не наберется)
Энтузер почини диалоговое окно Лука) Я пытался разблокировать его угол выстрела, переделал в шотган а потом обратно, в результате Лук стал стрелять из шотгана стрелами, причем под любым углом ))
--------
Сделал мини шему состоящую из одной тока таблицы оружия, в которой я создал много реалистичного оружия из реального мира)
Реалистичность конечно относительная, но все оружие достаточно балансно. Плюс у всех пушек одинаковые мелкие дырки от пуль)
http://russiansnipers.ucoz.ru/SpecPodr/AdvancedWeaponry3.pxs
Список:
Desert Eagle
Glock17
USP
Pancor Jackhammer
Vintovka Mosina
Mac10
H&K MP5
M4A1
M60
Все оружие в таблице 1, заменяет другое.
Заменяют:
Землетрясение
Топор
Камикадзе
Суицид бомбер
шотган
пистолет
пулемет
узи
банановая бомба
_________________ Мощь мозга червя равна длине его базуки умноженной на два.
Ты не можешь начинать темы Ты не можешь отвечать на сообщения Ты не можешь редактировать свои сообщения Ты не можешь удалять свои сообщения Ты не можешь голосовать в опросах