st1x51
160 постов
Карма: 8
#1 31 декабря 2011 в 09:34
Собственно имеется код куба,куб можно брать порталганом,в порталы кидать..но не в этом тема,нужно чтобы он нажимал на кнопку(когда куб кладешь на нее)американский программист уже с ума сходит,не знает что делать,может вы поможете?)<br />код куба:<br />/* Aperture Science Cube<br /><br />&nbsp; Copyleft (&lt;)2010. <br />&nbsp; No rights reserved.<br />&nbsp; DO distribute.<br /><br />&nbsp; Push function inspired by Wazat&#39;s code from inside3d.com<br /><br />&nbsp; !!experimental!!<br />*/<br /><br />void() asscube_think =<br />{<br />&nbsp; &nbsp; self.nextthink = time;<br />};<br /><br />void() asscube_push =<br />{<br />&nbsp; &nbsp; local vector vec, selforg, otherorg;<br />&nbsp; &nbsp; local float dist; dist = 2;<br /> <br />&nbsp; &nbsp; if (other.classname != &quot;player&quot;) return;<br />&nbsp; &nbsp; if (other.absmin_z + 4 &lt; self.absmax_z)<br />&nbsp; &nbsp; {<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // getting origins this way allows for BSP entities to work too.<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; otherorg = 0.5*(other.absmin + other.absmax);<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; selforg = 0.5*(self.absmin + self.absmax);<br /><br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // Don&#39;t move in the direction the player is facing. Instead, always move away from the player.<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; vec = normalize(selforg - otherorg); // dir from them toward me<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; vec = vectoangles(vec);<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; walkmove(vec_y, dist);<br />&nbsp; &nbsp; }<br />&nbsp; &nbsp; else // (touch on top)<br />&nbsp; &nbsp; {<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; other.flags = other.flags | FL_ONGROUND;<br />&nbsp; &nbsp; }<br />};<br /><br /><br />/*QUAKED ass_cube<br />&nbsp; Companion Cube (it&#39;s not solid, because it caused trouble. quake is not game of pushables...)<br />&nbsp; EDIT: the problem is elsewhere...<br />*/<br />void() ass_cube =<br />{<br />&nbsp; &nbsp; &nbsp; &nbsp; local entity new;<br />&nbsp; &nbsp; &nbsp; &nbsp; local vector newsize;<br /><br />&nbsp; &nbsp; &nbsp; &nbsp; self.mangle = self.angles;<br />&nbsp; &nbsp; &nbsp; &nbsp; self.angles = &#39;0 0 0&#39;;<br /><br />&nbsp; &nbsp; &nbsp; &nbsp; precache_model (&quot;progs/cube.bsp&quot;);<br />&nbsp; &nbsp; &nbsp; &nbsp; setmodel (self, &quot;progs/cube.bsp&quot;);<br />&nbsp; &nbsp; &nbsp; &nbsp; setsize (self, &#39;0 0 0&#39;, &#39;32 32 32&#39;);<br /><br />&nbsp; &nbsp; &nbsp; &nbsp; self.classname = &quot;cube&quot;;<br />&nbsp; &nbsp; &nbsp; &nbsp; self.solid = SOLID_SLIDEBOX;<br />&nbsp; &nbsp; &nbsp; &nbsp; self.movetype = MOVETYPE_PUSH;<br />&nbsp; &nbsp; &nbsp; &nbsp; setorigin (self, self.origin);<br />&nbsp; &nbsp; &nbsp; &nbsp; self.oldorigin = self.origin;<br />&nbsp; &nbsp; &nbsp; &nbsp; self.touch = asscube_push;<br />&nbsp; &nbsp; &nbsp; &nbsp; self.nextthink = time + 0.1;<br />&nbsp; &nbsp; &nbsp; &nbsp; self.think = asscube_think;<br />};<br /><br />то,что осталось сделать,помогите пожалуйста)<br />/***<br />&nbsp; 1500 Megawatt Heavy Duty Super-Colliding Super Button<br />&nbsp; -----------------------------------------------------<br />&nbsp; - weighted by player, cube, sentry gun<br />&nbsp; Variable sized trigger. Triggers once, then <br />*/<br />void() ass_button = <br />{<br />&nbsp; &nbsp; InitTrigger ();<br />&nbsp; &nbsp; <br />&nbsp; &nbsp; self.think = assbutton_think;<br /><br />&nbsp; &nbsp; <br />&nbsp; &nbsp; <br /><br /><br />};<br />еще один код для куба<br /><br />/*QUAKED ass_cube<br />&nbsp; Companion Cube<br />*/<br />void() asscube_think =<br />{<br />&nbsp; &nbsp; self.nextthink = time + 0.2;<br />&nbsp; &nbsp; if (self.flags &amp; FL_ONGROUND)<br />&nbsp; &nbsp; {<br />&nbsp; &nbsp; &nbsp; &nbsp; self.velocity = &#39;0 0 0&#39;;<br />&nbsp; &nbsp; }<br />&nbsp; &nbsp; self.flags = (self.flags | FL_ONGROUND) - FL_ONGROUND;<br />};<br /><br />void() asscube_push =<br />{<br />&nbsp; &nbsp; local vector vec, selforg, otherorg;<br />&nbsp; &nbsp; local float dist; dist = 2;<br /> <br />&nbsp; &nbsp; if (other.classname != &quot;player&quot;) return;<br />&nbsp; &nbsp; if (other.absmin_z + 4 &lt; self.absmax_z)<br />&nbsp; &nbsp; {<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // getting origins this way allows for BSP entities to work too.<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; otherorg = 0.5*(other.absmin + other.absmax);<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; selforg = 0.5*(self.absmin + self.absmax);<br /><br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // Don&#39;t move in the direction the player is facing. Instead, always move away from the player.<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; vec = normalize(selforg - otherorg); // dir from them toward me<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; vec = vectoangles(vec);<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; walkmove(vec_y, dist);<br />&nbsp; &nbsp; }<br />&nbsp; &nbsp; else // (touch on top)<br />&nbsp; &nbsp; {<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; other.flags = other.flags | FL_ONGROUND;<br />&nbsp; &nbsp; }<br />};<br /><br /><br />void() ass_cube =<br />{<br />&nbsp; &nbsp; &nbsp; &nbsp; local entity new;<br />&nbsp; &nbsp; &nbsp; &nbsp; local vector newsize;<br /><br />&nbsp; &nbsp; &nbsp; &nbsp; self.mangle = self.angles;<br />&nbsp; &nbsp; &nbsp; &nbsp; self.angles = &#39;0 0 0&#39;;<br /><br />&nbsp; &nbsp; &nbsp; &nbsp; precache_model (&quot;progs/cube.bsp&quot;);<br />&nbsp; &nbsp; &nbsp; &nbsp; setmodel (self, &quot;progs/cube.bsp&quot;);<br />&nbsp; &nbsp; &nbsp; &nbsp; setsize (self, &#39;-16 -16 0&#39;, &#39;16 16 32&#39;);<br /><br />&nbsp; &nbsp; &nbsp; &nbsp; self.classname = &quot;cube&quot;;<br />&nbsp; &nbsp; &nbsp; &nbsp; self.solid = SOLID_SLIDEBOX;<br />&nbsp; &nbsp; &nbsp; &nbsp; self.movetype = MOVETYPE_TOSS;<br />&nbsp; &nbsp; &nbsp; &nbsp; setorigin (self, self.origin);<br />&nbsp; &nbsp; &nbsp; &nbsp; self.oldorigin = self.origin;<br />&nbsp; &nbsp; &nbsp; &nbsp; self.gravity = 1;<br />&nbsp; &nbsp; &nbsp; &nbsp; self.touch = asscube_push;<br />&nbsp; &nbsp; &nbsp; &nbsp; self.nextthink = time + 0.1;<br />&nbsp; &nbsp; &nbsp; &nbsp; self.think = asscube_think;<br />};
Eugeny
200 постов
Карма: 10
#2 31 декабря 2011 в 09:41
в вольфе можно нажимать кнопки выстрелом, можно попытаться оттуда взять эту функцию и переделать под куб
st1x51
160 постов
Карма: 8
#3 31 декабря 2011 в 09:42
[quote author=Eugeny link=topic=714.msg16014#msg16014 date=1325324462]<br />в вольфе можно нажимать кнопки выстрелом, можно попытаться оттуда взять эту функцию и переделать под куб<br />[/quote]<br /><br />в квейке тоже так можно,видимо это не прокатило..
DOOMer
1601 постов
Карма: 103
#4 05 января 2012 в 13:32
st1x51, судя по описанию в этой теме решение было найдено? Или я чего-то не так понял?
Вертексы должны образовывать конвексный браш
My Quake Maps

Core i7 8700 3.3 Ghz, 32 Gb RAM, GeForce RTX2060s
Gentoo Linux [amd64] | Windows 10 Home



сохранись перед дверью...два раза =)
st1x51
160 постов
Карма: 8
#5 05 января 2012 в 13:37
да,оно было найдено,извращенным способом)<br /><br />
DOOMer
1601 постов
Карма: 103
#6 05 января 2012 в 15:49
Ну так напиши его тут, чтобы у темы как бы было &quot;логическое завершение&quot; =)
Вертексы должны образовывать конвексный браш
My Quake Maps

Core i7 8700 3.3 Ghz, 32 Gb RAM, GeForce RTX2060s
Gentoo Linux [amd64] | Windows 10 Home



сохранись перед дверью...два раза =)
st1x51
160 постов
Карма: 8
#7 05 января 2012 в 17:34
сам спросил-сам ответил:)<br /><br />void() button_touch =<br />{<br /> if (other.classname != &quot;cube&quot;&nbsp; &amp;&amp; (other.classname != &quot;player&quot;))<br /> return;<br /> self.enemy = other;<br /> button_fire (); <br />};