30.09.2013, 15:04
This include is crashing my compiler. I have no idea why.
In which order did you include them? Copy & paste the #include stuff.
|
#include <a_samp>
#include <a_mysql>
#include <a_http>
#include <y_ini>
#include <foreach>
#include <sscanf2>
#include <rcmd>
#include <lookup>
#include <gvar>
#include <mselection>
#include <filemanager>
#include <strlib>
Problem signature: Problem Event Name: APPCRASH Application Name: pawncc.exe Application Version: 3.2.3664.0 Application Timestamp: 4655bfe0 Fault Module Name: PAWNC.dll Fault Module Version: 3.2.3664.0 Fault Module Timestamp: 4655bfdf Exception Code: c0000005 Exception Offset: 000119ec OS Version: 6.1.7601.2.1.0.256.1 Locale ID: 1045 Additional Information 1: 0a9e Additional Information 2: 0a9e372d3b4ad19135b953a78882e789 Additional Information 3: 0a9e Additional Information 4: 0a9e372d3b4ad19135b953a78882e789
#if !defined STRLIB_USE_FORMATEX
#if defined __fmt_funcinc
#if !defined FormatSpecifier
#error Please include formatex before strlib.
#endif
#define STRLIB_USE_FORMATEX true
#else
#define STRLIB_USE_FORMATEX false
#endif
#endif
stock sprintf(const fmat[], {Float, _}:...) {
static output[200], frm_header[3], heap;
const output_size = sizeof(output);
if (ispacked(fmat)) {
heap = CopyArgumentToHeap(0);
} else {
heap = 0;
}{}
// Store current frame header
#emit LCTRL 5
#emit CONST.alt frm_header
#emit MOVS 12
// Change the stack pointer to FRM + 12
#emit ADD.C 12 // pri is FRM (see above)
#emit SCTRL 4
// Push sizeof(output)
#emit PUSH.C output_size
// Push output
#emit PUSH.C output
// Push the argument count
#emit LOAD.S.pri 8
#emit ADD.C 8
#emit PUSH.pri
#if !STRLIB_USE_FORMATEX
const formatex = 0; // Dummy used to avoid "unknown symbol" error
goto do_sysreq;
#endif
// Call formatex (unless this was skipped above)
#emit LCTRL 6
#emit ADD.C 36
#emit PUSH.pri
#emit CONST.pri formatex
#emit SCTRL 6
#if !STRLIB_USE_FORMATEX
do_sysreq:
#endif
// Call format (unless formatex was called, in which case this is skipped)
#emit SYSREQ.C format
// Restore the stack pointer to FRM
#emit LCTRL 5
#emit SCTRL 4
// Copy back the frame header
#emit MOVE.alt
#emit CONST.pri frm_header
#emit MOVS 12
// Restore heap if needed
if (heap) {
RestoreHeapToAddress(heap);
}{}
// IMPORTANT: Fix compiler bug (returning strings in variadic functions)
#emit LOAD.S.pri 8
#emit ADD.C 12
#emit MOVE.alt
#emit LCTRL 5
#emit ADD
#emit LOAD.I
#emit STOR.S.pri 20 // 16 + (static_args * 4)
return output;
// It is actually used, just not by its symbol name
#pragma unused fmat
}
static stock CopyArgumentToHeap(arg, bool:pack = false, const argptr[] = "") {
new arg_address, address;
#emit LOAD.S.pri 0
#emit ADD.C 12
#emit LOAD.S.alt arg
#emit SHL.C.alt 2
#emit ADD
#emit LOAD.I
#emit STOR.S.pri arg_address
#emit STOR.S.pri argptr
if (pack) {
new bytes = ((strlen(argptr) + 1 + 3) / 4) * 4;
#emit LCTRL 2
#emit STOR.S.pri address
#emit LOAD.S.alt bytes
#emit ADD
#emit SCTRL 2
//strpack(dest[], const source[], maxlength = sizeof dest)
#emit LOAD.S.pri bytes
#emit SHR.C.pri 2
#emit PUSH.pri
#emit PUSH.S arg_address
#emit PUSH.S address
#emit PUSH.C 12
#emit SYSREQ.C strpack
#emit STACK 16
} else {
new bytes = (strlen(argptr) + 1) * 4;
#emit LCTRL 2
#emit STOR.S.pri address
#emit LOAD.S.alt bytes
#emit ADD
#emit SCTRL 2
//strunpack(dest[], const source[], maxlength = sizeof dest)
#emit LOAD.S.pri bytes
#emit SHR.C.pri 2
#emit PUSH.pri
#emit PUSH.S arg_address
#emit PUSH.S address
#emit PUSH.C 12
#emit SYSREQ.C strunpack
#emit STACK 16
}
#emit LOAD.S.pri 0
#emit ADD.C 12
#emit LOAD.S.alt arg
#emit SHL.C.alt 2
#emit ADD
#emit MOVE.alt
#emit LOAD.S.pri address
#emit STOR.I
return address;
}
static stock RestoreHeapToAddress(address) {
#emit LOAD.S.pri address
#emit SCTRL 2
}
str_pad like it is in PHP would be so helpful, and nice in this library
|
GetIPBytes(const ip_input[], ip_output[])
{
new octet_string[4][4],
octet_count = strexplode(octet_string, ip_input, ".");
for(new i; i < octet_count; i ++)
ip_output{i} = strval(octet_string[i]);
return octet_count;
}
#include <a_samp>
#include <strlib>
new bool: g_PlayerAdmin [MAX_PLAYERS char];
public OnPlayerConnect(playerid)
{
new ip_string[16],
ip_bytes[4 char];
GetPlayerIp(playerid, ip_string, sizeof ip_string);
GetIPBytes(ip_string, ip_bytes);
g_PlayerAdmin{playerid} = (ip_bytes{0} == 127 && ip_bytes{1} == 0 && ip_bytes{2} == 0 && ip_bytes{3} == 1) ? (true) : (false);
}