Quantcast
Jump to content
Search In
  • More options...
Find results that contain...
Find results in...
    1. Welcome to GTAForums!

    1. GTANet.com

    2. GTANet 20th Anniversary

    1. GTA Online

      1. The Cayo Perico Heist
      2. Find Lobbies & Players
      3. Guides & Strategies
      4. Vehicles
      5. Content Creator
      6. Help & Support
    2. Red Dead Online

      1. Frontier Pursuits
      2. Find Lobbies & Outlaws
      3. Help & Support
    3. Crews

    1. Red Dead Redemption 2

      1. PC
      2. Help & Support
    2. Red Dead Redemption

    1. Grand Theft Auto Series

      1. St. Andrews Cathedral
    2. GTA VI

    3. GTA V

      1. Guides & Strategies
      2. Help & Support
    4. GTA IV

      1. The Lost and Damned
      2. The Ballad of Gay Tony
      3. Guides & Strategies
      4. Help & Support
    5. GTA San Andreas

      1. Guides & Strategies
      2. Help & Support
    6. GTA Vice City

      1. Guides & Strategies
      2. Help & Support
    7. GTA III

      1. Guides & Strategies
      2. Help & Support
    8. Portable Games

      1. GTA Chinatown Wars
      2. GTA Vice City Stories
      3. GTA Liberty City Stories
    9. Top-Down Games

      1. GTA Advance
      2. GTA 2
      3. GTA
    1. GTA Mods

      1. GTA V
      2. GTA IV
      3. GTA III, VC & SA
      4. Tutorials
    2. Red Dead Mods

      1. Documentation
    3. Mod Showroom

      1. Scripts & Plugins
      2. Maps
      3. Total Conversions
      4. Vehicles
      5. Textures
      6. Characters
      7. Tools
      8. Other
      9. Workshop
    4. Featured Mods

      1. Design Your Own Mission
      2. OpenIV
      3. GTA: Underground
      4. GTA: Liberty City
      5. GTA: State of Liberty
    1. Rockstar Games

    2. Rockstar Collectors

    1. Off-Topic

      1. General Chat
      2. Gaming
      3. Technology
      4. Movies & TV
      5. Music
      6. Sports
      7. Vehicles
    2. Expression

      1. Graphics / Visual Arts
      2. GFX Requests & Tutorials
      3. Writers' Discussion
      4. Debates & Discussion
    1. Announcements

    2. Support

      1. Court House
    3. Suggestions

[WIP|BETA|SA] GTA: Underground - Mod Discussion


  • Replies 24k
  • Created
  • Last Reply

Top Posters In This Topic

  • dkluin

    5625

  • Nagletz

    411

  • ILOVEFOOTBALL95

    365

Top Posters In This Topic

Popular Posts

GTA: Underground is an ambitious total conversion mod for Grand Theft Auto: San Andreas that aims to unite the entire Rockstar 3D Era Universe into a single mod. This means maps from GTA: Vice City, G

Latest and previous versions are available here: https://gtaundergroundmod.com/pages/releases GOOGLE DRIVE: https://drive.google.com/file/d/1jArkVZPOC-pSjM0plTSQN22oEeC03DAq/view?usp=s

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------   You can view

Recommended Posts

On 2/16/2021 at 1:58 AM, GTAGamer98 said:

 

Please DKluin i only Need four snapshots, i can found 21/25 ¡Help me! 🙁

 

Telegram snapshots @GTUND

Are they needed to get 100% in Story mode? 
Collecting the old 50 SF didn't change the progress % in the statistics. Has anyone found the remaining 25. Can describe where they are? Only Liberty or also in VC, Bullworth?

Edited by Mrspy1
Link to post
Share on other sites
5 hours ago, Mrspy1 said:

¿Son necesarios para obtener el 100% en el modo Historia? 
La recolección de los antiguos 50 SF no cambió el porcentaje de progreso en las estadísticas. ¿Alguien ha encontrado los 25 restantes? ¿Puede describir dónde están? ¿Solo Liberty o también en VC, Bullworth?

Are necessary for the 100% yes, only in Liberty City

Link to post
Share on other sites

Can i combine with my GTA Underground 4.1.6 or o i Need install in a clean GTA San Andreas versión with the 4 Snapshot only?

Link to post
Share on other sites

 

@everyone Hello everyone! Snapshot 4.1.7 is now available for download! This is the last update on the 4.1 branch. It fixes numerous crashes and other problems on UG-MP. It is fully standalone and comes with a built-in installer!
 

STANDALONE As stated earlier, this version will be standalone. You do not need Snapshot 4 for this version. You simply need a 100% clean GTA: SA installation. If you already installed Snapshot 4 and/or Snapshot 4.1.6, you can install it on top of that just fine as well.

HAPPY BIRTHDAY! Today is also an important day - as UG is now officially in development for a whopping 6 years, with many releases from 2015 to 2021. We more or less felt it best to release it now, given the occasion.

SPECIAL THANKS Special thanks to everyone who helped test this new update, as well as a shoutout to @Torque for helping us make the installer. Furthermore, also thanks to those who helped with the translations.

(from Gta Underground discord #announcements)

Recommended to join their discord for clear instructions next time. https://discord.com/invite/vDBHh2C

Edited by IssamRocks
Link to post
Share on other sites
3 hours ago, BoubouV12 said:

How to activate the debug menu?

CTRL + M.

Link to post
Share on other sites
silentkiller44

Is ImVehFt incompatible with this mod? Installing it seems to be doing nothing.

No issues otherwise, great mod 👌

  • Like 3
Link to post
Share on other sites
universetwisters

Are the rumors about UGMP being completely dead true?

Link to post
Share on other sites
On 3/4/2021 at 5:11 AM, silentkiller44 said:

Is ImVehFt incompatible with this mod? Installing it seems to be doing nothing.

No issues otherwise, great mod 👌

It should be compatible, but there are some problems with it.

Link to post
Share on other sites
universetwisters

Are the rumors true about ugmp being completely dead? I asked before but I think it got removed or something

Link to post
Share on other sites
universetwisters
1 hour ago, dkluin said:

Do you prefer SA-MP or UG-MP? Let us know!

https://forms.gle/WDAuN9ngSfe5mUbi6

 

Why is a lack of players not a valid reason when it seems like a very valid one

Link to post
Share on other sites
silentkiller44
23 hours ago, dkluin said:

It should be compatible, but there are some problems with it.

It doesn't work at all in my case, but Underground seems to recognize it as being installed tho

Link to post
Share on other sites
On 3/6/2021 at 11:58 PM, universetwisters said:

Are the rumours true about ugmp being completely dead? I asked before but I think it got removed or something

As far as I'm concerned it seems that some servers like the WTLS servers have tried to move to UGMP but when they move their server to the UG launcher, there constantly were people bombarding their server and taking over it. so..... I don't know, I reckon we just need to wait for the server and launcher to be fully developed.

But yeah, for now UGMP is dead and I reckon the UG team should resurrect their original idea of making UG role play, seemed like a great idea that would gain attention.

Link to post
Share on other sites
universetwisters
6 minutes ago, JulioG said:

 

But yeah, for now UGMP is dead and I reckon the UG team should resurrect their original idea of making UG role play, seemed like a great idea that would gain attention.

 

Why not resurrect the actual original idea of making maps to connect the cities though 

Link to post
Share on other sites

I'm extremely doubtful about the roleplay servers gaining attention, with the main complaint being no players. I agree with UT, the mod needs more cities and connections between them.

Link to post
Share on other sites

Thanks for adding in that LAN feature, it's great.

I'd hate to spam, but I posted about a filterscript that no longer worked once I switched to UGMP from SAMP in the Mod Compatibility page. (Probably not what that's for)
The reason I bug about it (beyond wanting it to work) is I thought one of the goals of UGMP is to mantain compadability with things like filterscripts. (I could be wrong about that)So I figured it may be interesting to the developers if that's the case.

Anyway, sorry to bog with requests, thanks again for LAN.

Link to post
Share on other sites
5 hours ago, cwcfix said:

Thanks for adding in that LAN feature, it's great.

I'd hate to spam, but I posted about a filterscript that no longer worked once I switched to UGMP from SAMP in the Mod Compatibility page. (Probably not what that's for)
The reason I bug about it (beyond wanting it to work) is I thought one of the goals of UGMP is to mantain compadability with things like filterscripts. (I could be wrong about that)So I figured it may be interesting to the developers if that's the case.

Anyway, sorry to bog with requests, thanks again for LAN.

Post the filterscript in question.

  • Like 3
Link to post
Share on other sites

DynamicEntrances

Spoiler

#include <a_samp>
#include <djson>
#include <foreach>
#include <ZCMD>
#include <sscanf2>
#include <streamer>

#define DOORS_FILE              "Doors.ini"
#define MAX_DOORS               100
#define COLOR_WHITE             0xFFFFFFFF


forward LoadDoor(id);
forward DeleteDoor(id);
forward PlayerToPoint(Float:radi, playerid, Float:x, Float:y, Float:z);

enum dInfo
{
    Float:dExteriorX,
    Float:dExteriorY,
    Float:dExteriorZ,
    dExteriorInt,
    dExteriorVir,
    Float:dInteriorX,
    Float:dInteriorY,
    Float:dInteriorZ,
    dInteriorInt,
    dInteriorVir,
    dName[128],
    dPp
}
new DoorInfo[MAX_DOORS][dInfo];

new Iterator:Doors<MAX_DOORS>, dCount;

public OnFilterScriptInit()
{
    djson_GameModeInit();
    djAutocommit(true);
    djStyled(true);
    if(!fexist(DOORS_FILE))
    {
        print("CANNOT FIND 'Doors.ini' file. Creating new one.");
        fcreate(DOORS_FILE);
        return 1;
    }
    for(new d=0;d<MAX_DOORS;d++)
    {
        new string[128];
         format(string, sizeof(string),"Door_%d",d);
        if(djIsSet(DOORS_FILE, string)) LoadDoor(d);
    }
    return 1;
}

public OnFilterScriptExit()
{
    djson_GameModeExit();
    return 1;
}

 

public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
{
    new inter = GetPlayerInterior(playerid);
    new vir = GetPlayerVirtualWorld(playerid);
    foreach(Doors, i)
    {
        if((newkeys & KEY_SPRINT) && !(oldkeys & KEY_SPRINT))
        {
            if(PlayerToPoint(2.0, playerid, DoorInfo[i][dExteriorX], DoorInfo[i][dExteriorY], DoorInfo[i][dExteriorZ]) && inter == DoorInfo[i][dExteriorInt] && vir == DoorInfo[i][dExteriorVir])
             {
                SetPlayerPos(playerid, DoorInfo[i][dInteriorX], DoorInfo[i][dInteriorY], DoorInfo[i][dInteriorZ]);
                   SetPlayerInterior(playerid, DoorInfo[i][dInteriorInt]);
                SetPlayerVirtualWorld(playerid, DoorInfo[i][dInteriorVir]);
                  return 1;
            }
        }
        if((newkeys & KEY_SPRINT) && !(oldkeys & KEY_SPRINT))
        {
            if(PlayerToPoint(2.0, playerid, DoorInfo[i][dInteriorX], DoorInfo[i][dInteriorY], DoorInfo[i][dInteriorZ]) && inter == DoorInfo[i][dInteriorInt] && vir == DoorInfo[i][dInteriorVir])
            {
                SetPlayerPos(playerid, DoorInfo[i][dExteriorX], DoorInfo[i][dExteriorY], DoorInfo[i][dExteriorZ]);
                SetPlayerInterior(playerid, DoorInfo[i][dExteriorInt]);
                SetPlayerVirtualWorld(playerid, DoorInfo[i][dExteriorVir]);
                return 1;
            }
        }
    }
    return 1;
}

public OnRconLoginAttempt(ip[], password[], success)
{
    return 1;
}

public OnPlayerUpdate(playerid)
{
    new inter = GetPlayerInterior(playerid);
    new vir = GetPlayerVirtualWorld(playerid);
    foreach(Doors, d)
    if(PlayerToPoint(2.0, playerid, DoorInfo[d][dExteriorX], DoorInfo[d][dExteriorY], DoorInfo[d][dExteriorZ]) && inter == DoorInfo[d][dExteriorInt] && vir == DoorInfo[d][dExteriorVir])
    {
        new string[128];
        format(string, sizeof(string), "%s %d", DoorInfo[d][dName], d);
        GameTextForPlayer(playerid, string, 5000, 3);
    }
    return 1;
}

public OnPlayerStreamIn(playerid, forplayerid)
{
    return 1;
}

public OnPlayerStreamOut(playerid, forplayerid)
{
    return 1;
}

public OnVehicleStreamIn(vehicleid, forplayerid)
{
    return 1;
}

public OnVehicleStreamOut(vehicleid, forplayerid)
{
    return 1;
}

public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
    return 1;
}

public OnPlayerClickPlayer(playerid, clickedplayerid, source)
{
    return 1;
}
COMMAND:aentrance(playerid, params[])
{
    new cmd[128], file[128], string2[128];
    if(IsPlayerAdmin(playerid))
    {
        if(sscanf(params, "s[128]", cmd) != 0)
        {
               return SendClientMessage(playerid, COLOR_WHITE, "USAGE: /aentrance [create | interior | name | delete]");
        }
         if(strcmp("create", cmd, true, 6) == 0)
         {
             new name[128];
             if(!sscanf(params, "s[128]s[128]", cmd, name))
             {
                new Float:x, Float:y, Float:z, interior, vir;
                GetPlayerPos(playerid, x, y, z);
                interior = GetPlayerInterior(playerid);
                vir = GetPlayerVirtualWorld(playerid);
                AddDoor(x, y, z, interior, vir, name);
                SendClientMessage(playerid, COLOR_WHITE, "You've created a new door.");
                return 1;
            }
            else SendClientMessage(playerid, COLOR_WHITE, "USAGE: /aentrance create [name]");
        }
        if(strcmp("interior", cmd, true, 8) == 0)
         {
             new id;
             if(!sscanf(params, "s[128]id", cmd, id))
             {
                 format(file, sizeof(file), "Door_%d", id);
                 if(djIsSet(DOORS_FILE, file))
                {
                    new Float:x, Float:y, Float:z, interior;
                    GetPlayerPos(playerid, x, y, z);
                    interior = GetPlayerInterior(playerid);
                    format(string2, sizeof(string2), "Door_%d/InteriorX", id); djSetFloat(DOORS_FILE, string2, x);
                    format(string2, sizeof(string2), "Door_%d/InteriorY", id); djSetFloat(DOORS_FILE, string2, y);
                    format(string2, sizeof(string2), "Door_%d/InteriorZ", id); djSetFloat(DOORS_FILE, string2, z);
                    format(string2, sizeof(string2), "Door_%d/InteriorInt", id); djSetInt(DOORS_FILE, string2, interior);
                    SendClientMessage(playerid, COLOR_WHITE, "You've changed door's interior.");
                    LoadDoor(id);
                    return 1;
                }
                else SendClientMessage(playerid, COLOR_WHITE, "ERROR: There's no entrance with that ID.");
            }
            else SendClientMessage(playerid, COLOR_WHITE, "USAGE: /aentrance interior [id]");
        }
        if(strcmp("name", cmd, true, 4) == 0)
         {
             new id, name[128];
             if(!sscanf(params, "s[128]ds[128]", cmd, id, name))
             {
                 format(file, sizeof(file), "Door_%d", id);
                 if(djIsSet(DOORS_FILE, file))
                {
                    format(string2, sizeof(string2), "Door_%d/Name", id); djSet(DOORS_FILE, string2, name);
                    LoadDoor(id);
                    SendClientMessage(playerid, COLOR_WHITE, "You've changed entrance's name.");
                    return 1;
                }
                else SendClientMessage(playerid, COLOR_WHITE, "ERROR: There's no entrance with that ID.");
            }
            else SendClientMessage(playerid, COLOR_WHITE, "USAGE: /aentrance name [id] [new name]");
        }
        if(strcmp("delete", cmd, true, 6) == 0)
        {
            new id;
            if(!sscanf(params, "s[128]d", cmd, id))
            {
                   format(file, sizeof(file), "Door_%d", id);
                 if(djIsSet(DOORS_FILE, file))
                {
                    DeleteDoor(id);
                    SendClientMessage(playerid, COLOR_WHITE, "You've deleted an entrance.");
                    return 1;
                }
                else SendClientMessage(playerid, COLOR_WHITE, "ERROR: There's no entrance with that ID.");
            }
            else SendClientMessage(playerid, COLOR_WHITE, "USAGE: /aentrance usun [id]");
        }
    }
    else SendClientMessage(playerid, COLOR_WHITE, "ERROR: You aren't allowed to use this command!");
    return 1;
}
public LoadDoor(id)
{
    new string2[128], name[128];
    DestroyDynamicPickup(DoorInfo[id][dPp]);
    format(string2, sizeof(string2),"Door_%d/ExteriorX", id); DoorInfo[id][dExteriorX] = djFloat(DOORS_FILE, string2);
     format(string2, sizeof(string2),"Door_%d/ExteriorY", id); DoorInfo[id][dExteriorY] = djFloat(DOORS_FILE, string2);
      format(string2, sizeof(string2),"Door_%d/ExteriorZ", id); DoorInfo[id][dExteriorZ] = djFloat(DOORS_FILE, string2);
     format(string2, sizeof(string2),"Door_%d/ExteriorInt", id); DoorInfo[id][dExteriorInt] = djInt(DOORS_FILE, string2);
     format(string2, sizeof(string2),"Door_%d/ExteriorVir", id); DoorInfo[id][dExteriorVir] = djInt(DOORS_FILE, string2);
     format(string2, sizeof(string2),"Door_%d/InteriorX", id); DoorInfo[id][dInteriorX] = djFloat(DOORS_FILE, string2);
     format(string2, sizeof(string2),"Door_%d/InteriorY", id); DoorInfo[id][dInteriorY] = djFloat(DOORS_FILE, string2);
     format(string2, sizeof(string2),"Door_%d/InteriorZ", id); DoorInfo[id][dInteriorZ] = djFloat(DOORS_FILE, string2);
     format(string2, sizeof(string2),"Door_%d/InteriorInt", id); DoorInfo[id][dInteriorInt] = djInt(DOORS_FILE, string2);
     format(string2, sizeof(string2),"Door_%d/InteriorVir", id); DoorInfo[id][dInteriorVir] = djInt(DOORS_FILE, string2);
     format(string2, sizeof(string2),"Door_%d/Name", id); format(name, sizeof(name), "%s", dj(DOORS_FILE, string2)); DoorInfo[id][dName] = name;
     Itter_Add(Doors, Iter_Count(Doors) + 1);
     DoorInfo[id][dPp] = CreateDynamicPickup(1239, 2, DoorInfo[id][dExteriorX], DoorInfo[id][dExteriorY], DoorInfo[id][dExteriorZ], DoorInfo[id][dExteriorVir], DoorInfo[id][dExteriorInt], -1, 50.0);
    return 1;
}
public DeleteDoor(id)
{
    new string2[128], name[128];
    DoorInfo[id][dExteriorX] = 0;
    DoorInfo[id][dExteriorY] = 0;
    DoorInfo[id][dExteriorZ] =  0;
    DoorInfo[id][dExteriorInt] = 0;
    DoorInfo[id][dExteriorVir] = 0;
    DoorInfo[id][dInteriorX] = 0;
    DoorInfo[id][dInteriorY] =  0;
    DoorInfo[id][dInteriorZ] = 0;
    DoorInfo[id][dInteriorInt] = 0;
    DoorInfo[id][dInteriorVir] = 0;
    format(name, sizeof(name), "Brak"); DoorInfo[id][dName] = name;
    format(string2, sizeof(string2), "Door_%d", id); djUnset(DOORS_FILE, string2);
    DestroyDynamicPickup(DoorInfo[id][dPp]);
    Iter_Remove(Doors, id);
    return 1;
}
stock AddDoor(Float:x, Float:y, Float:z, interior, vir, name[])
{
    new string2[128], namestring[128];
    Iter_Add(Doors, Iter_Count(Doors)+1);
    dCount = Iter_Count(Doors);
    format(string2, sizeof(string2), "Door_%d/ExteriorX", dCount); djSetFloat(DOORS_FILE, string2, x);
    format(string2, sizeof(string2), "Door_%d/ExteriorY", dCount); djSetFloat(DOORS_FILE, string2, y);
    format(string2, sizeof(string2), "Door_%d/ExteriorZ", dCount); djSetFloat(DOORS_FILE, string2, z);
    format(string2, sizeof(string2), "Door_%d/ExteriorInt", dCount); djSetInt(DOORS_FILE, string2, interior);
    format(string2, sizeof(string2), "Door_%d/ExteriorVir", dCount); djSetInt(DOORS_FILE, string2, vir);
    format(string2, sizeof(string2), "Door_%d/InteriorX", dCount); djSetFloat(DOORS_FILE, string2, 0);
    format(string2, sizeof(string2), "Door_%d/InteriorY", dCount); djSetFloat(DOORS_FILE, string2, 0);
    format(string2, sizeof(string2), "Door_%d/InteriorZ", dCount); djSetFloat(DOORS_FILE, string2, 0);
    format(string2, sizeof(string2), "Door_%d/InteriorInt", dCount); djSetInt(DOORS_FILE, string2, 0);
    format(string2, sizeof(string2), "Door_%d/InteriorVir", dCount); djSetInt(DOORS_FILE, string2, dCount);
    format(string2, sizeof(string2), "Door_%d/Name", dCount); djSet(DOORS_FILE, string2, name);
    DoorInfo[dCount][dExteriorX] = x;
    DoorInfo[dCount][dExteriorY] = y;
    DoorInfo[dCount][dExteriorZ] =  z;
    DoorInfo[dCount][dExteriorInt] = interior;
    DoorInfo[dCount][dExteriorVir] = vir;
    DoorInfo[dCount][dInteriorX] = 0;
    DoorInfo[dCount][dInteriorY] =  0;
    DoorInfo[dCount][dInteriorZ] = 0;
    DoorInfo[dCount][dInteriorInt] = 0;
    DoorInfo[dCount][dInteriorVir] = dCount;
    format(namestring, sizeof(namestring), "%s", name);
    DoorInfo[dCount][dName] = namestring;
    DoorInfo[dCount][dPp] = CreateDynamicPickup(1239, 2, DoorInfo[dCount][dExteriorX], DoorInfo[dCount][dExteriorY], DoorInfo[dCount][dExteriorZ], DoorInfo[dCount][dExteriorVir], DoorInfo[dCount][dExteriorInt], -1, 50.0);
    return 1;
}
public PlayerToPoint(Float:radi, playerid, Float:x, Float:y, Float:z)
{
    new Float:oldposx, Float:oldposy, Float:oldposz;
    new Float:tempposx, Float:tempposy, Float:tempposz;
    GetPlayerPos(playerid, oldposx, oldposy, oldposz);
    tempposx = (oldposx -x);
    tempposy = (oldposy -y);
    tempposz = (oldposz -z);
    //printf("DEBUG: X:%f Y:%f Z:%f",posx,posy,posz);
    if (((tempposx < radi) && (tempposx > -radi)) && ((tempposy < radi) && (tempposy > -radi)) && ((tempposz < radi) && (tempposz > -radi)))
    {
        return 1;
    }
    return 0;
}
stock fcreate(filename[]) {
    if (fexist(filename)) return false;
    new File:fhnd;
    fhnd=fopen(filename,io_write);
    if (fhnd) {
        fclose(fhnd);
        return true;
    }
    return false;
}

 

Sure thing. I placed it in this spoiler.
Thanks for checking it out.
Also thanks for dedicated years of your life to something people can go on to enjoy timelessly.

This is what I originally wrote with it:
Hello, This probably isn't the place for this, but I used a filterscript called Dynamic Entrances that made all doors work like in the base game. You'd just walk into the yellow arrow and then the door animation played. Then you were inside and could exit the same way with no stopping and typing required. It made the server awesome, because no-one had to stop and type at all. (This would make every server better) But anyway, When I used this script (copied my already working compiled one from my SAMP server) in UGMP it just removed the ability to enter doors at all.

I didn't make this script. I found it a long time ago and now can't seem to find it anywhere online. I guess I'm just hoping one of you guys can do a simple fix to the code or point out what was done wrong since (I assume) you are geniuses with this stuff.

Thanks for reading and for your time.

  • Like 3
Link to post
Share on other sites
Posted (edited)
2 hours ago, cwcfix said:

DynamicEntrances

  Reveal hidden contents

#include <a_samp>
#include <djson>
#include <foreach>
#include <ZCMD>
#include <sscanf2>
#include <streamer>

#define DOORS_FILE              "Doors.ini"
#define MAX_DOORS               100
#define COLOR_WHITE             0xFFFFFFFF


forward LoadDoor(id);
forward DeleteDoor(id);
forward PlayerToPoint(Float:radi, playerid, Float:x, Float:y, Float:z);

enum dInfo
{
    Float:dExteriorX,
    Float:dExteriorY,
    Float:dExteriorZ,
    dExteriorInt,
    dExteriorVir,
    Float:dInteriorX,
    Float:dInteriorY,
    Float:dInteriorZ,
    dInteriorInt,
    dInteriorVir,
    dName[128],
    dPp
}
new DoorInfo[MAX_DOORS][dInfo];

new Iterator:Doors<MAX_DOORS>, dCount;

public OnFilterScriptInit()
{
    djson_GameModeInit();
    djAutocommit(true);
    djStyled(true);
    if(!fexist(DOORS_FILE))
    {
        print("CANNOT FIND 'Doors.ini' file. Creating new one.");
        fcreate(DOORS_FILE);
        return 1;
    }
    for(new d=0;d<MAX_DOORS;d++)
    {
        new string[128];
         format(string, sizeof(string),"Door_%d",d);
        if(djIsSet(DOORS_FILE, string)) LoadDoor(d);
    }
    return 1;
}

public OnFilterScriptExit()
{
    djson_GameModeExit();
    return 1;
}

 

public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
{
    new inter = GetPlayerInterior(playerid);
    new vir = GetPlayerVirtualWorld(playerid);
    foreach(Doors, i)
    {
        if((newkeys & KEY_SPRINT) && !(oldkeys & KEY_SPRINT))
        {
            if(PlayerToPoint(2.0, playerid, DoorInfo[i][dExteriorX], DoorInfo[i][dExteriorY], DoorInfo[i][dExteriorZ]) && inter == DoorInfo[i][dExteriorInt] && vir == DoorInfo[i][dExteriorVir])
             {
                SetPlayerPos(playerid, DoorInfo[i][dInteriorX], DoorInfo[i][dInteriorY], DoorInfo[i][dInteriorZ]);
                   SetPlayerInterior(playerid, DoorInfo[i][dInteriorInt]);
                SetPlayerVirtualWorld(playerid, DoorInfo[i][dInteriorVir]);
                  return 1;
            }
        }
        if((newkeys & KEY_SPRINT) && !(oldkeys & KEY_SPRINT))
        {
            if(PlayerToPoint(2.0, playerid, DoorInfo[i][dInteriorX], DoorInfo[i][dInteriorY], DoorInfo[i][dInteriorZ]) && inter == DoorInfo[i][dInteriorInt] && vir == DoorInfo[i][dInteriorVir])
            {
                SetPlayerPos(playerid, DoorInfo[i][dExteriorX], DoorInfo[i][dExteriorY], DoorInfo[i][dExteriorZ]);
                SetPlayerInterior(playerid, DoorInfo[i][dExteriorInt]);
                SetPlayerVirtualWorld(playerid, DoorInfo[i][dExteriorVir]);
                return 1;
            }
        }
    }
    return 1;
}

public OnRconLoginAttempt(ip[], password[], success)
{
    return 1;
}

public OnPlayerUpdate(playerid)
{
    new inter = GetPlayerInterior(playerid);
    new vir = GetPlayerVirtualWorld(playerid);
    foreach(Doors, d)
    if(PlayerToPoint(2.0, playerid, DoorInfo[d][dExteriorX], DoorInfo[d][dExteriorY], DoorInfo[d][dExteriorZ]) && inter == DoorInfo[d][dExteriorInt] && vir == DoorInfo[d][dExteriorVir])
    {
        new string[128];
        format(string, sizeof(string), "%s %d", DoorInfo[d][dName], d);
        GameTextForPlayer(playerid, string, 5000, 3);
    }
    return 1;
}

public OnPlayerStreamIn(playerid, forplayerid)
{
    return 1;
}

public OnPlayerStreamOut(playerid, forplayerid)
{
    return 1;
}

public OnVehicleStreamIn(vehicleid, forplayerid)
{
    return 1;
}

public OnVehicleStreamOut(vehicleid, forplayerid)
{
    return 1;
}

public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
    return 1;
}

public OnPlayerClickPlayer(playerid, clickedplayerid, source)
{
    return 1;
}
COMMAND:aentrance(playerid, params[])
{
    new cmd[128], file[128], string2[128];
    if(IsPlayerAdmin(playerid))
    {
        if(sscanf(params, "s[128]", cmd) != 0)
        {
               return SendClientMessage(playerid, COLOR_WHITE, "USAGE: /aentrance [create | interior | name | delete]");
        }
         if(strcmp("create", cmd, true, 6) == 0)
         {
             new name[128];
             if(!sscanf(params, "s[128]s[128]", cmd, name))
             {
                new Float:x, Float:y, Float:z, interior, vir;
                GetPlayerPos(playerid, x, y, z);
                interior = GetPlayerInterior(playerid);
                vir = GetPlayerVirtualWorld(playerid);
                AddDoor(x, y, z, interior, vir, name);
                SendClientMessage(playerid, COLOR_WHITE, "You've created a new door.");
                return 1;
            }
            else SendClientMessage(playerid, COLOR_WHITE, "USAGE: /aentrance create [name]");
        }
        if(strcmp("interior", cmd, true, 😎 == 0)
         {
             new id;
             if(!sscanf(params, "s[128]id", cmd, id))
             {
                 format(file, sizeof(file), "Door_%d", id);
                 if(djIsSet(DOORS_FILE, file))
                {
                    new Float:x, Float:y, Float:z, interior;
                    GetPlayerPos(playerid, x, y, z);
                    interior = GetPlayerInterior(playerid);
                    format(string2, sizeof(string2), "Door_%d/InteriorX", id); djSetFloat(DOORS_FILE, string2, x);
                    format(string2, sizeof(string2), "Door_%d/InteriorY", id); djSetFloat(DOORS_FILE, string2, y);
                    format(string2, sizeof(string2), "Door_%d/InteriorZ", id); djSetFloat(DOORS_FILE, string2, z);
                    format(string2, sizeof(string2), "Door_%d/InteriorInt", id); djSetInt(DOORS_FILE, string2, interior);
                    SendClientMessage(playerid, COLOR_WHITE, "You've changed door's interior.");
                    LoadDoor(id);
                    return 1;
                }
                else SendClientMessage(playerid, COLOR_WHITE, "ERROR: There's no entrance with that ID.");
            }
            else SendClientMessage(playerid, COLOR_WHITE, "USAGE: /aentrance interior [id]");
        }
        if(strcmp("name", cmd, true, 4) == 0)
         {
             new id, name[128];
             if(!sscanf(params, "s[128]ds[128]", cmd, id, name))
             {
                 format(file, sizeof(file), "Door_%d", id);
                 if(djIsSet(DOORS_FILE, file))
                {
                    format(string2, sizeof(string2), "Door_%d/Name", id); djSet(DOORS_FILE, string2, name);
                    LoadDoor(id);
                    SendClientMessage(playerid, COLOR_WHITE, "You've changed entrance's name.");
                    return 1;
                }
                else SendClientMessage(playerid, COLOR_WHITE, "ERROR: There's no entrance with that ID.");
            }
            else SendClientMessage(playerid, COLOR_WHITE, "USAGE: /aentrance name [id] [new name]");
        }
        if(strcmp("delete", cmd, true, 6) == 0)
        {
            new id;
            if(!sscanf(params, "s[128]d", cmd, id))
            {
                   format(file, sizeof(file), "Door_%d", id);
                 if(djIsSet(DOORS_FILE, file))
                {
                    DeleteDoor(id);
                    SendClientMessage(playerid, COLOR_WHITE, "You've deleted an entrance.");
                    return 1;
                }
                else SendClientMessage(playerid, COLOR_WHITE, "ERROR: There's no entrance with that ID.");
            }
            else SendClientMessage(playerid, COLOR_WHITE, "USAGE: /aentrance usun [id]");
        }
    }
    else SendClientMessage(playerid, COLOR_WHITE, "ERROR: You aren't allowed to use this command!");
    return 1;
}
public LoadDoor(id)
{
    new string2[128], name[128];
    DestroyDynamicPickup(DoorInfo[id][dPp]);
    format(string2, sizeof(string2),"Door_%d/ExteriorX", id); DoorInfo[id][dExteriorX] = djFloat(DOORS_FILE, string2);
     format(string2, sizeof(string2),"Door_%d/ExteriorY", id); DoorInfo[id][dExteriorY] = djFloat(DOORS_FILE, string2);
      format(string2, sizeof(string2),"Door_%d/ExteriorZ", id); DoorInfo[id][dExteriorZ] = djFloat(DOORS_FILE, string2);
     format(string2, sizeof(string2),"Door_%d/ExteriorInt", id); DoorInfo[id][dExteriorInt] = djInt(DOORS_FILE, string2);
     format(string2, sizeof(string2),"Door_%d/ExteriorVir", id); DoorInfo[id][dExteriorVir] = djInt(DOORS_FILE, string2);
     format(string2, sizeof(string2),"Door_%d/InteriorX", id); DoorInfo[id][dInteriorX] = djFloat(DOORS_FILE, string2);
     format(string2, sizeof(string2),"Door_%d/InteriorY", id); DoorInfo[id][dInteriorY] = djFloat(DOORS_FILE, string2);
     format(string2, sizeof(string2),"Door_%d/InteriorZ", id); DoorInfo[id][dInteriorZ] = djFloat(DOORS_FILE, string2);
     format(string2, sizeof(string2),"Door_%d/InteriorInt", id); DoorInfo[id][dInteriorInt] = djInt(DOORS_FILE, string2);
     format(string2, sizeof(string2),"Door_%d/InteriorVir", id); DoorInfo[id][dInteriorVir] = djInt(DOORS_FILE, string2);
     format(string2, sizeof(string2),"Door_%d/Name", id); format(name, sizeof(name), "%s", dj(DOORS_FILE, string2)); DoorInfo[id][dName] = name;
     Itter_Add(Doors, Iter_Count(Doors) + 1);
     DoorInfo[id][dPp] = CreateDynamicPickup(1239, 2, DoorInfo[id][dExteriorX], DoorInfo[id][dExteriorY], DoorInfo[id][dExteriorZ], DoorInfo[id][dExteriorVir], DoorInfo[id][dExteriorInt], -1, 50.0);
    return 1;
}
public DeleteDoor(id)
{
    new string2[128], name[128];
    DoorInfo[id][dExteriorX] = 0;
    DoorInfo[id][dExteriorY] = 0;
    DoorInfo[id][dExteriorZ] =  0;
    DoorInfo[id][dExteriorInt] = 0;
    DoorInfo[id][dExteriorVir] = 0;
    DoorInfo[id][dInteriorX] = 0;
    DoorInfo[id][dInteriorY] =  0;
    DoorInfo[id][dInteriorZ] = 0;
    DoorInfo[id][dInteriorInt] = 0;
    DoorInfo[id][dInteriorVir] = 0;
    format(name, sizeof(name), "Brak"); DoorInfo[id][dName] = name;
    format(string2, sizeof(string2), "Door_%d", id); djUnset(DOORS_FILE, string2);
    DestroyDynamicPickup(DoorInfo[id][dPp]);
    Iter_Remove(Doors, id);
    return 1;
}
stock AddDoor(Float:x, Float:y, Float:z, interior, vir, name[])
{
    new string2[128], namestring[128];
    Iter_Add(Doors, Iter_Count(Doors)+1);
    dCount = Iter_Count(Doors);
    format(string2, sizeof(string2), "Door_%d/ExteriorX", dCount); djSetFloat(DOORS_FILE, string2, x);
    format(string2, sizeof(string2), "Door_%d/ExteriorY", dCount); djSetFloat(DOORS_FILE, string2, y);
    format(string2, sizeof(string2), "Door_%d/ExteriorZ", dCount); djSetFloat(DOORS_FILE, string2, z);
    format(string2, sizeof(string2), "Door_%d/ExteriorInt", dCount); djSetInt(DOORS_FILE, string2, interior);
    format(string2, sizeof(string2), "Door_%d/ExteriorVir", dCount); djSetInt(DOORS_FILE, string2, vir);
    format(string2, sizeof(string2), "Door_%d/InteriorX", dCount); djSetFloat(DOORS_FILE, string2, 0);
    format(string2, sizeof(string2), "Door_%d/InteriorY", dCount); djSetFloat(DOORS_FILE, string2, 0);
    format(string2, sizeof(string2), "Door_%d/InteriorZ", dCount); djSetFloat(DOORS_FILE, string2, 0);
    format(string2, sizeof(string2), "Door_%d/InteriorInt", dCount); djSetInt(DOORS_FILE, string2, 0);
    format(string2, sizeof(string2), "Door_%d/InteriorVir", dCount); djSetInt(DOORS_FILE, string2, dCount);
    format(string2, sizeof(string2), "Door_%d/Name", dCount); djSet(DOORS_FILE, string2, name);
    DoorInfo[dCount][dExteriorX] = x;
    DoorInfo[dCount][dExteriorY] = y;
    DoorInfo[dCount][dExteriorZ] =  z;
    DoorInfo[dCount][dExteriorInt] = interior;
    DoorInfo[dCount][dExteriorVir] = vir;
    DoorInfo[dCount][dInteriorX] = 0;
    DoorInfo[dCount][dInteriorY] =  0;
    DoorInfo[dCount][dInteriorZ] = 0;
    DoorInfo[dCount][dInteriorInt] = 0;
    DoorInfo[dCount][dInteriorVir] = dCount;
    format(namestring, sizeof(namestring), "%s", name);
    DoorInfo[dCount][dName] = namestring;
    DoorInfo[dCount][dPp] = CreateDynamicPickup(1239, 2, DoorInfo[dCount][dExteriorX], DoorInfo[dCount][dExteriorY], DoorInfo[dCount][dExteriorZ], DoorInfo[dCount][dExteriorVir], DoorInfo[dCount][dExteriorInt], -1, 50.0);
    return 1;
}
public PlayerToPoint(Float:radi, playerid, Float:x, Float:y, Float:z)
{
    new Float:oldposx, Float:oldposy, Float:oldposz;
    new Float:tempposx, Float:tempposy, Float:tempposz;
    GetPlayerPos(playerid, oldposx, oldposy, oldposz);
    tempposx = (oldposx -x);
    tempposy = (oldposy -y);
    tempposz = (oldposz -z);
    //printf("DEBUG: X:%f Y:%f Z:%f",posx,posy,posz);
    if (((tempposx < radi) && (tempposx > -radi)) && ((tempposy < radi) && (tempposy > -radi)) && ((tempposz < radi) && (tempposz > -radi)))
    {
        return 1;
    }
    return 0;
}
stock fcreate(filename[]) {
    if (fexist(filename)) return false;
    new File:fhnd;
    fhnd=fopen(filename,io_write);
    if (fhnd) {
        fclose(fhnd);
        return true;
    }
    return false;
}

 

Sure thing. I placed it in this spoiler.
Thanks for checking it out.
Also thanks for dedicated years of your life to something people can go on to enjoy timelessly.

This is what I originally wrote with it:
Hello, This probably isn't the place for this, but I used a filterscript called Dynamic Entrances that made all doors work like in the base game. You'd just walk into the yellow arrow and then the door animation played. Then you were inside and could exit the same way with no stopping and typing required. It made the server awesome, because no-one had to stop and type at all. (This would make every server better) But anyway, When I used this script (copied my already working compiled one from my SAMP server) in UGMP it just removed the ability to enter doors at all.

I didn't make this script. I found it a long time ago and now can't seem to find it anywhere online. I guess I'm just hoping one of you guys can do a simple fix to the code or point out what was done wrong since (I assume) you are geniuses with this stuff.

Thanks for reading and for your time.

If you can debug it to find out which native breaks the script UG-MP and report that on the bug tracker we'll have it solved in no time.

 

  

On 3/9/2021 at 7:47 AM, Jinx. said:

I'm extremely doubtful about the roleplay servers gaining attention, with the main complaint being no players. I agree with UT, the mod needs more cities and connections between them.

No devs to do the modeling. I'm not going to model everything on my own.

Edited by dkluin
  • Like 3
Link to post
Share on other sites
universetwisters
39 minutes ago, dkluin said:

 

 

  

No devs to do the modeling. I'm not going to model everything on my own.

 

What about the people working on midway?

Link to post
Share on other sites

Hello there fine folk.
The UG team is very busy working to improve and add new and awesome content across the whole board. Today I wanted to show you a small bit of what is to come for 4.2 from the Vice City/Liberty City modeling department! The following assets have been ported from VCS and manually improved by me where needed. I sincerely hope you'll enjoy those sneak peaks!

1. Benny's Restaurant and Party Boat
 

Spoiler

gallery250.jpg

Spoiler

gallery251.jpg



2. Gate neons for Starfish Island
 

Spoiler

gallery254.jpg



3. South Downtown pier
 

Spoiler

gallery257.jpg

Spoiler

gallery258.jpg



4. Neons for the Little Havanna Hotel
 

Spoiler

gallery259.jpg



5. Improved neons for the Washington Beach Underground mall
 

Spoiler

gallery260.jpg




There will be more sneak peaks coming in the future, including some major assets and ports. Stay tuned for more!

Link to post
Share on other sites

As we all know, GTA underground multiplayer is dead as it stands. Although, there is an opportunity for a massive sever, welcome to Los Santos, to move or have severs on ugmp. Although, they have been getting several disruptions, mainly from unwanted people joining their servers, preventing them from testing and moving their servers from samp to UGMP. At the moment, which is understandable, the sever does not have enough features for developers and lacks certain security features, especially privacy. This is the main reason that hardly any severs are on UGMP,  as developers cannot test in peace and recieve enough support to shift their sever over to UGMP. I hope the developers do something about this in the foreseeable future.

Thanks

JulioG signing out

https://ibb.co/FhcbgyX

 

Check out these links for images 

https://ibb.co/TBs7yW8

Edited by JulioG
Link to post
Share on other sites

yo i don't understand why the server, UGlife.eu hasn't been taken down after they have harmed another server, one which is in development, which is the Welcome to los santos servers that is attempting to move from SAMP to UGMP. what is the reason of not blocking or removing this server? I'm sure the lead developer and manager of WTLS has already contacted you and requested for this to be removed, although the request was denied and for what reason? Seriously, the developers of UGMP are missing out on an opportunity for the player count on their launcher to drastically increase. Please respond, I've always wanted to play on a functional, active, full, communal UGMP server, especially under the development of the WTLS team. 

Please help out developers with testing especially this server.

Thanks

JulioG

Side Note: I'm sure that if this news gets spread around, of this request being denied, they'll be heaps of people backing this up to ensure that the developers get supported and don't get disturbed by competitors. the launcher and UGMP should assist every developer and should not be bias. So there should be some negotiation between WTLS and the server that is disturbing them so that they can both run and both not be disturbed.

'

Or that server, UGlife.eu should simply be taken down if they are affecting other servers. 

Link to post
Share on other sites
On 3/10/2021 at 1:42 PM, dkluin said:

  No devs to do the modeling. I'm not going to model everything on my own.

You do have enough devs to make a propper town, Will i have to make another big city just to prove that?

  • Like 5
  • KEKW 1
Link to post
Share on other sites

@The'Truth lovely neons and additions, thanks for adding them, is the hooker inn hotel, airport neons and sprunk sign in little haiti coming?

Edited by ernestin1
  • Like 6
Link to post
Share on other sites

Hey there people. Today I want to show the last batch of VCS neons which have been exported quite some time ago to UG.

1. Shop neon next to the Strip Club

Spoiler

gallery262.jpg?width=500&height=281



2. Revamped VC neon from VCS

Spoiler

gallery263.jpg?width=500&height=281



3. City hall neons

Spoiler

gallery264.jpg?width=500&height=281



4. Downtown Ammu-Nation neon

Spoiler

gallery265.jpg?width=500&height=281



5. Downtown shop neon

Spoiler

gallery266.jpg?width=500&height=281



6. Gym neon/Louise's place neon

Spoiler

gallery267.jpg



7. Umberto's Cafe night lights and neons

Spoiler

gallery268.jpg



8. Mall neons
 

Spoiler

gallery269.jpg


There will be more content to come now that neons are done, content bigger than neons themselves so stay tuned ; )

Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • 5 Users Currently Viewing
    0 members, 0 Anonymous, 5 Guests

×
×
  • Create New...

Important Information

By using GTAForums.com, you agree to our Terms of Use and Privacy Policy.