21
Tipps und Tricks / Re: Hilfe zu Episode 101 - Mit anderen Augen
« Letzter Beitrag von Kiwa am 15. April 2025, 23:19:55 »Hat sich erledigt
cEdna.FollowCharacter(player, 0, 20);
wird ein Charakter verfolgt.cEdna.FollowCharacter(null);
wird die Verfolgung aufgehoben.cEdna.Walk(player.x, player.y, eNoBlock, eWalkableAreas);
, dann läuft der Charakter auch hinterher. Der Aufruf wäre dann über repeatly_execute , wie cmdr sagte. Eine weitere Funktion wäre dann das "fangen", die man bräuchte, sprich abfragen, ob Edna den Charakter eingeholt hat.wenn ein Charakter der gerade nicht gespielt wird von den Edisons im Flur erwischt wird.Das ist nochmal eine andere Sache. Bedeutet das, dass, wenn der Spieler von einem Edison verfolgt wird, und bei der Verfolgung an einem anderen Charakter vorbeilaufen würde, von der Verfolgung ablässt und sich stattdessen diesen Charakter schnappt? Das klingt auf jeden Fall kompliziert
// ============================= hunter ===========================================
// this section after cutscene functions
int hunter_char = NO_CHAR;
// two-dimeanional hunting
#define STEPS_UNTIL_DIR 10
int steps = STEPS_UNTIL_DIR;
int lastx = -1;
int lasty = -1;
// give player time to act
#define COUNTDOWN_OFF -1
#define COUNTDOWN_START 400
#define COUNTDOWN_STOPPED -2
int countdown = COUNTDOWN_OFF;
int hunter_area = -1;
function StartHunting (int hunter){
hunter_char = hunter;
lastx = -1;
lasty = -1;
countdown = COUNTDOWN_OFF;
// switch player disabled
// avo- SetGlobalInt (291, 1); // avo veraltet
}
function StartCountdown (){
// give player some time to think and react
// but player can't move
SetGlobalInt (2, 0);
hunter_area = GetWalkableAreaAt (character [GetPlayerCharacter ()].x - GetViewportX (), character [GetPlayerCharacter ()].y - GetViewportY ());
RemoveWalkableArea (hunter_area);
countdown = COUNTDOWN_START;
}
function StopHunting (){
hunter_char = NO_CHAR;
// player may move
if (hunter_area >= 0)
{
RestoreWalkableArea (hunter_area);
hunter_area = -1;
}
SetGlobalInt (2, 1);
// switch player enabled
// avo- SetGlobalInt (291, 0); // avo veraltet
}
function IsHunting (){
int result = hunter_char != NO_CHAR;
if (result)
{
// stop hunting when chars are in different rooms
if (character [hunter_char].room != character [GetPlayerCharacter ()].room)
{
StopHunting ();
result = hunter_char != NO_CHAR;
}
}
return result;
}
function HunterSucceeded (){
int hunter = hunter_char;
}
function TimeToActIsOver (){
int hunter = hunter_char;
}
function DoHunting (){
int caught = 0;
int charid = GetPlayerCharacter ();
int px = character [charid].x;
int py = character [charid].y;
// check distance
int dx = px - character [hunter_char].x;
int dy = py - character [hunter_char].y;
if ((dx * dx + dy * dy) <= 500)
{
caught = 1;
HunterSucceeded ();
}
else if (steps <= 0)
{
if ((px != lastx) || (py != lasty))
{
// correct HUNTER's direction
MoveCharacter (hunter_char, px, py);
lastx = px;
lasty = py;
}
steps = STEPS_UNTIL_DIR;
}
else steps--;
return caught;
}
function RepExec_Hunting (){
int caught = 0;
if (IsHunting ())
{
if (countdown == COUNTDOWN_OFF) caught = DoHunting ();
else if (countdown == 0)
{
countdown = COUNTDOWN_OFF;
TimeToActIsOver ();
}
else if (countdown > 0) countdown--;
}
return caught;
}
#define NO_CHAR -1
// --- hunting ---
import function StartHunting (int hunter);
import function StopHunting ();