08.11.2016, 23:07
[Ajuda] pawn compiler parou de funcionar
08.11.2016, 23:09
Geralmente isto acontece devido a uma quantidade de erros exorbitante! Verifique seu cуdigo para ver aonde estб o problema.
08.11.2016, 23:10
Codigo:
Код:
/*============================================================================== Southclaw's Scavenge and Survive Copyright © 2016 Barnaby "Southclaw" Keene This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. ==============================================================================*/ #include <YSI\y_hooks> #define DIRECTORY_PLAYER DIRECTORY_MAIN"player/" #define PLAYER_DATA_FILE DIRECTORY_PLAYER"%s.dat" #define PLAYER_DAT_FILE(%0,%1) format(%1, MAX_PLAYER_FILE, PLAYER_DATA_FILE, %0) #define CHARACTER_DATA_FILE_VERSION (10) #define MAX_BAG_CONTAINER_SIZE (14) static saveload_Loaded[MAX_PLAYERS], saveload_ItemList[ITM_LST_OF_ITEMS(MAX_BAG_CONTAINER_SIZE)]; enum { PLY_CELL_FILE_VERSION, PLY_CELL_HEALTH, PLY_CELL_ARMOUR, PLY_CELL_FOOD, PLY_CELL_SKIN, PLY_CELL_HAT, PLY_CELL_HOLST, PLY_CELL_HOLSTEX, PLY_CELL_HELD, PLY_CELL_HELDEX, PLY_CELL_STANCE, PLY_CELL_BLEEDING, PLY_CELL_CUFFED, PLY_CELL_WARNS, PLY_CELL_FREQ, PLY_CELL_CHATMODE, PLY_CELL_INFECTED, PLY_CELL_TOOLTIPS, PLY_CELL_SPAWN_X, PLY_CELL_SPAWN_Y, PLY_CELL_SPAWN_Z, PLY_CELL_SPAWN_R, PLY_CELL_MASK, PLY_CELL_MUTE_TIME, PLY_CELL_KNOCKOUT, PLY_CELL_BAGTYPE, PLY_CELL_WORLD, PLY_CELL_INTERIOR, PLY_CELL_END } forward OnPlayerSave(playerid, filename[]); forward OnPlayerLoad(playerid, filename[]); static HANDLER = -1; hook OnGameModeInit() { print("\n[OnGameModeInit] Initialising 'SaveLoad'..."); DirectoryCheck(DIRECTORY_SCRIPTFILES DIRECTORY_PLAYER); HANDLER = debug_register_handler("SaveLoad"); } hook OnPlayerConnect(playerid) { d:3:GLOBAL_DEBUG("[OnPlayerConnect] in /gamemodes/sss/core/player/save-load.pwn"); saveload_Loaded[playerid] = false; } SavePlayerChar(playerid) { if(IsPlayerOnAdminDuty(playerid)) return 0; new name[MAX_PLAYER_NAME], filename[MAX_PLAYER_FILE], session, data[ITM_ARR_MAX_ARRAY_DATA + 2], animidx = GetPlayerAnimationIndex(playerid), itemid, items[MAX_BAG_CONTAINER_SIZE], itemcount, itemlist; GetPlayerName(playerid, name, MAX_PLAYER_NAME); PLAYER_DAT_FILE(name, filename); session = modio_getsession_write(filename); if(session != -1) modio_close_session_write(session); /* Character */ data[PLY_CELL_HEALTH] = _:GetPlayerHP(playerid); data[PLY_CELL_ARMOUR] = _:GetPlayerAP(playerid); data[PLY_CELL_FOOD] = _:GetPlayerFP(playerid); data[PLY_CELL_SKIN] = GetPlayerClothes(playerid); data[PLY_CELL_HAT] = _:GetItemType(GetPlayerHatItem(playerid)); d:1:HANDLER("[SAVE:%p] CHR %.1f, %.1f, %.1f, %d, %d", playerid, data[PLY_CELL_HEALTH], data[PLY_CELL_ARMOUR], data[PLY_CELL_FOOD], data[PLY_CELL_SKIN], data[PLY_CELL_HAT]); if(GetPlayerSpecialAction(playerid) == SPECIAL_ACTION_DUCK) { data[PLY_CELL_STANCE] = 1; } else if(animidx == 43) { data[PLY_CELL_STANCE] = 2; } else if(animidx == 1381) { data[PLY_CELL_STANCE] = 3; } data[PLY_CELL_BLEEDING] = _:GetPlayerBleedRate(playerid); data[PLY_CELL_CUFFED] = (GetPlayerSpecialAction(playerid) == SPECIAL_ACTION_CUFFED); data[PLY_CELL_WARNS] = GetPlayerWarnings(playerid); data[PLY_CELL_FREQ] = _:GetPlayerRadioFrequency(playerid); data[PLY_CELL_CHATMODE] = GetPlayerChatMode(playerid); //data[PLY_CELL_INFECTED] = _:GetPlayerBitFlag(playerid, Infected); data[PLY_CELL_TOOLTIPS] = _:GetPlayerBitFlag(playerid, ToolTips); GetPlayerPos(playerid, Float:data[PLY_CELL_SPAWN_X], Float:data[PLY_CELL_SPAWN_Y], Float:data[PLY_CELL_SPAWN_Z]); GetPlayerFacingAngle(playerid, Float:data[PLY_CELL_SPAWN_R]); data[PLY_CELL_MASK] = _:GetItemType(GetPlayerMaskItem(playerid)); data[PLY_CELL_MUTE_TIME] = GetPlayerMuteRemainder(playerid); data[PLY_CELL_KNOCKOUT] = GetPlayerKnockOutRemainder(playerid); if(IsValidItem(GetPlayerBagItem(playerid))) data[PLY_CELL_BAGTYPE] = _:GetItemType(GetPlayerBagItem(playerid)); d:2:HANDLER("[SAVE:%p] BAG %d (itemid: %d)", playerid, data[PLY_CELL_BAGTYPE], GetPlayerBagItem(playerid)); data[PLY_CELL_WORLD] = GetPlayerVirtualWorld(playerid); data[PLY_CELL_INTERIOR] = GetPlayerInterior(playerid); modio_push(filename, _T<C,H,A,R>, PLY_CELL_END, data); /* Held item */ itemid = GetPlayerItem(playerid); if(IsValidItem(itemid)) { data[0] = _:GetItemType(itemid); data[1] = GetItemArrayDataSize(itemid); GetItemArrayData(itemid, data[2]); modio_push(filename, _T<H,E,L,D>, 2 + data[1], data); d:2:HANDLER("[SAVE:%p] HELD %d (%d adc) (itemid: %d)", playerid, data[0], data[1], itemid); } else { data[0] = -1; modio_push(filename, _T<H,E,L,D>, 1, data); } /* Holstered item */ itemid = GetPlayerHolsterItem(playerid); if(IsValidItem(itemid)) { data[0] = _:GetItemType(itemid); data[1] = GetItemArrayDataSize(itemid); GetItemArrayData(itemid, data[2]); modio_push(filename, _T<H,O,L,S>, 2 + data[1], data); d:2:HANDLER("[SAVE:%p] HOLS %d (%d adc) (itemid: %d)", playerid, data[0], data[1], itemid); } else { data[0] = -1; modio_push(filename, _T<H,O,L,S>, 1, data); } /* Inventory */ for(new i; i < INV_MAX_SLOTS; i++) { items[i] = GetInventorySlotItem(playerid, i); if(!IsValidItem(items[i])) break; itemcount++; d:2:HANDLER("[SAVE:%p] - Inv item %d: (%d type: %d)", playerid, i, items[i], _:GetItemType(items[i])); } itemlist = CreateItemList(items, itemcount); GetItemList(itemlist, saveload_ItemList); d:2:HANDLER("[SAVE:%p] Inv items: %d (itemlist: %d, size: %d)", playerid, itemcount, GetItemListItemCount(itemlist), GetItemListSize(itemlist)); modio_push(filename, _T<I,N,V,0>, GetItemListSize(itemlist), saveload_ItemList); DestroyItemList(itemlist); /* Bag */ itemcount = 0; if(IsValidItem(GetPlayerBagItem(playerid))) { new containerid = GetBagItemContainerID(GetPlayerBagItem(playerid)); for(new i, j = GetContainerSize(containerid); i < j && i < MAX_BAG_CONTAINER_SIZE; i++) { items[i] = GetContainerSlotItem(containerid, i); if(!IsValidItem(items[i])) break; itemcount++; d:2:HANDLER("[SAVE:%p] - Bag item %d (%d type: %d)", playerid, i, items[i], _:GetItemType(items[i])); } itemlist = CreateItemList(items, itemcount); GetItemList(itemlist, saveload_ItemList); d:2:HANDLER("[SAVE:%p] Bag items: %d (itemlist: %d, size: %d)", playerid, itemcount, GetItemListItemCount(itemlist), GetItemListSize(itemlist)); modio_push(filename, _T<B,A,G,0>, GetItemListSize(itemlist), saveload_ItemList); DestroyItemList(itemlist); } CallLocalFunction("OnPlayerSave", "ds", playerid, filename); return 1; } LoadPlayerChar(playerid) { new name[MAX_PLAYER_NAME], filename[MAX_PLAYER_FILE], data[ITM_ARR_MAX_ARRAY_DATA + 2], ItemType:itemtype, itemid, itemlist, length; GetPlayerName(playerid, name, MAX_PLAYER_NAME); PLAYER_DAT_FILE(name, filename); length = modio_read(filename, _T<C,H,A,R>, sizeof(data), data); if(length == 0) { length = FV10_LoadPlayerChar(playerid); length += FV10_LoadPlayerInventory(playerid); return length; } d:2:HANDLER("[LOAD:%p] CHR %.1f, %.1f, %.1f, %d, %d", playerid, data[PLY_CELL_HEALTH], data[PLY_CELL_ARMOUR], data[PLY_CELL_FOOD], data[PLY_CELL_SKIN], data[PLY_CELL_HAT]); /* Character */ if(Float:data[PLY_CELL_HEALTH] <= 0.0) data[PLY_CELL_HEALTH] = _:1.0; SetPlayerHP(playerid, Float:data[PLY_CELL_HEALTH]); SetPlayerAP(playerid, Float:data[PLY_CELL_ARMOUR]); SetPlayerFP(playerid, Float:data[PLY_CELL_FOOD]); SetPlayerClothesID(playerid, data[PLY_CELL_SKIN]); SetPlayerClothes(playerid, data[PLY_CELL_SKIN]); if(IsValidItemType(ItemType:data[PLY_CELL_HAT])) SetPlayerHatItem(playerid, CreateItem(ItemType:data[PLY_CELL_HAT])); if(GetPlayerAP(playerid) > 0.0) CreatePlayerArmour(playerid); /* Legacy code for old held/holstered item format. Depreciated because it only stores 1 cell of data (extradata) with items. These items are now stored in separate modio tags so the full array data is stored with them. */ if(data[PLY_CELL_HELD] > 0) { itemid = CreateItem(ItemType:data[PLY_CELL_HELD]); if(!IsItemTypeExtraDataDependent(ItemType:data[PLY_CELL_HELD])) SetItemExtraData(itemid, data[PLY_CELL_HELDEX]); if(0 < data[PLY_CELL_HELD] < WEAPON_PARACHUTE) { new ItemType:ammotype[1]; // Get the first ammo item type for this weapon's calibre. GetAmmoItemTypesOfCalibre(GetItemTypeWeaponCalibre(ItemType:data[PLY_CELL_HELD]), ammotype, 1); if(IsValidItemType(ammotype[0])) { SetItemWeaponItemAmmoItem(itemid, ammotype[0]); SetItemWeaponItemMagAmmo(itemid, 0); SetItemWeaponItemReserve(itemid, 0); AddAmmoToWeapon(itemid, data[PLY_CELL_HELDEX]); } } GiveWorldItemToPlayer(playerid, itemid); d:2:HANDLER("[LOAD:%p] OLD HELD %d (%d) (itemid: %d)", playerid, data[PLY_CELL_HELD], data[PLY_CELL_HELDEX], itemid); } if(data[PLY_CELL_HOLST] > 0) { itemid = CreateItem(ItemType:data[PLY_CELL_HOLST]); if(!IsItemTypeExtraDataDependent(ItemType:data[PLY_CELL_HOLST])) SetItemExtraData(itemid, data[PLY_CELL_HOLSTEX]); if(0 < data[PLY_CELL_HOLST] < WEAPON_PARACHUTE) { new ItemType:ammotype[1]; GetAmmoItemTypesOfCalibre(GetItemTypeWeaponCalibre(ItemType:data[PLY_CELL_HOLST]), ammotype, 1); if(IsValidItemType(ammotype[0])) { SetItemWeaponItemAmmoItem(itemid, ammotype[0]); SetItemWeaponItemMagAmmo(itemid, 0); SetItemWeaponItemReserve(itemid, 0); AddAmmoToWeapon(itemid, data[PLY_CELL_HOLSTEX]); } } SetPlayerHolsterItem(playerid, itemid); d:2:HANDLER("[LOAD:%p] OLD HOLS %d (%d) (itemid: %d)", playerid, data[PLY_CELL_HOLST], data[PLY_CELL_HOLSTEX], itemid); } if(data[PLY_CELL_BLEEDING] == 1) data[PLY_CELL_BLEEDING] = _:Float:0.01; if(Float:data[PLY_CELL_BLEEDING] > 1.0) data[PLY_CELL_BLEEDING] = _:(Float:data[PLY_CELL_BLEEDING] / 10.0); SetPlayerStance(playerid, data[PLY_CELL_STANCE]); SetPlayerBleedRate(playerid, Float:data[PLY_CELL_BLEEDING]); SetPlayerCuffs(playerid, data[PLY_CELL_CUFFED]); SetPlayerWarnings(playerid, data[PLY_CELL_WARNS]); SetPlayerRadioFrequency(playerid, Float:data[PLY_CELL_FREQ]); SetPlayerChatMode(playerid, data[PLY_CELL_CHATMODE]); //SetPlayerBitFlag(playerid, Infected, data[PLY_CELL_INFECTED]); SetPlayerBitFlag(playerid, ToolTips, data[PLY_CELL_TOOLTIPS]); SetPlayerSpawnPos(playerid, Float:data[PLY_CELL_SPAWN_X], Float:data[PLY_CELL_SPAWN_Y], Float:data[PLY_CELL_SPAWN_Z]); SetPlayerSpawnRot(playerid, Float:data[PLY_CELL_SPAWN_R]); if(IsValidItemType(ItemType:data[PLY_CELL_MASK])) SetPlayerMaskItem(playerid, CreateItem(ItemType:data[PLY_CELL_MASK])); if(data[PLY_CELL_MUTE_TIME] != 0) TogglePlayerMute(playerid, true, data[PLY_CELL_MUTE_TIME]); else TogglePlayerMute(playerid, false); if(data[PLY_CELL_KNOCKOUT] > 0) KnockOutPlayer(playerid, data[PLY_CELL_KNOCKOUT]); if(IsItemTypeBag(ItemType:data[PLY_CELL_BAGTYPE])) { itemid = CreateItem(ItemType:data[PLY_CELL_BAGTYPE], 0.0, 0.0, 0.0); GivePlayerBag(playerid, itemid); d:2:HANDLER("[LOAD:%p] BAG %d (itemid: %d)", playerid, data[PLY_CELL_BAGTYPE], itemid); } SetPlayerVirtualWorld(playerid, data[PLY_CELL_WORLD]); SetPlayerInterior(playerid, data[PLY_CELL_INTERIOR]); /* Held item */ data[0] = -1; length = modio_read(filename, _T<H,E,L,D>, sizeof(data), data); if(IsValidItemType(ItemType:data[0]) && length > 0) { itemid = AllocNextItemID(ItemType:data[0]); SetItemNoResetArrayData(itemid, true); SetItemArrayData(itemid, data[2], data[1]); CreateItem_ExplicitID(itemid); GiveWorldItemToPlayer(playerid, itemid); d:2:HANDLER("[LOAD:%p] HELD %d (%d adc) (itemid: %d)", playerid, data[0], data[1], itemid); } /* Holstered item */ data[0] = -1; length = modio_read(filename, _T<H,O,L,S>, sizeof(data), data); if(IsValidItemType(ItemType:data[0]) && length > 0) { itemid = AllocNextItemID(ItemType:data[0]); SetItemNoResetArrayData(itemid, true); SetItemArrayData(itemid, data[2], data[1]); CreateItem_ExplicitID(itemid); SetPlayerHolsterItem(playerid, itemid); d:2:HANDLER("[LOAD:%p] HOLS %d (%d adc) (itemid: %d)", playerid, data[0], data[1], itemid); } /* Inventory */ length = modio_read(filename, _T<I,N,V,0>, sizeof(saveload_ItemList), saveload_ItemList); itemlist = ExtractItemList(saveload_ItemList, length); d:2:HANDLER("[LOAD:%p] Inv items: %d", playerid, GetItemListItemCount(itemlist)); for(new i, j = GetItemListItemCount(itemlist); i < j; i++) { itemtype = GetItemListItem(itemlist, i); if(length == 0) break; if(itemtype == INVALID_ITEM_TYPE) break; if(itemtype == ItemType:0) break; itemid = CreateItem(itemtype, .virtual = 1); if(!IsItemTypeSafebox(itemtype) && !IsItemTypeBag(itemtype)) SetItemArrayDataFromListItem(itemid, itemlist, i); AddItemToInventory(playerid, itemid, 0); d:3:HANDLER("[LOAD:%p] - Inv item %d: %d", playerid, i, _:itemtype); } DestroyItemList(itemlist); /* Bag */ length = modio_read(filename, _T<B,A,G,0>, sizeof(saveload_ItemList), saveload_ItemList); itemlist = ExtractItemList(saveload_ItemList, length); if(IsItemTypeBag(ItemType:data[PLY_CELL_BAGTYPE])) { new containerid = GetBagItemContainerID(GetPlayerBagItem(playerid)); d:2:HANDLER("[LOAD:%p] Bag items: %d (itemlist size: %d)", playerid, GetItemListItemCount(itemlist), GetItemListSize(itemlist)); for(new i, j = GetItemListItemCount(itemlist); i < j; i++) { itemtype = GetItemListItem(itemlist, i); itemid = CreateItem(itemtype, .virtual = 1); if(!IsItemTypeSafebox(itemtype) && !IsItemTypeBag(itemtype)) SetItemArrayDataFromListItem(itemid, itemlist, i); AddItemToContainer(containerid, itemid); d:3:HANDLER("[LOAD:%p] - Bag item %d: (%d type: %d)", playerid, i, itemid, _:itemtype); } } DestroyItemList(itemlist); CallLocalFunction("OnPlayerLoad", "ds", playerid, filename); saveload_Loaded[playerid] = true; return 1; } /*============================================================================== Legacy format (Load only) ==============================================================================*/ #define PLAYER_INV_FILE(%0,%1) format(%1, MAX_PLAYER_FILE, "SSS/Inventory/%s.dat", %0) #define _R<%0> s[] enum { INV_CELL_ITEMS[INV_MAX_SLOTS * 3], INV_CELL_BAGITEMS[MAX_BAG_CONTAINER_SIZE * 3], INV_CELL_END } FV10_LoadPlayerChar(playerid) { new name[MAX_PLAYER_NAME], filename[MAX_PLAYER_FILE], File:file, data[PLY_CELL_END], itemid; GetPlayerName(playerid, name, MAX_PLAYER_NAME); PLAYER_DAT_FILE(name, filename); file = fopen(filename, io_read); if(!file) { printf("ERROR: [LoadPlayerChar] Opening file '%s'.", filename); return 0; } fblockread(file, data, sizeof(data)); fclose(file); if(data[PLY_CELL_FILE_VERSION] != CHARACTER_DATA_FILE_VERSION) { printf("ERROR: [LoadPlayerChar] Opening file '%s'. Incompatible file version %d (Current: %d)", filename, data[PLY_CELL_FILE_VERSION], CHARACTER_DATA_FILE_VERSION); return 0; } d:1:HANDLER("[LOAD:%p] CHR %.1f, %.1f, %.1f, %d, %d", playerid, data[PLY_CELL_HEALTH], data[PLY_CELL_ARMOUR], data[PLY_CELL_FOOD], data[PLY_CELL_SKIN], data[PLY_CELL_HAT]); if(Float:data[PLY_CELL_HEALTH] <= 0.0) data[PLY_CELL_HEALTH] = _:1.0; SetPlayerHP(playerid, Float:data[PLY_CELL_HEALTH]); SetPlayerAP(playerid, Float:data[PLY_CELL_ARMOUR]); SetPlayerFP(playerid, Float:data[PLY_CELL_FOOD]); SetPlayerClothesID(playerid, data[PLY_CELL_SKIN]); SetPlayerClothes(playerid, data[PLY_CELL_SKIN]); SetPlayerHatItem(playerid, data[PLY_CELL_HAT]); if(GetPlayerAP(playerid) > 0.0) CreatePlayerArmour(playerid); if(data[PLY_CELL_HOLST] != -1) { itemid = CreateItem(ItemType:data[PLY_CELL_HOLST]); SetItemExtraData(itemid, data[PLY_CELL_HOLSTEX]); SetPlayerHolsterItem(playerid, itemid); d:2:HANDLER("[LOAD:%p] HOLST %d (%d) (itemid: %d)", playerid, data[PLY_CELL_HOLST], data[PLY_CELL_HOLSTEX], itemid); } if(data[PLY_CELL_HELD] != -1) { if(0 < data[PLY_CELL_HELD] < WEAPON_PARACHUTE) { // SetPlayerWeapon(playerid, data[PLY_CELL_HELD], data[PLY_CELL_HELDEX]); } else { itemid = CreateItem(ItemType:data[PLY_CELL_HELD]); if(!IsItemTypeSafebox(ItemType:data[PLY_CELL_HELD]) && !IsItemTypeBag(ItemType:data[PLY_CELL_HELD])) SetItemExtraData(itemid, data[PLY_CELL_HELDEX]); GiveWorldItemToPlayer(playerid, itemid, false); } d:2:HANDLER("[LOAD:%p] HELD %d (%d) (itemid: %d)", playerid, data[PLY_CELL_HELD], data[PLY_CELL_HELDEX], itemid); } if(data[PLY_CELL_BLEEDING] == 1) data[PLY_CELL_BLEEDING] = _:Float:0.01; SetPlayerStance(playerid, data[PLY_CELL_STANCE]); SetPlayerBleedRate(playerid, data[PLY_CELL_BLEEDING]); SetPlayerCuffs(playerid, data[PLY_CELL_CUFFED]); SetPlayerWarnings(playerid, data[PLY_CELL_WARNS]); SetPlayerRadioFrequency(playerid, Float:data[PLY_CELL_FREQ]); SetPlayerChatMode(playerid, data[PLY_CELL_CHATMODE]); //SetPlayerBitFlag(playerid, Infected, data[PLY_CELL_INFECTED]); SetPlayerBitFlag(playerid, ToolTips, data[PLY_CELL_TOOLTIPS]); if(!IsPointInMapBounds(Float:data[PLY_CELL_SPAWN_X], Float:data[PLY_CELL_SPAWN_Y], Float:data[PLY_CELL_SPAWN_Z])) data[PLY_CELL_SPAWN_Z] += _:1.0; SetPlayerSpawnPos(playerid, Float:data[PLY_CELL_SPAWN_X], Float:data[PLY_CELL_SPAWN_Y], Float:data[PLY_CELL_SPAWN_Z]); SetPlayerSpawnRot(playerid, Float:data[PLY_CELL_SPAWN_R]); SetPlayerMaskItem(playerid, data[PLY_CELL_MASK]); if(data[PLY_CELL_MUTE_TIME] > 0) TogglePlayerMute(playerid, true, data[PLY_CELL_MUTE_TIME]); if(data[PLY_CELL_KNOCKOUT] > 0) KnockOutPlayer(playerid, data[PLY_CELL_KNOCKOUT]); if(IsItemTypeBag(ItemType:data[PLY_CELL_BAGTYPE])) { itemid = CreateItem(ItemType:data[PLY_CELL_BAGTYPE], 0.0, 0.0, 0.0); GivePlayerBag(playerid, itemid); d:2:HANDLER("[LOAD:%p] BAG %d (itemid: %d)", playerid, data[PLY_CELL_BAGTYPE], itemid); } return 1; } FV10_LoadPlayerInventory(playerid) { new name[MAX_PLAYER_NAME], filename[MAX_PLAYER_FILE], File:file, data[INV_CELL_END], itemid, containerid; GetPlayerName(playerid, name, MAX_PLAYER_NAME); PLAYER_INV_FILE(name, filename); file = fopen(filename, io_read); if(!file) { printf("ERROR: [LoadPlayerInventory] Opening file '%s'.", filename); return 0; } fblockread(file, data, sizeof(data)); fclose(file); for(new i; i < INV_MAX_SLOTS * 3; i += 3) { if(!IsValidItemType(ItemType:data[i]) || data[i] == 0) break; itemid = CreateItem(ItemType:data[i], 0.0, 0.0, 0.0); if(!IsItemTypeSafebox(ItemType:data[i]) && !IsItemTypeBag(ItemType:data[i])) SetItemExtraData(itemid, data[i + 2]); AddItemToInventory(playerid, itemid, 0); d:3:HANDLER("[LOAD:%p] INV %d, %d, %d", playerid, data[i], data[i + 1], data[i + 2]); } containerid = GetBagItemContainerID(GetPlayerBagItem(playerid)); if(IsValidContainer(containerid)) { for(new i = INV_CELL_BAGITEMS; i < INV_CELL_BAGITEMS + (GetContainerSize(containerid) * 3); i += 3) { if(data[i] == _:INVALID_ITEM_TYPE) continue; if(data[i] == 0) continue; itemid = CreateItem(ItemType:data[i], 0.0, 0.0, 0.0); if(!IsItemTypeSafebox(ItemType:data[i]) && !IsItemTypeBag(ItemType:data[i])) SetItemExtraData(itemid, data[i + 2]); AddItemToContainer(containerid, itemid); d:3:HANDLER("[LOAD:%p] BAG %d, %d, %d", playerid, data[i], data[i + 1], data[i + 2]); } } return 1; } /*============================================================================== Gamemode exit fix for modio ==============================================================================*/ hook OnScriptExit() { d:3:GLOBAL_DEBUG("[OnScriptExit] in /gamemodes/sss/core/player/save-load.pwn"); print("\n[OnScriptExit] Shutting down 'SaveLoad'..."); new name[MAX_PLAYER_NAME], filename[64], session; printf("Closing open modio sessions for player data."); foreach(new i : Player) { GetPlayerName(i, name, MAX_PLAYER_NAME); PLAYER_DAT_FILE(name, filename); session = modio_getsession_write(filename); printf("- Closing file '%s' for playerid: %d (session: %d)", filename, i, session); if(session != -1) modio_finalise_write(session, true); } } /*============================================================================== IO debug mode setting ==============================================================================*/ stock IsPlayerDataLoaded(playerid) { if(!IsPlayerConnected(playerid)) return 0; return saveload_Loaded[playerid]; }
« Next Oldest | Next Newest »
Users browsing this thread: 1 Guest(s)