Untitled
unknown
plain_text
3 years ago
34 kB
9
Indexable
void join_world(ENetPeer* peer, string& name_, int spawnas_x = 0, int spawnas_y = 0, int delay = 0, bool locked = false, bool door = false) {
pInfo(peer)->update = true;
pInfo(peer)->autofarm = 0, pInfo(peer)->autofarm2 = 0;
if (pInfo(peer)->tankIDName.empty()) return;
if (not door) {
if (pInfo(peer)->world_time + 1500 > (duration_cast<milliseconds>(system_clock::now().time_since_epoch())).count()) {
gamepacket_t p;
p.Insert("OnFailedToEnterWorld"), p.CreatePacket(peer);
return;
}
pInfo(peer)->world_time = (duration_cast<milliseconds>(system_clock::now().time_since_epoch())).count();
}
if (not check_name(name_)) return cant_enter(peer, name_, door, delay);
//if (door == false) wipe_beach(peer);
World world_ = get_world(name_);
string owner_name = world_.owner_name, user_name = (not pInfo(peer)->d_name.empty() ? pInfo(peer)->d_name : pInfo(peer)->tankIDName);
int w_c = 0, s_c = 0, net_ = 1, r_c = 0;
if (world_.name != pInfo(peer)->world) {
if (name_ == "CHRIS" && pInfo(peer)->tankIDName != "chris" && pInfo(peer)->tankIDName != "Vxnessa" && pInfo(peer)->tankIDName != "christine" && pInfo(peer)->tankIDName != "uzi" && pInfo(peer)->tankIDName != "Zack" && pInfo(peer)->tankIDName != "kim" && pInfo(peer)->tankIDName != "Buket" && pInfo(peer)->tankIDName != "Cyrus") return cant_enter(peer, "You are trying to enter your `2imagination ``but you `4failed.", door, delay);
if (name_ == "MOD" && !pInfo(peer)->mod) return cant_enter(peer, "Only Mod able to enter this world.", door, delay);
if (name_ == "VIP" && !pInfo(peer)->vip) return cant_enter(peer, "Only Vip able to enter this world.", door, delay);
//if (name_ == "SUPERRAYMAN" && !pInfo(peer)->hand == 9770) return cant_enter(peer, "`9Only Golden Rayman's Fist Holder able to enter this world.", door, delay);
if (world_.nuked == true && pInfo(peer)->mod + pInfo(peer)->dev < 1) return cant_enter(peer, "That world is inaccessible.", door, delay);
if (pInfo(peer)->level < world_.entry_level and (world_.owner_name != pInfo(peer)->tankIDName and not pInfo(peer)->dev and not pInfo(peer)->mod)) {
if (/*!guild_access(peer, world_.guild_id) and */ find(world_.admins.begin(), world_.admins.end(), user_name) == world_.admins.end()) return cant_enter(peer, "Players lower than level " + to_string(world_.entry_level) + " can't enter " + world_.name + ".", door, delay);
}
for (pair<string, long long int> p : world_.bannedPlayers) {
if (p.first == pInfo(peer)->tankIDName) if (p.second + (3600 * 1000) > (duration_cast<milliseconds>(system_clock::now().time_since_epoch())).count()) return cant_enter(peer, "`4Oh no!`` You've been banned from that world by its owner! Try again later after the world ban wears off.", door, delay);
}
get_players(world_.name, w_c, s_c, net_, r_c);
if (w_c >= 45 and not pInfo(peer)->dev and not pInfo(peer)->mod) return cant_enter(peer, "Oops, `5" + world_.name + "`` already has `445`` people in it. Try again later.", door, delay);
}
uint32_t ySize = 60, xSize = 100;
if (world_.name == pInfo(peer)->world) {
gamepacket_t p(delay, pInfo(peer)->netID), p2(delay), p3(delay, pInfo(peer)->netID);
p.Insert("OnSetFreezeState"), p.Insert(1), p.CreatePacket(peer);
if (spawnas_x != 0) {
}
else if (not locked) {
for (int i_ = 0; i_ < world_.blocks.size(); i_++) {
if (items.at(world_.blocks.at(i_).fg).blockType == BlockTypes::MAIN_DOOR) {
spawnas_x = i_ % xSize, spawnas_y = i_ / xSize;
pInfo(peer)->c_x = spawnas_x, pInfo(peer)->c_y = spawnas_y;
gamepacket_t p(delay, pInfo(peer)->netID);
p.Insert("SetRespawnPos"), p.Insert(i_), p.CreatePacket(peer);
break;
}
}
}
else {
gamepacket_t p(delay);
p.Insert("OnTalkBubble"), p.Insert(pInfo(peer)->netID), p.Insert("The door is locked."), p.Insert(0), p.Insert(0), p.CreatePacket(peer);
}
if (not locked) {
pInfo(peer)->x = spawnas_x * 32, pInfo(peer)->y = spawnas_y * 32;
gamepacket_t p(delay, pInfo(peer)->netID);
p.Insert("OnSetPos"), p.Insert(float(spawnas_x) * 32, float(spawnas_y) * 32), p.CreatePacket(peer);
if (not pInfo(peer)->invis) {
gamepacket_t p(delay, pInfo(peer)->netID);
p.Insert("OnPlayPositioned"), p.Insert("audio/door_open.wav"), p.CreatePacket(peer);
}
}
p2.Insert("OnZoomCamera"), p2.Insert((float)10000.000000), p2.Insert(1000), p2.CreatePacket(peer);
p3.Insert("OnSetFreezeState"), p3.Insert(0), p3.CreatePacket(peer);
return;
}
else if (not pInfo(peer)->world.empty()) exit_(peer, true);
pInfo(peer)->lock = 0;
pInfo(peer)->world = world_.name;
int total = 78 + world_.name.length() + world_.blocks.size() + 24 + ((8 * world_.blocks.size()) + (world_.drop.size() * 16));
int spawn_x = 0, spawn_y = 0;
// BYTE* data = (BYTE*)malloc((world_.blocks.size()*2) * sizeof(WorldBlock) + sizeof(World));
BYTE* data = (BYTE*)malloc(world_.blocks.size() * sizeof(WorldBlock) + (sizeof(World) * 2));
memset(data, 0, total);
*(__int8*)(data) = 4;
*(__int8*)(data + 4) = 4;
*(__int8*)(data + 16) = 8;
*(__int8*)(data + 66) = world_.name.length();
memcpy(data + 68, world_.name.c_str(), world_.name.length());
*(__int8*)(data + 68 + world_.name.length()) = 100;
*(__int8*)(data + 72 + world_.name.length()) = 60;
*(__int16*)(data + 76 + world_.name.length()) = world_.blocks.size();
BYTE* blc = data + 80 + world_.name.length();
vector<vector<unsigned int>> world_locks;
world_.active_jammers.clear();
vector<string> world_mods;
//vector<int> blocks;
for (int i_ = 0; i_ < 6000; i_++) {
/*
if (find(blocks.begin(), blocks.end(), world_.blocks[i_].fg) == blocks.end()) {
blocks.push_back(world_.blocks[i_].fg);
cout << world_.blocks[i_].fg << endl;
}*/
// if (world_.blocks[i_].fg == 6950 || world_.blocks[i_].fg == 6952 || world_.blocks[i_].fg == 6954) world_.blocks[i_].fg = 2;
*(__int16*)(blc) = world_.blocks[i_].fg;
*(__int16*)(blc + 2) = world_.blocks[i_].bg;
*(__int32*)(blc + 4) = world_.blocks[i_].flags;
if (world_.blocks.at(i_).flags & 0x00400000 && (world_.blocks.at(i_).fg == 226 || world_.blocks.at(i_).fg == 1276 || world_.blocks.at(i_).fg == 1278 || world_.blocks.at(i_).fg == 4884 || world_.blocks.at(i_).fg == 4992)) world_mods.push_back("`" + a + (world_.blocks.at(i_).fg == 226 ? "4JAMMED" : (world_.blocks.at(i_).fg == 1276 ? "2NOPUNCH" : (world_.blocks.at(i_).fg == 1278 ? "2IMMUNE" : (world_.blocks.at(i_).fg == 4884 ? "2NOWAR" : "2ANTIGRAVITY")))) + "``"), world_.active_jammers.push_back(world_.blocks.at(i_).fg);
if (world_.blocks[i_].fg == 5638 || world_.blocks[i_].fg == 6948 || world_.blocks[i_].fg == 6946) {
*(__int8*)(blc + 8) = 62;
*(__int16*)(blc + 9) = world_.blocks[i_].id;
*(__int16*)(blc + 13) = world_.blocks[i_].pr;
*(__int8*)(blc + 17) = world_.blocks[i_].enabled;
if (world_.blocks[i_].fg == 5638)*(__int16*)(blc + 18) = world_.blocks[i_].magnetron;
*(__int16*)(blc + 20) = (world_.blocks[i_].fg == 5638 ? 5000 : 1500);
blc += 15;
total += 15;
}
else if (items[world_.blocks[i_].fg].actionType == -115 || world_.blocks[i_].fg == 3760 || world_.blocks[i_].fg == 6950 || world_.blocks[i_].fg == 6952 || world_.blocks[i_].fg == 6954) {
*(__int8*)(blc + 8) = 6;
blc += 8;
total += 8;
}
/*
else if (world_.blocks[i_].fg == 6950 || world_.blocks[i_].fg == 6952 || world_.blocks[i_].fg == 6954) {
*(__int8*)(blc + 8) = world_.blocks[i_].fg == 6950 ? 70 : 69;
*(__int8*)(blc + 9) = world_.blocks[i_].pr > 0 ? 1 : 0;
*(__int16*)(blc + 13) = world_.blocks[i_].pr;
*(__int16*)(blc + 17) = world_.blocks[i_].id;
*(__int8*)(blc + 21) = world_.blocks[i_].enabled;
blc += 13;
total += 13;
}*/
else if (items[world_.blocks[i_].fg].easel) {
*(__int8*)(blc + 8) = 35;
*(__int16*)(blc + 9) = world_.blocks[i_].id;
*(__int16*)(blc + 13) = world_.blocks[i_].txt.size();
memcpy(blc + 15, world_.blocks[i_].txt.c_str(), world_.blocks[i_].txt.size());
blc += 7 + world_.blocks[i_].txt.size();
total += 7 + world_.blocks[i_].txt.size();
}
else if (items[world_.blocks[i_].fg].bunny_egg) {
*(__int8*)(blc + 8) = 15;
*(__int16*)(blc + 9) = world_.blocks[i_].bunny_egg_progress;
blc += 5;
total += 5;
}
else if (items[world_.blocks[i_].fg].dshelf) {
*(__int8*)(blc + 8) = 43;
*(__int16*)(blc + 9) = world_.blocks[i_].shelf_1;
*(__int16*)(blc + 13) = world_.blocks[i_].shelf_2;
*(__int16*)(blc + 17) = world_.blocks[i_].shelf_3;
*(__int16*)(blc + 21) = world_.blocks[i_].shelf_4;
blc += 17;
total += 17;
}
else if (items[world_.blocks[i_].fg].fish_port) {
*(__int8*)(blc + 8) = 63;
blc += 1 + 4 + 8;
total += 1 + 4 + 8;
}
else if (items[world_.blocks[i_].fg].timer) {
*(__int8*)(blc + 8) = 45;
blc += 1;
total += 1;
}
else if (items[world_.blocks[i_].fg].heart_monitor) {
*(__int8*)(blc + 8) = 11;
{
bool ijungtas = false;
for (ENetPeer* currentPeer = server->peers; currentPeer < &server->peers[server->peerCount]; ++currentPeer) {
if (currentPeer->state != ENET_PEER_STATE_CONNECTED or currentPeer->data == NULL) continue;
if (fixchar(pInfo(currentPeer)->tankIDName) == fixchar(world_.blocks[i_].heart_monitor)) {
ijungtas = 1;
break;
}
}
/*
GlobalMonitors new_monitor;
new_monitor.active = ijungtas;
new_monitor.world_name = world_.name;
new_monitor.x = i_ % 100;
new_monitor.y = i_ / 100;
monitors.push_back(new_monitor);*/
if (ijungtas)*(int*)(blc + 4) = world_.blocks[i_].flags | 0x00400000;
*(int*)(blc + 9) = ijungtas;
}
*(int*)(blc + 13) = world_.blocks[i_].heart_monitor.size();
memcpy(blc + 15, world_.blocks[i_].heart_monitor.c_str(), world_.blocks[i_].heart_monitor.size());
blc += 7 + world_.blocks[i_].heart_monitor.size();
total += 7 + world_.blocks[i_].heart_monitor.size();
}
else if (items[world_.blocks[i_].fg].xeno) {
*(__int8*)(blc + 8) = 53;
blc += 9;
total += 9;
}
else if (items[world_.blocks[i_].fg].trickster) {
*(__int8*)(blc + 8) = 52;
blc += 1;
total += 1;
}
else if (items[world_.blocks[i_].fg].charger) {
*(int*)(blc + 4) = (world_.blocks[i_].id != 0 ? 0x00400000 : world_.blocks[i_].flags);
*(__int8*)(blc + 8) = 57;
*(__int16*)(blc + 9) = (world_.blocks[i_].planted - time(nullptr) <= 0 ? 3600 : 3600 - (world_.blocks[i_].planted - time(nullptr)));
blc += 5;
total += 5;
}
else if (items[world_.blocks[i_].fg].spirit) {
*(__int8*)(blc + 8) = 41;
*(__int16*)(blc + 9) = world_.blocks[i_].c_;
blc += 5;
total += 5;
}
else if (items[world_.blocks[i_].fg].trans) {
*(__int8*)(blc + 8) = 19;
blc += 19;
total += 19;
}
else if (items[world_.blocks[i_].fg].mannequin) {
*(__int8*)(blc + 8) = 14;
*(__int16*)(blc + 9) = world_.blocks[i_].txt.size();
memcpy(blc + 11, world_.blocks[i_].txt.c_str(), world_.blocks[i_].txt.size());
*(__int16*)(blc + 16 + world_.blocks[i_].txt.size()) = world_.blocks[i_].mannequin.c_hair;
*(__int16*)(blc + 18 + world_.blocks[i_].txt.size()) = world_.blocks[i_].mannequin.c_shirt;
*(__int16*)(blc + 20 + world_.blocks[i_].txt.size()) = world_.blocks[i_].mannequin.c_pants;
*(__int16*)(blc + 22 + world_.blocks[i_].txt.size()) = world_.blocks[i_].mannequin.c_feet;
*(__int16*)(blc + 24 + world_.blocks[i_].txt.size()) = world_.blocks[i_].mannequin.c_head;
*(__int16*)(blc + 26 + world_.blocks[i_].txt.size()) = world_.blocks[i_].mannequin.c_hand;
*(__int16*)(blc + 28 + world_.blocks[i_].txt.size()) = world_.blocks[i_].mannequin.c_back;
*(__int16*)(blc + 30 + world_.blocks[i_].txt.size()) = world_.blocks[i_].mannequin.c_mask;
*(__int16*)(blc + 32 + world_.blocks[i_].txt.size()) = world_.blocks[i_].mannequin.c_neck;
blc += 26 + world_.blocks[i_].txt.size();
total += 26 + world_.blocks[i_].txt.size();
}
else if (items[world_.blocks[i_].fg].vipentrance) {
*(__int8*)(blc + 8) = 44;
vector<int> vip_members;
if (world_.blocks[i_].limit_admins or find(world_.blocks[i_].admins.begin(), world_.blocks[i_].admins.end(), pInfo(peer)->tankIDName) != world_.blocks[i_].admins.end() or pInfo(peer)->tankIDName == world_.owner_name or world_.owner_name.empty()) vip_members.push_back(pInfo(peer)->id);
*(__int16*)(blc + 14) = vip_members.size();
for (int i = 0; i < vip_members.size(); i++) *(__int32*)(blc + 18 + (i * 4)) = vip_members[i];
blc += 10 + (vip_members.size() * 4);
total += 10 + (vip_members.size() * 4);
}
else if (items[world_.blocks[i_].fg].infinitymachine) {
*(__int8*)(blc + 8) = 19;
blc += 19;
total += 19;
}
else if (items[world_.blocks[i_].fg].portrait) {
*(__int8*)(blc + 8) = 48;
*(__int16*)(blc + 9) = world_.blocks[i_].txt.size();
memcpy(blc + 11, world_.blocks[i_].txt.c_str(), world_.blocks[i_].txt.size());
if (world_.blocks[i_].portrait.c_skin == 0 and world_.blocks[i_].portrait.c_face == 0 and world_.blocks[i_].portrait.c_head == 0 and world_.blocks[i_].portrait.c_hair == 0) {
}
else {
*(int*)(blc + 11 + world_.blocks[i_].txt.size()) = world_.blocks[i_].portrait.c_expression;
*(int*)(blc + 19 + world_.blocks[i_].txt.size()) = world_.blocks[i_].portrait.c_hair_colour;
*(int*)(blc + 23 + world_.blocks[i_].txt.size()) = world_.blocks[i_].portrait.c_skin;
*(int*)(blc + 27 + world_.blocks[i_].txt.size()) = world_.blocks[i_].portrait.c_face;
*(int*)(blc + 29 + world_.blocks[i_].txt.size()) = world_.blocks[i_].portrait.c_head;
*(int*)(blc + 31 + world_.blocks[i_].txt.size()) = world_.blocks[i_].portrait.c_hair;
}
blc += 7 + 15 + 3 + world_.blocks[i_].txt.size();
total += 7 + 15 + 3 + world_.blocks[i_].txt.size();
}
else if (items[world_.blocks[i_].fg].vall_mount/*|| world_.blocks[i_].fg == 6950 || world_.blocks[i_].fg == 6952 || world_.blocks[i_].fg == 6954*/) {
*(__int8*)(blc + 8) = 47;
*(__int8*)(blc + 9) = 0;
blc += 8;
total += 8;
}
else if (items[world_.blocks[i_].fg].bulletin_board or items[world_.blocks[i_].fg].storage_box or items[world_.blocks[i_].fg].growscan or items[world_.blocks[i_].fg].security_camera or items[world_.blocks[i_].fg].spotlight or world_.blocks[i_].fg == 4722) {
*(__int8*)(blc + 8) = 6;
blc += 8;
total += 8;
}
else if (world_.blocks[i_].fossil) {
*(__int32*)(blc + 4) = world_.blocks[i_].flags;
*(__int8*)(blc + 8) = 12;
//blc += 0;
//total += 0;
}
else {
switch (items[world_.blocks[i_].fg].blockType) {
case BlockTypes::WEATHER:
{
switch (world_.blocks[i_].fg) {
case 3694: case 5000:
{
*(__int8*)(blc + 8) = 40;
*(__int32*)(blc + 9) = (world_.blocks[i_].fg == 3694 ? (world_.blocks[i_].b << 24) | (world_.blocks[i_].g << 16) | (world_.blocks[i_].r << 8) : world_.blocks[i_].id != 0 ? world_.blocks[i_].id : 14);
blc += 5;
total += 5;
break;
}
case 3832:
{
*(__int8*)(blc + 8) = 49;
*(__int16*)(blc + 9) = (world_.blocks[i_].id != 0 ? world_.blocks[i_].id : 2);
*(__int16*)(blc + 13) = world_.blocks[i_].gravity;
*(__int16*)(blc + 17) = (int)world_.blocks[i_].spin | ((int)world_.blocks[i_].invert << 1);
blc += 10;
total += 10;
break;
}
default:
{
if (items[world_.blocks[i_].fg].ext_weather) {
*(__int8*)(blc + 8) = 5;
blc += 1;
total += 1;
}
break;
}
}
break;
}
case BlockTypes::CRYSTAL:
{
*(__int8*)(blc + 8) = 6;
blc += 8;
total += 8;
break;
}
case BlockTypes::VENDING:
{
*(int*)(blc + 9) = (world_.blocks[i_].pr < 0 and world_.blocks[i_].id != 0 && world_.blocks[i_].c_ < (world_.blocks[i_].pr * -1) ? 0 : world_.blocks[i_].id);
*(__int8*)(blc + 8) = 24;
*(int*)(blc + 4) = (world_.blocks[i_].pr < 0 and world_.blocks[i_].id != 0 && world_.blocks[i_].c_ < (world_.blocks[i_].pr * -1) ? world_.blocks[i_].flags | ((world_.blocks[i_].c_ < (world_.blocks[i_].pr * -1)) ? (world_.blocks[i_].wl != 0 ? 0x02410000 : 0x00410000) : (world_.blocks[i_].wl != 0 ? 0x02410000 : 0x00410000)) : world_.blocks[i_].flags | (world_.blocks[i_].id == 0 ? (world_.blocks[i_].wl != 0 ? 0x02000000 : 0x00000000) : (world_.blocks[i_].wl != 0 ? 0x02410000 : 0x00410000)));
*(int*)(blc + 13) = (world_.blocks[i_].pr < 0 and world_.blocks[i_].id != 0 && world_.blocks[i_].c_ < (world_.blocks[i_].pr * -1) ? 0 : world_.blocks[i_].pr);
blc += 9;
total += 9;
break;
}
case BlockTypes::DISPLAY:
{
*(__int8*)(blc + 8) = 23;
*(__int16*)(blc + 9) = world_.blocks[i_].id;
blc += 5;
total += 5;
break;
}
case BlockTypes::PROVIDER:
{
*(__int8*)(blc + 8) = 9;
*(__int32*)(blc + 9) = (time(nullptr) - world_.blocks[i_].planted <= items[world_.blocks[i_].fg].growTime ? time(nullptr) - world_.blocks[i_].planted : items[world_.blocks[i_].fg].growTime);
blc += 5;
total += 5;
break;
}
case BlockTypes::RANDOM_BLOCK:
{
*(__int8*)(blc + 8) = 8;
*(__int32*)(blc + 9) = world_.blocks[i_].roll;
blc += 2;
total += 2;
break;
}
case BlockTypes::LOCK:
{
if (world_.blocks[i_].fg == 5814) {
*(__int8*)(blc + 8) = 6;
blc += 8;
total += 8;
}
else {
if (world_.blocks[i_].fg == 202 or world_.blocks[i_].fg == 204 or world_.blocks[i_].fg == 206 or world_.blocks[i_].fg == 4994) world_locks.push_back({ i_ % xSize, i_ / xSize });
else pInfo(peer)->lock = world_.blocks[i_].fg;
if (world_.blocks[i_].open_to_public) {
*(int*)(blc + 4) = 0x00800000;
}
*(__int8*)(blc + 8) = 3;
uint8_t world_settings = world_.disable_music_blocks ? (world_.make_music_blocks_invisible ? 12345 : 1234) : (world_.make_music_blocks_invisible ? 100 : 0);
if (world_.rainbows and world_.blocks[i_].fg == 4802) world_settings += 128;
*(__int16*)(blc + 9) = world_settings;
*(int*)(blc + 10) = (world_.blocks[i_].owner_name == pInfo(peer)->tankIDName || world_.owner_name == pInfo(peer)->tankIDName ? pInfo(peer)->id : -1);
*(__int16*)(blc + 18) = world_.music_bpm * -1;
bool access = false;
uint16_t count_of_admins = 1;
{
if (world_.blocks[i_].fg == 202 or world_.blocks[i_].fg == 204 or world_.blocks[i_].fg == 206 or world_.blocks[i_].fg == 4994) if (find(world_.blocks[i_].admins.begin(), world_.blocks[i_].admins.end(), pInfo(peer)->tankIDName) != world_.blocks[i_].admins.end())access = true;
//if (world_.blocks[i_].fg == 5814) if (guild_access(peer, world_.guild_id))access = true;
if (world_.owner_name != "") if (find(world_.admins.begin(), world_.admins.end(), pInfo(peer)->tankIDName) != world_.admins.end()) access = true;
if (access) *(int*)(blc + 22) = pInfo(peer)->id, count_of_admins++;
}
*(__int8*)(blc + 14) = count_of_admins;
blc += 10 + (count_of_admins * 4);
total += 10 + (count_of_admins * 4);
}
break;
}
case BlockTypes::MAIN_DOOR:
{
spawn_x = (i_ % xSize) * 32, spawn_y = (i_ / xSize) * 32;
pInfo(peer)->c_x = spawn_x / 32;
pInfo(peer)->c_y = spawn_y / 32;
*(__int8*)(blc + 8) = 1;
*(__int16*)(blc + 9) = 4;
memcpy(blc + 11, "EXIT", 4);
blc += 8;
total += 8;
break;
}
case BlockTypes::SEED:
{
*(int*)(blc + 4) = 0 | 0x100000;
*(__int8*)(blc + 8) = 4;
*(int*)(blc + 9) = (time(nullptr) - world_.blocks[i_].planted <= items.at(world_.blocks[i_].fg).growTime ? time(nullptr) - world_.blocks[i_].planted : items.at(world_.blocks[i_].fg).growTime);
*(__int16*)(blc + 13) = world_.blocks[i_].fruit;
blc += 6;
total += 6;
break;
}
case BlockTypes::DONATION:case BlockTypes::MAILBOX:
{
*(__int32*)(blc + 4) = world_.blocks[i_].flags;
*(__int8*)(blc + 8) = 12;
blc += 8;
total += 8;
break;
}
case BlockTypes::DOOR: case BlockTypes::PORTAL:
{
string duru_tekstas = (world_.blocks[i_].txt.empty() ? (world_.blocks[i_].door_destination.empty() ? "" : (world_.blocks[i_].door_destination.find(":") != string::npos ? explode(":", world_.blocks[i_].door_destination)[0] + "..." : world_.blocks[i_].door_destination)) : world_.blocks[i_].txt);
*(__int8*)(blc + 8) = 1;
*(__int16*)(blc + 9) = duru_tekstas.size();
memcpy(blc + 11, duru_tekstas.c_str(), duru_tekstas.size());
*(__int8*)(blc + 11 + duru_tekstas.size()) = (world_.blocks[i_].open ? 0 : 0x08);
blc += 4 + duru_tekstas.size();
total += 4 + duru_tekstas.size();
break;
}
case BlockTypes::SIGN:
{
*(__int8*)(blc + 8) = 2;
*(int*)(blc + 9) = world_.blocks[i_].txt.size();
memcpy(blc + 11, world_.blocks[i_].txt.c_str(), world_.blocks[i_].txt.size());
*(__int16*)(blc + 11 + world_.blocks[i_].txt.size()) = 0;
blc += 7 + world_.blocks[i_].txt.size();
total += 7 + world_.blocks[i_].txt.size();
break;
}
}
}
blc += 8;
}
*(int*)(blc) = world_.drop.size();
*(int*)(blc + 4) = world_.drop.size();
blc += 8;
for (int i_ = 0; i_ < world_.drop.size(); i_++) {
*(__int16*)(blc) = world_.drop[i_].id;
*(float*)(blc + 2) = world_.drop[i_].x;
*(float*)(blc + 6) = world_.drop[i_].y;
*(__int8*)(blc + 10) = world_.drop[i_].count;
*(int*)(blc + 12) = world_.drop[i_].uid;
blc += 16;
}
enet_peer_send(peer, 0, enet_packet_create(data, total, ENET_PACKET_FLAG_RELIABLE));
delete[] data;
if (world_locks.size() > 0) {
vector<World>::iterator p = find_if(worlds.begin(), worlds.end(), [name_](const World& a) { return a.name == name_; });
if (p != worlds.end()) {
World* world_pointer_ = &worlds[p - worlds.begin()];
vector<WorldBlock> shadow_copy_2 = world_.blocks;
for (vector<unsigned int> sk_ : world_locks) {
int l_x = sk_[0];
int l_y = sk_[1];
WorldBlock block_ = world_.blocks[l_x + (l_y * 100)];
block_.owner_named = block_.owner_name;
world_pointer_->blocks[l_x + (l_y * 100)].owner_named = block_.owner_named;
world_.blocks[l_x + (l_y * 100)].owner_named = block_.owner_name;
vector<vector<int>> locked_tiles_around_lock{};
vector<int> new_tiles{};
new_tiles.push_back(l_x + (l_y * 100));
for (int i2 = 0; i2 < new_tiles.size(); i2++) {
int s_x_ = new_tiles[i2] % 100, s_y_ = new_tiles[i2] / 100;
if (s_x_ < 99 and shadow_copy_2[s_x_ + 1 + (s_y_ * 100)].locked and shadow_copy_2[s_x_ + 1 + (s_y_ * 100)].lock_origin == (l_x + (l_y * 100))) {
if (not shadow_copy_2[s_x_ + 1 + (s_y_ * 100)].scanned) {
shadow_copy_2[s_x_ + 1 + (s_y_ * 100)].scanned = true;
new_tiles.push_back(s_x_ + 1 + (s_y_ * 100));
locked_tiles_around_lock.push_back({ s_x_ + 1, s_y_ });
}
} if (s_x_ > 0 and shadow_copy_2[s_x_ - 1 + (s_y_ * 100)].locked and shadow_copy_2[s_x_ - 1 + (s_y_ * 100)].lock_origin == (l_x + (l_y * 100))) {
if (not shadow_copy_2[s_x_ - 1 + (s_y_ * 100)].scanned) {
shadow_copy_2[s_x_ - 1 + (s_y_ * 100)].scanned = true;
new_tiles.push_back(s_x_ - 1 + (s_y_ * 100));
locked_tiles_around_lock.push_back({ s_x_ - 1, s_y_ });
}
} if (s_y_ < 59 and shadow_copy_2[s_x_ + ((s_y_ + 1) * 100)].locked and shadow_copy_2[s_x_ + ((s_y_ + 1) * 100)].lock_origin == (l_x + (l_y * 100))) {
if (not shadow_copy_2[s_x_ + ((s_y_ + 1) * 100)].scanned) {
shadow_copy_2[s_x_ + ((s_y_ + 1) * 100)].scanned = true;
new_tiles.push_back(s_x_ + ((s_y_ + 1) * 100));
locked_tiles_around_lock.push_back({ s_x_, s_y_ + 1 });
}
} if (s_y_ > 0 and shadow_copy_2[s_x_ + ((s_y_ - 1) * 100)].locked and shadow_copy_2[s_x_ + ((s_y_ - 1) * 100)].lock_origin == (l_x + (l_y * 100))) {
if (not shadow_copy_2[s_x_ + ((s_y_ - 1) * 100)].scanned) {
shadow_copy_2[s_x_ + ((s_y_ - 1) * 100)].scanned = true;
new_tiles.push_back(s_x_ + ((s_y_ - 1) * 100));
locked_tiles_around_lock.push_back({ s_x_, s_y_ - 1 });
}
}
}
if (locked_tiles_around_lock.size() != 0) {
PlayerMoving data_{};
data_.packetType = 15, data_.punchX = l_x, data_.punchY = l_y, data_.characterState = 0x8;
data_.netID = block_.owner_name == (not pInfo(peer)->d_name.empty() ? pInfo(peer)->d_name : pInfo(peer)->tankIDName) ? pInfo(peer)->id : -1;
data_.plantingTree = block_.fg;
BYTE* raw;
int alloc = alloc_(&world_, &block_);
raw = packPlayerMoving(&data_, 112 + (locked_tiles_around_lock.size() * 2) + alloc);
*(int*)(raw + 8) = locked_tiles_around_lock.size();
*(__int8*)(raw + 12) = 8;
BYTE* blc = raw + 56;
for (int i_ = 0; i_ < locked_tiles_around_lock.size(); i_++) {
vector<int> update_tiles = locked_tiles_around_lock[i_];
int x = update_tiles[0];
int y = update_tiles[1];
int sq_ = x + (y * 100);
*(int*)(blc + (i_ * 2)) = sq_;
shadow_copy_2[x + (y * 100)].scanned = false;
}
send_raw(peer, 4, raw, 112 + (locked_tiles_around_lock.size() * 2) + alloc, ENET_PACKET_FLAG_RELIABLE);
PlayerMoving data_2{};
data_2.packetType = 5, data_2.punchX = l_x, data_2.punchY = l_y, data_2.characterState = 0x8;
BYTE* raw2 = packPlayerMoving(&data_2, 112 + alloc);
BYTE* blc2 = raw2 + 56;
form_visual(blc2, block_, world_, peer, false);
send_raw(peer, 4, raw2, 112 + alloc, ENET_PACKET_FLAG_RELIABLE);
delete[] raw, blc, raw2, blc2;
}
}
}
}
bool wipe = false;
for (int i_ = 0; i_ < pInfo(peer)->inv.size(); i_++) {
if (pInfo(peer)->inv[i_].id == 1424 || pInfo(peer)->inv[i_].id == 5816 || pInfo(peer)->inv[i_].id == 5640) {
wipe = true;
pInfo(peer)->inv[i_].id = 0;
pInfo(peer)->inv[i_].count = 0;
if (pInfo(peer)->inv[i_].id == 5640) pInfo(peer)->magnetron_id = 0, pInfo(peer)->magnetron_x = 0, pInfo(peer)->magnetron_y = 0;
}
}
if (wipe) send_inventory(peer);
pInfo(peer)->netID = net_;
if (spawnas_x != 0 or spawnas_y != 0) spawn_x = spawnas_x * 32, spawn_y = spawnas_y * 32;
pInfo(peer)->name_color = boosterTag(peer) + (((pInfo(peer)->adminLevel != 0) ? adminTag(pInfo(peer)->adminLevel) : (not pInfo(peer)->d_name.empty() ? pInfo(peer)->d_name : pInfo(peer)->tankIDName) == world_.owner_name ? "`2" : (/*guild_access(peer, world_.guild_id) or */ find(world_.admins.begin(), world_.admins.end(), (not pInfo(peer)->d_name.empty() ? pInfo(peer)->d_name : pInfo(peer)->tankIDName)) != world_.admins.end()) ? "`^" : "`0"));
gamepacket_t /*p,*/ p2, p3;
/*
p.Insert("OnSetBux"), p.Insert(pInfo(peer)->gems), p.Insert(1), p.Insert((pInfo(peer)->supp >= 1) ? 1 : 0);
if (pInfo(peer)->supp >= 2) p.Insert((float)33796, (float)1, (float)0);
p.CreatePacket(peer);*/
{
/*
gamepacket_t pb;
pb.Insert((world_.name == "BEACHPARTYGAME" ? "ShowPearlCurrency" : "HidePearlCurrency"));
pb.CreatePacket(peer);
add_pearl(peer);*/
}
p2.Insert("OnConsoleMessage"), p2.Insert("" + (pInfo(peer)->mod + pInfo(peer)->dev > 0 ? (world_.nuked ? "`0[NUKED: " + world_.n_b + "," + world_.n_t + "]`` " : "") : "") + "World `w" + world_.name + "`` " + (world_mods.size() != 0 ? "`0[``" + join(world_mods, ", ") + "`0]`` " : "") + "" + "entered. There are `w" + to_string(w_c) + "`` other people here, `w" + setGems(s_c * 6 + 1) + "`` online."), p2.CreatePacket(peer);
p3.Insert("OnSetCurrentWeather");
p3.Insert((world_.weather == 0 || world_.weather == 80 && world_.d_weather != 0 ? world_.d_weather : (world_.weather == 0 ? 80 : world_.weather)));
p3.CreatePacket(peer);
{
string s_ = "spawn|avatar\nnetID|" + to_string(net_) + "\nuserID|" + to_string(pInfo(peer)->id) + "\ncolrect|0|0|20|30\nposXY|" + to_string(spawn_x) + "|" + to_string(spawn_y) + "\nname|" + (not pInfo(peer)->d_name.empty() ? pInfo(peer)->d_name : pInfo(peer)->name_color + (pInfo(peer)->tankIDName.empty() ? pInfo(peer)->requestedName : pInfo(peer)->tankIDName)) + (pInfo(peer)->is_legend ? " of Legend" : "") + "``\ncountry|" + pInfo(peer)->country + "\ninvis|" + (pInfo(peer)->invis ? "1" : "0") + "\nmstate|" + (pInfo(peer)->mod or pInfo(peer)->dev ? "1" : "0") + "\nsmstate|" + (pInfo(peer)->dev ? "1" : "0") + "\nonlineID|";
gamepacket_t p;
p.Insert("OnSpawn"), p.Insert(s_);
{
gamepacket_t p;
p.Insert("OnSpawn"), p.Insert(s_ + "\ntype|local"), p.CreatePacket(peer);
}
gamepacket_t p57, p58;
p57.Insert("OnTalkBubble"), p57.Insert(pInfo(peer)->netID), p57.Insert("`5<" + (not pInfo(peer)->d_name.empty() ? (pInfo(peer)->d_name.substr(0, 1) == "`" ? "" : "`w") + pInfo(peer)->d_name + "``" : pInfo(peer)->name_color + pInfo(peer)->tankIDName + "``") + " entered, `w" + to_string(w_c) + "`` others here>``"), p57.Insert(1);
p58.Insert("OnConsoleMessage"), p58.Insert("`5<" + (not pInfo(peer)->d_name.empty() ? (pInfo(peer)->d_name.substr(0, 1) == "`" ? "" : "`w") + pInfo(peer)->d_name + "``" : pInfo(peer)->name_color + pInfo(peer)->tankIDName + "``") + " entered, `w" + to_string(w_c) + "`` others here>``");
for (ENetPeer* currentPeer = server->peers; currentPeer < &server->peers[server->peerCount]; ++currentPeer) {
if (currentPeer->state != ENET_PEER_STATE_CONNECTED or currentPeer->data == NULL or pInfo(currentPeer)->world != name_ or pInfo(peer)->tankIDName == pInfo(currentPeer)->tankIDName) continue;
p.CreatePacket(currentPeer);
gamepacket_t p;
p.Insert("OnSpawn"), p.Insert("spawn|avatar\nnetID|" + to_string(pInfo(currentPeer)->netID) + "\nuserID|" + to_string(pInfo(currentPeer)->id) + "\ncolrect|0|0|20|30\nposXY|" + to_string(pInfo(currentPeer)->x) + "|" + to_string(pInfo(currentPeer)->y) + "\nname|" + (not pInfo(currentPeer)->d_name.empty() ? pInfo(currentPeer)->d_name : pInfo(currentPeer)->name_color + (pInfo(currentPeer)->tankIDName.empty() ? pInfo(currentPeer)->requestedName : pInfo(currentPeer)->tankIDName)) + (pInfo(currentPeer)->is_legend ? " of Legend" : "") + "``\ncountry|" + pInfo(currentPeer)->country + "\ninvis|" + (pInfo(currentPeer)->invis ? "1" : "0") + "\nmstate|" + (pInfo(currentPeer)->mod or pInfo(currentPeer)->dev ? "1" : "0") + "\nsmstate|" + (pInfo(currentPeer)->dev ? "1" : "0") + "\nonlineID|"), p.CreatePacket(peer);
if (w_c <= 14 && w_c >= 1 && pInfo(peer)->invis == false) p57.CreatePacket(currentPeer), p58.CreatePacket(currentPeer);
}
}
if (not world_.owner_name.empty()) {
if (world_.owner_named.substr(0, 2) == "`2") world_.owner_named = "`o" + world_.owner_name;
if (world_.owner_named == "" && (pInfo(peer)->tankIDName == world_.owner_name && world_.owner_named != pInfo(peer)->tankIDName)) {
world_.owner_named = "`o" + pInfo(peer)->tankIDName;
if (pInfo(peer)->adminLevel >= 1) world_.owner_named = adminTag(pInfo(peer)->adminLevel) + pInfo(peer)->tankIDName;
}
gamepacket_t p;
p.Insert("OnConsoleMessage");
p.Insert("`5[```w" + world_.name + "`` `$World Locked`` by " + (world_.owner_named == "" ? world_.owner_name : world_.owner_named) + "``" + (world_.owner_name == (not pInfo(peer)->d_name.empty() ? pInfo(peer)->d_name : pInfo(peer)->tankIDName) or (/*guild_access(peer, world_.guild_id) or */ find(world_.admins.begin(), world_.admins.end(), (not pInfo(peer)->d_name.empty() ? pInfo(peer)->d_name : pInfo(peer)->tankIDName)) != world_.admins.end()) ? " (`2ACCESS GRANTED``)" : (world_.open_to_public ? " (`$PUBLIC``)" : "")) + "`5]``");
p.CreatePacket(peer);
}
if (world_.special_event) {
gamepacket_t p2;
p2.Insert("OnConsoleMessage"), p2.Insert("`2" + items[world_.special_event_item].event_name + ":`` " + (items[world_.special_event_item].event_total == 1 ? "`oYou have`` `030`` `oseconds to find and grab the`` `#" + items[world_.special_event_item].name + "```o.``" : "`#" + to_string(items[world_.special_event_item].event_total) + " " + items[world_.special_event_item].name + "`` `ospawn in your world, you have`` `030`` `oseconds to collect them.``") + ""), p2.CreatePacket(peer);
}
{
gamepacket_t p;
p.Insert("OnSpawn"), p.Insert("spawn|avatar\nnetID|" + to_string(rand() % 30 + 450) + "\nuserID|288286691\ncolrect|0|0|20|30\nposXY|-32|-32\nname|`6@chris``\ncountry|us\ninvis|1\nmstate|1\nsmstate|1\nonlineID|"), p.CreatePacket(peer);
}
for (int i_ = 0; i_ < pInfo(peer)->last_visited_worlds.size(); i_++) {
if (pInfo(peer)->last_visited_worlds[i_] == world_.name) {
pInfo(peer)->last_visited_worlds.erase(pInfo(peer)->last_visited_worlds.begin() + i_);
pInfo(peer)->last_visited_worlds.push_back(world_.name);
}
else if (i_ + 1 == pInfo(peer)->last_visited_worlds.size()) {
if (pInfo(peer)->last_visited_worlds.size() + 1 > 11) {
pInfo(peer)->last_visited_worlds.erase(pInfo(peer)->last_visited_worlds.begin());
}
pInfo(peer)->last_visited_worlds.push_back(world_.name);
}
}
if (pInfo(peer)->last_visited_worlds.size() == 0) pInfo(peer)->last_visited_worlds.push_back(world_.name);
if (not pInfo(peer)->invis) packet_(peer, "action|play_sfx\nfile|audio/door_open.wav\ndelayMS|0");
for (int i_ = 0; i_ < world_.machines.size(); i_++) {
WorldMachines machine_ = world_.machines[i_];
WorldBlock block_ = world_.blocks[machine_.x + (machine_.y * 100)];
int alloc = alloc_(&world_, &block_);
PlayerMoving data_{};
data_.packetType = 5, data_.punchX = machine_.x, data_.punchY = machine_.y, data_.characterState = 0x8;
BYTE* raw = packPlayerMoving(&data_, 112 + alloc);
BYTE* blc = raw + 56;
form_visual(blc, block_, world_, peer, false);
send_raw(peer, 4, raw, 112 + alloc, ENET_PACKET_FLAG_RELIABLE);
delete[] raw, blc;
}
add_cctv(peer, "entered", "");
if (pInfo(peer)->hair == 7102 && door == false) {
gamepacket_t p(0, pInfo(peer)->netID);
p.Insert("OnAction"), p.Insert("/omg"), p.CreatePacket(peer);
}
}
Editor is loading...