· 7 years ago · Sep 11, 2018, 09:06 PM
1#include < amxmodx >
2#include < amxmisc >
3#include < engine >
4#include < fakemeta >
5#include < sqlx >
6
7new const PluginName [] = "Speedrun Mod [Start SPR]";
8
9new const DATABASE[] = "addons/amxmodx/data/start_entity.db";
10
11new Handle:g_hTuple, g_szQuery[512];
12new g_MapName[32];
13new g_MapIndex;
14
15new StartEnt
16new const EntName [] = "start_ent";
17new const EntSpr[] = "sprites/grass_01.spr";
18
19public plugin_init()
20{
21 register_plugin(PluginName, "1.0", "Icebeam")
22
23 register_clcmd("setstart", "Command_SetStart", ADMIN_BAN);
24
25 SQL_Init();
26}
27
28public plugin_precache()
29{
30 precache_model(EntSpr);
31}
32
33public Command_SetStart(id, level, cid)
34{
35 if(!cmd_access(id, level, cid, 1 ))
36 return PLUGIN_HANDLED;
37
38 if(!StartEnt){
39 if(get_user_flags(id) & ADMIN_BAN)
40 client_print_color(id, print_team_default, "^1[SR]^3 You can set the start entity sprite using 'setstart' command.");
41 }
42
43 new Float:fOrigin[3];
44 pev(id, pev_origin, fOrigin);
45
46 Create_Start(fOrigin);
47 Save_StartOrigin()
48
49 client_print_color(id, print_team_default, "^1[SR]^3 Start entity sprite set!");
50
51 return PLUGIN_HANDLED;
52}
53
54Save_StartOrigin()
55{
56 if(is_valid_ent(StartEnt))
57 {
58 new Float:fOrigin[3]; pev(StartEnt, pev_origin, fOrigin);
59 new iOrigin[3]; FVecIVec(fOrigin, iOrigin);
60
61 formatex(g_szQuery, charsmax(g_szQuery), "UPDATE `maps` SET startX = '%d', startY = '%d', startZ = '%d' WHERE mid=%d",
62 iOrigin[0], iOrigin[1], iOrigin[2], g_MapIndex);
63
64 SQL_ThreadQuery(g_hTuple, "Query_IngnoredHandle", g_szQuery);
65 }
66}
67
68SQL_Init() {
69 SQL_SetAffinity("sqlite");
70
71 if(!file_exists(DATABASE))
72 {
73 new file = fopen(DATABASE, "w");
74 if(!file)
75 {
76 new szMsg[128]; formatex(szMsg, charsmax(szMsg), "%s file not found and cant be created.", DATABASE);
77 set_fail_state(szMsg);
78 }
79 fclose(file);
80 }
81
82 g_hTuple = SQL_MakeDbTuple("", "", "", DATABASE, 0);
83
84 formatex(g_szQuery, charsmax(g_szQuery),
85 "CREATE TABLE IF NOT EXISTS `maps`( \
86 mid INTEGER PRIMARY KEY,\
87 mapname TEXT NOT NULL UNIQUE, \
88 startX INTEGER NOT NULL DEFAULT 0, \
89 startY INTEGER NOT NULL DEFAULT 0, \
90 startZ INTEGER NOT NULL DEFAULT 0)");
91
92 SQL_ThreadQuery(g_hTuple, "Query_IngnoredHandle", g_szQuery);
93
94 set_task(1.0, "DelayedLoadMapInfo");
95}
96
97public DelayedLoadMapInfo()
98{
99 get_mapname(g_MapName, charsmax(g_MapName));
100 formatex(g_szQuery, charsmax(g_szQuery), "SELECT mid, startX, startY, startZ FROM `maps` WHERE mapname='%s'", g_MapName);
101 SQL_ThreadQuery(g_hTuple, "Query_LoadMapHandle", g_szQuery);
102}
103
104public Query_LoadMapHandle(failstate, Handle:query, error[], errnum, data[], size)
105{
106 if(failstate != TQUERY_SUCCESS)
107 {
108 log_amx("SQL error[LoadMapHandle]: %s", error); return;
109 }
110
111 if(SQL_MoreResults(query))
112 {
113 g_MapIndex = SQL_ReadResult(query, 0);
114
115 CreateStartI(SQL_ReadResult(query, 1), SQL_ReadResult(query, 2), SQL_ReadResult(query, 3));
116 }
117 else
118 {
119 formatex(g_szQuery, charsmax(g_szQuery), "INSERT INTO `maps`(mapname) VALUES ('%s')", g_MapName);
120 SQL_ThreadQuery(g_hTuple, "Query_IngnoredHandle", g_szQuery);
121
122 formatex(g_szQuery, charsmax(g_szQuery), "SELECT mid, startX, startY, startZ FROM `maps` WHERE mapname='%s'", g_MapName);
123 SQL_ThreadQuery(g_hTuple, "Query_LoadMapHandle", g_szQuery);
124 }
125}
126
127public Query_IngnoredHandle(failstate, Handle:query, error[], errnum, data[], size)
128{
129 if(failstate != TQUERY_SUCCESS)
130 {
131 log_amx("SQL error[IngnoredHandle]: %s", error); return;
132 }
133}
134
135CreateStartI(x, y, z)
136{
137 if(!x && !y && !z) return;
138
139 new Float:fOrigin[3];
140 fOrigin[0] = float(x);
141 fOrigin[1] = float(y);
142 fOrigin[2] = float(z);
143
144 Create_Start(fOrigin);
145}
146
147public Create_Start(const Float:fOrigin[3]) {
148
149 if(pev_valid(StartEnt))
150 {
151 remove_entity(StartEnt);
152 }
153
154 StartEnt = 0;
155
156 StartEnt = create_entity("info_target");
157 set_pev(StartEnt, pev_classname, EntName);
158
159 engfunc(EngFunc_SetModel, StartEnt, EntSpr);
160
161 set_pev(StartEnt, pev_origin, fOrigin);
162
163 entity_set_size(StartEnt, Float:{-50.0, -50.0, -25.0}, Float:{50.0, 50.0, 25.0});
164
165 //set_pev(StartEnt, pev_solid, SOLID_TRIGGER);
166 //set_pev(StartEnt, pev_movetype, MOVETYPE_NONE);
167
168 // transparency
169 //set_pev(StartEnt, pev_rendermode, kRenderTransAdd);
170 // set_pev(StartEnt, pev_renderamt, 220.0);
171
172}