RU 📌 Pinned

Как сделать?

Dark[Ol(U23)leneri] #34 18.04.2010 22:57 6408 comments 2426132 views

Ребят я решил сокращать код но затупил на этом моменте,как сделать?
iditem=1 <= пробывал поставить вместо единицы id1 но не прибавляет характеристики.

id1=1
:nextitem1
	if args[0] = id1:
	*clr
	cla
		'<center><table border = "1" bordercolor = black>
		<th rowspan ="6"><b><<$wea[id1]>><br><center><$pic[id1]></center></b></th> <td>Ваши параметры сейчас:</td>  <td>Характеристика оружия:</td>
		<tr><td>Урон:	<<pdmg>> </td> <td>+ <<dmgw[id1]>> </td></tr>
		<tr><td>Уворот:	<<pevade>> </td> <td>+ <<evadew[id1]>> </td></tr>
		<tr><td>Крит:	<<pkrit>> </td> <td>+ <<kritw[id1]>> </td></tr>
		<tr><td>Против уворота:	<<pcontrevade>> </td> <td>+ <<contrevadew[id1]>> </td></tr>
		<tr><td>Антикрит:	<<pcontrkrit>> </td> <td>+ <<contrkritw[id1]>> </td></tr>
		</table></center>'
		if id1 = 1:
			if pwslotr = 0:
				act'Вооружиться':
				iditem= 1
				$weaname='<a href="exec: msg ''<center><h2>Железный доспех</h2><b> Этот доспех имеет самые низкие характеристики среди комплектов тяжёлой брони. 
				<center>Броня +2, Здоровье +15.<center>''"><img src="content/weapons/нож.jpg"></a>'
				gs'Различные_переменные','weapon_up'
				gs'статы'
				gt $curloc
				end
			end
		end
		if pwslotr = 1:
			act 'Снять одежду':
			gs'Различные_переменные','weapon_down'
			gs'статы'
			iditem = -2
			$weaname='<img src="content/odejda/2.jpg">'
			gt $curloc
			end
		end
		act'Выбрать что-нибудь другое':gt'оружие'
		end
	end
 id1 += 1
if id1 < 3: jump 'nextitem1'

DeathSpace:

но не прибавляет характеристики.

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

DaGrozz,
У меня характеристики берутся из другой локации их названия содержатся в таблице. вот один из предметов
Пример:
$wea[1] = ‘Железный клинок’
dmgw[1] = 10
evadew[1] = 4
kritw[1] = 0
contrevadew[1] =0
contrkritw[1] = 0

вопрос может показаться глупым, но можно ли сделать условие в условие так:

Spoiler

if a=1:
if s=1:
act ‘делать’:
gt ‘делать’
else
gt ‘неделать’
end
end
end

if a=1 and s=1: !!это ненадо, мне именно надо условие в условии… к примеру при наличии определенного условия появилось действие, но при его нажатии проводилось еще одна проверка на другое условие. К примеру у меня есть карта и я могу пойти в лабиринт, но нет отметки на карте. при нажатии отправиться меня переносит в другую комнату

Все спс разобрался как лучше сделать

DeathSpace,
Все равно картина не складывается. Ну вот ты присвоил значения
dmgw[1] = 10

В коде

Урон:    <<pdmg>> </td> <td>+ <<dmgw[id1]>>

Тут ты только отображаешь, никаког оприсвоения нету. Дальше идет вооружится. Тоже не видно что бы что то присваивалось. Если только gs’Различные_переменные’,’weapon_up’ что то там присваивает в своих недрах. Но опять же, если код универсальный, то я не вижу, что бы ты передал айди предмета.Если только iditem= 1 , но опять же, если код универсальный, то почему именно 1? Он же по логике мождет быть разным. Что то тут не клеится или я не вижу картины в целом.

DaGrozz,
ты чертовски прав))) вот эту 1 в idtem= 1 я не могу поменять на id1 чтобы было iditem= id1 казалось бы должно работать,но нет.
Если же я ставлю туда id1 характеристики предмета не передаются персонажу.
т.е. везде id1 работает цикл все правильно делает,а здесь переменная отказывается работать.

DeathSpace, вы можете простым человеческим языком объяснить суть? Не выкладывая километры малопонятного кода.

Я вот посмотрел, ничего не понял и решил не отвечать раз человек настолько не заинтересован в получении ответа, что не может по-человечески спросить. Но DaGrozz все же попытался :) Но у него ничего не выйдет пока вы сами… я уже это говорил.

evp,
Данный код выводит в инвентаре таблицу с предметами которые есть у игрока. Я зациклил таблицу поставив везде где нужно id1.Моя проблема заключается при действии “Вооружится” т.к переменная iditem не может никак = id1 что дало бы мне нужный результат, но у меня не получается т.к.если я ставлю iditem=Id1 переменная не срабатывает и не прибавляет характеристики оружия к гг эти прибавления находятся в локации “различные переменные”.

Вы не сказали что и с какой целью передается вашему коду. Какие аргументы? Я вижу args[0]. Что это?

Походу, если бы вы получше форматировали код отступами, то заметили бы сами, что у вас лишний end:

Spoiler
id1=1 
:nextitem1 
    if args[0] = id1: 
		*clr 
		cla 
        '<center><table border = "1" bordercolor = black> 
        <th rowspan ="6"><b><<$wea[id1]>><br><center><$pic[id1]></center></b></th> <td>Ваши параметры сейчас:</td>  <td>Характеристика оружия:</td> 
        <tr><td>Урон:    <<pdmg>> </td> <td>+ <<dmgw[id1]>> </td></tr> 
        <tr><td>Уворот:    <<pevade>> </td> <td>+ <<evadew[id1]>> </td></tr> 
        <tr><td>Крит:    <<pkrit>> </td> <td>+ <<kritw[id1]>> </td></tr> 
        <tr><td>Против уворота:    <<pcontrevade>> </td> <td>+ <<contrevadew[id1]>> </td></tr> 
        <tr><td>Антикрит:    <<pcontrkrit>> </td> <td>+ <<contrkritw[id1]>> </td></tr> 
        </table></center>' 
        if id1 = 1: 
            if pwslotr = 0: 
                act'Вооружиться': 
					iditem= 1 
					$weaname='<a href="exec: msg ''<center><h2>Железный доспех</h2><b> Этот доспех имеет самые низкие характеристики среди комплектов тяжёлой брони. 
					<center>Броня +2, Здоровье +15.<center>''"><img src="content/weapons/нож.jpg"></a>' 
					gs'Различные_переменные','weapon_up' 
					gs'статы' 
					gt $curloc 
                end 
            end 
        end 
        if pwslotr = 1: 
            act 'Снять одежду': 
				gs'Различные_переменные','weapon_down' 
				gs'статы' 
				iditem = -2 
				$weaname='<img src="content/odejda/2.jpg">' 
				gt $curloc 
            end 
        end 
        act'Выбрать что-нибудь другое':gt'оружие' 
	end 
    end 
	id1 += 1 
if id1 < 3: jump 'nextitem1'

Старайтесь код приводить к удобочитаемому виду, особенно в таких случаях, как сейчас, когда вы просите других в нем разобраться. Вот пример (таблицу я убрал из цикла как несущественную и поместил в переменную, ее можно вообще не включать в вопрос на форуме):

Spoiler
$table = {
	*p '<center>
		<table border = "1" bordercolor = black> 
			<th rowspan ="6"><b><<$wea[id1]>><br><center><$pic[id1]></center></b></th> <td>Ваши параметры сейчас:</td>  <td>Характеристика оружия:</td> 
			<tr><td>Урон:    <<pdmg>> </td> <td>+ <<dmgw[id1]>> </td></tr> 
			<tr><td>Уворот:    <<pevade>> </td> <td>+ <<evadew[id1]>> </td></tr> 
			<tr><td>Крит:    <<pkrit>> </td> <td>+ <<kritw[id1]>> </td></tr> 
			<tr><td>Против уворота:    <<pcontrevade>> </td> <td>+ <<contrevadew[id1]>> </td></tr> 
			<tr><td>Антикрит:    <<pcontrkrit>> </td> <td>+ <<contrkritw[id1]>> </td></tr> 
		</table>
	</center>'
}
id1=1 
:nextitem1 
    if args[0] = id1: 
		*clr 
		cla 
        dynamic $table 
        if id1 = 1: 
            if pwslotr = 0: 
                act'Вооружиться': 
					iditem= 1 
					$weaname='<a href="exec: msg ''<center><h2>Железный доспех</h2><b> Этот доспех имеет самые низкие характеристики среди комплектов тяжёлой брони. 
					<center>Броня +2, Здоровье +15.<center>''"><img src="content/weapons/нож.jpg"></a>' 
					gs'Различные_переменные','weapon_up' 
					gs'статы' 
					gt $curloc 
                end 
            end 
        end 
        if pwslotr = 1: 
            act 'Снять одежду': 
				gs'Различные_переменные','weapon_down' 
				gs'статы' 
				iditem = -2 
				$weaname='<img src="content/odejda/2.jpg">' 
				gt $curloc 
            end 
        end 
        act'Выбрать что-нибудь другое':gt'оружие' 
	end 
    end 
	id1 += 1 
if id1 < 3: jump 'nextitem1'

Теперь логика цикла и и if-ов более очевидна. Вообще, старайтесь все несущественное убрать из вопроса. В итоге код, иллюстрирующий ваш вопрос может выглядеть вот так:

Spoiler
id1=1 
:nextitem1 
    if args[0] = id1: 
		*clr 
		cla 
        dynamic $table 
        if id1 = 1: 
            if pwslotr = 0: 
                act'Вооружиться': 
					!Некоторые присвоения
					gs'Различные_переменные','weapon_up' 
					gs'статы' 
					gt $curloc 
                end 
            end 
        end 
        if pwslotr = 1: 
            act 'Снять одежду': 
				gs'Различные_переменные','weapon_down' 
				gs'статы' 
				!Некоторые присвоения 
				gt $curloc 
            end 
        end 
        act'Выбрать что-нибудь другое':gt'оружие' 
	end 
    end 
	id1 += 1 
if id1 < 3: jump 'nextitem1'

Теперь любому гораздо проще прочесть ваше творчество и шанс на ответ резко увеличивается.

Лишний end :) Я вижу 2 варианта. Первый: просто убрать end в конце, тогда логика будет такая:

Spoiler
id1=1 
:nextitem1 
    if args[0] = id1: 
		!Код для вывода на экран информации 
        if id1 = 1: 
            if pwslotr = 0: 
                act'Вооружиться': 
					!Код для действия
					gt $curloc 
                end 
            end 
        end 
        if pwslotr = 1: 
            act 'Снять одежду': 
				!Код для действия 
				gt $curloc 
            end 
        end 
        act'Выбрать что-нибудь другое':gt'оружие' 
	end 
	id1 += 1 
if id1 < 3: jump 'nextitem1'

Второй вариант мне кажется более подходящим к тому, что вы задумали на самом деле. Мне кажется, что end, закрывающий if id1 = 1: вы поставили по ошибке. Уберем его и получим уже другую логику:

Spoiler
id1=1 
:nextitem1 
    if args[0] = id1: 
		!Код для вывода на экран информации 
        if id1 = 1: 
            if pwslotr = 0: 
                act'Вооружиться': 
					!Код для действия
					gt $curloc 
                end 
            end 
			if pwslotr = 1: 
				act 'Снять одежду': 
					!Код для действия 
					gt $curloc 
				end 
			end 
			act'Выбрать что-нибудь другое':gt'оружие' 
		end
	end 
	id1 += 1 
if id1 < 3: jump 'nextitem1'

Если в процессе такого упрощения кода вы все еще не нашли ошибку самостоятельно :) , задайте вопрос. Только не так, как в предыдущем сообщении. К примеру так: я передаю в код аргументы с таким диапазоном значений (указываете значения args[0]), я ожидаю что код отобразит мне на экране то-то и то-то в таком-то количестве экземпляров, список действий в таком случае будет таким, а вот в таком случае будет вот таким. По факту я вижу, что (описываете факт и его отличия от ожидаемого). Привожу код (в спойлер положите код, обязательно без излишеств и операторов не влияющих непосредственно на происходящее). Вот как “человеческим” языком надо спрашивать :)

Далее. Если передаваемый коду аргумент args[0] < 1 или args[0] > 2, то код не выполнится ни разу. Вы этого поведения ожидаете?

О этот гребаный искуственный интеллект!
Всем привет, давненько не виделись. Знаете, я потратил просто огромное количество времени на осмысление того, как должен “правильно” работать искуственный интеллект в игре.
Я много эксперементировал и думал. Размышлял и анализировал. И я пришел к выводу, что рализовать действительно хороший искуственный интелект (по крайней мере, для боевой системы) вполне реально и я даже понял как.
Но трись ты об стену, великая мысль! Я не могу понять одну вещь!

  • Как заставить объект (NPC)перемещаться в заданую точку? (Как заставить анализировать близлижайшие объекты это и кроту понятно.)
    Хоть убейте, не могу найти наиболее простого варианта решения данной проблемы.

evp,
Я все прочитал, я вас понял. Но вы меня не слышите, мне приходится ставить if id1 =1 чтобы цикл видел что при id1=1 item должно равняться 1.Конкретная задача, но а если у меня например будет 20 - 30 предметов в сокращении мне придется для каждого предмета писать

if id1 = n:
	act 'Вооружиться'
	iditem=n
	gt $curloc
end

Я вынужден буду это делать из-за того что iditem не хочет работать когда я ей задаю id1 она работает только при определенной цифре 1,2,3,4,5,6,7,8,9,10…

Spoiler

if id1 = 1:
act ‘Вооружиться’
iditem=1
gt $curloc
end
if id1 = 2:
act ‘Вооружиться’
iditem=2
gt $curloc
end
if id1 = 3:
act ‘Вооружиться’
iditem=3
gt $curloc
end
if id1 = 4:
act ‘Вооружиться’
iditem=4
gt $curloc
end
if id1 = 5:
act ‘Вооружиться’
iditem=5
gt $curloc
end
if id1 = 6:
act ‘Вооружиться’
iditem=6
gt $curloc
end

iditem переводит меня на другую локацию

Spoiler

if $args[0] = ‘weapon_down’:
set pwslotr = 0
set $pwea = ’ ’
set pdmgw = pdmgw - dmgw[iditem]
set pmdmgw = pmdmgw - mdmgw[iditem]
set pevadew = pevadew - evadew[iditem]
set pcontrevadew = pcontrevadew - contrevadew[iditem]
set pkritw = pkritw - kritw[iditem]
set pcontrkritw = pcontrkritw - contrkritw[iditem]
end

if $args[0] = ‘weapon_up’:
set pwslotr = 1
set $pwea = $wea[iditem]
set pdmgw = dmgw[iditem]
set pmdmgw = mdmgw[iditem]
set pevadew = evadew[iditem]
set pkritw = kritw[iditem]
set pcontrevadew = contrevadew[iditem]
set pcontrkritw = contrkritw[iditem]
end

DeathSpace, читанул то, что ты расписывал. тебе нужно переделать массив для предметов и систему отображения целиком перенести на одну локу. Иначе толку не будет.
Смотри, здесь нет ничего сложного:

Spoiler
set id.draw = 0 
:Draw.ini
if id.draw < draw.max:
     set id.draw += 1
     set item.data['<<id.draw>>,id'] = id.draw & !Мы заставляем предмет запоминать свою позицию для дальнейшего использования.
     !Далее используешь необходимые надстройки для отображения предмета. все действия с предметом на локации осуществляешь при помощи  - item.data['<<id.draw>>,id']
     jump 'Draw.ini'
end

Парень хочет чтобы переменная iditem равнялась определенным цифрам(с использованием другой переменной, которая изменяется от действий игрока).

Все спасибо разберусь может когда-нибудь.

Log in or Register to post comments.