Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- Ingame Objecteditor by IPrototypeI
- Thanks to
- - BigETI for the development of the memory access plugin and support.
- - Newborn and ShenzoX for testing.
- */
- #include <a_mysql>
- #include <streamer>
- #include <pcmd>
- #include <sscanf2>
- #include <list>
- forward @Load_Objects();
- forward @Update_Objects();
- forward @ReduceValue();
- forward @ConvertMap();
- forward @DeleteMap(str[]);
- #define Update_Time 60 // 60 => 60 Minuten
- #define Set_Height 0.01
- MEM::struct obj_mem_struct {
- obj_mem_objectid,
- obj_mem_materialindex,
- obj_mem_modelid,
- obj_mem_txdname[20],
- obj_mem_texturename[20],
- obj_mem_materialcolor,
- };
- MEM::struct obj_text_mem_struct {
- _obj_mem_objectid,
- _obj_mem_materialindex,
- _obj_mem_text[120],
- _obj_mem_materialsize,
- _obj_mem_fontface[20],
- _obj_mem_fontsize,
- _obj_mem_bold,
- _obj_mem_fontcolor,
- _obj_mem_backcolor,
- _obj_mem_textalignment,
- };
- MEM::struct obj_edit_cache {
- obj_edit_id,
- obj_edit_pointer,
- obj_edit_index,
- };
- enum tempdata {
- obj_materialindex,
- obj_modelid,
- obj_txdname[20],
- obj_texturename[20],
- obj_materialcolor,
- obj_compressstring[100],
- };
- enum _temp{
- _Index[10],
- _ModelID,
- _TxdName[20],
- _TextureName[20],
- _MaterialColor,
- _Text[128],
- _MaterialSize,
- _FontFace[20],
- _FontBold,
- _FontSize,
- _MaterialBack,
- _TextAlign,
- };
- enum _insert {
- insert_objectid,
- insert_materialindex,
- };
- enum pValues(<<= 1){
- o_Rotate=1,
- o_Move,
- o_WRITE,
- };
- new static LIST_init<streamer_material>,
- LIST_init<streamer_material_text>,
- TempData[_temp],
- sqlHandler,
- PlayerEditObject[MAX_PLAYERS],
- pValues:PlayerValues[MAX_PLAYERS char],
- LIST_init<object_cache>,
- TextSlotStr[200],
- ALLQUERY[800],
- save,
- File:map;
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- native __SetDynamicObjectMaterial(objectid, materialindex, modelid, txdname[], texturename[], materialcolor = 0) = SetDynamicObjectMaterial;
- stock static _SetDynamicObjectMaterial(objectid, materialindex, modelid, txdname[], texturename[], materialcolor = 0, bool:set=false) {
- if(set)return __SetDynamicObjectMaterial(objectid, materialindex, modelid, txdname, texturename, materialcolor);
- new obj_insert[_insert];
- obj_insert[insert_objectid] = objectid;
- obj_insert[insert_materialindex] = materialindex;
- new ListIt:data = LIST_find_arr(streamer_material, obj_insert),object_buffer[obj_mem_struct];
- if(data)LIST::erase(streamer_material,data);
- object_buffer[obj_mem_objectid] = objectid;
- object_buffer[obj_mem_materialindex] = materialindex;
- object_buffer[obj_mem_modelid] = modelid;
- strcat(object_buffer[obj_mem_txdname],txdname,20);
- strcat(object_buffer[obj_mem_texturename],texturename,20);
- object_buffer[obj_mem_materialcolor] = materialcolor;
- LIST::push_back_arr(streamer_material, object_buffer);
- return __SetDynamicObjectMaterial(objectid, materialindex, modelid, txdname, texturename, materialcolor);
- }
- #if defined _ALS_SetDynamicObjectMaterial
- #undef SetDynamicObjectMaterial
- #else
- #define _ALS_SetDynamicObjectMaterial
- #endif
- #define SetDynamicObjectMaterial _SetDynamicObjectMaterial
- stock static GetDynamicObjectMaterialEx(objectid, materialindex, &modelid, txdname[], texturename[], &materialcolor){
- new object_buffer[obj_mem_struct];
- LIST_foreach_rev<my_iterator>(streamer_material)
- {
- MEM::get_arr(LIST_IT_data_ptr(my_iterator), _, object_buffer);
- if(objectid == object_buffer[obj_mem_objectid] && materialindex == object_buffer[obj_mem_materialindex]){
- modelid = object_buffer[obj_mem_modelid];
- strcat(txdname,object_buffer[obj_mem_txdname],20);
- strcat(texturename,object_buffer[obj_mem_texturename],20);
- materialcolor = object_buffer[obj_mem_materialcolor];
- return 1;
- }
- }
- return 1;
- }
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- stock static GetDynamicObjectMaterialTextEx(objectid, &materialindex, text[], &materialsize, fontface[], &fontsize, &bold, &fontcolor, &backcolor, &textalignment){
- new object_buffer[obj_text_mem_struct];
- LIST_foreach_rev<my_iterator>(streamer_material_text)
- {
- MEM::get_arr(LIST_IT_data_ptr(my_iterator), _, object_buffer);
- if(objectid == object_buffer[_obj_mem_objectid]){
- strcat(text,object_buffer[_obj_mem_text],120);
- materialsize = object_buffer[_obj_mem_materialsize]
- strcat(fontface,object_buffer[_obj_mem_fontface],20);
- fontsize = object_buffer[_obj_mem_fontsize];
- bold = object_buffer[_obj_mem_bold];
- fontcolor = object_buffer[_obj_mem_fontcolor];
- backcolor = object_buffer[_obj_mem_backcolor];
- textalignment = object_buffer[_obj_mem_textalignment];
- materialindex = object_buffer[_obj_mem_materialindex];
- return 1;
- }
- }
- return 0;
- }
- native __SetDynamicObjectMaterialText(objectid, materialindex, const text[], materialsize = OBJECT_MATERIAL_SIZE_256x128, const fontface[] = "Arial", fontsize = 24, bold = 1, fontcolor = 0xFFFFFFFF, backcolor = 0, textalignment = 0) = SetDynamicObjectMaterialText;
- stock static _SetDynamicObjectMaterialText(objectid, materialindex, const text[], materialsize = OBJECT_MATERIAL_SIZE_256x128, const fontface[] = "Arial", fontsize = 24, bold = 1, fontcolor = 0xFFFFFFFF, backcolor = 0, textalignment = 0) {
- new object_buffer[obj_text_mem_struct];
- LIST_foreach_rev<my_iterator>(streamer_material_text)
- {
- MEM::get_arr(LIST_IT_data_ptr(my_iterator), _, object_buffer);
- if(objectid == object_buffer[_obj_mem_objectid]){
- __SetDynamicObjectMaterialText(objectid, object_buffer[_obj_mem_materialindex], "", materialsize, fontface, fontsize, bold, fontcolor, backcolor, textalignment);
- LIST::erase(streamer_material_text,my_iterator);
- break;
- }
- }
- object_buffer[_obj_mem_objectid] = objectid;
- object_buffer[_obj_mem_materialindex] = materialindex;
- strdel(object_buffer[_obj_mem_text],0,120);
- strcat(object_buffer[_obj_mem_text],text,120);
- object_buffer[_obj_mem_materialsize] = materialsize;
- strdel(object_buffer[_obj_mem_fontface],0,120);
- strcat(object_buffer[_obj_mem_fontface],fontface,120);
- object_buffer[_obj_mem_fontsize] = fontsize;
- object_buffer[_obj_mem_bold] = bold;
- object_buffer[_obj_mem_fontcolor] = fontcolor;
- object_buffer[_obj_mem_backcolor] = backcolor;
- object_buffer[_obj_mem_textalignment] = textalignment;
- LIST::push_back_arr(streamer_material_text, object_buffer);
- return __SetDynamicObjectMaterialText(objectid, materialindex, text, materialsize, fontface, fontsize, bold, fontcolor, backcolor, textalignment);
- }
- #if defined _A_SetDynamicObjectMaterialText
- #undef SetDynamicObjectMaterialText
- #else
- #define _A_SetDynamicObjectMaterialText
- #endif
- #define SetDynamicObjectMaterialText _SetDynamicObjectMaterialText
- native __SelectObject(playerid) = SelectObject;
- stock static _SelectObject(playerid) {
- PlayerEditObject[playerid] = 0;
- return __SelectObject(playerid);
- }
- #if defined _A_SelectObject
- #undef SelectObject
- #else
- #define _A_SelectObject
- #endif
- #define SelectObject _SelectObject
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- #if !defined _ALS_
- forward public _ALS_();
- _ALS_()<_ALS_:unhooked>{}
- _ALS_()<_ALS_:hooked>{}
- _ALS_()<>{}
- #endif
- #if !defined AL_
- forward public AL_();
- AL_()<AL_:unhooked>{}
- AL_()<AL_:hooked>{}
- AL_()<>{}
- #endif
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- public OnGameModeInit()
- {
- state _ALS_:hooked;
- Streamer_VisibleItems(STREAMER_TYPE_OBJECT,1000);
- mysql_log(LOG_DEBUG,LOG_TYPE_TEXT);
- sqlHandler = mysql_connect("localhost", "root", "amazing", "");
- mysql_tquery(sqlHandler,"CREATE TABLE IF NOT EXISTS `amazing_objects`(`Did` INT AUTO_INCREMENT,`id` INT,`modelid` INT,`x` FLOAT NOT NULL,`y` FLOAT NOT NULL,`z` FLOAT NOT NULL,`rx` FLOAT NOT NULL,`ry` FLOAT NOT NULL,`rz` FLOAT NOT NULL,`material1` VARCHAR(128),`material2` VARCHAR(128),`material3` VARCHAR(128),`materialtext` VARCHAR(256), `kommentar` VARCHAR(64),PRIMARY KEY(`Did`))ENGINE = InnoDB;","","");
- mysql_tquery(sqlHandler,"SELECT * FROM `amazing_objects`;","@Load_Objects","");
- SetTimer("@Update_Objects",Update_Time*60*1000,true);
- return H_OnGameModeInit();
- }
- forward H_OnGameModeInit();
- #if defined _ALS_OnGameModeInit
- #undef OnGameModeInit
- #else
- #define _ALS_OnGameModeInit
- #endif
- public H_OnGameModeInit() <_ALS_:unhooked> return 1;
- public H_OnGameModeInit() <> return 1;
- #define OnGameModeInit(%0) H_OnGameModeInit(%0)<_ALS_:hooked>
- // 0|5134|wasteland_las2|genroof01_128|0
- public OnPlayerEditDynamicObject(playerid, objectid, response, Float:x, Float:y, Float:z, Float:rx, Float:ry, Float:rz){
- state _ALS_:hooked;
- switch(response){
- case EDIT_RESPONSE_CANCEL:{
- new Float:Pos[3];
- GetDynamicObjectPos(objectid, Pos[0], Pos[1], Pos[2]);
- SetDynamicObjectPos(objectid, Pos[0], Pos[1], Pos[2]);
- GetDynamicObjectRot(objectid, Pos[0], Pos[1], Pos[2]);
- SetDynamicObjectRot(objectid, Pos[0], Pos[1], Pos[2]);
- return 1;
- }
- case EDIT_RESPONSE_FINAL:{
- new ObjectEdit[obj_edit_cache];
- switch(PlayerValues[playerid]){
- case o_Rotate:{
- PlayerValues[playerid] &= ~o_Rotate;
- Streamer_SetFloatData(STREAMER_TYPE_OBJECT, objectid, E_STREAMER_X, x);
- Streamer_SetFloatData(STREAMER_TYPE_OBJECT, objectid, E_STREAMER_Y, y);
- Streamer_SetFloatData(STREAMER_TYPE_OBJECT, objectid, E_STREAMER_Z, z);
- } case o_Move:{
- Streamer_SetFloatData(STREAMER_TYPE_OBJECT, objectid, E_STREAMER_X, x);
- Streamer_SetFloatData(STREAMER_TYPE_OBJECT, objectid, E_STREAMER_Y, y);
- Streamer_SetFloatData(STREAMER_TYPE_OBJECT, objectid, E_STREAMER_Z, z+Set_Height);
- Streamer_SetFloatData(STREAMER_TYPE_OBJECT, objectid, E_STREAMER_R_X, rx);
- Streamer_SetFloatData(STREAMER_TYPE_OBJECT, objectid, E_STREAMER_R_Y, ry);
- Streamer_SetFloatData(STREAMER_TYPE_OBJECT, objectid, E_STREAMER_R_Z, rz);
- PlayerValues[playerid] &= ~o_Move;
- } default:{
- Streamer_SetFloatData(STREAMER_TYPE_OBJECT, objectid, E_STREAMER_X, x);
- Streamer_SetFloatData(STREAMER_TYPE_OBJECT, objectid, E_STREAMER_Y, y);
- Streamer_SetFloatData(STREAMER_TYPE_OBJECT, objectid, E_STREAMER_Z, z);
- Streamer_SetFloatData(STREAMER_TYPE_OBJECT, objectid, E_STREAMER_R_X, rx);
- Streamer_SetFloatData(STREAMER_TYPE_OBJECT, objectid, E_STREAMER_R_Y, ry);
- Streamer_SetFloatData(STREAMER_TYPE_OBJECT, objectid, E_STREAMER_R_Z, rz);
- }
- }
- new ListIt:data = LIST_find(object_cache, objectid);
- if(!data){
- ObjectEdit[obj_edit_id] = objectid;
- LIST::push_back_arr(object_cache, ObjectEdit);
- }
- return SelectObject(playerid);
- }
- }
- return H_OnPlayerEditDynamicObject(playerid, objectid, response, x, y, z, rx, ry, rz);
- }
- forward H_OnPlayerEditDynamicObject(playerid, objectid, response, Float:x, Float:y, Float:z, Float:rx, Float:ry, Float:rz);
- #if defined _ALS_OnPlayerEditDynamicObject
- #undef OnPlayerEditDynamicObject
- #else
- #define _ALS_OnPlayerEditDynamicObject
- #endif
- public H_OnPlayerEditDynamicObject(playerid, objectid, response, Float:x, Float:y, Float:z, Float:rx, Float:ry, Float:rz) <_ALS_:unhooked> return 1;
- public H_OnPlayerEditDynamicObject(playerid, objectid, response, Float:x, Float:y, Float:z, Float:rx, Float:ry, Float:rz) <> return 1;
- #define OnPlayerEditDynamicObject(%0,%1,%2,%3,%4,%5,%6,%7,%8) H_OnPlayerEditDynamicObject(%0,%1,%2,%3,%4,%5,%6,%7,%8)<_ALS_:hooked>
- public OnPlayerSelectDynamicObject(playerid, objectid, modelid, Float:x, Float:y, Float:z) {
- state AL_:hooked;
- PlayerEditObject[playerid] = objectid;
- EditDynamicObject(playerid, objectid);
- return H_OnPlayerSelectDynamicObject(playerid, objectid, modelid, x, y, z);
- }
- forward H_OnPlayerSelectDynamicObject(playerid, objectid, modelid, Float:x, Float:y, Float:z);
- #if defined AL_OnPlayerSelectDynamicObject
- #undef OnPlayerSelectDynamicObject
- #else
- #define AL_OnPlayerSelectDynamicObject
- #endif
- public H_OnPlayerSelectDynamicObject(playerid, objectid, modelid, Float:x, Float:y, Float:z) <AL_:unhooked> return 1;
- public H_OnPlayerSelectDynamicObject(playerid, objectid, modelid, Float:x, Float:y, Float:z) <> return 1;
- #define OnPlayerSelectDynamicObject(%0,%1,%2,%3,%4,%5) H_OnPlayerSelectDynamicObject(%0,%1,%2,%3,%4,%5)<AL_:hooked>
- public OnGameModeExit()
- {
- state _A_:hooked;
- LIST::clear(object_cache);
- LIST::clear(streamer_material);
- LIST::clear(streamer_material_text);
- return H_OnGameModeExit();
- }
- forward H_OnGameModeExit();
- #if defined _A_OnGameModeExit
- #undef OnGameModeExit
- #else
- #define _A_OnGameModeExit
- #endif
- public H_OnGameModeExit() <_A_:unhooked> return 1;
- public H_OnGameModeExit() <> return 1;
- #define OnGameModeExit(%0) H_OnGameModeExit(%0)<_A_:hooked>
- public OnQueryError(errorid, error[], callback[], query[], connectionHandle) {
- printf("Errorid %d",errorid);
- print(error);
- print(callback);
- print(query);
- return 1;
- }
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- @Load_Objects(){
- new _row[3],i,query[256];
- cache_get_data(_row[0],_row[1]);
- for(; i != _row[0]; ++i){
- _row[2] = cache_get_field_content_int(i,"id",sqlHandler);
- _row[1] = CreateDynamicObject(cache_get_field_content_int(i,"modelid",sqlHandler),cache_get_field_content_float(i,"x",sqlHandler),cache_get_field_content_float(i,"y",sqlHandler),cache_get_field_content_float(i,"z",sqlHandler),cache_get_field_content_float(i,"rx",sqlHandler),cache_get_field_content_float(i,"ry",sqlHandler),cache_get_field_content_float(i,"rz",sqlHandler));
- if(_row[2] != _row[1]){
- mysql_format(sqlHandler,query,256,"UPDATE `amazing_objects` SET `id` = %d WHERE `Did` = %d",_row[1],cache_get_field_content_int(i,"Did",sqlHandler));
- mysql_tquery(sqlHandler,query,"","");
- }
- cache_get_field_content(i,"material1",query,sqlHandler,256);
- if(query[0] != '|' && query[0] != EOS){
- sscanf(query,"p<|>s[10]ds[20]s[20]d",TempData[_Index],TempData[_ModelID],TempData[_TxdName],TempData[_TextureName],TempData[_MaterialColor]);
- SetObjectIndex(_row[1],TempData[_Index]);
- }
- cache_get_field_content(i,"material2",query,sqlHandler,256);
- if(query[0] != '|' && query[0] != EOS){
- sscanf(query,"p<|>s[10]ds[20]s[20]d",TempData[_Index],TempData[_ModelID],TempData[_TxdName],TempData[_TextureName],TempData[_MaterialColor]);
- SetObjectIndex(_row[1],TempData[_Index]);
- }
- cache_get_field_content(i,"material3",query,sqlHandler,256);
- if(query[0] != '|' && query[0] != EOS){
- sscanf(query,"p<|>s[10]ds[20]s[20]d",TempData[_Index],TempData[_ModelID],TempData[_TxdName],TempData[_TextureName],TempData[_MaterialColor]);
- SetObjectIndex(_row[1],TempData[_Index]);
- }
- cache_get_field_content(i,"materialtext",query,sqlHandler,256);
- if(query[0] != '|' && query[0] != EOS){
- sscanf(query,"p<|>s[10]s[128]ds[20]ddddd",TempData[_Index],TempData[_Text],TempData[_MaterialSize],TempData[_FontFace],TempData[_FontSize],TempData[_FontBold],TempData[_MaterialColor],TempData[_MaterialBack],TempData[_TextAlign]);
- SetDynamicObjectMaterialText(_row[1], strval(TempData[_Index]), TempData[_Text],TempData[_MaterialSize],TempData[_FontFace],TempData[_FontSize],TempData[_FontBold],TempData[_MaterialColor],TempData[_MaterialBack],TempData[_TextAlign]);
- }
- }
- return 1;
- }
- @Update_Objects(){
- new Pointer:data_ptr,obj_id;
- LIST_foreach<i>(object_cache)
- {
- ++save;
- data_ptr = LIST_IT_data_ptr(i);
- obj_id = MEM_EX::get_val(data_ptr->0);
- CompressMaterialText(obj_id,TextSlotStr,200);
- CompressData(obj_id,TextSlotStr);
- strdel(TextSlotStr,0,200);
- }
- return 1;
- }
- @DeleteMap(str[]){
- new _row[2],i,query[128];
- cache_get_data(_row[0],_row[1]);
- for(; i != _row[0]; ++i){
- new obj = cache_get_field_content_int(i,"id",sqlHandler);
- DestroyDynamicObject(obj);
- for(new x,y=LIST_count_found(streamer_material, obj); x != y; ++x) LIST::erase(streamer_material,LIST_find(streamer_material, obj));
- for(new x,y=LIST_count_found(streamer_material_text, obj); x != y; ++x)LIST::erase(streamer_material_text,LIST_find(streamer_material_text, obj));
- LIST::erase(object_cache,LIST_find(object_cache, obj));
- }
- print(str);
- mysql_format(sqlHandler,query,128,"DELETE FROM `amazing_objects` WHERE `kommentar` = '%e';",str);
- mysql_tquery(sqlHandler,query,"","");
- return 1;
- }
- @ConvertMap(){
- new _row[3],i,query[256],writeString[400];
- cache_get_data(_row[0],_row[1]);
- for(; i != _row[0]; ++i){
- format(writeString,400,"CreateDynamicObject(%d, %f, %f, %f, %f, %f, %f);\r\n",cache_get_field_content_int(i,"modelid",sqlHandler),cache_get_field_content_float(i,"x",sqlHandler),cache_get_field_content_float(i,"y",sqlHandler),cache_get_field_content_float(i,"z",sqlHandler),cache_get_field_content_float(i,"rx",sqlHandler),cache_get_field_content_float(i,"ry",sqlHandler),cache_get_field_content_float(i,"rz",sqlHandler));
- cache_get_field_content(i,"material1",query,sqlHandler,256);
- if(query[0] != '|' && query[0] != EOS){
- if(!(PlayerValues[0] & o_WRITE)){
- PlayerValues[0] |= o_WRITE;
- strins(writeString,"obj = ",0);
- fwrite(map,writeString);
- }
- sscanf(query,"p<|>s[10]ds[20]s[20]d",TempData[_Index],TempData[_ModelID],TempData[_TxdName],TempData[_TextureName],TempData[_MaterialColor]);
- SetObjectIndexMapConvert(writeString,TempData[_Index]);
- }
- cache_get_field_content(i,"material2",query,sqlHandler,256);
- if(query[0] != '|' && query[0] != EOS){
- if(!(PlayerValues[0] & o_WRITE)){
- PlayerValues[0] |= o_WRITE;
- strins(writeString,"obj = ",0);
- fwrite(map,writeString);
- }
- sscanf(query,"p<|>s[10]ds[20]s[20]d",TempData[_Index],TempData[_ModelID],TempData[_TxdName],TempData[_TextureName],TempData[_MaterialColor]);
- SetObjectIndexMapConvert(writeString,TempData[_Index]);
- }
- cache_get_field_content(i,"material3",query,sqlHandler,256);
- if(query[0] != '|' && query[0] != EOS){
- if(!(PlayerValues[0] & o_WRITE)){
- PlayerValues[0] |= o_WRITE;
- strins(writeString,"obj = ",0);
- fwrite(map,writeString);
- }
- sscanf(query,"p<|>s[10]ds[20]s[20]d",TempData[_Index],TempData[_ModelID],TempData[_TxdName],TempData[_TextureName],TempData[_MaterialColor]);
- SetObjectIndexMapConvert(writeString,TempData[_Index]);
- }
- cache_get_field_content(i,"materialtext",query,sqlHandler,256);
- if(query[0] != '|' && query[0] != EOS){
- if(!(PlayerValues[0] & o_WRITE)){
- PlayerValues[0] |= o_WRITE;
- strins(writeString,"obj = ",0);
- fwrite(map,writeString);
- }
- sscanf(query,"p<|>s[10]s[128]ds[20]ddddd",TempData[_Index],TempData[_Text],TempData[_MaterialSize],TempData[_FontFace],TempData[_FontSize],TempData[_FontBold],TempData[_MaterialColor],TempData[_MaterialBack],TempData[_TextAlign]);
- format(writeString,400,"SetDynamicObjectMaterialText(obj, %d, \"%s\", %d, \"%s\", %d, %d, %d, %d, %d);\r\n",strval(TempData[_Index]), TempData[_Text],TempData[_MaterialSize],TempData[_FontFace],TempData[_FontSize],TempData[_FontBold],TempData[_MaterialColor],TempData[_MaterialBack],TempData[_TextAlign]);
- fwrite(map,writeString);
- }
- if(!(PlayerValues[0] & o_WRITE))fwrite(map,writeString);
- PlayerValues[0] &= ~o_WRITE;
- }
- fclose(map);
- }
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- stock static CompressMaterialText(objectid, str[], size = sizeof(str)){
- new object_buffer[obj_text_mem_struct];
- LIST_foreach_rev<my_iterator>(streamer_material_text)
- {
- MEM::get_arr(LIST_IT_data_ptr(my_iterator), _, object_buffer);
- if(objectid == object_buffer[_obj_mem_objectid]){
- format(str,size,"%d|%s|%d|%s|%d|%d|%d|%d|%d",object_buffer[_obj_mem_materialindex],object_buffer[_obj_mem_text],object_buffer[_obj_mem_materialsize],object_buffer[_obj_mem_fontface],object_buffer[_obj_mem_fontsize],object_buffer[_obj_mem_bold],object_buffer[_obj_mem_fontcolor],object_buffer[_obj_mem_backcolor],object_buffer[_obj_mem_textalignment]);
- return 1;
- }
- }
- return 0;
- }
- stock static SetObjectIndex(id,idxstr[]){
- new i,j=strlen(idxstr);
- for(; i != j; ++i){
- switch(idxstr[i]){
- case EOS:break;
- case '+':continue;
- default:SetDynamicObjectMaterial(id, strval(idxstr[i]), TempData[_ModelID], TempData[_TxdName], TempData[_TextureName], TempData[_MaterialColor]);
- }
- }
- return 1;
- }
- stock static SetObjectIndexMapConvert(str[],idxstr[]){
- new i,j=strlen(idxstr);
- for(; i != j; ++i){
- switch(idxstr[i]){
- case EOS:break;
- case '+':continue;
- default:{
- format(str,400,"SetDynamicObjectMaterial(obj, %d, %d, \"%s\", \"%s\", %d);\r\n",strval(idxstr[i]), TempData[_ModelID], TempData[_TxdName], TempData[_TextureName], TempData[_MaterialColor]);
- fwrite(map,str);
- }
- }
- }
- return 1;
- }
- stock static CompressData(objectid, obj_TextSlotStr[]){
- new object_buffer[obj_mem_struct],object_buffer_temp[3][tempdata];
- LIST_foreach_rev<my_iterator>(streamer_material)
- {
- MEM::get_arr(LIST_IT_data_ptr(my_iterator), _, object_buffer);
- if(objectid == object_buffer[obj_mem_objectid]){
- if((!strcmp(object_buffer[obj_mem_texturename],object_buffer_temp[0][obj_texturename],false) && !strcmp(object_buffer[obj_mem_txdname],object_buffer_temp[0][obj_txdname],false))|| strlen(object_buffer_temp[0][obj_txdname][0]) == 0){
- if(strlen(object_buffer_temp[0][obj_compressstring]) == 0){
- object_buffer_temp[0][obj_modelid] = object_buffer[obj_mem_modelid];
- strdel(object_buffer_temp[0][obj_txdname],0,20);
- strcat(object_buffer_temp[0][obj_txdname],object_buffer[obj_mem_txdname],20);
- strdel(object_buffer_temp[0][obj_texturename],0,20);
- strcat(object_buffer_temp[0][obj_texturename],object_buffer[obj_mem_texturename],20);
- object_buffer_temp[0][obj_materialcolor] = object_buffer[obj_mem_materialcolor];
- format(object_buffer_temp[0][obj_compressstring],2,"%d",object_buffer[obj_mem_materialindex]);
- continue;
- }
- format(object_buffer_temp[0][obj_compressstring],100,"%s+%d",object_buffer_temp[0][obj_compressstring],object_buffer[obj_mem_materialindex]);
- }else if((!strcmp(object_buffer[obj_mem_texturename],object_buffer_temp[1][obj_texturename],false) && !strcmp(object_buffer[obj_mem_txdname],object_buffer_temp[1][obj_txdname],false))|| strlen(object_buffer_temp[1][obj_txdname]) == 0){
- if(strlen(object_buffer_temp[1][obj_compressstring]) == 0){
- object_buffer_temp[1][obj_modelid] = object_buffer[obj_mem_modelid];
- strdel(object_buffer_temp[1][obj_txdname],0,20);
- strcat(object_buffer_temp[1][obj_txdname],object_buffer[obj_mem_txdname],20);
- strdel(object_buffer_temp[1][obj_texturename],0,20);
- strcat(object_buffer_temp[1][obj_texturename],object_buffer[obj_mem_texturename],20);
- object_buffer_temp[1][obj_materialcolor] = object_buffer[obj_mem_materialcolor];
- format(object_buffer_temp[1][obj_compressstring],2,"%d",object_buffer[obj_mem_materialindex]);
- continue;
- }
- format(object_buffer_temp[1][obj_compressstring],100,"%s+%d",object_buffer_temp[1][obj_compressstring],object_buffer[obj_mem_materialindex]);
- }else if((!strcmp(object_buffer[obj_mem_texturename],object_buffer_temp[2][obj_texturename],false) && !strcmp(object_buffer[obj_mem_txdname],object_buffer_temp[2][obj_txdname],false))|| strlen(object_buffer_temp[2][obj_txdname]) == 0){
- if(strlen(object_buffer_temp[2][obj_compressstring]) == 0){
- object_buffer_temp[2][obj_modelid] = object_buffer[obj_mem_modelid];
- strdel(object_buffer_temp[2][obj_txdname],0,20);
- strcat(object_buffer_temp[2][obj_txdname],object_buffer[obj_mem_txdname],20);
- strdel(object_buffer_temp[2][obj_texturename],0,20);
- strcat(object_buffer_temp[2][obj_texturename],object_buffer[obj_mem_texturename],20);
- object_buffer_temp[2][obj_materialcolor] = object_buffer[obj_mem_materialcolor];
- format(object_buffer_temp[2][obj_compressstring],2,"%d",object_buffer[obj_mem_materialindex]);
- continue;
- }
- format(object_buffer_temp[2][obj_compressstring],100,"%s+%d",object_buffer_temp[2][obj_compressstring],object_buffer[obj_mem_materialindex]);
- }
- }
- }
- new Float:Pos[6];
- Streamer_GetFloatData(STREAMER_TYPE_OBJECT, objectid, E_STREAMER_X, Pos[0]);
- Streamer_GetFloatData(STREAMER_TYPE_OBJECT, objectid, E_STREAMER_Y, Pos[1]);
- Streamer_GetFloatData(STREAMER_TYPE_OBJECT, objectid, E_STREAMER_Z, Pos[2]);
- Streamer_GetFloatData(STREAMER_TYPE_OBJECT, objectid, E_STREAMER_R_X, Pos[3]);
- Streamer_GetFloatData(STREAMER_TYPE_OBJECT, objectid, E_STREAMER_R_Y, Pos[4]);
- Streamer_GetFloatData(STREAMER_TYPE_OBJECT, objectid, E_STREAMER_R_Z, Pos[5]);
- mysql_format(sqlHandler,ALLQUERY,800,"UPDATE `amazing_objects` SET `x` = %f, `y` = %f, `z` = %f, `rx` = %f, `ry` = %f, `rz` = %f,`material1` = '%s|%d|%s|%s|%d', `material2` = '%s|%d|%s|%s|%d', `material3` = '%s|%d|%s|%s|%d', `materialtext` = '%s' WHERE `id` = %d;",
- Pos[0],
- Pos[1],
- Pos[2],
- Pos[3],
- Pos[4],
- Pos[5],
- object_buffer_temp[0][obj_compressstring],
- object_buffer_temp[0][obj_modelid],
- object_buffer_temp[0][obj_txdname],
- object_buffer_temp[0][obj_texturename],
- object_buffer_temp[0][obj_materialcolor],
- object_buffer_temp[1][obj_compressstring],
- object_buffer_temp[1][obj_modelid],
- object_buffer_temp[1][obj_txdname],
- object_buffer_temp[1][obj_texturename],
- object_buffer_temp[1][obj_materialcolor],
- object_buffer_temp[2][obj_compressstring],
- object_buffer_temp[2][obj_modelid],
- object_buffer_temp[2][obj_txdname],
- object_buffer_temp[2][obj_texturename],
- object_buffer_temp[2][obj_materialcolor],
- obj_TextSlotStr,
- objectid);
- mysql_tquery(sqlHandler,ALLQUERY,"@ReduceValue","");
- return 1;
- }
- @ReduceValue(){
- --save;
- if(save == 0){
- LIST_clear(object_cache);
- print("Map wurde gespeichert");
- }
- return 1;
- }
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- CMD->edittexture(playerid,params[]){
- if(!PlayerEditObject[playerid])return SendClientMessage(playerid,-1,"Du musst erst ein Objekt anklicken");
- new val[3],txdname[20],texturname[20];
- if(sscanf(params,"dds[20]s[20]H(0xFFFFFFFF)",val[0],val[1],txdname,texturname,val[2]))return SendClientMessage(playerid,-1,"Benutze: /edittexture [index] [modelid] [txdname] [texturname] [Farbe]");
- SetDynamicObjectMaterial(PlayerEditObject[playerid], val[0], val[1], txdname, texturname, val[2]);
- SendClientMessage(playerid,-1,"Du hast erfolgreich die Textur geändert");
- return 1;
- }
- CMD->edittext(playerid,params[]){
- if(!PlayerEditObject[playerid])return SendClientMessage(playerid,-1,"Du musst erst ein Objekt anklicken");
- new val[5],text[20],fontface[20];
- if(sscanf(params,"ds[20]s[20]ddhH(0x00FFFFFF)",val[0],text,fontface,val[1],val[2],val[3],val[4]))return SendClientMessage(playerid,-1,"Benutze: /edittext [index] [text] [fontface] [fontsize] [bold] [FontFarbe] [Backgroundcolor]");
- SetDynamicObjectMaterialText(PlayerEditObject[playerid], val[0],text,OBJECT_MATERIAL_SIZE_256x128, fontface, val[1], val[2], val[3], val[4], 0);
- SendClientMessage(playerid,-1,"Du hast erfolgreich eine Text auf das Objekt gesetzt");
- return 1;
- }
- CMD->edittexturep(playerid,params[]){
- new val[3],txdname[20],texturname[20],ObjectEdit[obj_edit_cache];
- if(sscanf(params,"dds[20]s[20]H(0xFFFFFFFF)",val[1],val[0],txdname,texturname,val[2]))return SendClientMessage(playerid,-1,"Benutze: /edittexturep [pointer] [modelid] [txdname] [texturname] [Farbe]");
- LIST_foreach_rev<i>(object_cache){
- MEM::get_arr(LIST_IT_data_ptr(i), _, ObjectEdit);
- if(ObjectEdit[obj_edit_pointer] != val[1])continue;
- SetDynamicObjectMaterial(ObjectEdit[obj_edit_id], ObjectEdit[obj_edit_index], val[0], txdname, texturname, val[2]);
- }
- SendClientMessage(playerid,-1,"Du hast erfolgreich die Texturen geändert");
- return 1;
- }
- CMD->removetexturall(playerid,params[]){
- if(!PlayerEditObject[playerid])return SendClientMessage(playerid,-1,"Du musst erst ein Objekt anklicken");
- for(new i,y=LIST_count_found(streamer_material, PlayerEditObject[playerid]); i != y; ++i) LIST::erase(streamer_material,LIST_find(streamer_material, PlayerEditObject[playerid]));
- for(new x; x != 50; ++x)SetDynamicObjectMaterial(PlayerEditObject[playerid],x, 0, "", "", 0,true);
- return 1;
- }
- CMD->duplicate(playerid,params[]){
- if(!PlayerEditObject[playerid])return SendClientMessage(playerid,-1,"Du musst erst ein Objekt anklicken");
- new Float:Pos[6],kommentar[64],obj[2],query[500];
- if(sscanf(params,"s[64]",kommentar))return SendClientMessage(playerid,-1,"Benutze: /duplicate [Kommentar]");
- obj[1] = Streamer_GetIntData(STREAMER_TYPE_OBJECT, PlayerEditObject[playerid], E_STREAMER_MODEL_ID);
- Streamer_GetFloatData(STREAMER_TYPE_OBJECT, PlayerEditObject[playerid], E_STREAMER_X, Pos[0]);
- Streamer_GetFloatData(STREAMER_TYPE_OBJECT, PlayerEditObject[playerid], E_STREAMER_Y, Pos[1]);
- Streamer_GetFloatData(STREAMER_TYPE_OBJECT, PlayerEditObject[playerid], E_STREAMER_Z, Pos[2]);
- Streamer_GetFloatData(STREAMER_TYPE_OBJECT, PlayerEditObject[playerid], E_STREAMER_R_X, Pos[3]);
- Streamer_GetFloatData(STREAMER_TYPE_OBJECT, PlayerEditObject[playerid], E_STREAMER_R_Y, Pos[4]);
- Streamer_GetFloatData(STREAMER_TYPE_OBJECT, PlayerEditObject[playerid], E_STREAMER_R_Z, Pos[5]);
- obj[0] = CreateDynamicObject(obj[1],Pos[0],Pos[1],Pos[2],Pos[3],Pos[4],Pos[5]);
- mysql_format(sqlHandler,query,500,"INSERT INTO `amazing_objects`(`Did`,`id`,`modelid`,`x`,`y`,`z`,`rx`,`ry`,`rz`,`material1`,`material2`,`material3`,`materialtext`,`kommentar`) \
- VALUES(0,%d,%d,%f,%f,%f,%f,%f,%f,'','','','','%e');",obj[0],obj[1],Pos[0],Pos[1],Pos[2],Pos[3],Pos[4],Pos[5],kommentar);
- mysql_tquery(sqlHandler,query,"","");
- new object_buffer[obj_mem_struct];
- LIST_foreach_rev<my_iterator>(streamer_material){
- MEM::get_arr(LIST_IT_data_ptr(my_iterator), _, object_buffer);
- if(PlayerEditObject[playerid] == object_buffer[obj_mem_objectid])SetDynamicObjectMaterial(obj[0], object_buffer[obj_mem_materialindex], object_buffer[obj_mem_modelid], object_buffer[obj_mem_txdname], object_buffer[obj_mem_texturename], object_buffer[obj_mem_materialcolor]);
- }
- new object_buffer2[obj_text_mem_struct];
- LIST_foreach_rev<my_iterator>(streamer_material_text){
- MEM::get_arr(LIST_IT_data_ptr(my_iterator), _, object_buffer2);
- if(PlayerEditObject[playerid] == object_buffer2[_obj_mem_objectid]){
- SetDynamicObjectMaterialText(obj[0], object_buffer2[_obj_mem_materialindex],object_buffer2[_obj_mem_text],object_buffer2[_obj_mem_materialsize], object_buffer2[_obj_mem_fontface], object_buffer2[_obj_mem_fontsize], object_buffer2[_obj_mem_bold],object_buffer2[_obj_mem_fontcolor],object_buffer2[_obj_mem_backcolor],object_buffer2[_obj_mem_textalignment]);
- }
- }
- EditDynamicObject(playerid, obj[0]);
- return 1;
- }
- CMD->removetextur(playerid,params[]){
- if(!PlayerEditObject[playerid])return SendClientMessage(playerid,-1,"Du musst erst ein Objekt anklicken");
- new array[2];
- if(sscanf(params,"d",array[1]))return SendClientMessage(playerid,-1,"Benutze /removetextur [index]");
- array[0] = PlayerEditObject[playerid];
- LIST::erase(streamer_material,LIST_find_arr(streamer_material, array));
- SetDynamicObjectMaterial(PlayerEditObject[playerid],array[1], 0, "", "", 0 ,true);
- return 1;
- }
- CMD->deleteobj(playerid,params[]){
- if(!PlayerEditObject[playerid])return SendClientMessage(playerid,-1,"Du musst erst ein Objekt anklicken");
- new query[100];
- DestroyDynamicObject(PlayerEditObject[playerid]);
- for(new i,y=LIST_count_found(streamer_material, PlayerEditObject[playerid]); i != y; ++i) LIST::erase(streamer_material,LIST_find(streamer_material, PlayerEditObject[playerid]));
- for(new i,y=LIST_count_found(streamer_material_text, PlayerEditObject[playerid]); i != y; ++i)LIST::erase(streamer_material_text,LIST_find(streamer_material_text, PlayerEditObject[playerid]));
- LIST::erase(object_cache,LIST_find(object_cache, PlayerEditObject[playerid]));
- mysql_format(sqlHandler,query,100,"DELETE FROM `amazing_objects` WHERE `id` = %d LIMIT 1;",PlayerEditObject[playerid]);
- mysql_tquery(sqlHandler,query,"","");
- CancelEdit(playerid);
- SelectObject(playerid);
- return 1;
- }
- CMD->setrot(playerid,params[]){
- if(!PlayerEditObject[playerid])return SendClientMessage(playerid,-1,"Du musst erst ein Objekt anklicken");
- new Float:Pos[3];
- if(sscanf(params,"fff",Pos[0],Pos[1],Pos[2]))return SendClientMessage(playerid,-1,"Benutze: /setrot [rotx] [roty] [rotz]");
- Streamer_SetFloatData(STREAMER_TYPE_OBJECT, PlayerEditObject[playerid], E_STREAMER_R_X, Pos[0]);
- Streamer_SetFloatData(STREAMER_TYPE_OBJECT, PlayerEditObject[playerid], E_STREAMER_R_Y, Pos[1]);
- Streamer_SetFloatData(STREAMER_TYPE_OBJECT, PlayerEditObject[playerid], E_STREAMER_R_Z, Pos[2]);
- PlayerValues[playerid] |= o_Rotate;
- return 1;
- }
- CMD->entflackern(playerid,params[]){
- if(!PlayerEditObject[playerid])return SendClientMessage(playerid,-1,"Du musst erst ein Objekt anklicken");
- PlayerValues[playerid] |= o_Move;
- return 1;
- }
- CMD->convertmap(playerid,params[]){
- new cMapName[64],query[128];
- if(sscanf(params,"s[64]",cMapName))return SendClientMessage(playerid,-1,"Benutze: /convertmap [mapname]");
- format(query,128,"/maps/%s.txt",cMapName);
- map = fopen(query, io_write);
- fwrite(map,"new obj;\r\n");
- mysql_format(sqlHandler,query,128,"SELECT * FROM `amazing_objects` WHERE `kommentar` = '%e';",cMapName);
- mysql_tquery(sqlHandler,query,"@ConvertMap","");
- return 1;
- }
- CMD->setpointer(playerid,params[]){
- if(!PlayerEditObject[playerid])return SendClientMessage(playerid,-1,"Du musst erst ein Objekt anklicken");
- new ObjectEdit[obj_edit_cache];
- if(sscanf(params,"dd",ObjectEdit[obj_edit_pointer],ObjectEdit[obj_edit_index]))return SendClientMessage(playerid,-1,"Benutzung: /setpointer [value] [index]");
- new ListIt:data = LIST_find(object_cache, PlayerEditObject[playerid]);
- if(data)LIST::erase(object_cache,data);
- ObjectEdit[obj_edit_id] = PlayerEditObject[playerid];
- LIST::push_back_arr(object_cache, ObjectEdit);
- SendClientMessage(playerid,-1,"Du hast den Point gesetzt");
- CancelEdit(playerid);
- SelectObject(playerid);
- return 1;
- }
- CMD->edit(playerid,params[]){
- return SelectObject(playerid);
- }
- CMD->editid(playerid,params[]){
- if(sscanf(params,"d",PlayerEditObject[playerid]))return SendClientMessage(playerid,-1,"Benutze: /create [id]");
- if(!IsValidDynamicObject(PlayerEditObject[playerid]))return PlayerEditObject[playerid] = 0,SendClientMessage(playerid,-1,"Dieses Objekt existiert nicht!");
- return EditDynamicObject(playerid,PlayerEditObject[playerid]);
- }
- CMD->saveobj(playerid,params[])
- {
- return @Update_Objects();
- }
- CMD->create(playerid,params[]){
- new Float:Pos[4],query[500],id,kommentar[64];
- if(sscanf(params,"ds[64]",id,kommentar))return SendClientMessage(playerid,-1,"Benutze: /create [id] [optional Kommentar]");
- GetPlayerPos(playerid,Pos[0],Pos[1],Pos[2]);
- GetPlayerFacingAngle(playerid,Pos[3]);
- PlayerEditObject[playerid] = CreateDynamicObject(id,Pos[0],Pos[1]+2.0,Pos[2],0.0,0.0,Pos[3]);
- format(query,64,"Du hast ein Objekt erstellt mit der id %d",PlayerEditObject[playerid]);
- SendClientMessage(playerid,-1,query);
- mysql_format(sqlHandler,query,500,"INSERT INTO `amazing_objects`(`Did`,`id`,`modelid`,`x`,`y`,`z`,`rx`,`ry`,`rz`,`material1`,`material2`,`material3`,`materialtext`,`kommentar`) \
- VALUES(0,%d,%d,%f,%f,%f,%f,%f,%f,'','','','','%e');",PlayerEditObject[playerid],id,Pos[0],Pos[1]+2.0,Pos[2],0.0,0.0,Pos[3],kommentar);
- mysql_tquery(sqlHandler,query,"","");
- EditDynamicObject(playerid,PlayerEditObject[playerid]);
- return 1;
- }
- CMD->deletemap(playerid,params[]){
- new cMapName[64],query[128];
- if(sscanf(params,"s[64]",cMapName))return SendClientMessage(playerid,-1,"Benutze: /convertmap [mapname]");
- mysql_format(sqlHandler,query,128,"SELECT `id` FROM `amazing_objects` WHERE `kommentar` = '%e';",cMapName);
- mysql_tquery(sqlHandler,query,"@DeleteMap","s",cMapName);
- return 1;
- }
- CMD->help(playerid,params[]){
- SendClientMessage(playerid,-1,"/create [id] [kommentar]");
- SendClientMessage(playerid,-1,"/setrot [rotx] [roty] [rotz]");
- SendClientMessage(playerid,-1,"/edit");
- SendClientMessage(playerid,-1,"/entflackern");
- SendClientMessage(playerid,-1,"/removetextur [index]");
- SendClientMessage(playerid,-1,"/removetexturall");
- SendClientMessage(playerid,-1,"/setpointer [pointer] [index]");
- SendClientMessage(playerid,-1,"/edittexturep [pointer] [modelid] [txdname] [texturname] [Farbe]");
- SendClientMessage(playerid,-1,"/edittext [index] [text] [fontface] [fontsize] [bold] [FontFarbe] [Backgroundcolor]");
- SendClientMessage(playerid,-1,"/edittexture [index] [modelid] [txdname] [texturname] [Farbe]");
- SendClientMessage(playerid,-1,"/duplicate [kommentar]");
- SendClientMessage(playerid,-1,"/deleteobj");
- SendClientMessage(playerid,-1,"/convertmap [mapname]");
- SendClientMessage(playerid,-1,"/deletemap [mapname]");
- SendClientMessage(playerid,-1,"/editid [objectid]");
- return 1;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement