Sziasztok!
Pár napja letöltöttem egy angol oldalról az alábbi telemap scriptet:
#include <a_samp>
#include <mpa>
#pragma tabsize 0
enum pd
{
bool:telemapping,
Float:pointer[2],
Text:textid
}
new pi[MAX_PLAYERS][pd];
new mapobj[4];
public OnFilterScriptInit()
{
print(\"Telemap script by Hiddos loaded.\");
mapobj[0] = CreateObject(16007 + 3164,-2447.47216797,937.39990234,50.370,0.00000000,0.00000000,0.00000000);
mapobj[1] = CreateObject(16006 + 3164,-2448.96875000,937.39990234,50.370,0.00000000,0.00000000,0.00000000);
mapobj[2] = CreateObject(16005 + 3164,-2447.47216797,938.89892578,50.370,0.00000000,0.00000000,0.00000000);
mapobj[3] = CreateObject(16004 + 3164,-2448.96875000,938.89892578,50.370,0.00000000,0.00000000,0.00000000);
return 1;
}
public OnFilterScriptExit()
{
for(new i; i < MAX_PLAYERS; i++)
{
if(pi[telemapping] == true)
{
TextDrawDestroy(pi[textid]);
SetCameraBehindPlayer(i);
TogglePlayerControllable(i, true);
}
}
DestroyObject(mapobj[0]);
DestroyObject(mapobj[1]);
DestroyObject(mapobj[2]);
DestroyObject(mapobj[3]);
return 1;
}
public OnPlayerRequestClass(playerid, classid)
{
SetPlayerPos(playerid, 1958.3783, 1343.1572, 15.3746);
SetPlayerCameraPos(playerid, 1958.3783, 1343.1572, 15.3746);
SetPlayerCameraLookAt(playerid, 1958.3783, 1343.1572, 15.3746);
return 1;
}
public OnPlayerConnect(playerid)
{
SendClientMessage(playerid, 0xFFFF00FF, \"This server runs the telemap script by Hiddos. Give it a go! /telehelp\");
return 1;
}
public OnPlayerDisconnect(playerid, reason)
{
if(pi[playerid][telemapping])
{
pi[playerid][telemapping] = false;
TextDrawDestroy(pi[playerid][textid]);
}
return 1;
}
public OnPlayerCommandText(playerid, cmdtext[])
{
if(!strcmp(cmdtext, \"/telemap\", true))
{
if(!pi[playerid][telemapping])
{
pi[playerid][telemapping] = true;
SetPlayerCameraPos(playerid, -2448.228149415, 938.1492406, 53.370);
SetPlayerCameraLookAt(playerid, -2448.228149415, 938.14941406, 50.370);
TogglePlayerControllable(playerid, false);
pi[playerid][textid] = TextDrawCreate(320.000000, 217.000000, \".\");
TextDrawBackgroundColor(pi[playerid][textid], 255);
TextDrawFont(pi[playerid][textid], 0);
TextDrawLetterSize(pi[playerid][textid], 0.349999, 1.000000);
TextDrawColor(pi[playerid][textid], -65281);
TextDrawSetOutline(pi[playerid][textid], 1);
TextDrawSetProportional(pi[playerid][textid], 0);
TextDrawShowForPlayer(playerid, pi[playerid][textid]);
pi[playerid][pointer][0] = 320;
pi[playerid][pointer][1] = 217;
}
else
{
pi[playerid][telemapping] = false;
TextDrawDestroy(pi[playerid][textid]);
SetCameraBehindPlayer(playerid);
TogglePlayerControllable(playerid, true);
}
return 1;
}
if(!strcmp(cmdtext, \"/telehelp\", true))
{
SendClientMessage(playerid, 0xFFFF00FF, \"Telehelp by Hiddos:\");
SendClientMessage(playerid, 0x00FF00FF, \"Use /telemap to open the map.\");
SendClientMessage(playerid, 0x00FF00FF, \"Use the arrow keys to move around, and the jump key to teleport.\");
SendClientMessage(playerid, 0x00FF00FF, \"Press /telemap again to close it.\");
return 1;
}
return 0;
}
public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
{
if(newkeys & 32 && pi[playerid][telemapping] == true)
{
new Float:pos[3];
pos[0] = pi[playerid][pointer][0];
pos[1] = pi[playerid][pointer][1];
pos[1] = 434.0 - pos[1];
pos[0] -= (320.0);
pos[1] -= (217.0);
pos[0] *= (6.55022 * 2);
pos[1] *= (7.00935 * 2);
GetPointZPos(pos[0], pos[1], pos[2]);
TogglePlayerControllable(playerid, true);
SetCameraBehindPlayer(playerid);
SetPlayerPos(playerid, pos[0], pos[1], pos[2] + 2.5);
TextDrawDestroy(pi[playerid][textid]);
pi[playerid][telemapping] = false;
}
return 1;
}
public OnPlayerUpdate(playerid)
{
if(pi[playerid][telemapping] == false) return 1;
new keys[3]; //UD LR
GetPlayerKeys(playerid, keys[0], keys[1], keys[2]);
if(!keys[1] && !keys[2]) return 1;
#define MOVE_VALUE 1.75
if(keys[1] > 0 && pi[playerid][pointer][1] < 431) pi[playerid][pointer][1] += MOVE_VALUE;
else if(keys[1] < 0 && pi[playerid][pointer][1] > 3) pi[playerid][pointer][1] -= MOVE_VALUE;
if(keys[2] > 0 && pi[playerid][pointer][0] < 549) pi[playerid][pointer][0] += MOVE_VALUE;
else if(keys[2] < 0 && pi[playerid][pointer][0] > 91) pi[playerid][pointer][0] -= MOVE_VALUE;
TextDrawDestroy(pi[playerid][textid]);
pi[playerid][textid] = TextDrawCreate(pi[playerid][pointer][0], pi[playerid][pointer][1], \".\");
TextDrawBackgroundColor(pi[playerid][textid], 255);
TextDrawFont(pi[playerid][textid], 0);
TextDrawLetterSize(pi[playerid][textid], 0.349999, 1.000000);
TextDrawColor(pi[playerid][textid], -65281);
TextDrawSetOutline(pi[playerid][textid], 1);
TextDrawSetProportional(pi[playerid][textid], 0);
TextDrawShowForPlayer(playerid, pi[playerid][textid]);
return 1;
}
És az lenne a kérdésem, hogy hogyan lehetne úgy megcsinálni, hogy a játék térképe szerint tudjak teleportálni, ne pedig külön térkép szerint?
Még nagyon kezdõ vagyok, csak pár napja kezdtem.
Válaszokat elõre is köszönöm!
Szia!
Nem értem teljesen pontosan, hogy mit szeretnél de szerintem ez kell neked:
public OnPlayerClickMap(playerid, Float:fX, Float:fY, Float:fZ)
{
SetPlayerPosFindZ(playerid, fX, fY, fZ+3);
return 1;
}