Započeo King of the Jungle
•16. Avg. 2020.| Mini Optimizacija #2 | Streamer_UpdateEx |
2,026
pregleda
7
postova
Wheel Man
Balkan SA:MP
SA-MP Doprinos
Balkan SA:MP
SA-MP DoprinosNovi Član
90 / 100 XP
Početnik(0)
42
Postovi:
3
Teme:
Pridružio se:Avg. 2020
16. Avg. 2020.
| Mini Optimizacija #2 | Streamer_UpdateEx |
Bićemo brzi, ništa mnogo objašnjavanja 🙂
Više informacija na ovom linku!
a) Kako ne?
// RELEASED(keys)
#define RELEASED(%0) \
(((newkeys & (%0)) != (%0)) && ((oldkeys & (%0)) == (%0)))
forward UnfreezePlayer(playerid);
public UnfreezePlayer(playerid)
{
TogglePlayerControllable(playerid, true);
SendClientMessage(playerid, -1, "Objekti ucitani, jeej!");
return;
}
public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
{
// Kada igrac pusti `ENTER`
if(RELEASED(KEY_SECONDARY_ATTACK))
{
const interior_pos_x = 250.0;
const interior_pos_y = 250.0;
const interior_pos_z = 500.0;
const delay = 2000;
// Zamrzni Igraca
TogglePlayerControllable(playerid, false);
SendClientMessage(playerid, -1, "Ucitavanje objekata molimo stagod");
// Teleportuj Igraca
SetPlayerPos(playerid, interior_pos_x, interior_pos_y, interior_pos_z);
// Odmrzni Igraca
SetTimerEx("UnfreezePlayer", delay, false, "d", playerid);
}
return 1;
}b) Kako da?
// RELEASED(keys)
#define RELEASED(%0) \
(((newkeys & (%0)) != (%0)) && ((oldkeys & (%0)) == (%0)))
public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
{
// Kada igrac pusti `ENTER`
if(RELEASED(KEY_SECONDARY_ATTACK))
{
const interior_pos_x = 250.0;
const interior_pos_y = 250.0;
const interior_pos_z = 500.0;
const delay = 2000;
// Teleportuj, zamrzni, odmrzni (sve streamer uradi) :)
Streamer_UpdateEx(playerid, interior_pos_x, interior_pos_y, interior_pos_z, .compensatedtime = delay);
}
return 1;
}native Streamer_UpdateEx(playerid, Float:x, Float:y, Float:z, worldid = -1, interiorid = -1, type = -1, compensatedtime = -1, freezeplayer = 1);Napomena:
Morate koristiti compensatedtime da bi se pozicija automatski promenila i da bi se INT/VW automatski ažurirali!
Bez toga streamer samo učita objekte na x, y, z tj spremi ih da bi vi ručno igrača teleportovali (loaduje objekte pre nego što igrač dođe u streamer distancu) 😄
compensatedtime je koliko dugo streamer prestaje sa automatskim apdejtanjem objekata i koliko dugo je igrac zamrznut 😄
Wheel Man
Balkan SA:MP
SA-MP Doprinos
Balkan SA:MP
SA-MP DoprinosNovi Član
90 / 100 XP
Početnik(0)
42
Postovi:
3
Teme:
Pridružio se:Avg. 2020
16. Avg. 2020.
// xunder wrote on August 16, 2020, 10:00 pm:
U type koristi STREAMER_TYPE_OBJECT
Yep, mada sumnjam da ima potrebe jer uglavnom nije pretrpano drugim stvarima nego iskljucivo objektima ali kontam da streameru interno i to znači... 😄
EDIT:
if (static_cast(params) >= 0)
{
sampgdk::SetPlayerPos(p->first, p->second.position, p->second.position, p->second.position);
if (static_cast(params))
{
sampgdk::TogglePlayerControllable(p->first, false);
}
p->second.delayedUpdate = true;
p->second.delayedUpdateType = static_cast(params); // OVO
p->second.delayedUpdateTime = boost::chrono::steady_clock::now() + boost::chrono::milliseconds(static_cast(params));
p->second.delayedUpdateFreeze = static_cast(params) != 0;
}startManualUpdate(p->second, p->second.delayedUpdateType);void Streamer::startManualUpdate(Player &player, int type)
{
std::bitset enabledItems = player.enabledItems;
if (player.delayedUpdate)
{
if (player.delayedUpdateTime.time_since_epoch() <= boost::chrono::steady_clock::now().time_since_epoch())
{
if (player.delayedUpdateFreeze)
{
sampgdk::TogglePlayerControllable(player.playerId, true);
}
player.delayedUpdate = false;
}
}
if (type >= 0 && type < STREAMER_MAX_TYPES)
{
if (core->getChunkStreamer()->getChunkStreamingEnabled())
{
switch (type)
{
case STREAMER_TYPE_OBJECT:
{
player.discoveredObjects.clear();
player.existingObjects.clear();
player.processingChunks.reset(STREAMER_TYPE_OBJECT);
break;
}
case STREAMER_TYPE_MAP_ICON:
{
player.discoveredMapIcons.clear();
player.existingMapIcons.clear();
player.processingChunks.reset(STREAMER_TYPE_MAP_ICON);
break;
}
case STREAMER_TYPE_3D_TEXT_LABEL:
{
player.discoveredTextLabels.clear();
player.existingTextLabels.clear();
player.processingChunks.reset(STREAMER_TYPE_3D_TEXT_LABEL);
break;
}
}
}
player.enabledItems.reset();
player.enabledItems.set(type);
}
else if (core->getChunkStreamer()->getChunkStreamingEnabled())
{
player.discoveredMapIcons.clear();
player.discoveredObjects.clear();
player.discoveredTextLabels.clear();
player.existingMapIcons.clear();
player.existingObjects.clear();
player.existingTextLabels.clear();
player.processingChunks.reset();
}
processActiveItems();
performPlayerUpdate(player, false);
if (core->getChunkStreamer()->getChunkStreamingEnabled())
{
core->getChunkStreamer()->performPlayerChunkUpdate(player, false);
}
player.enabledItems = enabledItems;
}Ipak unosite tip 😄
Godfather
Balkan SA:MP
SA-MP Doprinos
Balkan SA:MP
SA-MP DoprinosAktivan Član
9 / 250 XP
Početnik(1)
2,044
Postovi:
55
Teme:
Pridružio se:Sep. 2013
17. Avg. 2020.
King of the Jungle wrote on August 16, 2020, 10:14 pm:
Yep, mada sumnjam da ima potrebe jer uglavnom nije pretrpano drugim stvarima nego iskljucivo objektima ali kontam da streameru interno i to znači... 😄
Iz iskustva ne brini haha 😄
Underboss
Balkan SA:MP
SA-MP Doprinos
Balkan SA:MP
SA-MP DoprinosNovi Član
240 / 250 XP
Početnik(0)
686
Postovi:
39
Teme:
Pridružio se:Dec. 2018
Morate biti prijavljeni da biste odgovorili na ovu temu.
Prijava
